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