diff options
| author | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2024-01-15 14:04:49 +0100 |
|---|---|---|
| committer | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2024-02-19 11:19:12 +0100 |
| commit | 67542cba36e7982abb4a035af717a754684d13c2 (patch) | |
| tree | 4f4ca23c1474de2d0ee69bfa074e577ef734b551 /android/app/src | |
| parent | 7e1524b3e272aa422df6744f6afef697a2d7244a (diff) | |
| download | mullvadvpn-67542cba36e7982abb4a035af717a754684d13c2.tar.xz mullvadvpn-67542cba36e7982abb4a035af717a754684d13c2.zip | |
Remove the auto-connect switch when vpn settings are available
Diffstat (limited to 'android/app/src')
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 ) } } |
