mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 16:18:55 +01:00 
			
		
		
		
	Hide bottom nav on non-root controllers
This commit is contained in:
		@@ -0,0 +1,3 @@
 | 
			
		||||
package eu.kanade.tachiyomi.ui.base.controller
 | 
			
		||||
 | 
			
		||||
interface RootController
 | 
			
		||||
@@ -23,6 +23,7 @@ import eu.kanade.tachiyomi.data.preference.getOrDefault
 | 
			
		||||
import eu.kanade.tachiyomi.source.CatalogueSource
 | 
			
		||||
import eu.kanade.tachiyomi.source.Source
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.RootController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.requestPermissionsSafe
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
 | 
			
		||||
import eu.kanade.tachiyomi.ui.catalogue.browse.BrowseCatalogueController
 | 
			
		||||
@@ -40,6 +41,7 @@ import uy.kohesive.injekt.api.get
 | 
			
		||||
 * [CatalogueAdapter.OnLatestClickListener] call function data on latest item click
 | 
			
		||||
 */
 | 
			
		||||
class CatalogueController : NucleusController<CataloguePresenter>(),
 | 
			
		||||
        RootController,
 | 
			
		||||
        FlexibleAdapter.OnItemClickListener,
 | 
			
		||||
        FlexibleAdapter.OnItemLongClickListener,
 | 
			
		||||
        CatalogueAdapter.OnBrowseClickListener,
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,7 @@ import eu.kanade.tachiyomi.data.library.LibraryUpdateService
 | 
			
		||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
 | 
			
		||||
import eu.kanade.tachiyomi.data.preference.getOrDefault
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.RootController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.SecondaryDrawerController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.TabbedController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
 | 
			
		||||
@@ -54,6 +55,7 @@ class LibraryController(
 | 
			
		||||
    bundle: Bundle? = null,
 | 
			
		||||
    private val preferences: PreferencesHelper = Injekt.get()
 | 
			
		||||
) : NucleusController<LibraryPresenter>(bundle),
 | 
			
		||||
        RootController,
 | 
			
		||||
        TabbedController,
 | 
			
		||||
        SecondaryDrawerController,
 | 
			
		||||
        ActionMode.Callback,
 | 
			
		||||
 
 | 
			
		||||
@@ -16,6 +16,7 @@ import eu.kanade.tachiyomi.data.notification.NotificationReceiver
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.NoToolbarElevationController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.RootController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.SecondaryDrawerController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.TabbedController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
 | 
			
		||||
@@ -47,7 +48,8 @@ class MainActivity : BaseActivity() {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    lateinit var tabAnimator: TabsAnimator
 | 
			
		||||
    lateinit var tabAnimator: ViewHeightAnimator
 | 
			
		||||
    lateinit var bottomNavAnimator: ViewHeightAnimator
 | 
			
		||||
 | 
			
		||||
    override fun onCreate(savedInstanceState: Bundle?) {
 | 
			
		||||
        super.onCreate(savedInstanceState)
 | 
			
		||||
@@ -62,7 +64,8 @@ class MainActivity : BaseActivity() {
 | 
			
		||||
 | 
			
		||||
        setSupportActionBar(toolbar)
 | 
			
		||||
 | 
			
		||||
        tabAnimator = TabsAnimator(tabs)
 | 
			
		||||
        tabAnimator = ViewHeightAnimator(tabs)
 | 
			
		||||
        bottomNavAnimator = ViewHeightAnimator(bottom_nav)
 | 
			
		||||
 | 
			
		||||
        // Set behavior of bottom nav
 | 
			
		||||
        bottom_nav.setOnNavigationItemSelectedListener { item ->
 | 
			
		||||
@@ -220,6 +223,13 @@ class MainActivity : BaseActivity() {
 | 
			
		||||
 | 
			
		||||
        supportActionBar?.setDisplayHomeAsUpEnabled(router.backstackSize != 1)
 | 
			
		||||
 | 
			
		||||
        if (from is RootController && to !is RootController) {
 | 
			
		||||
            bottomNavAnimator.collapse()
 | 
			
		||||
        }
 | 
			
		||||
        if (to is RootController && from !is RootController) {
 | 
			
		||||
            bottomNavAnimator.expand()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (from is TabbedController) {
 | 
			
		||||
            from.cleanupTabs(tabs)
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,45 +1,46 @@
 | 
			
		||||
package eu.kanade.tachiyomi.ui.main
 | 
			
		||||
 | 
			
		||||
import android.animation.ObjectAnimator
 | 
			
		||||
import android.view.View
 | 
			
		||||
import android.view.ViewTreeObserver
 | 
			
		||||
import android.view.animation.DecelerateInterpolator
 | 
			
		||||
import com.google.android.material.tabs.TabLayout
 | 
			
		||||
import androidx.annotation.Keep
 | 
			
		||||
 | 
			
		||||
class TabsAnimator(val tabs: TabLayout) {
 | 
			
		||||
class ViewHeightAnimator(val view: View) {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The default height of the tab layout. It's unknown until the view is layout.
 | 
			
		||||
     * The default height of the view. It's unknown until the view is layout.
 | 
			
		||||
     */
 | 
			
		||||
    private var tabsHeight = 0
 | 
			
		||||
    private var height = 0
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Whether the last state of the tab layout is shown or hidden.
 | 
			
		||||
     * Whether the last state of the view is shown or hidden.
 | 
			
		||||
     */
 | 
			
		||||
    private var isLastStateShown = true
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Animation used to expand and collapse the tab layout.
 | 
			
		||||
     * Animation used to expand and collapse the view.
 | 
			
		||||
     */
 | 
			
		||||
    private val animation by lazy {
 | 
			
		||||
        ObjectAnimator.ofInt(this, "height", tabsHeight).apply {
 | 
			
		||||
        ObjectAnimator.ofInt(this, "height", height).apply {
 | 
			
		||||
            duration = 300L
 | 
			
		||||
            interpolator = DecelerateInterpolator()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    init {
 | 
			
		||||
        tabs.viewTreeObserver.addOnGlobalLayoutListener(
 | 
			
		||||
        view.viewTreeObserver.addOnGlobalLayoutListener(
 | 
			
		||||
                object : ViewTreeObserver.OnGlobalLayoutListener {
 | 
			
		||||
                    override fun onGlobalLayout() {
 | 
			
		||||
                        if (tabs.height > 0) {
 | 
			
		||||
                            tabs.viewTreeObserver.removeOnGlobalLayoutListener(this)
 | 
			
		||||
                        if (view.height > 0) {
 | 
			
		||||
                            view.viewTreeObserver.removeOnGlobalLayoutListener(this)
 | 
			
		||||
 | 
			
		||||
                            // Save the tabs default height.
 | 
			
		||||
                            tabsHeight = tabs.height
 | 
			
		||||
                            height = view.height
 | 
			
		||||
 | 
			
		||||
                            // Now that we know the height, set the initial height.
 | 
			
		||||
                            if (isLastStateShown) {
 | 
			
		||||
                                setHeight(tabsHeight)
 | 
			
		||||
                                setHeight(height)
 | 
			
		||||
                            } else {
 | 
			
		||||
                                setHeight(0)
 | 
			
		||||
                            }
 | 
			
		||||
@@ -54,9 +55,10 @@ class TabsAnimator(val tabs: TabLayout) {
 | 
			
		||||
     *
 | 
			
		||||
     * @param newHeight The new height of the tab layout.
 | 
			
		||||
     */
 | 
			
		||||
    @Keep
 | 
			
		||||
    fun setHeight(newHeight: Int) {
 | 
			
		||||
        tabs.layoutParams.height = newHeight
 | 
			
		||||
        tabs.requestLayout()
 | 
			
		||||
        view.layoutParams.height = newHeight
 | 
			
		||||
        view.requestLayout()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -64,7 +66,7 @@ class TabsAnimator(val tabs: TabLayout) {
 | 
			
		||||
     * reflection.
 | 
			
		||||
     */
 | 
			
		||||
    fun getHeight(): Int {
 | 
			
		||||
        return tabs.layoutParams.height
 | 
			
		||||
        return view.layoutParams.height
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -72,8 +74,8 @@ class TabsAnimator(val tabs: TabLayout) {
 | 
			
		||||
     */
 | 
			
		||||
    fun expand() {
 | 
			
		||||
        if (isMeasured) {
 | 
			
		||||
            if (getHeight() != tabsHeight) {
 | 
			
		||||
                animation.setIntValues(tabsHeight)
 | 
			
		||||
            if (getHeight() != height) {
 | 
			
		||||
                animation.setIntValues(height)
 | 
			
		||||
                animation.start()
 | 
			
		||||
            } else {
 | 
			
		||||
                animation.cancel()
 | 
			
		||||
@@ -101,5 +103,5 @@ class TabsAnimator(val tabs: TabLayout) {
 | 
			
		||||
     * Returns whether the tab layout has a known height.
 | 
			
		||||
     */
 | 
			
		||||
    private val isMeasured: Boolean
 | 
			
		||||
        get() = tabsHeight > 0
 | 
			
		||||
        get() = height > 0
 | 
			
		||||
}
 | 
			
		||||
@@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.more
 | 
			
		||||
 | 
			
		||||
import androidx.preference.PreferenceScreen
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.RootController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
 | 
			
		||||
import eu.kanade.tachiyomi.ui.download.DownloadController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.extension.ExtensionController
 | 
			
		||||
@@ -17,7 +18,7 @@ import eu.kanade.tachiyomi.util.preference.titleRes
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.getResourceColor
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.openInBrowser
 | 
			
		||||
 | 
			
		||||
class MoreController : SettingsController() {
 | 
			
		||||
class MoreController : SettingsController(), RootController {
 | 
			
		||||
 | 
			
		||||
    override fun setupPreferenceScreen(screen: PreferenceScreen) = with(screen) {
 | 
			
		||||
        titleRes = R.string.label_more
 | 
			
		||||
 
 | 
			
		||||
@@ -20,6 +20,7 @@ import eu.kanade.tachiyomi.data.library.LibraryUpdateService
 | 
			
		||||
import eu.kanade.tachiyomi.data.notification.Notifications
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.NoToolbarElevationController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.RootController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.popControllerWithTag
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
 | 
			
		||||
import eu.kanade.tachiyomi.ui.manga.MangaController
 | 
			
		||||
@@ -37,6 +38,7 @@ import timber.log.Timber
 | 
			
		||||
 * UI related actions should be called from here.
 | 
			
		||||
 */
 | 
			
		||||
class RecentChaptersController : NucleusController<RecentChaptersPresenter>(),
 | 
			
		||||
        RootController,
 | 
			
		||||
        NoToolbarElevationController,
 | 
			
		||||
        ActionMode.Callback,
 | 
			
		||||
        FlexibleAdapter.OnItemClickListener,
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,7 @@ import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.data.database.models.History
 | 
			
		||||
import eu.kanade.tachiyomi.data.database.models.Manga
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.RootController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
 | 
			
		||||
import eu.kanade.tachiyomi.ui.manga.MangaController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
 | 
			
		||||
@@ -22,6 +23,7 @@ import kotlinx.android.synthetic.main.recently_read_controller.recycler
 | 
			
		||||
 * UI related actions should be called from here.
 | 
			
		||||
 */
 | 
			
		||||
class RecentlyReadController : NucleusController<RecentlyReadPresenter>(),
 | 
			
		||||
        RootController,
 | 
			
		||||
        FlexibleAdapter.OnUpdateListener,
 | 
			
		||||
        RecentlyReadAdapter.OnRemoveClickListener,
 | 
			
		||||
        RecentlyReadAdapter.OnResumeClickListener,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user