From 6d342325ea7c3e52c575aba729740091fedd183c Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Fri, 28 Jul 2023 08:44:31 -0600 Subject: [PATCH] list: open menu dialogs from toolbars Make it so that toolbars now open menu dialogs as items do. This excludes the selection menu currently since there's no dialog for such. --- .../auxio/detail/AlbumDetailFragment.kt | 49 ++---------- .../auxio/detail/ArtistDetailFragment.kt | 58 ++------------ .../auxio/detail/GenreDetailFragment.kt | 44 ++--------- .../auxio/detail/PlaylistDetailFragment.kt | 68 +++------------- .../auxio/playback/PlaybackPanelFragment.kt | 78 ++++++++----------- .../java/org/oxycblt/auxio/ui/IconToolbar.kt | 4 - .../org/oxycblt/auxio/util/FrameworkUtil.kt | 23 ++++++ app/src/main/res/layout/fragment_detail.xml | 1 + app/src/main/res/menu/item_detail_album.xml | 31 ++++++++ app/src/main/res/menu/item_detail_parent.xml | 27 +++++++ .../main/res/menu/item_detail_playlist.xml | 31 ++++++++ app/src/main/res/menu/item_playback_song.xml | 26 +++++++ app/src/main/res/menu/toolbar_album.xml | 18 ----- app/src/main/res/menu/toolbar_detail.xml | 8 ++ app/src/main/res/menu/toolbar_parent.xml | 15 ---- app/src/main/res/menu/toolbar_playback.xml | 20 +---- app/src/main/res/menu/toolbar_playlist.xml | 18 ----- app/src/main/res/navigation/inner.xml | 12 +++ 18 files changed, 222 insertions(+), 309 deletions(-) delete mode 100644 app/src/main/java/org/oxycblt/auxio/ui/IconToolbar.kt create mode 100644 app/src/main/res/menu/item_detail_album.xml create mode 100644 app/src/main/res/menu/item_detail_parent.xml create mode 100644 app/src/main/res/menu/item_detail_playlist.xml create mode 100644 app/src/main/res/menu/item_playback_song.xml delete mode 100644 app/src/main/res/menu/toolbar_album.xml create mode 100644 app/src/main/res/menu/toolbar_detail.xml delete mode 100644 app/src/main/res/menu/toolbar_parent.xml delete mode 100644 app/src/main/res/menu/toolbar_playlist.xml 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 29afcc68f..7227d9aa6 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt @@ -20,7 +20,6 @@ package org.oxycblt.auxio.detail import android.os.Bundle import android.view.LayoutInflater -import android.view.MenuItem import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs @@ -53,11 +52,9 @@ import org.oxycblt.auxio.util.canScroll import org.oxycblt.auxio.util.collect import org.oxycblt.auxio.util.collectImmediately import org.oxycblt.auxio.util.logD -import org.oxycblt.auxio.util.logW import org.oxycblt.auxio.util.navigateSafe +import org.oxycblt.auxio.util.overrideOnOverflowMenuClick import org.oxycblt.auxio.util.setFullWidthLookup -import org.oxycblt.auxio.util.share -import org.oxycblt.auxio.util.showToast import org.oxycblt.auxio.util.unlikelyToBeNull /** @@ -101,9 +98,11 @@ class AlbumDetailFragment : // --- UI SETUP -- binding.detailNormalToolbar.apply { - inflateMenu(R.menu.toolbar_album) setNavigationOnClickListener { findNavController().navigateUp() } - setOnMenuItemClickListener(this@AlbumDetailFragment) + overrideOnOverflowMenuClick { + listModel.openMenu( + R.menu.item_detail_album, unlikelyToBeNull(detailModel.currentAlbum.value)) + } } binding.detailRecycler.apply { @@ -141,42 +140,6 @@ class AlbumDetailFragment : detailModel.albumSongInstructions.consume() } - override fun onMenuItemClick(item: MenuItem): Boolean { - if (super.onMenuItemClick(item)) { - return true - } - - val currentAlbum = unlikelyToBeNull(detailModel.currentAlbum.value) - return when (item.itemId) { - R.id.action_play_next -> { - playbackModel.playNext(currentAlbum) - requireContext().showToast(R.string.lng_queue_added) - true - } - R.id.action_queue_add -> { - playbackModel.addToQueue(currentAlbum) - requireContext().showToast(R.string.lng_queue_added) - true - } - R.id.action_artist_details -> { - onNavigateToParentArtist() - true - } - R.id.action_playlist_add -> { - musicModel.addToPlaylist(currentAlbum) - true - } - R.id.action_share -> { - requireContext().share(currentAlbum) - true - } - else -> { - logW("Unexpected menu item selected") - false - } - } - } - override fun onRealClick(item: Song) { playbackModel.play(item, detailModel.playInAlbumWith) } @@ -279,7 +242,7 @@ class AlbumDetailFragment : val directions = when (menu) { is Menu.ForSong -> AlbumDetailFragmentDirections.openSongMenu(menu.parcel) - is Menu.ForAlbum, + is Menu.ForAlbum -> AlbumDetailFragmentDirections.openAlbumMenu(menu.parcel) is Menu.ForArtist, is Menu.ForGenre, is Menu.ForPlaylist -> error("Unexpected menu $menu") 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 8ae1c66da..c209a1a05 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt @@ -20,7 +20,6 @@ package org.oxycblt.auxio.detail import android.os.Bundle import android.view.LayoutInflater -import android.view.MenuItem import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs @@ -52,11 +51,9 @@ import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.util.collect import org.oxycblt.auxio.util.collectImmediately import org.oxycblt.auxio.util.logD -import org.oxycblt.auxio.util.logW import org.oxycblt.auxio.util.navigateSafe +import org.oxycblt.auxio.util.overrideOnOverflowMenuClick import org.oxycblt.auxio.util.setFullWidthLookup -import org.oxycblt.auxio.util.share -import org.oxycblt.auxio.util.showToast import org.oxycblt.auxio.util.unlikelyToBeNull /** @@ -99,9 +96,12 @@ class ArtistDetailFragment : // --- UI SETUP --- binding.detailNormalToolbar.apply { - inflateMenu(R.menu.toolbar_parent) setNavigationOnClickListener { findNavController().navigateUp() } setOnMenuItemClickListener(this@ArtistDetailFragment) + overrideOnOverflowMenuClick { + listModel.openMenu( + R.menu.item_detail_parent, unlikelyToBeNull(detailModel.currentArtist.value)) + } } binding.detailRecycler.apply { @@ -142,38 +142,6 @@ class ArtistDetailFragment : detailModel.artistSongInstructions.consume() } - override fun onMenuItemClick(item: MenuItem): Boolean { - if (super.onMenuItemClick(item)) { - return true - } - - val currentArtist = unlikelyToBeNull(detailModel.currentArtist.value) - return when (item.itemId) { - R.id.action_play_next -> { - playbackModel.playNext(currentArtist) - requireContext().showToast(R.string.lng_queue_added) - true - } - R.id.action_queue_add -> { - playbackModel.addToQueue(currentArtist) - requireContext().showToast(R.string.lng_queue_added) - true - } - R.id.action_playlist_add -> { - musicModel.addToPlaylist(currentArtist) - true - } - R.id.action_share -> { - requireContext().share(currentArtist) - true - } - else -> { - logW("Unexpected menu item selected") - false - } - } - } - override fun onRealClick(item: Music) { when (item) { is Album -> detailModel.showAlbum(item) @@ -209,19 +177,7 @@ class ArtistDetailFragment : findNavController().navigateUp() return } - requireBinding().detailNormalToolbar.apply { - title = artist.name.resolve(requireContext()) - - // Disable options that make no sense with an empty artist - val playable = artist.songs.isNotEmpty() - if (!playable) { - logD("Artist is empty, disabling playback/playlist/share options") - } - menu.findItem(R.id.action_play_next).isEnabled = playable - menu.findItem(R.id.action_queue_add).isEnabled = playable - menu.findItem(R.id.action_playlist_add).isEnabled = playable - menu.findItem(R.id.action_share).isEnabled = playable - } + requireBinding().detailNormalToolbar.title = artist.name.resolve(requireContext()) artistHeaderAdapter.setParent(artist) } @@ -282,7 +238,7 @@ class ArtistDetailFragment : when (menu) { is Menu.ForSong -> ArtistDetailFragmentDirections.openSongMenu(menu.parcel) is Menu.ForAlbum -> ArtistDetailFragmentDirections.openAlbumMenu(menu.parcel) - is Menu.ForArtist, + is Menu.ForArtist -> ArtistDetailFragmentDirections.openArtistMenu(menu.parcel) is Menu.ForGenre, is Menu.ForPlaylist -> error("Unexpected menu $menu") } 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 cdcd59e37..8b9cf5a68 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt @@ -20,7 +20,6 @@ package org.oxycblt.auxio.detail import android.os.Bundle import android.view.LayoutInflater -import android.view.MenuItem import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs @@ -52,11 +51,9 @@ import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.util.collect import org.oxycblt.auxio.util.collectImmediately import org.oxycblt.auxio.util.logD -import org.oxycblt.auxio.util.logW import org.oxycblt.auxio.util.navigateSafe +import org.oxycblt.auxio.util.overrideOnOverflowMenuClick import org.oxycblt.auxio.util.setFullWidthLookup -import org.oxycblt.auxio.util.share -import org.oxycblt.auxio.util.showToast import org.oxycblt.auxio.util.unlikelyToBeNull /** @@ -97,9 +94,12 @@ class GenreDetailFragment : // --- UI SETUP --- binding.detailNormalToolbar.apply { - inflateMenu(R.menu.toolbar_parent) setNavigationOnClickListener { findNavController().navigateUp() } setOnMenuItemClickListener(this@GenreDetailFragment) + overrideOnOverflowMenuClick { + listModel.openMenu( + R.menu.item_detail_parent, unlikelyToBeNull(detailModel.currentGenre.value)) + } } binding.detailRecycler.apply { @@ -140,38 +140,6 @@ class GenreDetailFragment : detailModel.genreSongInstructions.consume() } - override fun onMenuItemClick(item: MenuItem): Boolean { - if (super.onMenuItemClick(item)) { - return true - } - - val currentGenre = unlikelyToBeNull(detailModel.currentGenre.value) - return when (item.itemId) { - R.id.action_play_next -> { - playbackModel.playNext(currentGenre) - requireContext().showToast(R.string.lng_queue_added) - true - } - R.id.action_queue_add -> { - playbackModel.addToQueue(currentGenre) - requireContext().showToast(R.string.lng_queue_added) - true - } - R.id.action_playlist_add -> { - musicModel.addToPlaylist(currentGenre) - true - } - R.id.action_share -> { - requireContext().share(currentGenre) - true - } - else -> { - logW("Unexpected menu item selected") - false - } - } - } - override fun onRealClick(item: Music) { when (item) { is Artist -> detailModel.showArtist(item) @@ -271,8 +239,8 @@ class GenreDetailFragment : when (menu) { is Menu.ForSong -> GenreDetailFragmentDirections.openSongMenu(menu.parcel) is Menu.ForArtist -> GenreDetailFragmentDirections.openArtistMenu(menu.parcel) + is Menu.ForGenre -> GenreDetailFragmentDirections.openGenreMenu(menu.parcel) is Menu.ForAlbum, - is Menu.ForGenre, is Menu.ForPlaylist -> error("Unexpected menu $menu") } findNavController().navigateSafe(directions) diff --git a/app/src/main/java/org/oxycblt/auxio/detail/PlaylistDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/PlaylistDetailFragment.kt index b97135cb5..9a2c02777 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/PlaylistDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/PlaylistDetailFragment.kt @@ -20,7 +20,6 @@ package org.oxycblt.auxio.detail import android.os.Bundle import android.view.LayoutInflater -import android.view.MenuItem import androidx.fragment.app.activityViewModels import androidx.navigation.NavController import androidx.navigation.NavDestination @@ -55,11 +54,9 @@ import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.util.collect import org.oxycblt.auxio.util.collectImmediately import org.oxycblt.auxio.util.logD -import org.oxycblt.auxio.util.logW import org.oxycblt.auxio.util.navigateSafe +import org.oxycblt.auxio.util.overrideOnOverflowMenuClick import org.oxycblt.auxio.util.setFullWidthLookup -import org.oxycblt.auxio.util.share -import org.oxycblt.auxio.util.showToast import org.oxycblt.auxio.util.unlikelyToBeNull /** @@ -103,9 +100,13 @@ class PlaylistDetailFragment : // --- UI SETUP --- binding.detailNormalToolbar.apply { - inflateMenu(R.menu.toolbar_playlist) setNavigationOnClickListener { findNavController().navigateUp() } setOnMenuItemClickListener(this@PlaylistDetailFragment) + overrideOnOverflowMenuClick { + listModel.openMenu( + R.menu.item_detail_playlist, + unlikelyToBeNull(detailModel.currentPlaylist.value)) + } } binding.detailEditToolbar.apply { @@ -190,46 +191,6 @@ class PlaylistDetailFragment : } } - override fun onMenuItemClick(item: MenuItem): Boolean { - if (super.onMenuItemClick(item)) { - return true - } - - val currentPlaylist = unlikelyToBeNull(detailModel.currentPlaylist.value) - return when (item.itemId) { - R.id.action_play_next -> { - playbackModel.playNext(currentPlaylist) - requireContext().showToast(R.string.lng_queue_added) - true - } - R.id.action_queue_add -> { - playbackModel.addToQueue(currentPlaylist) - requireContext().showToast(R.string.lng_queue_added) - true - } - R.id.action_rename -> { - musicModel.renamePlaylist(currentPlaylist) - true - } - R.id.action_delete -> { - musicModel.deletePlaylist(currentPlaylist) - true - } - R.id.action_share -> { - requireContext().share(currentPlaylist) - true - } - R.id.action_save -> { - detailModel.savePlaylistEdit() - true - } - else -> { - logW("Unexpected menu item selected") - false - } - } - } - override fun onRealClick(item: Song) { playbackModel.play(item, detailModel.playInPlaylistWith) } @@ -265,17 +226,7 @@ class PlaylistDetailFragment : return } val binding = requireBinding() - binding.detailNormalToolbar.apply { - title = playlist.name.resolve(requireContext()) - // Disable options that make no sense with an empty playlist - val playable = playlist.songs.isNotEmpty() - if (!playable) { - logD("Playlist is empty, disabling playback/share options") - } - menu.findItem(R.id.action_play_next).isEnabled = playable - menu.findItem(R.id.action_queue_add).isEnabled = playable - menu.findItem(R.id.action_share).isEnabled = playable - } + binding.detailNormalToolbar.title = playlist.name.resolve(requireContext()) binding.detailEditToolbar.title = getString(R.string.fmt_editing, playlist.name.resolve(requireContext())) playlistHeaderAdapter.setParent(playlist) @@ -349,10 +300,11 @@ class PlaylistDetailFragment : val directions = when (menu) { is Menu.ForSong -> PlaylistDetailFragmentDirections.openSongMenu(menu.parcel) + is Menu.ForPlaylist -> + PlaylistDetailFragmentDirections.openPlaylistMenu(menu.parcel) is Menu.ForArtist, is Menu.ForAlbum, - is Menu.ForGenre, - is Menu.ForPlaylist -> error("Unexpected menu $menu") + is Menu.ForGenre -> error("Unexpected menu $menu") } findNavController().navigateSafe(directions) } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt index af1efd658..bc842e28a 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt @@ -34,8 +34,8 @@ import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentPlaybackPanelBinding import org.oxycblt.auxio.detail.DetailViewModel import org.oxycblt.auxio.detail.Show +import org.oxycblt.auxio.list.ListViewModel import org.oxycblt.auxio.music.MusicParent -import org.oxycblt.auxio.music.MusicViewModel import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.music.resolveNames import org.oxycblt.auxio.playback.state.RepeatMode @@ -44,7 +44,7 @@ import org.oxycblt.auxio.ui.ViewBindingFragment import org.oxycblt.auxio.util.collect import org.oxycblt.auxio.util.collectImmediately import org.oxycblt.auxio.util.logD -import org.oxycblt.auxio.util.share +import org.oxycblt.auxio.util.overrideOnOverflowMenuClick import org.oxycblt.auxio.util.showToast import org.oxycblt.auxio.util.systemBarInsetsCompat @@ -62,8 +62,8 @@ class PlaybackPanelFragment : Toolbar.OnMenuItemClickListener, StyledSeekBar.Listener { private val playbackModel: PlaybackViewModel by activityViewModels() - private val musicModel: MusicViewModel by activityViewModels() private val detailModel: DetailViewModel by activityViewModels() + private val listModel: ListViewModel by activityViewModels() private var equalizerLauncher: ActivityResultLauncher? = null override fun onCreateBinding(inflater: LayoutInflater) = @@ -92,6 +92,13 @@ class PlaybackPanelFragment : binding.playbackToolbar.apply { setNavigationOnClickListener { playbackModel.openMain() } setOnMenuItemClickListener(this@PlaybackPanelFragment) + overrideOnOverflowMenuClick { + playbackModel.song.value?.let { + // No playback options are actually available in the menu, so use a junk + // PlaySong option. + listModel.openMenu(R.menu.item_playback_song, it, PlaySong.ByItself) + } + } } // Set up marquee on song information, alongside click handlers that navigate to each @@ -143,53 +150,30 @@ class PlaybackPanelFragment : binding.playbackAlbum.isSelected = false } - override fun onMenuItemClick(item: MenuItem) = - when (item.itemId) { - R.id.action_open_equalizer -> { - // Launch the system equalizer app, if possible. - logD("Launching equalizer") - val equalizerIntent = - Intent(AudioEffect.ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL) - // Provide audio session ID so the equalizer can show options for this app - // in particular. - .putExtra( - AudioEffect.EXTRA_AUDIO_SESSION, playbackModel.currentAudioSessionId) - // Signal music type so that the equalizer settings are appropriate for - // music playback. - .putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC) - try { - requireNotNull(equalizerLauncher) { - "Equalizer panel launcher was not available" - } - .launch(equalizerIntent) - } catch (e: ActivityNotFoundException) { - requireContext().showToast(R.string.err_no_app) - } - true + override fun onMenuItemClick(item: MenuItem): Boolean { + if (item.itemId == R.id.action_open_equalizer) { + // Launch the system equalizer app, if possible. + logD("Launching equalizer") + val equalizerIntent = + Intent(AudioEffect.ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL) + // Provide audio session ID so the equalizer can show options for this app + // in particular. + .putExtra(AudioEffect.EXTRA_AUDIO_SESSION, playbackModel.currentAudioSessionId) + // Signal music type so that the equalizer settings are appropriate for + // music playback. + .putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC) + try { + requireNotNull(equalizerLauncher) { "Equalizer panel launcher was not available" } + .launch(equalizerIntent) + } catch (e: ActivityNotFoundException) { + requireContext().showToast(R.string.err_no_app) } - R.id.action_artist_details -> { - navigateToCurrentArtist() - true - } - R.id.action_album_details -> { - navigateToCurrentAlbum() - true - } - R.id.action_playlist_add -> { - playbackModel.song.value?.let(musicModel::addToPlaylist) - true - } - R.id.action_detail -> { - playbackModel.song.value?.let(detailModel::showSong) - true - } - R.id.action_share -> { - playbackModel.song.value?.let { requireContext().share(it) } - true - } - else -> false + return true } + return false + } + override fun onSeekConfirmed(positionDs: Long) { playbackModel.seekTo(positionDs) } diff --git a/app/src/main/java/org/oxycblt/auxio/ui/IconToolbar.kt b/app/src/main/java/org/oxycblt/auxio/ui/IconToolbar.kt deleted file mode 100644 index 39167f751..000000000 --- a/app/src/main/java/org/oxycblt/auxio/ui/IconToolbar.kt +++ /dev/null @@ -1,4 +0,0 @@ -package org.oxycblt.auxio.ui - -class IconToolbar { -} \ No newline at end of file diff --git a/app/src/main/java/org/oxycblt/auxio/util/FrameworkUtil.kt b/app/src/main/java/org/oxycblt/auxio/util/FrameworkUtil.kt index d06c0ca37..e3f50ccec 100644 --- a/app/src/main/java/org/oxycblt/auxio/util/FrameworkUtil.kt +++ b/app/src/main/java/org/oxycblt/auxio/util/FrameworkUtil.kt @@ -25,16 +25,20 @@ import android.os.Build import android.view.View import android.view.WindowInsets import androidx.annotation.RequiresApi +import androidx.appcompat.view.menu.ActionMenuItemView +import androidx.appcompat.widget.ActionMenuView import androidx.appcompat.widget.AppCompatButton import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.app.ShareCompat import androidx.core.graphics.Insets import androidx.core.graphics.drawable.DrawableCompat +import androidx.core.view.children import androidx.navigation.NavController import androidx.navigation.NavDirections import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.viewbinding.ViewBinding +import com.google.android.material.appbar.MaterialToolbar import java.lang.IllegalArgumentException import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song @@ -103,6 +107,25 @@ val Drawable.isRtl: Boolean val ViewBinding.context: Context get() = root.context +/** + * Override the behavior of a [MaterialToolbar]'s overflow menu to do something else. This is + * extremely dumb, but required to hook overflow menus to bottom sheet menus. + */ +fun MaterialToolbar.overrideOnOverflowMenuClick(block: (View) -> Unit) { + for (toolbarChild in children) { + if (toolbarChild is ActionMenuView) { + for (menuChild in toolbarChild.children) { + // The overflow menu's view implementation is package-private, so test for the + // first child that isn't a plain action button. + if (menuChild !is ActionMenuItemView) { + menuChild.setOnClickListener(block) + return + } + } + } + } +} + /** * Compute if this [RecyclerView] can scroll through their items, or if the items can all fit on one * screen. diff --git a/app/src/main/res/layout/fragment_detail.xml b/app/src/main/res/layout/fragment_detail.xml index 1dfcf82b9..d3a9409da 100644 --- a/app/src/main/res/layout/fragment_detail.xml +++ b/app/src/main/res/layout/fragment_detail.xml @@ -24,6 +24,7 @@ android:layout_height="wrap_content" android:clickable="true" android:focusable="true" + app:menu="@menu/toolbar_detail" app:navigationIcon="@drawable/ic_back_24" /> + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/item_detail_parent.xml b/app/src/main/res/menu/item_detail_parent.xml new file mode 100644 index 000000000..a6a1b6d09 --- /dev/null +++ b/app/src/main/res/menu/item_detail_parent.xml @@ -0,0 +1,27 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/item_detail_playlist.xml b/app/src/main/res/menu/item_detail_playlist.xml new file mode 100644 index 000000000..178588c3b --- /dev/null +++ b/app/src/main/res/menu/item_detail_playlist.xml @@ -0,0 +1,31 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/item_playback_song.xml b/app/src/main/res/menu/item_playback_song.xml new file mode 100644 index 000000000..2cfc524b2 --- /dev/null +++ b/app/src/main/res/menu/item_playback_song.xml @@ -0,0 +1,26 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/toolbar_album.xml b/app/src/main/res/menu/toolbar_album.xml deleted file mode 100644 index 870350cc4..000000000 --- a/app/src/main/res/menu/toolbar_album.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/toolbar_detail.xml b/app/src/main/res/menu/toolbar_detail.xml new file mode 100644 index 000000000..a827b708e --- /dev/null +++ b/app/src/main/res/menu/toolbar_detail.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/toolbar_parent.xml b/app/src/main/res/menu/toolbar_parent.xml deleted file mode 100644 index e73829b41..000000000 --- a/app/src/main/res/menu/toolbar_parent.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/toolbar_playback.xml b/app/src/main/res/menu/toolbar_playback.xml index e283a6bc1..27791e20a 100644 --- a/app/src/main/res/menu/toolbar_playback.xml +++ b/app/src/main/res/menu/toolbar_playback.xml @@ -5,23 +5,9 @@ android:id="@+id/action_open_equalizer" android:icon="@drawable/ic_config_24" android:title="@string/lbl_equalizer" - app:showAsAction="ifRoom" /> + app:showAsAction="always" /> - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/toolbar_playlist.xml b/app/src/main/res/menu/toolbar_playlist.xml deleted file mode 100644 index 666629234..000000000 --- a/app/src/main/res/menu/toolbar_playlist.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/navigation/inner.xml b/app/src/main/res/navigation/inner.xml index f6d03a0ba..979b09b2d 100644 --- a/app/src/main/res/navigation/inner.xml +++ b/app/src/main/res/navigation/inner.xml @@ -201,6 +201,9 @@ + @@ -244,6 +247,9 @@ + @@ -287,6 +293,9 @@ + @@ -327,6 +336,9 @@ +