From b748d73abbcbbcafc83fe17ef93fc768025c60d9 Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Sun, 27 Mar 2022 11:51:58 -0600 Subject: [PATCH] playback: rework audio focus Rework audio focus to rely on the native ExoPlayer implementation instead of a custom implementation. Previously, we avoided ExoPlayer's AudioFocus system as it never played after a transient lost. A few versions later now through, now it does, so we may as well switch to it. This does introduce a bug where ReplayGain functionality will conflict with audio focus, but I hope to eliminate this with #115 as I switch to an AudioProcessor instead of a callback. --- CHANGELOG.md | 5 + .../main/java/org/oxycblt/auxio/AuxioApp.kt | 1 - .../oxycblt/auxio/detail/DetailViewModel.kt | 9 +- .../detail/recycler/ArtistDetailAdapter.kt | 11 +- .../java/org/oxycblt/auxio/home/tabs/Tab.kt | 2 +- .../auxio/playback/system/PlaybackService.kt | 15 ++- .../{AudioReactor.kt => VolumeReactor.kt} | 110 +----------------- .../oxycblt/auxio/settings/SettingsManager.kt | 7 -- .../java/org/oxycblt/auxio/util/ViewUtil.kt | 2 +- .../oxycblt/auxio/widgets/WidgetProvider.kt | 1 - app/src/main/res/layout/fragment_about.xml | 1 - app/src/main/res/layout/fragment_queue.xml | 1 - app/src/main/res/layout/fragment_settings.xml | 1 - app/src/main/res/layout/item_queue_song.xml | 4 +- app/src/main/res/values-ar-rIQ/strings.xml | 2 - app/src/main/res/values-cs/strings.xml | 2 - app/src/main/res/values-de/strings.xml | 2 - app/src/main/res/values-es/strings.xml | 2 - app/src/main/res/values-fr/strings.xml | 1 - app/src/main/res/values-hi/strings.xml | 1 - app/src/main/res/values-hu/strings.xml | 1 - app/src/main/res/values-in/strings.xml | 1 - app/src/main/res/values-it/strings.xml | 1 - app/src/main/res/values-ko/strings.xml | 1 - app/src/main/res/values-nl/strings.xml | 2 - app/src/main/res/values-pl/strings.xml | 1 - app/src/main/res/values-pt-rBR/strings.xml | 1 - app/src/main/res/values-pt-rPT/strings.xml | 1 - app/src/main/res/values-ro/strings.xml | 1 - app/src/main/res/values-ru/strings.xml | 2 - app/src/main/res/values-tr/strings.xml | 1 - app/src/main/res/values-v31/config.xml | 1 - app/src/main/res/values-zh-rCN/strings.xml | 2 - app/src/main/res/values-zh-rTW/strings.xml | 1 - app/src/main/res/values/config.xml | 1 - app/src/main/res/values/strings.xml | 2 - app/src/main/res/xml/prefs_main.xml | 8 -- 37 files changed, 33 insertions(+), 175 deletions(-) rename app/src/main/java/org/oxycblt/auxio/playback/system/{AudioReactor.kt => VolumeReactor.kt} (65%) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc5f30354..b26ff8ce4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,10 +5,15 @@ #### What's Fixed - Fixed incorrect ellipsizing on song items +#### What's Changed +- Audio focus is no longer configurable + #### Dev/Meta - Updated translations [Konstantin Tutsch -> German, cccClyde -> Chinese ] - Switched to spotless and ktfmt instead of ktlint - Migrated constants to centralized table +- Introduced new RecyclerView framework +- Use native ExoPlayer AudioFocus implementation - Removed databinding [Greatly reduces compile times] - A bunch of internal view implementation improvements diff --git a/app/src/main/java/org/oxycblt/auxio/AuxioApp.kt b/app/src/main/java/org/oxycblt/auxio/AuxioApp.kt index 9ee297618..4f96102ff 100644 --- a/app/src/main/java/org/oxycblt/auxio/AuxioApp.kt +++ b/app/src/main/java/org/oxycblt/auxio/AuxioApp.kt @@ -28,7 +28,6 @@ import org.oxycblt.auxio.coil.GenreImageFetcher import org.oxycblt.auxio.coil.MusicKeyer import org.oxycblt.auxio.settings.SettingsManager -/** TODO: Rework null-safety/usage of requireNotNull */ @Suppress("UNUSED") class AuxioApp : Application(), ImageLoaderFactory { override fun onCreate() { diff --git a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt index af87d8ac6..79697ed86 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt @@ -100,7 +100,7 @@ class DetailViewModel : ViewModel() { if (mCurrentAlbum.value?.id == id) return val musicStore = MusicStore.requireInstance() val album = - requireNotNull(musicStore.albums.find { it.id == id }) { "Invalid album ID provided " } + requireNotNull(musicStore.albums.find { it.id == id }) { "Invalid album id provided " } mCurrentAlbum.value = album refreshAlbumData(album) @@ -109,9 +109,7 @@ class DetailViewModel : ViewModel() { fun setArtistId(id: Long) { if (mCurrentArtist.value?.id == id) return val musicStore = MusicStore.requireInstance() - val artist = - requireNotNull(musicStore.artists.find { it.id == id }) { "Invalid artist ID provided" } - + val artist = requireNotNull(musicStore.artists.find { it.id == id }) {} mCurrentArtist.value = artist refreshArtistData(artist) } @@ -119,8 +117,7 @@ class DetailViewModel : ViewModel() { fun setGenreId(id: Long) { if (mCurrentGenre.value?.id == id) return val musicStore = MusicStore.requireInstance() - val genre = - requireNotNull(musicStore.genres.find { it.id == id }) { "Invalid genre ID provided" } + val genre = requireNotNull(musicStore.genres.find { it.id == id }) mCurrentGenre.value = genre refreshGenreData(genre) } diff --git a/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt index b8e036e43..0225ffa40 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt @@ -179,11 +179,12 @@ private constructor( override fun bind(item: Album, listener: MenuItemListener) { binding.parentImage.bindAlbumCover(item) binding.parentName.textSafe = item.resolvedName - binding.parentInfo.textSafe = if (item.year != null) { - binding.context.getString(R.string.fmt_number, item.year) - } else { - binding.context.getString(R.string.def_date) - } + binding.parentInfo.textSafe = + if (item.year != null) { + binding.context.getString(R.string.fmt_number, item.year) + } else { + binding.context.getString(R.string.def_date) + } binding.root.apply { setOnClickListener { listener.onItemClick(item) } diff --git a/app/src/main/java/org/oxycblt/auxio/home/tabs/Tab.kt b/app/src/main/java/org/oxycblt/auxio/home/tabs/Tab.kt index 58a3415bf..93f55bbe4 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/tabs/Tab.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/tabs/Tab.kt @@ -49,7 +49,7 @@ sealed class Tab(open val mode: DisplayMode) { companion object { /** The length a well-formed tab sequence should be */ - const val SEQUENCE_LEN = 4 + private const val SEQUENCE_LEN = 4 /** The default tab sequence, represented in integer form */ const val SEQUENCE_DEFAULT = 0b1000_1001_1010_1011_0100 diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt index d74656d94..2abe00108 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt @@ -88,7 +88,7 @@ class PlaybackService : private lateinit var notificationManager: NotificationManager // System backend components - private lateinit var audioReactor: AudioReactor + private lateinit var audioReactor: VolumeReactor private lateinit var widgets: WidgetController private val systemReceiver = PlaybackReceiver() @@ -130,10 +130,10 @@ class PlaybackService : .setUsage(C.USAGE_MEDIA) .setContentType(C.CONTENT_TYPE_MUSIC) .build(), - false) + true) audioReactor = - AudioReactor(this) { volume -> + VolumeReactor { volume -> logD("Updating player volume to $volume") player.volume = volume } @@ -191,7 +191,6 @@ class PlaybackService : player.release() connector.release() mediaSession.release() - audioReactor.release() widgets.release() playbackManager.removeCallback(this) @@ -214,6 +213,13 @@ class PlaybackService : // --- PLAYER EVENT LISTENER OVERRIDES --- + override fun onPlayWhenReadyChanged(playWhenReady: Boolean, reason: Int) { + super.onPlayWhenReadyChanged(playWhenReady, reason) + if (playbackManager.isPlaying != playWhenReady) { + playbackManager.setPlaying(playWhenReady) + } + } + override fun onPlaybackStateChanged(state: Int) { when (state) { Player.STATE_READY -> startPolling() @@ -281,7 +287,6 @@ class PlaybackService : override fun onPlayingUpdate(isPlaying: Boolean) { if (isPlaying && !player.isPlaying) { player.play() - audioReactor.requestFocus() startPolling() } else { player.pause() diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/AudioReactor.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/VolumeReactor.kt similarity index 65% rename from app/src/main/java/org/oxycblt/auxio/playback/system/AudioReactor.kt rename to app/src/main/java/org/oxycblt/auxio/playback/system/VolumeReactor.kt index e3c006df6..4e1b911c9 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/system/AudioReactor.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/VolumeReactor.kt @@ -17,13 +17,7 @@ package org.oxycblt.auxio.playback.system -import android.content.Context -import android.media.AudioManager -import android.os.Build import androidx.core.math.MathUtils -import androidx.media.AudioAttributesCompat -import androidx.media.AudioFocusRequestCompat -import androidx.media.AudioManagerCompat import com.google.android.exoplayer2.metadata.Metadata import com.google.android.exoplayer2.metadata.id3.TextInformationFrame import com.google.android.exoplayer2.metadata.vorbis.VorbisComment @@ -31,36 +25,24 @@ import kotlin.math.pow import org.oxycblt.auxio.music.Album import org.oxycblt.auxio.playback.state.PlaybackStateManager import org.oxycblt.auxio.settings.SettingsManager -import org.oxycblt.auxio.util.getSystemServiceSafe import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logW import org.oxycblt.auxio.util.unlikelyToBeNull /** - * Manages the current volume and playback state across ReplayGain and AudioFocus events. + * Manages the current volume across ReplayGain and AudioFocus events. + * + * TODO: Add ReplayGain pre-amp + * + * TODO: Add positive ReplayGain * @author OxygenCobalt */ -class AudioReactor(context: Context, private val callback: (Float) -> Unit) : - AudioManager.OnAudioFocusChangeListener, SettingsManager.Callback { +class VolumeReactor(private val callback: (Float) -> Unit) { private data class Gain(val track: Float, val album: Float) private data class GainTag(val key: String, val value: Float) private val playbackManager = PlaybackStateManager.getInstance() private val settingsManager = SettingsManager.getInstance() - private val audioManager = context.getSystemServiceSafe(AudioManager::class) - - private val request = - AudioFocusRequestCompat.Builder(AudioManagerCompat.AUDIOFOCUS_GAIN) - .setWillPauseWhenDucked(false) - .setAudioAttributes( - AudioAttributesCompat.Builder() - .setContentType(AudioAttributesCompat.CONTENT_TYPE_MUSIC) - .setUsage(AudioAttributesCompat.USAGE_MEDIA) - .build()) - .setOnAudioFocusChangeListener(this) - .build() - - private var pauseWasTransient = false // It's good to keep the volume and the ducking multiplier separate so that we don't // lose information @@ -77,23 +59,9 @@ class AudioReactor(context: Context, private val callback: (Float) -> Unit) : callback(volume) } - init { - settingsManager.addCallback(this) - } - - /** Request the android system for audio focus */ - fun requestFocus() { - logD("Requesting audio focus") - AudioManagerCompat.requestAudioFocus(audioManager, request) - } - /** * Updates the rough volume adjustment for [Metadata] with ReplayGain tags. This is based off * Vanilla Music's implementation. - * - * TODO: Add ReplayGain pre-amp - * - * TODO: Add positive ReplayGain */ fun applyReplayGain(metadata: Metadata?) { if (metadata == null) { @@ -218,75 +186,9 @@ class AudioReactor(context: Context, private val callback: (Float) -> Unit) : } } - /** Abandon the current focus request and any callbacks */ - fun release() { - AudioManagerCompat.abandonAudioFocusRequest(audioManager, request) - settingsManager.removeCallback(this) - } - - // --- INTERNAL AUDIO FOCUS --- - - override fun onAudioFocusChange(focusChange: Int) { - if (!settingsManager.doAudioFocus && Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { - // Don't do audio focus if its not enabled - return - } - - when (focusChange) { - AudioManager.AUDIOFOCUS_GAIN -> onGain() - AudioManager.AUDIOFOCUS_LOSS -> onLossPermanent() - AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> onLossTransient() - AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> onDuck() - } - } - - private fun onGain() { - if (multiplier == MULTIPLIER_DUCK) { - unduck() - } else if (pauseWasTransient) { - logD("Gained focus after transient loss") - - // Play again if the pause was only temporary [AudioManager.AUDIOFOCUS_LOSS_TRANSIENT] - playbackManager.setPlaying(true) - pauseWasTransient = false - } - } - - private fun onLossTransient() { - // Since this loss is only temporary, mark it as such if we had to pause playback. - if (playbackManager.isPlaying) { - logD("Pausing for transient loss") - playbackManager.setPlaying(false) - pauseWasTransient = true - } - } - - private fun onLossPermanent() { - logD("Pausing for permanent loss") - playbackManager.setPlaying(false) - } - - private fun onDuck() { - multiplier = MULTIPLIER_DUCK - logD("Ducked volume, now $volume") - } - - private fun unduck() { - multiplier = 1f - logD("Unducked volume, now $volume") - } - // --- SETTINGS MANAGEMENT --- - override fun onAudioFocusUpdate(focus: Boolean) { - if (!focus) { - onGain() - } - } - companion object { - private const val MULTIPLIER_DUCK = 0.2f - const val RG_TRACK = "REPLAYGAIN_TRACK_GAIN" const val RG_ALBUM = "REPLAYGAIN_ALBUM_GAIN" const val R128_TRACK = "R128_TRACK_GAIN" diff --git a/app/src/main/java/org/oxycblt/auxio/settings/SettingsManager.kt b/app/src/main/java/org/oxycblt/auxio/settings/SettingsManager.kt index 5e1e93310..8b409391d 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/SettingsManager.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/SettingsManager.kt @@ -94,10 +94,6 @@ class SettingsManager private constructor(context: Context) : val roundCovers: Boolean get() = prefs.getBoolean(KEY_ROUND_COVERS, false) - /** Whether to do Audio focus. */ - val doAudioFocus: Boolean - get() = prefs.getBoolean(KEY_AUDIO_FOCUS, true) - /** Whether to resume playback when a headset is connected (may not work well in all cases) */ val headsetAutoplay: Boolean get() = prefs.getBoolean(KEY_HEADSET_AUTOPLAY, false) @@ -239,7 +235,6 @@ class SettingsManager private constructor(context: Context) : KEY_SHOW_COVERS -> callbacks.forEach { it.onShowCoverUpdate(showCovers) } KEY_QUALITY_COVERS -> callbacks.forEach { it.onQualityCoverUpdate(useQualityCovers) } KEY_LIB_TABS -> callbacks.forEach { it.onLibTabsUpdate(libTabs) } - KEY_AUDIO_FOCUS -> callbacks.forEach { it.onAudioFocusUpdate(doAudioFocus) } KEY_REPLAY_GAIN -> callbacks.forEach { it.onReplayGainUpdate(replayGainMode) } } } @@ -255,7 +250,6 @@ class SettingsManager private constructor(context: Context) : fun onNotifActionUpdate(useAltAction: Boolean) {} fun onShowCoverUpdate(showCovers: Boolean) {} fun onQualityCoverUpdate(doQualityCovers: Boolean) {} - fun onAudioFocusUpdate(focus: Boolean) {} fun onReplayGainUpdate(mode: ReplayGainMode) {} } @@ -272,7 +266,6 @@ class SettingsManager private constructor(context: Context) : const val KEY_ROUND_COVERS = "auxio_round_covers" const val KEY_USE_ALT_NOTIFICATION_ACTION = "KEY_ALT_NOTIF_ACTION" - const val KEY_AUDIO_FOCUS = "KEY_AUDIO_FOCUS" const val KEY_HEADSET_AUTOPLAY = "auxio_headset_autoplay" const val KEY_REPLAY_GAIN = "auxio_replay_gain" diff --git a/app/src/main/java/org/oxycblt/auxio/util/ViewUtil.kt b/app/src/main/java/org/oxycblt/auxio/util/ViewUtil.kt index 2b36926db..0c02a577f 100644 --- a/app/src/main/java/org/oxycblt/auxio/util/ViewUtil.kt +++ b/app/src/main/java/org/oxycblt/auxio/util/ViewUtil.kt @@ -91,7 +91,7 @@ val Drawable.isRtl: Boolean val ViewBinding.context: Context get() = root.context -var TextView.textSafe +var TextView.textSafe: CharSequence get() = text set(value) { text = value diff --git a/app/src/main/java/org/oxycblt/auxio/widgets/WidgetProvider.kt b/app/src/main/java/org/oxycblt/auxio/widgets/WidgetProvider.kt index da3a1a20c..53b4ccd9f 100644 --- a/app/src/main/java/org/oxycblt/auxio/widgets/WidgetProvider.kt +++ b/app/src/main/java/org/oxycblt/auxio/widgets/WidgetProvider.kt @@ -68,7 +68,6 @@ class WidgetProvider : AppWidgetProvider() { } loadWidgetBitmap(context, song) { bitmap -> - logD(bitmap == null) val state = WidgetState( song, diff --git a/app/src/main/res/layout/fragment_about.xml b/app/src/main/res/layout/fragment_about.xml index 5dbc9d7c5..af5941e88 100644 --- a/app/src/main/res/layout/fragment_about.xml +++ b/app/src/main/res/layout/fragment_about.xml @@ -4,7 +4,6 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?attr/colorSurface" android:orientation="vertical" tools:context=".settings.AboutFragment"> diff --git a/app/src/main/res/layout/fragment_queue.xml b/app/src/main/res/layout/fragment_queue.xml index 58837c2ac..615e47e88 100644 --- a/app/src/main/res/layout/fragment_queue.xml +++ b/app/src/main/res/layout/fragment_queue.xml @@ -5,7 +5,6 @@ android:id="@+id/queue_coordinator" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="?attr/colorSurface" android:orientation="vertical"> + android:layout_height="wrap_content"> تفضيل نشاط الخلط صوتيات - تركيز الصوت - ايقاف مؤقت عند تشغيل صوت آخر (كالمكالمات) صخب الصوت (تجريبي) اطفاء تفضيل المقطع diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 9ae33569a..5e554084b 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -65,8 +65,6 @@ "Preferovat akci režimu opakování" "Preferovat akci náhodného přehrávání" "Zvuk" - "Zaměření zvuku" - Pozastavit při přehrávání jiného zvuku (např. hovor) "Chování" "Když je vybrána skladba" "Zapamatovat si náhodné přehrávání" diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 39cc0d51f..720bf8476 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -71,8 +71,6 @@ Zufällig-Aktionstaste bevorzugen Audio - Audiofokus - Pausieren wenn andere Töne abspielt wird [Bsp. Anrufe] Kopfhörer automatische Wiedergabe Beginne die Wiedergabe immer, wenn Kopfhörer verbunden sind (funktioniert nicht auf allen Geräten) ReplayGain (Experimentell) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index df4e05eb1..f81c7073e 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -81,8 +81,6 @@ Preferir acción de mezcla Sonido - Enfoque de sonido - Pausar cuando se reproduce otro sonido (Ej: llamadas) ReplayGain (Experimental) Desactivado Por pista diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index de7e762e1..e216db8ed 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -49,7 +49,6 @@ Ignorer le stockage des pochettes Audio - Audio Focus Comportement diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index e3d0eec06..4abf0b8bf 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -40,7 +40,6 @@ एक्सेंट ऑडियो - ऑडियो फोकस चाल चलन diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 2241b99c8..2e4c6d92a 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -48,7 +48,6 @@ A médiatár albumborítók figyelmen kívül hagyása Hang - Hangfókusz Működés diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index bfcb62d45..63e27940c 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -48,7 +48,6 @@ Abaikan sampul-sampul pada Media Penyimpanan Audio - Fokus audio Perilaku Ingat putar acak diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 0f9ddec2d..4b66ea407 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -49,7 +49,6 @@ Ignora le copertine del Media Store Audio - Focus audio Comportamento Ricorda casuale diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 5b504fc5e..518a82529 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -47,7 +47,6 @@ 미디어 스토어 앨범 커버 무시 오디오 - 오디오 포커스 동작 diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index b52e19cbe..f8c7b3800 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -70,8 +70,6 @@ Voorkeur aan shuffle actie Audio - Audiofocus - Pauze wanneer andere audio speelt (ex. Gesprekken) Gedrag Wanneer een liedje is geselecteerd diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 0d49e2c45..a3ab24815 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -48,7 +48,6 @@ Ignoruj okładki z Media Store Dźwięk - Wyciszanie otoczenia Zachowanie diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 51d7540fb..4b41ddf31 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -48,7 +48,6 @@ Ignorar capas Media Store Áudio - Foco do áudio Comportamento Memorizar aleatorização diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 26c346d5e..14ec00074 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -49,7 +49,6 @@ Ignorar capas Media Store Áudio - Foco de áudio Comportamento Memorizar aleatorização diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index c9f02a1bc..8fd40d564 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -49,7 +49,6 @@ Ignoră coperțile Media Store Audio - Concentrare audio Comportament diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 8263ed940..293d9e931 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -81,8 +81,6 @@ Режим перемешивания Звук - Аудио-фокус - Ставить на паузу при звонках ReplayGain (экспериментально) Выкл. По треку diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index d6d9f11c3..c7fd21a08 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -48,7 +48,6 @@ Medya Deposu albüm kapağını yoksay Ses - Ses odaklama Tercihler diff --git a/app/src/main/res/values-v31/config.xml b/app/src/main/res/values-v31/config.xml index f229b667e..4bd8a8884 100644 --- a/app/src/main/res/values-v31/config.xml +++ b/app/src/main/res/values-v31/config.xml @@ -1,5 +1,4 @@ false - false \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 1c61b1558..f3f2e480d 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -80,8 +80,6 @@ 偏好随机播放操作 音频 - 音频焦点 - 有其它音频播放(比如电话)时暂停 自动播放 连接至耳机时总是自动播放(并非在所有设备上都有用) 回放增益(实验性) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 5aa7b7261..3d1399a62 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -47,7 +47,6 @@ 忽略音訊檔內嵌的專輯封面 音訊 - 音頻焦點 行為 記住隨機播放 diff --git a/app/src/main/res/values/config.xml b/app/src/main/res/values/config.xml index 232746f50..09a31ac51 100644 --- a/app/src/main/res/values/config.xml +++ b/app/src/main/res/values/config.xml @@ -1,6 +1,5 @@ true - true 1 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 051c52fc9..8f683d6af 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -80,8 +80,6 @@ Prefer shuffle action Audio - Audio focus - Pause when other audio plays (ex. Calls) Headset autoplay Always start playing when a headset is connected (may not work on all devices) ReplayGain (Experimental) diff --git a/app/src/main/res/xml/prefs_main.xml b/app/src/main/res/xml/prefs_main.xml index a7cebd418..1f21bec39 100644 --- a/app/src/main/res/xml/prefs_main.xml +++ b/app/src/main/res/xml/prefs_main.xml @@ -78,14 +78,6 @@ app:layout="@layout/item_header" app:title="@string/set_audio"> - -