@@ -18,33 +18,41 @@ import androidx.compose.runtime.CompositionLocalProvider
1818import androidx.compose.runtime.getValue
1919import androidx.compose.runtime.rememberCoroutineScope
2020import androidx.compose.ui.Modifier
21+ import androidx.compose.ui.res.stringResource
2122import androidx.compose.ui.unit.dp
2223import androidx.core.view.WindowCompat
2324import androidx.glance.GlanceId
2425import androidx.glance.appwidget.GlanceAppWidgetManager
2526import com.toasterofbread.spmp.platform.AppContext
26- import com.toasterofbread.spmp.platform.observeUiLanguage
2727import com.toasterofbread.spmp.service.playercontroller.PlayerState
2828import com.toasterofbread.spmp.ui.layout.nowplaying.ThemeMode
2929import com.toasterofbread.spmp.widget.action.TypeWidgetClickAction
3030import com.toasterofbread.spmp.widget.configuration.SpMpWidgetConfiguration
3131import com.toasterofbread.spmp.widget.configuration.type.TypeWidgetConfig
3232import com.toasterofbread.spmp.widget.configuration.ui.screen.WidgetConfigurationScreen
33- import dev.toastbits.composekit.navigation.Screen
33+ import dev.toastbits.composekit.components.utils.modifier.background
34+ import dev.toastbits.composekit.context.ApplicationContext
3435import dev.toastbits.composekit.navigation.compositionlocal.LocalNavigator
36+ import dev.toastbits.composekit.navigation.navigator.BaseNavigator
3537import dev.toastbits.composekit.navigation.navigator.CurrentScreen
36- import dev.toastbits.composekit.navigation.navigator.ExtendableNavigator
3738import dev.toastbits.composekit.navigation.navigator.Navigator
38- import dev.toastbits.composekit.platform.ApplicationContext
39- import dev.toastbits.composekit.platform.LocalContext
40- import dev.toastbits.composekit.utils.common.plus
41- import dev.toastbits.composekit.utils.modifier.background
39+ import dev.toastbits.composekit.navigation.screen.Screen
40+ import dev.toastbits.composekit.theme.core.model.NamedTheme
41+ import dev.toastbits.composekit.theme.core.model.SerialisableTheme
42+ import dev.toastbits.composekit.theme.core.model.ThemeReference
43+ import dev.toastbits.composekit.theme.core.provider.ContextThemeProvider
44+ import dev.toastbits.composekit.theme.core.provider.ThemeProvider
45+ import dev.toastbits.composekit.theme.core.ui.LocalThemeProvider
46+ import dev.toastbits.composekit.util.composable.plus
4247import kotlinx.coroutines.CoroutineScope
4348import kotlinx.coroutines.Job
4449import kotlinx.coroutines.cancel
4550import kotlinx.coroutines.launch
4651import kotlinx.coroutines.runBlocking
4752import kotlinx.serialization.encodeToString
53+ import org.jetbrains.compose.resources.stringResource
54+ import spmp.shared.generated.resources.Res
55+ import spmp.shared.generated.resources.widget_application_theme_label
4856
4957class WidgetConfigurationActivity : ComponentActivity () {
5058 private var app_widget_id: Int = AppWidgetManager .INVALID_APPWIDGET_ID
@@ -103,7 +111,7 @@ class WidgetConfigurationActivity: ComponentActivity() {
103111 widget_type = widget_type
104112 )
105113 }
106- val navigator: Navigator = ExtendableNavigator (configuration_screen)
114+ val navigator: Navigator = BaseNavigator (configuration_screen)
107115
108116 WindowCompat .setDecorFitsSystemWindows(window, false )
109117 window.setFlags(
@@ -113,11 +121,10 @@ class WidgetConfigurationActivity: ComponentActivity() {
113121
114122 setContent {
115123 val composable_coroutine_scope: CoroutineScope = rememberCoroutineScope()
116- val np_theme_mode: ThemeMode by context.settings.theme .NOWPLAYING_THEME_MODE .observe()
117- val swipe_sensitivity: Float by context.settings.player .EXPAND_SWIPE_SENSITIVITY .observe()
124+ val np_theme_mode: ThemeMode by context.settings.Theme .NOWPLAYING_THEME_MODE .observe()
125+ val swipe_sensitivity: Float by context.settings.Player .EXPAND_SWIPE_SENSITIVITY .observe()
118126
119127 CompositionLocalProvider (
120- LocalContext provides context,
121128 LocalNavigator provides navigator,
122129 LocalPlayerState providesComputed {
123130 SpMp ._player_state ?.also { return @providesComputed it }
@@ -129,20 +136,34 @@ class WidgetConfigurationActivity: ComponentActivity() {
129136 return @providesComputed dummy_player_state!!
130137 }
131138 ) {
132- if (! context.theme.Update ()) {
133- return @CompositionLocalProvider
134- }
135-
136- val ui_language: String by context.observeUiLanguage()
137-
138- SpMp .Theme (context, ui_language) {
139- Scaffold { inner_padding ->
140- navigator.CurrentScreen (
141- Modifier
142- .fillMaxSize()
143- .background { context.theme.background },
144- inner_padding + PaddingValues (20 .dp)
145- )
139+ SpMp .Theme (context) {
140+ val themeProvider: ThemeProvider = LocalThemeProvider .current
141+ val applicationTheme: ThemeReference by context.settings.Theme .CURRENT_THEME .observe()
142+ val applicationThemeName: String = stringResource(Res .string.widget_application_theme_label)
143+
144+ CompositionLocalProvider (
145+ LocalThemeProvider provides object : ContextThemeProvider (context) {
146+ override fun getCustomTheme (index : Int ): SerialisableTheme ? =
147+ if (index == - 1 )
148+ NamedTheme (
149+ NamedTheme .Type .CUSTOM ,
150+ applicationThemeName,
151+ applicationTheme.getTheme(themeProvider)
152+ )
153+ else themeProvider.getCustomTheme(index)
154+
155+ override fun getCustomThemes (): List <NamedTheme > =
156+ themeProvider.getCustomThemes()
157+ }
158+ ) {
159+ Scaffold { inner_padding ->
160+ navigator.CurrentScreen (
161+ Modifier
162+ .fillMaxSize()
163+ .background { context.theme.background },
164+ inner_padding + PaddingValues (20 .dp)
165+ )
166+ }
146167 }
147168 }
148169 }
@@ -176,13 +197,15 @@ class WidgetConfigurationActivity: ComponentActivity() {
176197 }
177198 },
178199 onSetDefaultBaseConfig = { new_base_configuration ->
179- context.settings.widget.DEFAULT_BASE_WIDGET_CONFIGURATION .set(new_base_configuration)
200+ coroutine_scope.launch {
201+ context.settings.Widget .DEFAULT_BASE_WIDGET_CONFIGURATION .set(new_base_configuration)
202+ }
180203 },
181204 onSetDefaultTypeConfig = { new_type_configuration ->
182205 coroutine_scope.launch {
183206 val types: Map <SpMpWidgetType , TypeWidgetConfig <out TypeWidgetClickAction >> =
184- context.settings.widget .DEFAULT_TYPE_WIDGET_CONFIGURATIONS .get()
185- context.settings.widget .DEFAULT_TYPE_WIDGET_CONFIGURATIONS .set(
207+ context.settings.Widget .DEFAULT_TYPE_WIDGET_CONFIGURATIONS .get()
208+ context.settings.Widget .DEFAULT_TYPE_WIDGET_CONFIGURATIONS .set(
186209 types.toMutableMap().apply {
187210 set(widget_type, new_type_configuration)
188211 }
0 commit comments