feat(player-options): enhance options menu with localized strings and icons

This commit is contained in:
Kingkor Roy Tirtho 2026-09-25 15:03:24 +06:00
parent 1e6aee142b
commit df3dd2ad88
3 changed files with 33 additions and 29 deletions

View File

@ -187,5 +187,9 @@
<string name="settings_jam_broker_test_ok">Connected in %1$d ms</string> <string name="settings_jam_broker_test_ok">Connected in %1$d ms</string>
<string name="settings_jam_broker_test_fail">Failed: %1$s</string> <string name="settings_jam_broker_test_fail">Failed: %1$s</string>
<string name="settings_jam_broker_placeholder_note">Placeholder broker — configure your own to self-host</string> <string name="settings_jam_broker_placeholder_note">Placeholder broker — configure your own to self-host</string>
<string name="player_go_to_album">Go to album</string>
<string name="player_sleep_timer">Sleep timer</string>
<string name="player_track_details">Track details</string>
</resources> </resources>

View File

@ -1,26 +0,0 @@
/*
* Copyright (C) 2026 Kingkor Roy Tirtho and Spotube Contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package dev.krtirtho.spotube
class Greeting {
private val platform = getPlatform()
fun greet(): String {
return "Hello, ${platform.name}!"
}
}

View File

@ -82,7 +82,9 @@ import dev.krtirtho.spotube.modules.saved_tracks.SAVED_TRACKS_COLLECTION_ID
import dev.krtirtho.spotube.modules.saved_tracks.SavedTracksViewModel import dev.krtirtho.spotube.modules.saved_tracks.SavedTracksViewModel
import dev.krtirtho.spotube.resources.iconsax.Iconsax import dev.krtirtho.spotube.resources.iconsax.Iconsax
import dev.krtirtho.spotube.resources.iconsax.Iconsax3DotsMore import dev.krtirtho.spotube.resources.iconsax.Iconsax3DotsMore
import dev.krtirtho.spotube.resources.iconsax.IconsaxCd
import dev.krtirtho.spotube.resources.iconsax.IconsaxDirectboxReceive import dev.krtirtho.spotube.resources.iconsax.IconsaxDirectboxReceive
import dev.krtirtho.spotube.resources.iconsax.IconsaxInformation
import dev.krtirtho.spotube.resources.iconsax.IconsaxMusic import dev.krtirtho.spotube.resources.iconsax.IconsaxMusic
import dev.krtirtho.spotube.resources.iconsax.IconsaxMusicFilter import dev.krtirtho.spotube.resources.iconsax.IconsaxMusicFilter
import dev.krtirtho.spotube.resources.iconsax.IconsaxNext import dev.krtirtho.spotube.resources.iconsax.IconsaxNext
@ -96,12 +98,18 @@ import dev.krtirtho.spotube.resources.iconsax.IconsaxShuffle
import dev.krtirtho.spotube.resources.iconsax.IconsaxVolumeCross import dev.krtirtho.spotube.resources.iconsax.IconsaxVolumeCross
import dev.krtirtho.spotube.resources.iconsax.IconsaxVolumeHigh import dev.krtirtho.spotube.resources.iconsax.IconsaxVolumeHigh
import dev.krtirtho.spotube.resources.iconsax.IconsaxVolumeLow import dev.krtirtho.spotube.resources.iconsax.IconsaxVolumeLow
import dev.krtirtho.spotube.resources.iconsax.InconsaxClock
import dev.krtirtho.spotube.resources.iconsax.SwapHorizontal2 import dev.krtirtho.spotube.resources.iconsax.SwapHorizontal2
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.jetbrains.compose.resources.stringResource
import org.koin.compose.koinInject import org.koin.compose.koinInject
import org.koin.compose.viewmodel.koinViewModel import org.koin.compose.viewmodel.koinViewModel
import org.koin.core.parameter.parametersOf import org.koin.core.parameter.parametersOf
import spotube.composeapp.generated.resources.Res
import spotube.composeapp.generated.resources.player_go_to_album
import spotube.composeapp.generated.resources.player_sleep_timer
import spotube.composeapp.generated.resources.player_track_details
import kotlin.time.Duration.Companion.milliseconds import kotlin.time.Duration.Companion.milliseconds
@ -405,7 +413,13 @@ fun AppLargePlayer(
onDismissRequest = playerOptionsViewModel::dismissMoreOptionsMenu, onDismissRequest = playerOptionsViewModel::dismissMoreOptionsMenu,
) { ) {
DropdownMenuItem( DropdownMenuItem(
text = { Text("Go to album") }, text = { Text(stringResource(Res.string.player_go_to_album)) },
leadingIcon = {
Icon(
imageVector = Iconsax.IconsaxCd,
contentDescription = null,
)
},
enabled = currentTrack?.album?.id != null, enabled = currentTrack?.album?.id != null,
onClick = { onClick = {
playerOptionsViewModel.dismissMoreOptionsMenu() playerOptionsViewModel.dismissMoreOptionsMenu()
@ -415,14 +429,26 @@ fun AppLargePlayer(
}, },
) )
DropdownMenuItem( DropdownMenuItem(
text = { Text("Sleep timer") }, text = { Text(stringResource(Res.string.player_sleep_timer)) },
leadingIcon = {
Icon(
imageVector = Iconsax.InconsaxClock,
contentDescription = null,
)
},
onClick = { onClick = {
playerOptionsViewModel.dismissMoreOptionsMenu() playerOptionsViewModel.dismissMoreOptionsMenu()
playerOptionsViewModel.showSleepTimerDialog() playerOptionsViewModel.showSleepTimerDialog()
}, },
) )
DropdownMenuItem( DropdownMenuItem(
text = { Text("Track details") }, text = { Text(stringResource(Res.string.player_track_details)) },
leadingIcon = {
Icon(
imageVector = Iconsax.IconsaxInformation,
contentDescription = null,
)
},
enabled = currentTrack != null, enabled = currentTrack != null,
onClick = { onClick = {
playerOptionsViewModel.dismissMoreOptionsMenu() playerOptionsViewModel.dismissMoreOptionsMenu()