From 676876f503287fb81dde81cb58cfb1c101149579 Mon Sep 17 00:00:00 2001 From: AdityasahuX07 Date: Mon, 7 Sep 2026 14:56:25 +0530 Subject: [PATCH 01/14] feat(settings): add comprehensive shortcuts screen with vector icons and custom mouse graphics --- .../drawable/mouse_left_button_16.svg | 1 + .../drawable/mouse_m4_button_16.svg | 1 + .../drawable/mouse_m5_button_16.svg | 1 + .../drawable/mouse_middle_button_16.svg | 1 + .../drawable/mouse_right_button_16.svg | 1 + .../composeResources/values/strings.xml | 2 + .../app/features/settings/SettingsModels.kt | 8 + .../app/features/settings/SettingsRootPage.kt | 23 ++ .../app/features/settings/SettingsScreen.kt | 17 +- .../settings/ShortcutsSettingsPage.kt | 343 ++++++++++++++++++ 10 files changed, 395 insertions(+), 3 deletions(-) create mode 100644 composeApp/src/commonMain/composeResources/drawable/mouse_left_button_16.svg create mode 100644 composeApp/src/commonMain/composeResources/drawable/mouse_m4_button_16.svg create mode 100644 composeApp/src/commonMain/composeResources/drawable/mouse_m5_button_16.svg create mode 100644 composeApp/src/commonMain/composeResources/drawable/mouse_middle_button_16.svg create mode 100644 composeApp/src/commonMain/composeResources/drawable/mouse_right_button_16.svg create mode 100644 composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt diff --git a/composeApp/src/commonMain/composeResources/drawable/mouse_left_button_16.svg b/composeApp/src/commonMain/composeResources/drawable/mouse_left_button_16.svg new file mode 100644 index 000000000..2f58c2f8a --- /dev/null +++ b/composeApp/src/commonMain/composeResources/drawable/mouse_left_button_16.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/composeApp/src/commonMain/composeResources/drawable/mouse_m4_button_16.svg b/composeApp/src/commonMain/composeResources/drawable/mouse_m4_button_16.svg new file mode 100644 index 000000000..da6331e47 --- /dev/null +++ b/composeApp/src/commonMain/composeResources/drawable/mouse_m4_button_16.svg @@ -0,0 +1 @@ + diff --git a/composeApp/src/commonMain/composeResources/drawable/mouse_m5_button_16.svg b/composeApp/src/commonMain/composeResources/drawable/mouse_m5_button_16.svg new file mode 100644 index 000000000..0d43954ea --- /dev/null +++ b/composeApp/src/commonMain/composeResources/drawable/mouse_m5_button_16.svg @@ -0,0 +1 @@ + diff --git a/composeApp/src/commonMain/composeResources/drawable/mouse_middle_button_16.svg b/composeApp/src/commonMain/composeResources/drawable/mouse_middle_button_16.svg new file mode 100644 index 000000000..37eab1d78 --- /dev/null +++ b/composeApp/src/commonMain/composeResources/drawable/mouse_middle_button_16.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/composeApp/src/commonMain/composeResources/drawable/mouse_right_button_16.svg b/composeApp/src/commonMain/composeResources/drawable/mouse_right_button_16.svg new file mode 100644 index 000000000..e48d5def4 --- /dev/null +++ b/composeApp/src/commonMain/composeResources/drawable/mouse_right_button_16.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/composeApp/src/commonMain/composeResources/values/strings.xml b/composeApp/src/commonMain/composeResources/values/strings.xml index d5262ee13..0d4b62849 100644 --- a/composeApp/src/commonMain/composeResources/values/strings.xml +++ b/composeApp/src/commonMain/composeResources/values/strings.xml @@ -1675,6 +1675,8 @@ Downloading update... No updates found. A new version is ready to install. + Shortcuts + Keyboard and mouse shortcuts. In-app updates are not available on this build. No release notes were provided. Preparing download diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsModels.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsModels.kt index c0061f999..8a91cfa87 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsModels.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsModels.kt @@ -4,6 +4,7 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.AccountCircle import androidx.compose.material.icons.rounded.Info import androidx.compose.material.icons.rounded.Notifications +import androidx.compose.material.icons.rounded.Keyboard import androidx.compose.material.icons.rounded.Settings import androidx.compose.material.icons.rounded.Tune import androidx.compose.ui.graphics.vector.ImageVector @@ -28,6 +29,7 @@ import nuvio.composeapp.generated.resources.compose_settings_page_playback import nuvio.composeapp.generated.resources.compose_settings_page_plugins import nuvio.composeapp.generated.resources.compose_settings_page_poster_customization import nuvio.composeapp.generated.resources.compose_settings_page_root +import nuvio.composeapp.generated.resources.compose_settings_page_shortcuts import nuvio.composeapp.generated.resources.compose_settings_page_streams import nuvio.composeapp.generated.resources.compose_settings_page_supporters_contributors import nuvio.composeapp.generated.resources.compose_settings_page_tmdb_enrichment @@ -44,6 +46,7 @@ internal enum class SettingsCategory( General(Res.string.compose_settings_category_general, Icons.Rounded.Settings), About(Res.string.compose_settings_category_about, Icons.Rounded.Info), Advanced(Res.string.compose_settings_page_advanced, Icons.Rounded.Tune), + Shortcuts(Res.string.compose_settings_page_shortcuts, Icons.Rounded.Keyboard), } internal enum class SettingsPage( @@ -162,6 +165,11 @@ internal enum class SettingsPage( category = SettingsCategory.Account, parentPage = Root, ), + Shortcuts( + titleRes = Res.string.compose_settings_page_shortcuts, + category = SettingsCategory.Shortcuts, + parentPage = Root, + ), } internal val SettingsPage.opensInlineOnTablet: Boolean diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsRootPage.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsRootPage.kt index d6d5dcc1d..282237ec4 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsRootPage.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsRootPage.kt @@ -12,6 +12,7 @@ import androidx.compose.material.icons.rounded.CloudDownload import androidx.compose.material.icons.rounded.Extension import androidx.compose.material.icons.rounded.Favorite import androidx.compose.material.icons.rounded.Info +import androidx.compose.material.icons.rounded.Keyboard import androidx.compose.material.icons.rounded.Link import androidx.compose.material.icons.rounded.Notifications import androidx.compose.material.icons.rounded.Palette @@ -39,8 +40,10 @@ import nuvio.composeapp.generated.resources.compose_settings_page_licenses_attri import nuvio.composeapp.generated.resources.compose_settings_page_notifications import nuvio.composeapp.generated.resources.compose_settings_page_playback import nuvio.composeapp.generated.resources.compose_settings_page_privacy_policy +import nuvio.composeapp.generated.resources.compose_settings_page_shortcuts import nuvio.composeapp.generated.resources.compose_settings_page_supporters_contributors import nuvio.composeapp.generated.resources.compose_settings_root_account_description +import nuvio.composeapp.generated.resources.compose_settings_root_shortcuts_description import nuvio.composeapp.generated.resources.compose_settings_root_appearance_description import nuvio.composeapp.generated.resources.compose_settings_root_check_updates_description import nuvio.composeapp.generated.resources.compose_settings_root_check_updates_title @@ -74,6 +77,7 @@ internal fun LazyListScope.settingsRootContent( onPlaybackClick: () -> Unit, onAppearanceClick: () -> Unit, onAdvancedClick: () -> Unit, + onShortcutsClick: () -> Unit, onNotificationsClick: () -> Unit, onContentDiscoveryClick: () -> Unit, onIntegrationsClick: () -> Unit, @@ -91,6 +95,7 @@ internal fun LazyListScope.settingsRootContent( showGeneralSection: Boolean = true, showAboutSection: Boolean = true, showAdvancedSection: Boolean = true, + showShortcutsSection: Boolean = true, showSupportersContributorsPage: Boolean = true, ) { if (showAccountSection) { @@ -266,6 +271,24 @@ internal fun LazyListScope.settingsRootContent( } } } + if (showShortcutsSection) { + item { + SettingsSection( + title = stringResource(Res.string.compose_settings_page_shortcuts), + isTablet = isTablet, + ) { + SettingsGroup(isTablet = isTablet) { + SettingsNavigationRow( + title = stringResource(Res.string.compose_settings_page_shortcuts), + description = stringResource(Res.string.compose_settings_root_shortcuts_description), + icon = Icons.Rounded.Keyboard, + isTablet = isTablet, + onClick = onShortcutsClick, + ) + } + } + } + } item { androidx.compose.foundation.layout.Column( modifier = Modifier diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsScreen.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsScreen.kt index 31ee628e1..2bf62c53d 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsScreen.kt @@ -614,6 +614,7 @@ private fun MobileSettingsScreen( onPlaybackClick = { onPageChange(SettingsPage.Playback) }, onAppearanceClick = { onPageChange(SettingsPage.Appearance) }, onAdvancedClick = { onPageChange(SettingsPage.Advanced) }, + onShortcutsClick = { onPageChange(SettingsPage.Shortcuts) }, onNotificationsClick = { onPageChange(SettingsPage.Notifications) }, onContentDiscoveryClick = { onPageChange(SettingsPage.ContentDiscovery) }, onIntegrationsClick = { onPageChange(SettingsPage.Integrations) }, @@ -699,6 +700,9 @@ private fun MobileSettingsScreen( isTablet = false, rememberLastProfileEnabled = rememberLastProfileEnabled, ) + SettingsPage.Shortcuts -> shortcutsSettingsContent( + isTablet = false, + ) SettingsPage.Notifications -> if (AppFeaturePolicy.notificationsEnabled) { notificationsSettingsContent( isTablet = false, @@ -930,10 +934,12 @@ private fun TabletSettingsScreen( icon = category.icon, selected = category == activeCategory, onClick = { - if (category != activeCategory || page != SettingsPage.Root) { + if (category != activeCategory || (category != SettingsCategory.Shortcuts && page != SettingsPage.Root) || (category == SettingsCategory.Shortcuts && page != SettingsPage.Shortcuts)) { selectedCategory = category.name navBarScrollState?.expand() - if (page != SettingsPage.Root) { + if (category == SettingsCategory.Shortcuts) { + onPageChange(SettingsPage.Shortcuts) + } else { onPageChange(SettingsPage.Root) } } @@ -1042,7 +1048,7 @@ private fun TabletSettingsScreen( } else { stringResource(page.titleRes) }, - showBack = previousPage != null, + showBack = previousPage != null && page != SettingsPage.Shortcuts, onBack = { previousPage?.let(onPageChange) }, ) } @@ -1063,6 +1069,7 @@ private fun TabletSettingsScreen( onPlaybackClick = { openInlinePage(SettingsPage.Playback) }, onAppearanceClick = { openInlinePage(SettingsPage.Appearance) }, onAdvancedClick = { openInlinePage(SettingsPage.Advanced) }, + onShortcutsClick = { openInlinePage(SettingsPage.Shortcuts) }, onNotificationsClick = { openInlinePage(SettingsPage.Notifications) }, onContentDiscoveryClick = { openInlinePage(SettingsPage.ContentDiscovery) }, onIntegrationsClick = { openInlinePage(SettingsPage.Integrations) }, @@ -1080,10 +1087,14 @@ private fun TabletSettingsScreen( showGeneralSection = activeCategory == SettingsCategory.General, showAboutSection = activeCategory == SettingsCategory.About, showAdvancedSection = activeCategory == SettingsCategory.Advanced, + showShortcutsSection = activeCategory == SettingsCategory.Shortcuts, showSupportersContributorsPage = AppFeaturePolicy.supportersContributorsPageEnabled, ) } } + SettingsPage.Shortcuts -> shortcutsSettingsContent( + isTablet = true, + ) SettingsPage.Account -> accountSettingsContent( isTablet = true, ) diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt new file mode 100644 index 000000000..97650a276 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt @@ -0,0 +1,343 @@ +package com.nuvio.app.features.settings + +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyListScope +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.KeyboardArrowDown +import androidx.compose.material.icons.filled.KeyboardArrowLeft +import androidx.compose.material.icons.filled.KeyboardArrowRight +import androidx.compose.material.icons.filled.KeyboardArrowUp +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import com.nuvio.app.core.ui.nuvio +import nuvio.composeapp.generated.resources.* + +internal fun LazyListScope.shortcutsSettingsContent( + isTablet: Boolean, +) { + item { + SettingsSection( + title = "GENERAL & NAVIGATION", + isTablet = isTablet, + ) { + SettingsGroup(isTablet = isTablet) { + ShortcutRow("Go back / previous screen", isTablet) { + ShortcutKey("Esc") + ShortcutOrText() + ShortcutMouseKey(MouseButton.Backward, "Backward") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Show options", isTablet) { + ShortcutMouseKey(MouseButton.Right, "Right") + ShortcutOrText() + ShortcutMouseKey(MouseButton.Left, "Hold Left") + } + } + } + } + + item { + SettingsSection( + title = "PLAYER \u2013 PLAYBACK", + isTablet = isTablet, + ) { + SettingsGroup(isTablet = isTablet) { + ShortcutRow("Play / Pause", isTablet) { + ShortcutKey("Space") + ShortcutOrText() + ShortcutKey("K") + ShortcutOrText() + ShortcutMouseKey(MouseButton.Left, "Left") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Sequential switch audio track", isTablet) { + ShortcutKey("B") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Toggle enable / disable subtitle", isTablet) { + ShortcutKey("V") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Toggle mute state", isTablet) { + ShortcutKey("M") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Seek forward or backward", isTablet) { + ShortcutIconKey(Icons.Default.KeyboardArrowLeft) + ShortcutOrText() + ShortcutIconKey(Icons.Default.KeyboardArrowRight) + ShortcutOrText() + ShortcutMouseKey(MouseButton.Forward, "Forward") + ShortcutOrText() + ShortcutMouseKey(MouseButton.Backward, "Backward") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Volume up / down", isTablet) { + ShortcutIconKey(Icons.Default.KeyboardArrowUp) + ShortcutOrText() + ShortcutIconKey(Icons.Default.KeyboardArrowDown) + ShortcutOrText() + ShortcutMouseKey(MouseButton.ScrollUp, "Scroll Up") + ShortcutOrText() + ShortcutMouseKey(MouseButton.ScrollDown, "Scroll Down") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Toggle app fullscreen", isTablet) { + ShortcutKey("F11") + ShortcutOrText() + ShortcutKey("F") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Skip intro", isTablet) { + ShortcutKey("Enter") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Open audio selector window", isTablet) { + ShortcutKey("A") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Open subtitle selector window", isTablet) { + ShortcutKey("S") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Open source list window", isTablet) { + ShortcutKey("Q") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Open episode list window", isTablet) { + ShortcutKey("E") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Move focus and options", isTablet) { + ShortcutIconKey(Icons.Default.KeyboardArrowUp) + ShortcutOrText() + ShortcutIconKey(Icons.Default.KeyboardArrowDown) + ShortcutOrText() + ShortcutIconKey(Icons.Default.KeyboardArrowLeft) + ShortcutOrText() + ShortcutIconKey(Icons.Default.KeyboardArrowRight) + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Play next episode", isTablet) { + ShortcutKey("Shift") + ShortcutPlusText() + ShortcutKey("N") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Hold to speed up playback", isTablet) { + ShortcutKey("Hold Space") + ShortcutOrText() + ShortcutMouseKey(MouseButton.Left, "Hold Left") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Open playback speed panel", isTablet) { + ShortcutKey("`") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Playback speed control", isTablet) { + ShortcutKey("Shift") + ShortcutPlusText() + ShortcutKey("<") + ShortcutOrText() + ShortcutKey("Shift") + ShortcutPlusText() + ShortcutKey(">") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Reset playback speed to 1x", isTablet) { + ShortcutKey("/") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Decrease / increase subtitle delay", isTablet) { + ShortcutKey("G") + ShortcutOrText() + ShortcutKey("H") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Turn on / off sub opacity", isTablet) { + ShortcutKey("O") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Increase / reduce opacity of subs", isTablet) { + ShortcutKey("I") + ShortcutOrText() + ShortcutKey("P") + } + } + } + } +} + +@Composable +private fun ShortcutRow( + title: String, + isTablet: Boolean, + keys: @Composable RowScope.() -> Unit, +) { + val tokens = MaterialTheme.nuvio + val verticalPadding = if (isTablet) 16.dp else 14.dp + val horizontalPadding = if (isTablet) 20.dp else 16.dp + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = horizontalPadding, vertical = verticalPadding), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Text( + text = title, + style = MaterialTheme.typography.bodyLarge, + color = tokens.colors.textPrimary, + ) + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(4.dp), + ) { + keys() + } + } +} + +@Composable +private fun ShortcutKey(label: String) { + val tokens = MaterialTheme.nuvio + Box( + modifier = Modifier + .background( + color = tokens.colors.surfaceCard, + shape = RoundedCornerShape(6.dp) + ) + .border( + width = 1.dp, + color = tokens.colors.borderSubtle, + shape = RoundedCornerShape(6.dp) + ) + .padding(horizontal = 8.dp, vertical = 4.dp), + contentAlignment = Alignment.Center, + ) { + Text( + text = label, + style = MaterialTheme.typography.labelLarge, + color = tokens.colors.textPrimary, + fontWeight = FontWeight.Bold, + fontFamily = FontFamily.Monospace, + ) + } +} + +@Composable +private fun ShortcutIconKey(icon: androidx.compose.ui.graphics.vector.ImageVector) { + val tokens = MaterialTheme.nuvio + Box( + modifier = Modifier + .background( + color = tokens.colors.surfaceCard, + shape = RoundedCornerShape(6.dp) + ) + .border( + width = 1.dp, + color = tokens.colors.borderSubtle, + shape = RoundedCornerShape(6.dp) + ) + .padding(horizontal = 4.dp, vertical = 2.dp), + contentAlignment = Alignment.Center, + ) { + Icon( + imageVector = icon, + contentDescription = null, + tint = tokens.colors.textPrimary, + modifier = Modifier.size(18.dp) + ) + } +} + +enum class MouseButton { Left, Right, Middle, ScrollUp, ScrollDown, Forward, Backward, None } + +@Composable +private fun ShortcutMouseKey(button: MouseButton, label: String, modifier: Modifier = Modifier) { + Box( + modifier = modifier + .border( + width = 1.dp, + color = MaterialTheme.nuvio.colors.borderSubtle, + shape = RoundedCornerShape(6.dp) + ) + .background( + color = MaterialTheme.nuvio.colors.surfaceCard, + shape = RoundedCornerShape(6.dp) + ) + .padding(horizontal = 6.dp, vertical = 4.dp), + contentAlignment = Alignment.Center + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(6.dp) + ) { + val iconRes = when (button) { + MouseButton.Left -> Res.drawable.mouse_left_button_16 + MouseButton.Right -> Res.drawable.mouse_right_button_16 + MouseButton.Middle, MouseButton.ScrollUp, MouseButton.ScrollDown -> Res.drawable.mouse_middle_button_16 + MouseButton.Forward -> Res.drawable.mouse_m4_button_16 + MouseButton.Backward -> Res.drawable.mouse_m5_button_16 + MouseButton.None -> null + } + + if (iconRes != null) { + Icon( + painter = org.jetbrains.compose.resources.painterResource(iconRes), + contentDescription = null, + tint = MaterialTheme.nuvio.colors.textPrimary, + modifier = Modifier.size(16.dp) + ) + } else { + Box(modifier = Modifier.size(16.dp)) + } + + Text( + text = label, + color = MaterialTheme.nuvio.colors.textPrimary, + fontFamily = FontFamily.Monospace, + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.Bold + ) + } + } +} + +@Composable +private fun ShortcutOrText() { + Text( + text = "or", + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.nuvio.colors.textSecondary, + modifier = Modifier.padding(horizontal = 2.dp) + ) +} + +@Composable +private fun ShortcutPlusText() { + Text( + text = "+", + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.nuvio.colors.textSecondary, + modifier = Modifier.padding(horizontal = 2.dp) + ) +} + From fb3799c960db553e54e9bebce0e5c0be31adca1b Mon Sep 17 00:00:00 2001 From: AdityasahuX07 Date: Tue, 8 Sep 2026 00:00:57 +0530 Subject: [PATCH 02/14] Add keyboard shortcuts to ShortcutsSettingsPage --- .../settings/ShortcutsSettingsPage.kt | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt index 97650a276..211b3a8dd 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt @@ -1,4 +1,4 @@ -package com.nuvio.app.features.settings +package com.nuvio.app.features.settings import androidx.compose.foundation.background import androidx.compose.foundation.border @@ -48,6 +48,28 @@ internal fun LazyListScope.shortcutsSettingsContent( ShortcutOrText() ShortcutMouseKey(MouseButton.Left, "Hold Left") } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Switch to home", isTablet) { + ShortcutKey("1") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Switch to search", isTablet) { + ShortcutKey("2") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Switch to library", isTablet) { + ShortcutKey("3") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Switch to settings", isTablet) { + ShortcutKey("4") + } + SettingsGroupDivider(isTablet = isTablet) + ShortcutRow("Activate search box", isTablet) { + ShortcutKey("/") + ShortcutOrText() + ShortcutKey("0") + } } } } From 3e2aa78d50ea046540bf8e725a6c67b44511d028 Mon Sep 17 00:00:00 2001 From: AdityasahuX07 Date: Wed, 9 Sep 2026 15:42:45 +0530 Subject: [PATCH 03/14] Reorder Advanced setting in SettingsModels --- .../kotlin/com/nuvio/app/features/settings/SettingsModels.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsModels.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsModels.kt index 8a91cfa87..f9bd976e1 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsModels.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsModels.kt @@ -45,8 +45,8 @@ internal enum class SettingsCategory( Account(Res.string.settings_account, Icons.Rounded.AccountCircle), General(Res.string.compose_settings_category_general, Icons.Rounded.Settings), About(Res.string.compose_settings_category_about, Icons.Rounded.Info), - Advanced(Res.string.compose_settings_page_advanced, Icons.Rounded.Tune), Shortcuts(Res.string.compose_settings_page_shortcuts, Icons.Rounded.Keyboard), + Advanced(Res.string.compose_settings_page_advanced, Icons.Rounded.Tune), } internal enum class SettingsPage( From 177685328452546318e0225f612751e3e893396f Mon Sep 17 00:00:00 2001 From: AdityasahuX07 Date: Wed, 9 Sep 2026 17:01:28 +0530 Subject: [PATCH 04/14] Add Backspace shortcut to Go back action --- .../com/nuvio/app/features/settings/ShortcutsSettingsPage.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt index 211b3a8dd..0d47e3396 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt @@ -40,6 +40,8 @@ internal fun LazyListScope.shortcutsSettingsContent( ShortcutRow("Go back / previous screen", isTablet) { ShortcutKey("Esc") ShortcutOrText() + ShortcutKey("Backspace") + ShortcutOrText() ShortcutMouseKey(MouseButton.Backward, "Backward") } SettingsGroupDivider(isTablet = isTablet) From c6397179b8b1a38ebf466e20679085e0b4d2fb2c Mon Sep 17 00:00:00 2001 From: KhooLy <73142442+KhooLy@users.noreply.github.com> Date: Wed, 9 Sep 2026 21:33:44 +0300 Subject: [PATCH 05/14] fix(settings): localize shortcut labels and strip SVG metadata --- .../drawable/mouse_m4_button_16.svg | 2 +- .../drawable/mouse_m5_button_16.svg | 2 +- .../composeResources/values/strings.xml | 70 ++++++++ .../settings/ShortcutsSettingsPage.kt | 169 +++++++++--------- 4 files changed, 159 insertions(+), 84 deletions(-) diff --git a/composeApp/src/commonMain/composeResources/drawable/mouse_m4_button_16.svg b/composeApp/src/commonMain/composeResources/drawable/mouse_m4_button_16.svg index da6331e47..4e418198b 100644 --- a/composeApp/src/commonMain/composeResources/drawable/mouse_m4_button_16.svg +++ b/composeApp/src/commonMain/composeResources/drawable/mouse_m4_button_16.svg @@ -1 +1 @@ - + diff --git a/composeApp/src/commonMain/composeResources/drawable/mouse_m5_button_16.svg b/composeApp/src/commonMain/composeResources/drawable/mouse_m5_button_16.svg index 0d43954ea..aa9be7f4f 100644 --- a/composeApp/src/commonMain/composeResources/drawable/mouse_m5_button_16.svg +++ b/composeApp/src/commonMain/composeResources/drawable/mouse_m5_button_16.svg @@ -1 +1 @@ - + diff --git a/composeApp/src/commonMain/composeResources/values/strings.xml b/composeApp/src/commonMain/composeResources/values/strings.xml index 0d4b62849..10ef19069 100644 --- a/composeApp/src/commonMain/composeResources/values/strings.xml +++ b/composeApp/src/commonMain/composeResources/values/strings.xml @@ -1677,6 +1677,76 @@ A new version is ready to install. Shortcuts Keyboard and mouse shortcuts. + GENERAL & NAVIGATION + PLAYER – PLAYBACK + Go back / previous screen + Show options + Switch to home + Switch to search + Switch to library + Switch to settings + Activate search box + Play / Pause + Sequential switch audio track + Toggle enable / disable subtitle + Toggle mute state + Seek forward or backward + Volume up / down + Toggle app fullscreen + Skip intro + Open audio selector window + Open subtitle selector window + Open source list window + Open episode list window + Move focus and options + Play next episode + Hold to speed up playback + Open playback speed panel + Playback speed control + Reset playback speed to 1x + Decrease / increase subtitle delay + Turn on / off sub opacity + Increase / reduce opacity of subs + or + + + Left + Right + Hold Left + Forward + Backward + Scroll Up + Scroll Down + Esc + Backspace + 1 + 2 + 3 + 4 + / + 0 + Space + K + B + V + M + F11 + F + Enter + A + S + Q + E + Shift + N + Hold Space + ` + < + > + G + H + O + I + P In-app updates are not available on this build. No release notes were provided. Preparing download diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt index 0d47e3396..0f9001150 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt @@ -27,50 +27,52 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import com.nuvio.app.core.ui.nuvio import nuvio.composeapp.generated.resources.* +import org.jetbrains.compose.resources.StringResource +import org.jetbrains.compose.resources.stringResource internal fun LazyListScope.shortcutsSettingsContent( isTablet: Boolean, ) { item { SettingsSection( - title = "GENERAL & NAVIGATION", + title = stringResource(Res.string.shortcuts_section_general_navigation), isTablet = isTablet, ) { SettingsGroup(isTablet = isTablet) { - ShortcutRow("Go back / previous screen", isTablet) { - ShortcutKey("Esc") + ShortcutRow(Res.string.shortcuts_go_back, isTablet) { + ShortcutKey(Res.string.shortcuts_key_esc) ShortcutOrText() - ShortcutKey("Backspace") + ShortcutKey(Res.string.shortcuts_key_backspace) ShortcutOrText() - ShortcutMouseKey(MouseButton.Backward, "Backward") + ShortcutMouseKey(MouseButton.Backward, Res.string.shortcuts_mouse_backward) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Show options", isTablet) { - ShortcutMouseKey(MouseButton.Right, "Right") + ShortcutRow(Res.string.shortcuts_show_options, isTablet) { + ShortcutMouseKey(MouseButton.Right, Res.string.shortcuts_mouse_right) ShortcutOrText() - ShortcutMouseKey(MouseButton.Left, "Hold Left") + ShortcutMouseKey(MouseButton.Left, Res.string.shortcuts_mouse_hold_left) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Switch to home", isTablet) { - ShortcutKey("1") + ShortcutRow(Res.string.shortcuts_switch_home, isTablet) { + ShortcutKey(Res.string.shortcuts_key_1) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Switch to search", isTablet) { - ShortcutKey("2") + ShortcutRow(Res.string.shortcuts_switch_search, isTablet) { + ShortcutKey(Res.string.shortcuts_key_2) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Switch to library", isTablet) { - ShortcutKey("3") + ShortcutRow(Res.string.shortcuts_switch_library, isTablet) { + ShortcutKey(Res.string.shortcuts_key_3) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Switch to settings", isTablet) { - ShortcutKey("4") + ShortcutRow(Res.string.shortcuts_switch_settings, isTablet) { + ShortcutKey(Res.string.shortcuts_key_4) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Activate search box", isTablet) { - ShortcutKey("/") + ShortcutRow(Res.string.shortcuts_activate_search, isTablet) { + ShortcutKey(Res.string.shortcuts_key_slash) ShortcutOrText() - ShortcutKey("0") + ShortcutKey(Res.string.shortcuts_key_0) } } } @@ -78,77 +80,77 @@ internal fun LazyListScope.shortcutsSettingsContent( item { SettingsSection( - title = "PLAYER \u2013 PLAYBACK", + title = stringResource(Res.string.shortcuts_section_player_playback), isTablet = isTablet, ) { SettingsGroup(isTablet = isTablet) { - ShortcutRow("Play / Pause", isTablet) { - ShortcutKey("Space") + ShortcutRow(Res.string.shortcuts_play_pause, isTablet) { + ShortcutKey(Res.string.shortcuts_key_space) ShortcutOrText() - ShortcutKey("K") + ShortcutKey(Res.string.shortcuts_key_k) ShortcutOrText() - ShortcutMouseKey(MouseButton.Left, "Left") + ShortcutMouseKey(MouseButton.Left, Res.string.shortcuts_mouse_left) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Sequential switch audio track", isTablet) { - ShortcutKey("B") + ShortcutRow(Res.string.shortcuts_switch_audio_track, isTablet) { + ShortcutKey(Res.string.shortcuts_key_b) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Toggle enable / disable subtitle", isTablet) { - ShortcutKey("V") + ShortcutRow(Res.string.shortcuts_toggle_subtitle, isTablet) { + ShortcutKey(Res.string.shortcuts_key_v) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Toggle mute state", isTablet) { - ShortcutKey("M") + ShortcutRow(Res.string.shortcuts_toggle_mute, isTablet) { + ShortcutKey(Res.string.shortcuts_key_m) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Seek forward or backward", isTablet) { + ShortcutRow(Res.string.shortcuts_seek, isTablet) { ShortcutIconKey(Icons.Default.KeyboardArrowLeft) ShortcutOrText() ShortcutIconKey(Icons.Default.KeyboardArrowRight) ShortcutOrText() - ShortcutMouseKey(MouseButton.Forward, "Forward") + ShortcutMouseKey(MouseButton.Forward, Res.string.shortcuts_mouse_forward) ShortcutOrText() - ShortcutMouseKey(MouseButton.Backward, "Backward") + ShortcutMouseKey(MouseButton.Backward, Res.string.shortcuts_mouse_backward) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Volume up / down", isTablet) { + ShortcutRow(Res.string.shortcuts_volume, isTablet) { ShortcutIconKey(Icons.Default.KeyboardArrowUp) ShortcutOrText() ShortcutIconKey(Icons.Default.KeyboardArrowDown) ShortcutOrText() - ShortcutMouseKey(MouseButton.ScrollUp, "Scroll Up") + ShortcutMouseKey(MouseButton.ScrollUp, Res.string.shortcuts_mouse_scroll_up) ShortcutOrText() - ShortcutMouseKey(MouseButton.ScrollDown, "Scroll Down") + ShortcutMouseKey(MouseButton.ScrollDown, Res.string.shortcuts_mouse_scroll_down) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Toggle app fullscreen", isTablet) { - ShortcutKey("F11") + ShortcutRow(Res.string.shortcuts_toggle_fullscreen, isTablet) { + ShortcutKey(Res.string.shortcuts_key_f11) ShortcutOrText() - ShortcutKey("F") + ShortcutKey(Res.string.shortcuts_key_f) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Skip intro", isTablet) { - ShortcutKey("Enter") + ShortcutRow(Res.string.shortcuts_skip_intro, isTablet) { + ShortcutKey(Res.string.shortcuts_key_enter) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Open audio selector window", isTablet) { - ShortcutKey("A") + ShortcutRow(Res.string.shortcuts_open_audio_selector, isTablet) { + ShortcutKey(Res.string.shortcuts_key_a) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Open subtitle selector window", isTablet) { - ShortcutKey("S") + ShortcutRow(Res.string.shortcuts_open_subtitle_selector, isTablet) { + ShortcutKey(Res.string.shortcuts_key_s) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Open source list window", isTablet) { - ShortcutKey("Q") + ShortcutRow(Res.string.shortcuts_open_source_list, isTablet) { + ShortcutKey(Res.string.shortcuts_key_q) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Open episode list window", isTablet) { - ShortcutKey("E") + ShortcutRow(Res.string.shortcuts_open_episode_list, isTablet) { + ShortcutKey(Res.string.shortcuts_key_e) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Move focus and options", isTablet) { + ShortcutRow(Res.string.shortcuts_move_focus, isTablet) { ShortcutIconKey(Icons.Default.KeyboardArrowUp) ShortcutOrText() ShortcutIconKey(Icons.Default.KeyboardArrowDown) @@ -158,50 +160,50 @@ internal fun LazyListScope.shortcutsSettingsContent( ShortcutIconKey(Icons.Default.KeyboardArrowRight) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Play next episode", isTablet) { - ShortcutKey("Shift") + ShortcutRow(Res.string.shortcuts_play_next_episode, isTablet) { + ShortcutKey(Res.string.shortcuts_key_shift) ShortcutPlusText() - ShortcutKey("N") + ShortcutKey(Res.string.shortcuts_key_n) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Hold to speed up playback", isTablet) { - ShortcutKey("Hold Space") + ShortcutRow(Res.string.shortcuts_hold_speed, isTablet) { + ShortcutKey(Res.string.shortcuts_key_hold_space) ShortcutOrText() - ShortcutMouseKey(MouseButton.Left, "Hold Left") + ShortcutMouseKey(MouseButton.Left, Res.string.shortcuts_mouse_hold_left) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Open playback speed panel", isTablet) { - ShortcutKey("`") + ShortcutRow(Res.string.shortcuts_open_speed_panel, isTablet) { + ShortcutKey(Res.string.shortcuts_key_backtick) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Playback speed control", isTablet) { - ShortcutKey("Shift") + ShortcutRow(Res.string.shortcuts_speed_control, isTablet) { + ShortcutKey(Res.string.shortcuts_key_shift) ShortcutPlusText() - ShortcutKey("<") + ShortcutKey(Res.string.shortcuts_key_less_than) ShortcutOrText() - ShortcutKey("Shift") + ShortcutKey(Res.string.shortcuts_key_shift) ShortcutPlusText() - ShortcutKey(">") + ShortcutKey(Res.string.shortcuts_key_greater_than) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Reset playback speed to 1x", isTablet) { - ShortcutKey("/") + ShortcutRow(Res.string.shortcuts_reset_speed, isTablet) { + ShortcutKey(Res.string.shortcuts_key_slash) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Decrease / increase subtitle delay", isTablet) { - ShortcutKey("G") + ShortcutRow(Res.string.shortcuts_subtitle_delay, isTablet) { + ShortcutKey(Res.string.shortcuts_key_g) ShortcutOrText() - ShortcutKey("H") + ShortcutKey(Res.string.shortcuts_key_h) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Turn on / off sub opacity", isTablet) { - ShortcutKey("O") + ShortcutRow(Res.string.shortcuts_toggle_subtitle_opacity, isTablet) { + ShortcutKey(Res.string.shortcuts_key_o) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow("Increase / reduce opacity of subs", isTablet) { - ShortcutKey("I") + ShortcutRow(Res.string.shortcuts_adjust_subtitle_opacity, isTablet) { + ShortcutKey(Res.string.shortcuts_key_i) ShortcutOrText() - ShortcutKey("P") + ShortcutKey(Res.string.shortcuts_key_p) } } } @@ -210,7 +212,7 @@ internal fun LazyListScope.shortcutsSettingsContent( @Composable private fun ShortcutRow( - title: String, + title: StringResource, isTablet: Boolean, keys: @Composable RowScope.() -> Unit, ) { @@ -226,7 +228,7 @@ private fun ShortcutRow( horizontalArrangement = Arrangement.SpaceBetween, ) { Text( - text = title, + text = stringResource(title), style = MaterialTheme.typography.bodyLarge, color = tokens.colors.textPrimary, ) @@ -240,7 +242,7 @@ private fun ShortcutRow( } @Composable -private fun ShortcutKey(label: String) { +private fun ShortcutKey(label: StringResource) { val tokens = MaterialTheme.nuvio Box( modifier = Modifier @@ -257,7 +259,7 @@ private fun ShortcutKey(label: String) { contentAlignment = Alignment.Center, ) { Text( - text = label, + text = stringResource(label), style = MaterialTheme.typography.labelLarge, color = tokens.colors.textPrimary, fontWeight = FontWeight.Bold, @@ -295,7 +297,11 @@ private fun ShortcutIconKey(icon: androidx.compose.ui.graphics.vector.ImageVecto enum class MouseButton { Left, Right, Middle, ScrollUp, ScrollDown, Forward, Backward, None } @Composable -private fun ShortcutMouseKey(button: MouseButton, label: String, modifier: Modifier = Modifier) { +private fun ShortcutMouseKey( + button: MouseButton, + label: StringResource, + modifier: Modifier = Modifier, +) { Box( modifier = modifier .border( @@ -335,7 +341,7 @@ private fun ShortcutMouseKey(button: MouseButton, label: String, modifier: Modif } Text( - text = label, + text = stringResource(label), color = MaterialTheme.nuvio.colors.textPrimary, fontFamily = FontFamily.Monospace, style = MaterialTheme.typography.bodyMedium, @@ -348,7 +354,7 @@ private fun ShortcutMouseKey(button: MouseButton, label: String, modifier: Modif @Composable private fun ShortcutOrText() { Text( - text = "or", + text = stringResource(Res.string.shortcuts_or), style = MaterialTheme.typography.bodyMedium, color = MaterialTheme.nuvio.colors.textSecondary, modifier = Modifier.padding(horizontal = 2.dp) @@ -358,10 +364,9 @@ private fun ShortcutOrText() { @Composable private fun ShortcutPlusText() { Text( - text = "+", + text = stringResource(Res.string.shortcuts_plus), style = MaterialTheme.typography.bodyMedium, color = MaterialTheme.nuvio.colors.textSecondary, modifier = Modifier.padding(horizontal = 2.dp) ) } - From 6c2223dea5f4459ab7accce0aeb1d7f3ada4cabd Mon Sep 17 00:00:00 2001 From: AdityasahuX07 Date: Thu, 10 Sep 2026 00:10:08 +0530 Subject: [PATCH 06/14] Remove backspace shortcut from ShortcutsSettingsPage Removed backspace shortcut from the shortcuts settings. --- .../com/nuvio/app/features/settings/ShortcutsSettingsPage.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt index 0f9001150..46ec9084a 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt @@ -42,8 +42,6 @@ internal fun LazyListScope.shortcutsSettingsContent( ShortcutRow(Res.string.shortcuts_go_back, isTablet) { ShortcutKey(Res.string.shortcuts_key_esc) ShortcutOrText() - ShortcutKey(Res.string.shortcuts_key_backspace) - ShortcutOrText() ShortcutMouseKey(MouseButton.Backward, Res.string.shortcuts_mouse_backward) } SettingsGroupDivider(isTablet = isTablet) From 12664d29ce26f3222593d60626ef4fc0e12fcbcb Mon Sep 17 00:00:00 2001 From: KhooLy <73142442+KhooLy@users.noreply.github.com> Date: Wed, 9 Sep 2026 21:41:40 +0300 Subject: [PATCH 07/14] fix(settings): keep shortcut keys out of localization --- .../composeResources/values/strings.xml | 31 -------- .../settings/ShortcutsSettingsPage.kt | 70 +++++++++---------- 2 files changed, 35 insertions(+), 66 deletions(-) diff --git a/composeApp/src/commonMain/composeResources/values/strings.xml b/composeApp/src/commonMain/composeResources/values/strings.xml index 10ef19069..b29afb9c7 100644 --- a/composeApp/src/commonMain/composeResources/values/strings.xml +++ b/composeApp/src/commonMain/composeResources/values/strings.xml @@ -1716,37 +1716,6 @@ Backward Scroll Up Scroll Down - Esc - Backspace - 1 - 2 - 3 - 4 - / - 0 - Space - K - B - V - M - F11 - F - Enter - A - S - Q - E - Shift - N - Hold Space - ` - < - > - G - H - O - I - P In-app updates are not available on this build. No release notes were provided. Preparing download diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt index 46ec9084a..6a2e8cad9 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt @@ -40,7 +40,7 @@ internal fun LazyListScope.shortcutsSettingsContent( ) { SettingsGroup(isTablet = isTablet) { ShortcutRow(Res.string.shortcuts_go_back, isTablet) { - ShortcutKey(Res.string.shortcuts_key_esc) + ShortcutKey("Esc") ShortcutOrText() ShortcutMouseKey(MouseButton.Backward, Res.string.shortcuts_mouse_backward) } @@ -52,25 +52,25 @@ internal fun LazyListScope.shortcutsSettingsContent( } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_switch_home, isTablet) { - ShortcutKey(Res.string.shortcuts_key_1) + ShortcutKey("1") } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_switch_search, isTablet) { - ShortcutKey(Res.string.shortcuts_key_2) + ShortcutKey("2") } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_switch_library, isTablet) { - ShortcutKey(Res.string.shortcuts_key_3) + ShortcutKey("3") } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_switch_settings, isTablet) { - ShortcutKey(Res.string.shortcuts_key_4) + ShortcutKey("4") } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_activate_search, isTablet) { - ShortcutKey(Res.string.shortcuts_key_slash) + ShortcutKey("/") ShortcutOrText() - ShortcutKey(Res.string.shortcuts_key_0) + ShortcutKey("0") } } } @@ -83,23 +83,23 @@ internal fun LazyListScope.shortcutsSettingsContent( ) { SettingsGroup(isTablet = isTablet) { ShortcutRow(Res.string.shortcuts_play_pause, isTablet) { - ShortcutKey(Res.string.shortcuts_key_space) + ShortcutKey("Space") ShortcutOrText() - ShortcutKey(Res.string.shortcuts_key_k) + ShortcutKey("K") ShortcutOrText() ShortcutMouseKey(MouseButton.Left, Res.string.shortcuts_mouse_left) } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_switch_audio_track, isTablet) { - ShortcutKey(Res.string.shortcuts_key_b) + ShortcutKey("B") } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_toggle_subtitle, isTablet) { - ShortcutKey(Res.string.shortcuts_key_v) + ShortcutKey("V") } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_toggle_mute, isTablet) { - ShortcutKey(Res.string.shortcuts_key_m) + ShortcutKey("M") } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_seek, isTablet) { @@ -123,29 +123,29 @@ internal fun LazyListScope.shortcutsSettingsContent( } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_toggle_fullscreen, isTablet) { - ShortcutKey(Res.string.shortcuts_key_f11) + ShortcutKey("F11") ShortcutOrText() - ShortcutKey(Res.string.shortcuts_key_f) + ShortcutKey("F") } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_skip_intro, isTablet) { - ShortcutKey(Res.string.shortcuts_key_enter) + ShortcutKey("Enter") } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_open_audio_selector, isTablet) { - ShortcutKey(Res.string.shortcuts_key_a) + ShortcutKey("A") } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_open_subtitle_selector, isTablet) { - ShortcutKey(Res.string.shortcuts_key_s) + ShortcutKey("S") } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_open_source_list, isTablet) { - ShortcutKey(Res.string.shortcuts_key_q) + ShortcutKey("Q") } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_open_episode_list, isTablet) { - ShortcutKey(Res.string.shortcuts_key_e) + ShortcutKey("E") } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_move_focus, isTablet) { @@ -159,49 +159,49 @@ internal fun LazyListScope.shortcutsSettingsContent( } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_play_next_episode, isTablet) { - ShortcutKey(Res.string.shortcuts_key_shift) + ShortcutKey("Shift") ShortcutPlusText() - ShortcutKey(Res.string.shortcuts_key_n) + ShortcutKey("N") } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_hold_speed, isTablet) { - ShortcutKey(Res.string.shortcuts_key_hold_space) + ShortcutKey("Hold Space") ShortcutOrText() ShortcutMouseKey(MouseButton.Left, Res.string.shortcuts_mouse_hold_left) } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_open_speed_panel, isTablet) { - ShortcutKey(Res.string.shortcuts_key_backtick) + ShortcutKey("`") } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_speed_control, isTablet) { - ShortcutKey(Res.string.shortcuts_key_shift) + ShortcutKey("Shift") ShortcutPlusText() - ShortcutKey(Res.string.shortcuts_key_less_than) + ShortcutKey("<") ShortcutOrText() - ShortcutKey(Res.string.shortcuts_key_shift) + ShortcutKey("Shift") ShortcutPlusText() - ShortcutKey(Res.string.shortcuts_key_greater_than) + ShortcutKey(">") } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_reset_speed, isTablet) { - ShortcutKey(Res.string.shortcuts_key_slash) + ShortcutKey("/") } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_subtitle_delay, isTablet) { - ShortcutKey(Res.string.shortcuts_key_g) + ShortcutKey("G") ShortcutOrText() - ShortcutKey(Res.string.shortcuts_key_h) + ShortcutKey("H") } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_toggle_subtitle_opacity, isTablet) { - ShortcutKey(Res.string.shortcuts_key_o) + ShortcutKey("O") } SettingsGroupDivider(isTablet = isTablet) ShortcutRow(Res.string.shortcuts_adjust_subtitle_opacity, isTablet) { - ShortcutKey(Res.string.shortcuts_key_i) + ShortcutKey("I") ShortcutOrText() - ShortcutKey(Res.string.shortcuts_key_p) + ShortcutKey("P") } } } @@ -240,7 +240,7 @@ private fun ShortcutRow( } @Composable -private fun ShortcutKey(label: StringResource) { +private fun ShortcutKey(label: String) { val tokens = MaterialTheme.nuvio Box( modifier = Modifier @@ -257,7 +257,7 @@ private fun ShortcutKey(label: StringResource) { contentAlignment = Alignment.Center, ) { Text( - text = stringResource(label), + text = label, style = MaterialTheme.typography.labelLarge, color = tokens.colors.textPrimary, fontWeight = FontWeight.Bold, From 1eed17467bc253e5a4d5eae9a0339e869705b038 Mon Sep 17 00:00:00 2001 From: AdityasahuX07 Date: Thu, 10 Sep 2026 00:29:12 +0530 Subject: [PATCH 08/14] Refactor shortcut strings for settings page --- .../settings/ShortcutsSettingsPage.kt | 109 +++++++++--------- 1 file changed, 52 insertions(+), 57 deletions(-) diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt index 6a2e8cad9..96f707048 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ShortcutsSettingsPage.kt @@ -27,7 +27,6 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import com.nuvio.app.core.ui.nuvio import nuvio.composeapp.generated.resources.* -import org.jetbrains.compose.resources.StringResource import org.jetbrains.compose.resources.stringResource internal fun LazyListScope.shortcutsSettingsContent( @@ -35,39 +34,39 @@ internal fun LazyListScope.shortcutsSettingsContent( ) { item { SettingsSection( - title = stringResource(Res.string.shortcuts_section_general_navigation), + title = stringResource(Res.string.compose_settings_shortcuts_section_general), isTablet = isTablet, ) { SettingsGroup(isTablet = isTablet) { - ShortcutRow(Res.string.shortcuts_go_back, isTablet) { - ShortcutKey("Esc") + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_back), isTablet) { + ShortcutKey(stringResource(Res.string.compose_settings_shortcuts_key_esc)) ShortcutOrText() - ShortcutMouseKey(MouseButton.Backward, Res.string.shortcuts_mouse_backward) + ShortcutMouseKey(MouseButton.Backward, stringResource(Res.string.compose_settings_shortcuts_mouse_backward)) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_show_options, isTablet) { - ShortcutMouseKey(MouseButton.Right, Res.string.shortcuts_mouse_right) + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_options), isTablet) { + ShortcutMouseKey(MouseButton.Right, stringResource(Res.string.compose_settings_shortcuts_mouse_right)) ShortcutOrText() - ShortcutMouseKey(MouseButton.Left, Res.string.shortcuts_mouse_hold_left) + ShortcutMouseKey(MouseButton.Left, stringResource(Res.string.compose_settings_shortcuts_mouse_hold_left)) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_switch_home, isTablet) { + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_home), isTablet) { ShortcutKey("1") } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_switch_search, isTablet) { + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_search), isTablet) { ShortcutKey("2") } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_switch_library, isTablet) { + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_library), isTablet) { ShortcutKey("3") } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_switch_settings, isTablet) { + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_settings), isTablet) { ShortcutKey("4") } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_activate_search, isTablet) { + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_search_box), isTablet) { ShortcutKey("/") ShortcutOrText() ShortcutKey("0") @@ -78,77 +77,77 @@ internal fun LazyListScope.shortcutsSettingsContent( item { SettingsSection( - title = stringResource(Res.string.shortcuts_section_player_playback), + title = stringResource(Res.string.compose_settings_shortcuts_section_player), isTablet = isTablet, ) { SettingsGroup(isTablet = isTablet) { - ShortcutRow(Res.string.shortcuts_play_pause, isTablet) { - ShortcutKey("Space") + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_play_pause), isTablet) { + ShortcutKey(stringResource(Res.string.compose_settings_shortcuts_key_space)) ShortcutOrText() ShortcutKey("K") ShortcutOrText() - ShortcutMouseKey(MouseButton.Left, Res.string.shortcuts_mouse_left) + ShortcutMouseKey(MouseButton.Left, stringResource(Res.string.compose_settings_shortcuts_mouse_left)) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_switch_audio_track, isTablet) { + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_audio_track), isTablet) { ShortcutKey("B") } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_toggle_subtitle, isTablet) { + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_subtitle_toggle), isTablet) { ShortcutKey("V") } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_toggle_mute, isTablet) { + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_mute), isTablet) { ShortcutKey("M") } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_seek, isTablet) { + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_seek), isTablet) { ShortcutIconKey(Icons.Default.KeyboardArrowLeft) ShortcutOrText() ShortcutIconKey(Icons.Default.KeyboardArrowRight) ShortcutOrText() - ShortcutMouseKey(MouseButton.Forward, Res.string.shortcuts_mouse_forward) + ShortcutMouseKey(MouseButton.Forward, stringResource(Res.string.compose_settings_shortcuts_mouse_forward)) ShortcutOrText() - ShortcutMouseKey(MouseButton.Backward, Res.string.shortcuts_mouse_backward) + ShortcutMouseKey(MouseButton.Backward, stringResource(Res.string.compose_settings_shortcuts_mouse_backward)) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_volume, isTablet) { + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_volume), isTablet) { ShortcutIconKey(Icons.Default.KeyboardArrowUp) ShortcutOrText() ShortcutIconKey(Icons.Default.KeyboardArrowDown) ShortcutOrText() - ShortcutMouseKey(MouseButton.ScrollUp, Res.string.shortcuts_mouse_scroll_up) + ShortcutMouseKey(MouseButton.ScrollUp, stringResource(Res.string.compose_settings_shortcuts_mouse_scroll_up)) ShortcutOrText() - ShortcutMouseKey(MouseButton.ScrollDown, Res.string.shortcuts_mouse_scroll_down) + ShortcutMouseKey(MouseButton.ScrollDown, stringResource(Res.string.compose_settings_shortcuts_mouse_scroll_down)) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_toggle_fullscreen, isTablet) { + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_fullscreen), isTablet) { ShortcutKey("F11") ShortcutOrText() ShortcutKey("F") } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_skip_intro, isTablet) { - ShortcutKey("Enter") + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_skip_intro), isTablet) { + ShortcutKey(stringResource(Res.string.compose_settings_shortcuts_key_enter)) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_open_audio_selector, isTablet) { + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_audio_selector), isTablet) { ShortcutKey("A") } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_open_subtitle_selector, isTablet) { + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_subtitle_selector), isTablet) { ShortcutKey("S") } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_open_source_list, isTablet) { + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_source_list), isTablet) { ShortcutKey("Q") } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_open_episode_list, isTablet) { + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_episode_list), isTablet) { ShortcutKey("E") } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_move_focus, isTablet) { + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_focus_options), isTablet) { ShortcutIconKey(Icons.Default.KeyboardArrowUp) ShortcutOrText() ShortcutIconKey(Icons.Default.KeyboardArrowDown) @@ -158,47 +157,47 @@ internal fun LazyListScope.shortcutsSettingsContent( ShortcutIconKey(Icons.Default.KeyboardArrowRight) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_play_next_episode, isTablet) { - ShortcutKey("Shift") + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_next_episode), isTablet) { + ShortcutKey(stringResource(Res.string.compose_settings_shortcuts_key_shift)) ShortcutPlusText() ShortcutKey("N") } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_hold_speed, isTablet) { - ShortcutKey("Hold Space") + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_speed_hold), isTablet) { + ShortcutKey(stringResource(Res.string.compose_settings_shortcuts_key_hold_space)) ShortcutOrText() - ShortcutMouseKey(MouseButton.Left, Res.string.shortcuts_mouse_hold_left) + ShortcutMouseKey(MouseButton.Left, stringResource(Res.string.compose_settings_shortcuts_mouse_hold_left)) } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_open_speed_panel, isTablet) { + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_speed_panel), isTablet) { ShortcutKey("`") } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_speed_control, isTablet) { - ShortcutKey("Shift") + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_speed_control), isTablet) { + ShortcutKey(stringResource(Res.string.compose_settings_shortcuts_key_shift)) ShortcutPlusText() ShortcutKey("<") ShortcutOrText() - ShortcutKey("Shift") + ShortcutKey(stringResource(Res.string.compose_settings_shortcuts_key_shift)) ShortcutPlusText() ShortcutKey(">") } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_reset_speed, isTablet) { + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_speed_reset), isTablet) { ShortcutKey("/") } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_subtitle_delay, isTablet) { + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_subtitle_delay), isTablet) { ShortcutKey("G") ShortcutOrText() ShortcutKey("H") } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_toggle_subtitle_opacity, isTablet) { + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_sub_opacity_toggle), isTablet) { ShortcutKey("O") } SettingsGroupDivider(isTablet = isTablet) - ShortcutRow(Res.string.shortcuts_adjust_subtitle_opacity, isTablet) { + ShortcutRow(stringResource(Res.string.compose_settings_shortcuts_row_sub_opacity_adjust), isTablet) { ShortcutKey("I") ShortcutOrText() ShortcutKey("P") @@ -210,7 +209,7 @@ internal fun LazyListScope.shortcutsSettingsContent( @Composable private fun ShortcutRow( - title: StringResource, + title: String, isTablet: Boolean, keys: @Composable RowScope.() -> Unit, ) { @@ -226,7 +225,7 @@ private fun ShortcutRow( horizontalArrangement = Arrangement.SpaceBetween, ) { Text( - text = stringResource(title), + text = title, style = MaterialTheme.typography.bodyLarge, color = tokens.colors.textPrimary, ) @@ -295,11 +294,7 @@ private fun ShortcutIconKey(icon: androidx.compose.ui.graphics.vector.ImageVecto enum class MouseButton { Left, Right, Middle, ScrollUp, ScrollDown, Forward, Backward, None } @Composable -private fun ShortcutMouseKey( - button: MouseButton, - label: StringResource, - modifier: Modifier = Modifier, -) { +private fun ShortcutMouseKey(button: MouseButton, label: String, modifier: Modifier = Modifier) { Box( modifier = modifier .border( @@ -339,7 +334,7 @@ private fun ShortcutMouseKey( } Text( - text = stringResource(label), + text = label, color = MaterialTheme.nuvio.colors.textPrimary, fontFamily = FontFamily.Monospace, style = MaterialTheme.typography.bodyMedium, @@ -352,7 +347,7 @@ private fun ShortcutMouseKey( @Composable private fun ShortcutOrText() { Text( - text = stringResource(Res.string.shortcuts_or), + text = stringResource(Res.string.compose_settings_shortcuts_or), style = MaterialTheme.typography.bodyMedium, color = MaterialTheme.nuvio.colors.textSecondary, modifier = Modifier.padding(horizontal = 2.dp) @@ -362,7 +357,7 @@ private fun ShortcutOrText() { @Composable private fun ShortcutPlusText() { Text( - text = stringResource(Res.string.shortcuts_plus), + text = "+", style = MaterialTheme.typography.bodyMedium, color = MaterialTheme.nuvio.colors.textSecondary, modifier = Modifier.padding(horizontal = 2.dp) From d5b77bb3aa0e547faa0b30f014ac2cd244df14ad Mon Sep 17 00:00:00 2001 From: AdityasahuX07 Date: Thu, 10 Sep 2026 00:35:12 +0530 Subject: [PATCH 09/14] Add custom theme strings and update shortcuts Added new strings for custom themes and shortcuts. --- .../composeResources/values/strings.xml | 100 +++++++++++------- 1 file changed, 61 insertions(+), 39 deletions(-) diff --git a/composeApp/src/commonMain/composeResources/values/strings.xml b/composeApp/src/commonMain/composeResources/values/strings.xml index b29afb9c7..4429c0b59 100644 --- a/composeApp/src/commonMain/composeResources/values/strings.xml +++ b/composeApp/src/commonMain/composeResources/values/strings.xml @@ -1391,6 +1391,23 @@ Rose Violet White + Custom + Your custom gradient + Choose three colors for your theme. Select a color to edit it. + Edit custom theme + Your custom color + Choose a color for your theme. + Gradient + Single color + Color %1$d + Hue + Saturation + Brightness + Hex color + Enter six characters (0–9, A–F), with or without #. + Save theme + Preview + Your accent Next Episode Finding source… Playing via %1$s in %2$d… @@ -1677,45 +1694,50 @@ A new version is ready to install. Shortcuts Keyboard and mouse shortcuts. - GENERAL & NAVIGATION - PLAYER – PLAYBACK - Go back / previous screen - Show options - Switch to home - Switch to search - Switch to library - Switch to settings - Activate search box - Play / Pause - Sequential switch audio track - Toggle enable / disable subtitle - Toggle mute state - Seek forward or backward - Volume up / down - Toggle app fullscreen - Skip intro - Open audio selector window - Open subtitle selector window - Open source list window - Open episode list window - Move focus and options - Play next episode - Hold to speed up playback - Open playback speed panel - Playback speed control - Reset playback speed to 1x - Decrease / increase subtitle delay - Turn on / off sub opacity - Increase / reduce opacity of subs - or - + - Left - Right - Hold Left - Forward - Backward - Scroll Up - Scroll Down + GENERAL & NAVIGATION + PLAYER – PLAYBACK + Go back / previous screen + Show options + Switch to home + Switch to search + Switch to library + Switch to settings + Activate search box + Play / Pause + Sequential switch audio track + Toggle enable / disable subtitle + Toggle mute state + Seek forward or backward + Volume up / down + Toggle app fullscreen + Skip intro + Open audio selector window + Open subtitle selector window + Open source list window + Open episode list window + Move focus and options + Play next episode + Hold to speed up playback + Open playback speed panel + Playback speed control + Reset playback speed to 1x + Decrease / increase subtitle delay + Turn on / off sub opacity + Increase / reduce opacity of subs + or + Esc + Backspace + Space + Enter + Shift + Hold Space + Left + Hold Left + Right + Forward + Backward + Scroll Up + Scroll Down In-app updates are not available on this build. No release notes were provided. Preparing download From ba3d36e9c10e94e328a3332931599204baefb0f8 Mon Sep 17 00:00:00 2001 From: AdityasahuX07 Date: Thu, 10 Sep 2026 00:36:45 +0530 Subject: [PATCH 10/14] Delete composeApp/src/commonMain/composeResources/drawable/mouse_m4_button_16.svg --- .../commonMain/composeResources/drawable/mouse_m4_button_16.svg | 1 - 1 file changed, 1 deletion(-) delete mode 100644 composeApp/src/commonMain/composeResources/drawable/mouse_m4_button_16.svg diff --git a/composeApp/src/commonMain/composeResources/drawable/mouse_m4_button_16.svg b/composeApp/src/commonMain/composeResources/drawable/mouse_m4_button_16.svg deleted file mode 100644 index 4e418198b..000000000 --- a/composeApp/src/commonMain/composeResources/drawable/mouse_m4_button_16.svg +++ /dev/null @@ -1 +0,0 @@ - From e163ee70a83cef29bebe31ced57bc757956b0525 Mon Sep 17 00:00:00 2001 From: AdityasahuX07 Date: Thu, 10 Sep 2026 00:37:07 +0530 Subject: [PATCH 11/14] Delete composeApp/src/commonMain/composeResources/drawable/mouse_m5_button_16.svg --- .../commonMain/composeResources/drawable/mouse_m5_button_16.svg | 1 - 1 file changed, 1 deletion(-) delete mode 100644 composeApp/src/commonMain/composeResources/drawable/mouse_m5_button_16.svg diff --git a/composeApp/src/commonMain/composeResources/drawable/mouse_m5_button_16.svg b/composeApp/src/commonMain/composeResources/drawable/mouse_m5_button_16.svg deleted file mode 100644 index aa9be7f4f..000000000 --- a/composeApp/src/commonMain/composeResources/drawable/mouse_m5_button_16.svg +++ /dev/null @@ -1 +0,0 @@ - From 3d784a4aa55306b0d1ee7dfba0d48804cd8b193c Mon Sep 17 00:00:00 2001 From: AdityasahuX07 Date: Thu, 10 Sep 2026 00:39:40 +0530 Subject: [PATCH 12/14] Add files via upload --- .../commonMain/composeResources/drawable/mouse_m4_button_16.svg | 1 + .../commonMain/composeResources/drawable/mouse_m5_button_16.svg | 1 + 2 files changed, 2 insertions(+) create mode 100644 composeApp/src/commonMain/composeResources/drawable/mouse_m4_button_16.svg create mode 100644 composeApp/src/commonMain/composeResources/drawable/mouse_m5_button_16.svg diff --git a/composeApp/src/commonMain/composeResources/drawable/mouse_m4_button_16.svg b/composeApp/src/commonMain/composeResources/drawable/mouse_m4_button_16.svg new file mode 100644 index 000000000..4e418198b --- /dev/null +++ b/composeApp/src/commonMain/composeResources/drawable/mouse_m4_button_16.svg @@ -0,0 +1 @@ + diff --git a/composeApp/src/commonMain/composeResources/drawable/mouse_m5_button_16.svg b/composeApp/src/commonMain/composeResources/drawable/mouse_m5_button_16.svg new file mode 100644 index 000000000..aa9be7f4f --- /dev/null +++ b/composeApp/src/commonMain/composeResources/drawable/mouse_m5_button_16.svg @@ -0,0 +1 @@ + From 52af690a96dddf6b2e4ad22617772e3425a424c8 Mon Sep 17 00:00:00 2001 From: AdityasahuX07 Date: Thu, 10 Sep 2026 13:48:01 +0530 Subject: [PATCH 13/14] Remove unused theme strings and backspace key string Removed several theme strings and a backspace key string from the XML resource file. --- .../src/commonMain/composeResources/values/strings.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/composeApp/src/commonMain/composeResources/values/strings.xml b/composeApp/src/commonMain/composeResources/values/strings.xml index 4429c0b59..092944f4c 100644 --- a/composeApp/src/commonMain/composeResources/values/strings.xml +++ b/composeApp/src/commonMain/composeResources/values/strings.xml @@ -1,9 +1,4 @@ - Gold - Jade - Rose Gold - Arctic Blue - Graphite Choose Profile Background Custom background URLs can be configured from the Nuvio web panel. Normal @@ -1726,7 +1721,6 @@ Increase / reduce opacity of subs or Esc - Backspace Space Enter Shift From 8812cbd4c870cf8db48777c3c7121f7204f4e566 Mon Sep 17 00:00:00 2001 From: AdityasahuX07 Date: Thu, 10 Sep 2026 13:52:18 +0530 Subject: [PATCH 14/14] Fix missing newline at end of ShortcutsSettingsPage.kt