diff options
| author | saber safavi <saber.safavi@codic.se> | 2023-05-16 11:38:05 +0200 |
|---|---|---|
| committer | saber safavi <saber.safavi@codic.se> | 2023-05-16 15:01:26 +0200 |
| commit | 51f61038823ac4b573ab1d3267e805a574997429 (patch) | |
| tree | 25f0955f7d5d5c1ffecff906d08810e613f2fad6 /android/app/src | |
| parent | 780a986731484c84a42f7a813920fa7373be6a1a (diff) | |
| download | mullvadvpn-51f61038823ac4b573ab1d3267e805a574997429.tar.xz mullvadvpn-51f61038823ac4b573ab1d3267e805a574997429.zip | |
Refactor advanced settings to VPN settings
Diffstat (limited to 'android/app/src')
| -rw-r--r-- | android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreenTest.kt (renamed from android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/AdvancedSettingsScreenTest.kt) | 112 | ||||
| -rw-r--r-- | android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt (renamed from android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AdvancedSettingScreen.kt) | 26 | ||||
| -rw-r--r-- | android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt (renamed from android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/AdvancedSettingsUiState.kt) | 18 | ||||
| -rw-r--r-- | android/app/src/main/kotlin/net/mullvad/mullvadvpn/di/UiModule.kt | 4 | ||||
| -rw-r--r-- | android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/SettingsFragment.kt | 10 | ||||
| -rw-r--r-- | android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/VpnSettingsFragment.kt (renamed from android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/AdvancedFragment.kt) | 10 | ||||
| -rw-r--r-- | android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt (renamed from android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/AdvancedSettingsViewModel.kt) | 42 | ||||
| -rw-r--r-- | android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt (renamed from android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/AdvancedSettingsViewModelState.kt) | 60 | ||||
| -rw-r--r-- | android/app/src/main/res/layout/settings.xml | 2 |
9 files changed, 140 insertions, 144 deletions
diff --git a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/AdvancedSettingsScreenTest.kt b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreenTest.kt index 970e877b80..6714d5490d 100644 --- a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/AdvancedSettingsScreenTest.kt +++ b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreenTest.kt @@ -17,7 +17,7 @@ import io.mockk.verify import io.mockk.verifyAll import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.asSharedFlow -import net.mullvad.mullvadvpn.compose.state.AdvancedSettingsUiState +import net.mullvad.mullvadvpn.compose.state.VpnSettingsUiState import net.mullvad.mullvadvpn.compose.test.LAZY_LIST_LAST_ITEM_TEST_TAG import net.mullvad.mullvadvpn.compose.test.LAZY_LIST_TEST_TAG import net.mullvad.mullvadvpn.viewmodel.CustomDnsItem @@ -26,7 +26,7 @@ import org.junit.Before import org.junit.Rule import org.junit.Test -class AdvancedSettingsScreenTest { +class VpnSettingsScreenTest { @get:Rule val composeTestRule = createComposeRule() @Before @@ -39,8 +39,8 @@ class AdvancedSettingsScreenTest { fun testDefaultState() { // Arrange composeTestRule.setContent { - AdvancedSettingScreen( - uiState = AdvancedSettingsUiState.DefaultUiState(), + VpnSettingsScreen( + uiState = VpnSettingsUiState.DefaultUiState(), toastMessagesSharedFlow = MutableSharedFlow<String>().asSharedFlow() ) } @@ -60,8 +60,8 @@ class AdvancedSettingsScreenTest { fun testMtuCustomValue() { // Arrange composeTestRule.setContent { - AdvancedSettingScreen( - uiState = AdvancedSettingsUiState.DefaultUiState(mtu = VALID_DUMMY_MTU_VALUE), + VpnSettingsScreen( + uiState = VpnSettingsUiState.DefaultUiState(mtu = VALID_DUMMY_MTU_VALUE), toastMessagesSharedFlow = MutableSharedFlow<String>().asSharedFlow() ) } @@ -76,8 +76,8 @@ class AdvancedSettingsScreenTest { // Arrange val mockedClickHandler: () -> Unit = mockk(relaxed = true) composeTestRule.setContent { - AdvancedSettingScreen( - uiState = AdvancedSettingsUiState.DefaultUiState(), + VpnSettingsScreen( + uiState = VpnSettingsUiState.DefaultUiState(), onMtuCellClick = mockedClickHandler, toastMessagesSharedFlow = MutableSharedFlow<String>().asSharedFlow() ) @@ -95,8 +95,8 @@ class AdvancedSettingsScreenTest { fun testMtuDialogWithDefaultValue() { // Arrange composeTestRule.setContent { - AdvancedSettingScreen( - uiState = AdvancedSettingsUiState.MtuDialogUiState(mtuEditValue = EMPTY_STRING), + VpnSettingsScreen( + uiState = VpnSettingsUiState.MtuDialogUiState(mtuEditValue = EMPTY_STRING), toastMessagesSharedFlow = MutableSharedFlow<String>().asSharedFlow() ) } @@ -110,9 +110,8 @@ class AdvancedSettingsScreenTest { fun testMtuDialogWithEditValue() { // Arrange composeTestRule.setContent { - AdvancedSettingScreen( - uiState = - AdvancedSettingsUiState.MtuDialogUiState(mtuEditValue = VALID_DUMMY_MTU_VALUE), + VpnSettingsScreen( + uiState = VpnSettingsUiState.MtuDialogUiState(mtuEditValue = VALID_DUMMY_MTU_VALUE), toastMessagesSharedFlow = MutableSharedFlow<String>().asSharedFlow() ) } @@ -127,8 +126,8 @@ class AdvancedSettingsScreenTest { // Arrange val mockedInputHandler: (String) -> Unit = mockk(relaxed = true) composeTestRule.setContent { - AdvancedSettingScreen( - uiState = AdvancedSettingsUiState.MtuDialogUiState(mtuEditValue = EMPTY_STRING), + VpnSettingsScreen( + uiState = VpnSettingsUiState.MtuDialogUiState(mtuEditValue = EMPTY_STRING), onMtuInputChange = mockedInputHandler, toastMessagesSharedFlow = MutableSharedFlow<String>().asSharedFlow() ) @@ -147,9 +146,8 @@ class AdvancedSettingsScreenTest { // Arrange val mockedSubmitHandler: () -> Unit = mockk(relaxed = true) composeTestRule.setContent { - AdvancedSettingScreen( - uiState = - AdvancedSettingsUiState.MtuDialogUiState(mtuEditValue = VALID_DUMMY_MTU_VALUE), + VpnSettingsScreen( + uiState = VpnSettingsUiState.MtuDialogUiState(mtuEditValue = VALID_DUMMY_MTU_VALUE), onSaveMtuClick = mockedSubmitHandler, toastMessagesSharedFlow = MutableSharedFlow<String>().asSharedFlow() ) @@ -167,11 +165,9 @@ class AdvancedSettingsScreenTest { fun testMtuDialogSubmitButtonDisabledWhenInvalidInput() { // Arrange composeTestRule.setContent { - AdvancedSettingScreen( + VpnSettingsScreen( uiState = - AdvancedSettingsUiState.MtuDialogUiState( - mtuEditValue = INVALID_DUMMY_MTU_VALUE - ), + VpnSettingsUiState.MtuDialogUiState(mtuEditValue = INVALID_DUMMY_MTU_VALUE), toastMessagesSharedFlow = MutableSharedFlow<String>().asSharedFlow() ) } @@ -186,8 +182,8 @@ class AdvancedSettingsScreenTest { // Arrange val mockedClickHandler: () -> Unit = mockk(relaxed = true) composeTestRule.setContent { - AdvancedSettingScreen( - uiState = AdvancedSettingsUiState.MtuDialogUiState(mtuEditValue = EMPTY_STRING), + VpnSettingsScreen( + uiState = VpnSettingsUiState.MtuDialogUiState(mtuEditValue = EMPTY_STRING), onRestoreMtuClick = mockedClickHandler, toastMessagesSharedFlow = MutableSharedFlow<String>().asSharedFlow() ) @@ -206,8 +202,8 @@ class AdvancedSettingsScreenTest { // Arrange val mockedClickHandler: () -> Unit = mockk(relaxed = true) composeTestRule.setContent { - AdvancedSettingScreen( - uiState = AdvancedSettingsUiState.MtuDialogUiState(mtuEditValue = EMPTY_STRING), + VpnSettingsScreen( + uiState = VpnSettingsUiState.MtuDialogUiState(mtuEditValue = EMPTY_STRING), onCancelMtuDialogClicked = mockedClickHandler, toastMessagesSharedFlow = MutableSharedFlow<String>().asSharedFlow() ) @@ -226,8 +222,8 @@ class AdvancedSettingsScreenTest { // Arrange val mockedClickHandler: () -> Unit = mockk(relaxed = true) composeTestRule.setContent { - AdvancedSettingScreen( - uiState = AdvancedSettingsUiState.DefaultUiState(), + VpnSettingsScreen( + uiState = VpnSettingsUiState.DefaultUiState(), onSplitTunnelingNavigationClick = mockedClickHandler, toastMessagesSharedFlow = MutableSharedFlow<String>().asSharedFlow() ) @@ -245,9 +241,9 @@ class AdvancedSettingsScreenTest { fun testCustomDnsAddressesAndAddButtonVisibleWhenCustomDnsEnabled() { // Arrange composeTestRule.setContent { - AdvancedSettingScreen( + VpnSettingsScreen( uiState = - AdvancedSettingsUiState.DefaultUiState( + VpnSettingsUiState.DefaultUiState( isCustomDnsEnabled = true, isAllowLanEnabled = false, customDnsItems = @@ -277,9 +273,9 @@ class AdvancedSettingsScreenTest { fun testCustomDnsAddressesAndAddButtonNotVisibleWhenCustomDnsDisabled() { // Arrange composeTestRule.setContent { - AdvancedSettingScreen( + VpnSettingsScreen( uiState = - AdvancedSettingsUiState.DefaultUiState( + VpnSettingsUiState.DefaultUiState( isCustomDnsEnabled = false, customDnsItems = listOf(CustomDnsItem(address = DUMMY_DNS_ADDRESS, false)) ), @@ -299,9 +295,9 @@ class AdvancedSettingsScreenTest { fun testLanWarningNotShownWhenLanTrafficEnabledAndLocalAddressIsUsed() { // Arrange composeTestRule.setContent { - AdvancedSettingScreen( + VpnSettingsScreen( uiState = - AdvancedSettingsUiState.DefaultUiState( + VpnSettingsUiState.DefaultUiState( isCustomDnsEnabled = true, isAllowLanEnabled = true, customDnsItems = @@ -320,9 +316,9 @@ class AdvancedSettingsScreenTest { fun testLanWarningNotShowedWhenLanTrafficDisabledAndLocalAddressIsNotUsed() { // Arrange composeTestRule.setContent { - AdvancedSettingScreen( + VpnSettingsScreen( uiState = - AdvancedSettingsUiState.DefaultUiState( + VpnSettingsUiState.DefaultUiState( isCustomDnsEnabled = true, isAllowLanEnabled = false, customDnsItems = @@ -341,9 +337,9 @@ class AdvancedSettingsScreenTest { fun testLanWarningNotShowedWhenLanTrafficEnabledAndLocalAddressIsNotUsed() { // Arrange composeTestRule.setContent { - AdvancedSettingScreen( + VpnSettingsScreen( uiState = - AdvancedSettingsUiState.DefaultUiState( + VpnSettingsUiState.DefaultUiState( isCustomDnsEnabled = true, isAllowLanEnabled = true, customDnsItems = @@ -362,9 +358,9 @@ class AdvancedSettingsScreenTest { fun testLanWarningShowedWhenAllowLanEnabledAndLocalDnsAddressIsUsed() { // Arrange composeTestRule.setContent { - AdvancedSettingScreen( + VpnSettingsScreen( uiState = - AdvancedSettingsUiState.DefaultUiState( + VpnSettingsUiState.DefaultUiState( isCustomDnsEnabled = true, isAllowLanEnabled = false, customDnsItems = @@ -386,8 +382,8 @@ class AdvancedSettingsScreenTest { // Arrange val mockedClickHandler: (Int?) -> Unit = mockk(relaxed = true) composeTestRule.setContent { - AdvancedSettingScreen( - uiState = AdvancedSettingsUiState.DefaultUiState(isCustomDnsEnabled = true), + VpnSettingsScreen( + uiState = VpnSettingsUiState.DefaultUiState(isCustomDnsEnabled = true), onDnsClick = mockedClickHandler, toastMessagesSharedFlow = MutableSharedFlow<String>().asSharedFlow() ) @@ -408,9 +404,9 @@ class AdvancedSettingsScreenTest { fun testShowDnsDialogForNewDnsServer() { // Arrange composeTestRule.setContent { - AdvancedSettingScreen( + VpnSettingsScreen( uiState = - AdvancedSettingsUiState.DnsDialogUiState( + VpnSettingsUiState.DnsDialogUiState( stagedDns = StagedDns.NewDns( item = CustomDnsItem(DUMMY_DNS_ADDRESS, isLocal = false) @@ -429,9 +425,9 @@ class AdvancedSettingsScreenTest { fun testShowDnsDialogForUpdatingDnsServer() { // Arrange composeTestRule.setContent { - AdvancedSettingScreen( + VpnSettingsScreen( uiState = - AdvancedSettingsUiState.DnsDialogUiState( + VpnSettingsUiState.DnsDialogUiState( stagedDns = StagedDns.EditDns( item = CustomDnsItem(DUMMY_DNS_ADDRESS, isLocal = false), @@ -451,9 +447,9 @@ class AdvancedSettingsScreenTest { fun testDnsDialogLanWarningShownWhenLanTrafficDisabledAndLocalAddressUsed() { // Arrange composeTestRule.setContent { - AdvancedSettingScreen( + VpnSettingsScreen( uiState = - AdvancedSettingsUiState.DnsDialogUiState( + VpnSettingsUiState.DnsDialogUiState( stagedDns = StagedDns.NewDns( item = CustomDnsItem(DUMMY_DNS_ADDRESS, isLocal = true), @@ -474,9 +470,9 @@ class AdvancedSettingsScreenTest { fun testDnsDialogLanWarningNotShownWhenLanTrafficEnabledAndLocalAddressUsed() { // Arrange composeTestRule.setContent { - AdvancedSettingScreen( + VpnSettingsScreen( uiState = - AdvancedSettingsUiState.DnsDialogUiState( + VpnSettingsUiState.DnsDialogUiState( stagedDns = StagedDns.NewDns( item = CustomDnsItem(DUMMY_DNS_ADDRESS, isLocal = true), @@ -497,9 +493,9 @@ class AdvancedSettingsScreenTest { fun testDnsDialogLanWarningNotShownWhenLanTrafficEnabledAndNonLocalAddressUsed() { // Arrange composeTestRule.setContent { - AdvancedSettingScreen( + VpnSettingsScreen( uiState = - AdvancedSettingsUiState.DnsDialogUiState( + VpnSettingsUiState.DnsDialogUiState( stagedDns = StagedDns.NewDns( item = CustomDnsItem(DUMMY_DNS_ADDRESS, isLocal = false), @@ -520,9 +516,9 @@ class AdvancedSettingsScreenTest { fun testDnsDialogLanWarningNotShownWhenLanTrafficDisabledAndNonLocalAddressUsed() { // Arrange composeTestRule.setContent { - AdvancedSettingScreen( + VpnSettingsScreen( uiState = - AdvancedSettingsUiState.DnsDialogUiState( + VpnSettingsUiState.DnsDialogUiState( stagedDns = StagedDns.NewDns( item = CustomDnsItem(DUMMY_DNS_ADDRESS, isLocal = false), @@ -543,9 +539,9 @@ class AdvancedSettingsScreenTest { fun testDnsDialogSubmitButtonDisabledOnInvalidDnsAddress() { // Arrange composeTestRule.setContent { - AdvancedSettingScreen( + VpnSettingsScreen( uiState = - AdvancedSettingsUiState.DnsDialogUiState( + VpnSettingsUiState.DnsDialogUiState( stagedDns = StagedDns.NewDns( item = CustomDnsItem(DUMMY_DNS_ADDRESS, isLocal = false), @@ -565,9 +561,9 @@ class AdvancedSettingsScreenTest { fun testDnsDialogSubmitButtonDisabledOnDuplicateDnsAddress() { // Arrange composeTestRule.setContent { - AdvancedSettingScreen( + VpnSettingsScreen( uiState = - AdvancedSettingsUiState.DnsDialogUiState( + VpnSettingsUiState.DnsDialogUiState( stagedDns = StagedDns.NewDns( item = CustomDnsItem(DUMMY_DNS_ADDRESS, isLocal = false), 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/VpnSettingsScreen.kt index 7d971e7e8e..507fbeb37d 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/VpnSettingsScreen.kt @@ -64,7 +64,7 @@ import net.mullvad.mullvadvpn.compose.dialog.MalwareInfoDialog import net.mullvad.mullvadvpn.compose.dialog.MtuDialog import net.mullvad.mullvadvpn.compose.dialog.ObfuscationInfoDialog import net.mullvad.mullvadvpn.compose.extensions.itemWithDivider -import net.mullvad.mullvadvpn.compose.state.AdvancedSettingsUiState +import net.mullvad.mullvadvpn.compose.state.VpnSettingsUiState import net.mullvad.mullvadvpn.compose.test.LAZY_LIST_LAST_ITEM_TEST_TAG import net.mullvad.mullvadvpn.compose.test.LAZY_LIST_TEST_TAG import net.mullvad.mullvadvpn.compose.theme.MullvadBlue20 @@ -76,10 +76,10 @@ import net.mullvad.mullvadvpn.viewmodel.CustomDnsItem @OptIn(ExperimentalMaterialApi::class) @Preview @Composable -private fun PreviewAdvancedSettings() { - AdvancedSettingScreen( +private fun PreviewVpnSettings() { + VpnSettingsScreen( uiState = - AdvancedSettingsUiState.DefaultUiState( + VpnSettingsUiState.DefaultUiState( isAutoConnectEnabled = true, mtu = "1337", isCustomDnsEnabled = true, @@ -120,9 +120,9 @@ private fun PreviewAdvancedSettings() { @OptIn(ExperimentalFoundationApi::class) @ExperimentalMaterialApi @Composable -fun AdvancedSettingScreen( +fun VpnSettingsScreen( lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current, - uiState: AdvancedSettingsUiState, + uiState: VpnSettingsUiState, onMtuCellClick: () -> Unit = {}, onMtuInputChange: (String) -> Unit = {}, onSaveMtuClick: () -> Unit = {}, @@ -157,7 +157,7 @@ fun AdvancedSettingScreen( val cellHorizontalSpacing = dimensionResource(id = R.dimen.cell_left_padding) when (uiState) { - is AdvancedSettingsUiState.MtuDialogUiState -> { + is VpnSettingsUiState.MtuDialogUiState -> { MtuDialog( mtuValue = uiState.mtuEditValue, onMtuValueChanged = { onMtuInputChange(it) }, @@ -166,7 +166,7 @@ fun AdvancedSettingScreen( onDismiss = { onCancelMtuDialogClicked() } ) } - is AdvancedSettingsUiState.DnsDialogUiState -> { + is VpnSettingsUiState.DnsDialogUiState -> { DnsDialog( stagedDns = uiState.stagedDns, isAllowLanEnabled = uiState.isAllowLanEnabled, @@ -176,19 +176,19 @@ fun AdvancedSettingScreen( onDismiss = { onCancelDnsDialogClick() } ) } - is AdvancedSettingsUiState.LocalNetworkSharingInfoDialogUiState -> { + is VpnSettingsUiState.LocalNetworkSharingInfoDialogUiState -> { LocalNetworkSharingInfoDialog(onDismissInfoClicked) } - is AdvancedSettingsUiState.ContentBlockersInfoDialogUiState -> { + is VpnSettingsUiState.ContentBlockersInfoDialogUiState -> { ContentBlockersInfoDialog(onDismissInfoClicked) } - is AdvancedSettingsUiState.CustomDnsInfoDialogUiState -> { + is VpnSettingsUiState.CustomDnsInfoDialogUiState -> { CustomDnsInfoDialog(onDismissInfoClicked) } - is AdvancedSettingsUiState.MalwareInfoDialogUiState -> { + is VpnSettingsUiState.MalwareInfoDialogUiState -> { MalwareInfoDialog(onDismissInfoClicked) } - is AdvancedSettingsUiState.ObfuscationInfoDialogUiState -> { + is VpnSettingsUiState.ObfuscationInfoDialogUiState -> { ObfuscationInfoDialog(onDismissInfoClicked) } else -> { diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/AdvancedSettingsUiState.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt index 261714f8f9..f5315278ab 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/AdvancedSettingsUiState.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt @@ -5,7 +5,7 @@ import net.mullvad.mullvadvpn.model.SelectedObfuscation import net.mullvad.mullvadvpn.viewmodel.CustomDnsItem import net.mullvad.mullvadvpn.viewmodel.StagedDns -sealed interface AdvancedSettingsUiState { +sealed interface VpnSettingsUiState { val mtu: String val isAutoConnectEnabled: Boolean val isLocalNetworkSharingEnabled: Boolean @@ -24,7 +24,7 @@ sealed interface AdvancedSettingsUiState { override val customDnsItems: List<CustomDnsItem> = listOf(), override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(), override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off - ) : AdvancedSettingsUiState + ) : VpnSettingsUiState data class MtuDialogUiState( override val mtu: String = "", @@ -36,7 +36,7 @@ sealed interface AdvancedSettingsUiState { override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(), val mtuEditValue: String, override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off - ) : AdvancedSettingsUiState + ) : VpnSettingsUiState data class DnsDialogUiState( override val mtu: String = "", @@ -48,7 +48,7 @@ sealed interface AdvancedSettingsUiState { override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(), val stagedDns: StagedDns, override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off - ) : AdvancedSettingsUiState + ) : VpnSettingsUiState data class LocalNetworkSharingInfoDialogUiState( override val mtu: String = "", @@ -59,7 +59,7 @@ sealed interface AdvancedSettingsUiState { override val customDnsItems: List<CustomDnsItem> = listOf(), override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(), override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off - ) : AdvancedSettingsUiState + ) : VpnSettingsUiState data class ContentBlockersInfoDialogUiState( override val mtu: String = "", @@ -70,7 +70,7 @@ sealed interface AdvancedSettingsUiState { override val customDnsItems: List<CustomDnsItem> = listOf(), override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(), override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off - ) : AdvancedSettingsUiState + ) : VpnSettingsUiState data class CustomDnsInfoDialogUiState( override val mtu: String = "", @@ -81,7 +81,7 @@ sealed interface AdvancedSettingsUiState { override val customDnsItems: List<CustomDnsItem> = listOf(), override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(), override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off - ) : AdvancedSettingsUiState + ) : VpnSettingsUiState data class MalwareInfoDialogUiState( override val mtu: String = "", @@ -92,7 +92,7 @@ sealed interface AdvancedSettingsUiState { override val customDnsItems: List<CustomDnsItem> = listOf(), override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(), override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off - ) : AdvancedSettingsUiState + ) : VpnSettingsUiState data class ObfuscationInfoDialogUiState( override val mtu: String = "", @@ -103,5 +103,5 @@ sealed interface AdvancedSettingsUiState { override val customDnsItems: List<CustomDnsItem> = listOf(), override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(), override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off - ) : AdvancedSettingsUiState + ) : VpnSettingsUiState } 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 2a5f82b7aa..26703d98ec 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 @@ -21,7 +21,6 @@ import net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnectionManager import net.mullvad.mullvadvpn.ui.serviceconnection.SplitTunneling import net.mullvad.mullvadvpn.util.ChangelogDataProvider import net.mullvad.mullvadvpn.util.IChangelogDataProvider -import net.mullvad.mullvadvpn.viewmodel.AdvancedSettingsViewModel import net.mullvad.mullvadvpn.viewmodel.ChangelogViewModel import net.mullvad.mullvadvpn.viewmodel.ConnectViewModel import net.mullvad.mullvadvpn.viewmodel.DeviceListViewModel @@ -29,6 +28,7 @@ import net.mullvad.mullvadvpn.viewmodel.DeviceRevokedViewModel import net.mullvad.mullvadvpn.viewmodel.LoginViewModel import net.mullvad.mullvadvpn.viewmodel.PrivacyDisclaimerViewModel import net.mullvad.mullvadvpn.viewmodel.SplitTunnelingViewModel +import net.mullvad.mullvadvpn.viewmodel.VpnSettingsViewModel import org.apache.commons.validator.routines.InetAddressValidator import org.koin.android.ext.koin.androidApplication import org.koin.android.ext.koin.androidContext @@ -89,7 +89,7 @@ val uiModule = module { } viewModel { PrivacyDisclaimerViewModel(get()) } viewModel { - AdvancedSettingsViewModel( + VpnSettingsViewModel( get(), get(), get(), diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/SettingsFragment.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/SettingsFragment.kt index ff3a8edcf0..db1f41e5ad 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/SettingsFragment.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/SettingsFragment.kt @@ -47,7 +47,7 @@ class SettingsFragment : BaseFragment(), StatusBarPainter, NavigationBarPainter private lateinit var accountMenu: AccountCell private lateinit var appVersionMenu: AppVersionCell - private lateinit var advancedMenu: View + private lateinit var vpnSettingsMenu: View private lateinit var titleController: CollapsibleTitleController @Deprecated("Refactor code to instead rely on Lifecycle.") private val jobTracker = JobTracker() @@ -71,9 +71,9 @@ class SettingsFragment : BaseFragment(), StatusBarPainter, NavigationBarPainter targetFragment = AccountFragment::class } - advancedMenu = - view.findViewById<NavigateCell>(R.id.advanced).apply { - targetFragment = AdvancedFragment::class + vpnSettingsMenu = + view.findViewById<NavigateCell>(R.id.vpn_settings).apply { + targetFragment = VpnSettingsFragment::class } view.findViewById<NavigateCell>(R.id.report_a_problem).apply { @@ -179,7 +179,7 @@ class SettingsFragment : BaseFragment(), StatusBarPainter, NavigationBarPainter } accountMenu.visibility = visibility - advancedMenu.visibility = visibility + vpnSettingsMenu.visibility = visibility } private fun updateVersionInfo(versionInfo: VersionInfo) { 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/VpnSettingsFragment.kt index a7dbc8116d..f934612e98 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/VpnSettingsFragment.kt @@ -8,13 +8,13 @@ import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.runtime.collectAsState import androidx.compose.ui.platform.ComposeView import net.mullvad.mullvadvpn.R -import net.mullvad.mullvadvpn.compose.screen.AdvancedSettingScreen +import net.mullvad.mullvadvpn.compose.screen.VpnSettingsScreen import net.mullvad.mullvadvpn.compose.theme.AppTheme -import net.mullvad.mullvadvpn.viewmodel.AdvancedSettingsViewModel +import net.mullvad.mullvadvpn.viewmodel.VpnSettingsViewModel import org.koin.androidx.viewmodel.ext.android.viewModel -class AdvancedFragment : BaseFragment() { - private val vm by viewModel<AdvancedSettingsViewModel>() +class VpnSettingsFragment : BaseFragment() { + private val vm by viewModel<VpnSettingsViewModel>() @OptIn(ExperimentalMaterialApi::class) override fun onCreateView( @@ -26,7 +26,7 @@ class AdvancedFragment : BaseFragment() { findViewById<ComposeView>(R.id.compose_view).setContent { AppTheme { val state = vm.uiState.collectAsState().value - AdvancedSettingScreen( + VpnSettingsScreen( uiState = state, onMtuCellClick = vm::onMtuCellClick, onMtuInputChange = vm::onMtuInputChange, diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/AdvancedSettingsViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt index 6990b7036e..9943ae60b6 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/AdvancedSettingsViewModel.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt @@ -17,7 +17,7 @@ import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import net.mullvad.mullvadvpn.R -import net.mullvad.mullvadvpn.compose.state.AdvancedSettingsUiState +import net.mullvad.mullvadvpn.compose.state.VpnSettingsUiState import net.mullvad.mullvadvpn.model.Constraint import net.mullvad.mullvadvpn.model.DefaultDnsOptions import net.mullvad.mullvadvpn.model.DnsState @@ -29,7 +29,7 @@ import net.mullvad.mullvadvpn.repository.SettingsRepository import net.mullvad.mullvadvpn.util.isValidMtu import org.apache.commons.validator.routines.InetAddressValidator -class AdvancedSettingsViewModel( +class VpnSettingsViewModel( private val repository: SettingsRepository, private val inetAddressValidator: InetAddressValidator, private val resources: Resources, @@ -40,11 +40,11 @@ class AdvancedSettingsViewModel( val toastMessages = _toastMessages.asSharedFlow() private val dialogState = - MutableStateFlow<AdvancedSettingsDialogState>(AdvancedSettingsDialogState.NoDialog) + MutableStateFlow<VpnSettingsDialogState>(VpnSettingsDialogState.NoDialog) private val vmState = combine(repository.settingsUpdates, dialogState) { settings, dialogState -> - AdvancedSettingsViewModelState( + VpnSettingsViewModelState( mtuValue = settings?.mtuString() ?: "", isAutoConnectEnabled = settings?.autoConnect ?: false, isLocalNetworkSharingEnabled = settings?.allowLan ?: false, @@ -61,29 +61,29 @@ class AdvancedSettingsViewModel( .stateIn( viewModelScope, SharingStarted.WhileSubscribed(), - AdvancedSettingsViewModelState.default() + VpnSettingsViewModelState.default() ) val uiState = vmState - .map(AdvancedSettingsViewModelState::toUiState) + .map(VpnSettingsViewModelState::toUiState) .stateIn( viewModelScope, SharingStarted.WhileSubscribed(), - AdvancedSettingsUiState.DefaultUiState() + VpnSettingsUiState.DefaultUiState() ) fun onMtuCellClick() { - dialogState.update { AdvancedSettingsDialogState.MtuDialog(vmState.value.mtuValue) } + dialogState.update { VpnSettingsDialogState.MtuDialog(vmState.value.mtuValue) } } fun onMtuInputChange(value: String) { - dialogState.update { AdvancedSettingsDialogState.MtuDialog(value) } + dialogState.update { VpnSettingsDialogState.MtuDialog(value) } } fun onSaveMtuClick() = viewModelScope.launch(dispatcher) { - val dialog = dialogState.value as? AdvancedSettingsDialogState.MtuDialog + val dialog = dialogState.value as? VpnSettingsDialogState.MtuDialog dialog ?.mtuEditValue ?.toIntOrNull() @@ -103,19 +103,19 @@ class AdvancedSettingsViewModel( } fun onLocalNetworkSharingInfoClick() { - dialogState.update { AdvancedSettingsDialogState.LocalNetworkSharingInfoDialog } + dialogState.update { VpnSettingsDialogState.LocalNetworkSharingInfoDialog } } fun onContentsBlockerInfoClick() { - dialogState.update { AdvancedSettingsDialogState.ContentBlockersInfoDialog } + dialogState.update { VpnSettingsDialogState.ContentBlockersInfoDialog } } fun onCustomDnsInfoClick() { - dialogState.update { AdvancedSettingsDialogState.CustomDnsInfoDialog } + dialogState.update { VpnSettingsDialogState.CustomDnsInfoDialog } } fun onMalwareInfoClick() { - dialogState.update { AdvancedSettingsDialogState.MalwareInfoDialog } + dialogState.update { VpnSettingsDialogState.MalwareInfoDialog } } fun onDismissInfoClick() { @@ -136,13 +136,13 @@ class AdvancedSettingsViewModel( } if (stagedDns != null) { - dialogState.update { AdvancedSettingsDialogState.DnsDialog(stagedDns) } + dialogState.update { VpnSettingsDialogState.DnsDialog(stagedDns) } } } fun onDnsInputChange(ipAddress: String) { dialogState.update { state -> - val dialog = state as? AdvancedSettingsDialogState.DnsDialog ?: return + val dialog = state as? VpnSettingsDialogState.DnsDialog ?: return val error = when { @@ -155,7 +155,7 @@ class AdvancedSettingsViewModel( else -> StagedDns.ValidationResult.Success } - return@update AdvancedSettingsDialogState.DnsDialog( + return@update VpnSettingsDialogState.DnsDialog( stagedDns = if (dialog.stagedDns is StagedDns.EditDns) { StagedDns.EditDns( @@ -184,7 +184,7 @@ class AdvancedSettingsViewModel( fun onSaveDnsClick() = viewModelScope.launch(dispatcher) { val dialog = - vmState.value.dialogState as? AdvancedSettingsDialogState.DnsDialog ?: return@launch + vmState.value.dialogState as? VpnSettingsDialogState.DnsDialog ?: return@launch if (dialog.stagedDns.isValid().not()) return@launch @@ -267,7 +267,7 @@ class AdvancedSettingsViewModel( fun onRemoveDnsClick() = viewModelScope.launch(dispatcher) { val dialog = - vmState.value.dialogState as? AdvancedSettingsDialogState.DnsDialog ?: return@launch + vmState.value.dialogState as? VpnSettingsDialogState.DnsDialog ?: return@launch val updatedList = vmState.value.customDnsList @@ -302,7 +302,7 @@ class AdvancedSettingsViewModel( } fun onObfuscationInfoClicked() { - dialogState.update { AdvancedSettingsDialogState.ObfuscationInfoDialog } + dialogState.update { VpnSettingsDialogState.ObfuscationInfoDialog } } private fun updateDefaultDnsOptionsViaRepository(contentBlockersOption: DefaultDnsOptions) = @@ -315,7 +315,7 @@ class AdvancedSettingsViewModel( } private fun hideDialog() { - dialogState.update { AdvancedSettingsDialogState.NoDialog } + dialogState.update { VpnSettingsDialogState.NoDialog } } private fun String.isDuplicateDns(stagedIndex: Int? = null): Boolean { diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/AdvancedSettingsViewModelState.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt index 640f4f64ac..05ca44feb7 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/AdvancedSettingsViewModelState.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt @@ -1,10 +1,10 @@ package net.mullvad.mullvadvpn.viewmodel -import net.mullvad.mullvadvpn.compose.state.AdvancedSettingsUiState +import net.mullvad.mullvadvpn.compose.state.VpnSettingsUiState import net.mullvad.mullvadvpn.model.DefaultDnsOptions import net.mullvad.mullvadvpn.model.SelectedObfuscation -data class AdvancedSettingsViewModelState( +data class VpnSettingsViewModelState( val mtuValue: String, val isAutoConnectEnabled: Boolean, val isLocalNetworkSharingEnabled: Boolean, @@ -13,12 +13,12 @@ data class AdvancedSettingsViewModelState( val customDnsList: List<CustomDnsItem>, val contentBlockersOptions: DefaultDnsOptions, val selectedObfuscation: SelectedObfuscation, - val dialogState: AdvancedSettingsDialogState + val dialogState: VpnSettingsDialogState ) { - fun toUiState(): AdvancedSettingsUiState { + fun toUiState(): VpnSettingsUiState { return when (dialogState) { - is AdvancedSettingsDialogState.MtuDialog -> - AdvancedSettingsUiState.MtuDialogUiState( + is VpnSettingsDialogState.MtuDialog -> + VpnSettingsUiState.MtuDialogUiState( mtu = mtuValue, isAutoConnectEnabled = isAutoConnectEnabled, isLocalNetworkSharingEnabled = isLocalNetworkSharingEnabled, @@ -29,8 +29,8 @@ data class AdvancedSettingsViewModelState( mtuEditValue = dialogState.mtuEditValue, selectedObfuscation = selectedObfuscation ) - is AdvancedSettingsDialogState.DnsDialog -> - AdvancedSettingsUiState.DnsDialogUiState( + is VpnSettingsDialogState.DnsDialog -> + VpnSettingsUiState.DnsDialogUiState( mtu = mtuValue, isAutoConnectEnabled = isAutoConnectEnabled, isLocalNetworkSharingEnabled = isLocalNetworkSharingEnabled, @@ -41,8 +41,8 @@ data class AdvancedSettingsViewModelState( stagedDns = dialogState.stagedDns, selectedObfuscation = selectedObfuscation ) - is AdvancedSettingsDialogState.LocalNetworkSharingInfoDialog -> - AdvancedSettingsUiState.LocalNetworkSharingInfoDialogUiState( + is VpnSettingsDialogState.LocalNetworkSharingInfoDialog -> + VpnSettingsUiState.LocalNetworkSharingInfoDialogUiState( mtu = mtuValue, isAutoConnectEnabled = isAutoConnectEnabled, isLocalNetworkSharingEnabled = isLocalNetworkSharingEnabled, @@ -51,8 +51,8 @@ data class AdvancedSettingsViewModelState( customDnsItems = customDnsList, contentBlockersOptions = contentBlockersOptions ) - is AdvancedSettingsDialogState.ContentBlockersInfoDialog -> - AdvancedSettingsUiState.ContentBlockersInfoDialogUiState( + is VpnSettingsDialogState.ContentBlockersInfoDialog -> + VpnSettingsUiState.ContentBlockersInfoDialogUiState( mtu = mtuValue, isAutoConnectEnabled = isAutoConnectEnabled, isLocalNetworkSharingEnabled = isLocalNetworkSharingEnabled, @@ -62,8 +62,8 @@ data class AdvancedSettingsViewModelState( contentBlockersOptions = contentBlockersOptions, selectedObfuscation = selectedObfuscation ) - is AdvancedSettingsDialogState.CustomDnsInfoDialog -> - AdvancedSettingsUiState.CustomDnsInfoDialogUiState( + is VpnSettingsDialogState.CustomDnsInfoDialog -> + VpnSettingsUiState.CustomDnsInfoDialogUiState( mtu = mtuValue, isAutoConnectEnabled = isAutoConnectEnabled, isLocalNetworkSharingEnabled = isLocalNetworkSharingEnabled, @@ -72,8 +72,8 @@ data class AdvancedSettingsViewModelState( customDnsItems = customDnsList, contentBlockersOptions = contentBlockersOptions ) - is AdvancedSettingsDialogState.MalwareInfoDialog -> - AdvancedSettingsUiState.MalwareInfoDialogUiState( + is VpnSettingsDialogState.MalwareInfoDialog -> + VpnSettingsUiState.MalwareInfoDialogUiState( mtu = mtuValue, isAutoConnectEnabled = isAutoConnectEnabled, isLocalNetworkSharingEnabled = isLocalNetworkSharingEnabled, @@ -83,8 +83,8 @@ data class AdvancedSettingsViewModelState( contentBlockersOptions = contentBlockersOptions, selectedObfuscation = selectedObfuscation ) - is AdvancedSettingsDialogState.ObfuscationInfoDialog -> - AdvancedSettingsUiState.ObfuscationInfoDialogUiState( + is VpnSettingsDialogState.ObfuscationInfoDialog -> + VpnSettingsUiState.ObfuscationInfoDialogUiState( mtu = mtuValue, isCustomDnsEnabled = isCustomDnsEnabled, isAllowLanEnabled = isAllowLanEnabled, @@ -93,7 +93,7 @@ data class AdvancedSettingsViewModelState( selectedObfuscation = selectedObfuscation ) else -> - AdvancedSettingsUiState.DefaultUiState( + VpnSettingsUiState.DefaultUiState( mtu = mtuValue, isAutoConnectEnabled = isAutoConnectEnabled, isLocalNetworkSharingEnabled = isLocalNetworkSharingEnabled, @@ -110,7 +110,7 @@ data class AdvancedSettingsViewModelState( private const val EMPTY_STRING = "" fun default() = - AdvancedSettingsViewModelState( + VpnSettingsViewModelState( mtuValue = EMPTY_STRING, isAutoConnectEnabled = false, isLocalNetworkSharingEnabled = false, @@ -118,28 +118,28 @@ data class AdvancedSettingsViewModelState( customDnsList = listOf(), contentBlockersOptions = DefaultDnsOptions(), isAllowLanEnabled = false, - dialogState = AdvancedSettingsDialogState.NoDialog, + dialogState = VpnSettingsDialogState.NoDialog, selectedObfuscation = SelectedObfuscation.Auto ) } } -sealed class AdvancedSettingsDialogState { - object NoDialog : AdvancedSettingsDialogState() +sealed class VpnSettingsDialogState { + object NoDialog : VpnSettingsDialogState() - data class MtuDialog(val mtuEditValue: String) : AdvancedSettingsDialogState() + data class MtuDialog(val mtuEditValue: String) : VpnSettingsDialogState() - data class DnsDialog(val stagedDns: StagedDns) : AdvancedSettingsDialogState() + data class DnsDialog(val stagedDns: StagedDns) : VpnSettingsDialogState() - object LocalNetworkSharingInfoDialog : AdvancedSettingsDialogState() + object LocalNetworkSharingInfoDialog : VpnSettingsDialogState() - object ContentBlockersInfoDialog : AdvancedSettingsDialogState() + object ContentBlockersInfoDialog : VpnSettingsDialogState() - object CustomDnsInfoDialog : AdvancedSettingsDialogState() + object CustomDnsInfoDialog : VpnSettingsDialogState() - object MalwareInfoDialog : AdvancedSettingsDialogState() + object MalwareInfoDialog : VpnSettingsDialogState() - object ObfuscationInfoDialog : AdvancedSettingsDialogState() + object ObfuscationInfoDialog : VpnSettingsDialogState() } sealed interface StagedDns { diff --git a/android/app/src/main/res/layout/settings.xml b/android/app/src/main/res/layout/settings.xml index 5ca8ab8aa8..c37c44e8af 100644 --- a/android/app/src/main/res/layout/settings.xml +++ b/android/app/src/main/res/layout/settings.xml @@ -48,7 +48,7 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/vertical_space" mullvad:text="@string/settings_account" /> - <net.mullvad.mullvadvpn.ui.widget.NavigateCell android:id="@+id/advanced" + <net.mullvad.mullvadvpn.ui.widget.NavigateCell android:id="@+id/vpn_settings" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="1dp" |
