From 8e09ec66eaa2f89b17121e3ee0ed729fcb70a593 Mon Sep 17 00:00:00 2001 From: MohitMaliFtechiz Date: Wed, 12 Mar 2025 17:56:06 +0530 Subject: [PATCH] Added support for loading `ImageBitmap` in our `IconItem` class, allowing us to load any type of image wherever needed. * Created an extension function (`toPainter()``) to encapsulate the logic, preventing code duplication. Now, we can directly call this function, and it will load the image based on the provided type. --- .../core/ui/components/KiwixAppBar.kt | 9 ++------ .../core/ui/components/NavigationIcon.kt | 8 ++----- .../kiwixmobile/core/ui/models/IconItem.kt | 23 +++++++++++++++++++ 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/ui/components/KiwixAppBar.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/ui/components/KiwixAppBar.kt index 3df7a1c09..9ae25b5af 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/ui/components/KiwixAppBar.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/ui/components/KiwixAppBar.kt @@ -34,13 +34,11 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.platform.testTag -import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight.Companion.SemiBold import org.kiwix.kiwixmobile.core.ui.models.ActionMenuItem -import org.kiwix.kiwixmobile.core.ui.models.IconItem +import org.kiwix.kiwixmobile.core.ui.models.toPainter import org.kiwix.kiwixmobile.core.ui.theme.Black import org.kiwix.kiwixmobile.core.ui.theme.KiwixTheme import org.kiwix.kiwixmobile.core.ui.theme.MineShaftGray350 @@ -109,10 +107,7 @@ private fun ActionMenu(actionMenuItems: List) { modifier = Modifier.testTag(menuItem.testingTag) ) { Icon( - painter = when (val icon = menuItem.icon) { - is IconItem.Vector -> rememberVectorPainter(icon.imageVector) - is IconItem.Drawable -> painterResource(icon.drawableRes) - }, + painter = menuItem.icon.toPainter(), contentDescription = stringResource(menuItem.contentDescription), tint = if (menuItem.isEnabled) menuItem.iconTint else Color.Gray ) diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/ui/components/NavigationIcon.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/ui/components/NavigationIcon.kt index 6af4bc84f..c652ca8ed 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/ui/components/NavigationIcon.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/ui/components/NavigationIcon.kt @@ -25,11 +25,10 @@ import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.vector.rememberVectorPainter -import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import org.kiwix.kiwixmobile.core.R import org.kiwix.kiwixmobile.core.ui.models.IconItem +import org.kiwix.kiwixmobile.core.ui.models.toPainter import org.kiwix.kiwixmobile.core.ui.theme.White /** @@ -52,10 +51,7 @@ fun NavigationIcon( ) { IconButton(onClick = onClick) { Icon( - painter = when (val icon = iconItem) { - is IconItem.Vector -> rememberVectorPainter(icon.imageVector) - is IconItem.Drawable -> painterResource(icon.drawableRes) - }, + painter = iconItem.toPainter(), contentDescription = stringResource(contentDescription), tint = iconTint ) diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/ui/models/IconItem.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/ui/models/IconItem.kt index cdc2078e8..32418f7c7 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/ui/models/IconItem.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/ui/models/IconItem.kt @@ -19,11 +19,34 @@ package org.kiwix.kiwixmobile.core.ui.models import androidx.annotation.DrawableRes +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.painter.BitmapPainter +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.material3.Icon import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.rememberVectorPainter +import androidx.compose.ui.res.painterResource sealed class IconItem { data class Vector(val imageVector: ImageVector) : IconItem() data class Drawable( @DrawableRes val drawableRes: Int ) : IconItem() + + data class Bitmap(val bitmap: ImageBitmap) : IconItem() +} + +/** + * Extension function to convert an [IconItem] into a [Painter] for use in Composables. + * This ensures that any type of icon can be easily used with the [Icon] Composable. + */ +@Composable +fun IconItem.toPainter(): Painter { + return when (this) { + is IconItem.Vector -> rememberVectorPainter(imageVector) + is IconItem.Drawable -> painterResource(drawableRes) + is IconItem.Bitmap -> remember { BitmapPainter(bitmap) } + } }