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. }

ScrimState.java的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题

    背景起因: 记起以前的另一次也是关于内存的调优分享下   有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...

  3. Elasticsearch之java的基本操作一

    摘要   接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...

  4. 论:开发者信仰之“天下IT是一家“(Java .NET篇)

    比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...

  5. 故障重现, JAVA进程内存不够时突然挂掉模拟

    背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...

  6. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  7. 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用

    有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...

  8. Java多线程基础学习(二)

    9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...

  9. Java多线程基础学习(一)

    1. 创建线程    1.1 通过构造函数:public Thread(Runnable target, String name){}  或:public Thread(Runnable target ...

随机推荐

  1. [CentOS 7] TexLive2017中kpsewhich Bug的修复

    使用TexLive有一段时间了,从2015到2017,一直运行如常. 最近,想把以前的文档重新编译,却发现不能正常运行,费了好大一番工夫,才终于修复了这个bug,记录如下. 问题描述:编译一个简单的 ...

  2. Ubuntu18.04下给PyCharm创建快捷方式

    Ubuntu18.04下给PyCharm创建快捷方式 该方法 WebStorm.PyCharm.Clion 等都适用. 步骤 终端输入: sudo gedit /usr/share/applicati ...

  3. Tensorflow(添加噪声的方式)

    在去噪自编码器中,模型的输入是原始的输入经过某种形式的加噪过程后的衰弱的形式,所以加噪声一般分为:加高斯白噪声,掩模噪声,椒盐噪声. 1.加性高斯噪声 self.scale = tf,placehol ...

  4. python之路-变量

    变量定义的规则: - 变量名只能是字母.数字.或下划线的任意组合 - 变量名的第一个字符不能是数字 - 以下关键字不能声明为变量名  ['and','as','assert','break','cla ...

  5. js求最大值最小值

    比较数组中数值的大小是比较常见的操作,比较大小的方法有多种,比如可以使用自带的sort()函数,代码如下: <html> <head> <meta charset=&qu ...

  6. TP自动提取关键词

    protected function _before_insert(&$data, $option) {        $data['create_time'] = time();       ...

  7. 俄罗斯方块win c 图形线程

    环境准备:visual stdio 2015,easyx, //

  8. RAID配置多阵列

    感谢: https://www.cnblogs.com/hystj/articles/8672029.html

  9. SpringMVC云题库错题及答案汇总-2

    此题目考察的是SpringMVC-注解驱动控制器,注释类型的范围: A.处理requet uri 部分的注解: @PathVariable; B.处理request header部分的注解: @Req ...

  10. java跨域

    在我们开发当中  经常会碰见跨域问题 今天我来说下 我在工作撞见的跨域: 一.首先我们要了解跨域存在的原因 1.浏览器限制 2.跨域(域名,端口不一样都是跨域) 3.XHR(XMLHttpReques ...