summaryrefslogtreecommitdiffhomepage
path: root/android/app
diff options
context:
space:
mode:
Diffstat (limited to 'android/app')
-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
52 files changed, 309 insertions, 292 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>