From 210d9afa1af9255057a5440bafb47d42e31f319d Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 9 Mar 2023 10:46:11 +0530 Subject: [PATCH] fix: Fix Breadcrumbs disappearing when resuming the folders tab --- .../fragments/folder/FoldersFragment.kt | 55 +++++++++++-------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt index f40e065c7..26a1c8b36 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt @@ -55,6 +55,7 @@ import code.name.monkey.retromusic.helper.menu.SongMenuHelper import code.name.monkey.retromusic.helper.menu.SongsMenuHelper import code.name.monkey.retromusic.interfaces.ICallbacks import code.name.monkey.retromusic.interfaces.IMainActivityFragmentCallbacks +import code.name.monkey.retromusic.interfaces.IScrollHelper import code.name.monkey.retromusic.misc.UpdateToastMediaScannerCompletionListener import code.name.monkey.retromusic.misc.WrappedAsyncTaskLoader import code.name.monkey.retromusic.model.Song @@ -64,8 +65,8 @@ import code.name.monkey.retromusic.util.PreferenceUtil.startDirectory import code.name.monkey.retromusic.util.ThemedFastScroller.create import code.name.monkey.retromusic.util.getExternalStorageDirectory import code.name.monkey.retromusic.util.getExternalStoragePublicDirectory +import code.name.monkey.retromusic.views.BreadCrumbLayout import code.name.monkey.retromusic.views.BreadCrumbLayout.Crumb -import code.name.monkey.retromusic.views.BreadCrumbLayout.SavedStateWrapper import code.name.monkey.retromusic.views.BreadCrumbLayout.SelectionCallback import com.google.android.material.snackbar.Snackbar import com.google.android.material.transition.MaterialFadeThrough @@ -81,7 +82,7 @@ import java.util.LinkedList class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder), IMainActivityFragmentCallbacks, SelectionCallback, ICallbacks, - LoaderManager.LoaderCallbacks>, StorageClickListener { + LoaderManager.LoaderCallbacks>, StorageClickListener, IScrollHelper { private var _binding: FragmentFolderBinding? = null private val binding get() = _binding!! @@ -124,17 +125,6 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder), } } }) - } - - private fun setUpTitle() { - toolbar.setNavigationOnClickListener { - findNavController().navigate(R.id.action_search, null, navOptions) - } - binding.appBarLayout.title = resources.getString(R.string.folders) - } - - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) if (savedInstanceState == null) { switchToFileAdapter() setCrumb( @@ -144,11 +134,29 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder), true ) } else { - binding.breadCrumbs.restoreFromStateWrapper(BundleCompat.getParcelable(savedInstanceState, CRUMBS, SavedStateWrapper::class.java)) + binding.breadCrumbs.restoreFromStateWrapper( + BundleCompat.getParcelable( + savedInstanceState, + CRUMBS, + BreadCrumbLayout.SavedStateWrapper::class.java + ) + ) LoaderManager.getInstance(this).initLoader(LOADER_ID, null, this) } } + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + outState.putParcelable(CRUMBS, binding.breadCrumbs.stateWrapper) + } + + private fun setUpTitle() { + toolbar.setNavigationOnClickListener { + findNavController().navigate(R.id.action_search, null, navOptions) + } + binding.appBarLayout.title = resources.getString(R.string.folders) + } + override fun onPause() { super.onPause() saveScrollPosition() @@ -417,13 +425,11 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder), } private fun saveScrollPosition() { - val crumb = activeCrumb - if (crumb != null) { - crumb.scrollPosition = - (binding.recyclerView.layoutManager as LinearLayoutManager?)!!.findFirstVisibleItemPosition() - } + activeCrumb?.scrollPosition = + (binding.recyclerView.layoutManager as LinearLayoutManager).findFirstVisibleItemPosition() } + private fun scanPaths(toBeScanned: Array) { if (activity == null) { return @@ -483,8 +489,8 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder), adapter?.swapDataSet(files) val crumb = activeCrumb if (crumb != null) { - (binding.recyclerView.layoutManager as LinearLayoutManager?) - ?.scrollToPositionWithOffset(crumb.scrollPosition, 0) + (binding.recyclerView.layoutManager as LinearLayoutManager) + .scrollToPositionWithOffset(crumb.scrollPosition, 0) } } @@ -548,7 +554,7 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder), } } - suspend fun listSongs( + private suspend fun listSongs( context: Context, files: List, fileFilter: FileFilter, @@ -578,6 +584,11 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder), ) } + override fun scrollToTop() { + binding.recyclerView.scrollToPosition(0) + binding.appBarLayout.setExpanded(true, true) + } + private fun switchToFileAdapter() { adapter = SongFileAdapter(mainActivity, LinkedList(), R.layout.item_list, this) adapter!!.registerAdapterDataObserver(