Fix primary navigation restore state

This commit is contained in:
Koitharu
2024-01-16 12:25:40 +02:00
parent ae8b48d733
commit b94f9e4b01
3 changed files with 27 additions and 22 deletions

View File

@@ -26,6 +26,15 @@ import org.koitharu.kotatsu.remotelist.ui.RemoteListFragment
class LocalListFragment : MangaListFragment(), FilterOwner { class LocalListFragment : MangaListFragment(), FilterOwner {
init {
withArgs(1) {
putSerializable(
RemoteListFragment.ARG_SOURCE,
MangaSource.LOCAL,
) // required by FilterCoordinator
}
}
override val viewModel by viewModels<LocalListViewModel>() override val viewModel by viewModels<LocalListViewModel>()
override val filter: MangaFilter override val filter: MangaFilter
@@ -97,14 +106,4 @@ class LocalListFragment : MangaListFragment(), FilterOwner {
Snackbar.LENGTH_SHORT, Snackbar.LENGTH_SHORT,
).show() ).show()
} }
companion object {
fun newInstance() = LocalListFragment().withArgs(1) {
putSerializable(
RemoteListFragment.ARG_SOURCE,
MangaSource.LOCAL,
) // required by FilterCoordinator
}
}
} }

View File

@@ -134,13 +134,13 @@ class MainNavigationDelegate(
private fun onNavigationItemSelected(@IdRes itemId: Int): Boolean { private fun onNavigationItemSelected(@IdRes itemId: Int): Boolean {
return setPrimaryFragment( return setPrimaryFragment(
when (itemId) { when (itemId) {
R.id.nav_history -> HistoryListFragment() R.id.nav_history -> HistoryListFragment::class.java
R.id.nav_favorites -> FavouritesContainerFragment() R.id.nav_favorites -> FavouritesContainerFragment::class.java
R.id.nav_explore -> ExploreFragment() R.id.nav_explore -> ExploreFragment::class.java
R.id.nav_feed -> FeedFragment() R.id.nav_feed -> FeedFragment::class.java
R.id.nav_local -> LocalListFragment.newInstance() R.id.nav_local -> LocalListFragment::class.java
R.id.nav_suggestions -> SuggestionsFragment() R.id.nav_suggestions -> SuggestionsFragment::class.java
R.id.nav_bookmarks -> BookmarksFragment() R.id.nav_bookmarks -> BookmarksFragment::class.java
else -> return false else -> return false
}, },
) )
@@ -157,16 +157,17 @@ class MainNavigationDelegate(
else -> 0 else -> 0
} }
private fun setPrimaryFragment(fragment: Fragment): Boolean { private fun setPrimaryFragment(fragmentClass: Class<out Fragment>): Boolean {
if (fragmentManager.isStateSaved) { if (fragmentManager.isStateSaved || fragmentClass.isInstance(primaryFragment)) {
return false return false
} }
val fragment = instantiateFragment(fragmentClass)
fragment.enterTransition = MaterialFadeThrough() fragment.enterTransition = MaterialFadeThrough()
fragmentManager.beginTransaction() fragmentManager.beginTransaction()
.setReorderingAllowed(true) .setReorderingAllowed(true)
.replace(R.id.container, fragment, TAG_PRIMARY) .replace(R.id.container, fragmentClass, null, TAG_PRIMARY)
.runOnCommit { onFragmentChanged(fragment, fromUser = true) }
.commit() .commit()
onFragmentChanged(fragment, fromUser = true)
return true return true
} }
@@ -182,6 +183,11 @@ class MainNavigationDelegate(
} }
} }
private fun instantiateFragment(fragmentClass: Class<out Fragment>): Fragment {
val classLoader = navBar.context.classLoader
return fragmentManager.fragmentFactory.instantiate(classLoader, fragmentClass.name)
}
private fun observeSettings(lifecycleOwner: LifecycleOwner) { private fun observeSettings(lifecycleOwner: LifecycleOwner) {
settings.observe() settings.observe()
.filter { x -> x == AppSettings.KEY_TRACKER_ENABLED || x == AppSettings.KEY_SUGGESTIONS } .filter { x -> x == AppSettings.KEY_TRACKER_ENABLED || x == AppSettings.KEY_SUGGESTIONS }

View File

@@ -118,7 +118,7 @@ class MangaListActivity :
fm.commit { fm.commit {
setReorderingAllowed(true) setReorderingAllowed(true)
val fragment = if (source == MangaSource.LOCAL) { val fragment = if (source == MangaSource.LOCAL) {
LocalListFragment.newInstance() LocalListFragment()
} else { } else {
RemoteListFragment.newInstance(source) RemoteListFragment.newInstance(source)
} }