summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2025-02-04 22:45:33 +0100
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2025-02-06 14:35:37 +0100
commitcb9ab4e67aa974aced5b626999aded509b5802a9 (patch)
tree149c4ab0acb38dc8503ca18a5cec76cd9554477c /android
parentd5ff4cd33db419e07ef44dfcb253a3c1927022c8 (diff)
downloadmullvadvpn-cb9ab4e67aa974aced5b626999aded509b5802a9.tar.xz
mullvadvpn-cb9ab4e67aa974aced5b626999aded509b5802a9.zip
Disable wireguard port setting if obfuscation is set
Diffstat (limited to 'android')
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/CustomPortCell.kt40
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt24
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt3
-rw-r--r--android/lib/resource/src/main/res/values/strings.xml1
4 files changed, 50 insertions, 18 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/CustomPortCell.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/CustomPortCell.kt
index 0ea351e8b1..bc6aebe5d0 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/CustomPortCell.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/CustomPortCell.kt
@@ -12,9 +12,6 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentWidth
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.Check
-import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@@ -30,7 +27,7 @@ import net.mullvad.mullvadvpn.compose.component.SpacedColumn
import net.mullvad.mullvadvpn.lib.model.Port
import net.mullvad.mullvadvpn.lib.theme.AppTheme
import net.mullvad.mullvadvpn.lib.theme.Dimens
-import net.mullvad.mullvadvpn.lib.theme.color.AlphaInvisible
+import net.mullvad.mullvadvpn.lib.theme.color.AlphaDisabled
import net.mullvad.mullvadvpn.lib.theme.color.AlphaVisible
import net.mullvad.mullvadvpn.lib.theme.color.onSelected
import net.mullvad.mullvadvpn.lib.theme.color.selected
@@ -65,6 +62,7 @@ fun CustomPortCell(
port: Port?,
mainTestTag: String = "",
numberTestTag: String = "",
+ isEnabled: Boolean = true,
onMainCellClicked: () -> Unit,
onPortCellClicked: () -> Unit,
) {
@@ -77,7 +75,7 @@ fun CustomPortCell(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start,
modifier =
- Modifier.clickable { onMainCellClicked() }
+ Modifier.clickable(enabled = isEnabled) { onMainCellClicked() }
.height(Dimens.cellHeight)
.weight(1f)
.background(
@@ -90,13 +88,10 @@ fun CustomPortCell(
.padding(start = Dimens.cellStartPadding)
.testTag(mainTestTag),
) {
- Icon(
- imageVector = Icons.Default.Check,
- contentDescription = null,
- tint = MaterialTheme.colorScheme.onSelected,
- modifier =
- Modifier.padding(end = Dimens.selectableCellTextMargin)
- .alpha(if (isSelected) AlphaVisible else AlphaInvisible),
+ SelectableIcon(
+ isSelected = isSelected,
+ iconContentDescription = null,
+ isEnabled = isEnabled,
)
BaseCellTitle(
title = title,
@@ -104,16 +99,17 @@ fun CustomPortCell(
textAlign = TextAlign.Start,
textColor =
if (isSelected) {
- MaterialTheme.colorScheme.onSelected
- } else {
- MaterialTheme.colorScheme.onSurface
- },
+ MaterialTheme.colorScheme.onSelected
+ } else {
+ MaterialTheme.colorScheme.onSurface
+ }
+ .copy(alpha = if (isEnabled) AlphaVisible else AlphaDisabled),
)
}
Spacer(modifier = Modifier.width(Dimens.verticalSpacer))
Box(
modifier =
- Modifier.clickable { onPortCellClicked() }
+ Modifier.clickable(enabled = isEnabled) { onPortCellClicked() }
.height(Dimens.cellHeight)
.wrapContentWidth()
.defaultMinSize(minWidth = Dimens.customPortBoxMinWidth)
@@ -122,7 +118,15 @@ fun CustomPortCell(
) {
Text(
text = port?.value?.toString() ?: stringResource(id = R.string.port),
- color = MaterialTheme.colorScheme.onPrimary,
+ color =
+ MaterialTheme.colorScheme.onPrimary.copy(
+ alpha =
+ if (isEnabled) {
+ AlphaVisible
+ } else {
+ AlphaDisabled
+ }
+ ),
modifier = Modifier.align(Alignment.Center),
)
}
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 0de30c408a..de8b7d289a 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
@@ -507,6 +507,7 @@ fun VpnSettingsScreen(
title = stringResource(id = R.string.wireguard_port_title),
onInfoClicked = { navigateToWireguardPortInfo(state.availablePortRanges) },
onCellClicked = { navigateToWireguardPortInfo(state.availablePortRanges) },
+ isEnabled = state.isWireguardPortEnabled,
)
}
@@ -515,6 +516,7 @@ fun VpnSettingsScreen(
title = stringResource(id = R.string.automatic),
isSelected = state.selectedWireguardPort == Constraint.Any,
onCellClicked = { onWireguardPortSelected(Constraint.Any) },
+ isEnabled = state.isWireguardPortEnabled,
)
}
@@ -530,6 +532,7 @@ fun VpnSettingsScreen(
),
isSelected = state.selectedWireguardPort.getOrNull() == port,
onCellClicked = { onWireguardPortSelected(Constraint.Only(port)) },
+ isEnabled = state.isWireguardPortEnabled,
)
}
}
@@ -547,11 +550,32 @@ fun VpnSettingsScreen(
}
},
onPortCellClicked = navigateToWireguardPortDialog,
+ isEnabled = state.isWireguardPortEnabled,
mainTestTag = LAZY_LIST_WIREGUARD_CUSTOM_PORT_TEXT_TEST_TAG,
numberTestTag = LAZY_LIST_WIREGUARD_CUSTOM_PORT_NUMBER_TEST_TAG,
)
}
+ if (!state.isWireguardPortEnabled) {
+ item {
+ Text(
+ text =
+ stringResource(
+ id = R.string.wg_port_subtitle,
+ stringResource(R.string.wireguard),
+ ),
+ style = MaterialTheme.typography.labelMedium,
+ color = MaterialTheme.colorScheme.onSurfaceVariant,
+ modifier =
+ Modifier.padding(
+ start = Dimens.cellStartPadding,
+ top = topPadding,
+ end = Dimens.cellEndPadding,
+ ),
+ )
+ }
+ }
+
itemWithDivider {
Spacer(modifier = Modifier.height(Dimens.cellLabelVerticalPadding))
InformationComposeCell(
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt
index 49d0ebd4aa..c9fd0257c0 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt
@@ -29,6 +29,9 @@ data class VpnSettingsUiState(
selectedWireguardPort is Constraint.Only &&
selectedWireguardPort.value == customWireguardPort
+ val isWireguardPortEnabled =
+ obfuscationMode == ObfuscationMode.Auto || obfuscationMode == ObfuscationMode.Off
+
companion object {
fun createDefault(
mtu: Mtu? = null,
diff --git a/android/lib/resource/src/main/res/values/strings.xml b/android/lib/resource/src/main/res/values/strings.xml
index 6af8e233ba..567c7fde99 100644
--- a/android/lib/resource/src/main/res/values/strings.xml
+++ b/android/lib/resource/src/main/res/values/strings.xml
@@ -408,4 +408,5 @@
<string name="obfuscation_info_shadowsocks_batteryusage">Attention: Shadowsocks can increase battery consumption depending on data usage, such as streaming a video.</string>
<string name="see_full_changelog">See full changelog</string>
<string name="changelog_empty">No changelog was added for this version</string>
+ <string name="wg_port_subtitle">Set %s obfuscation to \"Automatic\" or \"Off\" below to activate this setting.</string>
</resources>