mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-12-26 11:07:37 +00:00
Fixed snackbar behavior in contrast with bottom navigation
This commit is contained in:
parent
c44a942fb7
commit
b910db322b
@ -24,6 +24,7 @@ import com.topjohnwu.magisk.redesign.log.LogFragment
|
|||||||
import com.topjohnwu.magisk.redesign.module.ModuleFragment
|
import com.topjohnwu.magisk.redesign.module.ModuleFragment
|
||||||
import com.topjohnwu.magisk.redesign.settings.SettingsFragment
|
import com.topjohnwu.magisk.redesign.settings.SettingsFragment
|
||||||
import com.topjohnwu.magisk.redesign.superuser.SuperuserFragment
|
import com.topjohnwu.magisk.redesign.superuser.SuperuserFragment
|
||||||
|
import com.topjohnwu.magisk.utils.HideBottomViewOnScrollBehavior
|
||||||
import com.topjohnwu.magisk.utils.HideTopViewOnScrollBehavior
|
import com.topjohnwu.magisk.utils.HideTopViewOnScrollBehavior
|
||||||
import com.topjohnwu.superuser.Shell
|
import com.topjohnwu.superuser.Shell
|
||||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||||
@ -62,6 +63,9 @@ open class MainActivity : CompatActivity<MainViewModel, ActivityMainMd2Binding>(
|
|||||||
binding.mainToolbarWrapper.updateLayoutParams<CoordinatorLayout.LayoutParams> {
|
binding.mainToolbarWrapper.updateLayoutParams<CoordinatorLayout.LayoutParams> {
|
||||||
behavior = HideTopViewOnScrollBehavior<MaterialCardView>()
|
behavior = HideTopViewOnScrollBehavior<MaterialCardView>()
|
||||||
}
|
}
|
||||||
|
binding.mainBottomBar.updateLayoutParams<CoordinatorLayout.LayoutParams> {
|
||||||
|
behavior = HideBottomViewOnScrollBehavior<MaterialCardView>()
|
||||||
|
}
|
||||||
binding.mainNavigation.setOnNavigationItemSelectedListener {
|
binding.mainNavigation.setOnNavigationItemSelectedListener {
|
||||||
when (it.itemId) {
|
when (it.itemId) {
|
||||||
R.id.homeFragment -> Navigation.home()
|
R.id.homeFragment -> Navigation.home()
|
||||||
|
@ -0,0 +1,77 @@
|
|||||||
|
package com.topjohnwu.magisk.utils
|
||||||
|
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||||
|
import androidx.core.view.isVisible
|
||||||
|
import androidx.core.view.updateLayoutParams
|
||||||
|
import androidx.interpolator.view.animation.FastOutSlowInInterpolator
|
||||||
|
import com.google.android.material.behavior.HideBottomViewOnScrollBehavior
|
||||||
|
import com.google.android.material.snackbar.Snackbar
|
||||||
|
import com.topjohnwu.magisk.R
|
||||||
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
|
class HideBottomViewOnScrollBehavior<T : View> : HideBottomViewOnScrollBehavior<T>() {
|
||||||
|
|
||||||
|
override fun layoutDependsOn(parent: CoordinatorLayout, child: T, dependency: View) =
|
||||||
|
super.layoutDependsOn(parent, child, dependency) or (dependency is Snackbar.SnackbarLayout)
|
||||||
|
|
||||||
|
override fun onDependentViewChanged(
|
||||||
|
parent: CoordinatorLayout,
|
||||||
|
child: T,
|
||||||
|
dependency: View
|
||||||
|
) = when (dependency) {
|
||||||
|
is Snackbar.SnackbarLayout -> onDependentViewChanged(parent, child, dependency)
|
||||||
|
else -> super.onDependentViewChanged(parent, child, dependency)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDependentViewRemoved(
|
||||||
|
parent: CoordinatorLayout,
|
||||||
|
child: T,
|
||||||
|
dependency: View
|
||||||
|
) = when (dependency) {
|
||||||
|
is Snackbar.SnackbarLayout -> onDependentViewRemoved(parent, child, dependency)
|
||||||
|
else -> super.onDependentViewRemoved(parent, child, dependency)
|
||||||
|
}
|
||||||
|
|
||||||
|
//---
|
||||||
|
|
||||||
|
private fun onDependentViewChanged(
|
||||||
|
parent: CoordinatorLayout,
|
||||||
|
child: T,
|
||||||
|
dependency: Snackbar.SnackbarLayout
|
||||||
|
): Boolean {
|
||||||
|
val viewMargin = (child.layoutParams as ViewGroup.MarginLayoutParams).bottomMargin
|
||||||
|
val additionalMargin = dependency.resources.getDimension(R.dimen.l1).roundToInt()
|
||||||
|
val translation = dependency.height + additionalMargin
|
||||||
|
|
||||||
|
dependency.updateLayoutParams<ViewGroup.MarginLayoutParams> {
|
||||||
|
bottomMargin = viewMargin
|
||||||
|
}
|
||||||
|
|
||||||
|
// checks whether the navigation is not hidden via scroll
|
||||||
|
if (child.isVisible && child.translationY <= 0) {
|
||||||
|
child.translationY(-translation.toFloat())
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun onDependentViewRemoved(
|
||||||
|
parent: CoordinatorLayout,
|
||||||
|
child: T,
|
||||||
|
dependency: Snackbar.SnackbarLayout
|
||||||
|
) {
|
||||||
|
// checks whether the navigation is not hidden via scroll
|
||||||
|
if (child.isVisible && child.translationY <= 0) {
|
||||||
|
child.translationY(0f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---
|
||||||
|
|
||||||
|
private fun View.translationY(destination: Float) = animate()
|
||||||
|
.translationY(destination)
|
||||||
|
.setInterpolator(FastOutSlowInInterpolator())
|
||||||
|
.start()
|
||||||
|
|
||||||
|
}
|
@ -56,7 +56,6 @@
|
|||||||
style="?styleCardElevated"
|
style="?styleCardElevated"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:layout_behavior="com.google.android.material.behavior.HideBottomViewOnScrollBehavior"
|
|
||||||
android:layout_gravity="bottom"
|
android:layout_gravity="bottom"
|
||||||
android:layout_marginStart="@dimen/l1"
|
android:layout_marginStart="@dimen/l1"
|
||||||
android:layout_marginEnd="@dimen/l1"
|
android:layout_marginEnd="@dimen/l1"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user