Skip to content

Commit

Permalink
Update ComposeKit to 35ed8f82
Browse files Browse the repository at this point in the history
  • Loading branch information
toasterofbread committed Dec 14, 2024
1 parent 8299c4d commit 84d68c5
Show file tree
Hide file tree
Showing 36 changed files with 248 additions and 312 deletions.
2 changes: 1 addition & 1 deletion buildSrc/src/main/kotlin/plugins/spmp/Dependencies.kt
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ class SpMpDeps(extra: Map<String, Any>) {
license_url = "https://github.com/toasterofbread/spmp-server/blob/6dde651ffc102d604ac7ecd5ac7471b1572fd2e6/LICENSE"
),
"dev.toastbits:composekit" to DependencyInfo(
version = "0649b8f7",
version = "35ed8f82",
name = "ComposeKit",
author = "toasterofbread",
url = "https://github.com/toasterofbread/composekit",
Expand Down
2 changes: 2 additions & 0 deletions shared/src/commonMain/composeResources/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@

<string name="playlist_upload_to_account">Upload to account</string>

<string name="sort_type">Sort type</string>
<string name="sort_type_playlist">Playlist order</string>
<string name="sort_type_alphabet">Name</string>
<string name="sort_type_duration">Duration</string>
Expand Down Expand Up @@ -266,6 +267,7 @@

<string name="lyrics_none_found">No lyrics found</string>
<string name="lyrics_no_more_results">No more results</string>
<string name="lyrics_source_dialog_title">Lyrics source</string>
<string name="lyrics_search_on_$source">Search for lyrics on $source</string>
<string name="lyrics_loading">Loading lyrics</string>
<string name="lyrics_source_cannot_search">Source does not support searching</string>
Expand Down
55 changes: 5 additions & 50 deletions shared/src/commonMain/kotlin/SpMp.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
@file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")

import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
Expand All @@ -21,16 +18,11 @@ import androidx.compose.runtime.setValue
import androidx.compose.runtime.staticCompositionLocalOf
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.text.intl.Locale
import androidx.compose.ui.text.intl.platformLocaleDelegate
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.dp
import com.toasterofbread.spmp.ProjectBuildConfig
import com.toasterofbread.spmp.model.appaction.shortcut.LocalShortcutState
import com.toasterofbread.spmp.model.appaction.shortcut.ShortcutState
import com.toasterofbread.spmp.platform.AppContext
import com.toasterofbread.spmp.platform.observeUiLanguage
import com.toasterofbread.spmp.platform.playerservice.ClientServerPlayerService
import com.toasterofbread.spmp.service.playercontroller.PlayerState
import com.toasterofbread.spmp.service.playercontroller.openUri
Expand All @@ -45,27 +37,19 @@ import com.toasterofbread.spmp.ui.layout.nowplaying.ThemeMode
import dev.toastbits.composekit.application.ApplicationTheme
import dev.toastbits.composekit.commonsettings.impl.LocalComposeKitSettings
import dev.toastbits.composekit.commonsettings.impl.group.rememberThemeConfiguration
import dev.toastbits.composekit.navigation.screen.Screen
import dev.toastbits.composekit.components.LocalContext
import dev.toastbits.composekit.navigation.compositionlocal.LocalNavigator
import dev.toastbits.composekit.navigation.navigator.Navigator
import dev.toastbits.composekit.components.LocalContext
import dev.toastbits.composekit.navigation.screen.Screen
import dev.toastbits.composekit.navigation.screen.ScreenButton
import dev.toastbits.composekit.util.platform.Platform
import dev.toastbits.composekit.settings.PlatformSettings
import dev.toastbits.composekit.theme.ThemeValues
import dev.toastbits.composekit.theme.model.ThemeConfiguration
import dev.toastbits.composekit.util.platform.Platform
import dev.toastbits.composekit.util.thenIf
import dev.toastbits.spms.socketapi.shared.SPMS_API_VERSION
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import org.jetbrains.compose.resources.ComposeEnvironment
import org.jetbrains.compose.resources.DensityQualifier
import org.jetbrains.compose.resources.InternalResourceApi
import org.jetbrains.compose.resources.LanguageQualifier
import org.jetbrains.compose.resources.LocalComposeEnvironment
import org.jetbrains.compose.resources.RegionQualifier
import org.jetbrains.compose.resources.ResourceEnvironment
import org.jetbrains.compose.resources.ThemeQualifier
import org.jetbrains.compose.resources.stringResource
import spmp.shared.generated.resources.Res
import spmp.shared.generated.resources.action_close
Expand Down Expand Up @@ -230,9 +214,7 @@ object SpMp {
}
}

val ui_language: String by context.observeUiLanguage()

Theme(context, ui_language) {
Theme(context) {
LaunchedEffect(open_uri) {
if (open_uri != null) {
player_state.openUri(open_uri).onFailure {
Expand All @@ -242,16 +224,12 @@ object SpMp {
}

Surface(modifier = modifier.fillMaxSize()) {
val ui_scale: Float by context.settings.System.UI_SCALE.observe()

CompositionLocalProvider(
LocalPlayerState provides player_state,
LocalShortcutState provides shortcut_state,
LocalDensity provides Density(LocalDensity.current.density * ui_scale, 1f),
LocalProgramArguments provides arguments,
LocalContext provides context,
LocalNavigator provides navigator,
LocalComposeEnvironment provides LocalisedComposeEnvironment { ui_language },
LocalComposeKitSettings provides context.settings
) {
var mismatched_server_api_version: Int? by remember { mutableStateOf(null) }
Expand Down Expand Up @@ -361,35 +339,12 @@ expect fun isWindowTransparencySupported(): Boolean
@Composable
fun SpMp.Theme(
context: AppContext,
ui_language: String,
theme: ThemeValues = context.theme,
content: @Composable () -> Unit
) {
theme.ApplicationTheme(
context,
context.settings,
content
content = content
)
}

private class LocalisedComposeEnvironment(
private val getUiLanguage: @Composable () -> String
): ComposeEnvironment {
@Composable
@OptIn(InternalResourceApi::class)
override fun rememberEnvironment(): ResourceEnvironment {
val uiLanguage: String = getUiLanguage()
val composeLocale: Locale = remember(uiLanguage) { Locale(platformLocaleDelegate.parseLanguageTag(uiLanguage)) }
val composeTheme: Boolean = isSystemInDarkTheme()
val composeDensity: Density = LocalDensity.current

return remember(composeLocale, composeTheme, composeDensity) {
ResourceEnvironment(
LanguageQualifier(composeLocale.language),
RegionQualifier(composeLocale.region),
ThemeQualifier.selectByValue(composeTheme),
DensityQualifier.selectByDensity(composeDensity.density)
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import com.toasterofbread.spmp.platform.observeUiLanguage
import com.toasterofbread.spmp.resources.Language
import com.toasterofbread.spmp.resources.getResourceEnvironment
import com.toasterofbread.spmp.service.playercontroller.PlayerState
import dev.toastbits.composekit.util.model.Locale
import dev.toastbits.ytmkt.uistrings.RawUiString
import dev.toastbits.ytmkt.uistrings.UiString
import dev.toastbits.ytmkt.uistrings.YoutubeUiString
Expand All @@ -38,10 +39,10 @@ data class AppUiString(
fun UiString.observe(): String {
val player: PlayerState = LocalPlayerState.current
var string: String by remember { mutableStateOf("") }
val ui_language: String by player.context.observeUiLanguage()
val ui_language: Locale by player.context.observeUiLanguage()

LaunchedEffect(this, ui_language) {
string = getString(ui_language)
string = getString(ui_language.toTag())
}

return string
Expand Down Expand Up @@ -90,7 +91,7 @@ fun UiString.Companion.deserialise(data: String): UiString {
}

suspend fun UiString.getString(context: AppContext): String =
getString(context.getUiLanguage())
getString(context.getUiLanguage().toTag())

// companion object {
// fun mediaItemPage(key: String, item_type: MediaItemType, context: AppContext, source_language: String = context.getDataLanguage()): UiString =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,11 @@ data class NavigationAppAction(
var show_action_selector: Boolean by remember { mutableStateOf(false) }

LargeDropdownMenu(
expanded = show_action_selector,
title = stringResource(Res.string.appaction_config_navigation_action),
isOpen = show_action_selector,
onDismissRequest = { show_action_selector = false },
item_count = AppPage.Type.entries.size + NavigationAction.Type.entries.size - 1,
selected =
items = (0 until AppPage.Type.entries.size + NavigationAction.Type.entries.size - 1).toList(),
selectedItem =
if (action is AppPageNavigationAction) action.page.ordinal + 1
else action.getType().ordinal - 1,
itemContent = {
Expand All @@ -67,13 +68,13 @@ data class NavigationAppAction(
}
}
},
onSelected = {
onSelected = { _, item ->
val action: NavigationAction
if (it < NavigationAction.Type.entries.size - 1) {
action = NavigationAction.Type.entries[it + 1].createAction()
if (item < NavigationAction.Type.entries.size - 1) {
action = NavigationAction.Type.entries[item + 1].createAction()
}
else {
action = AppPageNavigationAction(AppPage.Type.entries[it + 1 - NavigationAction.Type.entries.size])
action = AppPageNavigationAction(AppPage.Type.entries[item + 1 - NavigationAction.Type.entries.size])
}

onModification(copy(action = action))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,22 +66,22 @@ data class OtherAppAction(
var show_action_selector: Boolean by remember { mutableStateOf(false) }

LargeDropdownMenu(
expanded = show_action_selector,
title =stringResource(Res.string.appaction_config_other_action),
isOpen = show_action_selector,
onDismissRequest = { show_action_selector = false },
item_count = Action.AVAILABLE.size,
selected = action.ordinal,
itemContent = {
items = Action.AVAILABLE,
selectedItem = action,
itemContent = { action ->
Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(10.dp)
) {
val action: Action = Action.AVAILABLE[it]
Icon(action.getIcon(), null)
Text(action.getName())
}
},
onSelected = {
onModification(copy(action = Action.AVAILABLE[it]))
onSelected = { _, action ->
onModification(copy(action = action))
show_action_selector = false
}
)
Expand Down Expand Up @@ -156,8 +156,8 @@ data class OtherAppAction(

INCREASE_UI_SCALE, DECREASE_UI_SCALE -> {
val delta: Float = if (this == INCREASE_UI_SCALE) 0.1f else -0.1f
val current: Float = player.context.settings.System.UI_SCALE.get()
player.context.settings.System.UI_SCALE.set((current + delta).coerceAtLeast(0.1f))
val current: Float = player.context.settings.Interface.UI_SCALE.get()
player.context.settings.Interface.UI_SCALE.set((current + delta).coerceAtLeast(0.1f))
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,16 @@ data class PlaybackAppAction(
var show_action_selector: Boolean by remember { mutableStateOf(false) }

LargeDropdownMenu(
expanded = show_action_selector,
title = stringResource(Res.string.appaction_config_playback_action_type),
isOpen = show_action_selector,
onDismissRequest = { show_action_selector = false },
item_count = PlaybackAction.Type.entries.size,
selected = action.getType().ordinal,
itemContent = {
PlaybackAction.Type.entries[it].Preview()
items = PlaybackAction.Type.entries,
selectedItem = action.getType(),
itemContent = { action ->
action.Preview()
},
onSelected = {
onModification(copy(action = PlaybackAction.Type.entries[it].createAction()))
onSelected = { _, action ->
onModification(copy(action = action.createAction()))
show_action_selector = false
}
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,22 +113,22 @@ data class SongAppAction(
val available_actions: List<Action> = remember { Action.getAvailable(player.context) }

LargeDropdownMenu(
expanded = show_action_selector,
title = stringResource(Res.string.appaction_config_song_action),
isOpen = show_action_selector,
onDismissRequest = { show_action_selector = false },
item_count = available_actions.size,
selected = action.ordinal,
itemContent = {
items = available_actions,
selectedItem = action,
itemContent = { action ->
Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(10.dp)
) {
val action: Action = available_actions[it]
Icon(action.getIcon(), null)
Text(action.getName())
}
},
onSelected = {
onModification(copy(action = available_actions[it]))
onSelected = { _, action ->
onModification(copy(action = action))
show_action_selector = false
}
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,14 @@ data class AppPageNavigationAction(
val settings_pages: List<PlatformSettingsGroupScreen> = remember { player.settings.group_pages }

LargeDropdownMenu(
expanded = show_settings_group_selector,
title = stringResource(Res.string.appaction_config_navigation_settings_group),
isOpen = show_settings_group_selector,
onDismissRequest = { show_settings_group_selector = false },
item_count = settings_pages.size + 1,
selected = settings_group?.let { group_key ->
settings_pages.indexOfFirst { it.group.groupKey == group_key } + 1
} ?: 0,
items = (0 until settings_pages.size + 1).toList(),
selectedItem =
settings_group?.let { group_key ->
settings_pages.indexOfFirst { it.group.groupKey == group_key } + 1
} ?: 0,
itemContent = {
if (it == 0) {
Text(stringResource(Res.string.appaction_config_navigation_settings_group_none))
Expand All @@ -80,10 +82,10 @@ data class AppPageNavigationAction(
Text(settings_pages[it - 1].title)
}
},
onSelected = {
onSelected = { _, index ->
val group_key: String? =
if (it == 0) null
else settings_pages[it - 1].group.groupKey
if (index == 0) null
else settings_pages[index - 1].group.groupKey

onModification(copy(settings_group = group_key))
show_settings_group_selector = false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,24 @@ import com.toasterofbread.spmp.ui.component.shortcut.trigger.getName

@Composable
fun ShortcutTriggerSelector(
title: String,
trigger: ShortcutTrigger? = null,
modifier: Modifier = Modifier,
onModification: (ShortcutTrigger?) -> Unit
) {
var selecting_type: Boolean by remember { mutableStateOf(false) }

LargeDropdownMenu(
selecting_type,
{ selecting_type = false },
ShortcutTrigger.Type.entries.size + 1,
trigger?.getType()?.ordinal?.plus(1) ?: 0,
title = title,
isOpen = selecting_type,
onDismissRequest = { selecting_type = false },
items = (0 until ShortcutTrigger.Type.entries.size + 1).toList(),
selectedItem = trigger?.getType()?.ordinal?.plus(1) ?: 0,
itemContent = {
val type: ShortcutTrigger.Type? = if (it == 0) null else ShortcutTrigger.Type.entries[it - 1]
type.Preview()
},
onSelected = { type ->
onSelected = { _, type ->
if (type == 0) {
onModification(null)
}
Expand Down
Loading

0 comments on commit 84d68c5

Please sign in to comment.