Skip to content

Commit 9efe969

Browse files
Update to new ComposeKit (#415)
1 parent e0a5aad commit 9efe969

File tree

350 files changed

+3378
-4590
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

350 files changed

+3378
-4590
lines changed

androidApp/build.gradle.kts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import org.xmlpull.v1.XmlPullParserFactory
55
import java.io.FileInputStream
66
import java.util.Properties
77
import com.android.build.api.dsl.ApplicationVariantDimension
8+
import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler
89
import plugin.spmp.SpMpDeps
910
import plugin.spmp.getDeps
1011

@@ -57,7 +58,9 @@ kotlin {
5758
val androidMain by getting {
5859
dependencies {
5960
implementation(project(":shared"))
60-
implementation(deps.get("dev.toastbits.composekit:library"))
61+
for (dependency in deps.getAllComposeKit()) {
62+
implementation(dependency)
63+
}
6164
}
6265
}
6366
}
@@ -166,16 +169,17 @@ android {
166169
implementation(project(":shared"))
167170

168171
// Widget
169-
implementation("androidx.glance:glance-appwidget:1.1.0")
170-
implementation("androidx.glance:glance-material3:1.1.0")
172+
val glance_version = "1.1.1"
173+
implementation("androidx.glance:glance-appwidget:$glance_version")
174+
implementation("androidx.glance:glance-material3:$glance_version")
171175
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
172176
implementation(compose.runtime)
173177
// implementation(compose.foundation)
174178
// implementation(compose.materialIconsExtended)
175179
// implementation(compose.ui)
176180
// implementation(compose.material)
177181
implementation(compose.material3)
178-
// implementation(compose.components.resources)
182+
implementation(compose.components.resources)
179183
}
180184
manifest {
181185
srcFile("src/main/AndroidManifest.xml")

androidApp/src/main/java/com/toasterofbread/spmp/MainActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import androidx.compose.runtime.setValue
2323
import androidx.core.view.WindowCompat
2424
import com.toasterofbread.spmp.model.appaction.shortcut.ShortcutState
2525
import com.toasterofbread.spmp.platform.AppContext
26-
import dev.toastbits.composekit.platform.ApplicationContext
26+
import dev.toastbits.composekit.context.ApplicationContext
2727
import kotlinx.coroutines.CoroutineScope
2828
import kotlinx.coroutines.Job
2929
import kotlinx.coroutines.cancel

androidApp/src/main/java/com/toasterofbread/spmp/widget/WidgetConfigurationActivity.kt

Lines changed: 51 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,33 +18,41 @@ import androidx.compose.runtime.CompositionLocalProvider
1818
import androidx.compose.runtime.getValue
1919
import androidx.compose.runtime.rememberCoroutineScope
2020
import androidx.compose.ui.Modifier
21+
import androidx.compose.ui.res.stringResource
2122
import androidx.compose.ui.unit.dp
2223
import androidx.core.view.WindowCompat
2324
import androidx.glance.GlanceId
2425
import androidx.glance.appwidget.GlanceAppWidgetManager
2526
import com.toasterofbread.spmp.platform.AppContext
26-
import com.toasterofbread.spmp.platform.observeUiLanguage
2727
import com.toasterofbread.spmp.service.playercontroller.PlayerState
2828
import com.toasterofbread.spmp.ui.layout.nowplaying.ThemeMode
2929
import com.toasterofbread.spmp.widget.action.TypeWidgetClickAction
3030
import com.toasterofbread.spmp.widget.configuration.SpMpWidgetConfiguration
3131
import com.toasterofbread.spmp.widget.configuration.type.TypeWidgetConfig
3232
import 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
3435
import dev.toastbits.composekit.navigation.compositionlocal.LocalNavigator
36+
import dev.toastbits.composekit.navigation.navigator.BaseNavigator
3537
import dev.toastbits.composekit.navigation.navigator.CurrentScreen
36-
import dev.toastbits.composekit.navigation.navigator.ExtendableNavigator
3738
import 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
4247
import kotlinx.coroutines.CoroutineScope
4348
import kotlinx.coroutines.Job
4449
import kotlinx.coroutines.cancel
4550
import kotlinx.coroutines.launch
4651
import kotlinx.coroutines.runBlocking
4752
import 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

4957
class 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
}

buildSrc/src/main/kotlin/plugins/spmp/Dependencies.kt

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,21 @@ class SpMpDeps(extra: Map<String, Any>) {
3434
throw RuntimeException("No dependency found matching artifact '$artifact")
3535
}
3636

37+
fun getAllComposeKit(): List<String> =
38+
listOf(
39+
"dev.toastbits:composekit-application",
40+
"dev.toastbits:composekit-commonsettings",
41+
"dev.toastbits:composekit-components",
42+
"dev.toastbits:composekit-context",
43+
"dev.toastbits:composekit-navigation",
44+
"dev.toastbits:composekit-settings",
45+
"dev.toastbits:composekit-settingsitem-presentation",
46+
"dev.toastbits:composekit-theme-core",
47+
"dev.toastbits:composekit-theme-config",
48+
"dev.toastbits:composekit-util",
49+
"dev.toastbits:composekit-utilKt"
50+
).map { get(it, "dev.toastbits:composekit") }
51+
3752
val dependencies: Map<String, DependencyInfo> =
3853
mapOf(
3954
"dev.toastbits:spms" to DependencyInfo(
@@ -44,8 +59,8 @@ class SpMpDeps(extra: Map<String, Any>) {
4459
license = "GPL-3.0",
4560
license_url = "https://github.com/toasterofbread/spmp-server/blob/6dde651ffc102d604ac7ecd5ac7471b1572fd2e6/LICENSE"
4661
),
47-
"dev.toastbits.composekit" to DependencyInfo(
48-
version = "64b947f17e",
62+
"dev.toastbits:composekit" to DependencyInfo(
63+
version = "0.1.0-rc3",
4964
name = "ComposeKit",
5065
author = "toasterofbread",
5166
url = "https://github.com/toasterofbread/composekit",
@@ -86,7 +101,7 @@ class SpMpDeps(extra: Map<String, Any>) {
86101
license_url = "https://github.com/Kotlin/kotlinx.serialization/blob/51cb8e8e556983fc83a565d5f04bb089363453e0/LICENSE.txt"
87102
),
88103
"org.jetbrains.compose" to DependencyInfo(
89-
version = "1.6.2",
104+
version = "1.8.0-alpha01",
90105
name = "Compose Multiplatform",
91106
author = "JetBrains",
92107
url = "https://github.com/JetBrains/compose-multiplatform",
@@ -142,7 +157,7 @@ class SpMpDeps(extra: Map<String, Any>) {
142157
license_url = "https://github.com/MohamedRejeb/Ksoup/blob/5f07e799c95e518d80caf70fc586ddcc649e1315/LICENSE"
143158
),
144159
"com.github.toasterofbread.ComposeReorderable" to DependencyInfo(
145-
version = "349bdb3a2a",
160+
version = "77c7652169",
146161
name = "ComposeReorderable",
147162
author = "aclassen",
148163
url = "https://github.com/aclassen/ComposeReorderable",
@@ -151,6 +166,7 @@ class SpMpDeps(extra: Map<String, Any>) {
151166
fork_url = "https://github.com/toasterofbread/ComposeReorderable/",
152167
// redirect = "org.burnoutcrew.composereorderable:reorderable"
153168
),
169+
154170
"com.github.SvenWoltmann:color-thief-java" to DependencyInfo(
155171
version = "v1.1.2",
156172
name = "Color Thief Java",

desktopApp/build.gradle.kts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@ kotlin {
5858
implementation(compose.components.resources)
5959
implementation(project(":shared"))
6060

61-
implementation(deps.get("dev.toastbits.composekit:library"))
61+
for (dependency in deps.getAllComposeKit()) {
62+
implementation(dependency)
63+
}
6264

6365
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-swing:1.6.4")
6466

desktopApp/src/jvmMain/kotlin/main.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ fun main(args: Array<String>) {
4242

4343
SpMp.init(context)
4444

45-
val force_software_renderer: Boolean = runBlocking { context.settings.platform.FORCE_SOFTWARE_RENDERER.get() }
45+
val force_software_renderer: Boolean = runBlocking { context.settings.Platform.FORCE_SOFTWARE_RENDERER.get() }
4646
if (force_software_renderer) {
4747
System.setProperty("skiko.renderApi", "SOFTWARE")
4848
}
@@ -73,7 +73,7 @@ fun main(args: Array<String>) {
7373
}
7474

7575
lateinit var window: ComposeWindow
76-
val enable_window_transparency: Boolean = runBlocking { context.settings.theme.ENABLE_WINDOW_TRANSPARENCY.get() }
76+
val enable_window_transparency: Boolean = runBlocking { context.settings.Theme.ENABLE_WINDOW_TRANSPARENCY.get() }
7777

7878
val shortcut_state: ShortcutState = ShortcutState()
7979
var player: PlayerState? = null
@@ -125,7 +125,7 @@ fun main(args: Array<String>) {
125125
window.background = java.awt.Color(0, 0, 0, 0)
126126
}
127127

128-
val startup_command: String = context.settings.platform.STARTUP_COMMAND.get()
128+
val startup_command: String = context.settings.Platform.STARTUP_COMMAND.get()
129129
if (startup_command.isBlank()) {
130130
return@LaunchedEffect
131131
}

flake.nix

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
vulkan-loader
2424
xorg.libXtst
2525
apksigcopier
26+
gtk3
2627

2728
# Webview
2829
at-spi2-atk
@@ -108,6 +109,8 @@
108109
lib_paths=($(echo $NIX_LDFLAGS | grep -oP '(?<=-rpath\s| -L)[^ ]+'))
109110
lib_paths_str=$(IFS=:; echo "''${lib_paths[*]}")
110111
export LD_LIBRARY_PATH="$lib_paths_str:$LD_LIBRARY_PATH"
112+
113+
export XDG_DATA_DIRS="$XDG_DATA_DIRS:${pkgs.gtk3}/share/gsettings-schemas/gtk+3-3.24.42"
111114
'';
112115
};
113116
};

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ android.suppressUnsupportedCompileSdk=34,35
2222
org.jetbrains.compose.experimental.wasm.enabled=true
2323

2424
# Plugin versions
25-
kotlin.version=2.0.21
25+
kotlin.version=2.1.0
2626
agp.version=8.4.1
27-
compose.version=1.7.0-rc01
27+
compose.version=1.8.0-alpha01
2828
sqldelight.version=2.0.2
2929

3030
# Nix

shared/build.gradle.kts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,11 @@ kotlin {
9191
implementation(compose.components.resources)
9292

9393
implementation(deps.get("dev.toastbits:spms"))
94-
implementation(deps.get("dev.toastbits.composekit:library"))
9594
implementation(deps.get("dev.toastbits:ytm-kt"))
9695
implementation(deps.get("dev.toastbits.kana-kt:kanakt"))
96+
for (dependency in deps.getAllComposeKit()) {
97+
implementation(dependency)
98+
}
9799

98100
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0-RC")
99101
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")

0 commit comments

Comments
 (0)