diff --git a/CHANGELOG.md b/CHANGELOG.md index 9643080ac..beb8fbffd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,8 @@ #### What's New - Added ability to play/shuffle selections -- Settings UI has been visually refreshed +- Visually refreshed header components +- Resigned settings view #### What's Improved - Added ability to edit previously played or currently playing items in the queue diff --git a/app/src/main/java/org/oxycblt/auxio/list/recycler/HeaderItemDecoration.kt b/app/src/main/java/org/oxycblt/auxio/list/recycler/HeaderItemDecoration.kt index 6a958321e..97eb278b8 100644 --- a/app/src/main/java/org/oxycblt/auxio/list/recycler/HeaderItemDecoration.kt +++ b/app/src/main/java/org/oxycblt/auxio/list/recycler/HeaderItemDecoration.kt @@ -25,6 +25,11 @@ import com.google.android.material.divider.BackportMaterialDividerItemDecoration import org.oxycblt.auxio.R import org.oxycblt.auxio.list.Header +/** + * A [BackportMaterialDividerItemDecoration] that sets up the divider configuration to correctly + * separate content with headers. + * @author Alexander Capehart (OxygenCobalt) + */ class HeaderItemDecoration @JvmOverloads constructor( @@ -35,6 +40,9 @@ constructor( ) : BackportMaterialDividerItemDecoration(context, attributeSet, defStyleAttr, orientation) { override fun shouldDrawDivider(position: Int, adapter: RecyclerView.Adapter<*>?) = try { + // Add a divider if the next item is a header. This organizes the divider to separate + // the ends of content rather than the beginning of content, alongside an added benefit + // of preventing top headers from having a divider applied. (adapter as DiffAdapter<*, *, *>).getItem(position + 1) is Header } catch (e: ClassCastException) { false diff --git a/app/src/main/java/org/oxycblt/auxio/settings/ui/AudioPreferenceFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/ui/AudioPreferenceFragment.kt index c1f63755f..c9fd9f8f2 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/ui/AudioPreferenceFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/ui/AudioPreferenceFragment.kt @@ -21,6 +21,10 @@ import androidx.navigation.fragment.findNavController import org.oxycblt.auxio.R import org.oxycblt.auxio.settings.SettingsFragmentDirections +/** + * Audio settings interface. + * @author Alexander Capehart (OxygenCobalt) + */ class AudioPreferenceFragment : BasePreferenceFragment(R.xml.preferences_audio) { override fun onOpenDialogPreference(preference: WrappedDialogPreference) { diff --git a/app/src/main/java/org/oxycblt/auxio/settings/ui/BasePreferenceFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/ui/BasePreferenceFragment.kt index 34e396d23..bc0273e72 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/ui/BasePreferenceFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/ui/BasePreferenceFragment.kt @@ -35,6 +35,10 @@ import org.oxycblt.auxio.R import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.systemBarInsetsCompat +/** + * Shared [PreferenceFragmentCompat] used across all preference screens. + * @author Alexander Capehart (OxygenCobalt) + */ abstract class BasePreferenceFragment(@XmlRes private val screen: Int) : PreferenceFragmentCompat() { /** @@ -65,7 +69,7 @@ abstract class BasePreferenceFragment(@XmlRes private val screen: Int) : view.findViewById(R.id.preferences_toolbar).apply { title = preferenceScreen.title setNavigationOnClickListener { - val fragmentManager = fragmentManager + val fragmentManager = @Suppress("Deprecation") fragmentManager if (fragmentManager == null || fragmentManager.backStackEntryCount == 0) { findNavController().navigateUp() } else { @@ -98,14 +102,13 @@ abstract class BasePreferenceFragment(@XmlRes private val screen: Int) : setPreferencesFromResource(screen, rootKey) } - @Suppress("Deprecation") override fun onDisplayPreferenceDialog(preference: Preference) { when (preference) { is IntListPreference -> { // Copy the built-in preference dialog launching code into our project so // we can automatically use the provided preference class. val dialog = IntListPreferenceDialog.from(preference) - dialog.setTargetFragment(this, 0) + @Suppress("Deprecation") dialog.setTargetFragment(this, 0) dialog.show(parentFragmentManager, IntListPreferenceDialog.TAG) } is WrappedDialogPreference -> { diff --git a/app/src/main/java/org/oxycblt/auxio/settings/ui/MusicPreferenceFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/ui/MusicPreferenceFragment.kt index 4fccac950..c963363bc 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/ui/MusicPreferenceFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/ui/MusicPreferenceFragment.kt @@ -23,6 +23,10 @@ import coil.Coil import org.oxycblt.auxio.R import org.oxycblt.auxio.settings.SettingsFragmentDirections +/** + * "Content" settings. + * @author Alexander Capehart (OxygenCobalt) + */ class MusicPreferenceFragment : BasePreferenceFragment(R.xml.preferences_music) { override fun onOpenDialogPreference(preference: WrappedDialogPreference) { if (preference.key == getString(R.string.set_key_separators)) { diff --git a/app/src/main/java/org/oxycblt/auxio/settings/ui/PersonalizePreferenceFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/ui/PersonalizePreferenceFragment.kt index 5f6cbeac3..2a708fb33 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/ui/PersonalizePreferenceFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/ui/PersonalizePreferenceFragment.kt @@ -21,6 +21,10 @@ import androidx.navigation.fragment.findNavController import org.oxycblt.auxio.R import org.oxycblt.auxio.settings.SettingsFragmentDirections +/** + * Personalization settings interface. + * @author Alexander Capehart (OxygenCobalt) + */ class PersonalizePreferenceFragment : BasePreferenceFragment(R.xml.preferences_personalize) { override fun onOpenDialogPreference(preference: WrappedDialogPreference) { if (preference.key == getString(R.string.set_key_home_tabs)) { diff --git a/app/src/main/java/org/oxycblt/auxio/settings/ui/PreferenceHeaderItemDecoration.kt b/app/src/main/java/org/oxycblt/auxio/settings/ui/PreferenceHeaderItemDecoration.kt index 21c833fc8..cd6a49771 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/ui/PreferenceHeaderItemDecoration.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/ui/PreferenceHeaderItemDecoration.kt @@ -25,8 +25,12 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.google.android.material.divider.BackportMaterialDividerItemDecoration import org.oxycblt.auxio.R -import org.oxycblt.auxio.util.logD +/** + * A [BackportMaterialDividerItemDecoration] that sets up the divider configuration to correctly + * separate preference categories. + * @author Alexander Capehart (OxygenCobalt) + */ class PreferenceHeaderItemDecoration @JvmOverloads constructor( @@ -37,7 +41,10 @@ constructor( ) : BackportMaterialDividerItemDecoration(context, attributeSet, defStyleAttr, orientation) { override fun shouldDrawDivider(position: Int, adapter: RecyclerView.Adapter<*>?) = try { - logD(position) + // Add a divider if the next item is a header (in this case a preference category + // that corresponds to a header viewholder). This organizes the divider to separate + // the ends of content rather than the beginning of content, alongside an added benefit + // of preventing top headers from having a divider applied. (adapter as PreferenceGroupAdapter).getItem(position + 1) is PreferenceCategory } catch (e: ClassCastException) { false