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.
This commit is contained in:
MohitMaliFtechiz 2025-03-12 17:56:06 +05:30
parent 817ec20ad9
commit 8e09ec66ea
3 changed files with 27 additions and 13 deletions

View File

@ -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<ActionMenuItem>) {
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
)

View File

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

View File

@ -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) }
}
}