• ScrimState.java


      1 /*
      2  * Copyright (C) 2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License
     15  */
     16 
     17 package com.android.systemui.statusbar.phone;
     18 
     19 import android.graphics.Color;
     20 import android.os.Trace;
     21 import android.util.MathUtils;
     22 
     23 import com.android.keyguard.KeyguardUpdateMonitor;
     24 import com.android.systemui.statusbar.ScrimView;
     25 import com.android.systemui.statusbar.stack.StackStateAnimator;
     26 
     27 /**
     28  * Possible states of the ScrimController state machine.
     29  */
     30 public enum ScrimState {
     31 
     32     /**
     33      * Initial state.
     34      */
     35     UNINITIALIZED(-1),
     36 
     37     /**
     38      * On the lock screen.
     39      */
     40     KEYGUARD(0) {
     41 
     42         @Override
     43         public void prepare(ScrimState previousState) {
     44             mBlankScreen = false;
     45             if (previousState == ScrimState.AOD) {
     46                 mAnimationDuration = StackStateAnimator.ANIMATION_DURATION_WAKEUP;
     47                 if (mDisplayRequiresBlanking) {
     48                     // DisplayPowerManager will blank the screen, we'll just
     49                     // set our scrim to black in this frame to avoid flickering and
     50                     // fade it out afterwards.
     51                     mBlankScreen = true;
     52                 }
     53             } else {
     54                 mAnimationDuration = ScrimController.ANIMATION_DURATION;
     55             }
     56             mCurrentBehindAlpha = mScrimBehindAlphaKeyguard;
     57             mCurrentInFrontAlpha = 0;
     58         }
     59 
     60         @Override
     61         public float getBehindAlpha(float busynessFactor) {
     62             return MathUtils.map(0 /* start */, 1 /* stop */,
     63                    mScrimBehindAlphaKeyguard, ScrimController.GRADIENT_SCRIM_ALPHA_BUSY,
     64                    busynessFactor);
     65         }
     66     },
     67 
     68     /**
     69      * Showing password challenge on the keyguard.
     70      */
     71     BOUNCER(1) {
     72         @Override
     73         public void prepare(ScrimState previousState) {
     74             mCurrentBehindAlpha = ScrimController.GRADIENT_SCRIM_ALPHA_BUSY;
     75             mCurrentInFrontAlpha = 0f;
     76         }
     77     },
     78 
     79     /**
     80      * Showing password challenge on top of a FLAG_SHOW_WHEN_LOCKED activity.
     81      */
     82     BOUNCER_SCRIMMED(2) {
     83         @Override
     84         public void prepare(ScrimState previousState) {
     85             mCurrentBehindAlpha = 0;
     86             mCurrentInFrontAlpha = ScrimController.GRADIENT_SCRIM_ALPHA_BUSY;
     87         }
     88     },
     89 
     90     /**
     91      * Changing screen brightness from quick settings.
     92      */
     93     BRIGHTNESS_MIRROR(3) {
     94         @Override
     95         public void prepare(ScrimState previousState) {
     96             mCurrentBehindAlpha = 0;
     97             mCurrentInFrontAlpha = 0;
     98         }
     99     },
    100 
    101     /**
    102      * Always on display or screen off.
    103      */
    104     AOD(4) {
    105         @Override
    106         public void prepare(ScrimState previousState) {
    107             final boolean alwaysOnEnabled = mDozeParameters.getAlwaysOn();
    108             mBlankScreen = mDisplayRequiresBlanking;
    109             mCurrentBehindAlpha = mWallpaperSupportsAmbientMode
    110                     && !mKeyguardUpdateMonitor.hasLockscreenWallpaper() ? 0f : 1f;
    111             mCurrentInFrontAlpha = alwaysOnEnabled ? mAodFrontScrimAlpha : 1f;
    112             mCurrentInFrontTint = Color.BLACK;
    113             mCurrentBehindTint = Color.BLACK;
    114             mAnimationDuration = ScrimController.ANIMATION_DURATION_LONG;
    115             // DisplayPowerManager may blank the screen for us,
    116             // in this case we just need to set our state.
    117             mAnimateChange = mDozeParameters.shouldControlScreenOff();
    118         }
    119 
    120         @Override
    121         public boolean isLowPowerState() {
    122             return true;
    123         }
    124     },
    125 
    126     /**
    127      * When phone wakes up because you received a notification.
    128      */
    129     PULSING(5) {
    130         @Override
    131         public void prepare(ScrimState previousState) {
    132             mCurrentInFrontAlpha = 0;
    133             mCurrentInFrontTint = Color.BLACK;
    134             mCurrentBehindAlpha = mWallpaperSupportsAmbientMode
    135                     && !mKeyguardUpdateMonitor.hasLockscreenWallpaper() ? 0f : 1f;
    136             mCurrentBehindTint = Color.BLACK;
    137             mBlankScreen = mDisplayRequiresBlanking;
    138         }
    139     },
    140 
    141     /**
    142      * Unlocked on top of an app (launcher or any other activity.)
    143      */
    144     UNLOCKED(6) {
    145         @Override
    146         public void prepare(ScrimState previousState) {
    147             mCurrentBehindAlpha = 0;
    148             mCurrentInFrontAlpha = 0;
    149             mAnimationDuration = StatusBar.FADE_KEYGUARD_DURATION;
    150 
    151             if (previousState == ScrimState.AOD || previousState == ScrimState.PULSING) {
    152                 // Fade from black to transparent when coming directly from AOD
    153                 updateScrimColor(mScrimInFront, 1, Color.BLACK);
    154                 updateScrimColor(mScrimBehind, 1, Color.BLACK);
    155                 // Scrims should still be black at the end of the transition.
    156                 mCurrentInFrontTint = Color.BLACK;
    157                 mCurrentBehindTint = Color.BLACK;
    158                 mBlankScreen = true;
    159             } else {
    160                 mCurrentInFrontTint = Color.TRANSPARENT;
    161                 mCurrentBehindTint = Color.TRANSPARENT;
    162                 mBlankScreen = false;
    163             }
    164         }
    165     };
    166 
    167     boolean mBlankScreen = false;
    168     long mAnimationDuration = ScrimController.ANIMATION_DURATION;
    169     int mCurrentInFrontTint = Color.TRANSPARENT;
    170     int mCurrentBehindTint = Color.TRANSPARENT;
    171     boolean mAnimateChange = true;
    172     float mCurrentInFrontAlpha;
    173     float mCurrentBehindAlpha;
    174     float mAodFrontScrimAlpha;
    175     float mScrimBehindAlphaKeyguard;
    176     ScrimView mScrimInFront;
    177     ScrimView mScrimBehind;
    178     DozeParameters mDozeParameters;
    179     boolean mDisplayRequiresBlanking;
    180     boolean mWallpaperSupportsAmbientMode;
    181     KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    182     int mIndex;
    183 
    184     ScrimState(int index) {
    185         mIndex = index;
    186     }
    187 
    188     public void init(ScrimView scrimInFront, ScrimView scrimBehind, DozeParameters dozeParameters) {
    189         mScrimInFront = scrimInFront;
    190         mScrimBehind = scrimBehind;
    191         mDozeParameters = dozeParameters;
    192         mDisplayRequiresBlanking = dozeParameters.getDisplayNeedsBlanking();
    193         mKeyguardUpdateMonitor = KeyguardUpdateMonitor.getInstance(scrimInFront.getContext());
    194     }
    195 
    196     public void prepare(ScrimState previousState) {
    197     }
    198 
    199     public int getIndex() {
    200         return mIndex;
    201     }
    202 
    203     public float getFrontAlpha() {
    204         return mCurrentInFrontAlpha;
    205     }
    206 
    207     public float getBehindAlpha(float busyness) {
    208         return mCurrentBehindAlpha;
    209     }
    210 
    211     public int getFrontTint() {
    212         return mCurrentInFrontTint;
    213     }
    214 
    215     public int getBehindTint() {
    216         return mCurrentBehindTint;
    217     }
    218 
    219     public long getAnimationDuration() {
    220         return mAnimationDuration;
    221     }
    222 
    223     public boolean getBlanksScreen() {
    224         return mBlankScreen;
    225     }
    226 
    227     public void updateScrimColor(ScrimView scrim, float alpha, int tint) {
    228         Trace.traceCounter(Trace.TRACE_TAG_APP,
    229                 scrim == mScrimInFront ? "front_scrim_alpha" : "back_scrim_alpha",
    230                 (int) (alpha * 255));
    231 
    232         Trace.traceCounter(Trace.TRACE_TAG_APP,
    233                 scrim == mScrimInFront ? "front_scrim_tint" : "back_scrim_tint",
    234                 Color.alpha(tint));
    235 
    236         scrim.setTint(tint);
    237         scrim.setViewAlpha(alpha);
    238     }
    239 
    240     public boolean getAnimateChange() {
    241         return mAnimateChange;
    242     }
    243 
    244     public void setAodFrontScrimAlpha(float aodFrontScrimAlpha) {
    245         mAodFrontScrimAlpha = aodFrontScrimAlpha;
    246     }
    247 
    248     public void setScrimBehindAlphaKeyguard(float scrimBehindAlphaKeyguard) {
    249         mScrimBehindAlphaKeyguard = scrimBehindAlphaKeyguard;
    250     }
    251 
    252     public void setWallpaperSupportsAmbientMode(boolean wallpaperSupportsAmbientMode) {
    253         mWallpaperSupportsAmbientMode = wallpaperSupportsAmbientMode;
    254     }
    255 
    256     public boolean isLowPowerState() {
    257         return false;
    258     }
    259 }
  • 相关阅读:
    回顾2012
    静态变量与非静态变量的区别
    本地计算机的XXX服务启动后又停止了
    计算包含特殊字符的字符串的字符个数
    Convert与Parse的区别
    SPSS课程学习思路及流程
    市场分析与数据挖掘分别的分析流程
    用R做逻辑回归之汽车贷款违约模型
    用R去做文本处理
    SyntaxError: Missing parentheses in call to 'print
  • 原文地址:https://www.cnblogs.com/chaosDemo/p/9665236.html
Copyright © 2020-2023  润新知