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