diff --git a/Reply/app/build.gradle.kts b/Reply/app/build.gradle.kts index 660b5e4667..7207aa4ed3 100644 --- a/Reply/app/build.gradle.kts +++ b/Reply/app/build.gradle.kts @@ -114,7 +114,6 @@ dependencies { implementation("com.google.accompanist:accompanist-adaptive:0.26.2-beta") implementation(libs.androidx.compose.materialWindow) - implementation(libs.androidx.compose.material.iconsExtended) implementation(libs.androidx.lifecycle.runtime) implementation(libs.androidx.lifecycle.viewModelCompose) diff --git a/Reply/app/src/main/java/com/example/reply/ui/ReplyListContent.kt b/Reply/app/src/main/java/com/example/reply/ui/ReplyListContent.kt index 9d26e0b370..b1838fb3f8 100644 --- a/Reply/app/src/main/java/com/example/reply/ui/ReplyListContent.kt +++ b/Reply/app/src/main/java/com/example/reply/ui/ReplyListContent.kt @@ -32,8 +32,6 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Edit import androidx.compose.material3.ExtendedFloatingActionButton import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme @@ -42,6 +40,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect 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 androidx.window.layout.DisplayFeature @@ -115,7 +114,9 @@ fun ReplyInboxScreen( if (navigationType == ReplyNavigationType.BOTTOM_NAVIGATION) { ExtendedFloatingActionButton( text = { Text(text = stringResource(id = R.string.compose)) }, - icon = { Icon(Icons.Default.Edit, stringResource(id = R.string.compose)) }, + icon = { + Icon(painter = painterResource(id = R.drawable.ic_edit), contentDescription = stringResource(id = R.string.compose)) + }, onClick = { /*TODO*/ }, modifier = Modifier .align(Alignment.BottomEnd) diff --git a/Reply/app/src/main/java/com/example/reply/ui/components/ReplyAppBars.kt b/Reply/app/src/main/java/com/example/reply/ui/components/ReplyAppBars.kt index b9dd4d6765..725228972c 100644 --- a/Reply/app/src/main/java/com/example/reply/ui/components/ReplyAppBars.kt +++ b/Reply/app/src/main/java/com/example/reply/ui/components/ReplyAppBars.kt @@ -25,10 +25,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size 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.MoreVert -import androidx.compose.material.icons.filled.Search import androidx.compose.material3.DockedSearchBar import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.FilledIconButton @@ -50,6 +46,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue 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.reply.R @@ -99,7 +96,7 @@ fun ReplyDockedSearchBar(emails: List, onSearchItemSelected: (Email) -> U leadingIcon = { if (expanded) { Icon( - imageVector = Icons.AutoMirrored.Filled.ArrowBack, + painter = painterResource(id = R.drawable.ic_arrow_back), contentDescription = stringResource(id = R.string.back_button), modifier = Modifier .padding(start = 16.dp) @@ -110,7 +107,7 @@ fun ReplyDockedSearchBar(emails: List, onSearchItemSelected: (Email) -> U ) } else { Icon( - imageVector = Icons.Default.Search, + painter = painterResource(id = R.drawable.ic_search), contentDescription = stringResource(id = R.string.search), modifier = Modifier.padding(start = 16.dp), ) @@ -209,7 +206,7 @@ fun EmailDetailAppBar(email: Email, isFullScreen: Boolean, modifier: Modifier = ), ) { Icon( - imageVector = Icons.AutoMirrored.Filled.ArrowBack, + painter = painterResource(id = R.drawable.ic_arrow_back), contentDescription = stringResource(id = R.string.back_button), modifier = Modifier.size(14.dp), ) @@ -221,7 +218,7 @@ fun EmailDetailAppBar(email: Email, isFullScreen: Boolean, modifier: Modifier = onClick = { /*TODO*/ }, ) { Icon( - imageVector = Icons.Default.MoreVert, + painter = painterResource(id = R.drawable.ic_more_vert), contentDescription = stringResource(id = R.string.more_options_button), tint = MaterialTheme.colorScheme.onSurfaceVariant, ) diff --git a/Reply/app/src/main/java/com/example/reply/ui/components/ReplyEmailListItem.kt b/Reply/app/src/main/java/com/example/reply/ui/components/ReplyEmailListItem.kt index 436dae1e97..aa74634ad8 100644 --- a/Reply/app/src/main/java/com/example/reply/ui/components/ReplyEmailListItem.kt +++ b/Reply/app/src/main/java/com/example/reply/ui/components/ReplyEmailListItem.kt @@ -30,9 +30,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Check -import androidx.compose.material.icons.filled.StarBorder import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults import androidx.compose.material3.Icon @@ -44,10 +41,12 @@ import androidx.compose.runtime.remember 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.semantics.selected import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp +import com.example.reply.R import com.example.reply.data.Email @OptIn(ExperimentalFoundationApi::class) @@ -86,8 +85,8 @@ fun ReplyEmailListItem( interactionSource = remember { MutableInteractionSource() }, indication = null, ) { toggleSelection(email.id) } - AnimatedContent(targetState = isSelected, label = "avatar") { selected -> - if (selected) { + AnimatedContent(targetState = isSelected, label = "avatar") { + if (it) { SelectedProfileImage(clickModifier) } else { ReplyProfileImage( @@ -120,7 +119,7 @@ fun ReplyEmailListItem( .background(MaterialTheme.colorScheme.surfaceContainerHigh), ) { Icon( - imageVector = Icons.Default.StarBorder, + painter = painterResource(id = R.drawable.ic_star_border), contentDescription = "Favorite", tint = MaterialTheme.colorScheme.outline, ) @@ -151,7 +150,7 @@ fun SelectedProfileImage(modifier: Modifier = Modifier) { .background(MaterialTheme.colorScheme.primary), ) { Icon( - Icons.Default.Check, + painter = painterResource(id = R.drawable.ic_check), contentDescription = null, modifier = Modifier .size(24.dp) diff --git a/Reply/app/src/main/java/com/example/reply/ui/components/ReplyEmailThreadItem.kt b/Reply/app/src/main/java/com/example/reply/ui/components/ReplyEmailThreadItem.kt index 165e404593..294e70ff3a 100644 --- a/Reply/app/src/main/java/com/example/reply/ui/components/ReplyEmailThreadItem.kt +++ b/Reply/app/src/main/java/com/example/reply/ui/components/ReplyEmailThreadItem.kt @@ -23,8 +23,6 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.StarBorder import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Card @@ -36,6 +34,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable 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.unit.dp import com.example.reply.R @@ -82,7 +81,7 @@ fun ReplyEmailThreadItem(email: Email, modifier: Modifier = Modifier) { .background(MaterialTheme.colorScheme.surfaceContainer), ) { Icon( - imageVector = Icons.Default.StarBorder, + painter = painterResource(id = R.drawable.ic_star_border), contentDescription = "Favorite", tint = MaterialTheme.colorScheme.outline, ) diff --git a/Reply/app/src/main/java/com/example/reply/ui/navigation/ReplyNavigationActions.kt b/Reply/app/src/main/java/com/example/reply/ui/navigation/ReplyNavigationActions.kt index 857bb1eb82..ad0889c140 100644 --- a/Reply/app/src/main/java/com/example/reply/ui/navigation/ReplyNavigationActions.kt +++ b/Reply/app/src/main/java/com/example/reply/ui/navigation/ReplyNavigationActions.kt @@ -16,12 +16,6 @@ package com.example.reply.ui.navigation -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.Article -import androidx.compose.material.icons.filled.Inbox -import androidx.compose.material.icons.filled.People -import androidx.compose.material.icons.outlined.ChatBubbleOutline -import androidx.compose.ui.graphics.vector.ImageVector import androidx.navigation.NavGraph.Companion.findStartDestination import androidx.navigation.NavHostController import com.example.reply.R @@ -34,7 +28,7 @@ sealed interface Route { @Serializable data object Groups : Route } -data class ReplyTopLevelDestination(val route: Route, val selectedIcon: ImageVector, val unselectedIcon: ImageVector, val iconTextId: Int) +data class ReplyTopLevelDestination(val route: Route, val selectedIcon: Int, val unselectedIcon: Int, val iconTextId: Int) class ReplyNavigationActions(private val navController: NavHostController) { @@ -58,27 +52,27 @@ class ReplyNavigationActions(private val navController: NavHostController) { val TOP_LEVEL_DESTINATIONS = listOf( ReplyTopLevelDestination( route = Route.Inbox, - selectedIcon = Icons.Default.Inbox, - unselectedIcon = Icons.Default.Inbox, + selectedIcon = R.drawable.ic_inbox, + unselectedIcon = R.drawable.ic_inbox, iconTextId = R.string.tab_inbox, ), ReplyTopLevelDestination( route = Route.Articles, - selectedIcon = Icons.AutoMirrored.Filled.Article, - unselectedIcon = Icons.AutoMirrored.Filled.Article, + selectedIcon = R.drawable.ic_article, + unselectedIcon = R.drawable.ic_article, iconTextId = R.string.tab_article, ), ReplyTopLevelDestination( route = Route.DirectMessages, - selectedIcon = Icons.Outlined.ChatBubbleOutline, - unselectedIcon = Icons.Outlined.ChatBubbleOutline, - iconTextId = R.string.tab_inbox, + selectedIcon = R.drawable.ic_chat_bubble_outline, + unselectedIcon = R.drawable.ic_chat_bubble_outline, + iconTextId = R.string.tab_dm, ), ReplyTopLevelDestination( route = Route.Groups, - selectedIcon = Icons.Default.People, - unselectedIcon = Icons.Default.People, - iconTextId = R.string.tab_article, + selectedIcon = R.drawable.ic_group, + unselectedIcon = R.drawable.ic_group, + iconTextId = R.string.tab_groups, ), ) diff --git a/Reply/app/src/main/java/com/example/reply/ui/navigation/ReplyNavigationComponents.kt b/Reply/app/src/main/java/com/example/reply/ui/navigation/ReplyNavigationComponents.kt index 82072f33b7..1826fd29ed 100644 --- a/Reply/app/src/main/java/com/example/reply/ui/navigation/ReplyNavigationComponents.kt +++ b/Reply/app/src/main/java/com/example/reply/ui/navigation/ReplyNavigationComponents.kt @@ -30,10 +30,6 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.sizeIn import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.MenuOpen -import androidx.compose.material.icons.filled.Edit -import androidx.compose.material.icons.filled.Menu import androidx.compose.material3.DrawerValue import androidx.compose.material3.ExtendedFloatingActionButton import androidx.compose.material3.FloatingActionButton @@ -65,6 +61,7 @@ import androidx.compose.ui.layout.Measurable import androidx.compose.ui.layout.MeasurePolicy import androidx.compose.ui.layout.layoutId import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp @@ -191,7 +188,7 @@ fun ReplyNavigationRail( onClick = onDrawerClicked, icon = { Icon( - imageVector = Icons.Default.Menu, + painter = painterResource(id = R.drawable.ic_menu), contentDescription = stringResource(id = R.string.navigation_drawer), ) }, @@ -203,7 +200,7 @@ fun ReplyNavigationRail( contentColor = MaterialTheme.colorScheme.onTertiaryContainer, ) { Icon( - imageVector = Icons.Default.Edit, + painter = painterResource(id = R.drawable.ic_edit), contentDescription = stringResource(id = R.string.compose), modifier = Modifier.size(18.dp), ) @@ -223,7 +220,7 @@ fun ReplyNavigationRail( onClick = { navigateToTopLevelDestination(replyDestination) }, icon = { Icon( - imageVector = replyDestination.selectedIcon, + painter = painterResource(id = replyDestination.selectedIcon), contentDescription = stringResource( id = replyDestination.iconTextId, ), @@ -244,7 +241,7 @@ fun ReplyBottomNavigationBar(currentDestination: NavDestination?, navigateToTopL onClick = { navigateToTopLevelDestination(replyDestination) }, icon = { Icon( - imageVector = replyDestination.selectedIcon, + painter = painterResource(id = replyDestination.selectedIcon), contentDescription = stringResource(id = replyDestination.iconTextId), ) }, @@ -290,7 +287,7 @@ fun PermanentNavigationDrawerContent( contentColor = MaterialTheme.colorScheme.onTertiaryContainer, ) { Icon( - imageVector = Icons.Default.Edit, + painter = painterResource(id = R.drawable.ic_edit), contentDescription = stringResource(id = R.string.compose), modifier = Modifier.size(24.dp), ) @@ -319,7 +316,7 @@ fun PermanentNavigationDrawerContent( }, icon = { Icon( - imageVector = replyDestination.selectedIcon, + painter = painterResource(id = replyDestination.selectedIcon), contentDescription = stringResource( id = replyDestination.iconTextId, ), @@ -371,7 +368,7 @@ fun ModalNavigationDrawerContent( ) IconButton(onClick = onDrawerClicked) { Icon( - imageVector = Icons.AutoMirrored.Filled.MenuOpen, + painter = painterResource(id = R.drawable.ic_menu_open), contentDescription = stringResource(id = R.string.close_drawer), ) } @@ -386,7 +383,7 @@ fun ModalNavigationDrawerContent( contentColor = MaterialTheme.colorScheme.onTertiaryContainer, ) { Icon( - imageVector = Icons.Default.Edit, + painter = painterResource(id = R.drawable.ic_edit), contentDescription = stringResource(id = R.string.compose), modifier = Modifier.size(18.dp), ) @@ -415,7 +412,7 @@ fun ModalNavigationDrawerContent( }, icon = { Icon( - imageVector = replyDestination.selectedIcon, + painter = painterResource(id = replyDestination.selectedIcon), contentDescription = stringResource( id = replyDestination.iconTextId, ), diff --git a/Reply/app/src/main/res/drawable/ic_arrow_back.xml b/Reply/app/src/main/res/drawable/ic_arrow_back.xml new file mode 100644 index 0000000000..d04576b541 --- /dev/null +++ b/Reply/app/src/main/res/drawable/ic_arrow_back.xml @@ -0,0 +1,10 @@ + + + diff --git a/Reply/app/src/main/res/drawable/ic_article.xml b/Reply/app/src/main/res/drawable/ic_article.xml new file mode 100644 index 0000000000..8f2ba45ee5 --- /dev/null +++ b/Reply/app/src/main/res/drawable/ic_article.xml @@ -0,0 +1,10 @@ + + + diff --git a/Reply/app/src/main/res/drawable/ic_chat_bubble_outline.xml b/Reply/app/src/main/res/drawable/ic_chat_bubble_outline.xml new file mode 100644 index 0000000000..e3a59efb29 --- /dev/null +++ b/Reply/app/src/main/res/drawable/ic_chat_bubble_outline.xml @@ -0,0 +1,9 @@ + + + diff --git a/Reply/app/src/main/res/drawable/ic_check.xml b/Reply/app/src/main/res/drawable/ic_check.xml new file mode 100644 index 0000000000..6f1fcce828 --- /dev/null +++ b/Reply/app/src/main/res/drawable/ic_check.xml @@ -0,0 +1,9 @@ + + + diff --git a/Reply/app/src/main/res/drawable/ic_edit.xml b/Reply/app/src/main/res/drawable/ic_edit.xml new file mode 100644 index 0000000000..db9b31f528 --- /dev/null +++ b/Reply/app/src/main/res/drawable/ic_edit.xml @@ -0,0 +1,9 @@ + + + diff --git a/Reply/app/src/main/res/drawable/ic_group.xml b/Reply/app/src/main/res/drawable/ic_group.xml new file mode 100644 index 0000000000..14d4bbcce5 --- /dev/null +++ b/Reply/app/src/main/res/drawable/ic_group.xml @@ -0,0 +1,9 @@ + + + diff --git a/Reply/app/src/main/res/drawable/ic_inbox.xml b/Reply/app/src/main/res/drawable/ic_inbox.xml new file mode 100644 index 0000000000..779147f618 --- /dev/null +++ b/Reply/app/src/main/res/drawable/ic_inbox.xml @@ -0,0 +1,9 @@ + + + diff --git a/Reply/app/src/main/res/drawable/ic_menu.xml b/Reply/app/src/main/res/drawable/ic_menu.xml new file mode 100644 index 0000000000..7915d80e52 --- /dev/null +++ b/Reply/app/src/main/res/drawable/ic_menu.xml @@ -0,0 +1,9 @@ + + + diff --git a/Reply/app/src/main/res/drawable/ic_menu_open.xml b/Reply/app/src/main/res/drawable/ic_menu_open.xml new file mode 100644 index 0000000000..4339190308 --- /dev/null +++ b/Reply/app/src/main/res/drawable/ic_menu_open.xml @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/Reply/app/src/main/res/drawable/ic_more_vert.xml b/Reply/app/src/main/res/drawable/ic_more_vert.xml new file mode 100644 index 0000000000..59400ec977 --- /dev/null +++ b/Reply/app/src/main/res/drawable/ic_more_vert.xml @@ -0,0 +1,9 @@ + + + diff --git a/Reply/app/src/main/res/drawable/ic_search.xml b/Reply/app/src/main/res/drawable/ic_search.xml new file mode 100644 index 0000000000..20c7b4e734 --- /dev/null +++ b/Reply/app/src/main/res/drawable/ic_search.xml @@ -0,0 +1,9 @@ + + + diff --git a/Reply/app/src/main/res/drawable/ic_star_border.xml b/Reply/app/src/main/res/drawable/ic_star_border.xml new file mode 100644 index 0000000000..38f4240690 --- /dev/null +++ b/Reply/app/src/main/res/drawable/ic_star_border.xml @@ -0,0 +1,9 @@ + + +