|
@@ -34,6 +34,7 @@ import eu.kanade.tachiyomi.BuildConfig
|
|
import eu.kanade.tachiyomi.Migrations
|
|
import eu.kanade.tachiyomi.Migrations
|
|
import eu.kanade.tachiyomi.R
|
|
import eu.kanade.tachiyomi.R
|
|
import eu.kanade.tachiyomi.data.notification.NotificationReceiver
|
|
import eu.kanade.tachiyomi.data.notification.NotificationReceiver
|
|
|
|
+import eu.kanade.tachiyomi.data.preference.PreferenceValues
|
|
import eu.kanade.tachiyomi.data.preference.asImmediateFlow
|
|
import eu.kanade.tachiyomi.data.preference.asImmediateFlow
|
|
import eu.kanade.tachiyomi.data.updater.AppUpdateChecker
|
|
import eu.kanade.tachiyomi.data.updater.AppUpdateChecker
|
|
import eu.kanade.tachiyomi.data.updater.AppUpdateResult
|
|
import eu.kanade.tachiyomi.data.updater.AppUpdateResult
|
|
@@ -42,10 +43,9 @@ import eu.kanade.tachiyomi.extension.api.ExtensionGithubApi
|
|
import eu.kanade.tachiyomi.ui.base.activity.BaseViewBindingActivity
|
|
import eu.kanade.tachiyomi.ui.base.activity.BaseViewBindingActivity
|
|
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
|
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
|
import eu.kanade.tachiyomi.ui.base.controller.FabController
|
|
import eu.kanade.tachiyomi.ui.base.controller.FabController
|
|
-import eu.kanade.tachiyomi.ui.base.controller.NoToolbarElevationController
|
|
|
|
|
|
+import eu.kanade.tachiyomi.ui.base.controller.NoAppBarElevationController
|
|
import eu.kanade.tachiyomi.ui.base.controller.RootController
|
|
import eu.kanade.tachiyomi.ui.base.controller.RootController
|
|
import eu.kanade.tachiyomi.ui.base.controller.TabbedController
|
|
import eu.kanade.tachiyomi.ui.base.controller.TabbedController
|
|
-import eu.kanade.tachiyomi.ui.base.controller.ToolbarLiftOnScrollController
|
|
|
|
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
|
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
|
import eu.kanade.tachiyomi.ui.browse.BrowseController
|
|
import eu.kanade.tachiyomi.ui.browse.BrowseController
|
|
import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceController
|
|
import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceController
|
|
@@ -61,6 +61,7 @@ import eu.kanade.tachiyomi.ui.setting.SettingsMainController
|
|
import eu.kanade.tachiyomi.util.lang.launchIO
|
|
import eu.kanade.tachiyomi.util.lang.launchIO
|
|
import eu.kanade.tachiyomi.util.lang.launchUI
|
|
import eu.kanade.tachiyomi.util.lang.launchUI
|
|
import eu.kanade.tachiyomi.util.system.dpToPx
|
|
import eu.kanade.tachiyomi.util.system.dpToPx
|
|
|
|
+import eu.kanade.tachiyomi.util.system.isTablet
|
|
import eu.kanade.tachiyomi.util.system.toast
|
|
import eu.kanade.tachiyomi.util.system.toast
|
|
import eu.kanade.tachiyomi.util.view.setNavigationBarTransparentCompat
|
|
import eu.kanade.tachiyomi.util.view.setNavigationBarTransparentCompat
|
|
import eu.kanade.tachiyomi.widget.HideBottomNavigationOnScrollBehavior
|
|
import eu.kanade.tachiyomi.widget.HideBottomNavigationOnScrollBehavior
|
|
@@ -85,7 +86,6 @@ class MainActivity : BaseViewBindingActivity<MainActivityBinding>() {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- lateinit var tabAnimator: ViewHeightAnimator
|
|
|
|
private var bottomNavAnimator: ViewHeightAnimator? = null
|
|
private var bottomNavAnimator: ViewHeightAnimator? = null
|
|
|
|
|
|
private var isConfirmingExit: Boolean = false
|
|
private var isConfirmingExit: Boolean = false
|
|
@@ -93,6 +93,11 @@ class MainActivity : BaseViewBindingActivity<MainActivityBinding>() {
|
|
|
|
|
|
private var fixedViewsToBottom = mutableMapOf<View, AppBarLayout.OnOffsetChangedListener>()
|
|
private var fixedViewsToBottom = mutableMapOf<View, AppBarLayout.OnOffsetChangedListener>()
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * App bar lift state for backstack
|
|
|
|
+ */
|
|
|
|
+ private val backstackLiftState = mutableMapOf<String, Boolean>()
|
|
|
|
+
|
|
// To be checked by splash screen. If true then splash screen will be removed.
|
|
// To be checked by splash screen. If true then splash screen will be removed.
|
|
var ready = false
|
|
var ready = false
|
|
|
|
|
|
@@ -117,11 +122,6 @@ class MainActivity : BaseViewBindingActivity<MainActivityBinding>() {
|
|
|
|
|
|
// Draw edge-to-edge
|
|
// Draw edge-to-edge
|
|
WindowCompat.setDecorFitsSystemWindows(window, false)
|
|
WindowCompat.setDecorFitsSystemWindows(window, false)
|
|
- binding.appbar.applyInsetter {
|
|
|
|
- type(navigationBars = true, statusBars = true) {
|
|
|
|
- padding(left = true, top = true, right = true)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
binding.fabLayout.rootFab.applyInsetter {
|
|
binding.fabLayout.rootFab.applyInsetter {
|
|
type(navigationBars = true) {
|
|
type(navigationBars = true) {
|
|
margin()
|
|
margin()
|
|
@@ -140,8 +140,6 @@ class MainActivity : BaseViewBindingActivity<MainActivityBinding>() {
|
|
}
|
|
}
|
|
setSplashScreenExitAnimation(splashScreen)
|
|
setSplashScreenExitAnimation(splashScreen)
|
|
|
|
|
|
- tabAnimator = ViewHeightAnimator(binding.tabs, 0L)
|
|
|
|
-
|
|
|
|
if (binding.bottomNav != null) {
|
|
if (binding.bottomNav != null) {
|
|
bottomNavAnimator = ViewHeightAnimator(binding.bottomNav!!)
|
|
bottomNavAnimator = ViewHeightAnimator(binding.bottomNav!!)
|
|
|
|
|
|
@@ -218,7 +216,7 @@ class MainActivity : BaseViewBindingActivity<MainActivityBinding>() {
|
|
container: ViewGroup,
|
|
container: ViewGroup,
|
|
handler: ControllerChangeHandler
|
|
handler: ControllerChangeHandler
|
|
) {
|
|
) {
|
|
- syncActivityViewWithController(to, from)
|
|
|
|
|
|
+ syncActivityViewWithController(to, from, isPush)
|
|
}
|
|
}
|
|
|
|
|
|
override fun onChangeCompleted(
|
|
override fun onChangeCompleted(
|
|
@@ -504,7 +502,7 @@ class MainActivity : BaseViewBindingActivity<MainActivityBinding>() {
|
|
router.setRoot(controller.withFadeTransaction().tag(id.toString()))
|
|
router.setRoot(controller.withFadeTransaction().tag(id.toString()))
|
|
}
|
|
}
|
|
|
|
|
|
- private fun syncActivityViewWithController(to: Controller?, from: Controller? = null) {
|
|
|
|
|
|
+ private fun syncActivityViewWithController(to: Controller?, from: Controller? = null, isPush: Boolean = true) {
|
|
if (from is DialogController || to is DialogController) {
|
|
if (from is DialogController || to is DialogController) {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
@@ -529,12 +527,11 @@ class MainActivity : BaseViewBindingActivity<MainActivityBinding>() {
|
|
from.cleanupTabs(binding.tabs)
|
|
from.cleanupTabs(binding.tabs)
|
|
}
|
|
}
|
|
if (to is TabbedController) {
|
|
if (to is TabbedController) {
|
|
- tabAnimator.expand()
|
|
|
|
to.configureTabs(binding.tabs)
|
|
to.configureTabs(binding.tabs)
|
|
} else {
|
|
} else {
|
|
- tabAnimator.collapse()
|
|
|
|
binding.tabs.setupWithViewPager(null)
|
|
binding.tabs.setupWithViewPager(null)
|
|
}
|
|
}
|
|
|
|
+ binding.tabs.isVisible = to is TabbedController
|
|
|
|
|
|
if (from is FabController) {
|
|
if (from is FabController) {
|
|
binding.fabLayout.rootFab.isVisible = false
|
|
binding.fabLayout.rootFab.isVisible = false
|
|
@@ -545,16 +542,32 @@ class MainActivity : BaseViewBindingActivity<MainActivityBinding>() {
|
|
to.configureFab(binding.fabLayout.rootFab)
|
|
to.configureFab(binding.fabLayout.rootFab)
|
|
}
|
|
}
|
|
|
|
|
|
- when (to) {
|
|
|
|
- is NoToolbarElevationController -> {
|
|
|
|
- binding.appbar.disableElevation()
|
|
|
|
- }
|
|
|
|
- is ToolbarLiftOnScrollController -> {
|
|
|
|
- binding.appbar.enableElevation(true)
|
|
|
|
- }
|
|
|
|
- else -> {
|
|
|
|
- binding.appbar.enableElevation(false)
|
|
|
|
|
|
+ if (!isTablet()) {
|
|
|
|
+ // Save lift state
|
|
|
|
+ if (isPush) {
|
|
|
|
+ if (router.backstackSize > 1) {
|
|
|
|
+ // Save lift state
|
|
|
|
+ from?.let {
|
|
|
|
+ backstackLiftState[it.instanceId] = binding.appbar.isLifted
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ backstackLiftState.clear()
|
|
|
|
+ }
|
|
|
|
+ binding.appbar.isLifted = false
|
|
|
|
+ } else {
|
|
|
|
+ to?.let {
|
|
|
|
+ binding.appbar.isLifted = backstackLiftState.getOrElse(it.instanceId) { false }
|
|
|
|
+ }
|
|
|
|
+ from?.let {
|
|
|
|
+ backstackLiftState.remove(it.instanceId)
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ binding.root.isLiftAppBarOnScroll = to !is NoAppBarElevationController
|
|
|
|
+
|
|
|
|
+ binding.appbar.isTransparentWhenNotLifted = to is MangaController &&
|
|
|
|
+ preferences.appTheme().get() != PreferenceValues.AppTheme.BLUE
|
|
|
|
+ binding.controllerContainer.overlapHeader = to is MangaController
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|