summaryrefslogtreecommitdiffhomepage
path: root/android/app/src
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2024-01-15 14:04:49 +0100
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2024-02-19 11:19:12 +0100
commit67542cba36e7982abb4a035af717a754684d13c2 (patch)
tree4f4ca23c1474de2d0ee69bfa074e577ef734b551 /android/app/src
parent7e1524b3e272aa422df6744f6afef697a2d7244a (diff)
downloadmullvadvpn-67542cba36e7982abb4a035af717a754684d13c2.tar.xz
mullvadvpn-67542cba36e7982abb4a035af717a754684d13c2.zip
Remove the auto-connect switch when vpn settings are available
Diffstat (limited to 'android/app/src')
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt32
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/di/UiModule.kt4
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/SystemVpnSettingsUseCase.kt9
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt6
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt5
6 files changed, 40 insertions, 19 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt
index 7a58771167..32beb656e5 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt
@@ -23,7 +23,6 @@ import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.stringResource
@@ -78,7 +77,6 @@ import net.mullvad.mullvadvpn.compose.test.LAZY_LIST_WIREGUARD_CUSTOM_PORT_TEXT_
import net.mullvad.mullvadvpn.compose.test.LAZY_LIST_WIREGUARD_PORT_ITEM_X_TEST_TAG
import net.mullvad.mullvadvpn.compose.transitions.SlideInFromRightTransition
import net.mullvad.mullvadvpn.constant.WIREGUARD_PRESET_PORTS
-import net.mullvad.mullvadvpn.lib.common.util.vpnSettingsAvailable
import net.mullvad.mullvadvpn.lib.theme.AppTheme
import net.mullvad.mullvadvpn.lib.theme.Dimens
import net.mullvad.mullvadvpn.model.Constraint
@@ -293,12 +291,11 @@ fun VpnSettingsScreen(
navigationIcon = { NavigateBackIconButton(onBackClick) },
snackbarHostState = snackbarHostState
) { modifier, lazyListState ->
- val context = LocalContext.current
LazyColumn(
modifier = modifier.testTag(LAZY_LIST_TEST_TAG).animateContentSize(),
state = lazyListState
) {
- if (context.vpnSettingsAvailable()) {
+ if (uiState.systemVpnSettingsAvailable) {
item {
Spacer(modifier = Modifier.height(Dimens.cellLabelVerticalPadding))
NavigationComposeCell(
@@ -311,18 +308,21 @@ fun VpnSettingsScreen(
text = stringResource(id = R.string.auto_connect_and_lockdown_mode_footer)
)
}
- }
- item {
- Spacer(modifier = Modifier.height(Dimens.cellLabelVerticalPadding))
- HeaderSwitchComposeCell(
- title = stringResource(R.string.auto_connect),
- isToggled = uiState.isAutoConnectEnabled,
- isEnabled = true,
- onCellClicked = { newValue -> onToggleAutoConnect(newValue) }
- )
- }
- item {
- SwitchComposeSubtitleCell(text = stringResource(id = R.string.auto_connect_footer))
+ } else {
+ item {
+ Spacer(modifier = Modifier.height(Dimens.cellLabelVerticalPadding))
+ HeaderSwitchComposeCell(
+ title = stringResource(R.string.auto_connect),
+ isToggled = uiState.isAutoConnectEnabled,
+ isEnabled = true,
+ onCellClicked = { newValue -> onToggleAutoConnect(newValue) }
+ )
+ }
+ item {
+ SwitchComposeSubtitleCell(
+ text = stringResource(id = R.string.auto_connect_footer)
+ )
+ }
}
item {
Spacer(modifier = Modifier.height(Dimens.cellLabelVerticalPadding))
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt
index 5525dee8ce..75abbc7cef 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt
@@ -20,6 +20,7 @@ data class VpnSettingsUiState(
val selectedWireguardPort: Constraint<Port>,
val customWireguardPort: Constraint<Port>?,
val availablePortRanges: List<PortRange>,
+ val systemVpnSettingsAvailable: Boolean,
) {
companion object {
@@ -35,6 +36,7 @@ data class VpnSettingsUiState(
selectedWireguardPort: Constraint<Port> = Constraint.Any(),
customWireguardPort: Constraint.Only<Port>? = null,
availablePortRanges: List<PortRange> = emptyList(),
+ systemVpnSettingsAvailable: Boolean = false,
) =
VpnSettingsUiState(
mtu,
@@ -48,6 +50,7 @@ data class VpnSettingsUiState(
selectedWireguardPort,
customWireguardPort,
availablePortRanges,
+ systemVpnSettingsAvailable
)
}
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/di/UiModule.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/di/UiModule.kt
index c62cf03851..0c96f72b3b 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/di/UiModule.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/di/UiModule.kt
@@ -34,6 +34,7 @@ import net.mullvad.mullvadvpn.usecase.PlayPaymentUseCase
import net.mullvad.mullvadvpn.usecase.PortRangeUseCase
import net.mullvad.mullvadvpn.usecase.RelayListFilterUseCase
import net.mullvad.mullvadvpn.usecase.RelayListUseCase
+import net.mullvad.mullvadvpn.usecase.SystemVpnSettingsUseCase
import net.mullvad.mullvadvpn.usecase.TunnelStateNotificationUseCase
import net.mullvad.mullvadvpn.usecase.VersionNotificationUseCase
import net.mullvad.mullvadvpn.util.ChangelogDataProvider
@@ -109,6 +110,7 @@ val uiModule = module {
single { RelayListUseCase(get(), get()) }
single { OutOfTimeUseCase(get(), get()) }
single { ConnectivityUseCase(get()) }
+ single { SystemVpnSettingsUseCase(androidContext()) }
single { InAppNotificationController(get(), get(), get(), get(), MainScope()) }
@@ -151,7 +153,7 @@ val uiModule = module {
viewModel { SettingsViewModel(get(), get(), IS_PLAY_BUILD) }
viewModel { SplashViewModel(get(), get(), get()) }
viewModel { VoucherDialogViewModel(get(), get()) }
- viewModel { VpnSettingsViewModel(get(), get(), get(), get()) }
+ viewModel { VpnSettingsViewModel(get(), get(), get(), get(), get()) }
viewModel { WelcomeViewModel(get(), get(), get(), get(), get(), isPlayBuild = IS_PLAY_BUILD) }
viewModel { ReportProblemViewModel(get(), get()) }
viewModel { ViewLogsViewModel(get()) }
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/SystemVpnSettingsUseCase.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/SystemVpnSettingsUseCase.kt
new file mode 100644
index 0000000000..a2ca2cdc64
--- /dev/null
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/SystemVpnSettingsUseCase.kt
@@ -0,0 +1,9 @@
+package net.mullvad.mullvadvpn.usecase
+
+import android.content.Context
+import android.content.Intent
+
+class SystemVpnSettingsUseCase(val context: Context) {
+ fun systemVpnSettingsAvailable(): Boolean =
+ Intent("android.net.vpn.SETTINGS").resolveActivity(context.packageManager) != null
+}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt
index 3e88ccc28a..3a5514d3d3 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt
@@ -36,6 +36,7 @@ import net.mullvad.mullvadvpn.model.WireguardConstraints
import net.mullvad.mullvadvpn.repository.SettingsRepository
import net.mullvad.mullvadvpn.usecase.PortRangeUseCase
import net.mullvad.mullvadvpn.usecase.RelayListUseCase
+import net.mullvad.mullvadvpn.usecase.SystemVpnSettingsUseCase
import net.mullvad.mullvadvpn.util.isCustom
sealed interface VpnSettingsSideEffect {
@@ -49,6 +50,7 @@ class VpnSettingsViewModel(
private val resources: Resources,
portRangeUseCase: PortRangeUseCase,
private val relayListUseCase: RelayListUseCase,
+ private val systemVpnSettingsUseCase: SystemVpnSettingsUseCase,
private val dispatcher: CoroutineDispatcher = Dispatchers.IO
) : ViewModel() {
@@ -75,7 +77,9 @@ class VpnSettingsViewModel(
quantumResistant = settings?.quantumResistant() ?: QuantumResistantState.Off,
selectedWireguardPort = settings?.getWireguardPort() ?: Constraint.Any(),
customWireguardPort = customWgPort,
- availablePortRanges = portRanges
+ availablePortRanges = portRanges,
+ systemVpnSettingsAvailable =
+ systemVpnSettingsUseCase.systemVpnSettingsAvailable()
)
}
.stateIn(
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt
index fd236e8405..91866d5cc2 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt
@@ -20,6 +20,7 @@ data class VpnSettingsViewModelState(
val selectedWireguardPort: Constraint<Port>,
val customWireguardPort: Constraint<Port>?,
val availablePortRanges: List<PortRange>,
+ val systemVpnSettingsAvailable: Boolean,
) {
fun toUiState(): VpnSettingsUiState =
VpnSettingsUiState(
@@ -34,6 +35,7 @@ data class VpnSettingsViewModelState(
selectedWireguardPort,
customWireguardPort,
availablePortRanges,
+ systemVpnSettingsAvailable
)
companion object {
@@ -51,7 +53,8 @@ data class VpnSettingsViewModelState(
quantumResistant = QuantumResistantState.Off,
selectedWireguardPort = Constraint.Any(),
customWireguardPort = null,
- availablePortRanges = emptyList()
+ availablePortRanges = emptyList(),
+ systemVpnSettingsAvailable = false
)
}
}