From 3e596d3aa451f0c6ead71c4906b42bf11adfa0ad Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 4 May 2023 13:35:08 -0700 Subject: [PATCH] Updating the top scrim to also use dynamicaly generated bitmap Bug: 237818532 Test: Verified on device Flag: N/A Change-Id: I22ceb470677ab9df53e40fb78f0292b7fd5e2241 --- .../android/quickstep/RecentsActivity.java | 3 +- .../util/StaggeredWorkspaceAnim.java | 4 +- .../quickstep/util/WorkspaceRevealAnim.java | 3 +- res/drawable-hdpi/workspace_bg.9.png | Bin 842 -> 0 bytes res/drawable-mdpi/workspace_bg.9.png | Bin 690 -> 0 bytes res/drawable-xhdpi/workspace_bg.9.png | Bin 922 -> 0 bytes res/drawable-xxhdpi/workspace_bg.9.png | Bin 1015 -> 0 bytes res/drawable-xxxhdpi/workspace_bg.9.png | Bin 1072 -> 0 bytes res/values/attrs.xml | 1 - res/values/styles.xml | 3 - .../WorkspaceStateTransitionAnimation.java | 4 +- .../launcher3/graphics/SysUiScrim.java | 179 +++++++----------- .../AbstractStateChangeTouchController.java | 4 +- 13 files changed, 79 insertions(+), 122 deletions(-) delete mode 100755 res/drawable-hdpi/workspace_bg.9.png delete mode 100755 res/drawable-mdpi/workspace_bg.9.png delete mode 100755 res/drawable-xhdpi/workspace_bg.9.png delete mode 100755 res/drawable-xxhdpi/workspace_bg.9.png delete mode 100755 res/drawable-xxxhdpi/workspace_bg.9.png diff --git a/quickstep/src/com/android/quickstep/RecentsActivity.java b/quickstep/src/com/android/quickstep/RecentsActivity.java index ec8a59190b..bd0f4ec470 100644 --- a/quickstep/src/com/android/quickstep/RecentsActivity.java +++ b/quickstep/src/com/android/quickstep/RecentsActivity.java @@ -22,7 +22,6 @@ import static android.view.RemoteAnimationTarget.MODE_OPENING; import static com.android.launcher3.QuickstepTransitionManager.RECENTS_LAUNCH_DURATION; import static com.android.launcher3.QuickstepTransitionManager.STATUS_BAR_TRANSITION_DURATION; import static com.android.launcher3.QuickstepTransitionManager.STATUS_BAR_TRANSITION_PRE_DELAY; -import static com.android.launcher3.graphics.SysUiScrim.SYSUI_PROGRESS; import static com.android.launcher3.testing.shared.TestProtocol.OVERVIEW_STATE_ORDINAL; import static com.android.quickstep.OverviewComponentObserver.startHomeIntentSafely; import static com.android.quickstep.TaskUtils.taskIsATargetWithMode; @@ -130,7 +129,7 @@ public final class RecentsActivity extends StatefulActivity { mScrimView = findViewById(R.id.scrim_view); mFallbackRecentsView = findViewById(R.id.overview_panel); mActionsView = findViewById(R.id.overview_actions_view); - SYSUI_PROGRESS.set(getRootView().getSysUiScrim(), 0f); + getRootView().getSysUiScrim().getSysUIProgress().updateValue(0); SplitSelectStateController controller = new SplitSelectStateController(this, mHandler, getStateManager(), diff --git a/quickstep/src/com/android/quickstep/util/StaggeredWorkspaceAnim.java b/quickstep/src/com/android/quickstep/util/StaggeredWorkspaceAnim.java index 9099012214..6b3199f5b4 100644 --- a/quickstep/src/com/android/quickstep/util/StaggeredWorkspaceAnim.java +++ b/quickstep/src/com/android/quickstep/util/StaggeredWorkspaceAnim.java @@ -177,8 +177,8 @@ public class StaggeredWorkspaceAnim { addDepthAnimationForState(launcher, NORMAL, duration); - mAnimators.play(launcher.getRootView().getSysUiScrim().createSysuiMultiplierAnim(0f, 1f) - .setDuration(duration)); + mAnimators.play(launcher.getRootView().getSysUiScrim().getSysUIMultiplier() + .animateToValue(0f, 1f).setDuration(duration)); } private void addAnimationForPage(CellLayout page, int totalRows, long duration) { diff --git a/quickstep/src/com/android/quickstep/util/WorkspaceRevealAnim.java b/quickstep/src/com/android/quickstep/util/WorkspaceRevealAnim.java index ac8862f27d..0a97793b28 100644 --- a/quickstep/src/com/android/quickstep/util/WorkspaceRevealAnim.java +++ b/quickstep/src/com/android/quickstep/util/WorkspaceRevealAnim.java @@ -92,7 +92,8 @@ public class WorkspaceRevealAnim { } // Add sysui scrim animation. - mAnimators.play(launcher.getRootView().getSysUiScrim().createSysuiMultiplierAnim(0f, 1f)); + mAnimators.play(launcher.getRootView().getSysUiScrim() + .getSysUIMultiplier().animateToValue(0f, 1f)); mAnimators.setDuration(DURATION_MS); mAnimators.setInterpolator(Interpolators.DECELERATED_EASE); diff --git a/res/drawable-hdpi/workspace_bg.9.png b/res/drawable-hdpi/workspace_bg.9.png deleted file mode 100755 index 1d82fd41f6798819b705c7e25f6651174e49d4d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 842 zcmV-Q1GW5#P)1^@s6A&FBz0009KNklOH2tI z{C62xtq=x&cfh+8euJ>eZGZ!w7XGHy1A_i@@y#=-p|AXhhP2M=(-4VLJ^e}R=jafu~*o}(`|L@)5v7a7DCLz+?-YJitws9dcF z2QM%6$=6xuUg5M04AHAGDk*0);%gyI%JVhitjDBM=M4Z}_fVNS7ixHeS2)Ky`{vU9 zxHqLDc zX+oT;iRKumXrlMS3R0dtK>Q$vQtBiC_>h~f0f3J}pR_p9Hg;?1la(i!+I+lpjd@2q z_X*>8?OZp;q!7mqh(7fdDdlQJ{EYjw0bpC`QxsFy+8#HZw2keDrfFH3#tdRqSyt-0 z*1j^8=SAN+M zCPq8UTD`iS_Z1<;u|zbCA*DP95kKc~#sT1q7-d-=ZH!q6zjalu(prBRW2!ZERDamt z9>&=nt0yLo+%`Y|m9L~}dPLJSU&qMv{BY;oH@>nAQp&>+@ms#rT_}p;P;2dXJkB9n z>+fT<+wFsUz1|Puenz6Rsr*>5q*@k|cX4N%EIJ_TRBrk|clgJO2lZ@9yA$J&VOPc5?Kdga2pVJ=#C`2R3vN UA*-DWS^xk507*qoM6N<$f(Nac761SM diff --git a/res/drawable-mdpi/workspace_bg.9.png b/res/drawable-mdpi/workspace_bg.9.png deleted file mode 100755 index 116ce443f2386729ba7d36099ab57131996f959c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 690 zcmV;j0!{siP)0007cNkl{`BWp)a!4%v(s?%-M-rp$JUc*H^wY?A;-Nw8G_9HYz@uGMkMY?g>82sTN? zla$#g08ZIV5NzN8r%AA$YjuV)>m=e?oALd%0`VLP)(C*}HWP-cxl$JlgkHExX?4*G zJa47c`Vt9N2*k^DX*&nFLa>|zbXb8KE>jhCwO?4ywLg%3FdRe0>M0vc$Wlol~VTz+LTiFt<8z%$V7Jb zugc4DtsfA~=2{o+IKDrt3-O_WAP8Ck;E@$XQC3P>B3rXeWZBNtG$a(TL1t607*qoM6N<$f+mkb_W%F@ diff --git a/res/drawable-xhdpi/workspace_bg.9.png b/res/drawable-xhdpi/workspace_bg.9.png deleted file mode 100755 index b1b3b850cc6b8a402d83f175ffc7c1a536c47b6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 922 zcmV;L17-Y)P)Mh>mEYi4Ol19YhmNbOZtsdJW~kaJHwsH@h)} zqxXI&GZ}eTdsZxg&Y%4An|V$1!Bdg{Y>J|2YHImgma?0aH8f<^@ns%hMpRByM^gwBC zw~i(u2MiED_3e~FDP0QypM?(E#+VItaL!v=>z-d#%$vH<{W`KZ6RJ=H-)I>kNivz| z()U(ID@}RdTIC{bLRb$`*Fh&6I#z5$L1kQP?wMO4gmL*Cly9&gNh~=Wp z-LY02&-9C;SOx7QY4q}Z(H$d%?2m}URX{1-4*)(7^Nhe4n>NOL5#|{o%d&lyQcGck z5rhzHq?BL!^_J0UwD#!_`y2fTW3hH-X73G)i(k286~uA8S5XvSyGR9Tn(k?>{l-Pc zgHpN&0DK!J9f5PcyVm+U|B%WMLhL4`{65Sx2JLox*IuvpgMTh#(OJ{krMt2FqdPVp z>!zo7Uca>TlRH*HqtV!DI2``$BI6Oq@s34N{1R3*2`HsI0Kl(dJCi^NvAvY?x3HZt z=yW>Ub-Uf){n(RXc6N5#g@uJb+?@$A7tL)mAI<;i?o5a%inflT=r4EY|G-vJ6#X5t w{bwvE`X^-DQdr)@rciW?!~I7rci?{b7ui$4AxXmQq5uE@07*qoM6N<$f&`vRUePB3B=rsa?=pE5J{8RJ}qIYx%MCdh?1H;*#^3LqW5RTsa zq3mR2FUiPz7wM$)C;#$}cc157`$NVe_gWuC(b(AhyA;uzq}4Z%0LS!3Ve~DbqTn|KUnu z^*uhp70Q@2!vdw0Pc5_VWfmyDghqwsV|WL4~_sw^kQN4Lq2F27YVB$ z_Hiy$#yqklE>Oli>L&xF7@seVdCbKrfspegz~e3fA?FH!Cq^Nm=ZH){=~JIAtbS@S z7-DBBtDg38&Q!)cGa6?oW1jUvPnX6#w*&||O#(dc*Bbz*^i-ksYL_htis&iY>KBS* zVK9VFR@T1gDg=>Ye3CTgC7(I~PRNu1c-ikdj1vXGv_CdLozfF}TEF5_C-iuo=~qX9 zA$FXy>a~RmLr4)iR$BY|!jEYf7#|~zdBgV^fMa~LFy>8{tpq}j5&&=c)C1HBIkE@v zb}=b|QhJ2e`W;sx2$rzJRi@r`6%uxs%G7&{ks>rHt$pA334mjKs4!;6S192SVax}9 z5n>|P)k_* z>B6tEjQxeRZ9fU1j`4myV?J|zf*^#f1c1+rVkmn;7O8-EEBG25DkP_*IHQ|E1`)o?HHqqNeP4y0sz|At^!Ia)>?yK z$N-Enq?9s#Ap@jonn)?FYg!F_g2!T3WUlrw8gV?)&GXzft%hcj)H+!<>vk{ry?gwXER+HZ?v6+sBu4FJCL>#YLD*se;c@BNoA z0M7X?LWm#y604xuZ0_9YbbfT-ooZ;UXzkQq*Z!&a%*J5V`1p=%=H`AbE)YhoR@XfxI*!V{{Rq29Y1-1Sf~I1002ovPDHLkV1hj9=(Yd= diff --git a/res/drawable-xxxhdpi/workspace_bg.9.png b/res/drawable-xxxhdpi/workspace_bg.9.png deleted file mode 100755 index 328154847e50d073da5823457a47228c8ab94dbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1072 zcmV-01kd}4P)KAn-;k7DBlCG}FcNvq{8t<+nTw}buz6EkFuh!^pD9hFW zze*$CxO!z86z5l3#GA^MSs=s}7U1U4fe@D)fLmJQG6Qfcl}!Vamm2SGqj{!~GkJ;j z?)K2=Y`9o^cL#NSkwv_-H7>M>cTw3i2yuZ0xI3&wkqL3W0l0_enSt{Rz`e8*LC)m4 z+PnK`xO233_qWE`+Pep+Yzm6=vn=9+G*297TEvH_Yzi6YXBfnXL)UQ#ak>F`By=Fe zX&T_sIiVs?)lK&pjc|(g?(r5-Or31KeIj%{1Du~^5uc=a;yBSFK1F3y$T&a2AU;iF z#~{S<24E?jX#}|t$7z6NVIC=u)y_RL7f2?Lao#;!ekTsa)X~=4=T-;8jYs6v7AdbB>;`>zA4*G=H za}?kM3M2w4)J z?5e%5Q&~Ic<9wG<#7{#yQ3xRx1HflxSsYTzs&j4yr4xZts^41M2 zDRh9vy}jG77#sVl+@MXQX}Voe6knI$=>&|iZN2y3lpAycA;dNS@GYI`oS~H3+FJV^ z{g~Q8p66R>t-q(knlq}^>Xwa083?d{6bgkKZFos69D*??#@CX&-0D7*1yqpnICGk+D7$y{r7O% z3x|P$fenX;hyN&_^M7G58Qfqf8Tzw)=mH{1lJ%1$`Kx@+T7mVFB>9`#S<5il)<4wS qx`WA!v5LlC2T}f)I6Z^%gMR_Mp?*#l(*AA$0000 - diff --git a/res/values/styles.xml b/res/values/styles.xml index 876c3a868e..2b37db8ec2 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -50,7 +50,6 @@ #B0000000 #40000000 #89000000 - @drawable/workspace_bg @style/WidgetContainerTheme @color/folder_pagination_color_light @color/folder_preview_light @@ -92,7 +91,6 @@ @android:color/transparent @android:color/transparent true - @null @color/workspace_accent_color_dark @color/drop_target_hover_text_color_dark @color/drop_target_hover_button_color_dark @@ -143,7 +141,6 @@ @android:color/transparent @android:color/transparent true - @null @color/workspace_accent_color_dark @color/drop_target_hover_text_color_dark @color/drop_target_hover_button_color_dark diff --git a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java index c04cdfdb0f..e4f34ae0ab 100644 --- a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java +++ b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java @@ -35,7 +35,6 @@ import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.LauncherState.WORKSPACE_PAGE_INDICATOR; import static com.android.launcher3.anim.PropertySetter.NO_ANIM_PROPERTY_SETTER; import static com.android.launcher3.graphics.Scrim.SCRIM_PROGRESS; -import static com.android.launcher3.graphics.SysUiScrim.SYSUI_PROGRESS; import static com.android.launcher3.states.StateAnimationConfig.ANIM_HOTSEAT_FADE; import static com.android.launcher3.states.StateAnimationConfig.ANIM_HOTSEAT_SCALE; import static com.android.launcher3.states.StateAnimationConfig.ANIM_HOTSEAT_TRANSLATE; @@ -54,6 +53,7 @@ import android.view.animation.Interpolator; import com.android.launcher3.LauncherState.PageAlphaProvider; import com.android.launcher3.LauncherState.PageTranslationProvider; import com.android.launcher3.LauncherState.ScaleAndTranslation; +import com.android.launcher3.anim.AnimatedFloat; import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.anim.PropertySetter; import com.android.launcher3.anim.SpringAnimationBuilder; @@ -196,7 +196,7 @@ public class WorkspaceStateTransitionAnimation { state.getWorkspaceBackgroundAlpha(mLauncher), LINEAR); SysUiScrim sysUiScrim = mLauncher.getRootView().getSysUiScrim(); - propertySetter.setFloat(sysUiScrim, SYSUI_PROGRESS, + propertySetter.setFloat(sysUiScrim.getSysUIProgress(), AnimatedFloat.VALUE, state.hasFlag(FLAG_HAS_SYS_UI_SCRIM) ? 1 : 0, LINEAR); propertySetter.setViewBackgroundColor(mLauncher.getScrimView(), diff --git a/src/com/android/launcher3/graphics/SysUiScrim.java b/src/com/android/launcher3/graphics/SysUiScrim.java index 21ebc989fd..a572a607a6 100644 --- a/src/com/android/launcher3/graphics/SysUiScrim.java +++ b/src/com/android/launcher3/graphics/SysUiScrim.java @@ -13,29 +13,30 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package com.android.launcher3.graphics; +import static android.graphics.Paint.DITHER_FLAG; +import static android.graphics.Paint.FILTER_BITMAP_FLAG; + import static com.android.launcher3.config.FeatureFlags.KEYGUARD_ANIMATION; -import static com.android.launcher3.icons.GraphicsUtils.setColorAlphaBound; import android.animation.ObjectAnimator; import android.graphics.Bitmap; import android.graphics.Canvas; -import android.graphics.Color; import android.graphics.LinearGradient; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Shader; -import android.graphics.drawable.Drawable; import android.util.DisplayMetrics; -import android.util.FloatProperty; import android.view.View; +import androidx.annotation.ColorInt; + import com.android.launcher3.BaseDraggingActivity; import com.android.launcher3.DeviceProfile; import com.android.launcher3.R; +import com.android.launcher3.anim.AnimatedFloat; import com.android.launcher3.testing.shared.ResourceUtils; import com.android.launcher3.util.ScreenOnTracker; import com.android.launcher3.util.ScreenOnTracker.ScreenOnListener; @@ -46,33 +47,6 @@ import com.android.launcher3.util.Themes; */ public class SysUiScrim implements View.OnAttachStateChangeListener { - public static final FloatProperty SYSUI_PROGRESS = - new FloatProperty("sysUiProgress") { - @Override - public Float get(SysUiScrim scrim) { - return scrim.mSysUiProgress; - } - - @Override - public void setValue(SysUiScrim scrim, float value) { - scrim.setSysUiProgress(value); - } - }; - - private static final FloatProperty SYSUI_ANIM_MULTIPLIER = - new FloatProperty("sysUiAnimMultiplier") { - @Override - public Float get(SysUiScrim scrim) { - return scrim.mSysUiAnimMultiplier; - } - - @Override - public void setValue(SysUiScrim scrim, float value) { - scrim.mSysUiAnimMultiplier = value; - scrim.reapplySysUiAlpha(); - } - }; - /** * Receiver used to get a signal that the user unlocked their device. */ @@ -92,44 +66,52 @@ public class SysUiScrim implements View.OnAttachStateChangeListener { } }; - private static final int MAX_HOTSEAT_SCRIM_ALPHA = 100; - private static final int ALPHA_MASK_HEIGHT_DP = 500; - private static final int ALPHA_MASK_BITMAP_DP = 200; - private static final int ALPHA_MASK_WIDTH_DP = 2; + private static final int MAX_SYSUI_SCRIM_ALPHA = 255; + private static final int ALPHA_MASK_BITMAP_WIDTH_DP = 2; + + private static final int BOTTOM_MASK_HEIGHT_DP = 200; + private static final int TOP_MASK_HEIGHT_DP = 100; private boolean mDrawTopScrim, mDrawBottomScrim; - private final RectF mFinalMaskRect = new RectF(); - private final Paint mBottomMaskPaint = new Paint(Paint.FILTER_BITMAP_FLAG); - private final Bitmap mBottomMask; - private final int mMaskHeight; + private final RectF mTopMaskRect = new RectF(); + private final Paint mTopMaskPaint = new Paint(FILTER_BITMAP_FLAG | DITHER_FLAG); + private final Bitmap mTopMaskBitmap; + private final int mTopMaskHeight; + + private final RectF mBottomMaskRect = new RectF(); + private final Paint mBottomMaskPaint = new Paint(FILTER_BITMAP_FLAG | DITHER_FLAG); + private final Bitmap mBottomMaskBitmap; + private final int mBottomMaskHeight; private final View mRoot; private final BaseDraggingActivity mActivity; - private final Drawable mTopScrim; - - private float mSysUiProgress = 1; - private boolean mHideSysUiScrim; + private final boolean mHideSysUiScrim; private boolean mAnimateScrimOnNextDraw = false; - private float mSysUiAnimMultiplier = 1; + private final AnimatedFloat mSysUiAnimMultiplier = new AnimatedFloat(this::reapplySysUiAlpha); + private final AnimatedFloat mSysUiProgress = new AnimatedFloat(this::reapplySysUiAlpha); public SysUiScrim(View view) { mRoot = view; mActivity = BaseDraggingActivity.fromContext(view.getContext()); - mMaskHeight = ResourceUtils.pxFromDp(ALPHA_MASK_BITMAP_DP, - view.getResources().getDisplayMetrics()); - mTopScrim = Themes.getAttrDrawable(view.getContext(), R.attr.workspaceStatusBarScrim); - if (mTopScrim != null) { - mTopScrim.setDither(true); - mBottomMask = createDitheredAlphaMask(); - mHideSysUiScrim = false; - } else { - mBottomMask = null; - mHideSysUiScrim = true; - } + DisplayMetrics dm = mActivity.getResources().getDisplayMetrics(); - view.addOnAttachStateChangeListener(this); + mTopMaskHeight = ResourceUtils.pxFromDp(TOP_MASK_HEIGHT_DP, dm); + mBottomMaskHeight = ResourceUtils.pxFromDp(BOTTOM_MASK_HEIGHT_DP, dm); + mHideSysUiScrim = Themes.getAttrBoolean(view.getContext(), R.attr.isWorkspaceDarkText); + + mTopMaskBitmap = mHideSysUiScrim ? null : createDitheredAlphaMask(mTopMaskHeight, + new int[]{0x50FFFFFF, 0x0AFFFFFF, 0x00FFFFFF}, + new float[]{0f, 0.7f, 1f}); + mTopMaskPaint.setColor(0xFF222222); + mBottomMaskBitmap = mHideSysUiScrim ? null : createDitheredAlphaMask(mBottomMaskHeight, + new int[]{0x00FFFFFF, 0x2FFFFFFF}, + new float[]{0f, 1f}); + + if (!KEYGUARD_ANIMATION.get() && !mHideSysUiScrim) { + view.addOnAttachStateChangeListener(this); + } } /** @@ -137,16 +119,16 @@ public class SysUiScrim implements View.OnAttachStateChangeListener { */ public void draw(Canvas canvas) { if (!mHideSysUiScrim) { - if (mSysUiProgress <= 0) { + if (mSysUiProgress.value <= 0) { mAnimateScrimOnNextDraw = false; return; } if (mAnimateScrimOnNextDraw) { - mSysUiAnimMultiplier = 0; + mSysUiAnimMultiplier.value = 0; reapplySysUiAlphaNoInvalidate(); - ObjectAnimator oa = createSysuiMultiplierAnim(1); + ObjectAnimator oa = mSysUiAnimMultiplier.animateToValue(1); oa.setDuration(600); oa.setStartDelay(mActivity.getWindow().getTransitionBackgroundFadeDuration()); oa.start(); @@ -154,21 +136,26 @@ public class SysUiScrim implements View.OnAttachStateChangeListener { } if (mDrawTopScrim) { - mTopScrim.draw(canvas); + canvas.drawBitmap(mTopMaskBitmap, null, mTopMaskRect, mTopMaskPaint); } if (mDrawBottomScrim) { - canvas.drawBitmap(mBottomMask, null, mFinalMaskRect, mBottomMaskPaint); + canvas.drawBitmap(mBottomMaskBitmap, null, mBottomMaskRect, mBottomMaskPaint); } } } /** - * @return an ObjectAnimator that controls the fade in/out of the sys ui scrim. + * Returns the sysui multiplier property for controlling fade in/out of the scrim */ - public ObjectAnimator createSysuiMultiplierAnim(float... values) { - ObjectAnimator anim = ObjectAnimator.ofFloat(this, SYSUI_ANIM_MULTIPLIER, values); - anim.setAutoCancel(true); - return anim; + public AnimatedFloat getSysUIMultiplier() { + return mSysUiAnimMultiplier; + } + + /** + * Returns the sysui progress property for controlling fade in/out of the scrim + */ + public AnimatedFloat getSysUIProgress() { + return mSysUiProgress; } /** @@ -180,44 +167,26 @@ public class SysUiScrim implements View.OnAttachStateChangeListener { */ public void onInsetsChanged(Rect insets) { DeviceProfile dp = mActivity.getDeviceProfile(); - mDrawTopScrim = mTopScrim != null && insets.top > 0; - mDrawBottomScrim = mBottomMask != null - && !dp.isVerticalBarLayout() - && !dp.isGestureMode - && !dp.isTaskbarPresent; + mDrawTopScrim = insets.top > 0; + mDrawBottomScrim = !dp.isVerticalBarLayout() && !dp.isGestureMode && !dp.isTaskbarPresent; } @Override public void onViewAttachedToWindow(View view) { - if (!KEYGUARD_ANIMATION.get() && mTopScrim != null) { - ScreenOnTracker.INSTANCE.get(mActivity).addListener(mScreenOnListener); - } + ScreenOnTracker.INSTANCE.get(mActivity).addListener(mScreenOnListener); } @Override public void onViewDetachedFromWindow(View view) { - if (!KEYGUARD_ANIMATION.get() && mTopScrim != null) { - ScreenOnTracker.INSTANCE.get(mActivity).removeListener(mScreenOnListener); - } + ScreenOnTracker.INSTANCE.get(mActivity).removeListener(mScreenOnListener); } /** * Set the width and height of the view being scrimmed - * @param w - * @param h */ public void setSize(int w, int h) { - if (mTopScrim != null) { - mTopScrim.setBounds(0, 0, w, h); - mFinalMaskRect.set(0, h - mMaskHeight, w, h); - } - } - - private void setSysUiProgress(float progress) { - if (progress != mSysUiProgress) { - mSysUiProgress = progress; - reapplySysUiAlpha(); - } + mTopMaskRect.set(0, 0, w, mTopMaskHeight); + mBottomMaskRect.set(0, h - mBottomMaskHeight, w, h); } private void reapplySysUiAlpha() { @@ -228,29 +197,21 @@ public class SysUiScrim implements View.OnAttachStateChangeListener { } private void reapplySysUiAlphaNoInvalidate() { - float factor = mSysUiProgress * mSysUiAnimMultiplier; - mBottomMaskPaint.setAlpha(Math.round(MAX_HOTSEAT_SCRIM_ALPHA * factor)); - if (mTopScrim != null) { - mTopScrim.setAlpha(Math.round(255 * factor)); - } + float factor = mSysUiProgress.value * mSysUiAnimMultiplier.value; + mBottomMaskPaint.setAlpha(Math.round(MAX_SYSUI_SCRIM_ALPHA * factor)); + mTopMaskPaint.setAlpha(Math.round(MAX_SYSUI_SCRIM_ALPHA * factor)); } - private Bitmap createDitheredAlphaMask() { + private Bitmap createDitheredAlphaMask(int height, @ColorInt int[] colors, float[] positions) { DisplayMetrics dm = mActivity.getResources().getDisplayMetrics(); - int width = ResourceUtils.pxFromDp(ALPHA_MASK_WIDTH_DP, dm); - int gradientHeight = ResourceUtils.pxFromDp(ALPHA_MASK_HEIGHT_DP, dm); - Bitmap dst = Bitmap.createBitmap(width, mMaskHeight, Bitmap.Config.ALPHA_8); + int width = ResourceUtils.pxFromDp(ALPHA_MASK_BITMAP_WIDTH_DP, dm); + Bitmap dst = Bitmap.createBitmap(width, height, Bitmap.Config.ALPHA_8); Canvas c = new Canvas(dst); - Paint paint = new Paint(Paint.DITHER_FLAG); - LinearGradient lg = new LinearGradient(0, 0, 0, gradientHeight, - new int[]{ - 0x00FFFFFF, - setColorAlphaBound(Color.WHITE, (int) (0xFF * 0.95)), - 0xFFFFFFFF}, - new float[]{0f, 0.8f, 1f}, - Shader.TileMode.CLAMP); + Paint paint = new Paint(DITHER_FLAG); + LinearGradient lg = new LinearGradient(0, 0, 0, height, + colors, positions, Shader.TileMode.CLAMP); paint.setShader(lg); - c.drawRect(0, 0, width, gradientHeight, paint); + c.drawPaint(paint); return dst; } } diff --git a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java index 8bc1c3718c..cec4574fd8 100644 --- a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java +++ b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java @@ -384,8 +384,8 @@ public abstract class AbstractStateChangeTouchController } else { logReachedState(targetState); } - mLauncher.getRootView().getSysUiScrim().createSysuiMultiplierAnim( - 1f).setDuration(0).start(); + mLauncher.getRootView().getSysUiScrim().getSysUIMultiplier().animateToValue(1f) + .setDuration(0).start(); } private void logReachedState(LauncherState targetState) {