diff options
| author | David Göransson <david.goransson@mullvad.net> | 2024-09-26 10:34:23 +0200 |
|---|---|---|
| committer | David Göransson <david.goransson@mullvad.net> | 2024-10-01 13:46:57 +0200 |
| commit | e861350fb8aee5561176a66fd268f36d820e88ef (patch) | |
| tree | 61fca1a841fdd62aea217f691bdfc0758797b412 /android/app | |
| parent | 9b51a92a954b8d643ed44c962d7c374746e0ec7f (diff) | |
| download | mullvadvpn-e861350fb8aee5561176a66fd268f36d820e88ef.tar.xz mullvadvpn-e861350fb8aee5561176a66fd268f36d820e88ef.zip | |
Use material icons
Diffstat (limited to 'android/app')
48 files changed, 245 insertions, 216 deletions
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/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/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/Chevron.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/ExpandChevron.kt index 29ca1537f8..7f211ef0e4 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Chevron.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/ExpandChevron.kt @@ -4,6 +4,8 @@ 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 @@ -12,30 +14,19 @@ 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) + ExpandChevron(color = MaterialTheme.colorScheme.onPrimary, isExpanded = false) + ExpandChevron(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) { +fun ExpandChevron(modifier: Modifier = Modifier, color: Color, isExpanded: Boolean) { val degree = remember(isExpanded) { if (isExpanded) UP_ROTATION else DOWN_ROTATION } val animatedRotation = @@ -46,7 +37,7 @@ fun Chevron(modifier: Modifier = Modifier, color: Color, isExpanded: Boolean) { ) Icon( - painterResource(id = R.drawable.icon_chevron), + imageVector = Icons.Default.KeyboardArrowDown, contentDescription = null, tint = color, modifier = modifier.rotate(animatedRotation.value), @@ -54,26 +45,6 @@ fun Chevron(modifier: Modifier = Modifier, color: Color, isExpanded: Boolean) { } @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, @@ -81,11 +52,9 @@ fun ExpandChevronIconButton( isExpanded: Boolean, ) { IconButton(modifier = modifier, onClick = { onExpand(!isExpanded) }) { - Chevron(isExpanded = isExpanded, color = color) + ExpandChevron(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/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, ) |
