Add support for widget multi instancing
This commit is contained in:
parent
73039fd800
commit
6498f81e63
@ -144,7 +144,7 @@ fun WidgetItem(
|
|||||||
}
|
}
|
||||||
|
|
||||||
is MusicWidget -> {
|
is MusicWidget -> {
|
||||||
MusicWidget()
|
MusicWidget(widget)
|
||||||
}
|
}
|
||||||
|
|
||||||
is CalendarWidget -> {
|
is CalendarWidget -> {
|
||||||
|
|||||||
@ -35,7 +35,7 @@ import java.time.ZoneId
|
|||||||
fun CalendarWidget(
|
fun CalendarWidget(
|
||||||
widget: CalendarWidget,
|
widget: CalendarWidget,
|
||||||
) {
|
) {
|
||||||
val viewModel: CalendarWidgetVM = viewModel()
|
val viewModel: CalendarWidgetVM = viewModel(key = "calendar-widget-${widget.id}")
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val lifecycleOwner = LocalLifecycleOwner.current
|
val lifecycleOwner = LocalLifecycleOwner.current
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@ import de.mm20.launcher2.widgets.FavoritesWidget
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun FavoritesWidget(widget: FavoritesWidget) {
|
fun FavoritesWidget(widget: FavoritesWidget) {
|
||||||
val viewModel: FavoritesWidgetVM = viewModel()
|
val viewModel: FavoritesWidgetVM = viewModel(key = "favorites-widget-${widget.id}")
|
||||||
val favorites by remember { viewModel.favorites }.collectAsState(emptyList())
|
val favorites by remember { viewModel.favorites }.collectAsState(emptyList())
|
||||||
val pinnedTags by viewModel.pinnedTags.collectAsState(emptyList())
|
val pinnedTags by viewModel.pinnedTags.collectAsState(emptyList())
|
||||||
val selectedTag by viewModel.selectedTag.collectAsState(null)
|
val selectedTag by viewModel.selectedTag.collectAsState(null)
|
||||||
|
|||||||
@ -77,12 +77,13 @@ import de.mm20.launcher2.ui.launcher.transitions.HandleEnterHomeTransition
|
|||||||
import de.mm20.launcher2.ui.launcher.transitions.EnterHomeTransitionParams
|
import de.mm20.launcher2.ui.launcher.transitions.EnterHomeTransitionParams
|
||||||
import de.mm20.launcher2.ui.locals.LocalCardStyle
|
import de.mm20.launcher2.ui.locals.LocalCardStyle
|
||||||
import de.mm20.launcher2.ui.locals.LocalWindowSize
|
import de.mm20.launcher2.ui.locals.LocalWindowSize
|
||||||
|
import de.mm20.launcher2.widgets.MusicWidget
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun MusicWidget() {
|
fun MusicWidget(widget: MusicWidget) {
|
||||||
|
|
||||||
val viewModel: MusicWidgetVM = viewModel()
|
val viewModel: MusicWidgetVM = viewModel(key = "music-widget-${widget.id}")
|
||||||
|
|
||||||
val albumArt by viewModel.albumArt.collectAsStateWithLifecycle(null)
|
val albumArt by viewModel.albumArt.collectAsStateWithLifecycle(null)
|
||||||
val title by viewModel.title.collectAsStateWithLifecycle(null)
|
val title by viewModel.title.collectAsStateWithLifecycle(null)
|
||||||
|
|||||||
@ -70,7 +70,7 @@ import kotlin.math.roundToInt
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun WeatherWidget(widget: WeatherWidget) {
|
fun WeatherWidget(widget: WeatherWidget) {
|
||||||
val viewModel: WeatherWidgetVM = viewModel()
|
val viewModel: WeatherWidgetVM = viewModel(key = "weather-widget-${widget.id}")
|
||||||
|
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val lifecycleOwner = LocalLifecycleOwner.current
|
val lifecycleOwner = LocalLifecycleOwner.current
|
||||||
|
|||||||
@ -13,6 +13,7 @@ import de.mm20.launcher2.widgets.Widget
|
|||||||
import de.mm20.launcher2.widgets.WidgetRepository
|
import de.mm20.launcher2.widgets.WidgetRepository
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
import kotlinx.coroutines.flow.flowOf
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
@ -34,15 +35,7 @@ class WidgetsService(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun getAvailableBuiltInWidgets(): Flow<List<BuiltInWidgetInfo>> {
|
fun getAvailableBuiltInWidgets(): Flow<List<BuiltInWidgetInfo>> {
|
||||||
return widgetRepository.get().map { widgets ->
|
return flowOf(getBuiltInWidgets())
|
||||||
getBuiltInWidgets().filter {
|
|
||||||
it.type == FavoritesWidget.Type && !widgets.any { it is FavoritesWidget } ||
|
|
||||||
it.type == WeatherWidget.Type && !widgets.any { it is WeatherWidget } ||
|
|
||||||
it.type == MusicWidget.Type && !widgets.any { it is MusicWidget } ||
|
|
||||||
it.type == CalendarWidget.Type && !widgets.any { it is CalendarWidget }
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getBuiltInWidgets(): List<BuiltInWidgetInfo> {
|
fun getBuiltInWidgets(): List<BuiltInWidgetInfo> {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user