Move playback save button to SettingsListFragment

Move the ability to save the current playback state into a dedicated preference in SettingsListFragment.
This commit is contained in:
OxygenCobalt 2020-12-13 16:01:40 -07:00
parent 384d0f1a27
commit 7458588913
29 changed files with 101 additions and 72 deletions

View file

@ -27,4 +27,4 @@ fun Any.logE(msg: String) {
* Get a non-nullable name, used so that logs will always show up in the console.
* @return The name of the object, otherwise "Anonymous Object"
*/
private fun Any.getName(): String = this::class.simpleName ?: "Anonymous Object"
private fun Any.getName(): String = this::class.simpleName ?: "Anonymous Object"

View file

@ -12,9 +12,9 @@ import androidx.databinding.DataBindingUtil
import org.oxycblt.auxio.databinding.ActivityMainBinding
import org.oxycblt.auxio.playback.PlaybackService
import org.oxycblt.auxio.settings.SettingsManager
import org.oxycblt.auxio.ui.accent
import org.oxycblt.auxio.ui.handleTransparentSystemBars
import org.oxycblt.auxio.ui.toColor
import org.oxycblt.auxio.utils.accent
import org.oxycblt.auxio.utils.handleTransparentSystemBars
import org.oxycblt.auxio.utils.toColor
// FIXME: Fix bug where fast navigation will break the animations and
// lead to nothing being displayed [Possibly Un-fixable]

View file

@ -2,7 +2,6 @@ package org.oxycblt.auxio
import android.content.res.ColorStateList
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
@ -20,9 +19,9 @@ import org.oxycblt.auxio.music.Artist
import org.oxycblt.auxio.music.MusicStore
import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.playback.PlaybackViewModel
import org.oxycblt.auxio.ui.accent
import org.oxycblt.auxio.ui.getTransparentAccent
import org.oxycblt.auxio.ui.toColor
import org.oxycblt.auxio.utils.accent
import org.oxycblt.auxio.utils.getTransparentAccent
import org.oxycblt.auxio.utils.toColor
import kotlin.IllegalArgumentException
class MainFragment : Fragment() {

View file

@ -17,9 +17,9 @@ import org.oxycblt.auxio.music.MusicStore
import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.playback.PlaybackViewModel
import org.oxycblt.auxio.playback.state.PlaybackMode
import org.oxycblt.auxio.ui.createToast
import org.oxycblt.auxio.ui.disable
import org.oxycblt.auxio.ui.setupAlbumSongActions
import org.oxycblt.auxio.utils.createToast
import org.oxycblt.auxio.utils.disable
import org.oxycblt.auxio.utils.setupAlbumSongActions
/**
* The [DetailFragment] for an album.

View file

@ -15,8 +15,8 @@ import org.oxycblt.auxio.logD
import org.oxycblt.auxio.music.Artist
import org.oxycblt.auxio.music.MusicStore
import org.oxycblt.auxio.playback.PlaybackViewModel
import org.oxycblt.auxio.ui.disable
import org.oxycblt.auxio.ui.setupAlbumActions
import org.oxycblt.auxio.utils.disable
import org.oxycblt.auxio.utils.setupAlbumActions
/**
* The [DetailFragment] for an artist.

View file

@ -1,7 +1,6 @@
package org.oxycblt.auxio.detail
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@ -15,8 +14,8 @@ import org.oxycblt.auxio.detail.adapters.GenreArtistAdapter
import org.oxycblt.auxio.logD
import org.oxycblt.auxio.music.MusicStore
import org.oxycblt.auxio.playback.PlaybackViewModel
import org.oxycblt.auxio.ui.disable
import org.oxycblt.auxio.ui.setupArtistActions
import org.oxycblt.auxio.utils.disable
import org.oxycblt.auxio.utils.setupArtistActions
/**
* The [DetailFragment] for a genre.

View file

@ -9,8 +9,8 @@ import org.oxycblt.auxio.databinding.ItemAlbumSongBinding
import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.recycler.DiffCallback
import org.oxycblt.auxio.recycler.viewholders.BaseViewHolder
import org.oxycblt.auxio.ui.accent
import org.oxycblt.auxio.ui.toColor
import org.oxycblt.auxio.utils.accent
import org.oxycblt.auxio.utils.toColor
/**
* An adapter for displaying the [Song]s of an album.

View file

@ -1,7 +1,6 @@
package org.oxycblt.auxio.library
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
@ -27,12 +26,12 @@ import org.oxycblt.auxio.music.Genre
import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.playback.PlaybackViewModel
import org.oxycblt.auxio.settings.SettingsManager
import org.oxycblt.auxio.ui.applyColor
import org.oxycblt.auxio.ui.resolveAttr
import org.oxycblt.auxio.ui.setupAlbumActions
import org.oxycblt.auxio.ui.setupArtistActions
import org.oxycblt.auxio.ui.setupGenreActions
import org.oxycblt.auxio.ui.setupSongActions
import org.oxycblt.auxio.utils.applyColor
import org.oxycblt.auxio.utils.resolveAttr
import org.oxycblt.auxio.utils.setupAlbumActions
import org.oxycblt.auxio.utils.setupArtistActions
import org.oxycblt.auxio.utils.setupGenreActions
import org.oxycblt.auxio.utils.setupSongActions
/**
* A [Fragment] that shows a custom list of [Genre], [Artist], or [Album] data. Also allows for

View file

@ -3,7 +3,6 @@ package org.oxycblt.auxio.loading
import android.Manifest
import android.content.pm.PackageManager
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup

View file

@ -1,7 +1,6 @@
package org.oxycblt.auxio.music
import android.app.Application
import android.util.Log
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.oxycblt.auxio.R

View file

@ -7,7 +7,6 @@ import android.provider.MediaStore.Audio.Albums
import android.provider.MediaStore.Audio.Artists
import android.provider.MediaStore.Audio.Genres
import android.provider.MediaStore.Audio.Media
import android.util.Log
import org.oxycblt.auxio.logD
import org.oxycblt.auxio.logE
import org.oxycblt.auxio.music.Album

View file

@ -1,6 +1,5 @@
package org.oxycblt.auxio.music.processing
import android.util.Log
import org.oxycblt.auxio.logD
import org.oxycblt.auxio.music.Album
import org.oxycblt.auxio.music.Artist

View file

@ -2,7 +2,6 @@ package org.oxycblt.auxio.playback
import android.graphics.drawable.AnimatedVectorDrawable
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@ -11,13 +10,11 @@ import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController
import org.oxycblt.auxio.BuildConfig
import org.oxycblt.auxio.MainFragmentDirections
import org.oxycblt.auxio.R
import org.oxycblt.auxio.databinding.FragmentCompactPlaybackBinding
import org.oxycblt.auxio.logD
import org.oxycblt.auxio.music.MusicStore
import org.oxycblt.auxio.ui.createToast
/**
* A [Fragment] that displays the currently played song at a glance, with some basic controls.
@ -56,16 +53,6 @@ class CompactPlaybackFragment : Fragment() {
true
}
// Enable the ability to force-save the state in debug builds, in order to check
// for persistence issues without waiting for PlaybackService to be killed.
if (BuildConfig.DEBUG) {
binding.playbackControls.setOnLongClickListener {
playbackModel.save(requireContext())
getString(R.string.debug_state_saved).createToast(requireContext())
true
}
}
// --- VIEWMODEL SETUP ---
playbackModel.song.observe(viewLifecycleOwner) {

View file

@ -8,7 +8,6 @@ import android.content.Context
import android.content.Intent
import android.os.Build
import android.support.v4.media.session.MediaSessionCompat
import androidx.annotation.DrawableRes
import androidx.core.app.NotificationCompat
import androidx.media.app.NotificationCompat.MediaStyle
import org.oxycblt.auxio.MainActivity
@ -18,7 +17,6 @@ import org.oxycblt.auxio.music.coil.getBitmap
import org.oxycblt.auxio.playback.state.LoopMode
import org.oxycblt.auxio.playback.state.PlaybackMode
import org.oxycblt.auxio.playback.state.PlaybackStateManager
import org.oxycblt.auxio.settings.SettingsManager
object NotificationUtils {
const val CHANNEL_ID = "CHANNEL_AUXIO_PLAYBACK"
@ -207,4 +205,4 @@ private fun newAction(action: String, context: Context): NotificationCompat.Acti
Intent(action), PendingIntent.FLAG_UPDATE_CURRENT
)
).build()
}
}

View file

@ -3,7 +3,6 @@ package org.oxycblt.auxio.playback
import android.content.res.ColorStateList
import android.graphics.drawable.AnimatedVectorDrawable
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
@ -17,8 +16,8 @@ import org.oxycblt.auxio.R
import org.oxycblt.auxio.databinding.FragmentPlaybackBinding
import org.oxycblt.auxio.logD
import org.oxycblt.auxio.playback.state.LoopMode
import org.oxycblt.auxio.ui.accent
import org.oxycblt.auxio.ui.toColor
import org.oxycblt.auxio.utils.accent
import org.oxycblt.auxio.utils.toColor
/**
* A [Fragment] that displays more information about the song, along with more media controls.

View file

@ -14,7 +14,6 @@ import android.os.IBinder
import android.os.Parcelable
import android.support.v4.media.MediaMetadataCompat
import android.support.v4.media.session.MediaSessionCompat
import android.util.Log
import android.view.KeyEvent
import androidx.core.app.NotificationCompat
import com.google.android.exoplayer2.C

View file

@ -1,7 +1,6 @@
package org.oxycblt.auxio.playback
import android.content.Context
import android.util.Log
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Transformations

View file

@ -2,7 +2,6 @@ package org.oxycblt.auxio.playback.queue
import android.annotation.SuppressLint
import android.content.Context
import android.util.Log
import android.view.LayoutInflater
import android.view.MotionEvent
import android.view.ViewGroup

View file

@ -1,7 +1,6 @@
package org.oxycblt.auxio.playback.state
import android.content.Context
import android.util.Log
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.oxycblt.auxio.database.PlaybackState

View file

@ -1,5 +1,3 @@
@file:Suppress("MemberVisibilityCanBePrivate")
package org.oxycblt.auxio.recycler
import android.annotation.SuppressLint
@ -24,8 +22,8 @@ import androidx.dynamicanimation.animation.SpringForce
import com.reddit.indicatorfastscroll.FastScrollItemIndicator
import com.reddit.indicatorfastscroll.FastScrollerView
import org.oxycblt.auxio.R
import org.oxycblt.auxio.ui.accent
import org.oxycblt.auxio.ui.toColor
import org.oxycblt.auxio.utils.accent
import org.oxycblt.auxio.utils.toColor
/**
* A semi-copy, semi-custom implementation of [com.reddit.indicatorfastscroll.FastScrollerThumbView]

View file

@ -1,9 +1,9 @@
package org.oxycblt.auxio.settings
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.appcompat.app.AppCompatDelegate
import androidx.fragment.app.activityViewModels
import androidx.preference.Preference
import androidx.preference.PreferenceCategory
import androidx.preference.PreferenceFragmentCompat
@ -12,16 +12,21 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.customview.customView
import org.oxycblt.auxio.BuildConfig
import org.oxycblt.auxio.R
import org.oxycblt.auxio.logD
import org.oxycblt.auxio.playback.PlaybackViewModel
import org.oxycblt.auxio.recycler.DisplayMode
import org.oxycblt.auxio.settings.adapters.AccentAdapter
import org.oxycblt.auxio.ui.ACCENTS
import org.oxycblt.auxio.ui.accent
import org.oxycblt.auxio.ui.getDetailedAccentSummary
import org.oxycblt.auxio.utils.ACCENTS
import org.oxycblt.auxio.utils.accent
import org.oxycblt.auxio.utils.createToast
import org.oxycblt.auxio.utils.getDetailedAccentSummary
@Suppress("UNUSED")
class SettingsListFragment : PreferenceFragmentCompat() {
private val playbackModel: PlaybackViewModel by activityViewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@ -38,6 +43,12 @@ class SettingsListFragment : PreferenceFragmentCompat() {
private fun recursivelyHandleChildren(pref: Preference) {
if (pref is PreferenceCategory) {
if (pref.title == getString(R.string.debug_title) && BuildConfig.DEBUG) {
logD("Showing debug category.")
pref.isVisible = true
}
pref.children.forEach {
recursivelyHandleChildren(it)
}
@ -87,6 +98,15 @@ class SettingsListFragment : PreferenceFragmentCompat() {
true
}
}
SettingsManager.Keys.KEY_DEBUG_SAVE -> {
onPreferenceClickListener = Preference.OnPreferenceClickListener {
playbackModel.save(requireContext())
getString(R.string.debug_state_saved).createToast(requireContext())
true
}
}
}
}
}

View file

@ -6,7 +6,7 @@ import androidx.preference.PreferenceManager
import org.oxycblt.auxio.playback.state.PlaybackMode
import org.oxycblt.auxio.recycler.DisplayMode
import org.oxycblt.auxio.recycler.SortMode
import org.oxycblt.auxio.ui.ACCENTS
import org.oxycblt.auxio.utils.ACCENTS
/**
* Wrapper around the [SharedPreferences] class that writes & reads values without a context.
@ -179,6 +179,7 @@ class SettingsManager private constructor(context: Context) :
const val KEY_REWIND_THRESHOLD = "KEY_REWIND_THRESHOLD"
const val KEY_LIBRARY_SORT_MODE = "KEY_LIBRARY_SORT_MODE"
const val KEY_DEBUG_SAVE = "KEY_SAVE_STATE"
}
object EntryNames {

View file

@ -6,10 +6,10 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import org.oxycblt.auxio.R
import org.oxycblt.auxio.databinding.ItemAccentBinding
import org.oxycblt.auxio.ui.ACCENTS
import org.oxycblt.auxio.ui.accent
import org.oxycblt.auxio.ui.getAccentItemSummary
import org.oxycblt.auxio.ui.toColor
import org.oxycblt.auxio.utils.ACCENTS
import org.oxycblt.auxio.utils.accent
import org.oxycblt.auxio.utils.getAccentItemSummary
import org.oxycblt.auxio.utils.toColor
class AccentAdapter(
private val doOnAccentConfirm: (accent: Pair<Int, Int>) -> Unit

View file

@ -1,7 +1,6 @@
package org.oxycblt.auxio.songs
import android.os.Bundle
import android.util.Log
import android.util.TypedValue
import android.view.LayoutInflater
import android.view.View
@ -18,7 +17,7 @@ import org.oxycblt.auxio.logD
import org.oxycblt.auxio.music.MusicStore
import org.oxycblt.auxio.playback.PlaybackViewModel
import org.oxycblt.auxio.settings.SettingsManager
import org.oxycblt.auxio.ui.setupSongActions
import org.oxycblt.auxio.utils.setupSongActions
import kotlin.math.ceil
/**

View file

@ -1,4 +1,4 @@
package org.oxycblt.auxio.ui
package org.oxycblt.auxio.utils
import android.annotation.TargetApi
import android.content.Context

View file

@ -1,9 +1,8 @@
package org.oxycblt.auxio.ui
package org.oxycblt.auxio.utils
import android.content.Context
import android.content.res.Resources
import android.text.Spanned
import android.util.Log
import android.util.TypedValue
import androidx.annotation.AttrRes
import androidx.annotation.ColorInt

View file

@ -85,6 +85,9 @@
<string name="setting_behavior_rewind_threshold_desc">Progress at which a rewind should occur (seconds)</string>
<!-- Debug Namespace | Debug labels -->
<string name="debug_title">Debug</string>
<string name="debug_state_save">Save playback state</string>
<string name="debug_state_save_desc">Force save the current playback state</string>
<string name="debug_state_saved">State saved</string>
<!-- Error Namespace | Error Labels -->

View file

@ -124,8 +124,22 @@
app:min="@integer/rewind_threshold_min"
app:summary="@string/setting_behavior_rewind_threshold_desc"
app:showSeekBarValue="true"
app:allowDividerBelow="false"
app:iconSpaceReserved="false"
app:dependency="KEY_PREV_REWIND" />
</PreferenceCategory>
<PreferenceCategory
android:title="@string/debug_title"
app:isPreferenceVisible="false"
app:layout="@layout/item_header">
<Preference
app:key="KEY_SAVE_STATE"
android:title="@string/debug_state_save"
app:summary="@string/debug_state_save_desc"
app:iconSpaceReserved="false" />
</PreferenceCategory>
</PreferenceScreen>

View file

@ -18,6 +18,7 @@
android:title="@string/setting_accent"
android:icon="@drawable/ic_accent"
app:summary="@string/setting_accent_unknown" />
</PreferenceCategory>
<PreferenceCategory
@ -69,6 +70,7 @@
app:defaultValue="true"
app:allowDividerBelow="false"
app:summary="@string/setting_playback_plug_mgt_desc" />
</PreferenceCategory>
<PreferenceCategory
@ -93,6 +95,13 @@
app:iconSpaceReserved="false"
app:useSimpleSummaryProvider="true" />
<SwitchPreferenceCompat
app:key="KEY_KEEP_SHUFFLE"
android:title="@string/setting_behavior_keep_shuffle"
app:summary="@string/setting_behavior_keep_shuffle_desc"
app:defaultValue="false"
app:iconSpaceReserved="false" />
<SwitchPreference
app:key="KEY_PREV_REWIND"
android:title="@string/setting_behavior_rewind_prev"
@ -104,12 +113,25 @@
app:key="KEY_REWIND_THRESHOLD"
android:title="@string/setting_behavior_rewind_threshold"
android:defaultValue="@integer/rewind_threshold_default"
app:summary="@string/setting_behavior_rewind_threshold_desc"
app:showSeekBarValue="true"
android:max="@integer/rewind_threshold_max"
app:min="@integer/rewind_threshold_min"
app:summary="@string/setting_behavior_rewind_threshold_desc"
app:showSeekBarValue="true"
app:iconSpaceReserved="false"
app:dependency="KEY_PREV_REWIND" />
</PreferenceCategory>
<PreferenceCategory
android:title="@string/debug_title"
app:isPreferenceVisible="false"
app:layout="@layout/item_header">
<Preference
app:key="KEY_SAVE_STATE"
android:title="@string/debug_state_save"
app:summary="@string/debug_state_save_desc"
app:iconSpaceReserved="false" />
</PreferenceCategory>
</PreferenceScreen>