Просмотр исходного кода

Add option to hide bottom bar when scrolling (#3758)

* [wip] hardcoded flag for hide on scroll

* add corresponding option in settings

* clean up a little

Co-authored-by: arkon <[email protected]>
scb261 4 лет назад
Родитель
Сommit
3784d1a8f2

+ 2 - 0
app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt

@@ -13,6 +13,8 @@ object PreferenceKeys {
 
     const val confirmExit = "pref_confirm_exit"
 
+    const val hideBottomBar = "pref_hide_bottom_bar_on_scroll"
+
     const val rotation = "pref_rotation_type_key"
 
     const val enableTransitions = "pref_enable_transitions_key"

+ 2 - 0
app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt

@@ -61,6 +61,8 @@ class PreferencesHelper(val context: Context) {
 
     fun confirmExit() = prefs.getBoolean(Keys.confirmExit, false)
 
+    fun hideBottomBar() = flowPrefs.getBoolean(Keys.hideBottomBar, true)
+
     fun useBiometricLock() = flowPrefs.getBoolean(Keys.useBiometricLock, false)
 
     fun lockAppAfter() = flowPrefs.getInt(Keys.lockAppAfter, 0)

+ 11 - 3
app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt

@@ -90,6 +90,7 @@ class MainActivity : BaseActivity<MainActivityBinding>() {
         bottomNavAnimator = ViewHeightAnimator(binding.bottomNav)
 
         // Set behavior of bottom nav
+        setBottomBarBehaviorOnScroll()
         binding.bottomNav.setOnNavigationItemSelectedListener { item ->
             val id = item.itemId
 
@@ -307,6 +308,12 @@ class MainActivity : BaseActivity<MainActivityBinding>() {
             !isConfirmingExit
     }
 
+    private fun setBottomBarBehaviorOnScroll() {
+        val layoutParams = binding.bottomNav.layoutParams as CoordinatorLayout.LayoutParams
+        layoutParams.behavior =
+            if (preferences.hideBottomBar().get()) HideBottomViewOnScrollBehavior<View>() else null
+    }
+
     fun setSelectedNavItem(itemId: Int) {
         if (!isFinishing) {
             binding.bottomNav.selectedItemId = itemId
@@ -336,6 +343,7 @@ class MainActivity : BaseActivity<MainActivityBinding>() {
         if (to is RootController) {
             // Always show bottom nav again when returning to a RootController
             showBottomNav(visible = true, collapse = from !is RootController)
+            setBottomBarBehaviorOnScroll()
         }
 
         if (from is TabbedController) {
@@ -373,19 +381,19 @@ class MainActivity : BaseActivity<MainActivityBinding>() {
 
     fun showBottomNav(visible: Boolean, collapse: Boolean = false) {
         val layoutParams = binding.bottomNav.layoutParams as CoordinatorLayout.LayoutParams
-        val bottomViewNavigationBehavior = layoutParams.behavior as HideBottomViewOnScrollBehavior
+        val bottomViewNavigationBehavior = layoutParams.behavior as? HideBottomViewOnScrollBehavior
         if (visible) {
             if (collapse) {
                 bottomNavAnimator.expand()
             }
 
-            bottomViewNavigationBehavior.slideUp(binding.bottomNav)
+            bottomViewNavigationBehavior?.slideUp(binding.bottomNav)
         } else {
             if (collapse) {
                 bottomNavAnimator.collapse()
             }
 
-            bottomViewNavigationBehavior.slideDown(binding.bottomNav)
+            bottomViewNavigationBehavior?.slideDown(binding.bottomNav)
         }
     }
 

+ 5 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsGeneralController.kt

@@ -45,6 +45,11 @@ class SettingsGeneralController : SettingsController() {
             titleRes = R.string.pref_confirm_exit
             defaultValue = false
         }
+        switchPreference {
+            key = Keys.hideBottomBar
+            titleRes = R.string.pref_hide_bottom_bar_on_scroll
+            defaultValue = true
+        }
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
             preference {
                 key = "pref_manage_notifications"

+ 0 - 1
app/src/main/res/layout/main_activity.xml

@@ -47,7 +47,6 @@
         app:itemIconTint="@color/bottom_nav_selector"
         app:itemTextColor="@color/bottom_nav_selector"
         app:labelVisibilityMode="labeled"
-        app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
         app:layout_insetEdge="bottom"
         app:menu="@menu/bottom_nav" />
 

+ 1 - 0
app/src/main/res/values/strings.xml

@@ -157,6 +157,7 @@
     <string name="system_default">Default</string>
     <string name="pref_date_format">Date format</string>
     <string name="pref_confirm_exit">Confirm exit</string>
+    <string name="pref_hide_bottom_bar_on_scroll">Hide bottom bar on scroll</string>
     <string name="pref_manage_notifications">Manage notifications</string>
 
     <string name="pref_category_security">Security</string>