Merge pull request #227 from usetrmnl/copilot/add-material-symbols-icons

Replace deprecated Material Icons library with local vector drawables
This commit is contained in:
Hossain Khan
2025-12-06 15:10:09 -05:00
committed by GitHub
22 changed files with 190 additions and 32 deletions
@@ -14,8 +14,6 @@ import androidx.compose.foundation.layout.safeDrawing
import androidx.compose.foundation.layout.statusBars
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.Button
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
@@ -48,6 +46,7 @@ import ink.trmnl.android.data.AppConfig.TRMNL_SITE_URL
import ink.trmnl.android.di.AppScope
import ink.trmnl.android.ui.aboutapp.AppInfoScreen.Event
import ink.trmnl.android.ui.aboutapp.AppInfoScreen.State
import ink.trmnl.android.ui.icons.Icons
import ink.trmnl.android.ui.theme.TrmnlDisplayAppTheme
import ink.trmnl.android.ui.theme.TrmnlOrange
import kotlinx.parcelize.Parcelize
@@ -15,8 +15,6 @@ import androidx.compose.foundation.layout.safeDrawing
import androidx.compose.foundation.layout.statusBars
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.Card
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.ExperimentalMaterial3Api
@@ -53,6 +51,7 @@ import ink.trmnl.android.data.TrmnlDisplayRepository
import ink.trmnl.android.di.AppScope
import ink.trmnl.android.model.SupportedDeviceModel
import ink.trmnl.android.model.TrmnlDeviceType
import ink.trmnl.android.ui.icons.Icons
import ink.trmnl.android.ui.theme.TrmnlDisplayAppTheme
import kotlinx.coroutines.launch
import kotlinx.parcelize.Parcelize
@@ -8,11 +8,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowForward
import androidx.compose.material.icons.automirrored.filled.List
import androidx.compose.material.icons.filled.Refresh
import androidx.compose.material.icons.filled.Settings
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.ExtendedFloatingActionButton
@@ -33,6 +28,7 @@ import androidx.window.core.layout.WindowSizeClass
import androidx.window.core.layout.WindowSizeClass.Companion.WIDTH_DP_EXPANDED_LOWER_BOUND
import androidx.window.core.layout.WindowSizeClass.Companion.WIDTH_DP_MEDIUM_LOWER_BOUND
import ink.trmnl.android.R
import ink.trmnl.android.ui.icons.Icons
/**
* Displays a set of configuration and control actions for the TRMNL display.
@@ -0,0 +1,62 @@
package ink.trmnl.android.ui.icons
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.vectorResource
import ink.trmnl.android.R
/**
* Local Material Symbols icons.
* Replaces deprecated androidx.compose.material.icons package.
*
* Icons downloaded from https://fonts.google.com/icons (Material Symbols)
* and converted to Android Vector Drawables.
*/
object Icons {
object Default {
val CheckCircle: ImageVector
@Composable get() = ImageVector.vectorResource(id = R.drawable.ic_check_circle_24dp)
val Clear: ImageVector
@Composable get() = ImageVector.vectorResource(id = R.drawable.ic_clear_24dp)
val DateRange: ImageVector
@Composable get() = ImageVector.vectorResource(id = R.drawable.ic_date_range_24dp)
val PlayArrow: ImageVector
@Composable get() = ImageVector.vectorResource(id = R.drawable.ic_play_arrow_24dp)
val Refresh: ImageVector
@Composable get() = ImageVector.vectorResource(id = R.drawable.ic_refresh_24dp)
val Settings: ImageVector
@Composable get() = ImageVector.vectorResource(id = R.drawable.ic_settings_24dp)
val Share: ImageVector
@Composable get() = ImageVector.vectorResource(id = R.drawable.ic_share_24dp)
val Warning: ImageVector
@Composable get() = ImageVector.vectorResource(id = R.drawable.ic_warning_24dp)
}
object Outlined {
val Info: ImageVector
@Composable get() = ImageVector.vectorResource(id = R.drawable.ic_info_outlined_24dp)
val Warning: ImageVector
@Composable get() = ImageVector.vectorResource(id = R.drawable.ic_warning_outlined_24dp)
}
object AutoMirrored {
object Filled {
val ArrowBack: ImageVector
@Composable get() = ImageVector.vectorResource(id = R.drawable.ic_arrow_back_24dp)
val ArrowForward: ImageVector
@Composable get() = ImageVector.vectorResource(id = R.drawable.ic_arrow_forward_24dp)
val List: ImageVector
@Composable get() = ImageVector.vectorResource(id = R.drawable.ic_list_24dp)
}
}
}
@@ -15,11 +15,6 @@ import androidx.compose.foundation.layout.safeDrawing
import androidx.compose.foundation.layout.statusBars
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.CheckCircle
import androidx.compose.material.icons.filled.Clear
import androidx.compose.material.icons.filled.Share
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
@@ -72,6 +67,7 @@ import ink.trmnl.android.data.log.TrmnlRefreshLog
import ink.trmnl.android.data.log.TrmnlRefreshLogManager
import ink.trmnl.android.di.AppScope
import ink.trmnl.android.model.TrmnlDeviceType
import ink.trmnl.android.ui.icons.Icons
import ink.trmnl.android.ui.theme.TrmnlDisplayAppTheme
import ink.trmnl.android.util.getTimeElapsedString
import ink.trmnl.android.work.RefreshWorkType
@@ -25,11 +25,6 @@ import androidx.compose.foundation.rememberScrollState
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.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.Clear
import androidx.compose.material.icons.filled.DateRange
import androidx.compose.material.icons.outlined.Warning
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Card
@@ -100,6 +95,7 @@ import ink.trmnl.android.model.TrmnlDeviceType
import ink.trmnl.android.ui.aboutapp.AppInfoScreen
import ink.trmnl.android.ui.devicemodel.DeviceModelSelectorScreen
import ink.trmnl.android.ui.display.TrmnlMirrorDisplayScreen
import ink.trmnl.android.ui.icons.Icons
import ink.trmnl.android.ui.settings.AppSettingsScreen.ValidationResult
import ink.trmnl.android.ui.settings.AppSettingsScreen.ValidationResult.Failure
import ink.trmnl.android.ui.settings.AppSettingsScreen.ValidationResult.InvalidServerUrl
@@ -6,8 +6,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Info
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
@@ -25,6 +23,7 @@ import androidx.compose.ui.text.withStyle
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import ink.trmnl.android.model.TrmnlDeviceType
import ink.trmnl.android.ui.icons.Icons
import ink.trmnl.android.ui.theme.TrmnlDisplayAppTheme
/**
@@ -1,16 +1,11 @@
package ink.trmnl.android.util
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.CheckCircle
import androidx.compose.material.icons.filled.Clear
import androidx.compose.material.icons.filled.PlayArrow
import androidx.compose.material.icons.filled.Refresh
import androidx.compose.material.icons.filled.Warning
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.work.WorkInfo
import ink.trmnl.android.ui.icons.Icons
import java.time.Instant
import java.time.ZoneId
import java.time.format.DateTimeFormatter
@@ -49,6 +44,7 @@ fun WorkInfo.State?.toColor(): Color =
null -> MaterialTheme.colorScheme.onSurface
}
@Composable
fun WorkInfo.State?.toIcon(): ImageVector =
when (this) {
WorkInfo.State.ENQUEUED -> Icons.Default.Refresh
@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:autoMirrored="true">
<path
android:pathData="M400,880L0,480l400,-400l71,71l-329,329l329,329l-71,71Z"
android:fillColor="#000000"/>
</vector>
@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:autoMirrored="true">
<path
android:pathData="M489,880l-71,-71l329,-329l-329,-329l71,-71l400,400l-400,400Z"
android:fillColor="#000000"/>
</vector>
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:pathData="M424,664 L666,422 610,366 424,552 350,478 294,534 424,664ZM480,880q-83,0 -156,-31.5T197,763q-54,-54 -85.5,-127T80,480q0,-83 31.5,-156T197,197q54,-54 127,-85.5T480,80q83,0 156,31.5T763,197q54,54 85.5,127T880,480q0,83 -31.5,156T763,763q-54,54 -127,85.5T480,880Z"
android:fillColor="#000000"/>
</vector>
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:pathData="M256,760l-56,-56l224,-224l-224,-224l56,-56l224,224l224,-224l56,56l-224,224l224,224l-56,56l-224,-224l-224,224Z"
android:fillColor="#000000"/>
</vector>
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:pathData="M320,520q-17,0 -28.5,-11.5T280,480q0,-17 11.5,-28.5T320,440q17,0 28.5,11.5T360,480q0,17 -11.5,28.5T320,520ZM480,520q-17,0 -28.5,-11.5T440,480q0,-17 11.5,-28.5T480,440q17,0 28.5,11.5T520,480q0,17 -11.5,28.5T480,520ZM640,520q-17,0 -28.5,-11.5T600,480q0,-17 11.5,-28.5T640,440q17,0 28.5,11.5T680,480q0,17 -11.5,28.5T640,520ZM200,880q-33,0 -56.5,-23.5T120,800v-560q0,-33 23.5,-56.5T200,160h40v-80h80v80h320v-80h80v80h40q33,0 56.5,23.5T840,240v560q0,33 -23.5,56.5T760,880L200,880ZM200,800h560v-400L200,400v400Z"
android:fillColor="#000000"/>
</vector>
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:pathData="M440,680h80v-240h-80v240ZM480,360q17,0 28.5,-11.5T520,320q0,-17 -11.5,-28.5T480,280q-17,0 -28.5,11.5T440,320q0,17 11.5,28.5T480,360ZM480,880q-83,0 -156,-31.5T197,763q-54,-54 -85.5,-127T80,480q0,-83 31.5,-156T197,197q54,-54 127,-85.5T480,80q83,0 156,31.5T763,197q54,54 85.5,127T880,480q0,83 -31.5,156T763,763q-54,54 -127,85.5T480,880ZM480,800q134,0 227,-93t93,-227q0,-134 -93,-227t-227,-93q-134,0 -227,93t-93,227q0,134 93,227t227,93ZM480,480Z"
android:fillColor="#000000"/>
</vector>
@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:autoMirrored="true">
<path
android:pathData="M280,600v-80h560v80L280,600ZM280,440v-80h560v80L280,440ZM280,280v-80h560v80L280,280ZM160,600q-17,0 -28.5,-11.5T120,560q0,-17 11.5,-28.5T160,520q17,0 28.5,11.5T200,560q0,17 -11.5,28.5T160,600ZM160,440q-17,0 -28.5,-11.5T120,400q0,-17 11.5,-28.5T160,360q17,0 28.5,11.5T200,400q0,17 -11.5,28.5T160,440ZM160,280q-17,0 -28.5,-11.5T120,240q0,-17 11.5,-28.5T160,200q17,0 28.5,11.5T200,240q0,17 -11.5,28.5T160,280Z"
android:fillColor="#000000"/>
</vector>
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:pathData="M320,760v-560l440,280l-440,280Z"
android:fillColor="#000000"/>
</vector>
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:pathData="M480,800q-134,0 -227,-93t-93,-227q0,-134 93,-227t227,-93q69,0 132,28.5T720,270v-110h80v280L520,440v-80h168q-32,-56 -87.5,-88T480,240q-100,0 -170,70t-70,170q0,100 70,170t170,70q77,0 139,-44t87,-116h84q-28,106 -114,173t-196,67Z"
android:fillColor="#000000"/>
</vector>
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:pathData="M370,880l-16,-128q-13,-5 -24.5,-12T307,725l-119,50L78,585l103,-78q-1,-7 -1,-13.5v-27q0,-6.5 1,-13.5L78,375l110,-190l119,50q11,-8 23,-15t24,-12l16,-128h220l16,128q13,5 24.5,12t22.5,15l119,-50l110,190l-103,78q1,7 1,13.5v27q0,6.5 -2,13.5l103,78l-110,190l-118,-50q-11,8 -23,15t-24,12L590,880L370,880ZM440,800h79l14,-106q31,-8 57.5,-23.5T639,633l99,41l39,-68l-86,-65q5,-14 7,-29.5t2,-31.5q0,-16 -2,-31.5t-7,-29.5l86,-65l-39,-68l-99,42q-22,-23 -48.5,-38.5T533,266l-13,-106h-79l-14,106q-31,8 -57.5,23.5T321,327l-99,-41l-39,68l86,64q-5,15 -7,30t-2,32q0,16 2,31t7,30l-86,65l39,68l99,-42q22,23 48.5,38.5T427,694l13,106ZM482,620q58,0 99,-41t41,-99q0,-58 -41,-99t-99,-41q-59,0 -99.5,41T342,480q0,58 40.5,99t99.5,41ZM480,480Z"
android:fillColor="#000000"/>
</vector>
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:pathData="M720,880q-50,0 -85,-35t-35,-85q0,-7 1,-14.5t3,-13.5L322,577q-17,15 -38,23t-44,8q-50,0 -85,-35t-35,-85q0,-50 35,-85t85,-35q23,0 44,8t38,23l282,-155q-2,-6 -3,-13.5t-1,-14.5q0,-50 35,-85t85,-35q50,0 85,35t35,85q0,50 -35,85t-85,35q-23,0 -44,-8t-38,-23L322,430q2,6 3,13.5t1,14.5q0,7 -1,14.5t-3,13.5l282,155q17,-15 38,-23t44,-8q50,0 85,35t35,85q0,50 -35,85t-85,35Z"
android:fillColor="#000000"/>
</vector>
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:pathData="M40,840l440,-720l440,720L40,840ZM480,720q17,0 28.5,-11.5T520,680q0,-17 -11.5,-28.5T480,640q-17,0 -28.5,11.5T440,680q0,17 11.5,28.5T480,720ZM440,600h80v-160h-80v160Z"
android:fillColor="#000000"/>
</vector>

Some files were not shown because too many files have changed in this diff Show More