From 254bd42729e404d13a779b73b2f5dd67fa21e7da Mon Sep 17 00:00:00 2001 From: Mario Bertschler Date: Mon, 24 Jul 2017 14:41:23 -0700 Subject: [PATCH] Merging ScrimView into GradientView Less banding, less drawing for All Apps Transition. Bug: 63873246 Change-Id: I6c7c856e2939a10db7e44b266c1d6d51334fd152 --- res/drawable-hdpi/all_apps_alpha_mask.png | Bin 16035 -> 0 bytes res/drawable-mdpi/all_apps_alpha_mask.png | Bin 15833 -> 0 bytes res/drawable-xhdpi/all_apps_alpha_mask.png | Bin 16234 -> 0 bytes res/drawable-xxhdpi/all_apps_alpha_mask.png | Bin 16658 -> 0 bytes res/drawable-xxxhdpi/all_apps_alpha_mask.png | Bin 16512 -> 0 bytes res/layout-land/launcher.xml | 7 +- res/layout-port/launcher.xml | 7 +- res/layout-sw720dp/launcher.xml | 7 +- res/layout/gradient_scrim.xml | 31 ----- src/com/android/launcher3/Utilities.java | 24 ---- .../allapps/AllAppsTransitionController.java | 9 -- .../launcher3/graphics/GradientView.java | 87 +++++++++---- .../android/launcher3/graphics/ScrimView.java | 115 ------------------ .../launcher3/widget/WidgetsBottomSheet.java | 4 +- 14 files changed, 84 insertions(+), 207 deletions(-) delete mode 100755 res/drawable-hdpi/all_apps_alpha_mask.png delete mode 100755 res/drawable-mdpi/all_apps_alpha_mask.png delete mode 100755 res/drawable-xhdpi/all_apps_alpha_mask.png delete mode 100755 res/drawable-xxhdpi/all_apps_alpha_mask.png delete mode 100755 res/drawable-xxxhdpi/all_apps_alpha_mask.png delete mode 100644 res/layout/gradient_scrim.xml delete mode 100644 src/com/android/launcher3/graphics/ScrimView.java diff --git a/res/drawable-hdpi/all_apps_alpha_mask.png b/res/drawable-hdpi/all_apps_alpha_mask.png deleted file mode 100755 index 01e9e56f717580cc526dfba6849442c48c044f41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16035 zcmeI3aZnW38Ne6PL_%s!lO`lI((`DHPTbqwu*#bQIPXm)6`t;v=k4;{FGB4~oHI=7Dx zW@*EId3YTfrnH*y6s0yxn-dDCDX|x7a%C^jusS0tG7O{P%sPfOW$4*i8a>Uh6m6y$ znxq+?p?N*689ubuWO!xqI-GowZSHV5C}nAD6ve|+R3H%01u}H9x0+(iW-~?WDZQSA zGe}>(TM>e!+m{}3GUCSue4Ulch!m&;F5p&t(2g0`&Ql{Rvad#-AY@cMVPKdOyFD6v-1~L8 z#trRL@|Hsc!$`-q^cB~8096EhvfnF$yyb8y>Eo?lk({yQjPexHOnC1gC{17%(nQR{ zr4Y%G1+JCP^#VbWy~VOzXN^=@;Rr%aZf>}$G&AgiD7iyiXId!KD3nWzuAgB*e) z+>n>}xp96RBJY&FEYW`Q9&r&%;`X22N*F$~dek2fFV+9r$s z(0+lgBdx_Di_m@SwlYLUFB*(AX%=agWEf5$O=i(SI@t`)$(n&)FEAs4;+%~Mw9qTT z&L`Bx%?Yi=0fW)BQEw6eLplt4jx;!&2GS&$^`rpIg6ITQCKC-tLX6{POsIUx2kW&y zu8v_fhkM&1ux#|`h@wsk_b89x^?}e1%+ii*!Dv&9_Njd4RGVOSHx9#*2GSHvQr5NUXW7_E9A!Ze#Gx+Lo|Se z3Ox_%r2j!Ge8TeoG7*3?2_{&Jpvqt*4IE=6t60`a(m)Vckih~oD~u%i3nzl*S=jR; zeeSDFM68m<8o^x+99C*%Z6gC;r`+9GPyAw=Xx!(^|3&U1yK!`99O<@WJEk4G;Jd3Xfsacr|KTiZ_i{qoy&-#coNl>W8Bt z!*N!jcc94Qc@cbF2Ua7?X0R3t9Y!q*r68y)u}Sbb>I*#&Ad#>MIzFylY0S>RLLf2A zIL)wSBvo-Q*5M8s8HKOy@D~FW{mC$g$? z!HX&`JRd}>;zEGnMHLsG5296ZAwck=iVM#N(Wcs__$#f1RDiz+TWA4IF-LV(~!6&Icl zqE&GrK=7i93(p79s<;p!cu~cL=YwcfTnG@nsN%x&L9{9^1PESKapCzOS``-p1TU(% z@O%)hiVFdP7gbz%K8RMug#f{eDlR-9M62RLfZ#Qrfc_If}iJV#QY*VK{VV?5UbV@#Fgvte1RbRG(r5mk|6j^1d$>)Rvey75Q%bu zEvGoxQ{0r(Br-`i?LPHc_P{@0EnW5Vwv_toznc2|H`cz}L<}Z$6%tqYwTJdxo0c%t z(*N}Aj|X=o{cXuA?Xt$FlKwqyE`KcDaMvPDRW7sgk+z|PBe!0io%~ULGPmcBhKDmZ zb^NJKVlUoRK5w=Eqi^kMe(b$JZ`3{7?Y?w*`@R!1XBQpYyrTCP5ArQF>(AJCZqLg8 zaoPFulXq+OUNf}KG#`EW>4OXJB&s^vo=aW0uIW3E?!7l{`W(xq^ap2wy=!lI<8*4< z;h&^!NZD1{)2^J@T|T)aZOwB#uOzn4`S|u-33trcvpSpZv1RA?2CLt!n6%tI&=?r;ezi>hs`4-JAdN zo8EzgnI{wPZtI&==zQ|z^sT?|Y)yFl;E6zWX2%DY+3anvXK!5p#Pvx;>YB2K(`inB Q=ri(yyal%QIhCvb1KGFN!2kdN diff --git a/res/drawable-mdpi/all_apps_alpha_mask.png b/res/drawable-mdpi/all_apps_alpha_mask.png deleted file mode 100755 index f24e71d41742b9f7dd8d33ddc1487964d25891ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15833 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 Ou(ae1)6T@aSN;uPN;F{r diff --git a/res/drawable-xxhdpi/all_apps_alpha_mask.png b/res/drawable-xxhdpi/all_apps_alpha_mask.png deleted file mode 100755 index d5facd78c272a2165c3d53a801fb2c75b988fdae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16658 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 diff --git a/res/layout-land/launcher.xml b/res/layout-land/launcher.xml index fd66593cf2..dab074391d 100644 --- a/res/layout-land/launcher.xml +++ b/res/layout-land/launcher.xml @@ -42,7 +42,12 @@ android:layout_gravity="center" launcher:pageIndicator="@id/page_indicator" /> - + - + - + - - - - - - \ No newline at end of file diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java index 9100fe28d9..3aa2db0005 100644 --- a/src/com/android/launcher3/Utilities.java +++ b/src/com/android/launcher3/Utilities.java @@ -28,7 +28,6 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.graphics.Bitmap; -import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; @@ -654,27 +653,4 @@ public final class Utilities { return hashSet; } - /** - * @return creates a new alpha mask bitmap out of an existing bitmap - */ - public static Bitmap convertToAlphaMask(Bitmap b, int applyAlpha) { - Bitmap a = Bitmap.createBitmap(b.getWidth(), b.getHeight(), Bitmap.Config.ALPHA_8); - Canvas c = new Canvas(a); - Paint paint = new Paint(); - paint.setAlpha(applyAlpha); - c.drawBitmap(b, 0f, 0f, paint); - return a; - } - - /** - * @return a new white 1x1 bitmap with ALPHA_8 - */ - public static Bitmap createOnePixBitmap() { - Bitmap a = Bitmap.createBitmap(1, 1, Bitmap.Config.ALPHA_8); - Canvas c = new Canvas(a); - Paint paint = new Paint(); - paint.setColor(Color.WHITE); - c.drawPaint(paint); - return a; - } } diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java index 0859e0658b..44e0a0474b 100644 --- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java +++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java @@ -25,7 +25,6 @@ import com.android.launcher3.Workspace; import com.android.launcher3.anim.SpringAnimationHandler; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.graphics.GradientView; -import com.android.launcher3.graphics.ScrimView; import com.android.launcher3.userevent.nano.LauncherLogProto.Action; import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; import com.android.launcher3.util.SystemUiController; @@ -100,7 +99,6 @@ public class AllAppsTransitionController implements TouchController, VerticalPul private boolean mIsTranslateWithoutWorkspace = false; private AnimatorSet mDiscoBounceAnimation; private GradientView mGradientView; - private ScrimView mScrimView; private SpringAnimationHandler mSpringAnimationHandler; @@ -302,13 +300,6 @@ public class AllAppsTransitionController implements TouchController, VerticalPul mGradientView.setVisibility(View.VISIBLE); } mGradientView.setProgress(progress); - - // scrim - if (mScrimView == null) { - mScrimView = (ScrimView) mLauncher.findViewById(R.id.scrim_bg); - mScrimView.setVisibility(View.VISIBLE); - } - mScrimView.setProgress(progress); } /** diff --git a/src/com/android/launcher3/graphics/GradientView.java b/src/com/android/launcher3/graphics/GradientView.java index 9dd9504540..678396df1f 100644 --- a/src/com/android/launcher3/graphics/GradientView.java +++ b/src/com/android/launcher3/graphics/GradientView.java @@ -18,13 +18,14 @@ package com.android.launcher3.graphics; import android.content.Context; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.LinearGradient; import android.graphics.Paint; import android.graphics.RadialGradient; import android.graphics.RectF; import android.graphics.Shader; +import android.support.v4.graphics.ColorUtils; import android.util.AttributeSet; import android.view.View; import android.view.animation.AccelerateInterpolator; @@ -34,6 +35,7 @@ import com.android.launcher3.Launcher; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.dynamicui.WallpaperColorInfo; +import com.android.launcher3.util.Themes; /** * Draws a translucent radial gradient background from an initial state with progress 0.0 to a @@ -42,44 +44,44 @@ import com.android.launcher3.dynamicui.WallpaperColorInfo; public class GradientView extends View implements WallpaperColorInfo.OnChangeListener { private static final int DEFAULT_COLOR = Color.WHITE; - private static final float GRADIENT_ALPHA_MASK_LENGTH_DP = 300; + private static final int ALPHA_MASK_HEIGHT_DP = 500; + private static final int ALPHA_MASK_WIDTH_DP = 2; + private static final int ALPHA_COLORS = 0xBF; private static final boolean DEBUG = false; - private final Bitmap mFinalGradientMask; private final Bitmap mAlphaGradientMask; + private boolean mShowScrim = true; private int mColor1 = DEFAULT_COLOR; private int mColor2 = DEFAULT_COLOR; private int mWidth; private int mHeight; private final RectF mAlphaMaskRect = new RectF(); private final RectF mFinalMaskRect = new RectF(); - private final Paint mPaint = new Paint(); + private final Paint mPaintWithScrim = new Paint(); + private final Paint mPaintNoScrim = new Paint(); private float mProgress; - private final int mMaskHeight; + private final int mMaskHeight, mMaskWidth; private final Context mAppContext; private final Paint mDebugPaint = DEBUG ? new Paint() : null; private final Interpolator mAccelerator = new AccelerateInterpolator(); private final float mAlphaStart; private final WallpaperColorInfo mWallpaperColorInfo; + private final int mScrimColor; public GradientView(Context context, AttributeSet attrs) { super(context, attrs); this.mAppContext = context.getApplicationContext(); - this.mMaskHeight = Utilities.pxFromDp(GRADIENT_ALPHA_MASK_LENGTH_DP, + this.mMaskHeight = Utilities.pxFromDp(ALPHA_MASK_HEIGHT_DP, + mAppContext.getResources().getDisplayMetrics()); + this.mMaskWidth = Utilities.pxFromDp(ALPHA_MASK_WIDTH_DP, mAppContext.getResources().getDisplayMetrics()); Launcher launcher = Launcher.getLauncher(context); this.mAlphaStart = launcher.getDeviceProfile().isVerticalBarLayout() ? 0 : 100; + this.mScrimColor = Themes.getAttrColor(context, R.attr.allAppsScrimColor); this.mWallpaperColorInfo = WallpaperColorInfo.getInstance(launcher); updateColors(); - - int finalAlpha = 0xBF; - mFinalGradientMask = Utilities.convertToAlphaMask( - Utilities.createOnePixBitmap(), finalAlpha); - Bitmap alphaMaskFromResource = BitmapFactory.decodeResource(context.getResources(), - R.drawable.all_apps_alpha_mask); - mAlphaGradientMask = Utilities.convertToAlphaMask( - alphaMaskFromResource, finalAlpha); + mAlphaGradientMask = createDitheredAlphaMask(); } @Override @@ -101,8 +103,10 @@ public class GradientView extends View implements WallpaperColorInfo.OnChangeLis } private void updateColors() { - this.mColor1 = mWallpaperColorInfo.getMainColor(); - this.mColor2 = mWallpaperColorInfo.getSecondaryColor(); + this.mColor1 = ColorUtils.setAlphaComponent(mWallpaperColorInfo.getMainColor(), + ALPHA_COLORS); + this.mColor2 = ColorUtils.setAlphaComponent(mWallpaperColorInfo.getSecondaryColor(), + ALPHA_COLORS); if (mWidth + mHeight > 0) { createRadialShader(); } @@ -122,34 +126,53 @@ public class GradientView extends View implements WallpaperColorInfo.OnChangeLis private void createRadialShader() { final float gradientCenterY = 1.05f; float radius = Math.max(mHeight, mWidth) * gradientCenterY; - float posScreenBottom = (radius - mHeight) / radius; // center lives below screen - RadialGradient shader = new RadialGradient( + + RadialGradient shaderNoScrim = new RadialGradient( mWidth * 0.5f, mHeight * gradientCenterY, radius, new int[] {mColor1, mColor1, mColor2}, new float[] {0f, posScreenBottom, 1f}, Shader.TileMode.CLAMP); - mPaint.setShader(shader); + mPaintNoScrim.setShader(shaderNoScrim); + + int color1 = ColorUtils.compositeColors(mScrimColor,mColor1); + int color2 = ColorUtils.compositeColors(mScrimColor,mColor2); + RadialGradient shaderWithScrim = new RadialGradient( + mWidth * 0.5f, + mHeight * gradientCenterY, + radius, + new int[] { color1, color1, color2 }, + new float[] {0f, posScreenBottom, 1f}, + Shader.TileMode.CLAMP); + mPaintWithScrim.setShader(shaderWithScrim); } public void setProgress(float progress) { + setProgress(progress, true); + } + + public void setProgress(float progress, boolean showScrim) { this.mProgress = progress; + this.mShowScrim = showScrim; invalidate(); } @Override protected void onDraw(Canvas canvas) { + Paint paint = mShowScrim ? mPaintWithScrim : mPaintNoScrim; + float head = 0.29f; float linearProgress = head + (mProgress * (1f - head)); float startMaskY = (1f - linearProgress) * mHeight - mMaskHeight * linearProgress; float interpolatedAlpha = (255 - mAlphaStart) * mAccelerator.getInterpolation(mProgress); - mPaint.setAlpha((int) (mAlphaStart + interpolatedAlpha)); - mAlphaMaskRect.set(0, startMaskY, mWidth, startMaskY + mMaskHeight); - mFinalMaskRect.set(0, startMaskY + mMaskHeight, mWidth, mHeight); - canvas.drawBitmap(mAlphaGradientMask, null, mAlphaMaskRect, mPaint); - canvas.drawBitmap(mFinalGradientMask, null, mFinalMaskRect, mPaint); + paint.setAlpha((int) (mAlphaStart + interpolatedAlpha)); + float div = (float) Math.floor(startMaskY + mMaskHeight); + mAlphaMaskRect.set(0, startMaskY, mWidth, div); + mFinalMaskRect.set(0, div, mWidth, mHeight); + canvas.drawBitmap(mAlphaGradientMask, null, mAlphaMaskRect, paint); + canvas.drawRect(mFinalMaskRect, paint); if (DEBUG) { mDebugPaint.setColor(0xFF00FF00); @@ -157,4 +180,20 @@ public class GradientView extends View implements WallpaperColorInfo.OnChangeLis canvas.drawLine(0, startMaskY + mMaskHeight, mWidth, startMaskY + mMaskHeight, mDebugPaint); } } + + public Bitmap createDitheredAlphaMask() { + Bitmap dst = Bitmap.createBitmap(mMaskWidth, mMaskHeight, Bitmap.Config.ALPHA_8); + Canvas c = new Canvas(dst); + Paint paint = new Paint(Paint.DITHER_FLAG); + LinearGradient lg = new LinearGradient(0, 0, 0, mMaskHeight, + new int[]{ + 0x00FFFFFF, + ColorUtils.setAlphaComponent(Color.WHITE, (int) (0xFF * 0.95)), + 0xFFFFFFFF}, + new float[]{0f, 0.8f, 1f}, + Shader.TileMode.CLAMP); + paint.setShader(lg); + c.drawRect(0, 0, mMaskWidth, mMaskHeight, paint); + return dst; + } } \ No newline at end of file diff --git a/src/com/android/launcher3/graphics/ScrimView.java b/src/com/android/launcher3/graphics/ScrimView.java deleted file mode 100644 index 6d1f30a410..0000000000 --- a/src/com/android/launcher3/graphics/ScrimView.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.launcher3.graphics; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.RectF; -import android.support.v4.graphics.ColorUtils; -import android.util.AttributeSet; -import android.view.View; -import android.view.animation.AccelerateInterpolator; -import android.view.animation.Interpolator; - -import com.android.launcher3.Launcher; -import com.android.launcher3.R; -import com.android.launcher3.Utilities; -import com.android.launcher3.util.Themes; - -public class ScrimView extends View { - - private static final boolean DEBUG = false; - - private static final int MASK_HEIGHT_DP = 300; - private static final float MASK_START_LENGTH_FACTOR = 1f; - private static final boolean APPLY_ALPHA = true; - - private final Bitmap mFinalScrimMask; - private final Bitmap mAlphaScrimMask; - - private final int mMaskHeight; - private int mVisibleHeight; - private final int mHeadStart; - - private final RectF mAlphaMaskRect = new RectF(); - private final RectF mFinalMaskRect = new RectF(); - private final Paint mPaint = new Paint(); - private float mProgress; - private final Interpolator mAccelerator = new AccelerateInterpolator(); - private final Paint mDebugPaint = DEBUG ? new Paint() : null; - private final int mAlphaStart; - - public ScrimView(Context context, AttributeSet attrs) { - super(context, attrs); - mMaskHeight = Utilities.pxFromDp(MASK_HEIGHT_DP, getResources().getDisplayMetrics()); - mHeadStart = (int) (mMaskHeight * MASK_START_LENGTH_FACTOR); - mAlphaStart = Launcher.getLauncher(context) - .getDeviceProfile().isVerticalBarLayout() ? 0 : 55; - - int scrimColor = Themes.getAttrColor(context, R.attr.allAppsScrimColor); - int scrimAlpha = Color.alpha(scrimColor); - mPaint.setColor(scrimColor); - mFinalScrimMask = Utilities.convertToAlphaMask( - Utilities.createOnePixBitmap(), scrimAlpha); - Bitmap alphaMaskFromResource = BitmapFactory.decodeResource(getResources(), - R.drawable.all_apps_alpha_mask); - mAlphaScrimMask = Utilities.convertToAlphaMask(alphaMaskFromResource, scrimAlpha); - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - int width = MeasureSpec.getSize(widthMeasureSpec); - mVisibleHeight = MeasureSpec.getSize(heightMeasureSpec); - setMeasuredDimension(width, mVisibleHeight * 2); - setProgress(mProgress); - } - - public void setProgress(float progress) { - mProgress = progress; - float initialY = mVisibleHeight - mHeadStart; - float fullTranslationY = mVisibleHeight; - float linTranslationY = initialY - progress * fullTranslationY; - setTranslationY(linTranslationY); - - if (APPLY_ALPHA) { - int alpha = mAlphaStart + (int) ((255f - mAlphaStart) - * mAccelerator.getInterpolation(progress)); - mPaint.setAlpha(alpha); - invalidate(); - } - } - - @Override - protected void onDraw(Canvas canvas) { - mAlphaMaskRect.set(0, 0, getWidth(), mMaskHeight); - mFinalMaskRect.set(0, mMaskHeight, getWidth(), getHeight()); - canvas.drawBitmap(mAlphaScrimMask, null, mAlphaMaskRect, mPaint); - canvas.drawBitmap(mFinalScrimMask, null, mFinalMaskRect, mPaint); - - if (DEBUG) { - mDebugPaint.setColor(0xFF0000FF); - canvas.drawLine(0, mAlphaMaskRect.top, getWidth(), mAlphaMaskRect.top, mDebugPaint); - canvas.drawLine(0, mAlphaMaskRect.bottom, getWidth(), mAlphaMaskRect.bottom, mDebugPaint); - } - } - -} diff --git a/src/com/android/launcher3/widget/WidgetsBottomSheet.java b/src/com/android/launcher3/widget/WidgetsBottomSheet.java index a754375ae0..b2fb09157a 100644 --- a/src/com/android/launcher3/widget/WidgetsBottomSheet.java +++ b/src/com/android/launcher3/widget/WidgetsBottomSheet.java @@ -276,7 +276,9 @@ public class WidgetsBottomSheet extends AbstractFloatingView implements Insettab public void setTranslationY(float translationY) { super.setTranslationY(translationY); if (mGradientBackground == null) return; - mGradientBackground.setProgress((mTranslationYClosed - translationY) / mTranslationYRange); + float p = (mTranslationYClosed - translationY) / mTranslationYRange; + boolean showScrim = p <= 0; + mGradientBackground.setProgress(p, showScrim); } @Override