Fix primary navigation restore state
This commit is contained in:
@@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 }
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user