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 @@ + + +