2 * Copyright (C) 2017 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package com.android.systemui.doze;
19 import static com.android.systemui.doze.DozeMachine.State.DOZE;
20 import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD;
21 import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD_PAUSED;
22 import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD_PAUSING;
23 import static com.android.systemui.doze.DozeMachine.State.DOZE_PULSE_DONE;
24 import static com.android.systemui.doze.DozeMachine.State.DOZE_PULSING;
25 import static com.android.systemui.doze.DozeMachine.State.DOZE_REQUEST_PULSE;
26 import static com.android.systemui.doze.DozeMachine.State.FINISH;
27 import static com.android.systemui.doze.DozeMachine.State.INITIALIZED;
28 import static com.android.systemui.doze.DozeMachine.State.UNINITIALIZED;
30 import static org.junit.Assert.assertEquals;
31 import static org.junit.Assert.assertFalse;
32 import static org.junit.Assert.assertNotEquals;
33 import static org.junit.Assert.assertThat;
34 import static org.junit.Assert.assertTrue;
36 import android.os.PowerManager;
37 import android.support.test.filters.SmallTest;
38 import android.support.test.runner.AndroidJUnit4;
40 import com.android.systemui.SysuiTestCase;
41 import com.android.systemui.utils.hardware.FakeSensorManager;
43 import org.junit.Before;
44 import org.junit.Test;
45 import org.junit.runner.RunWith;
47 @RunWith(AndroidJUnit4.class)
49 public class DozeScreenBrightnessTest extends SysuiTestCase {
51 static final int DEFAULT_BRIGHTNESS = 10;
52 static final int[] SENSOR_TO_BRIGHTNESS = new int[]{-1, 1, 2, 3, 4};
53 static final int[] SENSOR_TO_OPACITY = new int[]{-1, 10, 0, 0, 0};
55 DozeServiceFake mServiceFake;
56 DozeScreenBrightness mScreen;
57 FakeSensorManager.FakeGenericSensor mSensor;
58 FakeSensorManager mSensorManager;
59 DozeHostFake mHostFake;
62 public void setUp() throws Exception {
63 mServiceFake = new DozeServiceFake();
64 mHostFake = new DozeHostFake();
65 mSensorManager = new FakeSensorManager(mContext);
66 mSensor = mSensorManager.getFakeLightSensor();
67 mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
68 mSensor.getSensor(), mHostFake, null /* handler */,
69 DEFAULT_BRIGHTNESS, SENSOR_TO_BRIGHTNESS, SENSOR_TO_OPACITY);
73 public void testInitialize_setsScreenBrightnessToValidValue() throws Exception {
74 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
76 assertEquals(DEFAULT_BRIGHTNESS, mServiceFake.screenBrightness);
77 assertTrue(mServiceFake.screenBrightness <= PowerManager.BRIGHTNESS_ON);
81 public void testAod_usesLightSensor() throws Exception {
82 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
83 mScreen.transitionTo(INITIALIZED, DOZE_AOD);
85 mSensor.sendSensorEvent(3);
87 assertEquals(3, mServiceFake.screenBrightness);
91 public void testPausingAod_doesntPauseLightSensor() throws Exception {
92 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
93 mScreen.transitionTo(INITIALIZED, DOZE_AOD);
95 mSensor.sendSensorEvent(1);
97 mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSING);
98 mScreen.transitionTo(DOZE_AOD_PAUSING, DOZE_AOD_PAUSED);
100 mSensor.sendSensorEvent(2);
102 assertEquals(2, mServiceFake.screenBrightness);
106 public void testPausingAod_doesNotResetBrightness() throws Exception {
107 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
108 mScreen.transitionTo(INITIALIZED, DOZE_AOD);
110 mSensor.sendSensorEvent(1);
112 mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSING);
113 mScreen.transitionTo(DOZE_AOD_PAUSING, DOZE_AOD_PAUSED);
115 assertEquals(1, mServiceFake.screenBrightness);
119 public void testPulsing_usesLightSensor() throws Exception {
120 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
121 mScreen.transitionTo(INITIALIZED, DOZE);
122 mScreen.transitionTo(DOZE, DOZE_REQUEST_PULSE);
124 mSensor.sendSensorEvent(1);
126 assertEquals(1, mServiceFake.screenBrightness);
130 public void testDozingAfterPulsing_pausesLightSensor() throws Exception {
131 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
132 mScreen.transitionTo(INITIALIZED, DOZE);
133 mScreen.transitionTo(DOZE, DOZE_REQUEST_PULSE);
134 mScreen.transitionTo(DOZE_REQUEST_PULSE, DOZE_PULSING);
135 mScreen.transitionTo(DOZE_PULSING, DOZE_PULSE_DONE);
136 mScreen.transitionTo(DOZE_PULSE_DONE, DOZE);
138 mSensor.sendSensorEvent(1);
140 assertEquals(DEFAULT_BRIGHTNESS, mServiceFake.screenBrightness);
144 public void testNullSensor() throws Exception {
145 mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
146 null /* sensor */, mHostFake, null /* handler */,
147 DEFAULT_BRIGHTNESS, SENSOR_TO_BRIGHTNESS, SENSOR_TO_OPACITY);
149 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
150 mScreen.transitionTo(INITIALIZED, DOZE_AOD);
151 mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSING);
152 mScreen.transitionTo(DOZE_AOD_PAUSING, DOZE_AOD_PAUSED);
156 public void testNoBrightnessDeliveredAfterFinish() throws Exception {
157 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
158 mScreen.transitionTo(INITIALIZED, DOZE_AOD);
159 mScreen.transitionTo(DOZE_AOD, FINISH);
161 mSensor.sendSensorEvent(1);
163 assertNotEquals(1, mServiceFake.screenBrightness);
167 public void testNonPositiveBrightness_keepsPreviousBrightnessAndScrim() throws Exception {
168 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
169 mScreen.transitionTo(INITIALIZED, DOZE_AOD);
171 mSensor.sendSensorEvent(1);
172 mSensor.sendSensorEvent(0);
174 assertEquals(1, mServiceFake.screenBrightness);
175 assertEquals(10/255f, mHostFake.aodDimmingScrimOpacity, 0.001f /* delta */);
179 public void pausingAod_softBlanks() throws Exception {
180 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
181 mScreen.transitionTo(INITIALIZED, DOZE_AOD);
183 mSensor.sendSensorEvent(2);
185 mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSING);
186 mScreen.transitionTo(DOZE_AOD_PAUSING, DOZE_AOD_PAUSED);
188 assertEquals(1f, mHostFake.aodDimmingScrimOpacity, 0.001f /* delta */);
190 mSensor.sendSensorEvent(0);
191 assertEquals(1f, mHostFake.aodDimmingScrimOpacity, 0.001f /* delta */);
193 mScreen.transitionTo(DOZE_AOD_PAUSED, DOZE_AOD);
194 assertEquals(1f, mHostFake.aodDimmingScrimOpacity, 0.001f /* delta */);
198 public void pausingAod_softBlanks_withSpuriousSensorDuringPause() throws Exception {
199 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
200 mScreen.transitionTo(INITIALIZED, DOZE_AOD);
201 mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSING);
202 mScreen.transitionTo(DOZE_AOD_PAUSING, DOZE_AOD_PAUSED);
204 mSensor.sendSensorEvent(1);
205 assertEquals(1f, mHostFake.aodDimmingScrimOpacity, 0.001f /* delta */);
209 public void pausingAod_unblanksAfterSensor() throws Exception {
210 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
211 mScreen.transitionTo(INITIALIZED, DOZE_AOD);
213 mSensor.sendSensorEvent(2);
215 mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSING);
216 mScreen.transitionTo(DOZE_AOD_PAUSING, DOZE_AOD_PAUSED);
218 mSensor.sendSensorEvent(0);
220 mScreen.transitionTo(DOZE_AOD_PAUSED, DOZE_AOD);
222 mSensor.sendSensorEvent(2);
224 assertEquals(0f, mHostFake.aodDimmingScrimOpacity, 0.001f /* delta */);
228 public void pausingAod_unblanksIfSensorWasAlwaysReady() throws Exception {
229 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
230 mScreen.transitionTo(INITIALIZED, DOZE_AOD);
232 mSensor.sendSensorEvent(2);
234 mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSING);
235 mScreen.transitionTo(DOZE_AOD_PAUSING, DOZE_AOD_PAUSED);
236 mScreen.transitionTo(DOZE_AOD_PAUSED, DOZE_AOD);
238 assertEquals(0f, mHostFake.aodDimmingScrimOpacity, 0.001f /* delta */);