summaryrefslogtreecommitdiffhomepage
path: root/android/app/src
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2025-08-14 14:27:26 +0200
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2025-08-22 13:49:04 +0200
commitc5b594a4d081579b66930fd696cbc5c440288e8f (patch)
tree8157fb9e969d031cd8404b79c4ea52e10523bde1 /android/app/src
parent744950926a5295de0d829a7bcdddfff0711308bb (diff)
downloadmullvadvpn-c5b594a4d081579b66930fd696cbc5c440288e8f.tar.xz
mullvadvpn-c5b594a4d081579b66930fd696cbc5c440288e8f.zip
Improve connect on start up information
Diffstat (limited to 'android/app/src')
-rw-r--r--android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreenTest.kt2
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/info/ConnectOnStartupInfoDialog.kt59
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/info/InfoDialog.kt23
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt20
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingItem.kt2
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt2
6 files changed, 85 insertions, 23 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 310ebcdc6f..d996be4b51 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
@@ -122,6 +122,7 @@ class VpnSettingsScreenTest {
navigateToIpv6Info: () -> Unit = {},
onToggleDnsContentBlockers: () -> Unit = {},
navigateToDeviceIpInfo: () -> Unit = {},
+ navigateToConnectOnDeviceOnStartUpInfo: () -> Unit = {},
) {
setContentWithTheme {
VpnSettingsScreen(
@@ -158,6 +159,7 @@ class VpnSettingsScreenTest {
navigateToIpv6Info = navigateToIpv6Info,
onToggleContentBlockersExpanded = onToggleDnsContentBlockers,
navigateToDeviceIpInfo = navigateToDeviceIpInfo,
+ navigateToConnectOnDeviceOnStartUpInfo = navigateToConnectOnDeviceOnStartUpInfo,
initialScrollToFeature = null,
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/info/ConnectOnStartupInfoDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/info/ConnectOnStartupInfoDialog.kt
new file mode 100644
index 0000000000..b81cd00c0a
--- /dev/null
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/info/ConnectOnStartupInfoDialog.kt
@@ -0,0 +1,59 @@
+package net.mullvad.mullvadvpn.compose.dialog.info
+
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.automirrored.filled.OpenInNew
+import androidx.compose.material3.Icon
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.tooling.preview.Preview
+import com.ramcosta.composedestinations.annotation.Destination
+import com.ramcosta.composedestinations.annotation.RootGraph
+import com.ramcosta.composedestinations.navigation.DestinationsNavigator
+import com.ramcosta.composedestinations.spec.DestinationStyle
+import net.mullvad.mullvadvpn.R
+import net.mullvad.mullvadvpn.compose.button.PrimaryButton
+import net.mullvad.mullvadvpn.lib.common.util.openAppDetailsSettings
+import net.mullvad.mullvadvpn.lib.theme.AppTheme
+
+@Preview
+@Composable
+private fun PreviewApiAccessMethodInfoDialog() {
+ AppTheme { ConnectOnStartupInfoDialog(onDismiss = {}, openAppDetails = {}) }
+}
+
+@Destination<RootGraph>(style = DestinationStyle.Dialog::class)
+@Composable
+fun ConnectOnStartupInfo(navigator: DestinationsNavigator) {
+ val context = LocalContext.current
+ ConnectOnStartupInfoDialog(
+ onDismiss = navigator::navigateUp,
+ openAppDetails = { context.openAppDetailsSettings() },
+ )
+}
+
+@Composable
+fun ConnectOnStartupInfoDialog(onDismiss: () -> Unit, openAppDetails: () -> Unit) {
+ InfoDialog(
+ onDismiss = { onDismiss() },
+ message = stringResource(R.string.connect_on_start_info_first),
+ additionalInfo = stringResource(R.string.connect_on_start_info_second),
+ confirmButton = {
+ PrimaryButton(
+ text = stringResource(R.string.open_app_details),
+ onClick = openAppDetails,
+ trailingIcon = {
+ Icon(
+ imageVector = Icons.AutoMirrored.Filled.OpenInNew,
+ tint = MaterialTheme.colorScheme.onPrimary,
+ contentDescription = null,
+ )
+ },
+ )
+ },
+ dismissButton = {
+ PrimaryButton(text = stringResource(R.string.got_it), onClick = onDismiss)
+ },
+ )
+}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/info/InfoDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/info/InfoDialog.kt
index 1cb4bccbed..cf6cb1c240 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/info/InfoDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/info/InfoDialog.kt
@@ -43,7 +43,19 @@ private fun PreviewChangelogDialogWithTwoLongItems() {
}
@Composable
-fun InfoDialog(message: String, additionalInfo: String? = null, onDismiss: () -> Unit) {
+fun InfoDialog(
+ message: String,
+ additionalInfo: String? = null,
+ onDismiss: () -> Unit,
+ confirmButton: @Composable () -> Unit = {
+ PrimaryButton(
+ modifier = Modifier.wrapContentHeight().fillMaxWidth(),
+ text = stringResource(R.string.got_it),
+ onClick = onDismiss,
+ )
+ },
+ dismissButton: @Composable (() -> Unit)? = null,
+) {
AlertDialog(
onDismissRequest = { onDismiss() },
icon = {
@@ -86,13 +98,8 @@ fun InfoDialog(message: String, additionalInfo: String? = null, onDismiss: () ->
}
}
},
- confirmButton = {
- PrimaryButton(
- modifier = Modifier.wrapContentHeight().fillMaxWidth(),
- text = stringResource(R.string.got_it),
- onClick = onDismiss,
- )
- },
+ confirmButton = confirmButton,
+ dismissButton = dismissButton,
properties = DialogProperties(dismissOnClickOutside = true, dismissOnBackPress = true),
containerColor = MaterialTheme.colorScheme.surface,
)
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 7d26ad25ee..ea45861c96 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
@@ -46,6 +46,7 @@ import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.annotation.RootGraph
import com.ramcosta.composedestinations.generated.destinations.AutoConnectAndLockdownModeDestination
+import com.ramcosta.composedestinations.generated.destinations.ConnectOnStartupInfoDestination
import com.ramcosta.composedestinations.generated.destinations.ContentBlockersInfoDestination
import com.ramcosta.composedestinations.generated.destinations.CustomDnsInfoDestination
import com.ramcosta.composedestinations.generated.destinations.DeviceIpInfoDestination
@@ -172,6 +173,7 @@ private fun PreviewVpnSettings(
onToggleContentBlockersExpanded = {},
navigateToIpv6Info = {},
navigateToDeviceIpInfo = {},
+ navigateToConnectOnDeviceOnStartUpInfo = {},
)
}
}
@@ -306,6 +308,8 @@ fun SharedTransitionScope.VpnSettings(
onToggleIpv6 = vm::setIpv6Enabled,
navigateToIpv6Info = dropUnlessResumed { navigator.navigate(Ipv6InfoDestination) },
navigateToDeviceIpInfo = dropUnlessResumed { navigator.navigate(DeviceIpInfoDestination) },
+ navigateToConnectOnDeviceOnStartUpInfo =
+ dropUnlessResumed { navigator.navigate(ConnectOnStartupInfoDestination) },
)
}
@@ -349,6 +353,7 @@ fun VpnSettingsScreen(
onToggleIpv6: (Boolean) -> Unit,
navigateToIpv6Info: () -> Unit,
navigateToDeviceIpInfo: () -> Unit,
+ navigateToConnectOnDeviceOnStartUpInfo: () -> Unit,
) {
val appBarState = rememberTopAppBarState()
val canScroll = remember { mutableStateOf(false) }
@@ -419,6 +424,7 @@ fun VpnSettingsScreen(
onToggleIpv6,
navigateToIpv6Info,
navigateToDeviceIpInfo,
+ navigateToConnectOnDeviceOnStartUpInfo,
)
}
}
@@ -464,6 +470,7 @@ fun VpnSettingsContent(
onToggleIpv6: (Boolean) -> Unit,
navigateToIpv6Info: () -> Unit,
navigateToDeviceIpInfo: () -> Unit,
+ navigateToConnectOnDeviceOnStartUpInfo: () -> Unit,
) {
val initialIndexFocus =
when (initialScrollToFeature) {
@@ -534,24 +541,13 @@ fun VpnSettingsContent(
modifier = Modifier.animateItem(),
title = stringResource(R.string.connect_on_start),
isToggled = it.enabled,
+ onInfoClicked = navigateToConnectOnDeviceOnStartUpInfo,
onCellClicked = { newValue ->
onToggleAutoStartAndConnectOnBoot(newValue)
},
)
}
- VpnSettingItem.ConnectDeviceOnStartUpInfo ->
- item(key = it::class.simpleName) {
- SwitchComposeSubtitleCell(
- modifier = Modifier.animateItem(),
- text =
- textResource(
- R.string.connect_on_start_footer,
- textResource(R.string.auto_connect_and_lockdown_mode),
- ),
- )
- }
-
VpnSettingItem.CustomDnsAdd ->
item(key = it::class.simpleName) {
BaseCell(
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingItem.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingItem.kt
index 1016b62af8..517959e1a2 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingItem.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingItem.kt
@@ -16,8 +16,6 @@ sealed interface VpnSettingItem {
// Only used on TV devices
data class ConnectDeviceOnStartUpSetting(val enabled: Boolean) : VpnSettingItem
- data object ConnectDeviceOnStartUpInfo : VpnSettingItem
-
data class LocalNetworkSharingSetting(val enabled: Boolean) : VpnSettingItem
data class DnsContentBlockersHeader(val featureEnabled: Boolean, val expanded: Boolean) :
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 1526171b1b..bca87015b4 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
@@ -41,7 +41,7 @@ data class VpnSettingsUiState(val settings: List<VpnSettingItem>, val isModal: B
add(VpnSettingItem.AutoConnectAndLockdownModeInfo)
} else {
add(VpnSettingItem.ConnectDeviceOnStartUpSetting(autoStartAndConnectOnBoot))
- add(VpnSettingItem.ConnectDeviceOnStartUpInfo)
+ add(VpnSettingItem.Spacer)
}
// Local network sharing