summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorsaber safavi <saber.safavi@codic.se>2023-04-12 14:27:43 +0200
committersaber safavi <saber.safavi@codic.se>2023-04-12 18:00:52 +0200
commitb7d94b839595ced3f400f6fae01bc93341e8c664 (patch)
treeced655cece5c40d70880e8b72356abae1c7056d3
parent76d538cc9a9c37215cc51dc47fe5d8bcebc9e47b (diff)
downloadmullvadvpn-b7d94b839595ced3f400f6fae01bc93341e8c664.tar.xz
mullvadvpn-b7d94b839595ced3f400f6fae01bc93341e8c664.zip
Fix custom dns auto disabling regression
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AdvancedSettingScreen.kt18
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/AdvancedFragment.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/AdvancedSettingsViewModel.kt25
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 = ""
}