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 {
init {
withArgs(1) {
putSerializable(
RemoteListFragment.ARG_SOURCE,
MangaSource.LOCAL,
) // required by FilterCoordinator
}
}
override val viewModel by viewModels<LocalListViewModel>()
override val filter: MangaFilter
@@ -97,14 +106,4 @@ class LocalListFragment : MangaListFragment(), FilterOwner {
Snackbar.LENGTH_SHORT,
).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 {
return setPrimaryFragment(
when (itemId) {
R.id.nav_history -> HistoryListFragment()
R.id.nav_favorites -> FavouritesContainerFragment()
R.id.nav_explore -> ExploreFragment()
R.id.nav_feed -> FeedFragment()
R.id.nav_local -> LocalListFragment.newInstance()
R.id.nav_suggestions -> SuggestionsFragment()
R.id.nav_bookmarks -> BookmarksFragment()
R.id.nav_history -> HistoryListFragment::class.java
R.id.nav_favorites -> FavouritesContainerFragment::class.java
R.id.nav_explore -> ExploreFragment::class.java
R.id.nav_feed -> FeedFragment::class.java
R.id.nav_local -> LocalListFragment::class.java
R.id.nav_suggestions -> SuggestionsFragment::class.java
R.id.nav_bookmarks -> BookmarksFragment::class.java
else -> return false
},
)
@@ -157,16 +157,17 @@ class MainNavigationDelegate(
else -> 0
}
private fun setPrimaryFragment(fragment: Fragment): Boolean {
if (fragmentManager.isStateSaved) {
private fun setPrimaryFragment(fragmentClass: Class<out Fragment>): Boolean {
if (fragmentManager.isStateSaved || fragmentClass.isInstance(primaryFragment)) {
return false
}
val fragment = instantiateFragment(fragmentClass)
fragment.enterTransition = MaterialFadeThrough()
fragmentManager.beginTransaction()
.setReorderingAllowed(true)
.replace(R.id.container, fragment, TAG_PRIMARY)
.replace(R.id.container, fragmentClass, null, TAG_PRIMARY)
.runOnCommit { onFragmentChanged(fragment, fromUser = true) }
.commit()
onFragmentChanged(fragment, fromUser = 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) {
settings.observe()
.filter { x -> x == AppSettings.KEY_TRACKER_ENABLED || x == AppSettings.KEY_SUGGESTIONS }

View File

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