summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson@mullvad.net>2024-10-01 13:47:50 +0200
committerDavid Göransson <david.goransson@mullvad.net>2024-10-01 13:47:50 +0200
commit4a263046c888a0fda676847dd16a2c4a855d4419 (patch)
tree55555315cbf8c7cd74f474c3c20fa2884e36e781
parent5c05c73feaeeee30dae1c81a7e2ffc3e5b9e03b1 (diff)
parent029ceec389cb4ea73c6229a72f655aa125a78091 (diff)
downloadmullvadvpn-4a263046c888a0fda676847dd16a2c4a855d4419.tar.xz
mullvadvpn-4a263046c888a0fda676847dd16a2c4a855d4419.zip
Merge branch 'make-use-of-material-icons'
-rw-r--r--android/app/build.gradle.kts1
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/button/AnimatedIconButton.kt16
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/button/ExternalActionButton.kt12
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/button/InfoIconButton.kt6
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/button/SwitchLocationButton.kt7
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/CustomPortCell.kt5
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/DnsCell.kt6
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/DropdownMenuCell.kt6
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/ExpandableComposeCell.kt5
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/IconCell.kt13
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/InformationComposeCell.kt6
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/NavigationComposeCell.kt19
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/ObfuscationModeCell.kt10
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/RelayLocationCell.kt13
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SelectableCell.kt6
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SplitTunnelingCell.kt18
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SwitchComposeCell.kt9
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Chevron.kt91
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/CopyableObfuscationView.kt14
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/ExpandChevron.kt61
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/FilterChip.kt5
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/MullvadModalBottomSheet.kt2
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/NavigateButton.kt18
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/PlayPayment.kt5
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Scaffolding.kt8
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/TopBar.kt12
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/notificationbanner/NotificationBanner.kt4
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/notificationbanner/NotificationData.kt19
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DaitaConfirmationDialog.kt5
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/NegativeConfirmationDialog.kt5
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/info/InfoDialog.kt5
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/preview/SplitTunnelingUiStatePreviewParameterProvider.kt6
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreen.kt9
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ApiAccessListScreen.kt12
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ApiAccessMethodDetailsScreen.kt9
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AutoConnectAndLockdownModeScreen.kt17
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ConnectScreen.kt4
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/CustomListsScreen.kt5
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceListScreen.kt4
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/EditApiAccessMethodScreen.kt11
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/EditCustomListScreen.kt9
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/FilterScreen.kt5
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/LoginScreen.kt4
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/PrivacyDisclaimerScreen.kt6
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreen.kt31
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ServerIpOverridesScreen.kt13
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SettingsScreen.kt4
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ViewLogsScreen.kt7
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/WelcomeScreen.kt5
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/textfield/ApiAccessMethodTextField.kt6
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/textfield/SearchTextField.kt8
-rw-r--r--android/app/src/main/res/drawable/icon_reload.xml14
-rw-r--r--android/config/baseline.xml5
-rw-r--r--android/gradle/libs.versions.toml3
-rw-r--r--android/gradle/verification-metadata.xml58
-rw-r--r--android/lib/resource/src/main/res/drawable/account_history_remove_pressed.xml38
-rw-r--r--android/lib/resource/src/main/res/drawable/ic_icons_add.xml9
-rw-r--r--android/lib/resource/src/main/res/drawable/ic_icons_remove.xml9
-rw-r--r--android/lib/resource/src/main/res/drawable/ic_remove.xml8
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_account.xml11
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_add.xml8
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_alert.xml26
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_arrow_blue20.xml11
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_arrow_white.xml11
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_back.xml11
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_chevron.xml14
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_close.xml38
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_copy.xml8
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_delete.xml8
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_edit.xml8
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_extlink.xml9
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_hide.xml8
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_info.xml8
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_more_vert.xml8
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_reconnect.xml13
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_reload.xml9
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_settings.xml11
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_show.xml8
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_spinner.xml18
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_text_fields.xml8
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_tick.xml11
-rw-r--r--android/lib/resource/src/main/res/drawable/icon_upload_file.xml8
-rw-r--r--android/lib/resource/src/main/res/drawable/icons_more_circle.xml12
-rw-r--r--android/lib/resource/src/main/res/drawable/icons_search.xml22
-rw-r--r--android/lib/theme/src/main/kotlin/net/mullvad/mullvadvpn/lib/theme/dimensions/Dimensions.kt7
85 files changed, 373 insertions, 672 deletions
diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts
index bb290ac89e..97a3965aaf 100644
--- a/android/app/build.gradle.kts
+++ b/android/app/build.gradle.kts
@@ -349,6 +349,7 @@ dependencies {
implementation(libs.compose.constrainlayout)
implementation(libs.compose.foundation)
implementation(libs.compose.material3)
+ implementation(libs.compose.icons.extended)
implementation(libs.compose.ui)
implementation(libs.compose.ui.util)
implementation(libs.compose.destinations)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/button/AnimatedIconButton.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/button/AnimatedIconButton.kt
index 090dc287c6..dd91846c8c 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/button/AnimatedIconButton.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/button/AnimatedIconButton.kt
@@ -10,15 +10,15 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.painter.Painter
+import androidx.compose.ui.graphics.vector.ImageVector
import kotlinx.coroutines.delay
internal const val PRESS_EFFECT_TIME_SPAN: Long = 1000
@Composable
fun AnimatedIconButton(
- defaultIcon: Painter,
- secondaryIcon: Painter,
+ defaultIcon: ImageVector,
+ secondaryIcon: ImageVector,
pressEffectDuration: Long = PRESS_EFFECT_TIME_SPAN,
defaultIconTint: Color,
secondaryIconTint: Color,
@@ -50,24 +50,24 @@ fun AnimatedIconButton(
}
) {
AnimatedContent(targetState = state, label = contentDescription) { targetState ->
- val iconPainter: Painter
+ val imageVector: ImageVector
val tint: Color
when (targetState) {
ButtonState.IDLE -> {
- iconPainter = defaultIcon
+ imageVector = defaultIcon
tint = defaultIconTint
}
ButtonState.TOGGLED -> {
- iconPainter = secondaryIcon
+ imageVector = secondaryIcon
tint = secondaryIconTint
}
ButtonState.PRESSED -> {
- iconPainter = secondaryIcon
+ imageVector = secondaryIcon
tint = secondaryIconTint
}
}
- Icon(painter = iconPainter, contentDescription = contentDescription, tint = tint)
+ Icon(imageVector = imageVector, contentDescription = contentDescription, tint = tint)
}
}
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/button/ExternalActionButton.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/button/ExternalActionButton.kt
index f4c309bd07..2666ab1485 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/button/ExternalActionButton.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/button/ExternalActionButton.kt
@@ -1,11 +1,13 @@
package net.mullvad.mullvadvpn.compose.button
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.automirrored.filled.OpenInNew
+import androidx.compose.material.icons.filled.OpenInNew
import androidx.compose.material3.Icon
+import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
-import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.lib.theme.AppTheme
@Preview
@@ -45,7 +47,11 @@ fun ExternalButton(
modifier = modifier,
isEnabled = isEnabled,
icon = {
- Icon(painter = painterResource(id = R.drawable.icon_extlink), contentDescription = null)
+ Icon(
+ imageVector = Icons.AutoMirrored.Filled.OpenInNew,
+ tint = MaterialTheme.colorScheme.onTertiary,
+ contentDescription = null,
+ )
},
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/button/InfoIconButton.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/button/InfoIconButton.kt
index 61d0db68b3..df26edb857 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/button/InfoIconButton.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/button/InfoIconButton.kt
@@ -1,13 +1,13 @@
package net.mullvad.mullvadvpn.compose.button
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Info
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.res.painterResource
-import net.mullvad.mullvadvpn.R
@Composable
fun InfoIconButton(
@@ -18,7 +18,7 @@ fun InfoIconButton(
) {
IconButton(modifier = modifier, onClick = onClick) {
Icon(
- painter = painterResource(id = R.drawable.icon_info),
+ imageVector = Icons.Default.Info,
contentDescription = contentDescription,
tint = iconTint,
)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/button/SwitchLocationButton.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/button/SwitchLocationButton.kt
index 69bff821c9..910276bb5b 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/button/SwitchLocationButton.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/button/SwitchLocationButton.kt
@@ -121,7 +121,10 @@ fun SwitchLocationButton(
overflow = TextOverflow.Ellipsis,
modifier =
if (isReconnectButtonEnabled) {
- Modifier.padding(start = componentHeight + Dimens.listItemDivider)
+ Modifier.padding(
+ start =
+ componentHeight + Dimens.listItemDivider + Dimens.smallPadding
+ )
} else {
Modifier
},
@@ -153,7 +156,7 @@ fun SwitchLocationButton(
.defaultMinSize(minWidth = Dimens.switchLocationRetryMinWidth),
) {
Icon(
- painter = painterResource(id = R.drawable.icon_reload),
+ painter = painterResource(R.drawable.icon_reconnect),
contentDescription = null,
)
}
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 c73054f772..321a86700f 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,6 +12,8 @@ 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
@@ -20,7 +22,6 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
@@ -78,7 +79,7 @@ fun CustomPortCell(
.testTag(mainTestTag),
) {
Icon(
- painter = painterResource(id = R.drawable.icon_tick),
+ imageVector = Icons.Default.Check,
contentDescription = null,
tint = MaterialTheme.colorScheme.onSelected,
modifier =
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/DnsCell.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/DnsCell.kt
index a420534780..1aacaedbc1 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/DnsCell.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/DnsCell.kt
@@ -1,12 +1,14 @@
package net.mullvad.mullvadvpn.compose.cell
import androidx.compose.foundation.layout.RowScope
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Error
+import androidx.compose.material.icons.rounded.Error
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
@@ -38,7 +40,7 @@ fun DnsCell(
bodyView = {
if (isUnreachableLocalDnsWarningVisible) {
Icon(
- painter = painterResource(id = R.drawable.icon_alert),
+ imageVector = Icons.Rounded.Error,
contentDescription = stringResource(id = R.string.confirm_local_dns),
tint = MaterialTheme.colorScheme.warning,
)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/DropdownMenuCell.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/DropdownMenuCell.kt
index 4ab25d6078..02568ec5a3 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/DropdownMenuCell.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/DropdownMenuCell.kt
@@ -1,15 +1,15 @@
package net.mullvad.mullvadvpn.compose.cell
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.tooling.preview.Preview
-import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.lib.theme.AppTheme
import net.mullvad.mullvadvpn.lib.theme.Dimens
@@ -42,7 +42,7 @@ fun ThreeDotCell(
bodyView = {
IconButton(onClick = onClickDots) {
Icon(
- painter = painterResource(id = R.drawable.icon_more_vert),
+ imageVector = Icons.Default.MoreVert,
contentDescription = null,
tint = textColor,
)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/ExpandableComposeCell.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/ExpandableComposeCell.kt
index 3ccefe13b5..46a2053ffc 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/ExpandableComposeCell.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/ExpandableComposeCell.kt
@@ -4,6 +4,8 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.layout.wrapContentWidth
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Info
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
@@ -15,7 +17,6 @@ import androidx.compose.ui.draw.alpha
import androidx.compose.ui.focus.focusProperties
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview
@@ -100,7 +101,7 @@ private fun ExpandableComposeCellBody(
onClick = onInfoClicked,
) {
Icon(
- painter = painterResource(id = R.drawable.icon_info),
+ imageVector = Icons.Default.Info,
contentDescription = null,
tint = MaterialTheme.colorScheme.onPrimary,
)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/IconCell.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/IconCell.kt
index 1823d15765..329f66afb4 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/IconCell.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/IconCell.kt
@@ -3,28 +3,29 @@ package net.mullvad.mullvadvpn.compose.cell
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.width
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Add
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
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.res.painterResource
+import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.tooling.preview.Preview
-import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.lib.theme.AppTheme
import net.mullvad.mullvadvpn.lib.theme.Dimens
@Preview
@Composable
private fun PreviewIconCell() {
- AppTheme { IconCell(iconId = R.drawable.icon_add, title = "Add") }
+ AppTheme { IconCell(imageVector = Icons.Default.Add, title = "Add") }
}
@Composable
fun IconCell(
- iconId: Int?,
+ imageVector: ImageVector?,
title: String,
modifier: Modifier = Modifier,
contentDescription: String? = null,
@@ -37,9 +38,9 @@ fun IconCell(
BaseCell(
headlineContent = {
Row(verticalAlignment = Alignment.CenterVertically) {
- iconId?.let {
+ imageVector?.let {
Icon(
- painter = painterResource(id = iconId),
+ imageVector = imageVector,
contentDescription = contentDescription,
tint = titleColor,
)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/InformationComposeCell.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/InformationComposeCell.kt
index adfa64585c..f5376335b3 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/InformationComposeCell.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/InformationComposeCell.kt
@@ -4,6 +4,8 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.layout.wrapContentWidth
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Info
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
@@ -13,9 +15,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.focus.focusProperties
import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
-import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.lib.theme.AppTheme
import net.mullvad.mullvadvpn.lib.theme.Dimens
import net.mullvad.mullvadvpn.lib.theme.color.AlphaInactive
@@ -79,7 +79,7 @@ private fun InformationComposeCellBody(modifier: Modifier, onInfoClicked: (() ->
.align(Alignment.CenterVertically),
) {
Icon(
- painter = painterResource(id = R.drawable.icon_info),
+ imageVector = Icons.Default.Info,
contentDescription = null,
tint = MaterialTheme.colorScheme.onPrimary,
)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/NavigationComposeCell.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/NavigationComposeCell.kt
index 2ef9a22c4e..2240e10eb8 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/NavigationComposeCell.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/NavigationComposeCell.kt
@@ -6,6 +6,10 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.layout.wrapContentWidth
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ChevronRight
+import androidx.compose.material.icons.filled.Error
+import androidx.compose.material.icons.filled.OpenInNew
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
@@ -13,11 +17,8 @@ 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.res.painterResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
-import net.mullvad.mullvadvpn.R
-import net.mullvad.mullvadvpn.compose.component.ChevronRight
import net.mullvad.mullvadvpn.lib.theme.AppTheme
import net.mullvad.mullvadvpn.lib.theme.Dimens
@@ -67,7 +68,7 @@ fun NavigationComposeCell(
showWarning: Boolean = false,
textColor: Color = MaterialTheme.colorScheme.onPrimary,
bodyView: @Composable () -> Unit = {
- ChevronRight(contentDescription = title, tint = textColor)
+ Icon(Icons.Default.ChevronRight, contentDescription = title, tint = textColor)
},
isRowEnabled: Boolean = true,
onClick: () -> Unit,
@@ -96,7 +97,7 @@ internal fun NavigationTitleView(
) {
if (showWarning) {
Icon(
- painter = painterResource(id = R.drawable.icon_alert),
+ imageVector = Icons.Default.Error,
modifier = Modifier.padding(end = Dimens.smallPadding),
contentDescription = null,
tint = MaterialTheme.colorScheme.error,
@@ -115,7 +116,7 @@ internal fun NavigationTitleView(
@Composable
internal fun DefaultExternalLinkView(chevronContentDescription: String, tint: Color) {
Icon(
- painter = painterResource(id = R.drawable.icon_extlink),
+ imageVector = Icons.Default.OpenInNew,
contentDescription = chevronContentDescription,
tint = tint,
)
@@ -139,7 +140,11 @@ internal fun NavigationCellBody(
if (isExternalLink) {
DefaultExternalLinkView(content, tint = contentColor)
} else {
- ChevronRight(tint = contentColor, contentDescription = contentBodyDescription)
+ Icon(
+ Icons.Default.ChevronRight,
+ tint = contentColor,
+ contentDescription = contentBodyDescription,
+ )
}
}
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/ObfuscationModeCell.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/ObfuscationModeCell.kt
index 55e1a76d9d..6688f5d0ab 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/ObfuscationModeCell.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/ObfuscationModeCell.kt
@@ -10,6 +10,9 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.widthIn
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ChevronRight
+import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.VerticalDivider
import androidx.compose.runtime.Composable
@@ -20,7 +23,6 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import net.mullvad.mullvadvpn.R
-import net.mullvad.mullvadvpn.compose.component.ChevronRight
import net.mullvad.mullvadvpn.compose.preview.SelectObfuscationCellPreviewParameterProvider
import net.mullvad.mullvadvpn.lib.model.Constraint
import net.mullvad.mullvadvpn.lib.model.ObfuscationMode
@@ -98,7 +100,11 @@ fun ObfuscationModeCell(
.clickable { onNavigate() },
contentAlignment = Alignment.Center,
) {
- ChevronRight(tint = MaterialTheme.colorScheme.onPrimary, contentDescription = null)
+ Icon(
+ imageVector = Icons.Default.ChevronRight,
+ tint = MaterialTheme.colorScheme.onPrimary,
+ contentDescription = null,
+ )
}
}
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/RelayLocationCell.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/RelayLocationCell.kt
index 3ae3487526..5b3b828e3d 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/RelayLocationCell.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/RelayLocationCell.kt
@@ -15,6 +15,8 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
+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
@@ -24,13 +26,11 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
-import net.mullvad.mullvadvpn.R
-import net.mullvad.mullvadvpn.compose.component.Chevron
+import net.mullvad.mullvadvpn.compose.component.ExpandChevron
import net.mullvad.mullvadvpn.compose.component.MullvadCheckbox
import net.mullvad.mullvadvpn.compose.preview.RelayItemCheckableCellPreviewParameterProvider
import net.mullvad.mullvadvpn.lib.model.RelayItem
@@ -83,10 +83,7 @@ fun StatusRelayItemCell(
isSelected,
leadingContent = {
if (isSelected) {
- Icon(
- painter = painterResource(id = R.drawable.icon_tick),
- contentDescription = null,
- )
+ Icon(imageVector = Icons.Default.Check, contentDescription = null)
} else {
Box(
modifier =
@@ -228,7 +225,7 @@ private fun RowScope.ExpandButton(
color = MaterialTheme.colorScheme.surface,
modifier = Modifier.padding(vertical = Dimens.verticalDividerPadding),
)
- Chevron(
+ ExpandChevron(
color = color,
isExpanded = isExpanded,
modifier =
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SelectableCell.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SelectableCell.kt
index f958bec319..9d3688d352 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SelectableCell.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SelectableCell.kt
@@ -3,17 +3,17 @@ package net.mullvad.mullvadvpn.compose.cell
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.padding
+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.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp
-import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.compose.component.SpacedColumn
import net.mullvad.mullvadvpn.lib.theme.AppTheme
import net.mullvad.mullvadvpn.lib.theme.Dimens
@@ -100,7 +100,7 @@ fun RowScope.SelectableIcon(
isEnabled: Boolean,
) {
Icon(
- painter = painterResource(id = R.drawable.icon_tick),
+ imageVector = Icons.Default.Check,
contentDescription = iconContentDescription,
tint = MaterialTheme.colorScheme.onSelected,
modifier =
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SplitTunnelingCell.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SplitTunnelingCell.kt
index 6a684edef1..05bbcb1b5a 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SplitTunnelingCell.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SplitTunnelingCell.kt
@@ -5,6 +5,9 @@ import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Add
+import androidx.compose.material.icons.filled.Remove
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
@@ -106,15 +109,12 @@ fun SplitTunnelingCell(
},
bodyView = {
Icon(
- painter =
- painterResource(
- id =
- if (isSelected) {
- R.drawable.ic_icons_remove
- } else {
- R.drawable.ic_icons_add
- }
- ),
+ imageVector =
+ if (isSelected) {
+ Icons.Default.Remove
+ } else {
+ Icons.Default.Add
+ },
contentDescription = null,
tint = MaterialTheme.colorScheme.onSurface,
modifier = Modifier.size(size = Dimens.addIconSize),
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SwitchComposeCell.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SwitchComposeCell.kt
index 3ed8887291..c5d9ef1f3f 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SwitchComposeCell.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SwitchComposeCell.kt
@@ -6,6 +6,8 @@ import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.layout.wrapContentWidth
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Info
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
@@ -15,7 +17,6 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.focusProperties
import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview
@@ -167,11 +168,7 @@ fun SwitchCellView(
.padding(horizontal = Dimens.miniPadding),
onClick = onInfoClicked,
) {
- Icon(
- painter = painterResource(id = R.drawable.icon_info),
- contentDescription = null,
- tint = iconColor,
- )
+ Icon(imageVector = Icons.Default.Info, contentDescription = null, tint = iconColor)
}
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Chevron.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Chevron.kt
deleted file mode 100644
index 29ca1537f8..0000000000
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Chevron.kt
+++ /dev/null
@@ -1,91 +0,0 @@
-package net.mullvad.mullvadvpn.compose.component
-
-import androidx.compose.animation.core.LinearEasing
-import androidx.compose.animation.core.TweenSpec
-import androidx.compose.animation.core.animateFloatAsState
-import androidx.compose.foundation.layout.Column
-import androidx.compose.material3.Icon
-import androidx.compose.material3.IconButton
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.remember
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.rotate
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.res.painterResource
-import androidx.compose.ui.tooling.preview.Preview
-import net.mullvad.mullvadvpn.R
-
-@Composable
-@Preview
-private fun PreviewChevron() {
- Column {
- Chevron(color = MaterialTheme.colorScheme.onPrimary, isExpanded = false)
- Chevron(color = MaterialTheme.colorScheme.onPrimary, isExpanded = true)
- }
-}
-
-@Composable
-@Preview
-private fun PreviewChevronRight() {
- Column {
- ChevronLeft(tint = MaterialTheme.colorScheme.onPrimary)
- ChevronRight(tint = MaterialTheme.colorScheme.onPrimary)
- }
-}
-
-@Composable
-fun Chevron(modifier: Modifier = Modifier, color: Color, isExpanded: Boolean) {
-
- val degree = remember(isExpanded) { if (isExpanded) UP_ROTATION else DOWN_ROTATION }
- val animatedRotation =
- animateFloatAsState(
- targetValue = degree,
- label = "",
- animationSpec = TweenSpec(100, easing = LinearEasing),
- )
-
- Icon(
- painterResource(id = R.drawable.icon_chevron),
- contentDescription = null,
- tint = color,
- modifier = modifier.rotate(animatedRotation.value),
- )
-}
-
-@Composable
-fun ChevronLeft(modifier: Modifier = Modifier, tint: Color, contentDescription: String? = null) {
- Icon(
- painterResource(id = R.drawable.icon_chevron),
- contentDescription = contentDescription,
- tint = tint,
- modifier = modifier.rotate(LEFT_ROTATION),
- )
-}
-
-@Composable
-fun ChevronRight(modifier: Modifier = Modifier, tint: Color, contentDescription: String? = null) {
- Icon(
- painterResource(id = R.drawable.icon_chevron),
- contentDescription = contentDescription,
- tint = tint,
- modifier = modifier.rotate(RIGHT_ROTATION),
- )
-}
-
-@Composable
-fun ExpandChevronIconButton(
- modifier: Modifier = Modifier,
- color: Color,
- onExpand: (Boolean) -> Unit,
- isExpanded: Boolean,
-) {
- IconButton(modifier = modifier, onClick = { onExpand(!isExpanded) }) {
- Chevron(isExpanded = isExpanded, color = color)
- }
-}
-
-private const val RIGHT_ROTATION = -90f
-private const val LEFT_ROTATION = 90f
-private const val DOWN_ROTATION = 0f
-private const val UP_ROTATION = 180f
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/CopyableObfuscationView.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/CopyableObfuscationView.kt
index ac0938756e..430ae0cba1 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/CopyableObfuscationView.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/CopyableObfuscationView.kt
@@ -2,6 +2,11 @@ package net.mullvad.mullvadvpn.compose.component
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Check
+import androidx.compose.material.icons.filled.ContentCopy
+import androidx.compose.material.icons.filled.Visibility
+import androidx.compose.material.icons.filled.VisibilityOff
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
@@ -10,7 +15,6 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment.Companion.CenterVertically
import androidx.compose.ui.Modifier
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import net.mullvad.mullvadvpn.R
@@ -38,8 +42,8 @@ fun CopyableObfuscationView(
modifier = Modifier.weight(1f),
)
AnimatedIconButton(
- defaultIcon = painterResource(id = R.drawable.icon_hide),
- secondaryIcon = painterResource(id = R.drawable.icon_show),
+ defaultIcon = Icons.Default.Visibility,
+ secondaryIcon = Icons.Default.VisibilityOff,
defaultIconTint = MaterialTheme.colorScheme.onSurface,
secondaryIconTint = MaterialTheme.colorScheme.onSurface,
isToggleButton = true,
@@ -54,8 +58,8 @@ fun CopyableObfuscationView(
@Composable
fun CopyAnimatedIconButton(onClick: () -> Unit) {
AnimatedIconButton(
- defaultIcon = painterResource(id = R.drawable.icon_copy),
- secondaryIcon = painterResource(id = R.drawable.icon_tick),
+ defaultIcon = Icons.Default.ContentCopy,
+ secondaryIcon = Icons.Default.Check,
defaultIconTint = MaterialTheme.colorScheme.onSurface,
secondaryIconTint = MaterialTheme.colorScheme.tertiary,
isToggleButton = false,
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/ExpandChevron.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/ExpandChevron.kt
new file mode 100644
index 0000000000..a38b283256
--- /dev/null
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/ExpandChevron.kt
@@ -0,0 +1,61 @@
+package net.mullvad.mullvadvpn.compose.component
+
+import androidx.compose.animation.core.LinearEasing
+import androidx.compose.animation.core.TweenSpec
+import androidx.compose.animation.core.animateFloatAsState
+import androidx.compose.foundation.layout.Column
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.KeyboardArrowDown
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.rotate
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.tooling.preview.Preview
+
+@Composable
+@Preview
+private fun PreviewChevron() {
+ Column {
+ ExpandChevron(color = MaterialTheme.colorScheme.onPrimary, isExpanded = false)
+ ExpandChevron(color = MaterialTheme.colorScheme.onPrimary, isExpanded = true)
+ }
+}
+
+@Composable
+fun ExpandChevron(modifier: Modifier = Modifier, color: Color, isExpanded: Boolean) {
+
+ val degree = remember(isExpanded) { if (isExpanded) UP_ROTATION else DOWN_ROTATION }
+ val animatedRotation =
+ animateFloatAsState(
+ targetValue = degree,
+ label = "",
+ animationSpec = TweenSpec(ROTATION_ANIMATION_DURATION, easing = LinearEasing),
+ )
+
+ Icon(
+ imageVector = Icons.Default.KeyboardArrowDown,
+ contentDescription = null,
+ tint = color,
+ modifier = modifier.rotate(animatedRotation.value),
+ )
+}
+
+@Composable
+fun ExpandChevronIconButton(
+ modifier: Modifier = Modifier,
+ color: Color,
+ onExpand: (Boolean) -> Unit,
+ isExpanded: Boolean,
+) {
+ IconButton(modifier = modifier, onClick = { onExpand(!isExpanded) }) {
+ ExpandChevron(isExpanded = isExpanded, color = color)
+ }
+}
+
+private const val DOWN_ROTATION = 0f
+private const val UP_ROTATION = 180f
+private const val ROTATION_ANIMATION_DURATION = 100
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/FilterChip.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/FilterChip.kt
index 94e1c7853a..92e2093177 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/FilterChip.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/FilterChip.kt
@@ -1,6 +1,8 @@
package net.mullvad.mullvadvpn.compose.component
import androidx.compose.foundation.layout.size
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Clear
import androidx.compose.material3.FilterChipDefaults
import androidx.compose.material3.Icon
import androidx.compose.material3.InputChip
@@ -9,7 +11,6 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import net.mullvad.mullvadvpn.R
@@ -76,7 +77,7 @@ fun MullvadFilterChip(
if (enabled) {
{
Icon(
- painter = painterResource(id = R.drawable.icon_close),
+ imageVector = Icons.Default.Clear,
contentDescription = null,
modifier = Modifier.size(Dimens.smallIconSize),
)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/MullvadModalBottomSheet.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/MullvadModalBottomSheet.kt
index 1276823792..83f4758db4 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/MullvadModalBottomSheet.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/MullvadModalBottomSheet.kt
@@ -30,7 +30,7 @@ private fun PreviewMullvadModalBottomSheet() {
sheetContent = {
HeaderCell(text = "Title")
HorizontalDivider()
- IconCell(iconId = null, title = "Select")
+ IconCell(imageVector = null, title = "Select")
},
onDismissRequest = {},
)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/NavigateButton.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/NavigateButton.kt
index c9064e1372..43ba773cdc 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/NavigateButton.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/NavigateButton.kt
@@ -1,34 +1,32 @@
package net.mullvad.mullvadvpn.compose.component
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.automirrored.filled.ArrowBack
+import androidx.compose.material.icons.filled.ArrowBack
+import androidx.compose.material.icons.filled.ArrowDownward
+import androidx.compose.material.icons.filled.Close
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.rotate
-import androidx.compose.ui.res.painterResource
-import net.mullvad.mullvadvpn.R
@Composable
fun NavigateBackIconButton(modifier: Modifier = Modifier, onNavigateBack: () -> Unit) {
IconButton(onClick = onNavigateBack, modifier = modifier) {
- Icon(painter = painterResource(id = R.drawable.icon_back), contentDescription = null)
+ Icon(imageVector = Icons.AutoMirrored.Default.ArrowBack, contentDescription = null)
}
}
@Composable
fun NavigateBackDownIconButton(onNavigateBack: () -> Unit) {
IconButton(onClick = onNavigateBack) {
- Icon(
- modifier = Modifier.rotate(-90f),
- painter = painterResource(id = R.drawable.icon_back),
- contentDescription = null,
- )
+ Icon(imageVector = Icons.Default.ArrowDownward, contentDescription = null)
}
}
@Composable
fun NavigateCloseIconButton(onNavigateClose: () -> Unit) {
IconButton(onClick = onNavigateClose) {
- Icon(painter = painterResource(id = R.drawable.icon_close), contentDescription = null)
+ Icon(imageVector = Icons.Default.Close, contentDescription = null)
}
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/PlayPayment.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/PlayPayment.kt
index 87757167a7..ce2c49bf9c 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/PlayPayment.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/PlayPayment.kt
@@ -6,6 +6,8 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Info
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
@@ -14,7 +16,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import net.mullvad.mullvadvpn.R
@@ -162,7 +163,7 @@ fun PlayPayment(
modifier = Modifier.testTag(PLAY_PAYMENT_INFO_ICON_TEST_TAG),
) {
Icon(
- painter = painterResource(id = R.drawable.icon_info),
+ imageVector = Icons.Default.Info,
contentDescription = null,
tint = MaterialTheme.colorScheme.onSurface,
)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Scaffolding.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Scaffolding.kt
index 72ee86678b..3d591bafba 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Scaffolding.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Scaffolding.kt
@@ -11,6 +11,9 @@ import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.automirrored.filled.OpenInNew
+import androidx.compose.material.icons.filled.OpenInNew
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
@@ -26,8 +29,6 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.input.nestedscroll.nestedScroll
-import androidx.compose.ui.res.painterResource
-import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.compose.button.PrimaryButton
import net.mullvad.mullvadvpn.lib.theme.Dimens
import net.mullvad.mullvadvpn.lib.theme.color.AlphaScrollbar
@@ -245,7 +246,8 @@ fun ScaffoldWithLargeTopBarAndButton(
),
trailingIcon = {
Icon(
- painter = painterResource(id = R.drawable.icon_extlink),
+ imageVector = Icons.AutoMirrored.Filled.OpenInNew,
+ tint = MaterialTheme.colorScheme.onPrimary,
contentDescription = null,
)
},
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/TopBar.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/TopBar.kt
index d90be57952..5bdb8e71ca 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/TopBar.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/TopBar.kt
@@ -17,6 +17,9 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.AccountCircle
+import androidx.compose.material.icons.filled.Settings
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
@@ -161,7 +164,7 @@ fun MullvadTopBar(
onClick = onAccountClicked,
) {
Icon(
- painter = painterResource(R.drawable.icon_account),
+ imageVector = Icons.Default.AccountCircle,
tint = iconTintColor,
contentDescription = stringResource(id = R.string.settings_account),
)
@@ -175,7 +178,7 @@ fun MullvadTopBar(
onClick = onSettingsClicked,
) {
Icon(
- painter = painterResource(R.drawable.icon_settings),
+ imageVector = Icons.Default.Settings,
tint = iconTintColor,
contentDescription = stringResource(id = R.string.settings),
)
@@ -229,10 +232,7 @@ private fun PreviewSlimMediumTopBar() {
title = "Long top bar with long title",
actions = {
IconButton(onClick = {}) {
- Icon(
- painter = painterResource(id = R.drawable.icon_settings),
- contentDescription = null,
- )
+ Icon(imageVector = Icons.Default.Settings, contentDescription = null)
}
},
)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/notificationbanner/NotificationBanner.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/notificationbanner/NotificationBanner.kt
index ac325c8f9c..676b08ed34 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/notificationbanner/NotificationBanner.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/notificationbanner/NotificationBanner.kt
@@ -19,7 +19,6 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
@@ -186,7 +185,8 @@ private fun Notification(notificationBannerData: NotificationData) {
onClick = it.onClick,
) {
Icon(
- painter = painterResource(id = it.icon),
+ modifier = Modifier.padding(Dimens.notificationIconPadding),
+ imageVector = it.icon,
contentDescription = null,
tint = MaterialTheme.colorScheme.onSurface,
)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/notificationbanner/NotificationData.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/notificationbanner/NotificationData.kt
index bffd7d7560..1b811ed313 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/notificationbanner/NotificationData.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/notificationbanner/NotificationData.kt
@@ -1,8 +1,12 @@
package net.mullvad.mullvadvpn.compose.component.notificationbanner
-import androidx.annotation.DrawableRes
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.automirrored.filled.OpenInNew
+import androidx.compose.material.icons.filled.Clear
+import androidx.compose.material.icons.filled.OpenInNew
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
+import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.AnnotatedString
@@ -31,7 +35,7 @@ data class NotificationData(
) : this(title, message?.let { AnnotatedString(it) }, statusLevel, action)
}
-data class NotificationAction(@DrawableRes val icon: Int, val onClick: (() -> Unit))
+data class NotificationAction(val icon: ImageVector, val onClick: (() -> Unit))
@Composable
fun InAppNotification.toNotificationData(
@@ -60,7 +64,7 @@ fun InAppNotification.toNotificationData(
)
),
statusLevel = StatusLevel.Info,
- action = NotificationAction(R.drawable.icon_close, onDismissNewDevice),
+ action = NotificationAction(Icons.Default.Clear, onDismissNewDevice),
)
is InAppNotification.AccountExpiry ->
NotificationData(
@@ -69,7 +73,8 @@ fun InAppNotification.toNotificationData(
statusLevel = StatusLevel.Error,
action =
if (isPlayBuild) null
- else NotificationAction(R.drawable.icon_extlink, onClickShowAccount),
+ else
+ NotificationAction(Icons.AutoMirrored.Default.OpenInNew, onClickShowAccount),
)
InAppNotification.TunnelStateBlocked ->
NotificationData(
@@ -84,7 +89,11 @@ fun InAppNotification.toNotificationData(
statusLevel = StatusLevel.Error,
action =
if (isPlayBuild) null
- else NotificationAction(R.drawable.icon_extlink, onClickUpdateVersion),
+ else
+ NotificationAction(
+ Icons.AutoMirrored.Default.OpenInNew,
+ onClickUpdateVersion,
+ ),
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DaitaConfirmationDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DaitaConfirmationDialog.kt
index a5237a0ca5..a79398897a 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DaitaConfirmationDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DaitaConfirmationDialog.kt
@@ -7,6 +7,8 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Error
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
@@ -14,7 +16,6 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.dropUnlessResumed
@@ -44,7 +45,7 @@ fun DaitaConfirmation(navigator: ResultBackNavigator<Boolean>) {
icon = {
Icon(
modifier = Modifier.fillMaxWidth().height(Dimens.dialogIconHeight),
- painter = painterResource(id = R.drawable.icon_alert),
+ imageVector = Icons.Default.Error,
contentDescription = null,
tint = MaterialTheme.colorScheme.onSurface,
)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/NegativeConfirmationDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/NegativeConfirmationDialog.kt
index bad856d8c7..4720fd9fb7 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/NegativeConfirmationDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/NegativeConfirmationDialog.kt
@@ -4,6 +4,8 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Error
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Icon
import androidx.compose.material3.LocalTextStyle
@@ -14,7 +16,6 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.TextStyle
@@ -80,7 +81,7 @@ fun NegativeConfirmationDialog(
icon = {
Icon(
modifier = Modifier.fillMaxWidth().height(Dimens.dialogIconHeight),
- painter = painterResource(id = R.drawable.icon_alert),
+ imageVector = Icons.Default.Error,
contentDescription = stringResource(id = R.string.remove_button),
tint = MaterialTheme.colorScheme.error,
)
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 f1f0a6d41f..b77decc9f0 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
@@ -7,6 +7,8 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Info
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
@@ -14,7 +16,6 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview
@@ -48,7 +49,7 @@ fun InfoDialog(message: String, additionalInfo: String? = null, onDismiss: () ->
icon = {
Icon(
modifier = Modifier.fillMaxWidth().height(Dimens.dialogIconHeight),
- painter = painterResource(id = R.drawable.icon_info),
+ imageVector = Icons.Default.Info,
contentDescription = "",
tint = MaterialTheme.colorScheme.onSurface,
)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/preview/SplitTunnelingUiStatePreviewParameterProvider.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/preview/SplitTunnelingUiStatePreviewParameterProvider.kt
index 70d9d2eae2..dee2d25733 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/preview/SplitTunnelingUiStatePreviewParameterProvider.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/preview/SplitTunnelingUiStatePreviewParameterProvider.kt
@@ -16,12 +16,12 @@ class SplitTunnelingUiStatePreviewParameterProvider :
AppData(
packageName = "my.package.a",
name = "TitleA",
- iconRes = R.drawable.icon_alert,
+ iconRes = R.drawable.ic_icons_missing,
),
AppData(
packageName = "my.package.b",
name = "TitleB",
- iconRes = R.drawable.icon_chevron,
+ iconRes = R.drawable.ic_icons_missing,
),
),
includedApps =
@@ -29,7 +29,7 @@ class SplitTunnelingUiStatePreviewParameterProvider :
AppData(
packageName = "my.package.c",
name = "TitleC",
- iconRes = R.drawable.icon_alert,
+ iconRes = R.drawable.ic_icons_missing,
)
),
showSystemApps = true,
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreen.kt
index ac1d758ecc..262f990d99 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreen.kt
@@ -8,6 +8,8 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Info
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
@@ -20,7 +22,6 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalUriHandler
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
@@ -45,7 +46,7 @@ import net.mullvad.mullvadvpn.compose.button.RedeemVoucherButton
import net.mullvad.mullvadvpn.compose.component.CopyableObfuscationView
import net.mullvad.mullvadvpn.compose.component.InformationView
import net.mullvad.mullvadvpn.compose.component.MissingPolicy
-import net.mullvad.mullvadvpn.compose.component.NavigateBackDownIconButton
+import net.mullvad.mullvadvpn.compose.component.NavigateCloseIconButton
import net.mullvad.mullvadvpn.compose.component.PlayPayment
import net.mullvad.mullvadvpn.compose.component.ScaffoldWithMediumTopBar
import net.mullvad.mullvadvpn.compose.extensions.createOpenAccountPageHook
@@ -151,7 +152,7 @@ fun AccountScreen(
ScaffoldWithMediumTopBar(
appBarTitle = stringResource(id = R.string.settings_account),
- navigationIcon = { NavigateBackDownIconButton(onBackClick) },
+ navigationIcon = { NavigateCloseIconButton(onBackClick) },
snackbarHostState = snackbarHostState,
) { modifier ->
Column(
@@ -224,7 +225,7 @@ private fun DeviceNameRow(deviceName: String, onInfoClick: () -> Unit) {
InformationView(content = deviceName, whenMissing = MissingPolicy.SHOW_SPINNER)
IconButton(onClick = onInfoClick) {
Icon(
- painter = painterResource(id = R.drawable.icon_info),
+ imageVector = Icons.Default.Info,
contentDescription = null,
tint = MaterialTheme.colorScheme.onSurface,
)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ApiAccessListScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ApiAccessListScreen.kt
index 51214b294a..5dc2fa6d30 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ApiAccessListScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ApiAccessListScreen.kt
@@ -5,6 +5,9 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListScope
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ChevronRight
+import androidx.compose.material.icons.filled.Info
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
@@ -14,7 +17,6 @@ import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
@@ -28,7 +30,6 @@ import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.compose.button.PrimaryButton
import net.mullvad.mullvadvpn.compose.cell.TwoRowCell
-import net.mullvad.mullvadvpn.compose.component.ChevronRight
import net.mullvad.mullvadvpn.compose.component.NavigateBackIconButton
import net.mullvad.mullvadvpn.compose.component.ScaffoldWithMediumTopBar
import net.mullvad.mullvadvpn.compose.constant.ContentType
@@ -144,7 +145,7 @@ private fun LazyListScope.currentAccessMethod(
.testTag(API_ACCESS_LIST_INFO_TEST_TAG),
) {
Icon(
- painter = painterResource(id = R.drawable.icon_info),
+ imageVector = Icons.Default.Info,
contentDescription = null,
tint = MaterialTheme.colorScheme.onSurface,
)
@@ -188,9 +189,10 @@ private fun ApiAccessMethodItem(
titleStyle = MaterialTheme.typography.titleMedium,
subtitleColor = MaterialTheme.colorScheme.onSurfaceVariant,
bodyView = {
- ChevronRight(
- tint = MaterialTheme.colorScheme.onPrimary,
+ Icon(
+ Icons.Default.ChevronRight,
contentDescription = apiAccessMethodSetting.name.value,
+ tint = MaterialTheme.colorScheme.onPrimary,
)
},
onCellClicked = { onApiAccessMethodClick(apiAccessMethodSetting) },
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ApiAccessMethodDetailsScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ApiAccessMethodDetailsScreen.kt
index 4d806b3645..68cd3dd00b 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ApiAccessMethodDetailsScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ApiAccessMethodDetailsScreen.kt
@@ -6,6 +6,9 @@ import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Delete
+import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.HorizontalDivider
@@ -26,7 +29,6 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
@@ -274,7 +276,7 @@ private fun Actions(onDeleteAccessMethod: () -> Unit) {
onClick = { showMenu = true },
modifier = Modifier.testTag(API_ACCESS_DETAILS_TOP_BAR_DROPDOWN_BUTTON_TEST_TAG),
) {
- Icon(painter = painterResource(id = R.drawable.icon_more_vert), contentDescription = null)
+ Icon(imageVector = Icons.Default.MoreVert, contentDescription = null)
if (showMenu) {
DropdownMenu(
expanded = true,
@@ -285,7 +287,8 @@ private fun Actions(onDeleteAccessMethod: () -> Unit) {
text = { Text(text = stringResource(id = R.string.delete_method)) },
leadingIcon = {
Icon(
- painter = painterResource(id = R.drawable.icon_delete),
+ imageVector = Icons.Default.Delete,
+ tint = MaterialTheme.colorScheme.onSurface,
contentDescription = null,
)
},
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AutoConnectAndLockdownModeScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AutoConnectAndLockdownModeScreen.kt
index f95c4681f9..0a69b4fbb6 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AutoConnectAndLockdownModeScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AutoConnectAndLockdownModeScreen.kt
@@ -19,6 +19,9 @@ import androidx.compose.foundation.pager.PagerState
import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.text.ClickableText
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ChevronLeft
+import androidx.compose.material.icons.filled.ChevronRight
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
@@ -29,7 +32,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.clip
-import androidx.compose.ui.draw.rotate
+import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
@@ -115,7 +118,7 @@ fun AutoConnectAndLockdownModeScreen(onBackClick: () -> Unit = {}) {
}
},
isEnabled = { pagerState.currentPage != 0 },
- rotation = 90f,
+ imageVector = Icons.Default.ChevronLeft,
)
// Go to next page
@@ -132,7 +135,7 @@ fun AutoConnectAndLockdownModeScreen(onBackClick: () -> Unit = {}) {
}
},
isEnabled = { pagerState.currentPage != pagerState.pageCount - 1 },
- rotation = -90f,
+ imageVector = Icons.Default.ChevronRight,
)
PageIndicator(
@@ -216,18 +219,14 @@ private fun CarouselNavigationButton(
modifier: Modifier = Modifier,
onClick: () -> Unit,
isEnabled: () -> Boolean,
- rotation: Float,
+ imageVector: ImageVector,
) {
IconButton(
modifier = modifier.alpha(if (isEnabled.invoke()) AlphaVisible else AlphaInvisible),
onClick = onClick,
enabled = isEnabled.invoke(),
) {
- Icon(
- painter = painterResource(id = R.drawable.icon_chevron),
- contentDescription = null,
- modifier = Modifier.rotate(rotation),
- )
+ Icon(contentDescription = null, imageVector = imageVector)
}
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ConnectScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ConnectScreen.kt
index 4f39295d37..a9d47893b1 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ConnectScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ConnectScreen.kt
@@ -65,8 +65,8 @@ import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.compose.button.ConnectionButton
import net.mullvad.mullvadvpn.compose.button.SwitchLocationButton
-import net.mullvad.mullvadvpn.compose.component.Chevron
import net.mullvad.mullvadvpn.compose.component.ConnectionStatusText
+import net.mullvad.mullvadvpn.compose.component.ExpandChevron
import net.mullvad.mullvadvpn.compose.component.MullvadCircularProgressIndicatorLarge
import net.mullvad.mullvadvpn.compose.component.ScaffoldWithTopBarAndDeviceName
import net.mullvad.mullvadvpn.compose.component.connectioninfo.ConnectionDetailPanel
@@ -397,7 +397,7 @@ private fun ConnectionCardHeader(
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween) {
ConnectionStatusText(state = state.tunnelState)
if (state.tunnelState is TunnelState.Connected) {
- Chevron(isExpanded = !expanded, color = MaterialTheme.colorScheme.onSurface)
+ ExpandChevron(isExpanded = !expanded, color = MaterialTheme.colorScheme.onSurface)
}
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/CustomListsScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/CustomListsScreen.kt
index 65fca696e8..08ec0ee503 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/CustomListsScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/CustomListsScreen.kt
@@ -4,6 +4,8 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.foundation.lazy.LazyListState
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Add
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
@@ -18,7 +20,6 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
@@ -125,7 +126,7 @@ fun CustomListsScreen(
modifier = Modifier.testTag(NEW_LIST_BUTTON_TEST_TAG),
) {
Icon(
- painterResource(id = R.drawable.ic_icons_add),
+ imageVector = Icons.Default.Add,
tint = MaterialTheme.colorScheme.onSurface,
contentDescription = stringResource(id = R.string.new_list),
)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceListScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceListScreen.kt
index 7617a8cb63..beb83a9b2e 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceListScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceListScreen.kt
@@ -12,6 +12,8 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Clear
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
@@ -312,7 +314,7 @@ private fun DeviceListItem(device: Device, isLoading: Boolean, onDeviceRemovalCl
} else {
IconButton(onClick = onDeviceRemovalClicked) {
Icon(
- painter = painterResource(id = R.drawable.icon_close),
+ imageVector = Icons.Default.Clear,
contentDescription = stringResource(id = R.string.remove_button),
tint = MaterialTheme.colorScheme.onPrimary,
modifier = Modifier.size(size = Dimens.deleteIconSize),
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/EditApiAccessMethodScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/EditApiAccessMethodScreen.kt
index 32a4242a91..6596f7c343 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/EditApiAccessMethodScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/EditApiAccessMethodScreen.kt
@@ -8,6 +8,8 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
+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.SnackbarDuration
@@ -22,7 +24,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardCapitalization
@@ -318,7 +319,7 @@ private fun ApiAccessMethodTypeSelection(
},
leadingIcon = {
Icon(
- painter = painterResource(id = R.drawable.icon_tick),
+ imageVector = Icons.Default.Check,
contentDescription = null,
modifier =
Modifier.padding(end = Dimens.selectableCellTextMargin)
@@ -495,7 +496,7 @@ private fun CipherSelection(cipher: Cipher, onCipherChange: (Cipher) -> Unit) {
},
leadingIcon = {
Icon(
- painter = painterResource(id = R.drawable.icon_tick),
+ imageVector = Icons.Default.Check,
contentDescription = null,
modifier =
Modifier.padding(end = Dimens.selectableCellTextMargin)
@@ -534,7 +535,7 @@ private fun EnableAuthentication(
},
leadingIcon = {
Icon(
- painter = painterResource(id = R.drawable.icon_tick),
+ imageVector = Icons.Default.Check,
contentDescription = null,
modifier =
Modifier.padding(end = Dimens.selectableCellTextMargin)
@@ -550,7 +551,7 @@ private fun EnableAuthentication(
},
leadingIcon = {
Icon(
- painter = painterResource(id = R.drawable.icon_tick),
+ imageVector = Icons.Default.Check,
contentDescription = null,
modifier =
Modifier.padding(end = Dimens.selectableCellTextMargin)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/EditCustomListScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/EditCustomListScreen.kt
index e73f0885ca..30f5491c73 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/EditCustomListScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/EditCustomListScreen.kt
@@ -2,6 +2,9 @@ package net.mullvad.mullvadvpn.compose.screen
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.padding
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Delete
+import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.Icon
@@ -16,7 +19,6 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.pluralStringResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
@@ -180,7 +182,7 @@ private fun Actions(enabled: Boolean, onDeleteList: () -> Unit) {
onClick = { showMenu = true },
modifier = Modifier.testTag(TOP_BAR_DROPDOWN_BUTTON_TEST_TAG),
) {
- Icon(painter = painterResource(id = R.drawable.icon_more_vert), contentDescription = null)
+ Icon(imageVector = Icons.Default.MoreVert, contentDescription = null)
if (showMenu) {
DropdownMenu(
expanded = true,
@@ -191,7 +193,8 @@ private fun Actions(enabled: Boolean, onDeleteList: () -> Unit) {
text = { Text(text = stringResource(id = R.string.delete_list)) },
leadingIcon = {
Icon(
- painter = painterResource(id = R.drawable.icon_delete),
+ imageVector = Icons.Default.Delete,
+ tint = MaterialTheme.colorScheme.onSurface,
contentDescription = null,
)
},
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/FilterScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/FilterScreen.kt
index e2de301c9c..87fe75b9f1 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/FilterScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/FilterScreen.kt
@@ -9,6 +9,8 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.systemBarsPadding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyItemScope
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
@@ -22,7 +24,6 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
@@ -230,7 +231,7 @@ private fun TopBar(onBackClick: () -> Unit) {
Row(Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically) {
IconButton(onClick = onBackClick) {
Icon(
- painter = painterResource(id = R.drawable.icon_back),
+ imageVector = Icons.AutoMirrored.Default.ArrowBack,
contentDescription = null,
tint = MaterialTheme.colorScheme.onSurface,
)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/LoginScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/LoginScreen.kt
index d29ed293b7..9dcd016767 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/LoginScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/LoginScreen.kt
@@ -21,6 +21,8 @@ import androidx.compose.foundation.shape.CornerSize
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Clear
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
@@ -390,7 +392,7 @@ private fun AccountDropDownItem(
}
IconButton(enabled = enabled, onClick = onDeleteClick) {
Icon(
- painter = painterResource(id = R.drawable.account_history_remove_pressed),
+ imageVector = Icons.Default.Clear,
contentDescription = null,
modifier = Modifier.size(Dimens.listIconSize),
)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/PrivacyDisclaimerScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/PrivacyDisclaimerScreen.kt
index 9ac8df45d0..f894eb8eba 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/PrivacyDisclaimerScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/PrivacyDisclaimerScreen.kt
@@ -15,6 +15,9 @@ import androidx.compose.foundation.layout.width
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.ClickableText
import androidx.compose.foundation.verticalScroll
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.automirrored.filled.OpenInNew
+import androidx.compose.material.icons.filled.OpenInNew
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
@@ -23,7 +26,6 @@ import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.TextStyle
@@ -180,7 +182,7 @@ private fun Content(onPrivacyPolicyLinkClicked: () -> Unit) {
)
Icon(
- painter = painterResource(id = R.drawable.icon_extlink),
+ imageVector = Icons.AutoMirrored.Filled.OpenInNew,
contentDescription = null,
modifier =
Modifier.align(Alignment.CenterVertically)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreen.kt
index bc3918bddb..e5e64c931d 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreen.kt
@@ -17,6 +17,13 @@ import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.foundation.lazy.rememberLazyListState
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Add
+import androidx.compose.material.icons.filled.Close
+import androidx.compose.material.icons.filled.Delete
+import androidx.compose.material.icons.filled.Edit
+import androidx.compose.material.icons.filled.FilterList
+import androidx.compose.material.icons.filled.Remove
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
@@ -37,11 +44,9 @@ import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.rotate
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
@@ -94,7 +99,6 @@ import net.mullvad.mullvadvpn.compose.transitions.SelectLocationTransition
import net.mullvad.mullvadvpn.compose.util.CollectSideEffectWithLifecycle
import net.mullvad.mullvadvpn.compose.util.RunOnKeyChange
import net.mullvad.mullvadvpn.compose.util.showSnackbarImmediately
-import net.mullvad.mullvadvpn.lib.model.CustomList
import net.mullvad.mullvadvpn.lib.model.CustomListId
import net.mullvad.mullvadvpn.lib.model.CustomListName
import net.mullvad.mullvadvpn.lib.model.RelayItem
@@ -485,8 +489,7 @@ private fun SelectLocationTopBar(onBackClick: () -> Unit, onFilterClick: () -> U
Row(modifier = Modifier.fillMaxWidth()) {
IconButton(onClick = onBackClick) {
Icon(
- modifier = Modifier.rotate(270f),
- painter = painterResource(id = R.drawable.icon_back),
+ imageVector = Icons.Default.Close,
tint = MaterialTheme.colorScheme.onSurface,
contentDescription = null,
)
@@ -500,7 +503,7 @@ private fun SelectLocationTopBar(onBackClick: () -> Unit, onFilterClick: () -> U
)
IconButton(onClick = onFilterClick) {
Icon(
- painter = painterResource(id = R.drawable.icons_more_circle),
+ imageVector = Icons.Default.FilterList,
contentDescription = null,
tint = MaterialTheme.colorScheme.onSurface,
)
@@ -644,7 +647,7 @@ private fun CustomListsBottomSheet(
)
HorizontalDivider(color = onBackgroundColor)
IconCell(
- iconId = R.drawable.icon_add,
+ imageVector = Icons.Default.Add,
title = stringResource(id = R.string.new_list),
titleColor = onBackgroundColor,
onClick = {
@@ -654,7 +657,7 @@ private fun CustomListsBottomSheet(
background = backgroundColor,
)
IconCell(
- iconId = R.drawable.icon_edit,
+ imageVector = Icons.Default.Edit,
title = stringResource(id = R.string.edit_lists),
titleColor =
onBackgroundColor.copy(
@@ -702,7 +705,7 @@ private fun LocationBottomSheet(
customLists.forEach {
val enabled = it.canAddLocation(item)
IconCell(
- iconId = null,
+ imageVector = null,
title =
if (enabled) {
it.name
@@ -724,7 +727,7 @@ private fun LocationBottomSheet(
)
}
IconCell(
- iconId = R.drawable.icon_add,
+ imageVector = Icons.Default.Add,
title = stringResource(id = R.string.new_list),
titleColor = onBackgroundColor,
onClick = {
@@ -757,7 +760,7 @@ private fun EditCustomListBottomSheet(
HeaderCell(text = customList.name, background = backgroundColor)
HorizontalDivider(color = onBackgroundColor)
IconCell(
- iconId = R.drawable.icon_edit,
+ imageVector = Icons.Default.Edit,
title = stringResource(id = R.string.edit_name),
titleColor = onBackgroundColor,
onClick = {
@@ -767,7 +770,7 @@ private fun EditCustomListBottomSheet(
background = backgroundColor,
)
IconCell(
- iconId = R.drawable.icon_add,
+ imageVector = Icons.Default.Add,
title = stringResource(id = R.string.edit_locations),
titleColor = onBackgroundColor,
onClick = {
@@ -777,7 +780,7 @@ private fun EditCustomListBottomSheet(
background = backgroundColor,
)
IconCell(
- iconId = R.drawable.icon_delete,
+ imageVector = Icons.Default.Delete,
title = stringResource(id = R.string.delete),
titleColor = onBackgroundColor,
onClick = {
@@ -816,7 +819,7 @@ private fun CustomListEntryBottomSheet(
HorizontalDivider(color = onBackgroundColor)
IconCell(
- iconId = R.drawable.ic_remove,
+ imageVector = Icons.Default.Remove,
title = stringResource(id = R.string.remove_button),
titleColor = onBackgroundColor,
onClick = {
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ServerIpOverridesScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ServerIpOverridesScreen.kt
index de257f319f..7021969dfc 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ServerIpOverridesScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ServerIpOverridesScreen.kt
@@ -11,6 +11,10 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Delete
+import androidx.compose.material.icons.filled.Info
+import androidx.compose.material.icons.filled.MoreVert
+import androidx.compose.material.icons.filled.TextFields
+import androidx.compose.material.icons.filled.UploadFile
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.ExperimentalMaterial3Api
@@ -35,7 +39,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
@@ -249,7 +252,7 @@ private fun ImportOverridesByBottomSheet(
)
HorizontalDivider(color = onBackgroundColor)
IconCell(
- iconId = R.drawable.icon_upload_file,
+ imageVector = Icons.Default.UploadFile,
title = stringResource(id = R.string.server_ip_overrides_import_by_file),
onClick = {
onImportByFile()
@@ -259,7 +262,7 @@ private fun ImportOverridesByBottomSheet(
modifier = Modifier.testTag(SERVER_IP_OVERRIDES_IMPORT_BY_FILE_TEST_TAG),
)
IconCell(
- iconId = R.drawable.icon_text_fields,
+ imageVector = Icons.Default.TextFields,
title = stringResource(id = R.string.server_ip_overrides_import_by_text),
onClick = {
onImportByText()
@@ -273,7 +276,7 @@ private fun ImportOverridesByBottomSheet(
Row(verticalAlignment = Alignment.CenterVertically) {
Icon(
modifier = Modifier.padding(Dimens.mediumPadding),
- painter = painterResource(id = R.drawable.icon_info),
+ imageVector = Icons.Default.Info,
tint = MaterialTheme.colorScheme.error,
contentDescription = null,
)
@@ -309,7 +312,7 @@ private fun TopBarActions(
onClick = { showMenu = !showMenu },
modifier = Modifier.testTag(SERVER_IP_OVERRIDE_MORE_VERT_TEST_TAG),
) {
- Icon(painterResource(id = R.drawable.icon_more_vert), contentDescription = null)
+ Icon(imageVector = Icons.Default.MoreVert, contentDescription = null)
}
DropdownMenu(
modifier = Modifier.background(MaterialTheme.colorScheme.surfaceContainer),
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SettingsScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SettingsScreen.kt
index df18ba86cc..8a50649ac8 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SettingsScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SettingsScreen.kt
@@ -32,7 +32,7 @@ import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.compose.cell.DefaultExternalLinkView
import net.mullvad.mullvadvpn.compose.cell.NavigationCellBody
import net.mullvad.mullvadvpn.compose.cell.NavigationComposeCell
-import net.mullvad.mullvadvpn.compose.component.NavigateBackDownIconButton
+import net.mullvad.mullvadvpn.compose.component.NavigateCloseIconButton
import net.mullvad.mullvadvpn.compose.component.ScaffoldWithMediumTopBar
import net.mullvad.mullvadvpn.compose.extensions.itemWithDivider
import net.mullvad.mullvadvpn.compose.preview.SettingsUiStatePreviewParameterProvider
@@ -87,7 +87,7 @@ fun SettingsScreen(
ScaffoldWithMediumTopBar(
appBarTitle = stringResource(id = R.string.settings),
- navigationIcon = { NavigateBackDownIconButton(onBackClick) },
+ navigationIcon = { NavigateCloseIconButton(onBackClick) },
) { modifier, lazyListState ->
LazyColumn(
modifier = modifier.testTag(LAZY_LIST_TEST_TAG).animateContentSize(),
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ViewLogsScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ViewLogsScreen.kt
index 24825aec04..a73ce7abb7 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ViewLogsScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ViewLogsScreen.kt
@@ -9,6 +9,7 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ContentCopy
import androidx.compose.material.icons.filled.Share
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
@@ -30,7 +31,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusProperties
import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
@@ -114,10 +114,7 @@ private fun TopBar(
onClick = { clipboardHandle(state.text(), clipboardToastMessage) },
modifier = Modifier.focusProperties { down = FocusRequester.Cancel },
) {
- Icon(
- painter = painterResource(id = R.drawable.icon_copy),
- contentDescription = null,
- )
+ Icon(imageVector = Icons.Default.ContentCopy, contentDescription = null)
}
IconButton(
onClick = { scope.launch { shareText(context, state.text()) } },
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/WelcomeScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/WelcomeScreen.kt
index b5f7ae9752..5146d65bb0 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/WelcomeScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/WelcomeScreen.kt
@@ -11,6 +11,8 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Info
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
@@ -23,7 +25,6 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalUriHandler
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
@@ -320,7 +321,7 @@ fun DeviceNameRow(deviceName: String?, navigateToDeviceInfoDialog: () -> Unit) {
onClick = navigateToDeviceInfoDialog,
) {
Icon(
- painter = painterResource(id = R.drawable.icon_info),
+ imageVector = Icons.Default.Info,
contentDescription = null,
tint = MaterialTheme.colorScheme.onSurface,
)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/textfield/ApiAccessMethodTextField.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/textfield/ApiAccessMethodTextField.kt
index 76007f7ae8..05ec572194 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/textfield/ApiAccessMethodTextField.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/textfield/ApiAccessMethodTextField.kt
@@ -5,6 +5,8 @@ import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Warning
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
@@ -12,11 +14,9 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalFocusManager
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.text.input.KeyboardType
-import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.lib.theme.Dimens
@Composable
@@ -71,7 +71,7 @@ private fun ErrorSupportingText(text: String) {
modifier = Modifier.padding(top = Dimens.miniPadding),
) {
Icon(
- painter = painterResource(id = R.drawable.icon_alert),
+ imageVector = Icons.Default.Warning,
contentDescription = null,
modifier = Modifier.size(Dimens.smallIconSize),
tint = MaterialTheme.colorScheme.error,
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/textfield/SearchTextField.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/textfield/SearchTextField.kt
index d418add080..f8c45bd6b0 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/textfield/SearchTextField.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/textfield/SearchTextField.kt
@@ -7,6 +7,9 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.text.BasicTextField
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Clear
+import androidx.compose.material.icons.filled.Search
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
@@ -21,7 +24,6 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.tooling.preview.Preview
@@ -79,7 +81,7 @@ fun SearchTextField(
visualTransformation = visualTransformation,
leadingIcon = {
Icon(
- painter = painterResource(id = R.drawable.icons_search),
+ imageVector = Icons.Default.Search,
contentDescription = null,
modifier =
Modifier.size(
@@ -100,7 +102,7 @@ fun SearchTextField(
searchTerm = ""
onValueChange.invoke(searchTerm)
},
- painter = painterResource(id = R.drawable.icon_close),
+ imageVector = Icons.Default.Clear,
tint = textColor,
contentDescription = null,
)
diff --git a/android/app/src/main/res/drawable/icon_reload.xml b/android/app/src/main/res/drawable/icon_reload.xml
deleted file mode 100644
index 1ab457eff5..0000000000
--- a/android/app/src/main/res/drawable/icon_reload.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24"
- android:viewportHeight="24">
- <group>
- <clip-path
- android:pathData="M0,0h24v24h-24z"/>
- <path
- android:pathData="M6,12C6,8.686 8.686,6 12,6C13.776,6 15.373,6.771 16.472,8H15C14.448,8 14,8.448 14,9C14,9.552 14.448,10 15,10H19C19.552,10 20,9.552 20,9V5C20,4.448 19.552,4 19,4C18.448,4 18,4.448 18,5V6.709C16.535,5.049 14.39,4 12,4C7.582,4 4,7.582 4,12C4,16.418 7.582,20 12,20C14.13,20 16.067,19.166 17.5,17.809C17.901,17.43 17.918,16.797 17.539,16.396C17.159,15.995 16.526,15.977 16.125,16.357C15.049,17.376 13.598,18 12,18C8.686,18 6,15.314 6,12Z"
- android:fillColor="#ffffff"
- android:fillType="evenOdd"/>
- </group>
-</vector>
diff --git a/android/config/baseline.xml b/android/config/baseline.xml
index dbce168994..34abe7b924 100644
--- a/android/config/baseline.xml
+++ b/android/config/baseline.xml
@@ -5,16 +5,11 @@
<ID>CyclomaticComplexMethod:MockApiDispatcher.kt$MockApiDispatcher$override fun dispatch(request: RecordedRequest): MockResponse</ID>
<ID>EmptyKtFile:build.gradle.kts$.build.gradle.kts</ID>
<ID>LongMethod:NotificationBanner.kt$@Composable private fun Notification(notificationBannerData: NotificationData)</ID>
- <ID>MagicNumber:Chevron.kt$100</ID>
- <ID>MagicNumber:Chevron.kt$180f</ID>
<ID>MagicNumber:CustomTextField.kt$100</ID>
<ID>MagicNumber:LoginScreen.kt$3f</ID>
- <ID>MagicNumber:NavigateButton.kt$90f</ID>
- <ID>MagicNumber:NavigationComposeCell.kt$90f</ID>
<ID>MagicNumber:RedeemVoucherDialog.kt$30</ID>
<ID>MagicNumber:RedeemVoucherDialog.kt$59</ID>
<ID>MagicNumber:ResourcesExtensions.kt$3</ID>
- <ID>MagicNumber:SelectLocationScreen.kt$270f</ID>
<ID>NestedBlockDepth:MockApiDispatcher.kt$MockApiDispatcher$override fun dispatch(request: RecordedRequest): MockResponse</ID>
<ID>PrintStackTrace:Extensions.kt$ex</ID>
<ID>ReturnCount:RelayNameComparator.kt$RelayNameComparator$private infix fun List&lt;String&gt;.compareWith(other: List&lt;String&gt;): Int</ID>
diff --git a/android/gradle/libs.versions.toml b/android/gradle/libs.versions.toml
index 58de53323e..91797b0185 100644
--- a/android/gradle/libs.versions.toml
+++ b/android/gradle/libs.versions.toml
@@ -100,6 +100,7 @@ compose-destinations = { module = "io.github.raamcosta.compose-destinations:core
compose-destinations-ksp = { module = "io.github.raamcosta.compose-destinations:ksp", version.ref = "compose-destinations" }
compose-foundation = { module = "androidx.compose.foundation:foundation", version.ref = "compose" }
compose-material3 = { module = "androidx.compose.material3:material3", version.ref = "compose-material3" }
+compose-icons-extended = { module = "androidx.compose.material:material-icons-extended", version.ref = "compose" }
compose-ui = { module = "androidx.compose.ui:ui", version.ref = "compose" }
compose-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest", version.ref = "compose" }
compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "compose" }
@@ -157,7 +158,7 @@ compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
# Kotlin
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" }
-kotlin-ksp = { id = "com.google.devtools.ksp", version.ref = "kotlin-ksp"}
+kotlin-ksp = { id = "com.google.devtools.ksp", version.ref = "kotlin-ksp" }
# Protobuf
protobuf-core = { id = "com.google.protobuf", version.ref = "protobuf" }
diff --git a/android/gradle/verification-metadata.xml b/android/gradle/verification-metadata.xml
index 7d45a84c6c..bdb682fad9 100644
--- a/android/gradle/verification-metadata.xml
+++ b/android/gradle/verification-metadata.xml
@@ -570,14 +570,6 @@
<sha256 value="bf2340bdad5f6cecdb3ba577f35bb874fc5b78512b964cd9024596ff9b8246c0" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="androidx.compose.material" name="material-desktop" version="1.6.0">
- <artifact name="material-desktop-1.6.0.jar">
- <sha256 value="68b568457feff9c68a6970ec20d268e8aa1bb1b65dd2693f8deda0543fb466b9" origin="Generated by Gradle"/>
- </artifact>
- <artifact name="material-desktop-1.6.0.module">
- <sha256 value="cac67624340b65ffe719fbdc693ed4f189ebf9d102613dce0811045b4de85a33" origin="Generated by Gradle"/>
- </artifact>
- </component>
<component group="androidx.compose.material" name="material-icons-core" version="1.0.0">
<artifact name="material-icons-core-1.0.0.aar">
<sha256 value="6e049492ec2ff0a6a1166a5985a924cf4de03465d17462594284f81eafe1a9dd" origin="Generated by Gradle"/>
@@ -594,6 +586,14 @@
<sha256 value="951f2a3a6c0913819dfaae7c69cb8cdf977f7c79bd53fef03e4faf459ee30a0f" origin="Generated by Gradle"/>
</artifact>
</component>
+ <component group="androidx.compose.material" name="material-icons-core" version="1.7.2">
+ <artifact name="material-icons-core-1.7.2.module">
+ <sha256 value="f9d0f5d0949813202d46380b580731e058517582b3a2e52535abda887df71e42" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="material-icons-core-metadata-1.7.2.jar">
+ <sha256 value="951f2a3a6c0913819dfaae7c69cb8cdf977f7c79bd53fef03e4faf459ee30a0f" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
<component group="androidx.compose.material" name="material-icons-core-android" version="1.6.0">
<artifact name="material-icons-core-android-1.6.0.module">
<sha256 value="5fb8f22f619c3383800a4742aa9b334a5ae3880bd3825b921031c9f99b6697fd" origin="Generated by Gradle"/>
@@ -602,12 +602,44 @@
<sha256 value="0400755a3aa7270893445a18cd845e35064c9de02c1c41cf2083ad4724bcac6f" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="androidx.compose.material" name="material-icons-core-desktop" version="1.6.0">
- <artifact name="material-icons-core-desktop-1.6.0.jar">
- <sha256 value="9ba0b869bf23bd64187c14a72303d604c287d189b095acf2ddd9e772d608f028" origin="Generated by Gradle"/>
+ <component group="androidx.compose.material" name="material-icons-core-android" version="1.7.2">
+ <artifact name="material-icons-core-android-1.7.2.module">
+ <sha256 value="e78ea081bd571f3cdc7ae819138298292f276c6195404c24aeb2bca36eb21268" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="material-icons-core-release.aar">
+ <sha256 value="dedfed0494094de997ba3211db51f4e7c08f1091acddb4dbc96f1d8e37e3fcf9" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
+ <component group="androidx.compose.material" name="material-icons-core-desktop" version="1.7.2">
+ <artifact name="material-icons-core-desktop-1.7.2.jar">
+ <sha256 value="b5729220e242132b22b0c0317a304ff167a05cc685c3e9e6483d5dfca3495f56" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="material-icons-core-desktop-1.7.2.module">
+ <sha256 value="94c7b7fe0ee2ae2c508d187a2bb0f27ed3ba6a03788cabd99527e133effc8022" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
+ <component group="androidx.compose.material" name="material-icons-extended" version="1.7.2">
+ <artifact name="material-icons-extended-1.7.2.module">
+ <sha256 value="615fa62f4e12c3b3ddead57697bf9503e5dfd27647f16d0a44ce3cbb0fdd97ee" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="material-icons-extended-metadata-1.7.2.jar">
+ <sha256 value="714e2bfc4095b291e0dbcbd7626bc0e420fc2f6a78f2416398596504debd9117" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
+ <component group="androidx.compose.material" name="material-icons-extended-android" version="1.7.2">
+ <artifact name="material-icons-extended-android-1.7.2.module">
+ <sha256 value="9f9f2f3a0d13f4b7d5d5e118e919f6981e5ba411c608924ab0dd3fd1e6a16252" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="material-icons-extended-release.aar">
+ <sha256 value="cb4abd93d9919c4a4d05b0a4978120a45723cf22434f7c814de65379e7f1c4e1" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
+ <component group="androidx.compose.material" name="material-icons-extended-desktop" version="1.7.2">
+ <artifact name="material-icons-extended-desktop-1.7.2.jar">
+ <sha256 value="0ade0b7d55cb008136d7b58b71100ce017dedb84be20af6da2e76b58b090f699" origin="Generated by Gradle"/>
</artifact>
- <artifact name="material-icons-core-desktop-1.6.0.module">
- <sha256 value="64130795b1384b0ee57f3ab8bd69493de54eb31bd0c1bbb8cb63168c45fc5026" origin="Generated by Gradle"/>
+ <artifact name="material-icons-extended-desktop-1.7.2.module">
+ <sha256 value="447c791aba3af316e32cbffcd384aec9ef4d822dfd3d742e81c75a5365dc63e1" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.compose.material" name="material-ripple" version="1.0.0">
diff --git a/android/lib/resource/src/main/res/drawable/account_history_remove_pressed.xml b/android/lib/resource/src/main/res/drawable/account_history_remove_pressed.xml
deleted file mode 100644
index 49d3484460..0000000000
--- a/android/lib/resource/src/main/res/drawable/account_history_remove_pressed.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="16dp"
- android:height="16dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path android:fillColor="#FF294D73"
- android:pathData="
- M 12,24
- C 5.37312,24 0,18.62688 0,12
- C 0,5.37312 5.37312,0 12,0
- C 18.62688,0 24,5.37312 24,12
- C 24,18.62688 18.62688,24 12,24
- Z
- M 13.5,12
- L 17.2947612,8.20523878
- C 17.6857559,7.81424414 17.6838785,7.18387854 17.293923,6.79392296
- L 17.206077,6.70607704
- C 16.8181114,6.31811142 16.1842538,6.31574616 15.7947612,6.70523878
- L 12,10.5
- L 8.20523878,6.70523878
- C 7.81574616,6.31574616 7.18188858,6.31811142 6.79392296,6.70607704
- L 6.70607704,6.79392296
- C 6.31612146,7.18387854 6.31424414,7.81424414 6.70523878,8.20523878
- L 10.5,12
- L 6.70523878,15.7947612
- C 6.31424414,16.1857559 6.31612146,16.8161215 6.70607704,17.206077
- L 6.79392296,17.293923
- C 7.18188858,17.6818886 7.81574616,17.6842538 8.20523878,17.2947612
- L 12,13.5
- L 15.7947612,17.2947612
- C 16.1842538,17.6842538 16.8181114,17.6818886 17.206077,17.293923
- L 17.293923,17.206077
- C 17.6838785,16.8161215 17.6857559,16.1857559 17.2947612,15.7947612
- L 13.5,12
- L13.5,12
- Z" />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/ic_icons_add.xml b/android/lib/resource/src/main/res/drawable/ic_icons_add.xml
deleted file mode 100644
index 97f0ca7fc7..0000000000
--- a/android/lib/resource/src/main/res/drawable/ic_icons_add.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24"
- android:viewportHeight="24">
- <path android:pathData="M13.05,5.66v5.29h5.29c0.513,0 0.99,0.398 0.99,0.99v0.12c0,0.578 -0.477,0.99 -0.99,0.99h-5.29v5.29c0,0.522 -0.412,0.989 -0.99,0.99l-0.12,-0.001c-0.59,0 -0.99,-0.467 -0.99,-0.989v-5.29H5.66c-0.534,0 -0.99,-0.427 -0.99,-0.99v-0.12c0,-0.559 0.456,-0.99 0.99,-0.99h5.29V5.66c0,-0.512 0.407,-0.99 0.99,-0.99h0.12c0.584,0 0.99,0.478 0.99,0.99zM12,24C5.373,24 0,18.627 0,12S5.373,0 12,0s12,5.373 12,12 -5.373,12 -12,12z"
- android:fillColor="@android:color/white"
- android:fillType="evenOdd" />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/ic_icons_remove.xml b/android/lib/resource/src/main/res/drawable/ic_icons_remove.xml
deleted file mode 100644
index 50b84ad42c..0000000000
--- a/android/lib/resource/src/main/res/drawable/ic_icons_remove.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24"
- android:viewportHeight="24">
- <path android:pathData="M13.05,10.95h5.29c0.513,0 0.99,0.398 0.99,0.99v0.12c0,0.578 -0.477,0.99 -0.99,0.99H5.66c-0.534,0 -0.99,-0.427 -0.99,-0.99v-0.12c0,-0.559 0.456,-0.99 0.99,-0.99H13.05zM12,24C5.373,24 0,18.627 0,12S5.373,0 12,0s12,5.373 12,12 -5.373,12 -12,12z"
- android:fillColor="@android:color/white"
- android:fillType="evenOdd" />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/ic_remove.xml b/android/lib/resource/src/main/res/drawable/ic_remove.xml
deleted file mode 100644
index 2a67ab0792..0000000000
--- a/android/lib/resource/src/main/res/drawable/ic_remove.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="960"
- android:viewportHeight="960">
- <path android:fillColor="#FF000000"
- android:pathData="M200,520v-80h560v80L200,520Z" />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_account.xml b/android/lib/resource/src/main/res/drawable/icon_account.xml
deleted file mode 100644
index c007ae4596..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_account.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24"
- android:viewportHeight="24">
- <path android:pathData="M12,24A12,12 0,0 1,3.515 3.515a12,12 0,1 1,16.97 16.97A11.922,11.922 0,0 1,12 24zM12,12.175a12.164,12.164 0,0 0,-2.873 0.348,17.625 17.625,0 0,0 -2.99,1.048A2.85,2.85 0,0 0,5 14.525a2.573,2.573 0,0 0,-0.442 1.512v0.791a1.39,1.39 0,0 0,1.4 1.4h12.1a1.392,1.392 0,0 0,1.4 -1.4v-0.791A2.567,2.567 0,0 0,19 14.525a2.809,2.809 0,0 0,-1.163 -0.954,19.906 19.906,0 0,0 -2.978,-1.036 11.634,11.634 0,0 0,-2.859 -0.36zM12,3.775a3.345,3.345 0,0 0,-3.49 3.491,3.346 3.346,0 0,0 3.49,3.49 3.348,3.348 0,0 0,3.49 -3.49A3.346,3.346 0,0 0,12 3.776z"
- android:strokeWidth="1"
- android:fillColor="#FFFFFF"
- android:fillType="evenOdd"
- android:strokeColor="#00000000" />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_add.xml b/android/lib/resource/src/main/res/drawable/icon_add.xml
deleted file mode 100644
index bef890413b..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_add.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="960"
- android:viewportHeight="960">
- <path android:fillColor="@android:color/white"
- android:pathData="M440,520L200,520L200,440L440,440L440,200L520,200L520,440L760,440L760,520L520,520L520,760L440,760L440,520Z" />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_alert.xml b/android/lib/resource/src/main/res/drawable/icon_alert.xml
deleted file mode 100644
index f8e4a2c0b0..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_alert.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path android:fillColor="#E34039"
- android:pathData="
- m 12,24
- c -6.627417,0 -12,-5.372583 -12,-12
- s 5.372583,-12 12,-12 12,5.372583 12,12 -5.372583,12 -12,12
- z
- m 0,-19.5
- c -0.8284271,0 -1.5,0.67157288 -1.5,1.5
- v 7.5
- c 0,0.8284271 0.6715729,1.5 1.5,1.5
- s 1.5,-0.6715729 1.5,-1.5
- v -7.5
- c 0,-0.82842712 -0.6715729,-1.5 -1.5,-1.5
- z
- m 0,12
- c -0.8284271,0 -1.5,0.6715729 -1.5,1.5
- s 0.6715729,1.5 1.5,1.5 1.5,-0.6715729 1.5,-1.5 -0.6715729,-1.5 -1.5,-1.5
- z
- " />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_arrow_blue20.xml b/android/lib/resource/src/main/res/drawable/icon_arrow_blue20.xml
deleted file mode 100644
index 1fc5f8c1a1..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_arrow_blue20.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="16dp"
- android:viewportWidth="24.0"
- android:viewportHeight="16.0">
- <group>
- <path android:fillColor="#33294D73"
- android:pathData="M18.7015867,9 L14.4331381,12.762659 C13.851665,13.2752305 13.8579999,14.1003943 14.4392669,14.612784 C15.0245863,15.1287461 15.9602099,15.1275926 16.5380921,14.6181865 L23.5668627,8.42228969 C23.8565791,8.16690324 24.000373,7.83391619 23.999837,7.50067932 L24,7.4966702 C23.999589,7.16348359 23.8547954,6.83138119 23.5668627,6.57756713 L16.5380921,0.381670278 C15.956619,-0.130901228 15.0205338,-0.125317014 14.4392669,0.387072772 C13.8539474,0.903034846 13.8552559,1.72779176 14.4331381,2.23719784 L18.7017491,6 L1.50909424,6 C0.66354084,6 0,6.67157288 0,7.5 C0,8.33420277 0.675644504,9 1.50909424,9 L18.7015867,9 Z" />
- </group>
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_arrow_white.xml b/android/lib/resource/src/main/res/drawable/icon_arrow_white.xml
deleted file mode 100644
index 8b0a0e5f20..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_arrow_white.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="16dp"
- android:viewportWidth="24.0"
- android:viewportHeight="16.0">
- <group>
- <path android:fillColor="#FFFFFF"
- android:pathData="M18.7015867,9 L14.4331381,12.762659 C13.851665,13.2752305 13.8579999,14.1003943 14.4392669,14.612784 C15.0245863,15.1287461 15.9602099,15.1275926 16.5380921,14.6181865 L23.5668627,8.42228969 C23.8565791,8.16690324 24.000373,7.83391619 23.999837,7.50067932 L24,7.4966702 C23.999589,7.16348359 23.8547954,6.83138119 23.5668627,6.57756713 L16.5380921,0.381670278 C15.956619,-0.130901228 15.0205338,-0.125317014 14.4392669,0.387072772 C13.8539474,0.903034846 13.8552559,1.72779176 14.4331381,2.23719784 L18.7017491,6 L1.50909424,6 C0.66354084,6 0,6.67157288 0,7.5 C0,8.33420277 0.675644504,9 1.50909424,9 L18.7015867,9 Z" />
- </group>
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_back.xml b/android/lib/resource/src/main/res/drawable/icon_back.xml
deleted file mode 100644
index 15ad00f442..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_back.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24"
- android:viewportHeight="24">
- <path android:pathData="M12,24C5.3731,24 -0,18.6269 -0,12C-0,5.3731 5.3731,0 12,0C18.6269,0 24,5.3731 24,12C24,18.6269 18.6269,24 12,24ZM7.0055,11.9979C6.9755,12.2732 7.0685,12.5604 7.2852,12.7774L13.2129,18.7118C13.5936,19.0929 14.2231,19.0908 14.6233,18.7027L14.6942,18.634C15.0925,18.2478 15.1055,17.6196 14.7109,17.218L9.5805,11.9979L14.7109,6.7777C15.1055,6.3762 15.0925,5.7479 14.6942,5.3618L14.6233,5.293C14.2231,4.9049 13.5936,4.9028 13.2129,5.2839L7.2852,11.2184C7.0685,11.4353 6.9755,11.7225 7.0055,11.9979L7.0055,11.9979Z"
- android:strokeWidth="1"
- android:fillColor="#FFFFFF"
- android:fillType="evenOdd"
- android:strokeColor="#00000000" />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_chevron.xml b/android/lib/resource/src/main/res/drawable/icon_chevron.xml
deleted file mode 100644
index 5f67b4e982..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_chevron.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24"
- android:viewportHeight="24">
- <group>
- <clip-path
- android:pathData="M0,0h24v24h-24z"/>
- <path
- android:pathData="M16.707,9.293C16.317,8.902 15.683,8.902 15.293,9.293L12,12.586L8.707,9.293C8.317,8.902 7.683,8.902 7.293,9.293C6.902,9.683 6.902,10.317 7.293,10.707L11.293,14.707C11.683,15.098 12.317,15.098 12.707,14.707L16.707,10.707C17.098,10.317 17.098,9.683 16.707,9.293Z"
- android:fillColor="#ffffff"
- android:fillType="evenOdd"/>
- </group>
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_close.xml b/android/lib/resource/src/main/res/drawable/icon_close.xml
deleted file mode 100644
index f00f638dc3..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_close.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path android:fillColor="#FFFFFFFF"
- android:pathData="
- M 12,24
- C 5.37312,24 0,18.62688 0,12
- C 0,5.37312 5.37312,0 12,0
- C 18.62688,0 24,5.37312 24,12
- C 24,18.62688 18.62688,24 12,24
- Z
- M 13.5,12
- L 17.2947612,8.20523878
- C 17.6857559,7.81424414 17.6838785,7.18387854 17.293923,6.79392296
- L 17.206077,6.70607704
- C 16.8181114,6.31811142 16.1842538,6.31574616 15.7947612,6.70523878
- L 12,10.5
- L 8.20523878,6.70523878
- C 7.81574616,6.31574616 7.18188858,6.31811142 6.79392296,6.70607704
- L 6.70607704,6.79392296
- C 6.31612146,7.18387854 6.31424414,7.81424414 6.70523878,8.20523878
- L 10.5,12
- L 6.70523878,15.7947612
- C 6.31424414,16.1857559 6.31612146,16.8161215 6.70607704,17.206077
- L 6.79392296,17.293923
- C 7.18188858,17.6818886 7.81574616,17.6842538 8.20523878,17.2947612
- L 12,13.5
- L 15.7947612,17.2947612
- C 16.1842538,17.6842538 16.8181114,17.6818886 17.206077,17.293923
- L 17.293923,17.206077
- C 17.6838785,16.8161215 17.6857559,16.1857559 17.2947612,15.7947612
- L 13.5,12
- L13.5,12
- Z" />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_copy.xml b/android/lib/resource/src/main/res/drawable/icon_copy.xml
deleted file mode 100644
index 4a919a00b8..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_copy.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24"
- android:viewportHeight="24">
- <path android:pathData="M15.789,2.737L5.684,2.737A1.689,1.689 0,0 0,4 4.421v11.79a0.749,0.749 0,0 0,0.829 0.736,0.812 0.812,0 0,0 0.855,-0.736L5.684,4.421h10.105a0.9,0.9 0,0 0,0.832 -0.825,0.91 0.91,0 0,0 -0.832,-0.859zM18.315,6.105L9.053,6.105a1.689,1.689 0,0 0,-1.685 1.685v11.789a1.689,1.689 0,0 0,1.684 1.684h9.263A1.689,1.689 0,0 0,20 19.579L20,7.79a1.689,1.689 0,0 0,-1.684 -1.685zM18.315,19.579L9.053,19.579L9.053,7.79h9.263z"
- android:fillColor="@android:color/white" />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_delete.xml b/android/lib/resource/src/main/res/drawable/icon_delete.xml
deleted file mode 100644
index 237623f73c..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_delete.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="960"
- android:viewportHeight="960">
- <path android:fillColor="@android:color/white"
- android:pathData="M280,840Q247,840 223.5,816.5Q200,793 200,760L200,240L160,240L160,160L360,160L360,120L600,120L600,160L800,160L800,240L760,240L760,760Q760,793 736.5,816.5Q713,840 680,840L280,840ZM680,240L280,240L280,760Q280,760 280,760Q280,760 280,760L680,760Q680,760 680,760Q680,760 680,760L680,240ZM360,680L440,680L440,320L360,320L360,680ZM520,680L600,680L600,320L520,320L520,680ZM280,240L280,240L280,760Q280,760 280,760Q280,760 280,760L280,760Q280,760 280,760Q280,760 280,760L280,240Z" />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_edit.xml b/android/lib/resource/src/main/res/drawable/icon_edit.xml
deleted file mode 100644
index aa7d748cc1..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_edit.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="960"
- android:viewportHeight="960">
- <path android:fillColor="@android:color/white"
- android:pathData="M200,760L257,760L648,369L591,312L200,703L200,760ZM120,840L120,670L648,143Q660,132 674.5,126Q689,120 705,120Q721,120 736,126Q751,132 762,144L817,200Q829,211 834.5,226Q840,241 840,256Q840,272 834.5,286.5Q829,301 817,313L290,840L120,840ZM760,256L760,256L704,200L704,200L760,256ZM619,341L591,312L591,312L648,369L648,369L619,341Z" />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_extlink.xml b/android/lib/resource/src/main/res/drawable/icon_extlink.xml
deleted file mode 100644
index 3d31a523b2..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_extlink.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="16dp"
- android:height="16dp"
- android:viewportWidth="16"
- android:viewportHeight="16">
- <path android:pathData="M12.5858,2L8.9908,2C8.451,2 8,1.5523 8,1C8,0.4439 8.4464,0 8.997,0L15.003,0C15.547,0 16,0.4464 16,0.997L16,7.003C16,7.547 15.5523,8 15,8C14.4439,8 14,7.5564 14,7.0092L14,3.4142L6.7071,10.7071C6.3166,11.0976 5.6834,11.0976 5.2929,10.7071C4.9024,10.3166 4.9024,9.6834 5.2929,9.2929L12.5858,2ZM8.4645,4L6.4645,6L2,6L2,14L10,14L10,9.5355L12,7.5355L12,14.9975C12,15.5512 11.5442,16 10.9975,16L1.0025,16C0.4488,16 0,15.5442 0,14.9975L0,5.0025C0,4.4488 0.4558,4 1.0025,4L8.4645,4Z"
- android:fillColor="#FFFFFF"
- android:fillType="evenOdd" />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_hide.xml b/android/lib/resource/src/main/res/drawable/icon_hide.xml
deleted file mode 100644
index b16cceff5c..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_hide.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24"
- android:viewportHeight="24">
- <path android:pathData="M12,6a9.77,9.77 0,0 1,8.82 5.5,9.647 9.647,0 0,1 -2.41,3.12l1.41,1.41A11.8,11.8 0,0 0,23 11.5,11.834 11.834,0 0,0 8.36,4.57l1.65,1.65A10.108,10.108 0,0 1,12 6zM10.93,7.14L13,9.21a2.5,2.5 0,0 1,1.28 1.28l2.07,2.07a4.679,4.679 0,0 0,0.14 -1.07A4.483,4.483 0,0 0,12 7a4.244,4.244 0,0 0,-1.07 0.14zM2.01,3.87l2.68,2.68A11.738,11.738 0,0 0,1 11.5,11.827 11.827,0 0,0 12,19a11.73,11.73 0,0 0,4.32 -0.82l3.42,3.42a1,1 0,0 0,1.41 -1.41C20.8,19.807 3.791,2.777 3.42,2.45a1.1,1.1 0,0 0,-1.41 0,1.045 1.045,0 0,0 0,1.42zM9.51,11.37 L12.12,13.98A0.5,0.5 0,0 1,12 14a2.5,2.5 0,0 1,-2.5 -2.5c0,-0.05 0.01,-0.08 0.01,-0.13zM6.11,7.97 L7.86,9.72a4.6,4.6 0,0 0,-0.36 1.78,4.505 4.505,0 0,0 6.27,4.14l0.98,0.98A10.432,10.432 0,0 1,12 17a9.77,9.77 0,0 1,-8.82 -5.5,9.9 9.9,0 0,1 2.93,-3.53z"
- android:fillColor="@android:color/white" />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_info.xml b/android/lib/resource/src/main/res/drawable/icon_info.xml
deleted file mode 100644
index 98f45776a3..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_info.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24"
- android:viewportHeight="24">
- <path android:pathData="M12,24A12,12 0,0 1,3.515 3.515a12,12 0,1 1,16.97 16.97A11.922,11.922 0,0 1,12 24zM12,9a1.5,1.5 0,0 0,-1.5 1.5L10.5,18a1.5,1.5 0,1 0,3 0v-7.5A1.5,1.5 0,0 0,12 9zM12,4.5A1.5,1.5 0,1 0,13.5 6,1.5 1.5,0 0,0 12,4.5z"
- android:fillColor="#294d73" />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_more_vert.xml b/android/lib/resource/src/main/res/drawable/icon_more_vert.xml
deleted file mode 100644
index b96d08bd90..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_more_vert.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="960"
- android:viewportHeight="960">
- <path android:fillColor="@android:color/white"
- android:pathData="M480,800Q447,800 423.5,776.5Q400,753 400,720Q400,687 423.5,663.5Q447,640 480,640Q513,640 536.5,663.5Q560,687 560,720Q560,753 536.5,776.5Q513,800 480,800ZM480,560Q447,560 423.5,536.5Q400,513 400,480Q400,447 423.5,423.5Q447,400 480,400Q513,400 536.5,423.5Q560,447 560,480Q560,513 536.5,536.5Q513,560 480,560ZM480,320Q447,320 423.5,296.5Q400,273 400,240Q400,207 423.5,183.5Q447,160 480,160Q513,160 536.5,183.5Q560,207 560,240Q560,273 536.5,296.5Q513,320 480,320Z" />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_reconnect.xml b/android/lib/resource/src/main/res/drawable/icon_reconnect.xml
new file mode 100644
index 0000000000..5eda40b360
--- /dev/null
+++ b/android/lib/resource/src/main/res/drawable/icon_reconnect.xml
@@ -0,0 +1,13 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+ <group>
+ <clip-path
+ android:pathData="M0,0h24v24h-24z"/>
+ <path
+ android:pathData="M5.634,18.362C6.518,19.246 7.514,19.906 8.622,20.342C9.729,20.778 10.855,20.996 11.998,20.996C13.141,20.996 14.267,20.778 15.374,20.342C16.482,19.906 17.478,19.246 18.362,18.362L16.948,16.948C15.569,18.326 13.919,19.016 11.998,19.016C10.077,19.016 8.427,18.326 7.048,16.948C5.669,15.569 4.98,13.919 4.98,11.998C4.98,10.077 5.669,8.427 7.048,7.048C8.427,5.669 10.077,4.98 11.998,4.98C13.919,4.98 15.569,5.669 16.948,7.048L17.054,7.154H14.862L14.826,9.17H20.483V3.513L18.468,3.548V5.74L18.362,5.634C17.478,4.75 16.482,4.09 15.374,3.654C14.267,3.218 13.141,3 11.998,3C10.855,3 9.729,3.218 8.622,3.654C7.514,4.09 6.518,4.75 5.634,5.634C4.75,6.518 4.09,7.514 3.654,8.622C3.218,9.729 3,10.855 3,11.998C3,13.141 3.218,14.267 3.654,15.374C4.09,16.482 4.75,17.478 5.634,18.362Z"
+ android:fillColor="#1C1B1F"/>
+ </group>
+</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_reload.xml b/android/lib/resource/src/main/res/drawable/icon_reload.xml
deleted file mode 100644
index 0800d557ff..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_reload.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="22dp"
- android:height="22dp"
- android:viewportWidth="512.0"
- android:viewportHeight="512.0">
- <path android:fillColor="#FFFFFFFF"
- android:pathData="M 256.455 8 c 66.269 0.119 126.437 26.233 170.859 68.685 l 35.715 -35.715 C 478.149 25.851 504 36.559 504 57.941 V 192 c 0 13.255 -10.745 24 -24 24 H 345.941 c -21.382 0 -32.09 -25.851 -16.971 -40.971 l 41.75 -41.75 c -30.864 -28.899 -70.801 -44.907 -113.23 -45.273 -92.398 -0.798 -170.283 73.977 -169.484 169.442 C 88.764 348.009 162.184 424 256 424 c 41.127 0 79.997 -14.678 110.629 -41.556 4.743 -4.161 11.906 -3.908 16.368 0.553 l 39.662 39.662 c 4.872 4.872 4.631 12.815 -0.482 17.433 C 378.202 479.813 319.926 504 256 504 119.034 504 8.001 392.967 8 256.002 7.999 119.193 119.646 7.755 256.455 8 z" />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_settings.xml b/android/lib/resource/src/main/res/drawable/icon_settings.xml
deleted file mode 100644
index 65de785d70..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_settings.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24"
- android:viewportHeight="24">
- <path android:pathData="M21.2552,12C21.2552,12.408 21.2182,12.792 21.1688,13.176L23.7719,15.156C24.0063,15.336 24.068,15.66 23.9199,15.924L21.4526,20.076C21.3045,20.34 20.9838,20.448 20.7001,20.34L17.6282,19.14C16.9867,19.608 16.2959,20.016 15.5433,20.316L15.0745,23.496C15.0375,23.784 14.7785,24 14.4701,24L9.5354,24C9.227,24 8.9679,23.784 8.9309,23.496L8.4621,20.316C7.7096,20.016 7.0187,19.62 6.3772,19.14L3.3054,20.34C3.034,20.436 2.7009,20.34 2.5529,20.076L0.0855,15.924C-0.0625,15.66 -0.0008,15.336 0.2336,15.156L2.8366,13.176C2.7873,12.792 2.7502,12.396 2.7502,12C2.7502,11.604 2.7873,11.208 2.8366,10.824L0.2336,8.844C-0.0008,8.664 -0.0748,8.34 0.0855,8.076L2.5529,3.924C2.7009,3.66 3.0217,3.552 3.3054,3.66L6.3772,4.86C7.0187,4.392 7.7096,3.984 8.4621,3.684L8.9309,0.504C8.9679,0.216 9.227,0 9.5354,0L14.4701,0C14.7785,0 15.0375,0.216 15.0745,0.504L15.5433,3.684C16.2959,3.984 16.9867,4.38 17.6282,4.86L20.7001,3.66C20.9715,3.564 21.3046,3.66 21.4526,3.924L23.9199,8.076C24.068,8.34 24.0063,8.664 23.7719,8.844L21.1688,10.824C21.2182,11.208 21.2552,11.592 21.2552,12ZM12,17C14.7571,17 17,14.7571 17,12C17,9.2429 14.7571,7 12,7C9.2429,7 7,9.2429 7,12C7,14.7571 9.2429,17 12,17Z"
- android:strokeWidth="1"
- android:fillColor="#FFFFFF"
- android:fillType="evenOdd"
- android:strokeColor="#00000000" />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_show.xml b/android/lib/resource/src/main/res/drawable/icon_show.xml
deleted file mode 100644
index 9535f0287b..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_show.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24"
- android:viewportHeight="24">
- <path android:pathData="M12,6a9.77,9.77 0,0 1,8.82 5.5,9.822 9.822,0 0,1 -17.64,0A9.77,9.77 0,0 1,12 6m0,-2a11.827,11.827 0,0 0,-11 7.5,11.817 11.817,0 0,0 22,0A11.827,11.827 0,0 0,12 4zM12,9a2.5,2.5 0,1 1,-2.5 2.5A2.5,2.5 0,0 1,12 9m0,-2a4.5,4.5 0,1 0,4.5 4.5A4.507,4.507 0,0 0,12 7z"
- android:fillColor="@android:color/white" />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_spinner.xml b/android/lib/resource/src/main/res/drawable/icon_spinner.xml
deleted file mode 100644
index 2475c4ef3c..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_spinner.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<rotate xmlns:android="http://schemas.android.com/apk/res/android"
- android:fromDegrees="0"
- android:toDegrees="360"
- android:pivotX="50%"
- android:pivotY="50%">
- <vector android:width="60dp"
- android:height="60dp"
- android:viewportWidth="60.0"
- android:viewportHeight="60.0">
- <group>
- <path android:fillColor="#33FFFFFF"
- android:pathData="M27.6038221,6.11991768 C40.7924274,4.79654517 52.5567098,14.4152168 53.8800823,27.6038221 C55.2034548,40.7924274 45.5847832,52.5567098 32.3961779,53.8800823 C19.2075726,55.2034548 7.4432902,45.5847832 6.11991768,32.3961779 C4.79654517,19.2075726 14.4152168,7.4432902 27.6038221,6.11991768 Z M28.4025481,14.0799451 C19.6101445,14.9621935 13.1976968,22.8050484 14.0799451,31.5974519 C14.9621935,40.3898555 22.8050484,46.8023032 31.5974519,45.9200549 C40.3898555,45.0378065 46.8023032,37.1949516 45.9200549,28.4025481 C45.0378065,19.6101445 37.1949516,13.1976968 28.4025481,14.0799451 Z" />
- <path android:fillColor="#FFFFFF"
- android:pathData="M25.2028561,6.48431564 C12.2155023,9.13370504 3.83492624,21.80979 6.48431564,34.7971439 C9.13370504,47.7844977 21.80979,56.1650738 34.7971439,53.5156844 C44.2988591,51.577357 51.5941458,44.163762 53.514681,34.8276709 C53.9598043,32.6638409 52.5665172,30.5488664 50.4026872,30.1037431 C48.2388572,29.6586198 46.1238826,31.0519068 45.6787593,33.2157369 C44.3979534,39.441981 39.5342463,44.3845633 33.1980959,45.6771229 C24.53986,47.4433825 16.0891367,41.8563318 14.3228771,33.1980959 C12.5566175,24.53986 18.1436682,16.0891367 26.8019041,14.3228771 C28.9664631,13.8813122 30.3632257,11.7686314 29.9216608,9.60407239 C29.4800959,7.43951342 27.3674151,6.04275074 25.2028561,6.48431564 Z" />
- </group>
- </vector>
-</rotate>
diff --git a/android/lib/resource/src/main/res/drawable/icon_text_fields.xml b/android/lib/resource/src/main/res/drawable/icon_text_fields.xml
deleted file mode 100644
index c3b8ccbbfc..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_text_fields.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="960"
- android:viewportHeight="960">
- <path android:fillColor="#FF000000"
- android:pathData="M280,800v-520L80,280v-120h520v120L400,280v520L280,800ZM640,800v-320L520,480v-120h360v120L760,480v320L640,800Z" />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_tick.xml b/android/lib/resource/src/main/res/drawable/icon_tick.xml
deleted file mode 100644
index 8185727a1c..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_tick.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <group>
- <path android:fillColor="#FFFFFF"
- android:pathData="M2.92646877,10.7979185 C2.25699855,10.1340272 1.17157288,10.1340272 0.502102661,10.7979185 C-0.167367554,11.4618098 -0.167367554,12.5381902 0.502102661,13.2020815 L7.35924552,20.0020815 C8.02871573,20.6659728 9.11414141,20.6659728 9.78361162,20.0020815 L23.4978973,6.40208153 C24.1673676,5.73819023 24.1673676,4.66180977 23.4978973,3.99791847 C22.8284271,3.33402718 21.7430014,3.33402718 21.0735312,3.99791847 L8.57142857,16.3958369 L2.92646877,10.7979185 Z" />
- </group>
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icon_upload_file.xml b/android/lib/resource/src/main/res/drawable/icon_upload_file.xml
deleted file mode 100644
index 29d87d78d2..0000000000
--- a/android/lib/resource/src/main/res/drawable/icon_upload_file.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="960"
- android:viewportHeight="960">
- <path android:fillColor="#FF000000"
- android:pathData="M440,760h80v-167l64,64 56,-57 -160,-160 -160,160 57,56 63,-63v167ZM240,880q-33,0 -56.5,-23.5T160,800v-640q0,-33 23.5,-56.5T240,80h320l240,240v480q0,33 -23.5,56.5T720,880L240,880ZM520,360v-200L240,160v640h480v-440L520,360ZM240,160v200,-200 640,-640Z" />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icons_more_circle.xml b/android/lib/resource/src/main/res/drawable/icons_more_circle.xml
deleted file mode 100644
index 331e12b080..0000000000
--- a/android/lib/resource/src/main/res/drawable/icons_more_circle.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path
- android:fillColor="#FFFFFF"
- android:fillType="evenOdd"
- android:pathData="M12,24A12,12 0,0 1,3.515 3.515a12,12 0,1 1,16.97 16.97A11.922,11.922 0,0 1,12 24zM10.445,16.044L10.445,17.6h3.111v-1.556zM7.333,12.155v1.556h9.333v-1.556zM5,8.267v1.556h14L19,8.267z"
- android:strokeWidth="1"
- android:strokeColor="#00000000" />
-</vector>
diff --git a/android/lib/resource/src/main/res/drawable/icons_search.xml b/android/lib/resource/src/main/res/drawable/icons_search.xml
deleted file mode 100644
index 732c13f4d2..0000000000
--- a/android/lib/resource/src/main/res/drawable/icons_search.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24"
- android:viewportHeight="24">
- <path android:fillColor="#D8D8D8"
- android:fillType="evenOdd"
- android:pathData="M10.5,3C14.642,3 18,6.358 18,10.5c0,1.77 -0.613,3.397 -1.64,4.68l4.169,4.294c0.55,0.566 0.54,1.487 -0.02,2.057 -0.56,0.57 -1.46,0.574 -2.01,0.008l-4.352,-4.484c-1.08,0.602 -2.323,0.945 -3.647,0.945C6.358,18 3,14.642 3,10.5 3,6.358 6.358,3 10.5,3zM10.5,5C7.462,5 5,7.462 5,10.5S7.462,16 10.5,16 16,13.538 16,10.5 13.538,5 10.5,5z" />
- <group>
- <clip-path android:pathData="M10.5,3C14.642,3 18,6.358 18,10.5c0,1.77 -0.613,3.397 -1.64,4.68l4.169,4.294c0.55,0.566 0.54,1.487 -0.02,2.057 -0.56,0.57 -1.46,0.574 -2.01,0.008l-4.352,-4.484c-1.08,0.602 -2.323,0.945 -3.647,0.945C6.358,18 3,14.642 3,10.5 3,6.358 6.358,3 10.5,3zM10.5,5C7.462,5 5,7.462 5,10.5S7.462,16 10.5,16 16,13.538 16,10.5 13.538,5 10.5,5z" />
- <path android:fillColor="#294D73"
- android:fillType="evenOdd"
- android:pathData="M0,0H24V24H0z" />
- </group>
- <group>
- <clip-path android:pathData="M11.604,3.299C15.715,3.804 18.639,7.546 18.134,11.657c-0.216,1.757 -1.022,3.297 -2.198,4.445l3.615,4.77c0.477,0.629 0.355,1.542 -0.271,2.039 -0.625,0.498 -1.519,0.392 -1.996,-0.237l-3.773,-4.981c-1.145,0.466 -2.421,0.655 -3.735,0.493C5.665,17.682 2.741,13.94 3.246,9.829 3.751,5.718 7.493,2.794 11.604,3.299zM11.36,5.284C8.345,4.914 5.601,7.057 5.231,10.073S7.004,15.832 10.02,16.202 15.779,14.429 16.149,11.413 14.376,5.654 11.36,5.284z" />
- <path android:fillAlpha="0.2"
- android:fillColor="#FBFCFD"
- android:fillType="evenOdd"
- android:pathData="M11.22,15.518s-3.072,-0.351 -4.658,-2.381c-0.509,-0.652 -0.698,-2.087 -0.566,-4.305 0.349,1.468 0.949,2.774 1.802,3.917 1.325,1.697 3.422,2.77 3.422,2.77z" />
- </group>
-</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 424bf0a406..33fdfd4ded 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
@@ -41,13 +41,13 @@ data class Dimensions(
val largePadding: Dp = 32.dp,
val listIconSize: Dp = 24.dp,
val listItemDivider: Dp = 1.dp,
- val miniPadding: Dp = 4.dp,
val mediumPadding: Dp = 16.dp,
val mediumSpacer: Dp = 16.dp,
- val smallSpacer: Dp = 8.dp,
+ val miniPadding: Dp = 4.dp,
val notificationBannerEndPadding: Dp = 8.dp,
val notificationBannerStartPadding: Dp = 16.dp,
val notificationEndIconPadding: Dp = 4.dp,
+ val notificationIconPadding: Dp = 10.dp,
val notificationStatusIconSize: Dp = 10.dp,
val obfuscationNavigationBoxWidth: Dp = 80.dp,
val problemReportIconToTitlePadding: Dp = 60.dp,
@@ -62,15 +62,16 @@ data class Dimensions(
val sideMargin: Dp = 22.dp,
val smallIconSize: Dp = 16.dp,
val smallPadding: Dp = 8.dp,
+ val smallSpacer: Dp = 8.dp,
val spacingAboveButton: Dp = 22.dp,
val splashLogoSize: Dp = 120.dp,
val splashLogoTextHeight: Dp = 18.dp,
val successIconVerticalPadding: Dp = 26.dp,
val switchIconSize: Dp = 24.dp,
val switchLocationRetryMinWidth: Dp = 48.dp,
+ val tinyPadding: Dp = 4.dp,
val titleIconSize: Dp = 48.dp,
val topPadding: Dp = 20.dp,
- val tinyPadding: Dp = 4.dp,
val verticalDividerPadding: Dp = 12.dp,
val verticalSpace: Dp = 20.dp,
val verticalSpacer: Dp = 1.dp,