diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/AppItem.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/AppItem.kt index 95cfe5c41d..7ff4c7e805 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/AppItem.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/AppItem.kt @@ -28,9 +28,13 @@ import androidx.compose.foundation.layout.width import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.asImageBitmap +import androidx.compose.ui.graphics.painter.BitmapPainter +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import app.lawnchair.ui.placeholder.PlaceholderHighlight import app.lawnchair.ui.placeholder.fade @@ -38,6 +42,7 @@ import app.lawnchair.ui.placeholder.placeholder import app.lawnchair.ui.preferences.components.layout.PreferenceTemplate import app.lawnchair.util.App import com.android.launcher3.model.data.AppInfo +import com.google.accompanist.drawablepainter.rememberDrawablePainter @Composable fun AppItem( @@ -47,6 +52,25 @@ fun AppItem( modifier: Modifier = Modifier, widget: (@Composable () -> Unit)? = null, endWidget: (@Composable () -> Unit)? = null, +) { + AppItem( + label = label, + icon = remember(icon) { BitmapPainter(icon.asImageBitmap()) }, + onClick = onClick, + modifier = modifier, + widget = widget, + endWidget = endWidget, + ) +} + +@Composable +fun AppItem( + label: String, + icon: Painter, + onClick: () -> Unit, + modifier: Modifier = Modifier, + widget: (@Composable () -> Unit)? = null, + endWidget: (@Composable () -> Unit)? = null, ) { AppItemLayout( modifier = modifier @@ -55,7 +79,7 @@ fun AppItem( endWidget = endWidget, icon = { Image( - bitmap = icon.asImageBitmap(), + painter = icon, contentDescription = null, modifier = Modifier.size(30.dp), ) @@ -73,7 +97,7 @@ fun AppItem( ) { AppItem( label = app.label, - icon = app.icon, + icon = rememberDrawablePainter(app.icon), onClick = { onClick(app) }, widget = widget, endWidget = endWidget, @@ -87,9 +111,10 @@ fun AppItem( widget: (@Composable () -> Unit)? = null, endWidget: (@Composable () -> Unit)? = null, ) { + val context = LocalContext.current AppItem( label = appInfo.title.toString(), - icon = appInfo.bitmap.icon, + icon = rememberDrawablePainter(remember(appInfo) { appInfo.bitmap.newIcon(context) }), onClick = { onClick(appInfo) }, widget = widget, endWidget = endWidget, diff --git a/lawnchair/src/app/lawnchair/util/AppsList.kt b/lawnchair/src/app/lawnchair/util/AppsList.kt index 1cad4e6c92..9b4a5d056c 100644 --- a/lawnchair/src/app/lawnchair/util/AppsList.kt +++ b/lawnchair/src/app/lawnchair/util/AppsList.kt @@ -19,7 +19,7 @@ package app.lawnchair.util import android.content.Context import android.content.pm.LauncherActivityInfo import android.content.pm.LauncherApps -import android.graphics.Bitmap +import android.graphics.drawable.Drawable import android.os.Handler import android.util.Log import androidx.compose.runtime.Composable @@ -76,13 +76,14 @@ fun appsState( class App(context: Context, private val info: LauncherActivityInfo) { val label get() = info.label.toString() - val icon: Bitmap + val icon: Drawable val key = ComponentKey(info.componentName, info.user) init { val appInfo = AppInfo(context, info, info.user) LauncherAppState.getInstance(context).iconCache.getTitleAndIcon(appInfo, DEFAULT_LOOKUP_FLAG) - icon = appInfo.bitmap.icon + // bitmap.icon is the bare icon; newIcon() adds the work/clone/private badge from bitmap.flags. + icon = appInfo.bitmap.newIcon(context) } fun toAppInfo(context: Context): AppInfo {