Merge "Fixing overscroll effect when the navigation bar is opaque" into ub-launcher3-burnaby-polish
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user