diff --git a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt index 1f05107d5..7e3fb4084 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt @@ -71,6 +71,8 @@ class MainFragment : Fragment() { binding.lifecycleOwner = this + handleCompactPlaybackVisibility(binding, playbackModel.song.value) + binding.navBar.itemIconTintList = navTints binding.navBar.itemTextColor = navTints @@ -84,17 +86,7 @@ class MainFragment : Fragment() { // Change CompactPlaybackFragment's visibility here so that an animation occurs. playbackModel.song.observe(viewLifecycleOwner) { - if (it == null) { - Log.d( - this::class.simpleName, - "Hiding CompactPlaybackFragment since no song is being played." - ) - - binding.compactPlayback.visibility = View.GONE - playbackModel.disableAnimation() - } else { - binding.compactPlayback.visibility = View.VISIBLE - } + handleCompactPlaybackVisibility(binding, it) } playbackModel.navToItem.observe(viewLifecycleOwner) { @@ -161,8 +153,20 @@ class MainFragment : Fragment() { } } - // - return false } + + private fun handleCompactPlaybackVisibility(binding: FragmentMainBinding, song: Song?) { + if (song == null) { + Log.d( + this::class.simpleName, + "Hiding CompactPlaybackFragment since no song is being played." + ) + + binding.compactPlayback.visibility = View.GONE + playbackModel.disableAnimation() + } else { + binding.compactPlayback.visibility = View.VISIBLE + } + } } diff --git a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt index a1e7cebd1..621716f07 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt @@ -73,21 +73,30 @@ class AlbumDetailFragment : DetailFragment() { setOnMenuItemClickListener { when (it.itemId) { - R.id.action_shuffle -> playbackModel.playAlbum( - detailModel.currentAlbum.value!!, + R.id.action_shuffle -> { + playbackModel.playAlbum( + detailModel.currentAlbum.value!!, true + ) + true - ) - R.id.action_play -> playbackModel.playAlbum( - detailModel.currentAlbum.value!!, false - ) + } + R.id.action_play -> { + playbackModel.playAlbum( + detailModel.currentAlbum.value!!, false + ) + + true + } R.id.action_queue_add -> { playbackModel.addToUserQueue(detailModel.currentAlbum.value!!) context.getString(R.string.label_queue_added).createToast(requireContext()) - } - } - true + true + } + + else -> false + } } } diff --git a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt index 7c2cb10f8..4fb14ae42 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt @@ -76,16 +76,24 @@ class ArtistDetailFragment : DetailFragment() { setOnMenuItemClickListener { when (it.itemId) { - R.id.action_shuffle -> playbackModel.playArtist( - detailModel.currentArtist.value!!, - true - ) - R.id.action_play -> playbackModel.playArtist( - detailModel.currentArtist.value!!, false - ) - } + R.id.action_shuffle -> { + playbackModel.playArtist( + detailModel.currentArtist.value!!, + true + ) - true + true + } + R.id.action_play -> { + playbackModel.playArtist( + detailModel.currentArtist.value!!, false + ) + + true + } + + else -> false + } } } diff --git a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt index d99772c77..01db60f67 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt @@ -75,16 +75,24 @@ class GenreDetailFragment : DetailFragment() { setOnMenuItemClickListener { when (it.itemId) { - R.id.action_shuffle -> playbackModel.playGenre( - detailModel.currentGenre.value!!, - true - ) - R.id.action_play -> playbackModel.playGenre( - detailModel.currentGenre.value!!, false - ) - } + R.id.action_shuffle -> { + playbackModel.playGenre( + detailModel.currentGenre.value!!, + true + ) - true + true + } + R.id.action_play -> { + playbackModel.playGenre( + detailModel.currentGenre.value!!, false + ) + + true + } + + else -> false + } } } 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 b2a638728..dd3f62199 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt @@ -80,6 +80,7 @@ class LibraryFragment : Fragment(), SearchView.OnQueryTextListener { ) it.expandActionView() } + true } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt index 46b41bf3b..79520a23c 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt @@ -75,9 +75,9 @@ class PlaybackFragment : Fragment(), SeekBar.OnSeekBarChangeListener { setOnMenuItemClickListener { if (it.itemId == R.id.action_queue) { findNavController().navigate(PlaybackFragmentDirections.actionShowQueue()) - } - true + true + } else false } queueMenuItem = menu.findItem(R.id.action_queue) diff --git a/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt index 6ca116b6c..854cbd3e7 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt @@ -107,7 +107,6 @@ class SettingsListFragment : PreferenceFragmentCompat() { ) } - // TODO: Implement dialog edge-to-edge layoutManager = LinearLayoutManager( requireContext() ).also { it.orientation = LinearLayoutManager.HORIZONTAL } 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 7e284775f..672c623e4 100644 --- a/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt @@ -6,7 +6,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.appcompat.widget.PopupMenu -import androidx.appcompat.widget.SearchView import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.recyclerview.widget.LinearLayoutManager @@ -24,7 +23,7 @@ import org.oxycblt.auxio.ui.setupSongActions * them. * @author OxygenCobalt */ -class SongsFragment : Fragment(), SearchView.OnQueryTextListener { +class SongsFragment : Fragment() { private val playbackModel: PlaybackViewModel by activityViewModels() override fun onCreateView( @@ -52,8 +51,9 @@ class SongsFragment : Fragment(), SearchView.OnQueryTextListener { setOnMenuItemClickListener { if (it.itemId == R.id.action_shuffle) { playbackModel.shuffleAll() - } - true + + true + } else false } } @@ -69,28 +69,16 @@ class SongsFragment : Fragment(), SearchView.OnQueryTextListener { return binding.root } - override fun onQueryTextChange(newText: String?): Boolean { - return false - } - - override fun onQueryTextSubmit(query: String?): Boolean { - return false - } - private fun setupFastScroller(binding: FragmentSongsBinding) { val musicStore = MusicStore.getInstance() binding.songFastScroll.apply { var hasAddedNumber = false - var iters = 0 - - // TODO: Do selection instead of using iters setupWithRecyclerView( binding.songRecycler, { pos -> val item = musicStore.songs[pos] - iters++ // If the item starts with "the"/"a", then actually use the character after that // as its initial. Yes, this is stupidly western-centric but the code [hopefully] @@ -108,31 +96,36 @@ class SongsFragment : Fragment(), SearchView.OnQueryTextListener { item.name[0].toUpperCase() } - // Check if this song starts with a number, if so, then concat it with a single - // "Numeric" item if haven't already. - // This check only occurs on the second time the fast scroller is polled for items. - if (iters >= musicStore.songs.size) { - if (char.isDigit()) { - if (!hasAddedNumber) { - hasAddedNumber = true - - return@setupWithRecyclerView FastScrollItemIndicator.Text("#") - } else { - return@setupWithRecyclerView null - } - } + // Use "#" if the character is a digit. + if (char.isDigit()) { + FastScrollItemIndicator.Text("#") + } else { + FastScrollItemIndicator.Text(char.toString()) } - - FastScrollItemIndicator.Text( - char.toString() - ) } ) + showIndicator = { indicator, _, _ -> + var isGood = true + + // Remove all but the first "#" character + if (indicator is FastScrollItemIndicator.Text) { + if (indicator.text == "#") { + if (hasAddedNumber) { + isGood = false + } + + hasAddedNumber = true + } + } + + isGood + } + useDefaultScroller = false - itemIndicatorSelectedCallbacks.add(object : - FastScrollerView.ItemIndicatorSelectedCallback { + itemIndicatorSelectedCallbacks.add( + object : FastScrollerView.ItemIndicatorSelectedCallback { override fun onItemIndicatorSelected( indicator: FastScrollItemIndicator, indicatorCenterY: Int, diff --git a/app/src/main/res/layout/fragment_album_detail.xml b/app/src/main/res/layout/fragment_album_detail.xml index c645642c4..b2acd40a0 100644 --- a/app/src/main/res/layout/fragment_album_detail.xml +++ b/app/src/main/res/layout/fragment_album_detail.xml @@ -27,6 +27,7 @@ diff --git a/app/src/main/res/layout/fragment_artist_detail.xml b/app/src/main/res/layout/fragment_artist_detail.xml index 3ef660143..06ed1c9ca 100644 --- a/app/src/main/res/layout/fragment_artist_detail.xml +++ b/app/src/main/res/layout/fragment_artist_detail.xml @@ -27,6 +27,7 @@ diff --git a/app/src/main/res/layout/fragment_genre_detail.xml b/app/src/main/res/layout/fragment_genre_detail.xml index 962446029..e4d9485b7 100644 --- a/app/src/main/res/layout/fragment_genre_detail.xml +++ b/app/src/main/res/layout/fragment_genre_detail.xml @@ -27,6 +27,7 @@ diff --git a/app/src/main/res/layout/fragment_queue.xml b/app/src/main/res/layout/fragment_queue.xml index 1eedc3b4d..3d23708dd 100644 --- a/app/src/main/res/layout/fragment_queue.xml +++ b/app/src/main/res/layout/fragment_queue.xml @@ -14,6 +14,7 @@ diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index 0e0862f38..f6380f428 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -10,6 +10,7 @@ 32dp + 50dp 48dp diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 07d82ee79..71f9f46b7 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -26,21 +26,27 @@ + - + + + + +