Merge "Fixing overscroll effect when the navigation bar is opaque" into ub-launcher3-burnaby-polish

This commit is contained in:
Sunny Goyal
2015-10-07 17:22:44 +00:00
committed by Android (Google) Code Review
4 changed files with 43 additions and 4 deletions
@@ -17,6 +17,7 @@
package com.android.launcher3; package com.android.launcher3;
import android.annotation.TargetApi; import android.annotation.TargetApi;
import android.app.ActivityManager;
import android.content.Context; import android.content.Context;
import android.graphics.Point; import android.graphics.Point;
import android.os.Build; import android.os.Build;
@@ -84,6 +85,9 @@ public class InvariantDeviceProfile {
DeviceProfile landscapeProfile; DeviceProfile landscapeProfile;
DeviceProfile portraitProfile; DeviceProfile portraitProfile;
// On Marshmallow the status bar is no longer opaque, when drawn on the right.
public boolean isRightInsetOpaque;
InvariantDeviceProfile() { InvariantDeviceProfile() {
} }
@@ -116,7 +120,7 @@ public class InvariantDeviceProfile {
defaultLayoutId = dlId; defaultLayoutId = dlId;
} }
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) @TargetApi(Build.VERSION_CODES.M)
InvariantDeviceProfile(Context context) { InvariantDeviceProfile(Context context) {
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay(); Display display = wm.getDefaultDisplay();
@@ -167,6 +171,9 @@ public class InvariantDeviceProfile {
largeSide, smallSide, true /* isLandscape */); largeSide, smallSide, true /* isLandscape */);
portraitProfile = new DeviceProfile(context, this, smallestSize, largestSize, portraitProfile = new DeviceProfile(context, this, smallestSize, largestSize,
smallSide, largeSide, false /* isLandscape */); smallSide, largeSide, false /* isLandscape */);
isRightInsetOpaque = !Utilities.ATLEAST_MARSHMALLOW ||
context.getSystemService(ActivityManager.class).isLowRamDevice();
} }
ArrayList<InvariantDeviceProfile> getPredefinedDeviceProfiles() { ArrayList<InvariantDeviceProfile> getPredefinedDeviceProfiles() {
@@ -1,17 +1,42 @@
package com.android.launcher3; package com.android.launcher3;
import android.content.Context; import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect; import android.graphics.Rect;
import android.util.AttributeSet; import android.util.AttributeSet;
public class LauncherRootView extends InsettableFrameLayout { public class LauncherRootView extends InsettableFrameLayout {
private final Paint mOpaquePaint;
private boolean mDrawRightInsetBar;
public LauncherRootView(Context context, AttributeSet attrs) { public LauncherRootView(Context context, AttributeSet attrs) {
super(context, attrs); super(context, attrs);
mOpaquePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mOpaquePaint.setColor(Color.BLACK);
mOpaquePaint.setStyle(Paint.Style.FILL);
} }
@Override @Override
protected boolean fitSystemWindows(Rect insets) { protected boolean fitSystemWindows(Rect insets) {
setInsets(insets); setInsets(insets);
mDrawRightInsetBar = mInsets.right > 0 && LauncherAppState
.getInstance().getInvariantDeviceProfile().isRightInsetOpaque;
return true; // I'll take it from here return true; // I'll take it from here
} }
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
// If the right inset is opaque, draw a black rectangle to ensure that is stays opaque.
if (mDrawRightInsetBar) {
int width = getWidth();
canvas.drawRect(width - mInsets.right, 0, width, getHeight(), mOpaquePaint);
}
}
} }
+9 -3
View File
@@ -202,6 +202,9 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc
protected final Rect mInsets = new Rect(); protected final Rect mInsets = new Rect();
protected final boolean mIsRtl; 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 // Edge effect
private final LauncherEdgeEffect mEdgeGlowLeft = new LauncherEdgeEffect(); private final LauncherEdgeEffect mEdgeGlowLeft = new LauncherEdgeEffect();
private final LauncherEdgeEffect mEdgeGlowRight = new LauncherEdgeEffect(); private final LauncherEdgeEffect mEdgeGlowRight = new LauncherEdgeEffect();
@@ -819,7 +822,8 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc
childWidthMode = MeasureSpec.EXACTLY; childWidthMode = MeasureSpec.EXACTLY;
childHeightMode = MeasureSpec.EXACTLY; childHeightMode = MeasureSpec.EXACTLY;
childWidth = getViewportWidth() - mInsets.left - mInsets.right; childWidth = getViewportWidth() - mInsets.left
- (mIgnoreRightInset ? mInsets.right : 0);
childHeight = getViewportHeight(); childHeight = getViewportHeight();
} }
if (referenceChildWidth == 0) { if (referenceChildWidth == 0) {
@@ -1177,8 +1181,10 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc
canvas.rotate(90); canvas.rotate(90);
getEdgeVerticalPostion(sTmpIntPoint); 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)) { if (mEdgeGlowRight.draw(canvas)) {
postInvalidateOnAnimation(); postInvalidateOnAnimation();
} }
+1
View File
@@ -455,6 +455,7 @@ public class Workspace extends PagedView
setWallpaperDimension(); setWallpaperDimension();
setEdgeGlowColor(getResources().getColor(R.color.workspace_edge_effect_color)); setEdgeGlowColor(getResources().getColor(R.color.workspace_edge_effect_color));
mIgnoreRightInset = app.getInvariantDeviceProfile().isRightInsetOpaque;
} }
private void setupLayoutTransition() { private void setupLayoutTransition() {