diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/WidgetItem.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/WidgetItem.kt index cb19f287b..8a9e6cfe1 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/WidgetItem.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/WidgetItem.kt @@ -65,10 +65,6 @@ fun WidgetItem( var isDragged by remember { mutableStateOf(false) } val elevation by animateDpAsState(if (isDragged) 8.dp else 0.dp) - val appWidget = if (widget is AppWidget) remember(widget.config.widgetId) { - AppWidgetManager.getInstance(context).getAppWidgetInfo(widget.config.widgetId) - } else null - val backgroundOpacity by animateFloatAsState( if (widget is AppWidget && !widget.config.background && !editMode) 0f else MaterialTheme.transparency.surface, label = "widgetCardBackgroundOpacity", @@ -102,19 +98,7 @@ fun WidgetItem( ) ) Text( - text = when (widget) { - is WeatherWidget -> stringResource(R.string.widget_name_weather) - is MusicWidget -> stringResource(R.string.widget_name_music) - is CalendarWidget -> stringResource(R.string.widget_name_calendar) - is AppsWidget -> stringResource(R.string.widget_name_apps) - is NotesWidget -> stringResource(R.string.widget_name_notes) - is AppWidget -> remember(widget.config.widgetId) { - appWidget?.loadLabel( - context.packageManager - ) - } - ?: stringResource(R.string.widget_name_unknown) - }, + text = widget.getLabel(LocalContext.current), style = MaterialTheme.typography.titleMedium, modifier = Modifier .weight(1f) diff --git a/data/widgets/src/main/java/de/mm20/launcher2/widgets/AppWidget.kt b/data/widgets/src/main/java/de/mm20/launcher2/widgets/AppWidget.kt index 25e735f4e..d60d5a6f6 100644 --- a/data/widgets/src/main/java/de/mm20/launcher2/widgets/AppWidget.kt +++ b/data/widgets/src/main/java/de/mm20/launcher2/widgets/AppWidget.kt @@ -2,8 +2,10 @@ package de.mm20.launcher2.widgets import android.app.Activity import android.appwidget.AppWidgetHost +import android.appwidget.AppWidgetManager import android.appwidget.AppWidgetProviderInfo import android.content.Context +import android.content.pm.PackageManager import android.os.Build import de.mm20.launcher2.database.entities.PartialWidgetEntity import kotlinx.serialization.Serializable @@ -34,6 +36,23 @@ data class AppWidget( ) } + private var label: String? = null + + override fun getLabel(context: Context): String { + if (label != null) return label!! + val widgetInfo = AppWidgetManager.getInstance(context).getAppWidgetInfo(config.widgetId) + if (widgetInfo == null) { + label = "" + return label!! + } + try { + label = widgetInfo.loadLabel(context.packageManager) + } catch (e: PackageManager.NameNotFoundException) { + label = "" + } + return label!! + } + companion object { const val Type = "app" } diff --git a/data/widgets/src/main/java/de/mm20/launcher2/widgets/AppsWidget.kt b/data/widgets/src/main/java/de/mm20/launcher2/widgets/AppsWidget.kt index 406eb2bfe..fb95790a6 100644 --- a/data/widgets/src/main/java/de/mm20/launcher2/widgets/AppsWidget.kt +++ b/data/widgets/src/main/java/de/mm20/launcher2/widgets/AppsWidget.kt @@ -1,5 +1,6 @@ package de.mm20.launcher2.widgets +import android.content.Context import de.mm20.launcher2.database.entities.PartialWidgetEntity import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json @@ -27,6 +28,10 @@ data class AppsWidget( ) } + override fun getLabel(context: Context): String { + return context.getString(R.string.widget_name_apps) + } + companion object { const val Type = "favorites" } diff --git a/data/widgets/src/main/java/de/mm20/launcher2/widgets/CalendarWidget.kt b/data/widgets/src/main/java/de/mm20/launcher2/widgets/CalendarWidget.kt index 31951ba0d..a97e78b89 100644 --- a/data/widgets/src/main/java/de/mm20/launcher2/widgets/CalendarWidget.kt +++ b/data/widgets/src/main/java/de/mm20/launcher2/widgets/CalendarWidget.kt @@ -1,5 +1,6 @@ package de.mm20.launcher2.widgets +import android.content.Context import de.mm20.launcher2.database.entities.PartialWidgetEntity import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @@ -31,6 +32,10 @@ data class CalendarWidget( ) } + override fun getLabel(context: Context): String { + return context.getString(R.string.widget_name_calendar) + } + companion object { const val Type = "calendar" } diff --git a/data/widgets/src/main/java/de/mm20/launcher2/widgets/MusicWidget.kt b/data/widgets/src/main/java/de/mm20/launcher2/widgets/MusicWidget.kt index fb3515c82..68296eb8f 100644 --- a/data/widgets/src/main/java/de/mm20/launcher2/widgets/MusicWidget.kt +++ b/data/widgets/src/main/java/de/mm20/launcher2/widgets/MusicWidget.kt @@ -1,5 +1,6 @@ package de.mm20.launcher2.widgets +import android.content.Context import de.mm20.launcher2.database.entities.PartialWidgetEntity import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json @@ -22,6 +23,10 @@ data class MusicWidget( ) } + override fun getLabel(context: Context): String { + return context.getString(R.string.widget_name_music) + } + companion object { const val Type = "music" } diff --git a/data/widgets/src/main/java/de/mm20/launcher2/widgets/NotesWidget.kt b/data/widgets/src/main/java/de/mm20/launcher2/widgets/NotesWidget.kt index 4add76598..f4aed185c 100644 --- a/data/widgets/src/main/java/de/mm20/launcher2/widgets/NotesWidget.kt +++ b/data/widgets/src/main/java/de/mm20/launcher2/widgets/NotesWidget.kt @@ -1,5 +1,6 @@ package de.mm20.launcher2.widgets +import android.content.Context import de.mm20.launcher2.database.entities.PartialWidgetEntity import kotlinx.serialization.Serializable import kotlinx.serialization.encodeToString @@ -33,6 +34,10 @@ data class NotesWidget( ) } + override fun getLabel(context: Context): String { + return context.getString(R.string.widget_name_notes) + } + companion object { const val Type = "notes" } diff --git a/data/widgets/src/main/java/de/mm20/launcher2/widgets/WeatherWidget.kt b/data/widgets/src/main/java/de/mm20/launcher2/widgets/WeatherWidget.kt index 84f6d857d..05bd8eef6 100644 --- a/data/widgets/src/main/java/de/mm20/launcher2/widgets/WeatherWidget.kt +++ b/data/widgets/src/main/java/de/mm20/launcher2/widgets/WeatherWidget.kt @@ -1,14 +1,8 @@ package de.mm20.launcher2.widgets -import android.app.Activity -import android.appwidget.AppWidgetHost -import android.content.ComponentName import android.content.Context -import android.content.Intent import de.mm20.launcher2.database.entities.PartialWidgetEntity -import de.mm20.launcher2.ktx.tryStartActivity import kotlinx.serialization.Serializable -import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import java.util.UUID @@ -31,6 +25,10 @@ data class WeatherWidget( ) } + override fun getLabel(context: Context): String { + return context.getString(R.string.widget_name_weather) + } + companion object { const val Type = "weather" } diff --git a/data/widgets/src/main/java/de/mm20/launcher2/widgets/Widget.kt b/data/widgets/src/main/java/de/mm20/launcher2/widgets/Widget.kt index 4c407b3f8..0ad092878 100644 --- a/data/widgets/src/main/java/de/mm20/launcher2/widgets/Widget.kt +++ b/data/widgets/src/main/java/de/mm20/launcher2/widgets/Widget.kt @@ -1,5 +1,6 @@ package de.mm20.launcher2.widgets +import android.content.Context import de.mm20.launcher2.database.entities.PartialWidgetEntity import de.mm20.launcher2.database.entities.WidgetEntity import de.mm20.launcher2.ktx.decodeFromStringOrNull @@ -21,6 +22,8 @@ sealed class Widget { } } + abstract fun getLabel(context: Context): String + abstract fun toDatabaseEntity(): PartialWidgetEntity companion object {