Fixing overscroll effect when the navigation bar is opaque
The navigation bar is opaque on mobile devices in landscape mode.
Launcher should ignore the right insets and draw the edge effect appropriately.
Also draw the black bar under the navigation bar, just in case we assume it
to be opaque, but it was not actually opaque.
Bug: 18526657
Change-Id: I1d49dcb82b8a5ee25009bc738cd9b8c0c5c88263
diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java
index 05f0a05..2579ea3 100644
--- a/src/com/android/launcher3/PagedView.java
+++ b/src/com/android/launcher3/PagedView.java
@@ -202,6 +202,9 @@
protected final Rect mInsets = new Rect();
protected final boolean mIsRtl;
+ // When set to true, full screen content and overscroll effect is shited inside by right inset.
+ protected boolean mIgnoreRightInset;
+
// Edge effect
private final LauncherEdgeEffect mEdgeGlowLeft = new LauncherEdgeEffect();
private final LauncherEdgeEffect mEdgeGlowRight = new LauncherEdgeEffect();
@@ -819,7 +822,8 @@
childWidthMode = MeasureSpec.EXACTLY;
childHeightMode = MeasureSpec.EXACTLY;
- childWidth = getViewportWidth() - mInsets.left - mInsets.right;
+ childWidth = getViewportWidth() - mInsets.left
+ - (mIgnoreRightInset ? mInsets.right : 0);
childHeight = getViewportHeight();
}
if (referenceChildWidth == 0) {
@@ -1177,8 +1181,10 @@
canvas.rotate(90);
getEdgeVerticalPostion(sTmpIntPoint);
- canvas.translate(sTmpIntPoint[0] - display.top, -display.width());
- mEdgeGlowRight.setSize(sTmpIntPoint[1] - sTmpIntPoint[0], display.width());
+
+ int width = mIgnoreRightInset ? (display.width() - mInsets.right) : display.width();
+ canvas.translate(sTmpIntPoint[0] - display.top, -width);
+ mEdgeGlowRight.setSize(sTmpIntPoint[1] - sTmpIntPoint[0], width);
if (mEdgeGlowRight.draw(canvas)) {
postInvalidateOnAnimation();
}