Rename favorites widget

This commit is contained in:
MM20
2025-12-23 17:55:21 +01:00
parent 8bff6bd24b
commit c09a5aa425
11 changed files with 49 additions and 50 deletions

View File

@@ -13,17 +13,15 @@ import de.mm20.launcher2.ktx.isAtLeastApiLevel
import de.mm20.launcher2.preferences.IconShape
import de.mm20.launcher2.preferences.MeasurementSystem
import de.mm20.launcher2.preferences.TimeFormat
import de.mm20.launcher2.preferences.ui.CardStyle
import de.mm20.launcher2.preferences.ui.GridSettings
import de.mm20.launcher2.preferences.ui.LocaleSettings
import de.mm20.launcher2.preferences.ui.UiSettings
import de.mm20.launcher2.ui.component.ProvideIconShape
import de.mm20.launcher2.ui.locals.LocalCardStyle
import de.mm20.launcher2.ui.locals.LocalFavoritesEnabled
import de.mm20.launcher2.ui.locals.LocalGridSettings
import de.mm20.launcher2.ui.locals.LocalMeasurementSystem
import de.mm20.launcher2.ui.locals.LocalTimeFormat
import de.mm20.launcher2.widgets.FavoritesWidget
import de.mm20.launcher2.widgets.AppsWidget
import de.mm20.launcher2.widgets.WidgetRepository
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
@@ -46,7 +44,7 @@ fun ProvideSettings(
val favoritesEnabled by remember {
combine(
widgetRepository.exists(FavoritesWidget.Type),
widgetRepository.exists(AppsWidget.Type),
settings.favoritesEnabled,
) { a, b -> a || b }.distinctUntilChanged()
}.collectAsState(true)

View File

@@ -114,7 +114,7 @@ import de.mm20.launcher2.ui.locals.LocalPreferDarkContentOverWallpaper
import de.mm20.launcher2.ui.settings.SettingsActivity
import de.mm20.launcher2.widgets.AppWidget
import de.mm20.launcher2.widgets.CalendarWidget
import de.mm20.launcher2.widgets.FavoritesWidget
import de.mm20.launcher2.widgets.AppsWidget
import de.mm20.launcher2.widgets.MusicWidget
import de.mm20.launcher2.widgets.NotesWidget
import de.mm20.launcher2.widgets.WeatherWidget
@@ -148,7 +148,7 @@ fun ConfigureWidgetSheet(
is WeatherWidget -> ConfigureWeatherWidget(widget, onWidgetUpdated)
is AppWidget -> ConfigureAppWidget(widget, onWidgetUpdated)
is CalendarWidget -> ConfigureCalendarWidget(widget, onWidgetUpdated)
is FavoritesWidget -> ConfigureFavoritesWidget(widget, onWidgetUpdated)
is AppsWidget -> ConfigureFavoritesWidget(widget, onWidgetUpdated)
is MusicWidget -> ConfigureMusicWidget(widget, onWidgetUpdated)
is NotesWidget -> ConfigureNotesWidget(widget, onWidgetUpdated)
}
@@ -212,8 +212,8 @@ fun ColumnScope.ConfigureWeatherWidget(
@Composable
fun ColumnScope.ConfigureFavoritesWidget(
widget: FavoritesWidget,
onWidgetUpdated: (FavoritesWidget) -> Unit,
widget: AppsWidget,
onWidgetUpdated: (AppsWidget) -> Unit,
) {
val customAttrRepository = koinInject<CustomAttributesRepository>()
@@ -662,7 +662,7 @@ fun ColumnScope.ConfigureAppWidget(
is WeatherWidget -> it.copy(id = widget.id)
is MusicWidget -> it.copy(id = widget.id)
is CalendarWidget -> it.copy(id = widget.id)
is FavoritesWidget -> it.copy(id = widget.id)
is AppsWidget -> it.copy(id = widget.id)
is NotesWidget -> it.copy(id = widget.id)
}
onWidgetUpdated(updatedWidget)

View File

@@ -58,7 +58,7 @@ import de.mm20.launcher2.ui.component.BottomSheetDialog
import de.mm20.launcher2.widgets.AppWidget
import de.mm20.launcher2.widgets.AppWidgetConfig
import de.mm20.launcher2.widgets.CalendarWidget
import de.mm20.launcher2.widgets.FavoritesWidget
import de.mm20.launcher2.widgets.AppsWidget
import de.mm20.launcher2.widgets.MusicWidget
import de.mm20.launcher2.widgets.NotesWidget
import de.mm20.launcher2.widgets.WeatherWidget
@@ -177,6 +177,7 @@ class BindAndConfigureAppWidgetActivity : Activity() {
cancel()
}
}
else -> {
Log.w("MM20", "Unknown request code $requestCode")
cancel()
@@ -186,7 +187,10 @@ class BindAndConfigureAppWidgetActivity : Activity() {
private fun finishWithResult(widgetId: Int) {
val data = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId)
data.putExtra(ExtraAppWidgetProviderInfo, intent.getParcelableExtra<AppWidgetProviderInfo>(ExtraAppWidgetProviderInfo))
data.putExtra(
ExtraAppWidgetProviderInfo,
intent.getParcelableExtra<AppWidgetProviderInfo>(ExtraAppWidgetProviderInfo)
)
setResult(RESULT_OK, data)
appWidgetId = null
finish()
@@ -230,7 +234,10 @@ private class BindAndConfigureAppWidgetContract(
),
)
} else {
Log.e("MM20", "Could not parse widget result: widgetId=$widgetId, widgetProviderInfo=$widgetProviderInfo")
Log.e(
"MM20",
"Could not parse widget result: widgetId=$widgetId, widgetProviderInfo=$widgetProviderInfo"
)
}
} else {
Log.e("MM20", "Widget result was not OK")
@@ -322,7 +329,7 @@ fun WidgetPickerSheet(
WeatherWidget.Type -> WeatherWidget(id)
CalendarWidget.Type -> CalendarWidget(id)
MusicWidget.Type -> MusicWidget(id)
FavoritesWidget.Type -> FavoritesWidget(id)
AppsWidget.Type -> AppsWidget(id)
NotesWidget.Type -> NotesWidget(id)
else -> return@OutlinedCard
}
@@ -340,10 +347,11 @@ fun WidgetPickerSheet(
WeatherWidget.Type -> R.drawable.light_mode_24px
CalendarWidget.Type -> R.drawable.today_24px
MusicWidget.Type -> R.drawable.music_note_24px
FavoritesWidget.Type -> R.drawable.star_24px
AppsWidget.Type -> R.drawable.apps_24px
NotesWidget.Type -> R.drawable.sticky_note_2_24px
else -> R.drawable.widgets_24px
}),
}
),
contentDescription = null,
modifier = Modifier.padding(end = 16.dp)
)

View File

@@ -34,14 +34,14 @@ import de.mm20.launcher2.ui.component.LauncherCard
import de.mm20.launcher2.ui.launcher.sheets.ConfigureWidgetSheet
import de.mm20.launcher2.ui.launcher.widgets.calendar.CalendarWidget
import de.mm20.launcher2.ui.launcher.widgets.external.AppWidget
import de.mm20.launcher2.ui.launcher.widgets.favorites.FavoritesWidget
import de.mm20.launcher2.ui.launcher.widgets.favorites.AppsWidget
import de.mm20.launcher2.ui.launcher.widgets.music.MusicWidget
import de.mm20.launcher2.ui.launcher.widgets.notes.NotesWidget
import de.mm20.launcher2.ui.launcher.widgets.weather.WeatherWidget
import de.mm20.launcher2.ui.theme.transparency.transparency
import de.mm20.launcher2.widgets.AppWidget
import de.mm20.launcher2.widgets.CalendarWidget
import de.mm20.launcher2.widgets.FavoritesWidget
import de.mm20.launcher2.widgets.AppsWidget
import de.mm20.launcher2.widgets.MusicWidget
import de.mm20.launcher2.widgets.NotesWidget
import de.mm20.launcher2.widgets.WeatherWidget
@@ -106,7 +106,7 @@ fun WidgetItem(
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 FavoritesWidget -> stringResource(R.string.widget_name_favorites)
is AppsWidget -> stringResource(R.string.widget_name_apps)
is NotesWidget -> stringResource(R.string.widget_name_notes)
is AppWidget -> remember(widget.config.widgetId) {
appWidget?.loadLabel(
@@ -152,8 +152,8 @@ fun WidgetItem(
CalendarWidget(widget)
}
is FavoritesWidget -> {
FavoritesWidget(widget)
is AppsWidget -> {
AppsWidget(widget)
}
is NotesWidget -> {

View File

@@ -1,6 +1,5 @@
package de.mm20.launcher2.ui.launcher.widgets.external
import android.appwidget.AppWidgetHost
import android.appwidget.AppWidgetManager
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth
@@ -21,21 +20,18 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.isUnspecified
import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.component.Banner
import de.mm20.launcher2.ui.ktx.toPixels
import de.mm20.launcher2.ui.launcher.sheets.WidgetPickerSheet
import de.mm20.launcher2.ui.locals.LocalDarkTheme
import de.mm20.launcher2.ui.locals.LocalPreferDarkContentOverWallpaper
import de.mm20.launcher2.widgets.AppWidget
import de.mm20.launcher2.widgets.CalendarWidget
import de.mm20.launcher2.widgets.FavoritesWidget
import de.mm20.launcher2.widgets.AppsWidget
import de.mm20.launcher2.widgets.MusicWidget
import de.mm20.launcher2.widgets.NotesWidget
import de.mm20.launcher2.widgets.WeatherWidget
import de.mm20.launcher2.widgets.Widget
import kotlin.math.roundToInt
@Composable
fun AppWidget(
@@ -84,7 +80,7 @@ fun AppWidget(
is WeatherWidget -> it.copy(id = widget.id)
is MusicWidget -> it.copy(id = widget.id)
is CalendarWidget -> it.copy(id = widget.id)
is FavoritesWidget -> it.copy(id = widget.id)
is AppsWidget -> it.copy(id = widget.id)
is NotesWidget -> it.copy(id = widget.id)
}
onWidgetUpdate(updatedWidget)

View File

@@ -17,11 +17,11 @@ import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.common.FavoritesTagSelector
import de.mm20.launcher2.ui.component.Banner
import de.mm20.launcher2.ui.launcher.search.common.grid.SearchResultGrid
import de.mm20.launcher2.widgets.FavoritesWidget
import de.mm20.launcher2.widgets.AppsWidget
@Composable
fun FavoritesWidget(widget: FavoritesWidget) {
val viewModel: FavoritesWidgetVM = viewModel(key = "favorites-widget-${widget.id}")
fun AppsWidget(widget: AppsWidget) {
val viewModel: AppsWidgetVM = viewModel(key = "favorites-widget-${widget.id}")
val favorites by remember { viewModel.favorites }.collectAsState(emptyList())
val pinnedTags by viewModel.pinnedTags.collectAsState(emptyList())
val selectedTag by viewModel.selectedTag.collectAsState(null)

View File

@@ -1,21 +1,18 @@
package de.mm20.launcher2.ui.launcher.widgets.favorites
import de.mm20.launcher2.preferences.ui.GridSettings
import de.mm20.launcher2.preferences.ui.UiSettings
import de.mm20.launcher2.services.widgets.WidgetsService
import de.mm20.launcher2.ui.common.FavoritesVM
import de.mm20.launcher2.widgets.FavoritesWidget
import de.mm20.launcher2.widgets.AppsWidget
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.map
import org.koin.core.component.inject
class FavoritesWidgetVM : FavoritesVM() {
class AppsWidgetVM : FavoritesVM() {
private val widgetsService: WidgetsService by inject()
private val widget = MutableStateFlow<FavoritesWidget?>(null)
private val widget = MutableStateFlow<AppsWidget?>(null)
override val tagsExpanded = widget.map { it?.config?.tagsMultiline == true }
override val compactTags: Flow<Boolean> = widget.map { it?.config?.compactTags == true }
@@ -28,7 +25,7 @@ class FavoritesWidgetVM : FavoritesVM() {
)
}
fun updateWidget(widget: FavoritesWidget) {
fun updateWidget(widget: AppsWidget) {
selectTag(null)
if (widget.config.customTags) {
selectTag(widget.config.tagList.firstOrNull())

View File

@@ -223,7 +223,7 @@
<string name="widget_name_weather">Weather</string>
<string name="widget_name_calendar">Calendar</string>
<string name="widget_name_music">Media</string>
<string name="widget_name_favorites">Favorites</string>
<string name="widget_name_apps">Apps</string>
<string name="widget_name_notes">Note</string>
<string name="widget_name_unknown">Unknown</string>
<string name="widget_add_widget">Add widget</string>

View File

@@ -14,7 +14,7 @@ data class FavoritesWidgetConfig(
val tagList: List<String> = emptyList()
)
data class FavoritesWidget(
data class AppsWidget(
override val id: UUID,
val config: FavoritesWidgetConfig = FavoritesWidgetConfig(),
) : Widget() {

View File

@@ -43,11 +43,11 @@ sealed class Widget {
?: CalendarWidgetConfig()
CalendarWidget(entity.id, config)
}
FavoritesWidget.Type -> {
AppsWidget.Type -> {
val config: FavoritesWidgetConfig =
Json.decodeFromStringOrNull(entity.config?.takeIf { it.isNotBlank() })
?: FavoritesWidgetConfig()
FavoritesWidget(entity.id, config)
AppsWidget(entity.id, config)
}
AppWidget.Type -> {
val config: AppWidgetConfig =

View File

@@ -7,7 +7,7 @@ import android.content.pm.LauncherApps
import android.os.Build
import androidx.core.content.getSystemService
import de.mm20.launcher2.widgets.CalendarWidget
import de.mm20.launcher2.widgets.FavoritesWidget
import de.mm20.launcher2.widgets.AppsWidget
import de.mm20.launcher2.widgets.MusicWidget
import de.mm20.launcher2.widgets.NotesWidget
import de.mm20.launcher2.widgets.WeatherWidget
@@ -63,8 +63,8 @@ class WidgetsService(
label = context.getString(R.string.widget_name_calendar),
),
BuiltInWidgetInfo(
type = FavoritesWidget.Type,
label = context.getString(R.string.widget_name_favorites),
type = AppsWidget.Type,
label = context.getString(R.string.widget_name_apps),
),
BuiltInWidgetInfo(
type = NotesWidget.Type,
@@ -85,7 +85,7 @@ class WidgetsService(
fun isFavoritesWidgetFirst(): Flow<Boolean> {
return widgetRepository.get(limit = 1).map {
it.firstOrNull() is FavoritesWidget
it.firstOrNull() is AppsWidget
}
}