fix: Fix Breadcrumbs disappearing when resuming the folders tab
This commit is contained in:
parent
125681b938
commit
210d9afa1a
1 changed files with 33 additions and 22 deletions
|
@ -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<List<File>>, StorageClickListener {
|
||||
LoaderManager.LoaderCallbacks<List<File>>, 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<String?>) {
|
||||
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<File?>,
|
||||
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(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue