diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/other/DetailListFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/other/DetailListFragment.kt index 14df3272c..fc08bcaea 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/other/DetailListFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/other/DetailListFragment.kt @@ -16,6 +16,7 @@ package code.name.monkey.retromusic.fragments.other import android.os.Bundle import android.view.View +import androidx.activity.addCallback import androidx.core.os.bundleOf import androidx.core.view.doOnPreDraw import androidx.navigation.fragment.FragmentNavigatorExtras @@ -32,17 +33,25 @@ import code.name.monkey.retromusic.adapter.song.SongAdapter import code.name.monkey.retromusic.databinding.FragmentPlaylistDetailBinding import code.name.monkey.retromusic.db.toSong import code.name.monkey.retromusic.extensions.dipToPix +import code.name.monkey.retromusic.extensions.surfaceColor import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment import code.name.monkey.retromusic.interfaces.IAlbumClickListener import code.name.monkey.retromusic.interfaces.IArtistClickListener +import code.name.monkey.retromusic.interfaces.ICabCallback +import code.name.monkey.retromusic.interfaces.ICabHolder import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.model.Artist +import code.name.monkey.retromusic.util.RetroColorUtil import code.name.monkey.retromusic.util.RetroUtil +import com.afollestad.materialcab.attached.AttachedCab +import com.afollestad.materialcab.attached.destroy +import com.afollestad.materialcab.attached.isActive +import com.afollestad.materialcab.createCab import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.transition.MaterialSharedAxis class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_detail), - IArtistClickListener, IAlbumClickListener { + IArtistClickListener, IAlbumClickListener, ICabHolder { private val args by navArgs() private var _binding: FragmentPlaylistDetailBinding? = null private val binding get() = _binding!! @@ -88,6 +97,12 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de MaterialShapeDrawable.createWithElevationOverlay(requireContext()) postponeEnterTransition() view.doOnPreDraw { startPostponedEnterTransition() } + requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) { + if (!handleBackPress()) { + remove() + findNavController().navigateUp() + } + } } private fun lastAddedSongs() { @@ -95,7 +110,7 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de val songAdapter = ShuffleButtonSongAdapter( requireActivity(), mutableListOf(), - R.layout.item_list, null + R.layout.item_list, this ) binding.recyclerView.apply { adapter = songAdapter @@ -112,7 +127,7 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de val songAdapter = ShuffleButtonSongAdapter( requireActivity(), mutableListOf(), - R.layout.item_list, null + R.layout.item_list, this ) binding.recyclerView.apply { adapter = songAdapter @@ -129,7 +144,7 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de val songAdapter = ShuffleButtonSongAdapter( requireActivity(), mutableListOf(), - R.layout.item_list, null + R.layout.item_list, this ) binding.recyclerView.apply { adapter = songAdapter @@ -145,7 +160,7 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de val songAdapter = SongAdapter( requireActivity(), mutableListOf(), - R.layout.item_list, null + R.layout.item_list, this ) binding.recyclerView.apply { adapter = songAdapter @@ -181,14 +196,14 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de requireActivity(), artists, R.layout.item_grid_circle, - null, this@DetailListFragment + this, this@DetailListFragment ) private fun albumAdapter(albums: List): AlbumAdapter = AlbumAdapter( requireActivity(), albums, R.layout.item_grid, - null, this@DetailListFragment + this, this@DetailListFragment ) private fun linearLayoutManager(): LinearLayoutManager = @@ -228,4 +243,37 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de super.onDestroyView() _binding = null } + + private var cab: AttachedCab? = null + + private fun handleBackPress(): Boolean { + cab?.let { + if (it.isActive()) { + it.destroy() + return true + } + } + return false + } + + override fun openCab(menuRes: Int, callback: ICabCallback): AttachedCab { + cab?.let { + println("Cab") + if (it.isActive()) { + it.destroy() + } + } + cab = createCab(R.id.toolbar_container) { + menu(menuRes) + closeDrawable(R.drawable.ic_close) + backgroundColor(literal = RetroColorUtil.shiftBackgroundColor(surfaceColor())) + slideDown() + onCreate { cab, menu -> callback.onCabCreated(cab, menu) } + onSelection { + callback.onCabItemClicked(it) + } + onDestroy { callback.onCabFinished(it) } + } + return cab as AttachedCab + } }