diff --git a/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt b/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt
index 2f55ff2f0..61d177fc7 100644
--- a/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt
+++ b/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt
@@ -30,6 +30,7 @@ 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.getLandscapeSpans
import org.oxycblt.auxio.ui.isLandscape
import org.oxycblt.auxio.ui.resolveAttr
import org.oxycblt.auxio.ui.setupAlbumActions
@@ -129,12 +130,13 @@ class LibraryFragment : Fragment(), SearchView.OnQueryTextListener {
setHasFixedSize(true)
if (isLandscape(resources)) {
- layoutManager = GridLayoutManager(requireContext(), GridLayoutManager.VERTICAL).apply {
- spanCount = 3
+ val spans = getLandscapeSpans(resources)
+
+ layoutManager = GridLayoutManager(requireContext(), spans).apply {
spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int): Int {
return if (binding.libraryRecycler.adapter == searchAdapter) {
- if (searchAdapter.currentList[position] is Header) 3 else 1
+ if (searchAdapter.currentList[position] is Header) spans else 1
} else 1
}
}
@@ -173,7 +175,11 @@ class LibraryFragment : Fragment(), SearchView.OnQueryTextListener {
if (it != null) {
libraryModel.updateNavigationStatus(false)
- onItemSelection(it)
+ if (it is Song) {
+ onItemSelection(it.album)
+ } else {
+ onItemSelection(it)
+ }
}
}
diff --git a/app/src/main/java/org/oxycblt/auxio/library/LibraryViewModel.kt b/app/src/main/java/org/oxycblt/auxio/library/LibraryViewModel.kt
index 082440013..ccdf20f18 100644
--- a/app/src/main/java/org/oxycblt/auxio/library/LibraryViewModel.kt
+++ b/app/src/main/java/org/oxycblt/auxio/library/LibraryViewModel.kt
@@ -174,8 +174,6 @@ class LibraryViewModel : ViewModel(), SettingsManager.Callback {
DisplayMode.SHOW_ALBUMS -> {
mSortMode.value!!.getSortedAlbumList(musicStore.albums)
}
-
- else -> error("Unsupported Library DisplayMode $mDisplayMode")
}
}
}
diff --git a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt
index 353a581fb..d8542fbfc 100644
--- a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt
+++ b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt
@@ -241,11 +241,11 @@ class PlaybackStateManager private constructor() {
* @param song The song to play
* @param dontPlay (Optional, defaults to false) whether to not set [isPlaying] to true.
*/
- private fun updatePlayback(song: Song, dontPlay: Boolean = false) {
+ private fun updatePlayback(song: Song) {
mSong = song
mPosition = 0
- if (!mIsPlaying && !dontPlay) {
+ if (!mIsPlaying) {
setPlayingStatus(true)
}
@@ -341,8 +341,14 @@ class PlaybackStateManager private constructor() {
mIndex = 0
forceQueueUpdate()
- updatePlayback(mQueue[0], dontPlay = true)
+ // The whole point here is making the playback pause and loop, so duplicate
+ // the updatePlayback code instead of using it with a useless arg tacked on.
+ mSong = mQueue[0]
+ mPosition = 0
+
setPlayingStatus(false)
+
+ mIsInUserQueue = false
}
SettingsManager.EntryValues.AT_END_LOOP -> {
diff --git a/app/src/main/java/org/oxycblt/auxio/recycler/DisplayMode.kt b/app/src/main/java/org/oxycblt/auxio/recycler/DisplayMode.kt
index 889bfd8de..3cfaf1567 100644
--- a/app/src/main/java/org/oxycblt/auxio/recycler/DisplayMode.kt
+++ b/app/src/main/java/org/oxycblt/auxio/recycler/DisplayMode.kt
@@ -10,7 +10,7 @@ import org.oxycblt.auxio.R
enum class DisplayMode(@DrawableRes val iconRes: Int) {
SHOW_GENRES(R.drawable.ic_genre),
SHOW_ARTISTS(R.drawable.ic_artist),
- SHOW_ALBUMS(R.drawable.ic_album),
+ SHOW_ALBUMS(R.drawable.ic_album);
/**
* Make a slice of all the values that this DisplayMode covers.
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 7a87eb415..8a5d9575c 100644
--- a/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt
+++ b/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt
@@ -22,6 +22,7 @@ import org.oxycblt.auxio.music.MusicStore
import org.oxycblt.auxio.playback.PlaybackViewModel
import org.oxycblt.auxio.settings.SettingsManager
import org.oxycblt.auxio.ui.accent
+import org.oxycblt.auxio.ui.getLandscapeSpans
import org.oxycblt.auxio.ui.isLandscape
import org.oxycblt.auxio.ui.setupSongActions
import org.oxycblt.auxio.ui.toColor
@@ -81,8 +82,10 @@ class SongsFragment : Fragment() {
setHasFixedSize(true)
if (isLandscape(resources)) {
+ val spans = getLandscapeSpans(resources)
+
layoutManager = GridLayoutManager(requireContext(), GridLayoutManager.VERTICAL).also {
- it.spanCount = 3
+ it.spanCount = spans
}
}
@@ -151,7 +154,7 @@ class SongsFragment : Fragment() {
var isGood = true
if (concatInterval == -1) {
- // If the screen size is too small to contain all the entries, truncate entries
+ // If the scroller size is too small to contain all the entries, truncate entries
// so that the fast scroller entries fit.
val maxEntries = (height / (indicatorTextSize + textPadding))
diff --git a/app/src/main/java/org/oxycblt/auxio/ui/EdgeUtils.kt b/app/src/main/java/org/oxycblt/auxio/ui/EdgeUtils.kt
index 98f32adc1..8a9e11983 100644
--- a/app/src/main/java/org/oxycblt/auxio/ui/EdgeUtils.kt
+++ b/app/src/main/java/org/oxycblt/auxio/ui/EdgeUtils.kt
@@ -14,7 +14,6 @@ import android.view.WindowManager
/**
* Check if we are in the "Irregular" landscape mode [e.g landscape, but nav bar is on the sides]
* Used to disable most of edge-to-edge if that's the case, as I cant get it to work on this mode yet.
- * TODO: Make edge-to-edge work better in irregular mode
* @return True if we are in the irregular landscape mode, false if not.
*/
fun Activity.isIrregularLandscape(): Boolean {
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 c9ece3240..05d0fe20d 100644
--- a/app/src/main/java/org/oxycblt/auxio/ui/InterfaceUtils.kt
+++ b/app/src/main/java/org/oxycblt/auxio/ui/InterfaceUtils.kt
@@ -55,6 +55,14 @@ fun isLandscape(resources: Resources): Boolean {
return resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
}
+/**
+ * Get the span count for most RecyclerViews when in landscape mode.
+ * @return 3 if landscape mode is tablet, 2 if landscape mode is phone
+ */
+fun getLandscapeSpans(resources: Resources): Int {
+ return if (resources.configuration.screenLayout == Configuration.SCREENLAYOUT_SIZE_LARGE) 3 else 2
+}
+
/**
* Create a [Toast] from a [String]
* @param context [Context] required to create the toast
diff --git a/app/src/main/res/layout-large-land/fragment_playback.xml b/app/src/main/res/layout-large-land/fragment_playback.xml
new file mode 100644
index 000000000..fb6d51f5d
--- /dev/null
+++ b/app/src/main/res/layout-large-land/fragment_playback.xml
@@ -0,0 +1,242 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 72a6baff7..928c7ceb4 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -11,6 +11,7 @@
16dp
24dp
32dp
+ 128dp
2dp