Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion Jetsnack/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,6 @@ dependencies {
implementation(libs.androidx.compose.ui.util)
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.compose.animation)
implementation(libs.androidx.compose.material.iconsExtended)
implementation(libs.androidx.compose.ui.tooling.preview)
debugImplementation(libs.androidx.compose.ui.tooling)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,13 @@

package com.example.jetsnack.model

import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Android
import androidx.compose.material.icons.filled.SortByAlpha
import androidx.compose.material.icons.filled.Star
import androidx.annotation.DrawableRes
import androidx.compose.runtime.Stable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.graphics.vector.ImageVector
import com.example.jetsnack.R

@Stable
class Filter(val name: String, enabled: Boolean = false, val icon: ImageVector? = null) {
class Filter(val name: String, enabled: Boolean = false, @DrawableRes val icon: Int? = null) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Consider making icon a non-nullable Int with a default value instead of a nullable Int. This would simplify usage and avoid null checks where the icon is always expected to be present. If there are cases where an icon is truly optional, then the current approach is acceptable.

Suggested change
class Filter(val name: String, enabled: Boolean = false, @DrawableRes val icon: Int? = null) {
class Filter(val name: String, enabled: Boolean = false, @DrawableRes val icon: Int = R.drawable.default_icon) {

val enabled = mutableStateOf(enabled)
}

Expand All @@ -43,9 +40,9 @@ val priceFilters = listOf(
Filter(name = "$$$$"),
)
val sortFilters = listOf(
Filter(name = "Android's favorite (default)", icon = Icons.Filled.Android),
Filter(name = "Rating", icon = Icons.Filled.Star),
Filter(name = "Alphabetical", icon = Icons.Filled.SortByAlpha),
Filter(name = "Android's favorite (default)", icon = R.drawable.ic_android),
Filter(name = "Rating", icon = R.drawable.ic_star),
Filter(name = "Alphabetical", icon = R.drawable.ic_sort_by_alpha),
)

val categoryFilters = listOf(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,6 @@ import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.selection.toggleable
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.FilterList
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
Expand All @@ -48,6 +46,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
Expand Down Expand Up @@ -82,7 +81,7 @@ fun FilterBar(
),
) {
Icon(
imageVector = Icons.Rounded.FilterList,
painterResource(R.drawable.ic_filter_list),
tint = JetsnackTheme.colors.brand,
contentDescription = stringResource(R.string.label_filters),
modifier = Modifier.diagonalGradientBorder(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,13 @@
package com.example.jetsnack.ui.components

import android.content.res.Configuration
import androidx.annotation.DrawableRes
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.collectIsPressedAsState
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material3.Icon
import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable
Expand All @@ -34,14 +33,15 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.BlendMode
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.example.jetsnack.R
import com.example.jetsnack.ui.theme.JetsnackTheme

@Composable
fun JetsnackGradientTintedIconButton(
imageVector: ImageVector,
@DrawableRes iconResourceId: Int,
onClick: () -> Unit,
contentDescription: String?,
modifier: Modifier = Modifier,
Expand Down Expand Up @@ -89,7 +89,7 @@ fun JetsnackGradientTintedIconButton(
color = Color.Transparent,
) {
Icon(
imageVector = imageVector,
painter = painterResource(id = iconResourceId),
contentDescription = contentDescription,
modifier = modifierColor,
)
Expand All @@ -102,7 +102,7 @@ fun JetsnackGradientTintedIconButton(
private fun GradientTintedIconButtonPreview() {
JetsnackTheme {
JetsnackGradientTintedIconButton(
imageVector = Icons.Default.Add,
iconResourceId = R.drawable.ic_add,
onClick = {},
contentDescription = "Demo",
modifier = Modifier.padding(4.dp),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,6 @@ import androidx.compose.animation.Crossfade
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.widthIn
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material.icons.filled.Remove
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
Expand Down Expand Up @@ -54,7 +51,7 @@ fun QuantitySelector(count: Int, decreaseItemCount: () -> Unit, increaseItemCoun
.align(Alignment.CenterVertically),
)
JetsnackGradientTintedIconButton(
imageVector = Icons.Default.Remove,
iconResourceId = R.drawable.ic_remove,
onClick = decreaseItemCount,
contentDescription = stringResource(R.string.label_decrease),
modifier = Modifier.align(Alignment.CenterVertically),
Expand All @@ -74,7 +71,7 @@ fun QuantitySelector(count: Int, decreaseItemCount: () -> Unit, increaseItemCoun
)
}
JetsnackGradientTintedIconButton(
imageVector = Icons.Default.Add,
iconResourceId = R.drawable.ic_add,
onClick = increaseItemCount,
contentDescription = stringResource(R.string.label_increase),
modifier = Modifier.align(Alignment.CenterVertically),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,6 @@ import androidx.compose.animation.slideOutVertically
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.ExpandMore
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
Expand All @@ -37,6 +35,7 @@ import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
Expand Down Expand Up @@ -87,7 +86,7 @@ fun DestinationBar(modifier: Modifier = Modifier) {
modifier = Modifier.align(Alignment.CenterVertically),
) {
Icon(
imageVector = Icons.Outlined.ExpandMore,
painter = painterResource(id = R.drawable.ic_expand_more),
tint = JetsnackTheme.colors.brand,
contentDescription =
stringResource(R.string.label_select_delivery),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

package com.example.jetsnack.ui.home

import androidx.annotation.DrawableRes
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.AnimatedVisibilityScope
import androidx.compose.animation.ExperimentalSharedTransitionApi
Expand All @@ -43,9 +44,6 @@ import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.selection.selectable
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material.icons.filled.Done
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
Expand All @@ -62,7 +60,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
Expand Down Expand Up @@ -131,7 +129,7 @@ fun FilterScreen(sharedTransitionScope: SharedTransitionScope, animatedVisibilit
Row(modifier = Modifier.height(IntrinsicSize.Min)) {
IconButton(onClick = onDismiss) {
Icon(
imageVector = Icons.Filled.Close,
painter = painterResource(id = R.drawable.ic_close),
contentDescription = stringResource(id = R.string.close),
)
}
Expand Down Expand Up @@ -280,14 +278,14 @@ fun FilterTitle(text: String) {
}

@Composable
fun SortOption(text: String, icon: ImageVector?, onClickOption: () -> Unit, selected: Boolean) {
fun SortOption(text: String, @DrawableRes icon: Int?, onClickOption: () -> Unit, selected: Boolean) {
Row(
modifier = Modifier
.padding(top = 14.dp)
.selectable(selected) { onClickOption() },
) {
if (icon != null) {
Icon(imageVector = icon, contentDescription = null)
Icon(painter = painterResource(id = icon), contentDescription = null)
}
Text(
text = text,
Expand All @@ -298,7 +296,7 @@ fun SortOption(text: String, icon: ImageVector?, onClickOption: () -> Unit, sele
)
if (selected) {
Icon(
imageVector = Icons.Filled.Done,
painter = painterResource(id = R.drawable.ic_check),
contentDescription = null,
tint = JetsnackTheme.colors.brand,
)
Expand Down
20 changes: 8 additions & 12 deletions Jetsnack/app/src/main/java/com/example/jetsnack/ui/home/Home.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.example.jetsnack.ui.home

import androidx.annotation.DrawableRes
import androidx.annotation.FloatRange
import androidx.annotation.StringRes
import androidx.compose.animation.AnimatedContentScope
Expand All @@ -39,11 +40,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.foundation.selection.selectable
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.AccountCircle
import androidx.compose.material.icons.outlined.Home
import androidx.compose.material.icons.outlined.Search
import androidx.compose.material.icons.outlined.ShoppingCart
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
Expand All @@ -58,13 +54,13 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.graphics.TransformOrigin
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.layout.Layout
import androidx.compose.ui.layout.MeasureResult
import androidx.compose.ui.layout.MeasureScope
import androidx.compose.ui.layout.Placeable
import androidx.compose.ui.layout.layoutId
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp
Expand Down Expand Up @@ -157,11 +153,11 @@ fun NavGraphBuilder.addHomeGraph(onSnackSelected: (Long, String, NavBackStackEnt
}
}

enum class HomeSections(@StringRes val title: Int, val icon: ImageVector, val route: String) {
FEED(R.string.home_feed, Icons.Outlined.Home, "home/feed"),
SEARCH(R.string.home_search, Icons.Outlined.Search, "home/search"),
CART(R.string.home_cart, Icons.Outlined.ShoppingCart, "home/cart"),
PROFILE(R.string.home_profile, Icons.Outlined.AccountCircle, "home/profile"),
enum class HomeSections(@StringRes val title: Int, @DrawableRes val icon: Int, val route: String) {
FEED(R.string.home_feed, R.drawable.ic_home, "home/feed"),
SEARCH(R.string.home_search, R.drawable.ic_search, "home/search"),
CART(R.string.home_cart, R.drawable.ic_shopping_cart, "home/cart"),
PROFILE(R.string.home_profile, R.drawable.ic_account_circle, "home/profile"),
}

@Composable
Expand Down Expand Up @@ -209,7 +205,7 @@ fun JetsnackBottomBar(
JetsnackBottomNavigationItem(
icon = {
Icon(
imageVector = section.icon,
painter = painterResource(id = section.icon),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

It would be useful to add a comment explaining why section.icon is being used as the id for painterResource. This would help future developers understand the relationship between the HomeSections enum and the drawable resources.

Suggested change
painter = painterResource(id = section.icon),
painter = painterResource(id = section.icon), // section.icon is the resource id of the drawable

tint = tint,
contentDescription = text,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,6 @@ import androidx.compose.foundation.layout.wrapContentWidth
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.Close
import androidx.compose.material.icons.filled.DeleteForever
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
Expand All @@ -60,6 +57,7 @@ import androidx.compose.ui.graphics.RectangleShape
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.layout.LastBaseline
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
Expand Down Expand Up @@ -259,7 +257,7 @@ private fun SwipeDismissItemBackground(progress: Float) {
)

Icon(
imageVector = Icons.Filled.DeleteForever,
painter = painterResource(id = R.drawable.ic_delete_forever),
modifier = Modifier
.size(32.dp)
.graphicsLayer(alpha = iconAlpha),
Expand Down Expand Up @@ -345,7 +343,7 @@ fun CartItem(
.padding(top = 12.dp),
) {
Icon(
imageVector = Icons.Filled.Close,
painter = painterResource(id = R.drawable.ic_close),
tint = JetsnackTheme.colors.iconSecondary,
contentDescription = stringResource(R.string.label_remove),
)
Expand Down
9 changes: 9 additions & 0 deletions Jetsnack/app/src/main/res/drawable/ic_account_circle.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M234,684Q285,645 348,622.5Q411,600 480,600Q549,600 612,622.5Q675,645 726,684Q761,643 780.5,591Q800,539 800,480Q800,347 706.5,253.5Q613,160 480,160Q347,160 253.5,253.5Q160,347 160,480Q160,539 179.5,591Q199,643 234,684ZM480,520Q421,520 380.5,479.5Q340,439 340,380Q340,321 380.5,280.5Q421,240 480,240Q539,240 579.5,280.5Q620,321 620,380Q620,439 579.5,479.5Q539,520 480,520ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q533,800 580,784.5Q627,769 666,740Q627,711 580,695.5Q533,680 480,680Q427,680 380,695.5Q333,711 294,740Q333,769 380,784.5Q427,800 480,800ZM480,440Q506,440 523,423Q540,406 540,380Q540,354 523,337Q506,320 480,320Q454,320 437,337Q420,354 420,380Q420,406 437,423Q454,440 480,440ZM480,380Q480,380 480,380Q480,380 480,380Q480,380 480,380Q480,380 480,380Q480,380 480,380Q480,380 480,380Q480,380 480,380Q480,380 480,380ZM480,740Q480,740 480,740Q480,740 480,740Q480,740 480,740Q480,740 480,740Q480,740 480,740Q480,740 480,740Q480,740 480,740Q480,740 480,740Z"/>
</vector>
9 changes: 9 additions & 0 deletions Jetsnack/app/src/main/res/drawable/ic_add.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M440,520L200,520L200,440L440,440L440,200L520,200L520,440L760,440L760,520L520,520L520,760L440,760L440,520Z"/>
</vector>
9 changes: 9 additions & 0 deletions Jetsnack/app/src/main/res/drawable/ic_android.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M40,720Q49,613 105.5,523Q162,433 256,380L182,252Q176,243 179,233Q182,223 192,218Q200,213 210,216Q220,219 226,228L300,356Q386,320 480,320Q574,320 660,356L734,228Q740,219 750,216Q760,213 768,218Q778,223 781,233Q784,243 778,252L704,380Q798,433 854.5,523Q911,613 920,720L40,720ZM280,610Q301,610 315.5,595.5Q330,581 330,560Q330,539 315.5,524.5Q301,510 280,510Q259,510 244.5,524.5Q230,539 230,560Q230,581 244.5,595.5Q259,610 280,610ZM680,610Q701,610 715.5,595.5Q730,581 730,560Q730,539 715.5,524.5Q701,510 680,510Q659,510 644.5,524.5Q630,539 630,560Q630,581 644.5,595.5Q659,610 680,610Z"/>
</vector>
9 changes: 9 additions & 0 deletions Jetsnack/app/src/main/res/drawable/ic_check.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M382,720L154,492L211,435L382,606L749,239L806,296L382,720Z"/>
</vector>
9 changes: 9 additions & 0 deletions Jetsnack/app/src/main/res/drawable/ic_close.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M256,760L200,704L424,480L200,256L256,200L480,424L704,200L760,256L536,480L760,704L704,760L480,536L256,760Z"/>
</vector>
9 changes: 9 additions & 0 deletions Jetsnack/app/src/main/res/drawable/ic_delete_forever.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M376,660L480,556L584,660L640,604L536,500L640,396L584,340L480,444L376,340L320,396L424,500L320,604L376,660ZM280,840Q247,840 223.5,816.5Q200,793 200,760L200,240L160,240L160,160L360,160L360,120L600,120L600,160L800,160L800,240L760,240L760,760Q760,793 736.5,816.5Q713,840 680,840L280,840Z"/>
</vector>
Loading