summaryrefslogtreecommitdiffhomepage
path: root/android/src/main
diff options
context:
space:
mode:
authorAleksandr Granin <aleksandr@mullvad.net>2021-08-25 11:21:26 +0200
committerAleksandr Granin <aleksandr@mullvad.net>2021-08-26 13:18:19 +0200
commit6c45ecf5774699cd30943d876098b83123fe5a3f (patch)
treebae411ef41eec9a93b01739095aec1d97773a93c /android/src/main
parent3505ee0839bafa942a8e8a244b211783122bb5bc (diff)
downloadmullvadvpn-6c45ecf5774699cd30943d876098b83123fe5a3f.tar.xz
mullvadvpn-6c45ecf5774699cd30943d876098b83123fe5a3f.zip
Add ViewIntent for system apps appearing
Diffstat (limited to 'android/src/main')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/applist/AppData.kt7
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/applist/ViewIntent.kt1
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragments/SplitTunnelingFragment.kt11
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModel.kt20
-rw-r--r--android/src/main/res/values/strings.xml1
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>