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 <arkon@users.noreply.github.com>
This commit is contained in:
scb261 2020-09-27 20:25:30 +03:00 committed by GitHub
parent 458e761b45
commit 3784d1a8f2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 21 additions and 4 deletions

View file

@ -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"

View file

@ -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)

View file

@ -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)
}
}

View file

@ -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"

View file

@ -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" />

View file

@ -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>