diff options
| author | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2023-11-06 12:38:03 +0100 |
|---|---|---|
| committer | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2023-11-06 12:38:03 +0100 |
| commit | 11ee38e46a234c8aa4c54bc7927f5326e7f6f8b6 (patch) | |
| tree | 3e621475f0cdc8d371c326a04bd7370b0c99f8b0 /android | |
| parent | b13c219765ada1dd8f08f5e177fb88a1914423f1 (diff) | |
| parent | 19618dbad68dd86d4c5e033b5c37130dde81510e (diff) | |
| download | mullvadvpn-11ee38e46a234c8aa4c54bc7927f5326e7f6f8b6.tar.xz mullvadvpn-11ee38e46a234c8aa4c54bc7927f5326e7f6f8b6.zip | |
Merge branch 'move-custom-dns-next-to-content-blockers-droid-338'
Diffstat (limited to 'android')
3 files changed, 125 insertions, 123 deletions
diff --git a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreenTest.kt b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreenTest.kt index 3eee07e2e6..9b6dd9e492 100644 --- a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreenTest.kt +++ b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreenTest.kt @@ -55,10 +55,7 @@ class VpnSettingsScreenTest { ) } - composeTestRule.apply { - onNodeWithText("WireGuard MTU").assertExists() - onNodeWithText("Default").assertExists() - } + composeTestRule.apply { onNodeWithText("Auto-connect").assertExists() } composeTestRule .onNodeWithTag(LAZY_LIST_TEST_TAG) @@ -66,8 +63,8 @@ class VpnSettingsScreenTest { // Assert composeTestRule.apply { - onNodeWithText("Use custom DNS server").assertExists() - onNodeWithText("Add a server").assertDoesNotExist() + onNodeWithText("WireGuard MTU").assertExists() + onNodeWithText("Default").assertExists() } } @@ -81,6 +78,10 @@ class VpnSettingsScreenTest { ) } + composeTestRule + .onNodeWithTag(LAZY_LIST_TEST_TAG) + .performScrollToNode(hasTestTag(LAZY_LIST_LAST_ITEM_TEST_TAG)) + // Assert composeTestRule.onNodeWithText(VALID_DUMMY_MTU_VALUE).assertExists() } @@ -97,6 +98,10 @@ class VpnSettingsScreenTest { ) } + composeTestRule + .onNodeWithTag(LAZY_LIST_TEST_TAG) + .performScrollToNode(hasTestTag(LAZY_LIST_LAST_ITEM_TEST_TAG)) + // Act composeTestRule.onNodeWithText("WireGuard MTU").performClick() @@ -126,7 +131,10 @@ class VpnSettingsScreenTest { // Arrange composeTestRule.setContentWithTheme { VpnSettingsScreen( - uiState = VpnSettingsUiState.createDefault(mtu = VALID_DUMMY_MTU_VALUE), + uiState = + VpnSettingsUiState.createDefault( + dialog = VpnSettingsDialog.Mtu(mtuEditValue = VALID_DUMMY_MTU_VALUE) + ), toastMessagesSharedFlow = MutableSharedFlow<String>().asSharedFlow() ) } @@ -257,9 +265,7 @@ class VpnSettingsScreenTest { toastMessagesSharedFlow = MutableSharedFlow<String>().asSharedFlow() ) } - composeTestRule - .onNodeWithTag(LAZY_LIST_TEST_TAG) - .performScrollToNode(hasTestTag(LAZY_LIST_LAST_ITEM_TEST_TAG)) + // Assert composeTestRule.apply { onNodeWithText(DUMMY_DNS_ADDRESS).assertExists() @@ -365,9 +371,6 @@ class VpnSettingsScreenTest { toastMessagesSharedFlow = MutableSharedFlow<String>().asSharedFlow() ) } - composeTestRule - .onNodeWithTag(LAZY_LIST_TEST_TAG) - .performScrollToNode(hasTestTag(LAZY_LIST_LAST_ITEM_TEST_TAG)) // Assert composeTestRule.apply { @@ -386,9 +389,6 @@ class VpnSettingsScreenTest { toastMessagesSharedFlow = MutableSharedFlow<String>().asSharedFlow() ) } - composeTestRule - .onNodeWithTag(LAZY_LIST_TEST_TAG) - .performScrollToNode(hasTestTag(LAZY_LIST_LAST_ITEM_TEST_TAG)) // Act composeTestRule.onNodeWithText("Add a server").performClick() diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Switch.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Switch.kt index e1ed80db8e..9ce6a61025 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Switch.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Switch.kt @@ -14,6 +14,7 @@ import androidx.compose.material3.SwitchDefaults import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.compositeOver import androidx.compose.ui.tooling.preview.Preview import net.mullvad.mullvadvpn.lib.theme.AppTheme @@ -67,18 +68,18 @@ fun MullvadSwitch( fun mullvadSwitchColors(): SwitchColors = SwitchDefaults.colors( checkedThumbColor = MaterialTheme.colorScheme.selected, - checkedTrackColor = MaterialTheme.colorScheme.primary, + checkedTrackColor = Color.Transparent, checkedBorderColor = MaterialTheme.colorScheme.onPrimary, // checkedIconColor= SwitchTokens.SelectedIconColor.toColor(), uncheckedThumbColor = MaterialTheme.colorScheme.error, - uncheckedTrackColor = MaterialTheme.colorScheme.primary, + uncheckedTrackColor = Color.Transparent, uncheckedBorderColor = MaterialTheme.colorScheme.onPrimary, // uncheckedIconColor= SwitchTokens.UnselectedIconColor.toColor(), disabledCheckedThumbColor = MaterialTheme.colorScheme.selected .copy(alpha = AlphaDisabled) .compositeOver(MaterialTheme.colorScheme.primary), - disabledCheckedTrackColor = MaterialTheme.colorScheme.primary, + disabledCheckedTrackColor = Color.Transparent, disabledCheckedBorderColor = MaterialTheme.colorScheme.onPrimary .copy(alpha = AlphaDisabled) @@ -87,7 +88,7 @@ fun mullvadSwitchColors(): SwitchColors = MaterialTheme.colorScheme.error .copy(alpha = AlphaDisabled) .compositeOver(MaterialTheme.colorScheme.primary), - disabledUncheckedTrackColor = MaterialTheme.colorScheme.primary, + disabledUncheckedTrackColor = Color.Transparent, disabledUncheckedBorderColor = MaterialTheme.colorScheme.onPrimary .copy(alpha = AlphaDisabled) 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 4e08e06a1d..7290b9600f 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 @@ -293,12 +293,8 @@ fun VpnSettingsScreen( onCellClicked = { newValue -> onToggleLocalNetworkSharing(newValue) }, onInfoClicked = { onLocalNetworkSharingInfoClick() } ) - } - item { Spacer(modifier = Modifier.height(Dimens.cellLabelVerticalPadding)) - MtuComposeCell(mtuValue = uiState.mtu, onEditMtu = { onMtuCellClick() }) } - item { MtuSubtitle() } itemWithDivider { ExpandableComposeCell( @@ -363,7 +359,7 @@ fun VpnSettingsScreen( ) } - itemWithDivider { + item { NormalSwitchComposeCell( title = stringResource(R.string.block_social_media_title), isToggled = uiState.contentBlockersOptions.blockSocialMedia, @@ -389,63 +385,55 @@ fun VpnSettingsScreen( } } - itemWithDivider { - Spacer(modifier = Modifier.height(Dimens.cellLabelVerticalPadding)) - InformationComposeCell( - title = stringResource(R.string.obfuscation_title), - onInfoClicked = { onObfuscationInfoClick() } - ) - } - itemWithDivider { - SelectableCell( - title = stringResource(id = R.string.automatic), - isSelected = uiState.selectedObfuscation == SelectedObfuscation.Auto, - onCellClicked = { onSelectObfuscationSetting(SelectedObfuscation.Auto) } - ) - } - itemWithDivider { - SelectableCell( - title = stringResource(id = R.string.obfuscation_on_udp_over_tcp), - isSelected = uiState.selectedObfuscation == SelectedObfuscation.Udp2Tcp, - onCellClicked = { onSelectObfuscationSetting(SelectedObfuscation.Udp2Tcp) } - ) - } - itemWithDivider { - SelectableCell( - title = stringResource(id = R.string.off), - isSelected = uiState.selectedObfuscation == SelectedObfuscation.Off, - onCellClicked = { onSelectObfuscationSetting(SelectedObfuscation.Off) } + item { + HeaderSwitchComposeCell( + title = stringResource(R.string.enable_custom_dns), + isToggled = uiState.isCustomDnsEnabled, + isEnabled = uiState.contentBlockersOptions.isAnyBlockerEnabled().not(), + onCellClicked = { newValue -> onToggleDnsClick(newValue) }, + onInfoClicked = { onCustomDnsInfoClick() } ) } - itemWithDivider { - Spacer(modifier = Modifier.height(Dimens.cellLabelVerticalPadding)) - InformationComposeCell( - title = stringResource(R.string.quantum_resistant_title), - onInfoClicked = { onQuantumResistanceInfoClicked() } - ) - } - itemWithDivider { - SelectableCell( - title = stringResource(id = R.string.automatic), - isSelected = uiState.quantumResistant == QuantumResistantState.Auto, - onCellClicked = { onSelectQuantumResistanceSetting(QuantumResistantState.Auto) } - ) - } - itemWithDivider { - SelectableCell( - title = stringResource(id = R.string.on), - testTag = LAZY_LIST_QUANTUM_ITEM_ON_TEST_TAG, - isSelected = uiState.quantumResistant == QuantumResistantState.On, - onCellClicked = { onSelectQuantumResistanceSetting(QuantumResistantState.On) } - ) + if (uiState.isCustomDnsEnabled) { + itemsIndexed(uiState.customDnsItems) { index, item -> + DnsCell( + address = item.address, + isUnreachableLocalDnsWarningVisible = + item.isLocal && uiState.isAllowLanEnabled.not(), + onClick = { onDnsClick(index) }, + modifier = Modifier.animateItemPlacement() + ) + Divider() + } + + itemWithDivider { + BaseCell( + onCellClicked = { onDnsClick(null) }, + title = { + Text( + text = stringResource(id = R.string.add_a_server), + color = Color.White, + ) + }, + bodyView = {}, + background = MaterialTheme.colorScheme.secondaryContainer, + startPadding = biggerPadding, + ) + } } - itemWithDivider { - SelectableCell( - title = stringResource(id = R.string.off), - testTag = LAZY_LIST_QUANTUM_ITEM_OFF_TEST_TAG, - isSelected = uiState.quantumResistant == QuantumResistantState.Off, - onCellClicked = { onSelectQuantumResistanceSetting(QuantumResistantState.Off) } + + item { + CustomDnsCellSubtitle( + isCellClickable = uiState.contentBlockersOptions.isAnyBlockerEnabled().not(), + modifier = + Modifier.background(MaterialTheme.colorScheme.secondary) + .padding( + start = Dimens.cellStartPadding, + top = topPadding, + end = Dimens.cellEndPadding, + bottom = Dimens.cellLabelVerticalPadding, + ) ) } @@ -499,58 +487,71 @@ fun VpnSettingsScreen( ) } - item { + itemWithDivider { Spacer(modifier = Modifier.height(Dimens.cellLabelVerticalPadding)) - HeaderSwitchComposeCell( - title = stringResource(R.string.enable_custom_dns), - isToggled = uiState.isCustomDnsEnabled, - isEnabled = uiState.contentBlockersOptions.isAnyBlockerEnabled().not(), - onCellClicked = { newValue -> onToggleDnsClick(newValue) }, - onInfoClicked = { onCustomDnsInfoClick() } + InformationComposeCell( + title = stringResource(R.string.obfuscation_title), + onInfoClicked = { onObfuscationInfoClick() } ) } - - if (uiState.isCustomDnsEnabled) { - itemsIndexed(uiState.customDnsItems) { index, item -> - DnsCell( - address = item.address, - isUnreachableLocalDnsWarningVisible = - item.isLocal && uiState.isAllowLanEnabled.not(), - onClick = { onDnsClick(index) }, - modifier = Modifier.animateItemPlacement() - ) - Divider() - } - - itemWithDivider { - BaseCell( - onCellClicked = { onDnsClick(null) }, - title = { - Text( - text = stringResource(id = R.string.add_a_server), - color = Color.White, - ) - }, - bodyView = {}, - background = MaterialTheme.colorScheme.secondaryContainer, - startPadding = biggerPadding, - ) - } + itemWithDivider { + SelectableCell( + title = stringResource(id = R.string.automatic), + isSelected = uiState.selectedObfuscation == SelectedObfuscation.Auto, + onCellClicked = { onSelectObfuscationSetting(SelectedObfuscation.Auto) } + ) + } + itemWithDivider { + SelectableCell( + title = stringResource(id = R.string.obfuscation_on_udp_over_tcp), + isSelected = uiState.selectedObfuscation == SelectedObfuscation.Udp2Tcp, + onCellClicked = { onSelectObfuscationSetting(SelectedObfuscation.Udp2Tcp) } + ) + } + itemWithDivider { + SelectableCell( + title = stringResource(id = R.string.off), + isSelected = uiState.selectedObfuscation == SelectedObfuscation.Off, + onCellClicked = { onSelectObfuscationSetting(SelectedObfuscation.Off) } + ) } + itemWithDivider { + Spacer(modifier = Modifier.height(Dimens.cellLabelVerticalPadding)) + InformationComposeCell( + title = stringResource(R.string.quantum_resistant_title), + onInfoClicked = { onQuantumResistanceInfoClicked() } + ) + } + itemWithDivider { + SelectableCell( + title = stringResource(id = R.string.automatic), + isSelected = uiState.quantumResistant == QuantumResistantState.Auto, + onCellClicked = { onSelectQuantumResistanceSetting(QuantumResistantState.Auto) } + ) + } + itemWithDivider { + SelectableCell( + title = stringResource(id = R.string.on), + testTag = LAZY_LIST_QUANTUM_ITEM_ON_TEST_TAG, + isSelected = uiState.quantumResistant == QuantumResistantState.On, + onCellClicked = { onSelectQuantumResistanceSetting(QuantumResistantState.On) } + ) + } item { - CustomDnsCellSubtitle( - isCellClickable = uiState.contentBlockersOptions.isAnyBlockerEnabled().not(), - modifier = - Modifier.background(MaterialTheme.colorScheme.secondary) - .testTag(LAZY_LIST_LAST_ITEM_TEST_TAG) - .padding( - start = Dimens.cellStartPadding, - top = topPadding, - end = Dimens.cellEndPadding, - bottom = Dimens.cellLabelVerticalPadding, - ) + SelectableCell( + title = stringResource(id = R.string.off), + testTag = LAZY_LIST_QUANTUM_ITEM_OFF_TEST_TAG, + isSelected = uiState.quantumResistant == QuantumResistantState.Off, + onCellClicked = { onSelectQuantumResistanceSetting(QuantumResistantState.Off) } ) + Spacer(modifier = Modifier.height(Dimens.cellLabelVerticalPadding)) + } + + item { MtuComposeCell(mtuValue = uiState.mtu, onEditMtu = { onMtuCellClick() }) } + item { + MtuSubtitle(modifier = Modifier.testTag(LAZY_LIST_LAST_ITEM_TEST_TAG)) + Spacer(modifier = Modifier.height(Dimens.cellLabelVerticalPadding)) } } } |
