diff --git a/Jetcaster/mobile/build.gradle.kts b/Jetcaster/mobile/build.gradle.kts
index ef29b6518a..469fbe8675 100644
--- a/Jetcaster/mobile/build.gradle.kts
+++ b/Jetcaster/mobile/build.gradle.kts
@@ -119,7 +119,6 @@ dependencies {
// Compose
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.compose.foundation)
- implementation(libs.androidx.compose.material.iconsExtended)
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.compose.material3.adaptive)
implementation(libs.androidx.compose.material3.adaptive.layout)
diff --git a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt
index 79e6f9095e..15675e8a39 100644
--- a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt
+++ b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt
@@ -38,10 +38,6 @@ import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.foundation.lazy.grid.GridCells
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
import androidx.compose.foundation.pager.rememberPagerState
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.AccountCircle
-import androidx.compose.material.icons.filled.LibraryMusic
-import androidx.compose.material.icons.filled.Search
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonColors
import androidx.compose.material3.ExperimentalMaterial3Api
@@ -338,13 +334,13 @@ private fun HomeAppBar(isExpanded: Boolean, modifier: Modifier = Modifier) {
},
leadingIcon = {
Icon(
- imageVector = Icons.Default.Search,
+ painterResource(id = R.drawable.ic_search),
contentDescription = null,
)
},
trailingIcon = {
Icon(
- imageVector = Icons.Default.AccountCircle,
+ painterResource(id = R.drawable.ic_account_circle),
contentDescription = stringResource(R.string.cd_account),
)
},
@@ -492,7 +488,7 @@ fun PillToolbar(selectedHomeCategory: HomeCategory, onHomeAction: (HomeAction) -
) {
Row(Modifier) {
Icon(
- Icons.Filled.LibraryMusic,
+ painterResource(id = R.drawable.ic_library_music),
modifier = Modifier.padding(end = 8.dp),
contentDescription = stringResource(
R.string.library_toolbar_content_description,
diff --git a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/discover/Discover.kt b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/discover/Discover.kt
index 45011d4fe8..d4116c4ff5 100644
--- a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/discover/Discover.kt
+++ b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/discover/Discover.kt
@@ -24,8 +24,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.grid.LazyGridScope
import androidx.compose.foundation.lazy.itemsIndexed
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.Check
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.FilterChip
import androidx.compose.material3.FilterChipDefaults
@@ -35,6 +33,7 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.example.jetcaster.R
@@ -122,7 +121,7 @@ private fun ChoiceChipContent(text: String, selected: Boolean, onClick: () -> Un
leadingIcon = {
if (selected) {
Icon(
- imageVector = Icons.Default.Check,
+ painter = painterResource(id = R.drawable.ic_check),
contentDescription = stringResource(id = R.string.cd_selected_category),
modifier = Modifier.height(18.dp),
)
diff --git a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/player/PlayerScreen.kt b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/player/PlayerScreen.kt
index fcbe58bd16..77536537fd 100644
--- a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/player/PlayerScreen.kt
+++ b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/player/PlayerScreen.kt
@@ -50,16 +50,6 @@ import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.automirrored.filled.ArrowBack
-import androidx.compose.material.icons.automirrored.filled.PlaylistAdd
-import androidx.compose.material.icons.filled.MoreVert
-import androidx.compose.material.icons.rounded.Forward10
-import androidx.compose.material.icons.rounded.Pause
-import androidx.compose.material.icons.rounded.PlayArrow
-import androidx.compose.material.icons.rounded.Replay10
-import androidx.compose.material.icons.rounded.SkipNext
-import androidx.compose.material.icons.rounded.SkipPrevious
import androidx.compose.material3.ButtonGroup
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
@@ -87,6 +77,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.style.TextOverflow
@@ -586,20 +577,20 @@ private fun TopAppBar(onBackPress: () -> Unit, onAddToQueue: () -> Unit) {
Row(Modifier.fillMaxWidth()) {
IconButton(onClick = onBackPress) {
Icon(
- imageVector = Icons.AutoMirrored.Filled.ArrowBack,
+ painterResource(id = R.drawable.ic_arrow_back),
contentDescription = stringResource(R.string.cd_back),
)
}
Spacer(Modifier.weight(1f))
IconButton(onClick = onAddToQueue) {
Icon(
- imageVector = Icons.AutoMirrored.Filled.PlaylistAdd,
+ painterResource(id = R.drawable.ic_playlist_add),
contentDescription = stringResource(R.string.cd_add),
)
}
IconButton(onClick = { /* TODO */ }) {
Icon(
- imageVector = Icons.Default.MoreVert,
+ painterResource(id = R.drawable.ic_more_vert),
contentDescription = stringResource(R.string.cd_more),
)
}
@@ -755,7 +746,7 @@ private fun PlayerButtons(
.height(136.dp),
) {
Icon(
- imageVector = if (isPlaying) Icons.Rounded.Pause else Icons.Rounded.PlayArrow,
+ painterResource(id = if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow),
modifier = Modifier.fillMaxSize(),
contentDescription = null,
)
@@ -788,7 +779,7 @@ private fun PlayerButtons(
enabled = isPlaying,
) {
Icon(
- imageVector = Icons.Rounded.SkipPrevious,
+ painterResource(id = R.drawable.ic_skip_previous),
contentDescription = null,
)
}
@@ -812,7 +803,7 @@ private fun PlayerButtons(
enabled = isPlaying,
) {
Icon(
- imageVector = Icons.Rounded.Replay10,
+ painterResource(id = R.drawable.ic_replay_10),
contentDescription = null,
)
}
@@ -836,7 +827,7 @@ private fun PlayerButtons(
enabled = isPlaying,
) {
Icon(
- imageVector = Icons.Rounded.Forward10,
+ painterResource(id = R.drawable.ic_forward_10),
contentDescription = null,
)
}
@@ -860,7 +851,7 @@ private fun PlayerButtons(
enabled = hasNext,
) {
Icon(
- imageVector = Icons.Rounded.SkipNext,
+ painterResource(id = R.drawable.ic_skip_next),
contentDescription = null,
)
}
diff --git a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/podcast/PodcastDetailsScreen.kt b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/podcast/PodcastDetailsScreen.kt
index 7d317ce708..33dcc13ccb 100644
--- a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/podcast/PodcastDetailsScreen.kt
+++ b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/podcast/PodcastDetailsScreen.kt
@@ -35,12 +35,6 @@ import androidx.compose.foundation.lazy.grid.GridCells
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
import androidx.compose.foundation.lazy.grid.items
import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.automirrored.filled.ArrowBack
-import androidx.compose.material.icons.filled.Add
-import androidx.compose.material.icons.filled.Check
-import androidx.compose.material.icons.filled.NotificationsActive
-import androidx.compose.material.icons.filled.NotificationsNone
import androidx.compose.material3.ButtonGroup
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
@@ -64,6 +58,7 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
+import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.text.font.FontWeight
@@ -323,10 +318,7 @@ fun PodcastDetailsHeaderItemButtons(isSubscribed: Boolean, onClick: () -> Unit,
interactionSource = interactionSource1,
) {
Icon(
- imageVector = if (isSubscribed)
- Icons.Default.Check
- else
- Icons.Default.Add,
+ painterResource(id = if (isSubscribed) R.drawable.ic_check else R.drawable.ic_add),
contentDescription = null,
)
}
@@ -358,11 +350,7 @@ fun PodcastDetailsHeaderItemButtons(isSubscribed: Boolean, onClick: () -> Unit,
.animateWidth(interactionSource = interactionSource2),
) {
Icon(
- imageVector = if (isNotificationOn) {
- Icons.Default.NotificationsActive
- } else {
- Icons.Default.NotificationsNone
- },
+ painterResource(id = if (isNotificationOn) R.drawable.ic_notifications_active else R.drawable.ic_notifications),
contentDescription = stringResource(R.string.cd_more),
)
}
@@ -384,7 +372,7 @@ fun PodcastDetailsTopAppBar(navigateBack: () -> Unit, modifier: Modifier = Modif
navigationIcon = {
IconButton(onClick = navigateBack) {
Icon(
- imageVector = Icons.AutoMirrored.Filled.ArrowBack,
+ painterResource(id = R.drawable.ic_arrow_back),
contentDescription = stringResource(id = R.string.cd_back),
)
}
diff --git a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/shared/EpisodeListItem.kt b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/shared/EpisodeListItem.kt
index acb2933365..0f9c93b7d4 100644
--- a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/shared/EpisodeListItem.kt
+++ b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/shared/EpisodeListItem.kt
@@ -27,11 +27,6 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.automirrored.filled.PlaylistAdd
-import androidx.compose.material.icons.filled.Delete
-import androidx.compose.material.icons.filled.MoreVert
-import androidx.compose.material.icons.rounded.PlayCircleFilled
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
@@ -48,6 +43,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.Role
import androidx.compose.ui.semantics.role
@@ -91,7 +87,7 @@ fun EpisodeListItem(
.padding(end = 40.dp),
) {
Icon(
- imageVector = Icons.Default.Delete,
+ painterResource(id = R.drawable.ic_delete),
contentDescription = null,
modifier = Modifier.align(Alignment.CenterEnd),
)
@@ -156,7 +152,7 @@ private fun EpisodeListItemFooter(
modifier = modifier,
) {
Image(
- imageVector = Icons.Rounded.PlayCircleFilled,
+ painterResource(id = R.drawable.ic_play_circle),
contentDescription = stringResource(R.string.cd_play),
contentScale = ContentScale.Fit,
colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.primary),
@@ -204,7 +200,7 @@ private fun EpisodeListItemFooter(
},
) {
Icon(
- imageVector = Icons.AutoMirrored.Filled.PlaylistAdd,
+ painterResource(id = R.drawable.ic_playlist_add),
contentDescription = stringResource(R.string.cd_add),
tint = MaterialTheme.colorScheme.onSurfaceVariant,
)
@@ -214,7 +210,7 @@ private fun EpisodeListItemFooter(
onClick = { /* TODO */ },
) {
Icon(
- imageVector = Icons.Default.MoreVert,
+ painterResource(id = R.drawable.ic_more_vert),
contentDescription = stringResource(R.string.cd_more),
tint = MaterialTheme.colorScheme.onSurfaceVariant,
)
diff --git a/Jetcaster/mobile/src/main/java/com/example/jetcaster/util/Buttons.kt b/Jetcaster/mobile/src/main/java/com/example/jetcaster/util/Buttons.kt
index a3e1353755..3979a05aa0 100644
--- a/Jetcaster/mobile/src/main/java/com/example/jetcaster/util/Buttons.kt
+++ b/Jetcaster/mobile/src/main/java/com/example/jetcaster/util/Buttons.kt
@@ -18,9 +18,6 @@ package com.example.jetcaster.util
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.Add
-import androidx.compose.material.icons.filled.Check
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.Icon
import androidx.compose.material3.IconToggleButton
@@ -29,6 +26,7 @@ import androidx.compose.material3.IconToggleButtonShapes
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.res.stringResource
import androidx.compose.ui.unit.dp
import com.example.jetcaster.R
@@ -56,9 +54,9 @@ fun ToggleFollowPodcastIconButton(isFollowed: Boolean, onClick: () -> Unit, modi
) {
Icon(
// TODO: think about animating these icons
- imageVector = when {
- isFollowed -> Icons.Default.Check
- else -> Icons.Default.Add
+ painter = when {
+ isFollowed -> painterResource(id = R.drawable.ic_check)
+ else -> painterResource(id = R.drawable.ic_add)
},
contentDescription = when {
isFollowed -> stringResource(R.string.cd_following)
diff --git a/Jetcaster/mobile/src/main/res/drawable/genres.xml b/Jetcaster/mobile/src/main/res/drawable/genres.xml
index fcb2c6079f..1018f99bf5 100644
--- a/Jetcaster/mobile/src/main/res/drawable/genres.xml
+++ b/Jetcaster/mobile/src/main/res/drawable/genres.xml
@@ -2,8 +2,7 @@
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
- android:viewportHeight="960"
- android:tint="?attr/colorControlNormal">
+ android:viewportHeight="960">
diff --git a/Jetcaster/mobile/src/main/res/drawable/ic_account_circle.xml b/Jetcaster/mobile/src/main/res/drawable/ic_account_circle.xml
new file mode 100644
index 0000000000..67542bfa21
--- /dev/null
+++ b/Jetcaster/mobile/src/main/res/drawable/ic_account_circle.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/mobile/src/main/res/drawable/ic_add.xml b/Jetcaster/mobile/src/main/res/drawable/ic_add.xml
new file mode 100644
index 0000000000..2fcde96c96
--- /dev/null
+++ b/Jetcaster/mobile/src/main/res/drawable/ic_add.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/mobile/src/main/res/drawable/ic_arrow_back.xml b/Jetcaster/mobile/src/main/res/drawable/ic_arrow_back.xml
new file mode 100644
index 0000000000..800941dba5
--- /dev/null
+++ b/Jetcaster/mobile/src/main/res/drawable/ic_arrow_back.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/Jetcaster/mobile/src/main/res/drawable/ic_check.xml b/Jetcaster/mobile/src/main/res/drawable/ic_check.xml
new file mode 100644
index 0000000000..6f1fcce828
--- /dev/null
+++ b/Jetcaster/mobile/src/main/res/drawable/ic_check.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/mobile/src/main/res/drawable/ic_delete.xml b/Jetcaster/mobile/src/main/res/drawable/ic_delete.xml
new file mode 100644
index 0000000000..f538c1cc13
--- /dev/null
+++ b/Jetcaster/mobile/src/main/res/drawable/ic_delete.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/mobile/src/main/res/drawable/ic_forward_10.xml b/Jetcaster/mobile/src/main/res/drawable/ic_forward_10.xml
new file mode 100644
index 0000000000..7526b1a6b5
--- /dev/null
+++ b/Jetcaster/mobile/src/main/res/drawable/ic_forward_10.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/mobile/src/main/res/drawable/ic_library_music.xml b/Jetcaster/mobile/src/main/res/drawable/ic_library_music.xml
new file mode 100644
index 0000000000..790e3f6628
--- /dev/null
+++ b/Jetcaster/mobile/src/main/res/drawable/ic_library_music.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/mobile/src/main/res/drawable/ic_more_vert.xml b/Jetcaster/mobile/src/main/res/drawable/ic_more_vert.xml
new file mode 100644
index 0000000000..59400ec977
--- /dev/null
+++ b/Jetcaster/mobile/src/main/res/drawable/ic_more_vert.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/mobile/src/main/res/drawable/ic_notifications.xml b/Jetcaster/mobile/src/main/res/drawable/ic_notifications.xml
new file mode 100644
index 0000000000..cd47b10ae1
--- /dev/null
+++ b/Jetcaster/mobile/src/main/res/drawable/ic_notifications.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/mobile/src/main/res/drawable/ic_notifications_active.xml b/Jetcaster/mobile/src/main/res/drawable/ic_notifications_active.xml
new file mode 100644
index 0000000000..771bf6535d
--- /dev/null
+++ b/Jetcaster/mobile/src/main/res/drawable/ic_notifications_active.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/mobile/src/main/res/drawable/ic_pause.xml b/Jetcaster/mobile/src/main/res/drawable/ic_pause.xml
new file mode 100644
index 0000000000..eef07ec5e7
--- /dev/null
+++ b/Jetcaster/mobile/src/main/res/drawable/ic_pause.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/Jetcaster/mobile/src/main/res/drawable/ic_play_arrow.xml b/Jetcaster/mobile/src/main/res/drawable/ic_play_arrow.xml
new file mode 100644
index 0000000000..a770230e88
--- /dev/null
+++ b/Jetcaster/mobile/src/main/res/drawable/ic_play_arrow.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/Jetcaster/mobile/src/main/res/drawable/ic_play_circle.xml b/Jetcaster/mobile/src/main/res/drawable/ic_play_circle.xml
new file mode 100644
index 0000000000..6a4add8dda
--- /dev/null
+++ b/Jetcaster/mobile/src/main/res/drawable/ic_play_circle.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/Jetcaster/mobile/src/main/res/drawable/ic_playlist_add.xml b/Jetcaster/mobile/src/main/res/drawable/ic_playlist_add.xml
new file mode 100644
index 0000000000..5022c69f3c
--- /dev/null
+++ b/Jetcaster/mobile/src/main/res/drawable/ic_playlist_add.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/mobile/src/main/res/drawable/ic_replay_10.xml b/Jetcaster/mobile/src/main/res/drawable/ic_replay_10.xml
new file mode 100644
index 0000000000..f9826d9a05
--- /dev/null
+++ b/Jetcaster/mobile/src/main/res/drawable/ic_replay_10.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/mobile/src/main/res/drawable/ic_search.xml b/Jetcaster/mobile/src/main/res/drawable/ic_search.xml
new file mode 100644
index 0000000000..20c7b4e734
--- /dev/null
+++ b/Jetcaster/mobile/src/main/res/drawable/ic_search.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/mobile/src/main/res/drawable/ic_skip_next.xml b/Jetcaster/mobile/src/main/res/drawable/ic_skip_next.xml
new file mode 100644
index 0000000000..09407f6551
--- /dev/null
+++ b/Jetcaster/mobile/src/main/res/drawable/ic_skip_next.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/Jetcaster/mobile/src/main/res/drawable/ic_skip_previous.xml b/Jetcaster/mobile/src/main/res/drawable/ic_skip_previous.xml
new file mode 100644
index 0000000000..f494ae6538
--- /dev/null
+++ b/Jetcaster/mobile/src/main/res/drawable/ic_skip_previous.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/Jetcaster/mobile/src/main/res/drawable/ic_video_library.xml b/Jetcaster/mobile/src/main/res/drawable/ic_video_library.xml
new file mode 100644
index 0000000000..54ee520a83
--- /dev/null
+++ b/Jetcaster/mobile/src/main/res/drawable/ic_video_library.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/mobile/src/main/res/values/strings.xml b/Jetcaster/mobile/src/main/res/values/strings.xml
index 4a32133d5e..1b8a07345b 100644
--- a/Jetcaster/mobile/src/main/res/values/strings.xml
+++ b/Jetcaster/mobile/src/main/res/values/strings.xml
@@ -20,7 +20,7 @@
Connection error
Unable to fetch podcasts feeds.\nCheck your internet connection and try again.
Retry
-
+
Your podcasts
Latest episodes
diff --git a/Jetcaster/tv/build.gradle.kts b/Jetcaster/tv/build.gradle.kts
index d8befdfe15..9b890da4f1 100644
--- a/Jetcaster/tv/build.gradle.kts
+++ b/Jetcaster/tv/build.gradle.kts
@@ -98,7 +98,6 @@ dependencies {
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.appcompat)
implementation(platform(libs.androidx.compose.bom))
- implementation(libs.androidx.compose.material.iconsExtended)
implementation(libs.androidx.compose.ui.tooling.preview)
implementation(libs.androidx.tv.material)
implementation(libs.androidx.lifecycle.runtime)
diff --git a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/JetcasterApp.kt b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/JetcasterApp.kt
index 56405f9ac9..147ad25575 100644
--- a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/JetcasterApp.kt
+++ b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/JetcasterApp.kt
@@ -21,12 +21,6 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.Home
-import androidx.compose.material.icons.filled.Person
-import androidx.compose.material.icons.filled.Search
-import androidx.compose.material.icons.filled.Settings
-import androidx.compose.material.icons.filled.VideoLibrary
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
@@ -35,6 +29,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusProperties
import androidx.compose.ui.focus.focusRequester
+import androidx.compose.ui.res.painterResource
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
@@ -44,6 +39,7 @@ import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.NavigationDrawer
import androidx.tv.material3.NavigationDrawerItem
import androidx.tv.material3.Text
+import com.example.jetcaster.tv.R
import com.example.jetcaster.tv.ui.discover.DiscoverScreen
import com.example.jetcaster.tv.ui.episode.EpisodeScreen
import com.example.jetcaster.tv.ui.library.LibraryScreen
@@ -90,7 +86,7 @@ private fun GlobalNavigationContainer(
NavigationDrawerItem(
selected = isClosed && currentRoute == Screen.Profile.route,
onClick = jetcasterAppState::navigateToProfile,
- leadingContent = { Icon(Icons.Default.Person, contentDescription = null) },
+ leadingContent = { Icon(painterResource(id = R.drawable.ic_person), contentDescription = null) },
) {
Column {
Text(text = "Name")
@@ -106,7 +102,7 @@ private fun GlobalNavigationContainer(
onClick = jetcasterAppState::navigateToSearch,
leadingContent = {
Icon(
- Icons.Default.Search,
+ painterResource(id = R.drawable.ic_search),
contentDescription = null,
)
},
@@ -118,7 +114,7 @@ private fun GlobalNavigationContainer(
onClick = jetcasterAppState::navigateToDiscover,
leadingContent = {
Icon(
- Icons.Default.Home,
+ painterResource(id = R.drawable.ic_home),
contentDescription = null,
)
},
@@ -131,7 +127,7 @@ private fun GlobalNavigationContainer(
onClick = jetcasterAppState::navigateToLibrary,
leadingContent = {
Icon(
- Icons.Default.VideoLibrary,
+ painterResource(id = R.drawable.ic_video_library),
contentDescription = null,
)
},
@@ -143,7 +139,7 @@ private fun GlobalNavigationContainer(
NavigationDrawerItem(
selected = isClosed && currentRoute == Screen.Settings.route,
onClick = jetcasterAppState::navigateToSettings,
- leadingContent = { Icon(Icons.Default.Settings, contentDescription = null) },
+ leadingContent = { Icon(painterResource(id = R.drawable.ic_settings), contentDescription = null) },
) {
Text(text = "Settings")
}
diff --git a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/component/Button.kt b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/component/Button.kt
index 79f2f8016c..6bf564b76e 100644
--- a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/component/Button.kt
+++ b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/component/Button.kt
@@ -17,18 +17,9 @@
package com.example.jetcaster.tv.ui.component
import androidx.compose.foundation.layout.size
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.automirrored.filled.PlaylistAdd
-import androidx.compose.material.icons.filled.Forward10
-import androidx.compose.material.icons.filled.Pause
-import androidx.compose.material.icons.filled.PlayArrow
-import androidx.compose.material.icons.filled.Replay10
-import androidx.compose.material.icons.filled.SkipNext
-import androidx.compose.material.icons.filled.SkipPrevious
-import androidx.compose.material.icons.outlined.Info
-import androidx.compose.material.icons.outlined.PlayArrow
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.unit.dp
import androidx.tv.material3.ButtonDefaults
@@ -39,7 +30,7 @@ import com.example.jetcaster.tv.R
@Composable
internal fun PlayButton(onClick: () -> Unit, modifier: Modifier = Modifier, scale: ButtonScale = ButtonDefaults.scale()) = ButtonWithIcon(
- icon = Icons.Outlined.PlayArrow,
+ iconId = R.drawable.ic_play_arrow,
label = stringResource(R.string.label_play),
onClick = onClick,
modifier = modifier,
@@ -50,7 +41,7 @@ internal fun PlayButton(onClick: () -> Unit, modifier: Modifier = Modifier, scal
internal fun EnqueueButton(onClick: () -> Unit, modifier: Modifier = Modifier) {
IconButton(onClick = onClick, modifier = modifier) {
Icon(
- Icons.AutoMirrored.Filled.PlaylistAdd,
+ painterResource(id = R.drawable.ic_playlist_add),
contentDescription = stringResource(R.string.label_add_playlist),
)
}
@@ -60,7 +51,7 @@ internal fun EnqueueButton(onClick: () -> Unit, modifier: Modifier = Modifier) {
internal fun InfoButton(onClick: () -> Unit, modifier: Modifier = Modifier) {
IconButton(onClick = onClick, modifier = modifier) {
Icon(
- Icons.Outlined.Info,
+ painterResource(id = R.drawable.ic_info),
contentDescription = stringResource(R.string.label_info),
)
}
@@ -70,7 +61,7 @@ internal fun InfoButton(onClick: () -> Unit, modifier: Modifier = Modifier) {
internal fun PreviousButton(onClick: () -> Unit, modifier: Modifier = Modifier) {
IconButton(onClick = onClick, modifier = modifier) {
Icon(
- Icons.Default.SkipPrevious,
+ painterResource(id = R.drawable.ic_skip_previous),
contentDescription = stringResource(R.string.label_previous_episode),
)
}
@@ -80,7 +71,7 @@ internal fun PreviousButton(onClick: () -> Unit, modifier: Modifier = Modifier)
internal fun NextButton(onClick: () -> Unit, modifier: Modifier = Modifier) {
IconButton(onClick = onClick, modifier = modifier) {
Icon(
- Icons.Default.SkipNext,
+ painterResource(id = R.drawable.ic_skip_next),
contentDescription = stringResource(R.string.label_next_episode),
)
}
@@ -89,9 +80,9 @@ internal fun NextButton(onClick: () -> Unit, modifier: Modifier = Modifier) {
@Composable
internal fun PlayPauseButton(isPlaying: Boolean, onClick: () -> Unit, modifier: Modifier = Modifier) {
val (icon, description) = if (isPlaying) {
- Icons.Default.Pause to stringResource(R.string.label_pause)
+ painterResource(id = R.drawable.ic_pause) to stringResource(R.string.label_pause)
} else {
- Icons.Default.PlayArrow to stringResource(R.string.label_play)
+ painterResource(id = R.drawable.ic_play_arrow) to stringResource(R.string.label_play)
}
IconButton(onClick = onClick, modifier = modifier) {
Icon(icon, description, modifier = Modifier.size(48.dp))
@@ -102,7 +93,7 @@ internal fun PlayPauseButton(isPlaying: Boolean, onClick: () -> Unit, modifier:
internal fun RewindButton(onClick: () -> Unit, modifier: Modifier = Modifier) {
IconButton(onClick = onClick, modifier = modifier) {
Icon(
- Icons.Default.Replay10,
+ painterResource(id = R.drawable.ic_replay_10),
contentDescription = stringResource(R.string.label_rewind),
)
}
@@ -112,7 +103,7 @@ internal fun RewindButton(onClick: () -> Unit, modifier: Modifier = Modifier) {
internal fun SkipButton(onClick: () -> Unit, modifier: Modifier = Modifier) {
IconButton(onClick = onClick, modifier = modifier) {
Icon(
- Icons.Default.Forward10,
+ painterResource(id = R.drawable.ic_forward_10),
contentDescription = stringResource(R.string.label_skip),
)
}
diff --git a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/component/ButtonWithIcon.kt b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/component/ButtonWithIcon.kt
index b5fa71653c..ce4314810a 100644
--- a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/component/ButtonWithIcon.kt
+++ b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/component/ButtonWithIcon.kt
@@ -16,11 +16,12 @@
package com.example.jetcaster.tv.ui.component
+import androidx.annotation.DrawableRes
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import androidx.tv.material3.Button
import androidx.tv.material3.ButtonDefaults
@@ -31,14 +32,14 @@ import androidx.tv.material3.Text
@Composable
internal fun ButtonWithIcon(
label: String,
- icon: ImageVector,
+ @DrawableRes iconId: Int,
onClick: () -> Unit,
modifier: Modifier = Modifier,
scale: ButtonScale = ButtonDefaults.scale(),
) {
Button(onClick = onClick, modifier = modifier, scale = scale) {
Icon(
- icon,
+ painterResource(id = iconId),
contentDescription = null,
)
Spacer(modifier = Modifier.width(6.dp))
diff --git a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/podcast/PodcastDetailsScreen.kt b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/podcast/PodcastDetailsScreen.kt
index 75b4b743fb..5db3b9a5c6 100644
--- a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/podcast/PodcastDetailsScreen.kt
+++ b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/podcast/PodcastDetailsScreen.kt
@@ -29,9 +29,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.Add
-import androidx.compose.material.icons.filled.Remove
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
@@ -228,10 +225,10 @@ private fun ToggleSubscriptionButton(
unsubscribe: (PodcastInfo, Boolean) -> Unit,
modifier: Modifier = Modifier,
) {
- val icon = if (isSubscribed) {
- Icons.Default.Remove
+ val iconId = if (isSubscribed) {
+ R.drawable.ic_remove
} else {
- Icons.Default.Add
+ R.drawable.ic_add
}
val label = if (isSubscribed) {
stringResource(R.string.label_unsubscribe)
@@ -245,7 +242,7 @@ private fun ToggleSubscriptionButton(
}
ButtonWithIcon(
label = label,
- icon = icon,
+ iconId = iconId,
onClick = { action(podcastInfo, isSubscribed) },
scale = ButtonDefaults.scale(scale = 1f),
modifier = modifier,
diff --git a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/search/SearchScreen.kt b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/search/SearchScreen.kt
index 0fd3bb0ee9..ebb00cc6c1 100644
--- a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/search/SearchScreen.kt
+++ b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/search/SearchScreen.kt
@@ -32,8 +32,6 @@ import androidx.compose.foundation.lazy.grid.items
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.BasicTextField
import androidx.compose.foundation.text.KeyboardOptions
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.Search
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
@@ -46,6 +44,7 @@ import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.focus.focusRestorer
import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.unit.dp
@@ -207,7 +206,7 @@ private fun KeywordInput(keyword: String, onKeywordInput: (String) -> Unit, modi
verticalAlignment = Alignment.CenterVertically,
) {
Icon(
- Icons.Default.Search,
+ painterResource(id = R.drawable.ic_search),
contentDescription = stringResource(R.string.label_search),
modifier = Modifier.padding(end = 12.dp),
)
diff --git a/Jetcaster/tv/src/main/res/drawable/ic_add.xml b/Jetcaster/tv/src/main/res/drawable/ic_add.xml
new file mode 100644
index 0000000000..2fcde96c96
--- /dev/null
+++ b/Jetcaster/tv/src/main/res/drawable/ic_add.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/tv/src/main/res/drawable/ic_forward_10.xml b/Jetcaster/tv/src/main/res/drawable/ic_forward_10.xml
new file mode 100644
index 0000000000..7526b1a6b5
--- /dev/null
+++ b/Jetcaster/tv/src/main/res/drawable/ic_forward_10.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/tv/src/main/res/drawable/ic_home.xml b/Jetcaster/tv/src/main/res/drawable/ic_home.xml
new file mode 100644
index 0000000000..9ef27eace1
--- /dev/null
+++ b/Jetcaster/tv/src/main/res/drawable/ic_home.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/tv/src/main/res/drawable/ic_info.xml b/Jetcaster/tv/src/main/res/drawable/ic_info.xml
new file mode 100644
index 0000000000..1ece0341d0
--- /dev/null
+++ b/Jetcaster/tv/src/main/res/drawable/ic_info.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/tv/src/main/res/drawable/ic_library_music.xml b/Jetcaster/tv/src/main/res/drawable/ic_library_music.xml
new file mode 100644
index 0000000000..790e3f6628
--- /dev/null
+++ b/Jetcaster/tv/src/main/res/drawable/ic_library_music.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/tv/src/main/res/drawable/ic_pause.xml b/Jetcaster/tv/src/main/res/drawable/ic_pause.xml
new file mode 100644
index 0000000000..8a7990144b
--- /dev/null
+++ b/Jetcaster/tv/src/main/res/drawable/ic_pause.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/tv/src/main/res/drawable/ic_person.xml b/Jetcaster/tv/src/main/res/drawable/ic_person.xml
new file mode 100644
index 0000000000..aef9927129
--- /dev/null
+++ b/Jetcaster/tv/src/main/res/drawable/ic_person.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/tv/src/main/res/drawable/ic_play_arrow.xml b/Jetcaster/tv/src/main/res/drawable/ic_play_arrow.xml
new file mode 100644
index 0000000000..582bcd142d
--- /dev/null
+++ b/Jetcaster/tv/src/main/res/drawable/ic_play_arrow.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/tv/src/main/res/drawable/ic_playlist_add.xml b/Jetcaster/tv/src/main/res/drawable/ic_playlist_add.xml
new file mode 100644
index 0000000000..5022c69f3c
--- /dev/null
+++ b/Jetcaster/tv/src/main/res/drawable/ic_playlist_add.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/tv/src/main/res/drawable/ic_remove.xml b/Jetcaster/tv/src/main/res/drawable/ic_remove.xml
new file mode 100644
index 0000000000..0cc9cffb46
--- /dev/null
+++ b/Jetcaster/tv/src/main/res/drawable/ic_remove.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/tv/src/main/res/drawable/ic_replay_10.xml b/Jetcaster/tv/src/main/res/drawable/ic_replay_10.xml
new file mode 100644
index 0000000000..f9826d9a05
--- /dev/null
+++ b/Jetcaster/tv/src/main/res/drawable/ic_replay_10.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/tv/src/main/res/drawable/ic_search.xml b/Jetcaster/tv/src/main/res/drawable/ic_search.xml
new file mode 100644
index 0000000000..20c7b4e734
--- /dev/null
+++ b/Jetcaster/tv/src/main/res/drawable/ic_search.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/tv/src/main/res/drawable/ic_settings.xml b/Jetcaster/tv/src/main/res/drawable/ic_settings.xml
new file mode 100644
index 0000000000..0b0cc8700e
--- /dev/null
+++ b/Jetcaster/tv/src/main/res/drawable/ic_settings.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/tv/src/main/res/drawable/ic_skip_next.xml b/Jetcaster/tv/src/main/res/drawable/ic_skip_next.xml
new file mode 100644
index 0000000000..ba5057f655
--- /dev/null
+++ b/Jetcaster/tv/src/main/res/drawable/ic_skip_next.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/tv/src/main/res/drawable/ic_skip_previous.xml b/Jetcaster/tv/src/main/res/drawable/ic_skip_previous.xml
new file mode 100644
index 0000000000..a4a0b659c9
--- /dev/null
+++ b/Jetcaster/tv/src/main/res/drawable/ic_skip_previous.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/tv/src/main/res/drawable/ic_video_library.xml b/Jetcaster/tv/src/main/res/drawable/ic_video_library.xml
new file mode 100644
index 0000000000..54ee520a83
--- /dev/null
+++ b/Jetcaster/tv/src/main/res/drawable/ic_video_library.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Jetcaster/wear/build.gradle b/Jetcaster/wear/build.gradle
index 59e7886262..a21e5a5812 100644
--- a/Jetcaster/wear/build.gradle
+++ b/Jetcaster/wear/build.gradle
@@ -96,8 +96,6 @@ dependencies {
// Foundation is additive, so you can use the mobile version in your Wear OS app.
implementation libs.androidx.wear.compose.foundation
- implementation(libs.androidx.material.icons.core)
- implementation(libs.androidx.compose.material.iconsExtended)
implementation(libs.androidx.media3.exoplayer)
implementation(libs.androidx.media3.ui.compose)
diff --git a/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/episode/EpisodeScreen.kt b/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/episode/EpisodeScreen.kt
index 85f48ac47e..2f9f130302 100644
--- a/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/episode/EpisodeScreen.kt
+++ b/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/episode/EpisodeScreen.kt
@@ -20,8 +20,6 @@ import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.automirrored.filled.PlaylistAdd
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
@@ -238,7 +236,7 @@ fun LoadedButtonsContent(
enabled = enabled,
) {
Icon(
- imageVector = Icons.AutoMirrored.Filled.PlaylistAdd,
+ painterResource(id = R.drawable.ic_playlist_add),
contentDescription = stringResource(id = R.string.add_to_queue_content_description),
)
}
diff --git a/Jetcaster/wear/src/main/res/drawable/ic_playlist_add.xml b/Jetcaster/wear/src/main/res/drawable/ic_playlist_add.xml
new file mode 100644
index 0000000000..5022c69f3c
--- /dev/null
+++ b/Jetcaster/wear/src/main/res/drawable/ic_playlist_add.xml
@@ -0,0 +1,9 @@
+
+
+