fix: Fix Breadcrumbs disappearing when resuming the folders tab

This commit is contained in:
Prathamesh More 2023-03-09 10:46:11 +05:30
parent 125681b938
commit 210d9afa1a

View file

@ -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.helper.menu.SongsMenuHelper
import code.name.monkey.retromusic.interfaces.ICallbacks import code.name.monkey.retromusic.interfaces.ICallbacks
import code.name.monkey.retromusic.interfaces.IMainActivityFragmentCallbacks 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.UpdateToastMediaScannerCompletionListener
import code.name.monkey.retromusic.misc.WrappedAsyncTaskLoader import code.name.monkey.retromusic.misc.WrappedAsyncTaskLoader
import code.name.monkey.retromusic.model.Song 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.ThemedFastScroller.create
import code.name.monkey.retromusic.util.getExternalStorageDirectory import code.name.monkey.retromusic.util.getExternalStorageDirectory
import code.name.monkey.retromusic.util.getExternalStoragePublicDirectory 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.Crumb
import code.name.monkey.retromusic.views.BreadCrumbLayout.SavedStateWrapper
import code.name.monkey.retromusic.views.BreadCrumbLayout.SelectionCallback import code.name.monkey.retromusic.views.BreadCrumbLayout.SelectionCallback
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import com.google.android.material.transition.MaterialFadeThrough import com.google.android.material.transition.MaterialFadeThrough
@ -81,7 +82,7 @@ import java.util.LinkedList
class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder), class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
IMainActivityFragmentCallbacks, SelectionCallback, ICallbacks, IMainActivityFragmentCallbacks, SelectionCallback, ICallbacks,
LoaderManager.LoaderCallbacks<List<File>>, StorageClickListener { LoaderManager.LoaderCallbacks<List<File>>, StorageClickListener, IScrollHelper {
private var _binding: FragmentFolderBinding? = null private var _binding: FragmentFolderBinding? = null
private val binding get() = _binding!! 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) { if (savedInstanceState == null) {
switchToFileAdapter() switchToFileAdapter()
setCrumb( setCrumb(
@ -144,11 +134,29 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
true true
) )
} else { } 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) 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() { override fun onPause() {
super.onPause() super.onPause()
saveScrollPosition() saveScrollPosition()
@ -417,13 +425,11 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
} }
private fun saveScrollPosition() { private fun saveScrollPosition() {
val crumb = activeCrumb activeCrumb?.scrollPosition =
if (crumb != null) { (binding.recyclerView.layoutManager as LinearLayoutManager).findFirstVisibleItemPosition()
crumb.scrollPosition =
(binding.recyclerView.layoutManager as LinearLayoutManager?)!!.findFirstVisibleItemPosition()
}
} }
private fun scanPaths(toBeScanned: Array<String?>) { private fun scanPaths(toBeScanned: Array<String?>) {
if (activity == null) { if (activity == null) {
return return
@ -483,8 +489,8 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
adapter?.swapDataSet(files) adapter?.swapDataSet(files)
val crumb = activeCrumb val crumb = activeCrumb
if (crumb != null) { if (crumb != null) {
(binding.recyclerView.layoutManager as LinearLayoutManager?) (binding.recyclerView.layoutManager as LinearLayoutManager)
?.scrollToPositionWithOffset(crumb.scrollPosition, 0) .scrollToPositionWithOffset(crumb.scrollPosition, 0)
} }
} }
@ -548,7 +554,7 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
} }
} }
suspend fun listSongs( private suspend fun listSongs(
context: Context, context: Context,
files: List<File?>, files: List<File?>,
fileFilter: FileFilter, 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() { private fun switchToFileAdapter() {
adapter = SongFileAdapter(mainActivity, LinkedList(), R.layout.item_list, this) adapter = SongFileAdapter(mainActivity, LinkedList(), R.layout.item_list, this)
adapter!!.registerAdapterDataObserver( adapter!!.registerAdapterDataObserver(