diff --git a/app/src/main/java/org/oxycblt/auxio/detail/DetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/DetailFragment.kt
index 16c7b1af1..5fc2d2af9 100644
--- a/app/src/main/java/org/oxycblt/auxio/detail/DetailFragment.kt
+++ b/app/src/main/java/org/oxycblt/auxio/detail/DetailFragment.kt
@@ -27,7 +27,6 @@ import androidx.core.view.forEach
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController
-import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import org.oxycblt.auxio.R
import org.oxycblt.auxio.databinding.FragmentDetailBinding
@@ -35,7 +34,7 @@ import org.oxycblt.auxio.music.MusicParent
import org.oxycblt.auxio.playback.PlaybackViewModel
import org.oxycblt.auxio.ui.SortMode
import org.oxycblt.auxio.ui.memberBinding
-import org.oxycblt.auxio.util.isLandscape
+import org.oxycblt.auxio.util.applySpans
/**
* A Base [Fragment] implementing the base features shared across all detail fragments.
@@ -110,16 +109,7 @@ abstract class DetailFragment : Fragment() {
adapter = detailAdapter
setHasFixedSize(true)
- // Set up a grid if the mode is landscape
- if (requireContext().isLandscape()) {
- layoutManager = GridLayoutManager(requireContext(), 2).also {
- it.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
- override fun getSpanSize(position: Int): Int {
- return if (gridLookup(position)) 2 else 1
- }
- }
- }
- }
+ applySpans(gridLookup)
}
}
diff --git a/app/src/main/java/org/oxycblt/auxio/util/ContextUtil.kt b/app/src/main/java/org/oxycblt/auxio/util/ContextUtil.kt
index 052097ac5..d49c8fb3a 100644
--- a/app/src/main/java/org/oxycblt/auxio/util/ContextUtil.kt
+++ b/app/src/main/java/org/oxycblt/auxio/util/ContextUtil.kt
@@ -106,12 +106,3 @@ fun Context.getPlural(@PluralsRes pluralsRes: Int, value: Int): String {
fun Context.isLandscape(): Boolean {
return resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
}
-
-/**
- * Determine if the tablet is XLARGE, ignoring normal tablets.
- */
-fun Context.isXLTablet(): Boolean {
- val layout = resources.configuration.screenLayout and Configuration.SCREENLAYOUT_SIZE_MASK
-
- return layout == Configuration.SCREENLAYOUT_SIZE_XLARGE
-}
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 c8c6fd171..deffc647b 100644
--- a/app/src/main/java/org/oxycblt/auxio/util/ViewUtil.kt
+++ b/app/src/main/java/org/oxycblt/auxio/util/ViewUtil.kt
@@ -35,6 +35,7 @@ import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.shape.MaterialShapeDrawable
+import org.oxycblt.auxio.R
/**
* Apply a [MaterialShapeDrawable] to this view, automatically initializing the elevation overlay
@@ -57,11 +58,7 @@ fun View.applyMaterialDrawable() {
* regardless of spans
*/
fun RecyclerView.applySpans(shouldBeFullWidth: ((Int) -> Boolean)? = null) {
- val spans = if (context.isLandscape()) {
- if (context.isXLTablet()) 3 else 2
- } else {
- if (context.isXLTablet()) 2 else 1
- }
+ val spans = resources.getInteger(R.integer.recycler_spans)
if (spans > 1) {
val mgr = GridLayoutManager(context, spans)
diff --git a/app/src/main/res/values-sw840dp-land/config.xml b/app/src/main/res/values-sw840dp-land/config.xml
new file mode 100644
index 000000000..dcaecfb66
--- /dev/null
+++ b/app/src/main/res/values-sw840dp-land/config.xml
@@ -0,0 +1,4 @@
+
+
+ 3
+
diff --git a/app/src/main/res/values-v31/bools.xml b/app/src/main/res/values-v31/config.xml
similarity index 100%
rename from app/src/main/res/values-v31/bools.xml
rename to app/src/main/res/values-v31/config.xml
diff --git a/app/src/main/res/values-w600dp/config.xml b/app/src/main/res/values-w600dp/config.xml
new file mode 100644
index 000000000..d32b032d7
--- /dev/null
+++ b/app/src/main/res/values-w600dp/config.xml
@@ -0,0 +1,4 @@
+
+
+ 2
+
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
deleted file mode 100644
index 21bbd907d..000000000
--- a/app/src/main/res/values/attrs.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values/bools.xml b/app/src/main/res/values/config.xml
similarity index 70%
rename from app/src/main/res/values/bools.xml
rename to app/src/main/res/values/config.xml
index 658e9ab20..09a31ac51 100644
--- a/app/src/main/res/values/bools.xml
+++ b/app/src/main/res/values/config.xml
@@ -1,4 +1,5 @@
true
+ 1
diff --git a/app/src/main/res/values/integers.xml b/app/src/main/res/values/integers.xml
deleted file mode 100644
index e37d388e7..000000000
--- a/app/src/main/res/values/integers.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- -1
- 1
- 2
-
- 0xA103
- 0xA104
- 0xA105
- 0xA106
-
\ No newline at end of file
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/settings.xml
similarity index 62%
rename from app/src/main/res/values/arrays.xml
rename to app/src/main/res/values/settings.xml
index 95862a7ad..c00e52ab8 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/settings.xml
@@ -1,5 +1,11 @@
+
+
+
+
+
+
- @string/set_theme_auto
- @string/set_theme_day
@@ -25,4 +31,13 @@
- @integer/play_mode_album
- @integer/play_mode_genre
+
+ -1
+ 1
+ 2
+
+ 0xA103
+ 0xA104
+ 0xA105
+ 0xA106
\ No newline at end of file