ui: add basic bar actions [#108]
Add the ability to customize the bar action to the repeat mode or shuffle state. This is a much smaller implementation than what I planned, mostly because other options did not make much sense (queue) or were superceded by better options (clear state). Resolves #108.
This commit is contained in:
parent
ce2e950a9b
commit
68ca9973df
25 changed files with 197 additions and 109 deletions
|
@ -3,9 +3,12 @@
|
|||
## dev
|
||||
|
||||
#### What's New
|
||||
- Added basic equalizer support in external apps like Wavelet
|
||||
- Added basic equalizer support in external apps like Wavelet [#211]
|
||||
- Detail UI now displays the type of item shown (ex. the release type)
|
||||
|
||||
#### What's Improved
|
||||
- Queue now scrolls to currently playing song instead of the song after it
|
||||
|
||||
#### What's Fixed
|
||||
- Fixed incorrect font being used in the queue title
|
||||
- Fixed missing fast scroll indicator with date added scrolling
|
||||
|
|
|
@ -116,4 +116,11 @@ object IntegerTable {
|
|||
const val REPLAY_GAIN_MODE_ALBUM = 0xA112
|
||||
/** ReplayGainMode.Dynamic */
|
||||
const val REPLAY_GAIN_MODE_DYNAMIC = 0xA113
|
||||
|
||||
/** BarAction.Next */
|
||||
const val BAR_ACTION_NEXT = 0xA119
|
||||
/** BarAction.Repeat */
|
||||
const val BAR_ACTION_REPEAT = 0xA11A
|
||||
/** BarAction.Shuffle */
|
||||
const val BAR_ACTION_SHUFFLE = 0xA11B
|
||||
}
|
||||
|
|
|
@ -42,7 +42,7 @@ import org.oxycblt.auxio.util.logEOrThrow
|
|||
*/
|
||||
class AlbumListFragment : HomeListFragment<Album>() {
|
||||
private val homeAdapter = AlbumAdapter(this)
|
||||
private val formatterSb = StringBuilder(50)
|
||||
private val formatterSb = StringBuilder(32)
|
||||
private val formatter = Formatter(formatterSb)
|
||||
|
||||
override fun onBindingCreated(binding: FragmentHomeListBinding, savedInstanceState: Bundle?) {
|
||||
|
|
|
@ -20,14 +20,18 @@ package org.oxycblt.auxio.playback
|
|||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import org.oxycblt.auxio.IntegerTable
|
||||
import org.oxycblt.auxio.R
|
||||
import org.oxycblt.auxio.databinding.FragmentPlaybackBarBinding
|
||||
import org.oxycblt.auxio.music.Song
|
||||
import org.oxycblt.auxio.playback.state.RepeatMode
|
||||
import org.oxycblt.auxio.settings.Settings
|
||||
import org.oxycblt.auxio.ui.MainNavigationAction
|
||||
import org.oxycblt.auxio.ui.NavigationViewModel
|
||||
import org.oxycblt.auxio.ui.fragment.ViewBindingFragment
|
||||
import org.oxycblt.auxio.util.androidActivityViewModels
|
||||
import org.oxycblt.auxio.util.collectImmediately
|
||||
import org.oxycblt.auxio.util.getAttrColorCompat
|
||||
import org.oxycblt.auxio.util.getColorCompat
|
||||
|
||||
/**
|
||||
|
@ -46,6 +50,8 @@ class PlaybackBarFragment : ViewBindingFragment<FragmentPlaybackBarBinding>() {
|
|||
binding: FragmentPlaybackBarBinding,
|
||||
savedInstanceState: Bundle?
|
||||
) {
|
||||
val context = requireContext()
|
||||
|
||||
binding.root.apply {
|
||||
setOnClickListener { navModel.mainNavigateTo(MainNavigationAction.Expand) }
|
||||
|
||||
|
@ -58,11 +64,39 @@ class PlaybackBarFragment : ViewBindingFragment<FragmentPlaybackBarBinding>() {
|
|||
// Load the track color in manually as it's unclear whether the track actually supports
|
||||
// using a ColorStateList in the resources
|
||||
binding.playbackProgressBar.trackColor =
|
||||
requireContext().getColorCompat(R.color.sel_track).defaultColor
|
||||
context.getColorCompat(R.color.sel_track).defaultColor
|
||||
|
||||
binding.playbackPlayPause.setOnClickListener { playbackModel.invertPlaying() }
|
||||
|
||||
binding.playbackSkipNext.setOnClickListener { playbackModel.next() }
|
||||
// Update the secondary action to match the setting.
|
||||
|
||||
when (Settings(context).barAction) {
|
||||
BarAction.NEXT -> {
|
||||
binding.playbackSecondaryAction.apply {
|
||||
setIconResource(R.drawable.ic_skip_next_24)
|
||||
contentDescription = getString(R.string.desc_skip_next)
|
||||
iconTint = context.getAttrColorCompat(R.attr.colorOnSurfaceVariant)
|
||||
setOnClickListener { playbackModel.next() }
|
||||
}
|
||||
}
|
||||
BarAction.REPEAT -> {
|
||||
binding.playbackSecondaryAction.apply {
|
||||
contentDescription = getString(R.string.desc_change_repeat)
|
||||
iconTint = context.getColorCompat(R.color.sel_accented)
|
||||
setOnClickListener { playbackModel.incrementRepeatMode() }
|
||||
collectImmediately(playbackModel.repeatMode, ::updateRepeat)
|
||||
}
|
||||
}
|
||||
BarAction.SHUFFLE -> {
|
||||
binding.playbackSecondaryAction.apply {
|
||||
setIconResource(R.drawable.sel_shuffle_state_24)
|
||||
contentDescription = getString(R.string.desc_shuffle)
|
||||
iconTint = context.getColorCompat(R.color.sel_accented)
|
||||
setOnClickListener { playbackModel.invertShuffled() }
|
||||
collectImmediately(playbackModel.isShuffled, ::updateShuffled)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -- VIEWMODEL SETUP ---
|
||||
|
||||
|
@ -86,7 +120,36 @@ class PlaybackBarFragment : ViewBindingFragment<FragmentPlaybackBarBinding>() {
|
|||
requireBinding().playbackPlayPause.isActivated = isPlaying
|
||||
}
|
||||
|
||||
private fun updateRepeat(repeatMode: RepeatMode) {
|
||||
requireBinding().playbackSecondaryAction.apply {
|
||||
setIconResource(repeatMode.icon)
|
||||
isActivated = repeatMode != RepeatMode.NONE
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateShuffled(isShuffled: Boolean) {
|
||||
requireBinding().playbackSecondaryAction.isActivated = isShuffled
|
||||
}
|
||||
|
||||
private fun updatePosition(position: Long) {
|
||||
requireBinding().playbackProgressBar.progress = position.toInt()
|
||||
}
|
||||
}
|
||||
|
||||
/** Represents the action that should be shown on the playback bar. */
|
||||
enum class BarAction {
|
||||
NEXT,
|
||||
REPEAT,
|
||||
SHUFFLE;
|
||||
|
||||
companion object {
|
||||
/** Convert an int [code] into an instance, or null if it isn't valid. */
|
||||
fun fromIntCode(code: Int) =
|
||||
when (code) {
|
||||
IntegerTable.BAR_ACTION_NEXT -> NEXT
|
||||
IntegerTable.BAR_ACTION_REPEAT -> REPEAT
|
||||
IntegerTable.BAR_ACTION_SHUFFLE -> SHUFFLE
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,7 +34,6 @@ import org.oxycblt.auxio.ui.NavigationViewModel
|
|||
import org.oxycblt.auxio.ui.fragment.ViewBindingFragment
|
||||
import org.oxycblt.auxio.util.androidActivityViewModels
|
||||
import org.oxycblt.auxio.util.collectImmediately
|
||||
import org.oxycblt.auxio.util.getDrawableCompat
|
||||
import org.oxycblt.auxio.util.systemBarInsetsCompat
|
||||
|
||||
/**
|
||||
|
@ -158,15 +157,8 @@ class PlaybackPanelFragment :
|
|||
}
|
||||
|
||||
private fun updateRepeat(repeatMode: RepeatMode) {
|
||||
val iconRes =
|
||||
when (repeatMode) {
|
||||
RepeatMode.NONE -> R.drawable.ic_repeat_off_24
|
||||
RepeatMode.ALL -> R.drawable.ic_repeat_on_24
|
||||
RepeatMode.TRACK -> R.drawable.ic_repeat_one_24
|
||||
}
|
||||
|
||||
requireBinding().playbackRepeat.apply {
|
||||
icon = requireContext().getDrawableCompat(iconRes)
|
||||
setIconResource(repeatMode.icon)
|
||||
isActivated = repeatMode != RepeatMode.NONE
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
package org.oxycblt.auxio.playback.state
|
||||
|
||||
import org.oxycblt.auxio.IntegerTable
|
||||
import org.oxycblt.auxio.R
|
||||
|
||||
/**
|
||||
* Enum that determines the playback repeat mode.
|
||||
|
@ -36,6 +37,15 @@ enum class RepeatMode {
|
|||
TRACK -> NONE
|
||||
}
|
||||
|
||||
/** The icon representing this particular mode. */
|
||||
val icon: Int
|
||||
get() =
|
||||
when (this) {
|
||||
NONE -> R.drawable.ic_repeat_off_24
|
||||
ALL -> R.drawable.ic_repeat_on_24
|
||||
TRACK -> R.drawable.ic_repeat_one_24
|
||||
}
|
||||
|
||||
/** The integer code representing this particular mode. */
|
||||
val intCode: Int
|
||||
get() =
|
||||
|
|
|
@ -117,14 +117,7 @@ class NotificationComponent(private val context: Context, sessionToken: MediaSes
|
|||
context: Context,
|
||||
repeatMode: RepeatMode
|
||||
): NotificationCompat.Action {
|
||||
val drawableRes =
|
||||
when (repeatMode) {
|
||||
RepeatMode.NONE -> R.drawable.ic_repeat_off_24
|
||||
RepeatMode.ALL -> R.drawable.ic_repeat_on_24
|
||||
RepeatMode.TRACK -> R.drawable.ic_repeat_one_24
|
||||
}
|
||||
|
||||
return buildAction(context, PlaybackService.ACTION_INC_REPEAT_MODE, drawableRes)
|
||||
return buildAction(context, PlaybackService.ACTION_INC_REPEAT_MODE, repeatMode.icon)
|
||||
}
|
||||
|
||||
private fun buildShuffleAction(
|
||||
|
|
|
@ -203,19 +203,15 @@ class PlaybackService :
|
|||
}
|
||||
|
||||
override fun onPlaybackStateChanged(state: Int) {
|
||||
when (state) {
|
||||
Player.STATE_ENDED -> {
|
||||
logD("State ended")
|
||||
if (playbackManager.repeatMode == RepeatMode.TRACK) {
|
||||
playbackManager.rewind()
|
||||
if (settings.pauseOnRepeat) {
|
||||
playbackManager.isPlaying = false
|
||||
}
|
||||
} else {
|
||||
playbackManager.next()
|
||||
if (state == Player.STATE_ENDED) {
|
||||
if (playbackManager.repeatMode == RepeatMode.TRACK) {
|
||||
playbackManager.rewind()
|
||||
if (settings.pauseOnRepeat) {
|
||||
playbackManager.isPlaying = false
|
||||
}
|
||||
} else {
|
||||
playbackManager.next()
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -274,7 +270,7 @@ class PlaybackService :
|
|||
player.prepare()
|
||||
|
||||
if (!openAudioEffectSession) {
|
||||
// Wavelet does not like it if you start an audio effect session without having
|
||||
// Android does not like it if you start an audio effect session without having
|
||||
// something within your player buffer. Make sure we only start one when we load
|
||||
// a song.
|
||||
broadcastAudioEffectAction(AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION)
|
||||
|
|
|
@ -27,6 +27,7 @@ import org.oxycblt.auxio.R
|
|||
import org.oxycblt.auxio.home.tabs.Tab
|
||||
import org.oxycblt.auxio.music.Directory
|
||||
import org.oxycblt.auxio.music.dirs.MusicDirs
|
||||
import org.oxycblt.auxio.playback.BarAction
|
||||
import org.oxycblt.auxio.playback.replaygain.ReplayGainMode
|
||||
import org.oxycblt.auxio.playback.replaygain.ReplayGainPreAmp
|
||||
import org.oxycblt.auxio.playback.state.PlaybackMode
|
||||
|
@ -91,13 +92,6 @@ class Settings(private val context: Context, private val callback: Callback? = n
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether to display the RepeatMode or the shuffle status on the notification. False if repeat,
|
||||
* true if shuffle.
|
||||
*/
|
||||
val useAltNotifAction: Boolean
|
||||
get() = inner.getBoolean(context.getString(R.string.set_key_alt_notif_action), false)
|
||||
|
||||
/** The current library tabs preferred by the user. */
|
||||
var libTabs: Array<Tab>
|
||||
get() =
|
||||
|
@ -123,6 +117,19 @@ class Settings(private val context: Context, private val callback: Callback? = n
|
|||
val roundMode: Boolean
|
||||
get() = inner.getBoolean(context.getString(R.string.set_key_round_mode), false)
|
||||
|
||||
/** Which action to display on the playback bar. */
|
||||
val barAction: BarAction
|
||||
get() =
|
||||
BarAction.fromIntCode(inner.getInt(context.getString(R.string.set_key_bar_action), -1))
|
||||
?: BarAction.NEXT
|
||||
|
||||
/**
|
||||
* Whether to display the RepeatMode or the shuffle status on the notification. False if repeat,
|
||||
* true if shuffle.
|
||||
*/
|
||||
val useAltNotifAction: Boolean
|
||||
get() = inner.getBoolean(context.getString(R.string.set_key_alt_notif_action), false)
|
||||
|
||||
/** Whether to resume playback when a headset is connected (may not work well in all cases) */
|
||||
val headsetAutoplay: Boolean
|
||||
get() = inner.getBoolean(context.getString(R.string.set_key_headset_autoplay), false)
|
||||
|
@ -131,7 +138,7 @@ class Settings(private val context: Context, private val callback: Callback? = n
|
|||
val replayGainMode: ReplayGainMode
|
||||
get() =
|
||||
ReplayGainMode.fromIntCode(
|
||||
inner.getInt(context.getString(R.string.set_key_replay_gain), Int.MIN_VALUE))
|
||||
inner.getInt(context.getString(R.string.set_key_replay_gain), -1))
|
||||
?: ReplayGainMode.OFF
|
||||
|
||||
/** The current ReplayGain pre-amp configuration */
|
||||
|
@ -152,8 +159,7 @@ class Settings(private val context: Context, private val callback: Callback? = n
|
|||
val libPlaybackMode: PlaybackMode
|
||||
get() =
|
||||
PlaybackMode.fromInt(
|
||||
inner.getInt(
|
||||
context.getString(R.string.set_key_library_song_playback_mode), Int.MIN_VALUE))
|
||||
inner.getInt(context.getString(R.string.set_key_library_song_playback_mode), -1))
|
||||
?: PlaybackMode.ALL_SONGS
|
||||
|
||||
/**
|
||||
|
@ -163,8 +169,7 @@ class Settings(private val context: Context, private val callback: Callback? = n
|
|||
val detailPlaybackMode: PlaybackMode?
|
||||
get() =
|
||||
PlaybackMode.fromInt(
|
||||
inner.getInt(
|
||||
context.getString(R.string.set_key_detail_song_playback_mode), Int.MIN_VALUE))
|
||||
inner.getInt(context.getString(R.string.set_key_detail_song_playback_mode), -1))
|
||||
|
||||
/** Whether shuffle should stay on when a new song is selected. */
|
||||
val keepShuffle: Boolean
|
||||
|
@ -214,14 +219,11 @@ class Settings(private val context: Context, private val callback: Callback? = n
|
|||
/** The current filter mode of the search tab */
|
||||
var searchFilterMode: DisplayMode?
|
||||
get() =
|
||||
DisplayMode.fromInt(
|
||||
inner.getInt(context.getString(R.string.set_key_search_filter), Int.MIN_VALUE))
|
||||
DisplayMode.fromInt(inner.getInt(context.getString(R.string.set_key_search_filter), -1))
|
||||
set(value) {
|
||||
logD(value)
|
||||
inner.edit {
|
||||
putInt(
|
||||
context.getString(R.string.set_key_search_filter),
|
||||
value?.intCode ?: Int.MIN_VALUE)
|
||||
putInt(context.getString(R.string.set_key_search_filter), value?.intCode ?: -1)
|
||||
apply()
|
||||
}
|
||||
}
|
||||
|
@ -229,8 +231,7 @@ class Settings(private val context: Context, private val callback: Callback? = n
|
|||
/** The song sort mode on HomeFragment */
|
||||
var libSongSort: Sort
|
||||
get() =
|
||||
Sort.fromIntCode(
|
||||
inner.getInt(context.getString(R.string.set_key_lib_songs_sort), Int.MIN_VALUE))
|
||||
Sort.fromIntCode(inner.getInt(context.getString(R.string.set_key_lib_songs_sort), -1))
|
||||
?: Sort(Sort.Mode.ByName, true)
|
||||
set(value) {
|
||||
inner.edit {
|
||||
|
@ -242,8 +243,7 @@ class Settings(private val context: Context, private val callback: Callback? = n
|
|||
/** The album sort mode on HomeFragment */
|
||||
var libAlbumSort: Sort
|
||||
get() =
|
||||
Sort.fromIntCode(
|
||||
inner.getInt(context.getString(R.string.set_key_lib_albums_sort), Int.MIN_VALUE))
|
||||
Sort.fromIntCode(inner.getInt(context.getString(R.string.set_key_lib_albums_sort), -1))
|
||||
?: Sort(Sort.Mode.ByName, true)
|
||||
set(value) {
|
||||
inner.edit {
|
||||
|
@ -255,8 +255,7 @@ class Settings(private val context: Context, private val callback: Callback? = n
|
|||
/** The artist sort mode on HomeFragment */
|
||||
var libArtistSort: Sort
|
||||
get() =
|
||||
Sort.fromIntCode(
|
||||
inner.getInt(context.getString(R.string.set_key_lib_artists_sort), Int.MIN_VALUE))
|
||||
Sort.fromIntCode(inner.getInt(context.getString(R.string.set_key_lib_artists_sort), -1))
|
||||
?: Sort(Sort.Mode.ByName, true)
|
||||
set(value) {
|
||||
inner.edit {
|
||||
|
@ -268,8 +267,7 @@ class Settings(private val context: Context, private val callback: Callback? = n
|
|||
/** The genre sort mode on HomeFragment */
|
||||
var libGenreSort: Sort
|
||||
get() =
|
||||
Sort.fromIntCode(
|
||||
inner.getInt(context.getString(R.string.set_key_lib_genres_sort), Int.MIN_VALUE))
|
||||
Sort.fromIntCode(inner.getInt(context.getString(R.string.set_key_lib_genres_sort), -1))
|
||||
?: Sort(Sort.Mode.ByName, true)
|
||||
set(value) {
|
||||
inner.edit {
|
||||
|
@ -283,8 +281,7 @@ class Settings(private val context: Context, private val callback: Callback? = n
|
|||
get() {
|
||||
var sort =
|
||||
Sort.fromIntCode(
|
||||
inner.getInt(
|
||||
context.getString(R.string.set_key_detail_album_sort), Int.MIN_VALUE))
|
||||
inner.getInt(context.getString(R.string.set_key_detail_album_sort), -1))
|
||||
?: Sort(Sort.Mode.ByDisc, true)
|
||||
|
||||
// Correct legacy album sort modes to Disc
|
||||
|
@ -305,7 +302,7 @@ class Settings(private val context: Context, private val callback: Callback? = n
|
|||
var detailArtistSort: Sort
|
||||
get() =
|
||||
Sort.fromIntCode(
|
||||
inner.getInt(context.getString(R.string.set_key_detail_artist_sort), Int.MIN_VALUE))
|
||||
inner.getInt(context.getString(R.string.set_key_detail_artist_sort), -1))
|
||||
?: Sort(Sort.Mode.ByYear, false)
|
||||
set(value) {
|
||||
inner.edit {
|
||||
|
@ -318,7 +315,7 @@ class Settings(private val context: Context, private val callback: Callback? = n
|
|||
var detailGenreSort: Sort
|
||||
get() =
|
||||
Sort.fromIntCode(
|
||||
inner.getInt(context.getString(R.string.set_key_detail_genre_sort), Int.MIN_VALUE))
|
||||
inner.getInt(context.getString(R.string.set_key_detail_genre_sort), -1))
|
||||
?: Sort(Sort.Mode.ByName, true)
|
||||
set(value) {
|
||||
inner.edit {
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<Button
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/playback_play_pause"
|
||||
style="@style/Widget.Auxio.Button.Icon.Small"
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -65,13 +65,12 @@
|
|||
android:contentDescription="@string/desc_play_pause"
|
||||
app:icon="@drawable/sel_playing_state_24" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/playback_skip_next"
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/playback_secondary_action"
|
||||
style="@style/Widget.Auxio.Button.Icon.Small"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:contentDescription="@string/desc_play_pause"
|
||||
app:icon="@drawable/ic_skip_next_24" />
|
||||
tools:icon="@drawable/ic_skip_next_24" />
|
||||
</LinearLayout>
|
||||
|
||||
</org.oxycblt.auxio.playback.ForcedLTRFrameLayout>
|
||||
|
|
|
@ -97,7 +97,7 @@
|
|||
<string name="set_repeat_pause_desc">ايقاف مؤقت عند تكرار تشغيل اغنية</string>
|
||||
|
||||
<string name="set_content">محتوى</string>
|
||||
<string name="set_save">حفظ حالة التشغيل</string>
|
||||
<string name="set_save_state">حفظ حالة التشغيل</string>
|
||||
<string name="set_save_desc">حفظ حالة التشغيل الحالية الآن</string>
|
||||
|
||||
<!-- Error Namespace | Error Labels -->
|
||||
|
|
|
@ -98,7 +98,7 @@
|
|||
<string name="set_repeat_pause">Pozastavit při opakování</string>
|
||||
<string name="set_repeat_pause_desc">Pozastavit při opakování skladby</string>
|
||||
<string name="set_content">Obsah</string>
|
||||
<string name="set_save">Uložit stav přehrávání</string>
|
||||
<string name="set_save_state">Uložit stav přehrávání</string>
|
||||
<string name="set_save_desc">Uložit aktuální stav přehrávání</string>
|
||||
<string name="set_reindex">Znovu načíst hudbu</string>
|
||||
<string name="set_reindex_desc">Může vymazat stav přehrávání</string>
|
||||
|
@ -207,7 +207,7 @@
|
|||
<string name="set_dirs">Hudební složky</string>
|
||||
<string name="set_quality_tags">Ignorovat štítky MediaStore</string>
|
||||
<string name="set_quality_tags_desc">Zvýší kvalitu štítků, ale má za následek delší načítací čas (experimentální)</string>
|
||||
<string name="set_restore">Obnovit stav přehrávání</string>
|
||||
<string name="set_restore_state">Obnovit stav přehrávání</string>
|
||||
<string name="lng_state_restored">Stav obnoven</string>
|
||||
<string name="set_restore_desc">Obnovit dříve uložený stav přehrávání (pokud existuje)</string>
|
||||
<string name="err_did_not_restore">Nemohl být obnoven žádný stav</string>
|
||||
|
@ -235,7 +235,7 @@
|
|||
<string name="lbl_album_remix">Remixové album</string>
|
||||
<string name="lbl_ep_live">Živé EP</string>
|
||||
<string name="lbl_ep_remix">Remixové EP</string>
|
||||
<string name="set_wipe">Vymazat stav přehrávání</string>
|
||||
<string name="set_wipe_state">Vymazat stav přehrávání</string>
|
||||
<string name="set_wipe_desc">Vymazat dříve uložený stav přehrávání (pokud existuje)</string>
|
||||
<string name="lng_state_wiped">Stav vymazán</string>
|
||||
<string name="desc_queue_bar">Otevřít frontu</string>
|
||||
|
|
|
@ -74,7 +74,7 @@
|
|||
<string name="set_rewind_prev" tools:ignore="Typos">Zurückspulen, bevor das Lied zurück geändert wird</string>
|
||||
<string name="set_rewind_prev_desc">Zurückspulen, bevor zum vorheriger Lied gewechselt wird</string>
|
||||
<string name="set_content">Inhalt</string>
|
||||
<string name="set_save">Wiedergabezustand speichern</string>
|
||||
<string name="set_save_state">Wiedergabezustand speichern</string>
|
||||
<string name="set_save_desc">Den aktuellen Wiedergabezustand speichern</string>
|
||||
<string name="set_reindex">Musik neu laden</string>
|
||||
<string name="set_reindex_desc">Könnte den Wiedergabezustand löschen</string>
|
||||
|
@ -218,7 +218,7 @@
|
|||
<string name="lbl_compilation">Kompilation</string>
|
||||
<string name="lbl_soundtrack">Soundtrack</string>
|
||||
<string name="lbl_soundtracks">Soundtracks</string>
|
||||
<string name="set_restore">Wiedergabezustand wiederherstellen</string>
|
||||
<string name="set_restore_state">Wiedergabezustand wiederherstellen</string>
|
||||
<string name="lbl_album_remix">Remix-Album</string>
|
||||
<string name="lbl_mixtapes">Mixtapes</string>
|
||||
<string name="lbl_mixtape">Mixtape</string>
|
||||
|
@ -231,5 +231,5 @@
|
|||
<string name="lbl_live_group">Live</string>
|
||||
<string name="set_wipe_desc">Den vorher gespeicherten Wiedergabezustand löschen (wenn vorhanden)</string>
|
||||
<string name="lng_state_wiped">Zustand gelöscht</string>
|
||||
<string name="set_wipe">Wiedergabezustand löschen</string>
|
||||
<string name="set_wipe_state">Wiedergabezustand löschen</string>
|
||||
</resources>
|
|
@ -81,7 +81,7 @@
|
|||
<string name="set_repeat_pause">Pausa en repetición</string>
|
||||
<string name="set_repeat_pause_desc">Pausa cuando se repite una canción</string>
|
||||
<string name="set_content">Contenido</string>
|
||||
<string name="set_save">Guardar estado de reproducción</string>
|
||||
<string name="set_save_state">Guardar estado de reproducción</string>
|
||||
<string name="set_save_desc">Guardar el estado de reproduccion ahora</string>
|
||||
<string name="set_reindex">Recargar música</string>
|
||||
<string name="set_reindex_desc">Puede borrar el estado de reproducción</string>
|
||||
|
@ -187,7 +187,7 @@
|
|||
<string name="lbl_sample_rate">Frecuencia de muestreo</string>
|
||||
<string name="lbl_cancel">\@android:string/cancel</string>
|
||||
<string name="set_headset_autoplay">Reproducción automática con auriculares</string>
|
||||
<string name="set_restore">Reestablecer el estado de reproducción</string>
|
||||
<string name="set_restore_state">Reestablecer el estado de reproducción</string>
|
||||
<string name="set_restore_desc">Reestablecer el estado de reproducción guardado previamente (si existe)</string>
|
||||
<string name="set_dirs">Carpetas de música</string>
|
||||
<string name="set_quality_tags">Ignorar etiquetas MediaStore</string>
|
||||
|
|
|
@ -216,13 +216,13 @@
|
|||
<string name="desc_play_pause">Reproduciraj ili pauziraj</string>
|
||||
<string name="set_repeat_pause">Pauziraj na ponavljanje</string>
|
||||
<string name="set_content">Sadržaj</string>
|
||||
<string name="set_save">Spremi stanje reprodukcije</string>
|
||||
<string name="set_restore">Vrati stanje reprodukcije</string>
|
||||
<string name="set_save_state">Spremi stanje reprodukcije</string>
|
||||
<string name="set_restore_state">Vrati stanje reprodukcije</string>
|
||||
<string name="desc_skip_prev">Preskoči na prethodnu pjesmu</string>
|
||||
<string name="desc_change_repeat">Promijeni način ponavljanja</string>
|
||||
<string name="clr_purple">Ljubičasto</string>
|
||||
<string name="cdc_mka">Matroska Zvuk</string>
|
||||
<string name="set_wipe">Izbriši stanje reprodukcije</string>
|
||||
<string name="set_wipe_state">Izbriši stanje reprodukcije</string>
|
||||
<string name="lng_state_wiped">Stanje izbrisano</string>
|
||||
<string name="set_wipe_desc">Izbriši prethodno stanje reprodukcije (ako postoji)</string>
|
||||
</resources>
|
|
@ -111,7 +111,7 @@
|
|||
<string name="set_rewind_prev_desc">Putar mundur sebelum melompat ke lagu sebelumnya</string>
|
||||
<string name="set_repeat_pause_desc">Jeda saat lagu diulang</string>
|
||||
<string name="set_content">Konten</string>
|
||||
<string name="set_save">Simpan status pemutaran</string>
|
||||
<string name="set_save_state">Simpan status pemutaran</string>
|
||||
<string name="set_save_desc">Simpan status pemutaran saat ini sekarang</string>
|
||||
<string name="set_reindex">Muat ulang musik</string>
|
||||
<string name="set_reindex_desc">Akan memulai ulang aplikasi</string>
|
||||
|
|
|
@ -83,7 +83,7 @@
|
|||
<string name="set_repeat_pause">Pausa alla ripetizione</string>
|
||||
<string name="set_repeat_pause_desc">Pausa quando una canzone si ripete</string>
|
||||
<string name="set_content">Contenuti</string>
|
||||
<string name="set_save">Salva stato riproduzione</string>
|
||||
<string name="set_save_state">Salva stato riproduzione</string>
|
||||
<string name="set_save_desc">Salva lo stato di riproduzione corrente</string>
|
||||
<string name="set_reindex">Ricarica musica</string>
|
||||
<string name="set_reindex_desc">Potrebbe cancellare lo stato di riproduzione</string>
|
||||
|
@ -208,7 +208,7 @@
|
|||
<string name="set_observing">Ricaricamento automatico</string>
|
||||
<string name="set_quality_tags">Ignora tags MediaStore</string>
|
||||
<string name="set_quality_tags_desc">Migliora qualità dei tag, ma potrebbe richiedere tempi di carimento più lunghi (sperimentale)</string>
|
||||
<string name="set_restore">Ripristina stato riproduzione</string>
|
||||
<string name="set_restore_state">Ripristina stato riproduzione</string>
|
||||
<string name="set_restore_desc">Ripristina lo stato di riproduzione precedentemente salvato (se disponibile)</string>
|
||||
<string name="err_did_not_restore">Impossibile ripristinare lo stato</string>
|
||||
<string name="lbl_eps">EP</string>
|
||||
|
|
|
@ -111,7 +111,7 @@
|
|||
<string name="set_repeat_pause_desc">곡이 반복 재생될 때 일시 중지</string>
|
||||
|
||||
<string name="set_content">내용</string>
|
||||
<string name="set_save">재생 상태 저장</string>
|
||||
<string name="set_save_state">재생 상태 저장</string>
|
||||
<string name="set_save_desc">현재 재생 상태를 지금 저장</string>
|
||||
<string name="set_reindex">음악 다시 불러오기</string>
|
||||
<string name="set_reindex_desc">앱이 다시 시작됩니다.</string>
|
||||
|
|
|
@ -63,7 +63,7 @@
|
|||
<string name="set_rewind_prev">Terugspoelen voordat je terugspoelt</string>
|
||||
<string name="set_rewind_prev_desc">Terugspoelen voordat u naar het vorige nummer gaat</string>
|
||||
<string name="set_content">Inhoud</string>
|
||||
<string name="set_save">Afspeelstatus opslaan</string>
|
||||
<string name="set_save_state">Afspeelstatus opslaan</string>
|
||||
<string name="set_save_desc">Sla de huidige afspeelstatus nu op </string>
|
||||
<!-- Error Namespace | Error Labels -->
|
||||
<string name="err_no_music">Geen muziek aangetroffen</string>
|
||||
|
@ -170,7 +170,7 @@
|
|||
<string name="set_replay_gain">ReplayGain</string>
|
||||
<string name="set_pre_amp_warning">Waarschuwing: Als u de voorversterker op een hoge positieve waarde zet, kan dit bij sommige audiotracks tot pieken leiden.</string>
|
||||
<string name="set_playback_mode_none">Afspelen vanaf getoond item</string>
|
||||
<string name="set_restore">Afspeelstatus herstellen</string>
|
||||
<string name="set_restore_state">Afspeelstatus herstellen</string>
|
||||
<string name="set_restore_desc">Herstel de eerder opgeslagen afspeelstatus (indien aanwezig)</string>
|
||||
<string name="set_quality_tags">MediaStore tags negeren</string>
|
||||
<string name="set_quality_tags_desc">Verhoogt tag-kwaliteit, maar vereist langere laadtijden</string>
|
||||
|
|
|
@ -83,7 +83,7 @@
|
|||
<string name="set_repeat_pause">Пауза при повторе</string>
|
||||
<string name="set_repeat_pause_desc">Ставить на паузу при повторе трека</string>
|
||||
<string name="set_content">Библиотека</string>
|
||||
<string name="set_save">Запоминать позицию</string>
|
||||
<string name="set_save_state">Запоминать позицию</string>
|
||||
<string name="set_save_desc">Запоминать позицию в треке</string>
|
||||
<string name="set_reindex">Перезагрузить музыку</string>
|
||||
<string name="set_reindex_desc">Это перезапустит приложение</string>
|
||||
|
@ -173,7 +173,7 @@
|
|||
<string name="lbl_sample_rate">Частота дискретизации</string>
|
||||
<string name="set_pre_amp_desc">Предусилитель применяется к существующей настройке во время воспроизведения</string>
|
||||
<string name="lbl_library_counts">Статистика библиотеки</string>
|
||||
<string name="set_restore">Восстановить состояние воспроизведения</string>
|
||||
<string name="set_restore_state">Восстановить состояние воспроизведения</string>
|
||||
<string name="lbl_sort_duration">Продолжительность</string>
|
||||
<string name="lbl_file_name">Имя файла</string>
|
||||
<string name="lbl_ep">Мини-альбом</string>
|
||||
|
|
|
@ -160,7 +160,7 @@
|
|||
<string name="set_rewind_prev_desc">Önceki şarkıya atlamadan önce geri sar</string>
|
||||
<string name="set_repeat_pause_desc">Bir şarkı tekrarlandığında duraklat</string>
|
||||
<string name="set_content">İçerik</string>
|
||||
<string name="set_save">Çalma durumunu kaydet</string>
|
||||
<string name="set_save_state">Çalma durumunu kaydet</string>
|
||||
<string name="set_save_desc">Mevcut çalma durumunu şimdi kaydet</string>
|
||||
<string name="set_keep_shuffle">Karıştırmayı hatırla</string>
|
||||
<string name="set_keep_shuffle_desc">Yeni bir şarkı çalarken karışık çalmayı açık tut</string>
|
||||
|
@ -194,7 +194,7 @@
|
|||
<string name="lng_state_restored">Durum geri yüklendi</string>
|
||||
<string name="set_restore_desc">Önceden kaydedilmiş oynatma durumunu geri getirir (varsa)</string>
|
||||
<string name="set_round_mode">Yuvarlak mod</string>
|
||||
<string name="set_restore">Oynatma durumunu eski haline getir</string>
|
||||
<string name="set_restore_state">Oynatma durumunu eski haline getir</string>
|
||||
<string name="set_quality_tags">MediaStore etiketlerini yoksay</string>
|
||||
<string name="set_quality_tags_desc">Etiket kalitesini artırır, ancak daha uzun yükleme süreleri gerektirir</string>
|
||||
<string name="err_did_not_restore">Hiçbir durum geri getirelemedi</string>
|
||||
|
|
|
@ -82,7 +82,7 @@
|
|||
<string name="set_repeat_pause">重复播放前暂停</string>
|
||||
<string name="set_repeat_pause_desc">曲目重复播放前暂停</string>
|
||||
<string name="set_content">内容</string>
|
||||
<string name="set_save">保存播放状态</string>
|
||||
<string name="set_save_state">保存播放状态</string>
|
||||
<string name="set_save_desc">立即保存当前播放状态</string>
|
||||
<string name="set_reindex">重新加载音乐</string>
|
||||
<string name="set_reindex_desc">将会重启应用</string>
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
<string name="set_key_show_covers" translatable="false">KEY_SHOW_COVERS</string>
|
||||
<string name="set_key_quality_covers" translatable="false">KEY_QUALITY_COVERS</string>
|
||||
<string name="set_key_round_mode" translatable="false">auxio_round_covers</string>
|
||||
<string name="set_key_bar_action" translatable="false">auxio_bar_action</string>
|
||||
<string name="set_key_alt_notif_action" translatable="false">KEY_ALT_NOTIF_ACTION</string>
|
||||
|
||||
<string name="set_key_headset_autoplay" translatable="false">auxio_headset_autoplay</string>
|
||||
|
@ -63,55 +64,71 @@
|
|||
<item>@integer/theme_dark</item>
|
||||
</integer-array>
|
||||
|
||||
<array name="entries_library_song_playback_mode">
|
||||
<string-array name="entries_bar_action">
|
||||
<item>@string/set_bar_action_next</item>
|
||||
<item>@string/set_bar_action_repeat</item>
|
||||
<item>@string/set_bar_action_shuffle</item>
|
||||
</string-array>
|
||||
|
||||
<integer-array name="values_bar_action">
|
||||
<item>@integer/bar_action_next</item>
|
||||
<item>@integer/bar_action_repeat</item>
|
||||
<item>@integer/bar_action_shuffle</item>
|
||||
</integer-array>
|
||||
|
||||
<string-array name="entries_library_song_playback_mode">
|
||||
<item>@string/set_playback_mode_all</item>
|
||||
<item>@string/set_playback_mode_artist</item>
|
||||
<item>@string/set_playback_mode_album</item>
|
||||
<item>@string/set_playback_mode_genre</item>
|
||||
</array>
|
||||
</string-array>
|
||||
|
||||
<string-array name="values_library_song_playback_mode">
|
||||
<integer-array name="values_library_song_playback_mode">
|
||||
<item>@integer/play_mode_songs</item>
|
||||
<item>@integer/play_mode_artist</item>
|
||||
<item>@integer/play_mode_album</item>
|
||||
<item>@integer/play_mode_genre</item>
|
||||
</string-array>
|
||||
</integer-array>
|
||||
|
||||
<array name="entries_detail_song_playback_mode">
|
||||
<string-array name="entries_detail_song_playback_mode">
|
||||
<item>@string/set_playback_mode_none</item>
|
||||
<item>@string/set_playback_mode_all</item>
|
||||
<item>@string/set_playback_mode_artist</item>
|
||||
<item>@string/set_playback_mode_album</item>
|
||||
<item>@string/set_playback_mode_genre</item>
|
||||
</array>
|
||||
</string-array>
|
||||
|
||||
<string-array name="values_detail_song_playback_mode">
|
||||
<integer-array name="values_detail_song_playback_mode">
|
||||
<item>@integer/play_mode_none</item>
|
||||
<item>@integer/play_mode_songs</item>
|
||||
<item>@integer/play_mode_artist</item>
|
||||
<item>@integer/play_mode_album</item>
|
||||
<item>@integer/play_mode_genre</item>
|
||||
</string-array>
|
||||
</integer-array>
|
||||
|
||||
<array name="entries_replay_gain">
|
||||
<string-array name="entries_replay_gain">
|
||||
<item>@string/lbl_off</item>
|
||||
<item>@string/set_replay_gain_track</item>
|
||||
<item>@string/set_replay_gain_album</item>
|
||||
<item>@string/set_replay_gain_dynamic</item>
|
||||
</array>
|
||||
</string-array>
|
||||
|
||||
<string-array name="values_replay_gain">
|
||||
<integer-array name="values_replay_gain">
|
||||
<item>@integer/replay_gain_off</item>
|
||||
<item>@integer/replay_gain_track</item>
|
||||
<item>@integer/replay_gain_album</item>
|
||||
<item>@integer/replay_gain_dynamic</item>
|
||||
</string-array>
|
||||
</integer-array>
|
||||
|
||||
<integer name="theme_auto">-1</integer>
|
||||
<integer name="theme_light">1</integer>
|
||||
<integer name="theme_dark">2</integer>
|
||||
|
||||
<integer name="play_mode_none">-2147483648</integer>
|
||||
<integer name="bar_action_next">0xA119</integer>
|
||||
<integer name="bar_action_repeat">0xA11A</integer>
|
||||
<integer name="bar_action_shuffle">0xA11B</integer>
|
||||
|
||||
<integer name="play_mode_none">-1</integer>
|
||||
<integer name="play_mode_genre">0xA103</integer>
|
||||
<integer name="play_mode_artist">0xA104</integer>
|
||||
<integer name="play_mode_album">0xA105</integer>
|
||||
|
|
|
@ -158,6 +158,10 @@
|
|||
<string name="set_quality_covers_desc">Increases album cover quality, but results in longer loading times and higher memory usage</string>
|
||||
<string name="set_round_mode">Round mode</string>
|
||||
<string name="set_round_mode_desc">Enable rounded corners on additional UI elements (Requires album covers to be rounded)</string>
|
||||
<string name="set_bar_action">Playback bar action</string>
|
||||
<string name="set_bar_action_next">Skip to next</string>
|
||||
<string name="set_bar_action_repeat">Repeat mode</string>
|
||||
<string name="set_bar_action_shuffle">@string/lbl_shuffle</string>
|
||||
<string name="set_alt_action">Use alternate notification action</string>
|
||||
<string name="set_alt_repeat">Prefer repeat mode action</string>
|
||||
<string name="set_alt_shuffle">Prefer shuffle action</string>
|
||||
|
@ -191,11 +195,11 @@
|
|||
<string name="set_repeat_pause_desc">Pause when a song repeats</string>
|
||||
|
||||
<string name="set_content">Content</string>
|
||||
<string name="set_save">Save playback state</string>
|
||||
<string name="set_save_state">Save playback state</string>
|
||||
<string name="set_save_desc">Save the current playback state now</string>
|
||||
<string name="set_wipe">Clear playback state</string>
|
||||
<string name="set_wipe_state">Clear playback state</string>
|
||||
<string name="set_wipe_desc">Clear the previously saved playback state (if any)</string>
|
||||
<string name="set_restore">Restore playback state</string>
|
||||
<string name="set_restore_state">Restore playback state</string>
|
||||
<string name="set_restore_desc">Restore the previously saved playback state (if any)</string>
|
||||
<string name="set_reindex">Reload music</string>
|
||||
<string name="set_reindex_desc">May wipe playback state</string>
|
||||
|
|
|
@ -51,6 +51,13 @@
|
|||
app:summary="@string/set_round_mode_desc"
|
||||
app:title="@string/set_round_mode" />
|
||||
|
||||
<org.oxycblt.auxio.settings.ui.IntListPreference
|
||||
app:entries="@array/entries_bar_action"
|
||||
app:entryValues="@array/values_bar_action"
|
||||
app:defaultValue="@integer/bar_action_next"
|
||||
app:key="@string/set_key_bar_action"
|
||||
app:title="@string/set_bar_action" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
app:defaultValue="false"
|
||||
app:key="@string/set_key_alt_notif_action"
|
||||
|
@ -126,17 +133,17 @@
|
|||
<Preference
|
||||
app:key="@string/set_key_save_state"
|
||||
app:summary="@string/set_save_desc"
|
||||
app:title="@string/set_save" />
|
||||
app:title="@string/set_save_state" />
|
||||
|
||||
<Preference
|
||||
app:key="@string/set_key_wipe_state"
|
||||
app:summary="@string/set_wipe_desc"
|
||||
app:title="@string/set_wipe" />
|
||||
app:title="@string/set_wipe_state" />
|
||||
|
||||
<Preference
|
||||
app:key="@string/set_key_restore_state"
|
||||
app:summary="@string/set_restore_desc"
|
||||
app:title="@string/set_restore" />
|
||||
app:title="@string/set_restore_state" />
|
||||
|
||||
<Preference
|
||||
app:key="@string/set_key_reindex"
|
||||
|
|
Loading…
Reference in a new issue