summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--android/CHANGELOG.md5
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/BaseCell.kt2
-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.kt44
-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
-rw-r--r--android/lib/theme/src/main/kotlin/net/mullvad/mullvadvpn/lib/theme/dimensions/Dimensions.kt3
-rw-r--r--desktop/packages/mullvad-vpn/locales/messages.pot3
8 files changed, 67 insertions, 34 deletions
diff --git a/android/CHANGELOG.md b/android/CHANGELOG.md
index f03a161797..ef57ebdef7 100644
--- a/android/CHANGELOG.md
+++ b/android/CHANGELOG.md
@@ -22,9 +22,14 @@ Line wrap the file at 100 chars. Th
* **Security**: in case of vulnerabilities.
## [Unreleased]
+### Changed
+- Disable Wireguard port setting when a obfuscation is selected since it is not used when an
+ obfuscation is applied.
+
### Removed
- Remove Google's resolvers from encrypted DNS proxy.
+
## [android/2024.10-beta2] - 2024-12-20
### Fixed
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/BaseCell.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/BaseCell.kt
index 17c4d24460..8e22be8b7e 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/BaseCell.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/BaseCell.kt
@@ -148,7 +148,7 @@ fun BaseSubtitleCell(
start = Dimens.cellStartPadding,
top = Dimens.cellFooterTopPadding,
end = Dimens.cellEndPadding,
- bottom = Dimens.cellLabelVerticalPadding,
+ bottom = Dimens.cellVerticalSpacing,
)
.fillMaxWidth()
.wrapContentHeight(),
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..779b4792b4 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
@@ -320,7 +320,6 @@ fun VpnSettingsScreen(
) {
if (state.systemVpnSettingsAvailable) {
item {
- Spacer(modifier = Modifier.height(Dimens.cellLabelVerticalPadding))
NavigationComposeCell(
title = stringResource(id = R.string.auto_connect_and_lockdown_mode),
onClick = { navigateToAutoConnectScreen() },
@@ -333,7 +332,6 @@ fun VpnSettingsScreen(
}
} else {
item {
- Spacer(modifier = Modifier.height(Dimens.cellLabelVerticalPadding))
HeaderSwitchComposeCell(
title = stringResource(R.string.connect_on_start),
isToggled = state.autoStartAndConnectOnBoot,
@@ -350,7 +348,6 @@ fun VpnSettingsScreen(
}
item {
- Spacer(modifier = Modifier.height(Dimens.cellLabelVerticalPadding))
HeaderSwitchComposeCell(
title = stringResource(R.string.local_network_sharing),
isToggled = state.isLocalNetworkSharingEnabled,
@@ -358,7 +355,7 @@ fun VpnSettingsScreen(
onCellClicked = { newValue -> onToggleLocalNetworkSharing(newValue) },
onInfoClicked = navigateToLocalNetworkSharingInfo,
)
- Spacer(modifier = Modifier.height(Dimens.cellLabelVerticalPadding))
+ Spacer(modifier = Modifier.height(Dimens.cellVerticalSpacing))
}
itemWithDivider {
@@ -443,7 +440,7 @@ fun VpnSettingsScreen(
start = Dimens.cellStartPadding,
top = topPadding,
end = Dimens.cellEndPadding,
- bottom = Dimens.cellLabelVerticalPadding,
+ bottom = Dimens.cellVerticalSpacing,
)
)
}
@@ -497,7 +494,7 @@ fun VpnSettingsScreen(
start = Dimens.cellStartPadding,
top = topPadding,
end = Dimens.cellEndPadding,
- bottom = Dimens.cellLabelVerticalPadding,
+ bottom = Dimens.cellVerticalSpacing,
),
)
}
@@ -507,6 +504,7 @@ fun VpnSettingsScreen(
title = stringResource(id = R.string.wireguard_port_title),
onInfoClicked = { navigateToWireguardPortInfo(state.availablePortRanges) },
onCellClicked = { navigateToWireguardPortInfo(state.availablePortRanges) },
+ isEnabled = state.isWireguardPortEnabled,
)
}
@@ -515,6 +513,7 @@ fun VpnSettingsScreen(
title = stringResource(id = R.string.automatic),
isSelected = state.selectedWireguardPort == Constraint.Any,
onCellClicked = { onWireguardPortSelected(Constraint.Any) },
+ isEnabled = state.isWireguardPortEnabled,
)
}
@@ -530,6 +529,7 @@ fun VpnSettingsScreen(
),
isSelected = state.selectedWireguardPort.getOrNull() == port,
onCellClicked = { onWireguardPortSelected(Constraint.Only(port)) },
+ isEnabled = state.isWireguardPortEnabled,
)
}
}
@@ -547,13 +547,34 @@ 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))
+ Spacer(modifier = Modifier.height(Dimens.cellVerticalSpacing))
InformationComposeCell(
title = stringResource(R.string.obfuscation_title),
onInfoClicked = navigateToObfuscationInfo,
@@ -598,7 +619,7 @@ fun VpnSettingsScreen(
}
itemWithDivider {
- Spacer(modifier = Modifier.height(Dimens.cellLabelVerticalPadding))
+ Spacer(modifier = Modifier.height(Dimens.cellVerticalSpacing))
InformationComposeCell(
title = stringResource(R.string.quantum_resistant_title),
onInfoClicked = navigateToQuantumResistanceInfo,
@@ -627,16 +648,13 @@ fun VpnSettingsScreen(
isSelected = state.quantumResistant == QuantumResistantState.Off,
onCellClicked = { onSelectQuantumResistanceSetting(QuantumResistantState.Off) },
)
- Spacer(modifier = Modifier.height(Dimens.cellLabelVerticalPadding))
+ Spacer(modifier = Modifier.height(Dimens.cellVerticalSpacing))
}
item {
MtuComposeCell(mtuValue = state.mtu, onEditMtu = { navigateToMtuDialog(state.mtu) })
}
- item {
- MtuSubtitle(modifier = Modifier.testTag(LAZY_LIST_LAST_ITEM_TEST_TAG))
- Spacer(modifier = Modifier.height(Dimens.cellLabelVerticalPadding))
- }
+ item { MtuSubtitle(modifier = Modifier.testTag(LAZY_LIST_LAST_ITEM_TEST_TAG)) }
item { ServerIpOverrides(navigateToServerIpOverrides) }
}
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>
diff --git a/android/lib/theme/src/main/kotlin/net/mullvad/mullvadvpn/lib/theme/dimensions/Dimensions.kt b/android/lib/theme/src/main/kotlin/net/mullvad/mullvadvpn/lib/theme/dimensions/Dimensions.kt
index 6a5da5c18d..51b4f5efb8 100644
--- a/android/lib/theme/src/main/kotlin/net/mullvad/mullvadvpn/lib/theme/dimensions/Dimensions.kt
+++ b/android/lib/theme/src/main/kotlin/net/mullvad/mullvadvpn/lib/theme/dimensions/Dimensions.kt
@@ -16,10 +16,9 @@ data class Dimensions(
val cellFooterTopPadding: Dp = 6.dp,
val cellHeight: Dp = 56.dp,
val cellHeightTwoRows: Dp = 72.dp,
- val cellLabelVerticalPadding: Dp = 14.dp,
val cellStartPadding: Dp = 14.dp,
val cellTopPadding: Dp = 6.dp,
- val cellVerticalSpacing: Dp = 14.dp,
+ val cellVerticalSpacing: Dp = 24.dp,
val chipSpace: Dp = 8.dp,
val chipVerticalPadding: Dp = 4.dp,
val circularProgressBarLargeSize: Dp = 44.dp,
diff --git a/desktop/packages/mullvad-vpn/locales/messages.pot b/desktop/packages/mullvad-vpn/locales/messages.pot
index dd5747d6ad..0157e0c32f 100644
--- a/desktop/packages/mullvad-vpn/locales/messages.pot
+++ b/desktop/packages/mullvad-vpn/locales/messages.pot
@@ -2638,6 +2638,9 @@ msgstr ""
msgid "See full changelog"
msgstr ""
+msgid "Set %s obfuscation to \"Automatic\" or \"Off\" below to activate this setting."
+msgstr ""
+
msgid "Set WireGuard MTU value. Valid range: %d - %d."
msgstr ""