summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2023-11-06 12:38:03 +0100
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2023-11-06 12:38:03 +0100
commit11ee38e46a234c8aa4c54bc7927f5326e7f6f8b6 (patch)
tree3e621475f0cdc8d371c326a04bd7370b0c99f8b0 /android
parentb13c219765ada1dd8f08f5e177fb88a1914423f1 (diff)
parent19618dbad68dd86d4c5e033b5c37130dde81510e (diff)
downloadmullvadvpn-11ee38e46a234c8aa4c54bc7927f5326e7f6f8b6.tar.xz
mullvadvpn-11ee38e46a234c8aa4c54bc7927f5326e7f6f8b6.zip
Merge branch 'move-custom-dns-next-to-content-blockers-droid-338'
Diffstat (limited to 'android')
-rw-r--r--android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreenTest.kt32
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Switch.kt9
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt207
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))
}
}
}