diff options
Diffstat (limited to 'android/lib')
7 files changed, 49 insertions, 38 deletions
diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/InAppNotification.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/InAppNotification.kt index fdaa5f3c9d..7a681da66c 100644 --- a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/InAppNotification.kt +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/InAppNotification.kt @@ -6,6 +6,7 @@ enum class StatusLevel { Error, Warning, Info, + None, } sealed class InAppNotification { @@ -13,18 +14,23 @@ sealed class InAppNotification { abstract val priority: Long data class TunnelStateError(val error: ErrorState) : InAppNotification() { - override val statusLevel = StatusLevel.Error - override val priority: Long = 1001 + override val statusLevel = + if (error.cause is ErrorStateCause.IsOffline) { + StatusLevel.Warning + } else { + StatusLevel.Error + } + override val priority: Long = 1004 } data object TunnelStateBlocked : InAppNotification() { - override val statusLevel = StatusLevel.Error - override val priority: Long = 1000 + override val statusLevel = StatusLevel.None + override val priority: Long = 1003 } data class UnsupportedVersion(val versionInfo: VersionInfo) : InAppNotification() { override val statusLevel = StatusLevel.Error - override val priority: Long = 999 + override val priority: Long = 1002 } data class AccountExpiry(val expiry: Duration) : InAppNotification() { @@ -39,6 +45,6 @@ sealed class InAppNotification { data object NewVersionChangelog : InAppNotification() { override val statusLevel = StatusLevel.Info - override val priority: Long = 1001 + override val priority: Long = 1000 } } diff --git a/android/lib/resource/src/main/res/drawable/icon_fail.xml b/android/lib/resource/src/main/res/drawable/icon_fail.xml index 3f934a1300..efe8f0c89d 100644 --- a/android/lib/resource/src/main/res/drawable/icon_fail.xml +++ b/android/lib/resource/src/main/res/drawable/icon_fail.xml @@ -1,10 +1,12 @@ <vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="44dp" - android:height="44dp" - android:viewportWidth="44" - android:viewportHeight="44"> - <path android:pathData="M22,22m-22,0a22,22 0,1 1,44 0a22,22 0,1 1,-44 0" - android:fillColor="#fff" /> - <path android:pathData="m25.147,22 l7.875,-7.872A2.225,2.225 0,0 0,29.875 10.982l-7.875,7.872L14.125,10.982A2.225,2.225 0,0 0,10.977 14.128l7.875,7.872 -7.875,7.871a2.225,2.225 0,0 0,3.147 3.146l7.875,-7.872 7.875,7.872a2.225,2.225 0,0 0,3.147 -3.146l-7.875,-7.872z" - android:fillColor="#e34039" /> + android:width="48dp" + android:height="48dp" + android:viewportWidth="48" + android:viewportHeight="48"> + <path + android:pathData="M24,44C35.046,44 44,35.046 44,24C44,12.954 35.046,4 24,4C12.954,4 4,12.954 4,24C4,35.046 12.954,44 24,44Z" + android:fillColor="#ffffff"/> + <path + android:pathData="M26.861,24L34.02,16.844C34.393,16.463 34.602,15.95 34.599,15.417C34.597,14.884 34.384,14.373 34.007,13.996C33.629,13.619 33.118,13.406 32.585,13.404C32.052,13.401 31.539,13.61 31.159,13.984L24,21.14L16.841,13.984C16.461,13.604 15.947,13.391 15.41,13.391C14.874,13.391 14.359,13.603 13.98,13.983C13.6,14.362 13.387,14.876 13.387,15.413C13.387,15.95 13.599,16.464 13.979,16.844L21.138,24L13.979,31.155C13.605,31.536 13.397,32.049 13.399,32.582C13.402,33.115 13.615,33.626 13.992,34.003C14.369,34.38 14.88,34.593 15.413,34.595C15.947,34.598 16.459,34.389 16.84,34.015L23.999,26.859L31.158,34.015C31.538,34.389 32.051,34.598 32.584,34.595C33.118,34.593 33.628,34.38 34.006,34.003C34.383,33.626 34.596,33.115 34.598,32.582C34.601,32.049 34.393,31.536 34.019,31.155L26.86,23.999L26.861,24Z" + android:fillColor="#E34039"/> </vector> diff --git a/android/lib/resource/src/main/res/drawable/icon_success.xml b/android/lib/resource/src/main/res/drawable/icon_success.xml index 1b15d4c1c4..2f0cf6d924 100644 --- a/android/lib/resource/src/main/res/drawable/icon_success.xml +++ b/android/lib/resource/src/main/res/drawable/icon_success.xml @@ -1,11 +1,12 @@ -<?xml version="1.0" encoding="utf-8"?> <vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="44dp" - android:height="44dp" - android:viewportWidth="44.0" - android:viewportHeight="44.0"> - <path android:fillColor="#fff" - android:pathData="M22,22m-22,0a22,22 0,1 1,44 0a22,22 0,1 1,-44 0" /> - <path android:fillColor="#44AD4D" - android:pathData="M11.4142136,20.5857864 C10.633165,19.8047379 9.366835,19.8047379 8.5857864,20.5857864 C7.8047379,21.366835 7.8047379,22.633165 8.5857864,23.4142136 L16.5857864,31.4142136 C17.366835,32.1952621 18.633165,32.1952621 19.4142136,31.4142136 L35.4142136,15.4142136 C36.1952621,14.633165 36.1952621,13.366835 35.4142136,12.5857864 C34.633165,11.8047379 33.366835,11.8047379 32.5857864,12.5857864 L18,27.1715729 L11.4142136,20.5857864 Z" /> + android:width="48dp" + android:height="48dp" + android:viewportWidth="48" + android:viewportHeight="48"> + <path + android:pathData="M24,44C35.046,44 44,35.046 44,24C44,12.954 35.046,4 24,4C12.954,4 4,12.954 4,24C4,35.046 12.954,44 24,44Z" + android:fillColor="#ffffff"/> + <path + android:pathData="M14.377,22.725C14.034,22.386 13.572,22.197 13.091,22.197C12.61,22.197 12.148,22.386 11.806,22.725C11.638,22.891 11.504,23.089 11.413,23.308C11.322,23.526 11.275,23.761 11.275,23.997C11.275,24.234 11.322,24.468 11.413,24.687C11.504,24.905 11.638,25.103 11.806,25.27L19.078,32.482C19.421,32.82 19.882,33.01 20.364,33.01C20.845,33.01 21.307,32.82 21.649,32.482L36.195,18.057C36.363,17.891 36.496,17.692 36.587,17.474C36.678,17.255 36.725,17.021 36.725,16.785C36.725,16.548 36.678,16.314 36.587,16.095C36.496,15.877 36.363,15.678 36.195,15.512C35.852,15.174 35.39,14.984 34.909,14.984C34.428,14.984 33.966,15.174 33.624,15.512L20.364,28.662L14.377,22.725Z" + android:fillColor="#44AD4D"/> </vector> 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 77ac2c3e62..e7e38534ba 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 @@ -7,11 +7,10 @@ data class Dimensions( val accountRowMinHeight: Dp = 48.dp, val accountRowSpacing: Dp = 24.dp, val addIconSize: Dp = 24.dp, - val bigIconSize: Dp = 44.dp, + val bigIconSize: Dp = 40.dp, val bottomPadding: Dp = 4.dp, val buttonHeight: Dp = 44.dp, - val buttonSpacing: Dp = 12.dp, - val buttonVerticalPadding: Dp = 8.dp, + val buttonSpacing: Dp = 8.dp, val cellEndPadding: Dp = 16.dp, val cellFooterTopPadding: Dp = 6.dp, val cellHeight: Dp = 56.dp, @@ -22,7 +21,7 @@ data class Dimensions( val cellVerticalSpacing: Dp = 24.dp, val chipSpace: Dp = 8.dp, val chipVerticalPadding: Dp = 4.dp, - val circularProgressBarLargeSize: Dp = 44.dp, + val circularProgressBarLargeSize: Dp = 40.dp, val circularProgressBarLargeStrokeWidth: Dp = 6.dp, val circularProgressBarMediumSize: Dp = 32.dp, val circularProgressBarMediumStrokeWidth: Dp = 4.dp, @@ -57,7 +56,8 @@ data class Dimensions( val problemReportIconToTitlePadding: Dp = 60.dp, val reconnectButtonMinInteractiveComponentSize: Dp = 40.dp, val relayCircleSize: Dp = 16.dp, - val screenVerticalMargin: Dp = 24.dp, + val screenBottomMargin: Dp = 16.dp, + val screenTopMargin: Dp = 24.dp, val searchFieldHeight: Dp = 42.dp, val searchFieldHeightExpanded: Dp = 72.dp, val searchFieldHorizontalPadding: Dp = 22.dp, @@ -77,7 +77,6 @@ data class Dimensions( val switchLocationRetryMinWidth: Dp = 48.dp, val tinyPadding: Dp = 4.dp, val titleIconSize: Dp = 48.dp, - val topPadding: Dp = 20.dp, val tvDrawerHeaderStartPadding: Dp = 12.dp, val tvDrawerHeaderWithFocusStartPadding: Dp = 16.dp, val tvDrawerHorizontalPadding: Dp = 12.dp, diff --git a/android/lib/tv/src/main/kotlin/net/mullvad/mullvadvpn/lib/tv/NavigationDrawerTv.kt b/android/lib/tv/src/main/kotlin/net/mullvad/mullvadvpn/lib/tv/NavigationDrawerTv.kt index 2b74716950..56b15f9616 100644 --- a/android/lib/tv/src/main/kotlin/net/mullvad/mullvadvpn/lib/tv/NavigationDrawerTv.kt +++ b/android/lib/tv/src/main/kotlin/net/mullvad/mullvadvpn/lib/tv/NavigationDrawerTv.kt @@ -103,8 +103,8 @@ fun NavigationDrawerTv( Modifier.fillMaxHeight() .background(brush) .padding( - top = Dimens.screenVerticalMargin, - bottom = Dimens.screenVerticalMargin, + top = Dimens.screenBottomMargin, + bottom = Dimens.screenBottomMargin, start = Dimens.tvDrawerHorizontalPadding, end = Dimens.tvDrawerHorizontalPadding, ) diff --git a/android/lib/ui/component/src/main/kotlin/net/mullvad/mullvadvpn/lib/ui/component/AnimatedNotificationBanner.kt b/android/lib/ui/component/src/main/kotlin/net/mullvad/mullvadvpn/lib/ui/component/AnimatedNotificationBanner.kt index ba0a936109..62c3b5522a 100644 --- a/android/lib/ui/component/src/main/kotlin/net/mullvad/mullvadvpn/lib/ui/component/AnimatedNotificationBanner.kt +++ b/android/lib/ui/component/src/main/kotlin/net/mullvad/mullvadvpn/lib/ui/component/AnimatedNotificationBanner.kt @@ -18,6 +18,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.testTag import androidx.compose.ui.semantics.Role @@ -184,6 +185,7 @@ private fun NotificationDot(statusLevel: StatusLevel, modifier: Modifier) { StatusLevel.Error -> MaterialTheme.colorScheme.error StatusLevel.Warning -> MaterialTheme.colorScheme.warning StatusLevel.Info -> MaterialTheme.colorScheme.tertiary + StatusLevel.None -> Color.Transparent }, shape = CircleShape, ) diff --git a/android/lib/ui/component/src/main/kotlin/net/mullvad/mullvadvpn/lib/ui/component/NotificationData.kt b/android/lib/ui/component/src/main/kotlin/net/mullvad/mullvadvpn/lib/ui/component/NotificationData.kt index c9bfcd887d..ed3da5b1b1 100644 --- a/android/lib/ui/component/src/main/kotlin/net/mullvad/mullvadvpn/lib/ui/component/NotificationData.kt +++ b/android/lib/ui/component/src/main/kotlin/net/mullvad/mullvadvpn/lib/ui/component/NotificationData.kt @@ -90,7 +90,7 @@ fun InAppNotification.toNotificationData( stringResource(id = R.string.new_device_notification_message, deviceName) .formatWithHtml() ), - statusLevel = StatusLevel.Info, + statusLevel = statusLevel, action = NotificationAction( Icons.Default.Clear, @@ -102,7 +102,7 @@ fun InAppNotification.toNotificationData( NotificationData( title = stringResource(id = R.string.account_credit_expires_soon), message = LocalContext.current.resources.getExpiryQuantityString(expiry), - statusLevel = StatusLevel.Error, + statusLevel = statusLevel, action = if (isPlayBuild) null else @@ -115,15 +115,15 @@ fun InAppNotification.toNotificationData( InAppNotification.TunnelStateBlocked -> NotificationData( title = stringResource(id = R.string.blocking_internet), - statusLevel = StatusLevel.Error, + statusLevel = StatusLevel.None, ) is InAppNotification.TunnelStateError -> - errorMessageBannerData(error, onClickShowWireguardPortSettings) + errorMessageBannerData(statusLevel, error, onClickShowWireguardPortSettings) is InAppNotification.UnsupportedVersion -> NotificationData( title = stringResource(id = R.string.unsupported_version), message = stringResource(id = R.string.unsupported_version_description), - statusLevel = StatusLevel.Error, + statusLevel = statusLevel, action = NotificationAction( Icons.AutoMirrored.Default.OpenInNew, @@ -150,7 +150,7 @@ fun InAppNotification.toNotificationData( contentDescription = stringResource(id = R.string.new_changelog_notification_message), ), - statusLevel = StatusLevel.Info, + statusLevel = statusLevel, action = NotificationAction( Icons.Default.Clear, @@ -162,13 +162,14 @@ fun InAppNotification.toNotificationData( @Composable private fun errorMessageBannerData( + statusLevel: StatusLevel, error: ErrorState, onClickShowWireguardPortSettings: () -> Unit, ) = NotificationData( title = error.title().formatWithHtml(), message = NotificationMessage.Text(error.message(onClickShowWireguardPortSettings)), - statusLevel = StatusLevel.Error, + statusLevel = statusLevel, ) @Composable |
