Skip to content

Commit 479a2f0

Browse files
committed
Refactor icons
1 parent 1345764 commit 479a2f0

File tree

13 files changed

+62
-347
lines changed

13 files changed

+62
-347
lines changed

app-nia-catalog/src/main/java/com/google/samples/apps/niacatalog/ui/Catalog.kt

Lines changed: 19 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ import androidx.compose.runtime.mutableStateOf
3636
import androidx.compose.runtime.remember
3737
import androidx.compose.runtime.setValue
3838
import androidx.compose.ui.Modifier
39-
import androidx.compose.ui.res.painterResource
4039
import androidx.compose.ui.unit.dp
4140
import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaButton
4241
import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaFilterChip
@@ -206,13 +205,13 @@ fun NiaCatalog() {
206205
onCheckedChange = { checked -> firstChecked = checked },
207206
icon = {
208207
Icon(
209-
painter = painterResource(id = NiaIcons.BookmarkBorder),
208+
imageVector = NiaIcons.BookmarkBorder,
210209
contentDescription = null,
211210
)
212211
},
213212
checkedIcon = {
214213
Icon(
215-
painter = painterResource(id = NiaIcons.Bookmark),
214+
imageVector = NiaIcons.Bookmark,
216215
contentDescription = null,
217216
)
218217
},
@@ -223,13 +222,13 @@ fun NiaCatalog() {
223222
onCheckedChange = { checked -> secondChecked = checked },
224223
icon = {
225224
Icon(
226-
painter = painterResource(id = NiaIcons.BookmarkBorder),
225+
imageVector = NiaIcons.BookmarkBorder,
227226
contentDescription = null,
228227
)
229228
},
230229
checkedIcon = {
231230
Icon(
232-
painter = painterResource(id = NiaIcons.Bookmark),
231+
imageVector = NiaIcons.Bookmark,
233232
contentDescription = null,
234233
)
235234
},
@@ -239,13 +238,13 @@ fun NiaCatalog() {
239238
onCheckedChange = {},
240239
icon = {
241240
Icon(
242-
painter = painterResource(id = NiaIcons.BookmarkBorder),
241+
imageVector = NiaIcons.BookmarkBorder,
243242
contentDescription = null,
244243
)
245244
},
246245
checkedIcon = {
247246
Icon(
248-
painter = painterResource(id = NiaIcons.Bookmark),
247+
imageVector = NiaIcons.Bookmark,
249248
contentDescription = null,
250249
)
251250
},
@@ -256,13 +255,13 @@ fun NiaCatalog() {
256255
onCheckedChange = {},
257256
icon = {
258257
Icon(
259-
painter = painterResource(id = NiaIcons.BookmarkBorder),
258+
imageVector = NiaIcons.BookmarkBorder,
260259
contentDescription = null,
261260
)
262261
},
263262
checkedIcon = {
264263
Icon(
265-
painter = painterResource(id = NiaIcons.Bookmark),
264+
imageVector = NiaIcons.Bookmark,
266265
contentDescription = null,
267266
)
268267
},
@@ -334,40 +333,31 @@ fun NiaCatalog() {
334333
item { Text("Navigation", Modifier.padding(top = 16.dp)) }
335334
item {
336335
var selectedItem by remember { mutableStateOf(0) }
337-
val items = listOf("For you", "Episodes", "Saved", "Interests")
336+
val items = listOf("For you", "Saved", "Interests")
338337
val icons = listOf(
339338
NiaIcons.UpcomingBorder,
340-
NiaIcons.MenuBookBorder,
341339
NiaIcons.BookmarksBorder,
340+
NiaIcons.Grid3x3,
342341
)
343342
val selectedIcons = listOf(
344343
NiaIcons.Upcoming,
345-
NiaIcons.MenuBook,
346344
NiaIcons.Bookmarks,
345+
NiaIcons.Grid3x3,
347346
)
348-
val tagIcon = NiaIcons.Tag
349347
NiaNavigationBar {
350348
items.forEachIndexed { index, item ->
351349
NiaNavigationBarItem(
352350
icon = {
353-
if (index == 3) {
354-
Icon(imageVector = tagIcon, contentDescription = null)
355-
} else {
356-
Icon(
357-
painter = painterResource(id = icons[index]),
358-
contentDescription = item,
359-
)
360-
}
351+
Icon(
352+
imageVector = icons[index],
353+
contentDescription = item,
354+
)
361355
},
362356
selectedIcon = {
363-
if (index == 3) {
364-
Icon(imageVector = tagIcon, contentDescription = null)
365-
} else {
366-
Icon(
367-
painter = painterResource(id = selectedIcons[index]),
368-
contentDescription = item,
369-
)
370-
}
357+
Icon(
358+
imageVector = selectedIcons[index],
359+
contentDescription = item,
360+
)
371361
},
372362
label = { Text(item) },
373363
selected = selectedItem == index,

app/src/main/java/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,8 @@
1616

1717
package com.google.samples.apps.nowinandroid.navigation
1818

19+
import androidx.compose.ui.graphics.vector.ImageVector
1920
import com.google.samples.apps.nowinandroid.R
20-
import com.google.samples.apps.nowinandroid.core.designsystem.icon.Icon
21-
import com.google.samples.apps.nowinandroid.core.designsystem.icon.Icon.DrawableResourceIcon
22-
import com.google.samples.apps.nowinandroid.core.designsystem.icon.Icon.ImageVectorIcon
2321
import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons
2422
import com.google.samples.apps.nowinandroid.feature.bookmarks.R as bookmarksR
2523
import com.google.samples.apps.nowinandroid.feature.foryou.R as forYouR
@@ -31,26 +29,26 @@ import com.google.samples.apps.nowinandroid.feature.interests.R as interestsR
3129
* next within a single destination will be handled directly in composables.
3230
*/
3331
enum class TopLevelDestination(
34-
val selectedIcon: Icon,
35-
val unselectedIcon: Icon,
32+
val selectedIcon: ImageVector,
33+
val unselectedIcon: ImageVector,
3634
val iconTextId: Int,
3735
val titleTextId: Int,
3836
) {
3937
FOR_YOU(
40-
selectedIcon = DrawableResourceIcon(NiaIcons.Upcoming),
41-
unselectedIcon = DrawableResourceIcon(NiaIcons.UpcomingBorder),
38+
selectedIcon = NiaIcons.Upcoming,
39+
unselectedIcon = NiaIcons.UpcomingBorder,
4240
iconTextId = forYouR.string.for_you,
4341
titleTextId = R.string.app_name,
4442
),
4543
BOOKMARKS(
46-
selectedIcon = DrawableResourceIcon(NiaIcons.Bookmarks),
47-
unselectedIcon = DrawableResourceIcon(NiaIcons.BookmarksBorder),
44+
selectedIcon = NiaIcons.Bookmarks,
45+
unselectedIcon = NiaIcons.BookmarksBorder,
4846
iconTextId = bookmarksR.string.saved,
4947
titleTextId = bookmarksR.string.saved,
5048
),
5149
INTERESTS(
52-
selectedIcon = ImageVectorIcon(NiaIcons.Grid3x3),
53-
unselectedIcon = ImageVectorIcon(NiaIcons.Grid3x3),
50+
selectedIcon = NiaIcons.Grid3x3,
51+
unselectedIcon = NiaIcons.Grid3x3,
5452
iconTextId = interestsR.string.interests,
5553
titleTextId = interestsR.string.interests,
5654
),

app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaApp.kt

Lines changed: 20 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ import androidx.compose.ui.draw.drawWithContent
5252
import androidx.compose.ui.geometry.Offset
5353
import androidx.compose.ui.graphics.Color
5454
import androidx.compose.ui.platform.testTag
55-
import androidx.compose.ui.res.painterResource
5655
import androidx.compose.ui.res.stringResource
5756
import androidx.compose.ui.semantics.semantics
5857
import androidx.compose.ui.semantics.testTagsAsResourceId
@@ -70,8 +69,6 @@ import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaNavig
7069
import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaNavigationRail
7170
import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaNavigationRailItem
7271
import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTopAppBar
73-
import com.google.samples.apps.nowinandroid.core.designsystem.icon.Icon.DrawableResourceIcon
74-
import com.google.samples.apps.nowinandroid.core.designsystem.icon.Icon.ImageVectorIcon
7572
import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons
7673
import com.google.samples.apps.nowinandroid.core.designsystem.theme.GradientColors
7774
import com.google.samples.apps.nowinandroid.core.designsystem.theme.LocalGradientColors
@@ -225,22 +222,16 @@ private fun NiaNavRail(
225222
selected = selected,
226223
onClick = { onNavigateToDestination(destination) },
227224
icon = {
228-
val icon = if (selected) {
229-
destination.selectedIcon
230-
} else {
231-
destination.unselectedIcon
232-
}
233-
when (icon) {
234-
is ImageVectorIcon -> Icon(
235-
imageVector = icon.imageVector,
236-
contentDescription = null,
237-
)
238-
239-
is DrawableResourceIcon -> Icon(
240-
painter = painterResource(id = icon.id),
241-
contentDescription = null,
242-
)
243-
}
225+
Icon(
226+
imageVector = destination.unselectedIcon,
227+
contentDescription = null,
228+
)
229+
},
230+
selectedIcon = {
231+
Icon(
232+
imageVector = destination.selectedIcon,
233+
contentDescription = null,
234+
)
244235
},
245236
label = { Text(stringResource(destination.iconTextId)) },
246237
modifier = if (hasUnread) Modifier.notificationDot() else Modifier,
@@ -267,22 +258,16 @@ private fun NiaBottomBar(
267258
selected = selected,
268259
onClick = { onNavigateToDestination(destination) },
269260
icon = {
270-
val icon = if (selected) {
271-
destination.selectedIcon
272-
} else {
273-
destination.unselectedIcon
274-
}
275-
when (icon) {
276-
is ImageVectorIcon -> Icon(
277-
imageVector = icon.imageVector,
278-
contentDescription = null,
279-
)
280-
281-
is DrawableResourceIcon -> Icon(
282-
painter = painterResource(id = icon.id),
283-
contentDescription = null,
284-
)
285-
}
261+
Icon(
262+
imageVector = destination.unselectedIcon,
263+
contentDescription = null,
264+
)
265+
},
266+
selectedIcon = {
267+
Icon(
268+
imageVector = destination.selectedIcon,
269+
contentDescription = null,
270+
)
286271
},
287272
label = { Text(stringResource(destination.iconTextId)) },
288273
modifier = if (hasUnread) Modifier.notificationDot() else Modifier,

core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/icon/NiaIcons.kt

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,57 +16,45 @@
1616

1717
package com.google.samples.apps.nowinandroid.core.designsystem.icon
1818

19-
import androidx.annotation.DrawableRes
2019
import androidx.compose.material.icons.Icons
2120
import androidx.compose.material.icons.filled.MoreVert
21+
import androidx.compose.material.icons.outlined.Bookmarks
22+
import androidx.compose.material.icons.outlined.Upcoming
2223
import androidx.compose.material.icons.rounded.Add
2324
import androidx.compose.material.icons.rounded.ArrowBack
25+
import androidx.compose.material.icons.rounded.Bookmark
26+
import androidx.compose.material.icons.rounded.BookmarkBorder
27+
import androidx.compose.material.icons.rounded.Bookmarks
2428
import androidx.compose.material.icons.rounded.Check
2529
import androidx.compose.material.icons.rounded.Close
2630
import androidx.compose.material.icons.rounded.Grid3x3
2731
import androidx.compose.material.icons.rounded.Person
2832
import androidx.compose.material.icons.rounded.Search
2933
import androidx.compose.material.icons.rounded.Settings
3034
import androidx.compose.material.icons.rounded.ShortText
31-
import androidx.compose.material.icons.rounded.Tag
35+
import androidx.compose.material.icons.rounded.Upcoming
3236
import androidx.compose.material.icons.rounded.ViewDay
33-
import androidx.compose.material.icons.rounded.VolumeOff
34-
import androidx.compose.material.icons.rounded.VolumeUp
3537
import androidx.compose.ui.graphics.vector.ImageVector
36-
import com.google.samples.apps.nowinandroid.core.designsystem.R
3738

3839
/**
3940
* Now in Android icons. Material icons are [ImageVector]s, custom icons are drawable resource IDs.
4041
*/
4142
object NiaIcons {
4243
val Add = Icons.Rounded.Add
4344
val ArrowBack = Icons.Rounded.ArrowBack
44-
val Bookmark = R.drawable.ic_bookmark
45-
val BookmarkBorder = R.drawable.ic_bookmark_border
46-
val Bookmarks = R.drawable.ic_bookmarks
47-
val BookmarksBorder = R.drawable.ic_bookmarks_border
45+
val Bookmark = Icons.Rounded.Bookmark
46+
val BookmarkBorder = Icons.Rounded.BookmarkBorder
47+
val Bookmarks = Icons.Rounded.Bookmarks
48+
val BookmarksBorder = Icons.Outlined.Bookmarks
4849
val Check = Icons.Rounded.Check
4950
val Close = Icons.Rounded.Close
5051
val Grid3x3 = Icons.Rounded.Grid3x3
51-
val MenuBook = R.drawable.ic_menu_book
52-
val MenuBookBorder = R.drawable.ic_menu_book_border
5352
val MoreVert = Icons.Default.MoreVert
5453
val Person = Icons.Rounded.Person
5554
val Search = Icons.Rounded.Search
5655
val Settings = Icons.Rounded.Settings
5756
val ShortText = Icons.Rounded.ShortText
58-
val Tag = Icons.Rounded.Tag
59-
val Upcoming = R.drawable.ic_upcoming
60-
val UpcomingBorder = R.drawable.ic_upcoming_border
57+
val Upcoming = Icons.Rounded.Upcoming
58+
val UpcomingBorder = Icons.Outlined.Upcoming
6159
val ViewDay = Icons.Rounded.ViewDay
62-
val VolumeOff = Icons.Rounded.VolumeOff
63-
val VolumeUp = Icons.Rounded.VolumeUp
64-
}
65-
66-
/**
67-
* A sealed class to make dealing with [ImageVector] and [DrawableRes] icons easier.
68-
*/
69-
sealed class Icon {
70-
data class ImageVectorIcon(val imageVector: ImageVector) : Icon()
71-
data class DrawableResourceIcon(@DrawableRes val id: Int) : Icon()
7260
}

core/designsystem/src/main/res/drawable/ic_bookmark.xml

Lines changed: 0 additions & 25 deletions
This file was deleted.

core/designsystem/src/main/res/drawable/ic_bookmark_border.xml

Lines changed: 0 additions & 25 deletions
This file was deleted.

0 commit comments

Comments
 (0)