diff options
| author | Aleksandr Granin <aleksandr@mullvad.net> | 2021-08-25 11:21:26 +0200 |
|---|---|---|
| committer | Aleksandr Granin <aleksandr@mullvad.net> | 2021-08-26 13:18:19 +0200 |
| commit | 6c45ecf5774699cd30943d876098b83123fe5a3f (patch) | |
| tree | bae411ef41eec9a93b01739095aec1d97773a93c /android/src | |
| parent | 3505ee0839bafa942a8e8a244b211783122bb5bc (diff) | |
| download | mullvadvpn-6c45ecf5774699cd30943d876098b83123fe5a3f.tar.xz mullvadvpn-6c45ecf5774699cd30943d876098b83123fe5a3f.zip | |
Add ViewIntent for system apps appearing
Diffstat (limited to 'android/src')
5 files changed, 35 insertions, 5 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/AppData.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/AppData.kt index c6c3246a13..ec5912c244 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/AppData.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/AppData.kt @@ -1,3 +1,8 @@ package net.mullvad.mullvadvpn.applist -data class AppData(val packageName: String, val iconRes: Int, val name: String, val isSystemApp: Boolean = false) +data class AppData( + val packageName: String, + val iconRes: Int, + val name: String, + val isSystemApp: Boolean = false +) diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/ViewIntent.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/ViewIntent.kt index f1c15abbb8..47391f2971 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/ViewIntent.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/ViewIntent.kt @@ -6,4 +6,5 @@ sealed class ViewIntent { // In future we will have search intent data class ChangeApplicationGroup(val item: ListItemData) : ViewIntent() object ViewIsReady : ViewIntent() + data class ShowSystemApps(internal val show: Boolean) : ViewIntent() } diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragments/SplitTunnelingFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragments/SplitTunnelingFragment.kt index 82d647fc3b..494753845f 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragments/SplitTunnelingFragment.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragments/SplitTunnelingFragment.kt @@ -22,6 +22,8 @@ import net.mullvad.mullvadvpn.applist.ViewIntent import net.mullvad.mullvadvpn.di.APPS_SCOPE import net.mullvad.mullvadvpn.di.SERVICE_CONNECTION_SCOPE import net.mullvad.mullvadvpn.model.ListItemData +import net.mullvad.mullvadvpn.model.WidgetState.ImageState +import net.mullvad.mullvadvpn.model.WidgetState.SwitchState import net.mullvad.mullvadvpn.ui.ListItemDividerDecoration import net.mullvad.mullvadvpn.ui.ListItemListener import net.mullvad.mullvadvpn.ui.ListItemsAdapter @@ -46,10 +48,14 @@ class SplitTunnelingFragment : BaseFragment(R.layout.collapsed_title_layout) { ViewModelOwner.from(this, this) } ) + private val toggleSystemAppsVisibility = Channel<Boolean>(Channel.CONFLATED) private val toggleExcludeChannel = Channel<ListItemData>(Channel.BUFFERED) private val listItemListener = object : ListItemListener { override fun onItemAction(item: ListItemData) { - toggleExcludeChannel.offer(item) + when (item.widget) { + is ImageState -> toggleExcludeChannel.offer(item) + is SwitchState -> toggleSystemAppsVisibility.offer(!item.widget.isChecked) + } } } @@ -100,7 +106,8 @@ class SplitTunnelingFragment : BaseFragment(R.layout.collapsed_title_layout) { private fun intents(): Flow<ViewIntent> = merge( transitionFinishedFlow.map { ViewIntent.ViewIsReady }, - toggleExcludeChannel.consumeAsFlow().map { ViewIntent.ChangeApplicationGroup(it) } + toggleExcludeChannel.consumeAsFlow().map { ViewIntent.ChangeApplicationGroup(it) }, + toggleSystemAppsVisibility.consumeAsFlow().map { ViewIntent.ShowSystemApps(it) } ) private fun tweakMargin(view: View) { diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModel.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModel.kt index 9e18a90ab7..71db6686ca 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModel.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModel.kt @@ -38,6 +38,7 @@ class SplitTunnelingViewModel( createTextItem(R.string.split_tunneling_description) // We will have search item in future ) + private var isSystemAppsVisible = false init { viewModelScope.launch(dispatcher) { @@ -73,6 +74,10 @@ class SplitTunnelingViewModel( } } is ViewIntent.ViewIsReady -> isUIReady.complete(Unit) + is ViewIntent.ShowSystemApps -> { + isSystemAppsVisible = viewIntent.show + publishList() + } } } @@ -112,10 +117,13 @@ class SplitTunnelingViewModel( createApplicationItem(info, true) } } - if (notExcludedApps.isNotEmpty()) { + val shownNotExcludedApps = + notExcludedApps.filter { app -> !app.value.isSystemApp || isSystemAppsVisible } + if (shownNotExcludedApps.isNotEmpty()) { listItems += createDivider(1) + listItems += createSwitchItem(R.string.show_system_apps, isSystemAppsVisible) listItems += createMainItem(R.string.all_applications) - listItems += notExcludedApps.values.sortedBy { it.name }.map { info -> + listItems += shownNotExcludedApps.values.sortedBy { it.name }.map { info -> createApplicationItem(info, false) } } @@ -153,4 +161,12 @@ class SplitTunnelingViewModel( private fun createProgressItem(): ListItemData = ListItemData.build(identifier = "progress") { type = ListItemData.PROGRESS } + + private fun createSwitchItem(@StringRes text: Int, checked: Boolean): ListItemData = + ListItemData.build(identifier = "switch_$text") { + type = ListItemData.ACTION + textRes = text + action = ListItemData.ItemAction(text.toString()) + widget = WidgetState.SwitchState(checked) + } } diff --git a/android/src/main/res/values/strings.xml b/android/src/main/res/values/strings.xml index 6202fe7bbb..f9351cbb13 100644 --- a/android/src/main/res/values/strings.xml +++ b/android/src/main/res/values/strings.xml @@ -181,4 +181,5 @@ <string name="download_url">https://mullvad.net/en/download</string> <string name="faqs_and_guides_url">https://mullvad.net/en/help/tag/mullvad-app/</string> <string name="copied_to_clipboard">Copied to clipboard</string> + <string name="show_system_apps">Show system apps</string> </resources> |
