Use MenuProvider to inflate & handle menus in fragments

This commit is contained in:
Prathamesh More 2022-04-21 19:07:04 +05:30
parent c5a25c200c
commit 5216a11170
23 changed files with 92 additions and 153 deletions

View file

@ -96,6 +96,7 @@ class MainActivity : AbsCastActivity(), OnSharedPreferenceChangeListener {
} }
} }
navController.addOnDestinationChangedListener { _, destination, _ -> navController.addOnDestinationChangedListener { _, destination, _ ->
val start = System.currentTimeMillis()
if (destination.id == navGraph.startDestinationId) { if (destination.id == navGraph.startDestinationId) {
currentFragment(R.id.fragment_container)?.enterTransition = null currentFragment(R.id.fragment_container)?.enterTransition = null
} }
@ -116,6 +117,7 @@ class MainActivity : AbsCastActivity(), OnSharedPreferenceChangeListener {
animate = true animate = true
) // Hide Bottom Navigation Bar ) // Hide Bottom Navigation Bar
} }
showToast("Time : ${System.currentTimeMillis() - start}")
} }
} }

View file

@ -24,7 +24,6 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.content.res.AppCompatResources
import androidx.core.content.getSystemService import androidx.core.content.getSystemService
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.NavHostFragment
import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil
import com.google.android.material.appbar.MaterialToolbar import com.google.android.material.appbar.MaterialToolbar
@ -58,12 +57,6 @@ inline fun <reified T : Any> Fragment.extraNotNull(key: String, default: T? = nu
requireNotNull(if (value is T) value else default) { key } requireNotNull(if (value is T) value else default) { key }
} }
val NavHostFragment.currentFragment: Fragment?
get() = targetFragment
val FragmentManager.currentNavigationFragment: Fragment?
get() = primaryNavigationFragment?.childFragmentManager?.fragments?.first()
fun AppCompatActivity.currentFragment(navHostId: Int): Fragment? { fun AppCompatActivity.currentFragment(navHostId: Int): Fragment? {
val navHostFragment: NavHostFragment = val navHostFragment: NavHostFragment =
supportFragmentManager.findFragmentById(navHostId) as NavHostFragment supportFragmentManager.findFragmentById(navHostId) as NavHostFragment

View file

@ -112,7 +112,6 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
_binding = FragmentAlbumDetailsBinding.bind(view) _binding = FragmentAlbumDetailsBinding.bind(view)
setHasOptionsMenu(true)
mainActivity.addMusicServiceEventListener(detailsViewModel) mainActivity.addMusicServiceEventListener(detailsViewModel)
mainActivity.setSupportActionBar(binding.toolbar) mainActivity.setSupportActionBar(binding.toolbar)
@ -347,8 +346,7 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
) )
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.menu_album_detail, menu) inflater.inflate(R.menu.menu_album_detail, menu)
val sortOrder = menu.findItem(R.id.action_sort_order) val sortOrder = menu.findItem(R.id.action_sort_order)
setUpSortOrderMenu(sortOrder.subMenu) setUpSortOrderMenu(sortOrder.subMenu)
@ -360,7 +358,7 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
) )
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onMenuItemSelected(item: MenuItem): Boolean {
return handleSortOrderMenuItem(item) return handleSortOrderMenuItem(item)
} }

View file

@ -158,8 +158,8 @@ class AlbumsFragment : AbsRecyclerViewCustomGridSizeFragment<AlbumAdapter, GridL
reenterTransition = null reenterTransition = null
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater) super.onCreateMenu(menu, inflater)
val gridSizeItem: MenuItem = menu.findItem(R.id.action_grid_size) val gridSizeItem: MenuItem = menu.findItem(R.id.action_grid_size)
if (RetroUtil.isLandscape()) { if (RetroUtil.isLandscape()) {
gridSizeItem.setTitle(R.string.action_grid_size_land) gridSizeItem.setTitle(R.string.action_grid_size_land)
@ -267,7 +267,7 @@ class AlbumsFragment : AbsRecyclerViewCustomGridSizeFragment<AlbumAdapter, GridL
} }
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onMenuItemSelected(item: MenuItem): Boolean {
if (handleGridSizeMenuItem(item)) { if (handleGridSizeMenuItem(item)) {
return true return true
} }
@ -277,7 +277,7 @@ class AlbumsFragment : AbsRecyclerViewCustomGridSizeFragment<AlbumAdapter, GridL
if (handleSortOrderMenuItem(item)) { if (handleSortOrderMenuItem(item)) {
return true return true
} }
return super.onOptionsItemSelected(item) return super.onMenuItemSelected(item)
} }
private fun handleSortOrderMenuItem( private fun handleSortOrderMenuItem(

View file

@ -84,7 +84,6 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
_binding = FragmentArtistDetailsBinding.bind(view) _binding = FragmentArtistDetailsBinding.bind(view)
setHasOptionsMenu(true)
mainActivity.addMusicServiceEventListener(detailsViewModel) mainActivity.addMusicServiceEventListener(detailsViewModel)
mainActivity.setSupportActionBar(binding.toolbar) mainActivity.setSupportActionBar(binding.toolbar)
binding.toolbar.title = null binding.toolbar.title = null
@ -245,7 +244,7 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm
) )
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onMenuItemSelected(item: MenuItem): Boolean {
return handleSortOrderMenuItem(item) return handleSortOrderMenuItem(item)
} }
@ -295,18 +294,18 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm
PopupMenu(requireContext(), binding.fragmentArtistContent.songSortOrder).apply { PopupMenu(requireContext(), binding.fragmentArtistContent.songSortOrder).apply {
inflate(R.menu.menu_artist_song_sort_order) inflate(R.menu.menu_artist_song_sort_order)
setUpSortOrderMenu(menu) setUpSortOrderMenu(menu)
setOnMenuItemClickListener { menuItem -> setOnMenuItemClickListener { item ->
val sortOrder = when (menuItem.itemId) { val sortOrder = when (item.itemId) {
R.id.action_sort_order_title -> SortOrder.ArtistSongSortOrder.SONG_A_Z R.id.action_sort_order_title -> SortOrder.ArtistSongSortOrder.SONG_A_Z
R.id.action_sort_order_title_desc -> SortOrder.ArtistSongSortOrder.SONG_Z_A R.id.action_sort_order_title_desc -> SortOrder.ArtistSongSortOrder.SONG_Z_A
R.id.action_sort_order_album -> SortOrder.ArtistSongSortOrder.SONG_ALBUM R.id.action_sort_order_album -> SortOrder.ArtistSongSortOrder.SONG_ALBUM
R.id.action_sort_order_year -> SortOrder.ArtistSongSortOrder.SONG_YEAR R.id.action_sort_order_year -> SortOrder.ArtistSongSortOrder.SONG_YEAR
R.id.action_sort_order_song_duration -> SortOrder.ArtistSongSortOrder.SONG_DURATION R.id.action_sort_order_song_duration -> SortOrder.ArtistSongSortOrder.SONG_DURATION
else -> { else -> {
throw IllegalArgumentException("invalid ${menuItem.title}") throw IllegalArgumentException("invalid ${item.title}")
} }
} }
menuItem.isChecked = true item.isChecked = true
setSaveSortOrder(sortOrder) setSaveSortOrder(sortOrder)
return@setOnMenuItemClickListener true return@setOnMenuItemClickListener true
} }
@ -322,15 +321,17 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm
private fun setUpSortOrderMenu(sortOrder: Menu) { private fun setUpSortOrderMenu(sortOrder: Menu) {
when (savedSongSortOrder) { when (savedSongSortOrder) {
SortOrder.ArtistSongSortOrder.SONG_A_Z -> sortOrder.findItem(R.id.action_sort_order_title).isChecked = true SortOrder.ArtistSongSortOrder.SONG_A_Z -> sortOrder.findItem(R.id.action_sort_order_title).isChecked =
SortOrder.ArtistSongSortOrder.SONG_Z_A -> sortOrder.findItem(R.id.action_sort_order_title_desc).isChecked = true true
SortOrder.ArtistSongSortOrder.SONG_Z_A -> sortOrder.findItem(R.id.action_sort_order_title_desc).isChecked =
true
SortOrder.ArtistSongSortOrder.SONG_ALBUM -> SortOrder.ArtistSongSortOrder.SONG_ALBUM ->
sortOrder.findItem(R.id.action_sort_order_album).isChecked = true sortOrder.findItem(R.id.action_sort_order_album).isChecked = true
SortOrder.ArtistSongSortOrder.SONG_YEAR -> SortOrder.ArtistSongSortOrder.SONG_YEAR ->
sortOrder.findItem(R.id.action_sort_order_year).isChecked = true sortOrder.findItem(R.id.action_sort_order_year).isChecked = true
SortOrder.ArtistSongSortOrder.SONG_DURATION -> SortOrder.ArtistSongSortOrder.SONG_DURATION ->
sortOrder.findItem(R.id.action_sort_order_song_duration).isChecked = true sortOrder.findItem(R.id.action_sort_order_song_duration).isChecked = true
else-> { else -> {
throw IllegalArgumentException("invalid $savedSongSortOrder") throw IllegalArgumentException("invalid $savedSongSortOrder")
} }
} }
@ -352,8 +353,7 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm
} }
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.menu_artist_detail, menu) inflater.inflate(R.menu.menu_artist_detail, menu)
} }

View file

@ -168,8 +168,8 @@ class ArtistsFragment : AbsRecyclerViewCustomGridSizeFragment<ArtistAdapter, Gri
reenterTransition = null reenterTransition = null
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater) super.onCreateMenu(menu, inflater)
val gridSizeItem: MenuItem = menu.findItem(R.id.action_grid_size) val gridSizeItem: MenuItem = menu.findItem(R.id.action_grid_size)
if (RetroUtil.isLandscape()) { if (RetroUtil.isLandscape()) {
gridSizeItem.setTitle(R.string.action_grid_size_land) gridSizeItem.setTitle(R.string.action_grid_size_land)
@ -261,7 +261,7 @@ class ArtistsFragment : AbsRecyclerViewCustomGridSizeFragment<ArtistAdapter, Gri
} }
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onMenuItemSelected(item: MenuItem): Boolean {
if (handleGridSizeMenuItem(item)) { if (handleGridSizeMenuItem(item)) {
return true return true
} }
@ -274,7 +274,7 @@ class ArtistsFragment : AbsRecyclerViewCustomGridSizeFragment<ArtistAdapter, Gri
if (handleAlbumArtistMenu(item)) { if (handleAlbumArtistMenu(item)) {
return true return true
} }
return super.onOptionsItemSelected(item) return super.onMenuItemSelected(item)
} }
private fun handleAlbumArtistMenu(item: MenuItem): Boolean { private fun handleAlbumArtistMenu(item: MenuItem): Boolean {

View file

@ -116,8 +116,8 @@ class BackupFragment : Fragment(R.layout.fragment_backup), BackupAdapter.BackupC
} }
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
override fun onBackupMenuClicked(file: File, menuItem: MenuItem): Boolean { override fun onBackupMenuClicked(file: File, item: MenuItem): Boolean {
when (menuItem.itemId) { when (item.itemId) {
R.id.action_delete -> { R.id.action_delete -> {
try { try {
file.delete() file.delete()

View file

@ -15,21 +15,25 @@
package code.name.monkey.retromusic.fragments.base package code.name.monkey.retromusic.fragments.base
import android.os.Bundle import android.os.Bundle
import android.view.View
import androidx.annotation.LayoutRes import androidx.annotation.LayoutRes
import androidx.core.view.MenuHost
import androidx.core.view.MenuProvider
import androidx.lifecycle.Lifecycle
import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.activities.MainActivity
import code.name.monkey.retromusic.extensions.setTaskDescriptionColorAuto
import code.name.monkey.retromusic.fragments.LibraryViewModel import code.name.monkey.retromusic.fragments.LibraryViewModel
import org.koin.androidx.viewmodel.ext.android.sharedViewModel import org.koin.androidx.viewmodel.ext.android.sharedViewModel
abstract class AbsMainActivityFragment(@LayoutRes layout: Int) : AbsMusicServiceFragment(layout) { abstract class AbsMainActivityFragment(@LayoutRes layout: Int) : AbsMusicServiceFragment(layout),
MenuProvider {
val libraryViewModel: LibraryViewModel by sharedViewModel() val libraryViewModel: LibraryViewModel by sharedViewModel()
val mainActivity: MainActivity val mainActivity: MainActivity
get() = activity as MainActivity get() = activity as MainActivity
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState) super.onViewCreated(view, savedInstanceState)
setHasOptionsMenu(true) val menuHost: MenuHost = requireActivity()
mainActivity.setTaskDescriptionColorAuto() menuHost.addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.STARTED)
} }
} }

View file

@ -48,6 +48,7 @@ import code.name.monkey.retromusic.db.PlaylistEntity
import code.name.monkey.retromusic.db.toSongEntity import code.name.monkey.retromusic.db.toSongEntity
import code.name.monkey.retromusic.dialogs.* import code.name.monkey.retromusic.dialogs.*
import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.extensions.*
import code.name.monkey.retromusic.fragments.LibraryViewModel
import code.name.monkey.retromusic.fragments.NowPlayingScreen import code.name.monkey.retromusic.fragments.NowPlayingScreen
import code.name.monkey.retromusic.fragments.ReloadType import code.name.monkey.retromusic.fragments.ReloadType
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
@ -66,11 +67,17 @@ import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.koin.android.ext.android.get import org.koin.android.ext.android.get
import org.koin.androidx.viewmodel.ext.android.sharedViewModel
import kotlin.math.abs import kotlin.math.abs
abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragment(layout), abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragment(layout),
Toolbar.OnMenuItemClickListener, IPaletteColorHolder, PlayerAlbumCoverFragment.Callbacks { Toolbar.OnMenuItemClickListener, IPaletteColorHolder, PlayerAlbumCoverFragment.Callbacks {
val libraryViewModel: LibraryViewModel by sharedViewModel()
val mainActivity: MainActivity
get() = activity as MainActivity
private var playerAlbumCoverFragment: PlayerAlbumCoverFragment? = null private var playerAlbumCoverFragment: PlayerAlbumCoverFragment? = null
override fun onMenuItemClick( override fun onMenuItemClick(

View file

@ -199,13 +199,11 @@ abstract class AbsRecyclerViewFragment<A : RecyclerView.Adapter<*>, LM : Recycle
binding.appBarLayout.setExpanded(true, true) binding.appBarLayout.setExpanded(true, true)
} }
override fun onPrepareOptionsMenu(menu: Menu) { override fun onPrepareMenu(menu: Menu) {
super.onPrepareOptionsMenu(menu)
ToolbarContentTintHelper.handleOnPrepareOptionsMenu(requireActivity(), toolbar) ToolbarContentTintHelper.handleOnPrepareOptionsMenu(requireActivity(), toolbar)
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.menu_main, menu) inflater.inflate(R.menu.menu_main, menu)
ToolbarContentTintHelper.handleOnCreateOptionsMenu( ToolbarContentTintHelper.handleOnCreateOptionsMenu(
requireContext(), requireContext(),
@ -215,7 +213,7 @@ abstract class AbsRecyclerViewFragment<A : RecyclerView.Adapter<*>, LM : Recycle
) )
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onMenuItemSelected(item: MenuItem): Boolean {
when (item.itemId) { when (item.itemId) {
R.id.action_settings -> findNavController().navigate( R.id.action_settings -> findNavController().navigate(
R.id.settingsActivity, R.id.settingsActivity,
@ -231,7 +229,7 @@ abstract class AbsRecyclerViewFragment<A : RecyclerView.Adapter<*>, LM : Recycle
"ShowCreatePlaylistDialog" "ShowCreatePlaylistDialog"
) )
} }
return super.onOptionsItemSelected(item) return false
} }
override fun onDestroyView() { override fun onDestroyView() {

View file

@ -99,8 +99,6 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_binding = FragmentFolderBinding.bind(view) _binding = FragmentFolderBinding.bind(view)
setHasOptionsMenu(true)
mainActivity.addMusicServiceEventListener(libraryViewModel) mainActivity.addMusicServiceEventListener(libraryViewModel)
mainActivity.setSupportActionBar(binding.toolbar) mainActivity.setSupportActionBar(binding.toolbar)
mainActivity.supportActionBar?.title = null mainActivity.supportActionBar?.title = null
@ -135,7 +133,6 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState) super.onActivityCreated(savedInstanceState)
setHasOptionsMenu(true)
if (savedInstanceState == null) { if (savedInstanceState == null) {
switchToFileAdapter() switchToFileAdapter()
setCrumb( setCrumb(
@ -334,13 +331,11 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
} }
} }
override fun onPrepareOptionsMenu(menu: Menu) { override fun onPrepareMenu(menu: Menu) {
super.onPrepareOptionsMenu(menu)
ToolbarContentTintHelper.handleOnPrepareOptionsMenu(requireActivity(), binding.toolbar) ToolbarContentTintHelper.handleOnPrepareOptionsMenu(requireActivity(), binding.toolbar)
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
menu.add(0, R.id.action_scan, 0, R.string.scan_media) menu.add(0, R.id.action_scan, 0, R.string.scan_media)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER) .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER)
menu.add(0, R.id.action_go_to_start_directory, 1, R.string.action_go_to_start_directory) menu.add(0, R.id.action_go_to_start_directory, 1, R.string.action_go_to_start_directory)
@ -357,7 +352,7 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
) )
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onMenuItemSelected(item: MenuItem): Boolean {
when (item.itemId) { when (item.itemId) {
R.id.action_go_to_start_directory -> { R.id.action_go_to_start_directory -> {
setCrumb( setCrumb(
@ -386,7 +381,7 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
return true return true
} }
} }
return super.onOptionsItemSelected(item) return false
} }
override fun onQueueChanged() { override fun onQueueChanged() {

View file

@ -53,7 +53,6 @@ class GenreDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playlist_
enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true).addTarget(view) enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true).addTarget(view)
returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false) returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
_binding = FragmentPlaylistDetailBinding.bind(view) _binding = FragmentPlaylistDetailBinding.bind(view)
setHasOptionsMenu(true)
mainActivity.addMusicServiceEventListener(detailsViewModel) mainActivity.addMusicServiceEventListener(detailsViewModel)
mainActivity.setSupportActionBar(binding.toolbar) mainActivity.setSupportActionBar(binding.toolbar)
binding.container.transitionName = "genre" binding.container.transitionName = "genre"
@ -107,12 +106,11 @@ class GenreDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playlist_
binding.recyclerView.setPadding(0, 0, 0, height) binding.recyclerView.setPadding(0, 0, 0, height)
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.menu_genre_detail, menu) inflater.inflate(R.menu.menu_genre_detail, menu)
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onMenuItemSelected(item: MenuItem): Boolean {
return GenreMenuHelper.handleMenuClick(requireActivity(), genre, item) return GenreMenuHelper.handleMenuClick(requireActivity(), genre, item)
} }

View file

@ -60,8 +60,8 @@ GenresFragment : AbsRecyclerViewFragment<GenreAdapter, LinearLayoutManager>(),
return GenreAdapter(requireActivity(), dataSet, this) return GenreAdapter(requireActivity(), dataSet, this)
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater) super.onCreateMenu(menu, inflater)
menu.removeItem(R.id.action_grid_size) menu.removeItem(R.id.action_grid_size)
menu.removeItem(R.id.action_layout_type) menu.removeItem(R.id.action_layout_type)
menu.removeItem(R.id.action_sort_order) menu.removeItem(R.id.action_sort_order)

View file

@ -189,8 +189,7 @@ class HomeFragment :
binding.actionShuffle.elevatedAccentColor() binding.actionShuffle.elevatedAccentColor()
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.menu_main, menu) inflater.inflate(R.menu.menu_main, menu)
menu.removeItem(R.id.action_grid_size) menu.removeItem(R.id.action_grid_size)
menu.removeItem(R.id.action_layout_type) menu.removeItem(R.id.action_layout_type)
@ -275,7 +274,7 @@ class HomeFragment :
} }
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onMenuItemSelected(item: MenuItem): Boolean {
when (item.itemId) { when (item.itemId) {
R.id.action_settings -> findNavController().navigate( R.id.action_settings -> findNavController().navigate(
R.id.settingsActivity, R.id.settingsActivity,
@ -291,11 +290,11 @@ class HomeFragment :
"ShowCreatePlaylistDialog" "ShowCreatePlaylistDialog"
) )
} }
return super.onOptionsItemSelected(item) return false
} }
override fun onPrepareOptionsMenu(menu: Menu) { override fun onPrepareMenu(menu: Menu) {
super.onPrepareOptionsMenu(menu) super.onPrepareMenu(menu)
ToolbarContentTintHelper.handleOnPrepareOptionsMenu(requireActivity(), binding.toolbar) ToolbarContentTintHelper.handleOnPrepareOptionsMenu(requireActivity(), binding.toolbar)
} }

View file

@ -48,7 +48,6 @@ class LibraryFragment : AbsMainActivityFragment(R.layout.fragment_library) {
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState) super.onActivityCreated(savedInstanceState)
setHasOptionsMenu(true)
mainActivity.setBottomNavVisibility(true) mainActivity.setBottomNavVisibility(true)
mainActivity.setSupportActionBar(binding.toolbar) mainActivity.setSupportActionBar(binding.toolbar)
mainActivity.supportActionBar?.title = null mainActivity.supportActionBar?.title = null
@ -87,13 +86,11 @@ class LibraryFragment : AbsMainActivityFragment(R.layout.fragment_library) {
} }
} }
override fun onPrepareOptionsMenu(menu: Menu) { override fun onPrepareMenu(menu: Menu) {
super.onPrepareOptionsMenu(menu)
ToolbarContentTintHelper.handleOnPrepareOptionsMenu(requireActivity(), binding.toolbar) ToolbarContentTintHelper.handleOnPrepareOptionsMenu(requireActivity(), binding.toolbar)
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.menu_main, menu) inflater.inflate(R.menu.menu_main, menu)
ToolbarContentTintHelper.handleOnCreateOptionsMenu( ToolbarContentTintHelper.handleOnCreateOptionsMenu(
requireContext(), requireContext(),
@ -105,7 +102,7 @@ class LibraryFragment : AbsMainActivityFragment(R.layout.fragment_library) {
CastButtonFactory.setUpMediaRouteButton(requireContext(), menu, R.id.action_cast) CastButtonFactory.setUpMediaRouteButton(requireContext(), menu, R.id.action_cast)
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onMenuItemSelected(item: MenuItem): Boolean {
when (item.itemId) { when (item.itemId) {
R.id.action_settings -> findNavController().navigate( R.id.action_settings -> findNavController().navigate(
R.id.settingsActivity, R.id.settingsActivity,
@ -121,7 +118,7 @@ class LibraryFragment : AbsMainActivityFragment(R.layout.fragment_library) {
"ShowCreatePlaylistDialog" "ShowCreatePlaylistDialog"
) )
} }
return super.onOptionsItemSelected(item) return false
} }
override fun onDestroyView() { override fun onDestroyView() {

View file

@ -64,11 +64,6 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de
private val binding get() = _binding!! private val binding get() = _binding!!
private var showClearHistoryOption = false private var showClearHistoryOption = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
_binding = FragmentPlaylistDetailBinding.bind(view) _binding = FragmentPlaylistDetailBinding.bind(view)
@ -302,16 +297,14 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de
return cab as AttachedCab return cab as AttachedCab
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.menu_clear_history, menu) inflater.inflate(R.menu.menu_clear_history, menu)
if (showClearHistoryOption) { if (showClearHistoryOption) {
menu.findItem(R.id.action_clear_history).isVisible = true // Show Clear History option menu.findItem(R.id.action_clear_history).isVisible = true // Show Clear History option
} }
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onMenuItemSelected(item: MenuItem): Boolean {
when (item.itemId) { when (item.itemId) {
R.id.action_clear_history -> { R.id.action_clear_history -> {
if (binding.recyclerView.adapter?.itemCount!! > 0) { if (binding.recyclerView.adapter?.itemCount!! > 0) {

View file

@ -41,6 +41,7 @@ import code.name.monkey.retromusic.databinding.FragmentLyricsBinding
import code.name.monkey.retromusic.databinding.FragmentNormalLyricsBinding import code.name.monkey.retromusic.databinding.FragmentNormalLyricsBinding
import code.name.monkey.retromusic.databinding.FragmentSyncedLyricsBinding import code.name.monkey.retromusic.databinding.FragmentSyncedLyricsBinding
import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.extensions.*
import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment
import code.name.monkey.retromusic.fragments.base.AbsMusicServiceFragment import code.name.monkey.retromusic.fragments.base.AbsMusicServiceFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
@ -51,9 +52,7 @@ import code.name.monkey.retromusic.util.FileUtils
import code.name.monkey.retromusic.util.LyricUtil import code.name.monkey.retromusic.util.LyricUtil
import code.name.monkey.retromusic.util.UriUtil import code.name.monkey.retromusic.util.UriUtil
import com.afollestad.materialdialogs.input.input import com.afollestad.materialdialogs.input.input
import com.google.android.material.color.MaterialColors
import com.google.android.material.tabs.TabLayoutMediator import com.google.android.material.tabs.TabLayoutMediator
import com.google.android.material.transition.platform.MaterialContainerTransform
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.jaudiotagger.audio.AudioFileIO import org.jaudiotagger.audio.AudioFileIO
@ -62,15 +61,12 @@ import java.io.File
import java.io.FileOutputStream import java.io.FileOutputStream
import java.util.* import java.util.*
class LyricsFragment : AbsMusicServiceFragment(R.layout.fragment_lyrics) { class LyricsFragment : AbsMainActivityFragment(R.layout.fragment_lyrics) {
private var _binding: FragmentLyricsBinding? = null private var _binding: FragmentLyricsBinding? = null
private val binding get() = _binding!! private val binding get() = _binding!!
private lateinit var song: Song private lateinit var song: Song
val mainActivity: MainActivity
get() = activity as MainActivity
private lateinit var lyricsSectionsAdapter: LyricsSectionsAdapter private lateinit var lyricsSectionsAdapter: LyricsSectionsAdapter
private val googleSearchLrcUrl: String private val googleSearchLrcUrl: String
@ -90,16 +86,6 @@ class LyricsFragment : AbsMusicServiceFragment(R.layout.fragment_lyrics) {
return baseUrl return baseUrl
} }
private fun buildContainerTransform(): MaterialContainerTransform {
val transform = MaterialContainerTransform()
transform.setAllContainerColors(
MaterialColors.getColor(requireView().findViewById(R.id.container), R.attr.colorSurface)
)
transform.addTarget(R.id.container)
transform.duration = 300
return transform
}
private lateinit var normalLyricsLauncher: ActivityResultLauncher<IntentSenderRequest> private lateinit var normalLyricsLauncher: ActivityResultLauncher<IntentSenderRequest>
private lateinit var newSyncedLyricsLauncher: ActivityResultLauncher<Intent> private lateinit var newSyncedLyricsLauncher: ActivityResultLauncher<Intent>
private lateinit var editSyncedLyricsLauncher: ActivityResultLauncher<IntentSenderRequest> private lateinit var editSyncedLyricsLauncher: ActivityResultLauncher<IntentSenderRequest>
@ -139,7 +125,6 @@ class LyricsFragment : AbsMusicServiceFragment(R.layout.fragment_lyrics) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setHasOptionsMenu(true)
updateTitleSong() updateTitleSong()
enterTransition = Fade() enterTransition = Fade()
exitTransition = Fade() exitTransition = Fade()
@ -204,7 +189,7 @@ class LyricsFragment : AbsMusicServiceFragment(R.layout.fragment_lyrics) {
requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.menu_search, menu) inflater.inflate(R.menu.menu_search, menu)
ToolbarContentTintHelper.handleOnCreateOptionsMenu( ToolbarContentTintHelper.handleOnCreateOptionsMenu(
requireContext(), requireContext(),
@ -212,14 +197,9 @@ class LyricsFragment : AbsMusicServiceFragment(R.layout.fragment_lyrics) {
menu, menu,
ATHToolbarActivity.getToolbarBackgroundColor(binding.toolbar) ATHToolbarActivity.getToolbarBackgroundColor(binding.toolbar)
) )
return super.onCreateOptionsMenu(menu, inflater)
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onMenuItemSelected(item: MenuItem): Boolean {
if (item.itemId == android.R.id.home) {
findNavController().navigateUp()
return true
}
if (item.itemId == R.id.action_search) { if (item.itemId == R.id.action_search) {
openUrl(when (binding.lyricsPager.currentItem) { openUrl(when (binding.lyricsPager.currentItem) {
0 -> syairSearchLrcUrl 0 -> syairSearchLrcUrl
@ -228,7 +208,7 @@ class LyricsFragment : AbsMusicServiceFragment(R.layout.fragment_lyrics) {
} }
) )
} }
return super.onOptionsItemSelected(item) return false
} }

View file

@ -20,7 +20,6 @@ import android.graphics.Color
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResult
@ -167,13 +166,6 @@ class UserInfoFragment : Fragment() {
.into(binding.userImage) .into(binding.userImage)
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == android.R.id.home) {
findNavController().navigateUp()
}
return super.onOptionsItemSelected(item)
}
private fun selectBannerImage() { private fun selectBannerImage() {
ImagePicker.with(this) ImagePicker.with(this)
.compress(1440) .compress(1440)
@ -309,10 +301,4 @@ class UserInfoFragment : Fragment() {
super.onDestroyView() super.onDestroyView()
_binding = null _binding = null
} }
companion object {
private const val PICK_IMAGE_REQUEST = 9002
private const val PICK_BANNER_REQUEST = 9004
}
} }

View file

@ -257,7 +257,6 @@ class FullPlaybackControlsFragment :
private fun toggleFavorite(song: Song) { private fun toggleFavorite(song: Song) {
lifecycleScope.launch(Dispatchers.IO) { lifecycleScope.launch(Dispatchers.IO) {
val playlist: PlaylistEntity = libraryViewModel.favoritePlaylist() val playlist: PlaylistEntity = libraryViewModel.favoritePlaylist()
if (playlist != null) {
val songEntity = song.toSongEntity(playlist.playListId) val songEntity = song.toSongEntity(playlist.playListId)
val isFavorite = libraryViewModel.isFavoriteSong(songEntity).isNotEmpty() val isFavorite = libraryViewModel.isFavoriteSong(songEntity).isNotEmpty()
if (isFavorite) { if (isFavorite) {
@ -265,7 +264,6 @@ class FullPlaybackControlsFragment :
} else { } else {
libraryViewModel.insertSongs(listOf(song.toSongEntity(playlist.playListId))) libraryViewModel.insertSongs(listOf(song.toSongEntity(playlist.playListId)))
} }
}
libraryViewModel.forceReload(ReloadType.Playlists) libraryViewModel.forceReload(ReloadType.Playlists)
requireContext().sendBroadcast(Intent(MusicService.FAVORITE_STATE_CHANGED)) requireContext().sendBroadcast(Intent(MusicService.FAVORITE_STATE_CHANGED))
} }

View file

@ -69,7 +69,6 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli
_binding = FragmentPlaylistDetailBinding.bind(view) _binding = FragmentPlaylistDetailBinding.bind(view)
enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true).addTarget(view) enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true).addTarget(view)
returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false) returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
setHasOptionsMenu(true)
mainActivity.setSupportActionBar(binding.toolbar) mainActivity.setSupportActionBar(binding.toolbar)
binding.container.transitionName = "playlist" binding.container.transitionName = "playlist"
playlist = arguments.extraPlaylist playlist = arguments.extraPlaylist
@ -122,12 +121,11 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli
}) })
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.menu_playlist_detail, menu) inflater.inflate(R.menu.menu_playlist_detail, menu)
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onMenuItemSelected(item: MenuItem): Boolean {
return PlaylistMenuHelper.handleMenuClick(requireActivity(), playlist, item) return PlaylistMenuHelper.handleMenuClick(requireActivity(), playlist, item)
} }
@ -175,16 +173,6 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli
_binding = null _binding = null
} }
private fun handleBackPress(): Boolean {
cab?.let {
if (it.isActive()) {
it.destroy()
return true
}
}
return false
}
private var cab: AttachedCab? = null private var cab: AttachedCab? = null
override fun openCab(menuRes: Int, callback: ICabCallback): AttachedCab { override fun openCab(menuRes: Int, callback: ICabCallback): AttachedCab {

View file

@ -71,8 +71,8 @@ class PlaylistsFragment :
) )
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater) super.onCreateMenu(menu, inflater)
val gridSizeItem: MenuItem = menu.findItem(R.id.action_grid_size) val gridSizeItem: MenuItem = menu.findItem(R.id.action_grid_size)
if (RetroUtil.isLandscape()) { if (RetroUtil.isLandscape()) {
gridSizeItem.setTitle(R.string.action_grid_size_land) gridSizeItem.setTitle(R.string.action_grid_size_land)
@ -88,14 +88,14 @@ class PlaylistsFragment :
CastButtonFactory.setUpMediaRouteButton(requireContext(), menu, R.id.action_cast) CastButtonFactory.setUpMediaRouteButton(requireContext(), menu, R.id.action_cast)
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onMenuItemSelected(item: MenuItem): Boolean {
if (handleGridSizeMenuItem(item)) { if (handleGridSizeMenuItem(item)) {
return true return true
} }
if (handleSortOrderMenuItem(item)) { if (handleSortOrderMenuItem(item)) {
return true return true
} }
return super.onOptionsItemSelected(item) return super.onMenuItemSelected(item)
} }
private fun setupGridSizeMenu(gridSizeMenu: SubMenu) { private fun setupGridSizeMenu(gridSizeMenu: SubMenu) {

View file

@ -20,8 +20,7 @@ import android.content.Intent
import android.content.res.ColorStateList import android.content.res.ColorStateList
import android.os.Bundle import android.os.Bundle
import android.speech.RecognizerIntent import android.speech.RecognizerIntent
import android.view.View import android.view.*
import android.view.ViewGroup
import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager
import androidx.core.content.getSystemService import androidx.core.content.getSystemService
import androidx.core.view.* import androidx.core.view.*
@ -246,6 +245,10 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search),
override fun onCheckedChanged(group: ChipGroup, checkedIds: MutableList<Int>) { override fun onCheckedChanged(group: ChipGroup, checkedIds: MutableList<Int>) {
search(binding.searchView.text.toString()) search(binding.searchView.text.toString())
} }
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {}
override fun onMenuItemSelected(menuItem: MenuItem) = false
} }
enum class Filter { enum class Filter {

View file

@ -125,8 +125,8 @@ class SongsFragment : AbsRecyclerViewCustomGridSizeFragment<SongAdapter, GridLay
libraryViewModel.forceReload(ReloadType.Songs) libraryViewModel.forceReload(ReloadType.Songs)
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater) super.onCreateMenu(menu, inflater)
val gridSizeItem: MenuItem = menu.findItem(R.id.action_grid_size) val gridSizeItem: MenuItem = menu.findItem(R.id.action_grid_size)
if (RetroUtil.isLandscape()) { if (RetroUtil.isLandscape()) {
gridSizeItem.setTitle(R.string.action_grid_size_land) gridSizeItem.setTitle(R.string.action_grid_size_land)
@ -261,7 +261,7 @@ class SongsFragment : AbsRecyclerViewCustomGridSizeFragment<SongAdapter, GridLay
} }
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onMenuItemSelected(item: MenuItem): Boolean {
if (handleGridSizeMenuItem(item)) { if (handleGridSizeMenuItem(item)) {
return true return true
} }
@ -271,7 +271,7 @@ class SongsFragment : AbsRecyclerViewCustomGridSizeFragment<SongAdapter, GridLay
if (handleSortOrderMenuItem(item)) { if (handleSortOrderMenuItem(item)) {
return true return true
} }
return super.onOptionsItemSelected(item) return super.onMenuItemSelected(item)
} }
private fun handleSortOrderMenuItem( private fun handleSortOrderMenuItem(