diff --git a/app/build.gradle b/app/build.gradle
index 1ec5af13a..26e946794 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -89,13 +89,17 @@ dependencies {
implementation 'io.coil-kt:coil:0.13.0'
// Material
- implementation 'com.google.android.material:material:1.3.0-alpha03'
+ implementation 'com.google.android.material:material:1.3.0-alpha04'
// Fast-Scroll
implementation 'com.reddit:indicator-fast-scroll:1.3.0'
+ // Dialogs
implementation 'com.afollestad.material-dialogs:core:3.3.0'
+ // Edge-To-Edge
+ implementation 'de.halfbit:edge-to-edge:0.10'
+
// --- DEV ---
// Lint
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index b19c33a72..161f13dd3 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -22,4 +22,4 @@
-dontobfuscate
--keep class org.oxycblt.auxio.settings.SettingListFragment
\ No newline at end of file
+-keep class org.oxycblt.auxio.settings.SettingsListFragment
\ No newline at end of file
diff --git a/app/src/main/java/org/oxycblt/auxio/recycler/NoLeakThumbView.kt b/app/src/main/java/org/oxycblt/auxio/recycler/NoLeakThumbView.kt
index 7922a49af..7d35af33f 100644
--- a/app/src/main/java/org/oxycblt/auxio/recycler/NoLeakThumbView.kt
+++ b/app/src/main/java/org/oxycblt/auxio/recycler/NoLeakThumbView.kt
@@ -26,8 +26,8 @@ import org.oxycblt.auxio.ui.accent
import org.oxycblt.auxio.ui.toColor
/**
- * A source code copy of [com.reddit.indicatorfastscroll.FastScrollerThumbView] that fixes a
- * memory leak that occurs from having nested fragments. All credit goes to the authors of
+ * A semi-copy, semi-custom implementation of [com.reddit.indicatorfastscroll.FastScrollerThumbView]
+ * that fixes a memory leak that occurs from a bug fix they added. All credit goes to the authors of
* the fast scroll library.
* Link to repo
* @author Reddit, OxygenCobalt
@@ -81,7 +81,11 @@ class NoLeakThumbView @JvmOverloads constructor(
fastScrollerView.onTouchEvent(event)
fastScrollerView.performClick()
- if (event.actionMasked in intArrayOf(MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL)) {
+ if (event.actionMasked in intArrayOf(
+ MotionEvent.ACTION_UP,
+ MotionEvent.ACTION_CANCEL
+ )
+ ) {
isActivated = false
return@setOnTouchListener true
}
@@ -104,15 +108,9 @@ class NoLeakThumbView @JvmOverloads constructor(
fastScrollerView.apply {
children.forEach { view ->
- if (view.containsY(touchY)) {
- when (view) {
- is ImageView -> {
- consumed = true
- }
- is TextView -> {
- consumed = true
- }
- }
+ if (view.containsY(touchY) && (view is ImageView || view is TextView)) {
+ consumed = true
+ return@forEach
}
}
}
diff --git a/app/src/main/java/org/oxycblt/auxio/settings/SettingListFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt
similarity index 79%
rename from app/src/main/java/org/oxycblt/auxio/settings/SettingListFragment.kt
rename to app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt
index 4623547bf..55a982919 100644
--- a/app/src/main/java/org/oxycblt/auxio/settings/SettingListFragment.kt
+++ b/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt
@@ -1,12 +1,17 @@
package org.oxycblt.auxio.settings
+import android.annotation.SuppressLint
import android.os.Bundle
import android.util.Log
import android.view.View
+import android.view.ViewGroup
import androidx.appcompat.app.AppCompatDelegate
import androidx.fragment.app.activityViewModels
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
+import androidx.preference.PreferenceGroupAdapter
+import androidx.preference.PreferenceScreen
+import androidx.preference.PreferenceViewHolder
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.afollestad.materialdialogs.MaterialDialog
@@ -18,12 +23,15 @@ import org.oxycblt.auxio.ui.ACCENTS
import org.oxycblt.auxio.ui.accent
import org.oxycblt.auxio.ui.getDetailedAccentSummary
-class SettingListFragment : PreferenceFragmentCompat() {
+class SettingsListFragment : PreferenceFragmentCompat() {
private val settingsModel: SettingsViewModel by activityViewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ view.apply {
+ }
+
val themePref = findPreference(SettingsManager.Keys.KEY_THEME)?.apply {
setIcon(
when (AppCompatDelegate.getDefaultNightMode()) {
@@ -80,9 +88,33 @@ class SettingListFragment : PreferenceFragmentCompat() {
setPreferencesFromResource(R.xml.prefs_main, rootKey)
}
+ // Forcefully override the adapter creation process so I can get rid of the ugly
+ // colorPrimary ripples.
+ @SuppressLint("RestrictedApi")
+ override fun onCreateAdapter(preferenceScreen: PreferenceScreen?): RecyclerView.Adapter<*> {
+ return object : PreferenceGroupAdapter(preferenceScreen) {
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): PreferenceViewHolder {
+ val holder = super.onCreateViewHolder(parent, viewType)
+
+ if (holder.itemView.id != android.R.id.title) {
+ holder.itemView.setBackgroundResource(R.drawable.ui_ripple)
+ }
+
+ return holder
+ }
+ }
+ }
+
+ private fun offLoad(something: String) {
+ Log.d(this::class.simpleName, something)
+ }
+
private fun showAccentDialog() {
MaterialDialog(requireActivity()).show {
- title(R.string.label_settings_accent)
+ title(R.string.setting_accent)
// Roll my own RecyclerView since [To no surprise whatsoever] Material Dialogs
// has a bug where ugly dividers will show with the RecyclerView even if you disable them.
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 ca726cd46..87bef980c 100644
--- a/app/src/main/java/org/oxycblt/auxio/settings/SettingsManager.kt
+++ b/app/src/main/java/org/oxycblt/auxio/settings/SettingsManager.kt
@@ -14,7 +14,8 @@ import org.oxycblt.auxio.ui.ACCENTS
* the first time it occurs.
* @author OxygenCobalt
*/
-class SettingsManager private constructor(context: Context) : SharedPreferences.OnSharedPreferenceChangeListener {
+class SettingsManager private constructor(context: Context) :
+ SharedPreferences.OnSharedPreferenceChangeListener {
private val sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context)
init {
@@ -79,6 +80,10 @@ class SettingsManager private constructor(context: Context) : SharedPreferences.
) ?: SortMode.ALPHA_DOWN
}
+ fun getEdgeToEdge(): Boolean {
+ return sharedPrefs.getBoolean(Keys.KEY_EDGE_TO_EDGE, false)
+ }
+
// --- OVERRIDES ---
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
@@ -124,6 +129,7 @@ class SettingsManager private constructor(context: Context) : SharedPreferences.
const val KEY_LIBRARY_SORT_MODE = "KEY_LIBRARY_SORT_MODE"
const val KEY_THEME = "KEY_THEME"
const val KEY_ACCENT = "KEY_ACCENT"
+ const val KEY_EDGE_TO_EDGE = "KEY_EDGE"
}
private object Theme {
@@ -133,11 +139,12 @@ class SettingsManager private constructor(context: Context) : SharedPreferences.
}
/**
- * A safe interface for receiving preference updates, use this instead of
+ * An interface for receiving some settings updates.
* [SharedPreferences.OnSharedPreferenceChangeListener].
*/
interface Callback {
fun onThemeUpdate(newTheme: Int) {}
fun onAccentUpdate(newAccent: Pair) {}
+ fun onEdgeToEdgeUpdate(isEdgeToEdge: Boolean) {}
}
}
diff --git a/app/src/main/java/org/oxycblt/auxio/settings/adapters/AccentAdapter.kt b/app/src/main/java/org/oxycblt/auxio/settings/adapters/AccentAdapter.kt
index 3314ed8ca..133dc9354 100644
--- a/app/src/main/java/org/oxycblt/auxio/settings/adapters/AccentAdapter.kt
+++ b/app/src/main/java/org/oxycblt/auxio/settings/adapters/AccentAdapter.kt
@@ -1,7 +1,6 @@
package org.oxycblt.auxio.settings.adapters
import android.content.res.ColorStateList
-import android.util.Log
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
@@ -9,6 +8,7 @@ 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
class AccentAdapter(
@@ -29,20 +29,25 @@ class AccentAdapter(
) : RecyclerView.ViewHolder(binding.root) {
fun bind(accentData: Pair) {
- binding.accent.setOnClickListener {
- Log.d(this::class.simpleName, accentData.toString())
- doOnAccentConfirm(accentData)
- }
-
binding.accent.apply {
- imageTintList = if (accentData.first != accent.first) {
- ColorStateList.valueOf(
- android.R.color.transparent.toColor(context)
- )
- } else {
+ contentDescription = getAccentItemSummary(context, accentData)
+
+ setOnClickListener {
+ doOnAccentConfirm(accentData)
+ }
+
+ imageTintList = if (accentData.first == accent.first) {
+ isEnabled = false
+
ColorStateList.valueOf(
R.color.background.toColor(context)
)
+ } else {
+ isEnabled = true
+
+ ColorStateList.valueOf(
+ android.R.color.transparent.toColor(context)
+ )
}
backgroundTintList = ColorStateList.valueOf(
diff --git a/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt b/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt
index 5e49f8401..74cfdcaff 100644
--- a/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt
+++ b/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt
@@ -129,18 +129,19 @@ class SongsFragment : Fragment(), SearchView.OnQueryTextListener {
useDefaultScroller = false
- itemIndicatorSelectedCallbacks.add(object : FastScrollerView.ItemIndicatorSelectedCallback {
- override fun onItemIndicatorSelected(
- indicator: FastScrollItemIndicator,
- indicatorCenterY: Int,
- itemPosition: Int
- ) {
- val layoutManager = binding.songRecycler.layoutManager
- as LinearLayoutManager
+ itemIndicatorSelectedCallbacks.add(object :
+ FastScrollerView.ItemIndicatorSelectedCallback {
+ override fun onItemIndicatorSelected(
+ indicator: FastScrollItemIndicator,
+ indicatorCenterY: Int,
+ itemPosition: Int
+ ) {
+ val layoutManager = binding.songRecycler.layoutManager
+ as LinearLayoutManager
- layoutManager.scrollToPositionWithOffset(itemPosition, 0)
+ layoutManager.scrollToPositionWithOffset(itemPosition, 0)
+ }
}
- }
)
}
diff --git a/app/src/main/java/org/oxycblt/auxio/ui/InterfaceUtils.kt b/app/src/main/java/org/oxycblt/auxio/ui/InterfaceUtils.kt
index ee4766f8f..69ecff340 100644
--- a/app/src/main/java/org/oxycblt/auxio/ui/InterfaceUtils.kt
+++ b/app/src/main/java/org/oxycblt/auxio/ui/InterfaceUtils.kt
@@ -93,6 +93,7 @@ fun PopupMenu.setupSongActions(song: Song, context: Context, playbackModel: Play
}
inflateAndShow(R.menu.menu_song_actions)
}
+
/**
* Show actions for a song item, such as the ones found in [org.oxycblt.auxio.songs.SongsFragment]
*/
diff --git a/app/src/main/res/drawable/ic_auto.xml b/app/src/main/res/drawable/ic_auto.xml
index e80ee38d9..05612ca0f 100644
--- a/app/src/main/res/drawable/ic_auto.xml
+++ b/app/src/main/res/drawable/ic_auto.xml
@@ -5,7 +5,7 @@
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorPrimary">
-
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_check.xml b/app/src/main/res/drawable/ic_check.xml
index 54c0432e0..94844e55e 100644
--- a/app/src/main/res/drawable/ic_check.xml
+++ b/app/src/main/res/drawable/ic_check.xml
@@ -5,7 +5,7 @@
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="@color/background">
-
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_day.xml b/app/src/main/res/drawable/ic_day.xml
index 8f3ea64a2..38d2309a3 100644
--- a/app/src/main/res/drawable/ic_day.xml
+++ b/app/src/main/res/drawable/ic_day.xml
@@ -5,7 +5,7 @@
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorPrimary">
-
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_night.xml b/app/src/main/res/drawable/ic_night.xml
index 99a7fd8e2..3d05bec6b 100644
--- a/app/src/main/res/drawable/ic_night.xml
+++ b/app/src/main/res/drawable/ic_night.xml
@@ -5,7 +5,7 @@
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorPrimary">
-
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_settings.xml b/app/src/main/res/drawable/ic_settings.xml
index 162b11342..e0beb8339 100644
--- a/app/src/main/res/drawable/ic_settings.xml
+++ b/app/src/main/res/drawable/ic_settings.xml
@@ -5,7 +5,7 @@
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorPrimary">
-
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ui_circle.xml b/app/src/main/res/drawable/ui_circle.xml
index fc9a783a4..be5283142 100644
--- a/app/src/main/res/drawable/ui_circle.xml
+++ b/app/src/main/res/drawable/ui_circle.xml
@@ -4,6 +4,5 @@
-
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml
index af8869d67..08dc00f8a 100644
--- a/app/src/main/res/layout/fragment_settings.xml
+++ b/app/src/main/res/layout/fragment_settings.xml
@@ -16,12 +16,12 @@
android:elevation="@dimen/elevation_normal"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
- app:title="@string/label_settings"
+ app:title="@string/setting_title"
app:titleTextAppearance="@style/TextAppearance.Toolbar.Header" />
diff --git a/app/src/main/res/layout/item_accent.xml b/app/src/main/res/layout/item_accent.xml
index ebe46d7a5..75605fdaf 100644
--- a/app/src/main/res/layout/item_accent.xml
+++ b/app/src/main/res/layout/item_accent.xml
@@ -1,6 +1,7 @@
+
@@ -9,6 +10,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/margin_mid_small">
+
-
\ No newline at end of file
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index 1b6a1db54..25ec51de5 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -1,9 +1,9 @@
- - @string/label_settings_theme_auto
- - @string/label_settings_theme_light
- - @string/label_settings_theme_dark
+ - @string/setting_theme_auto
+ - @string/setting_theme_day
+ - @string/setting_theme_night
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 928a29590..01be725c0 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -27,14 +27,18 @@
Next in Queue
Music Playback
The music playback service for Auxio.
- Settings
- Appearance
- Theme
- Automatic
- Light
- Dark
- Choose theme
- Accent
+
+
+ Settings
+ Appearance
+ Theme
+ Automatic
+ Light
+ Dark
+ Accent
+ Edge-To-Edge
+ Disable edge-to-edge
+ Enable edge-to-edge
State saved
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 2199f72ec..a9ee109ec 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -13,12 +13,17 @@
- @color/control_color
- @style/Theme.CustomDialog
- @style/FastScrollTheme
+ - ?attr/colorPrimary
+ - ?attr/colorPrimary
+ - @style/Theme.Preference
- @android:color/transparent
- @color/background
- 0dp
- @color/control_color
- @font/inter_black
+
+ - @drawable/ui_ripple
@@ -83,6 +88,12 @@
- 18sp
+
+