diff options
| author | saber safavi <saber.safavi@codic.se> | 2023-04-12 14:27:43 +0200 |
|---|---|---|
| committer | saber safavi <saber.safavi@codic.se> | 2023-04-12 18:00:52 +0200 |
| commit | b7d94b839595ced3f400f6fae01bc93341e8c664 (patch) | |
| tree | ced655cece5c40d70880e8b72356abae1c7056d3 /android/app/src | |
| parent | 76d538cc9a9c37215cc51dc47fe5d8bcebc9e47b (diff) | |
| download | mullvadvpn-b7d94b839595ced3f400f6fae01bc93341e8c664.tar.xz mullvadvpn-b7d94b839595ced3f400f6fae01bc93341e8c664.zip | |
Fix custom dns auto disabling regression
Diffstat (limited to 'android/app/src')
3 files changed, 36 insertions, 10 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AdvancedSettingScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AdvancedSettingScreen.kt index 472ba2a2e8..ecbcfe5d23 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AdvancedSettingScreen.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AdvancedSettingScreen.kt @@ -16,6 +16,7 @@ import androidx.compose.material.Divider import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -23,10 +24,14 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleEventObserver +import androidx.lifecycle.LifecycleOwner import me.onebone.toolbar.ScrollStrategy import me.onebone.toolbar.rememberCollapsingToolbarScaffoldState import net.mullvad.mullvadvpn.R @@ -91,6 +96,7 @@ private fun PreviewAdvancedSettings() { @ExperimentalMaterialApi @Composable fun AdvancedSettingScreen( + lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current, uiState: AdvancedSettingsUiState, onMtuCellClick: () -> Unit = {}, onMtuInputChange: (String) -> Unit = {}, @@ -112,7 +118,8 @@ fun AdvancedSettingScreen( onContentsBlockersInfoClicked: () -> Unit = {}, onMalwareInfoClicked: () -> Unit = {}, onDismissInfoClicked: () -> Unit = {}, - onBackClick: () -> Unit = {} + onBackClick: () -> Unit = {}, + onStopEvent: () -> Unit = {} ) { val cellVerticalSpacing = dimensionResource(id = R.dimen.cell_label_vertical_padding) val cellHorizontalSpacing = dimensionResource(id = R.dimen.cell_left_padding) @@ -178,6 +185,15 @@ fun AdvancedSettingScreen( ) } ) { + DisposableEffect(lifecycleOwner) { + val observer = LifecycleEventObserver { _, event -> + if (event == Lifecycle.Event.ON_STOP) { + onStopEvent() + } + } + lifecycleOwner.lifecycle.addObserver(observer) + onDispose { lifecycleOwner.lifecycle.removeObserver(observer) } + } LazyColumn( modifier = Modifier.drawVerticalScrollbar(lazyListState) diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/AdvancedFragment.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/AdvancedFragment.kt index 6eee351e78..a928397453 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/AdvancedFragment.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/AdvancedFragment.kt @@ -46,7 +46,8 @@ class AdvancedFragment : BaseFragment() { onContentsBlockersInfoClicked = vm::onContentsBlockerInfoClick, onMalwareInfoClicked = vm::onMalwareInfoClick, onDismissInfoClicked = vm::onDismissInfoClick, - onBackClick = { activity?.onBackPressed() } + onBackClick = { activity?.onBackPressed() }, + onStopEvent = vm::onStopEvent ) } } diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/AdvancedSettingsViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/AdvancedSettingsViewModel.kt index 4b23735f3d..540ed235ce 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/AdvancedSettingsViewModel.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/AdvancedSettingsViewModel.kt @@ -192,14 +192,7 @@ class AdvancedSettingsViewModel( hideDialog() } - fun onToggleDnsClick(isEnabled: Boolean) = - viewModelScope.launch(dispatcher) { - repository.setDnsOptions( - isEnabled, - dnsList = vmState.value.customDnsList.map { it.address }.asInetAddressList(), - contentBlockersOptions = vmState.value.contentBlockersOptions - ) - } + fun onToggleDnsClick(isEnabled: Boolean) = updateCustomDnsState(isEnabled) fun onToggleBlockAds(isEnabled: Boolean) { updateDefaultDnsOptionsViaRepository( @@ -251,6 +244,12 @@ class AdvancedSettingsViewModel( hideDialog() } + fun onStopEvent() { + if (vmState.value.customDnsList.isEmpty()) { + updateCustomDnsState(false) + } + } + private fun updateDefaultDnsOptionsViaRepository(contentBlockersOption: DefaultDnsOptions) = viewModelScope.launch(dispatcher) { repository.setDnsOptions( @@ -305,6 +304,16 @@ class AdvancedSettingsViewModel( return isLinkLocalAddress || isSiteLocalAddress } + private fun updateCustomDnsState(isEnabled: Boolean) { + viewModelScope.launch(dispatcher) { + repository.setDnsOptions( + isEnabled, + dnsList = vmState.value.customDnsList.map { it.address }.asInetAddressList(), + contentBlockersOptions = vmState.value.contentBlockersOptions + ) + } + } + companion object { private const val EMPTY_STRING = "" } |
