Skip to content

Commit c9bdb2e

Browse files
authored
1 parent ca94b7b commit c9bdb2e

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

app/src/main/java/com/duckduckgo/app/browser/omnibar/TopAppBarBehavior.kt

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,16 @@
1616

1717
package com.duckduckgo.app.browser.omnibar
1818

19+
import android.annotation.SuppressLint
1920
import android.content.Context
2021
import android.util.AttributeSet
22+
import android.view.Gravity
2123
import android.view.View
2224
import android.view.ViewGroup.MarginLayoutParams
2325
import androidx.coordinatorlayout.widget.CoordinatorLayout
2426
import com.duckduckgo.app.browser.R
2527
import com.google.android.material.appbar.AppBarLayout
28+
import com.google.android.material.snackbar.Snackbar
2629

2730
/*
2831
* This custom behavior prevents the top omnibar from hiding everywhere except for the browser view (i.e. the autocomplete suggestions)
@@ -41,8 +44,11 @@ class TopAppBarBehavior(
4144
)
4245
}
4346

47+
@SuppressLint("RestrictedApi")
4448
override fun layoutDependsOn(parent: CoordinatorLayout, child: AppBarLayout, dependency: View): Boolean {
45-
if (!viewsExemptedFromOffset.contains(dependency.id)) {
49+
if (dependency is Snackbar.SnackbarLayout) {
50+
updateSnackbar(child, dependency)
51+
} else if (!viewsExemptedFromOffset.contains(dependency.id)) {
4652
offsetBottomByToolbar(dependency)
4753
}
4854

@@ -65,6 +71,23 @@ class TopAppBarBehavior(
6571
}
6672
}
6773

74+
@SuppressLint("RestrictedApi")
75+
private fun updateSnackbar(child: View, snackbarLayout: Snackbar.SnackbarLayout) {
76+
if (snackbarLayout.layoutParams is CoordinatorLayout.LayoutParams) {
77+
val params = snackbarLayout.layoutParams as CoordinatorLayout.LayoutParams
78+
79+
params.anchorId = R.id.navigationBar
80+
params.anchorGravity = Gravity.TOP
81+
params.gravity = Gravity.TOP
82+
snackbarLayout.layoutParams = params
83+
84+
// add a padding to the snackbar to avoid it touching the anchor view
85+
if (snackbarLayout.translationY == 0f) {
86+
snackbarLayout.translationY -= child.context.resources.getDimension(com.duckduckgo.mobile.android.R.dimen.keyline_2)
87+
}
88+
}
89+
}
90+
6891
private fun offsetBottomByToolbar(view: View?) {
6992
val omnibarHeight = omnibar.measuredHeight()
7093
if (omnibarHeight > 0 && view is View && view.layoutParams is MarginLayoutParams) {

0 commit comments

Comments
 (0)