mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 06:17:57 +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