blob: bfd448a2926d582c10ce76051e4880aa1a8207a7 [file] [log] [blame]
Adrian Roos2981eb02017-05-26 18:40:09 -07001/*
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
17package com.android.systemui.doze;
18
19import static com.android.systemui.doze.DozeMachine.State.DOZE;
20import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD;
21import static com.android.systemui.doze.DozeMachine.State.DOZE_PULSING;
22import static com.android.systemui.doze.DozeMachine.State.DOZE_REQUEST_PULSE;
Adrian Roos5502b892017-08-22 15:42:12 +020023import static com.android.systemui.doze.DozeMachine.State.FINISH;
Adrian Roos2981eb02017-05-26 18:40:09 -070024import static com.android.systemui.doze.DozeMachine.State.INITIALIZED;
25import static com.android.systemui.doze.DozeMachine.State.UNINITIALIZED;
Adrian Roos5502b892017-08-22 15:42:12 +020026import static com.android.systemui.utils.os.FakeHandler.Mode.QUEUEING;
Adrian Roos2981eb02017-05-26 18:40:09 -070027
Adrian Roos39880be2018-04-23 17:41:17 +020028import static org.hamcrest.Matchers.is;
Adrian Roos2981eb02017-05-26 18:40:09 -070029import static org.junit.Assert.assertEquals;
Adrian Roos5502b892017-08-22 15:42:12 +020030import static org.junit.Assert.assertFalse;
Adrian Roos39880be2018-04-23 17:41:17 +020031import static org.junit.Assert.assertThat;
Adrian Roos5502b892017-08-22 15:42:12 +020032import static org.junit.Assert.assertTrue;
Lucas Dupin12663d32018-02-08 11:42:22 -080033import static org.mockito.Mockito.when;
Adrian Roos2981eb02017-05-26 18:40:09 -070034
Adrian Roos8db93112017-08-11 19:43:17 +020035import android.os.Looper;
Adrian Roos2981eb02017-05-26 18:40:09 -070036import android.view.Display;
37
Brett Chabot84151d92019-02-27 15:37:59 -080038import androidx.test.filters.SmallTest;
39import androidx.test.runner.AndroidJUnit4;
40
Adrian Roos2981eb02017-05-26 18:40:09 -070041import com.android.systemui.SysuiTestCase;
Lucas Dupin12663d32018-02-08 11:42:22 -080042import com.android.systemui.statusbar.phone.DozeParameters;
Adrian Roos39880be2018-04-23 17:41:17 +020043import com.android.systemui.util.wakelock.WakeLockFake;
Adrian Roos5502b892017-08-22 15:42:12 +020044import com.android.systemui.utils.os.FakeHandler;
Adrian Roos2981eb02017-05-26 18:40:09 -070045
46import org.junit.Before;
47import org.junit.Test;
48import org.junit.runner.RunWith;
Lucas Dupin12663d32018-02-08 11:42:22 -080049import org.mockito.Mock;
50import org.mockito.MockitoAnnotations;
Adrian Roos2981eb02017-05-26 18:40:09 -070051
52@RunWith(AndroidJUnit4.class)
53@SmallTest
54public class DozeScreenStateTest extends SysuiTestCase {
55
56 DozeServiceFake mServiceFake;
57 DozeScreenState mScreen;
Adrian Roos5502b892017-08-22 15:42:12 +020058 FakeHandler mHandlerFake;
Lucas Dupin12663d32018-02-08 11:42:22 -080059 @Mock
60 DozeParameters mDozeParameters;
Adrian Roos39880be2018-04-23 17:41:17 +020061 WakeLockFake mWakeLock;
Adrian Roos2981eb02017-05-26 18:40:09 -070062
63 @Before
64 public void setUp() throws Exception {
Lucas Dupin12663d32018-02-08 11:42:22 -080065 MockitoAnnotations.initMocks(this);
66 when(mDozeParameters.getDisplayNeedsBlanking()).thenReturn(true);
Lucas Dupin16cfe452018-02-08 13:14:50 -080067 when(mDozeParameters.getAlwaysOn()).thenReturn(true);
Adrian Roos2981eb02017-05-26 18:40:09 -070068 mServiceFake = new DozeServiceFake();
Adrian Roos5502b892017-08-22 15:42:12 +020069 mHandlerFake = new FakeHandler(Looper.getMainLooper());
Adrian Roos39880be2018-04-23 17:41:17 +020070 mWakeLock = new WakeLockFake();
Lucas Dupin16cfe452018-02-08 13:14:50 -080071 mScreen = new DozeScreenState(mServiceFake, mHandlerFake, mDozeParameters, mWakeLock);
Adrian Roos2981eb02017-05-26 18:40:09 -070072 }
73
74 @Test
75 public void testScreen_offInDoze() {
76 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
77 mScreen.transitionTo(INITIALIZED, DOZE);
78
79 assertEquals(Display.STATE_OFF, mServiceFake.screenState);
80 }
81
82 @Test
83 public void testScreen_onInAod() {
84 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
85 mScreen.transitionTo(INITIALIZED, DOZE_AOD);
86
87 assertEquals(Display.STATE_DOZE_SUSPEND, mServiceFake.screenState);
88 }
89
90 @Test
91 public void testScreen_onInPulse() {
92 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
93 mScreen.transitionTo(INITIALIZED, DOZE);
94
95 mScreen.transitionTo(DOZE, DOZE_REQUEST_PULSE);
96 mScreen.transitionTo(DOZE_REQUEST_PULSE, DOZE_PULSING);
97
98 assertEquals(Display.STATE_ON, mServiceFake.screenState);
99 }
100
101 @Test
102 public void testScreen_offInRequestPulseWithoutAoD() {
103 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
104 mScreen.transitionTo(INITIALIZED, DOZE);
105
106 mScreen.transitionTo(DOZE, DOZE_REQUEST_PULSE);
107
108 assertEquals(Display.STATE_OFF, mServiceFake.screenState);
109 }
110
111 @Test
Adrian Roose4cb6c8a2017-07-19 18:08:07 +0200112 public void testScreen_offInRequestPulseWithAoD() {
Adrian Roos2981eb02017-05-26 18:40:09 -0700113 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
114 mScreen.transitionTo(INITIALIZED, DOZE_AOD);
115
116 mScreen.transitionTo(DOZE, DOZE_REQUEST_PULSE);
117
Adrian Roose4cb6c8a2017-07-19 18:08:07 +0200118 assertEquals(Display.STATE_OFF, mServiceFake.screenState);
Adrian Roos2981eb02017-05-26 18:40:09 -0700119 }
120
Adrian Roos8db93112017-08-11 19:43:17 +0200121 @Test
Adrian Roos5502b892017-08-22 15:42:12 +0200122 public void test_initialScreenStatePostedToHandler() {
123 mHandlerFake.setMode(QUEUEING);
124
Adrian Roos8db93112017-08-11 19:43:17 +0200125 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
Adrian Roos5502b892017-08-22 15:42:12 +0200126 mServiceFake.screenStateSet = false;
Adrian Roos8db93112017-08-11 19:43:17 +0200127 mScreen.transitionTo(INITIALIZED, DOZE_AOD);
128
Adrian Roos5502b892017-08-22 15:42:12 +0200129 assertFalse(mServiceFake.screenStateSet);
130
131 mHandlerFake.dispatchQueuedMessages();
132
133 assertTrue(mServiceFake.screenStateSet);
134 assertEquals(Display.STATE_DOZE_SUSPEND, mServiceFake.screenState);
Adrian Roos8db93112017-08-11 19:43:17 +0200135 }
136
Adrian Roos5502b892017-08-22 15:42:12 +0200137 @Test
138 public void test_noScreenStateSetAfterFinish() {
139 mHandlerFake.setMode(QUEUEING);
Adrian Roos8db93112017-08-11 19:43:17 +0200140
Adrian Roos5502b892017-08-22 15:42:12 +0200141 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
142 mScreen.transitionTo(INITIALIZED, DOZE_AOD);
143 mScreen.transitionTo(DOZE_AOD, FINISH);
Adrian Roos8db93112017-08-11 19:43:17 +0200144
Adrian Roos5502b892017-08-22 15:42:12 +0200145 mServiceFake.screenStateSet = false;
146
147 mHandlerFake.dispatchQueuedMessages();
148
149 assertFalse(mServiceFake.screenStateSet);
Adrian Roos8db93112017-08-11 19:43:17 +0200150 }
Adrian Roos5502b892017-08-22 15:42:12 +0200151
Lucas Dupin16cfe452018-02-08 13:14:50 -0800152 @Test
153 public void test_holdsWakeLockWhenGoingToLowPowerDelayed() {
154 // Transition to low power mode will be delayed to let
155 // animations play at 60 fps.
156 when(mDozeParameters.shouldControlScreenOff()).thenReturn(true);
157 mHandlerFake.setMode(QUEUEING);
158
159 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
160 mHandlerFake.dispatchQueuedMessages();
Lucas Dupin16cfe452018-02-08 13:14:50 -0800161
162 mScreen.transitionTo(INITIALIZED, DOZE_AOD);
Adrian Roos39880be2018-04-23 17:41:17 +0200163 assertThat(mWakeLock.isHeld(), is(true));
Lucas Dupin16cfe452018-02-08 13:14:50 -0800164
165 mHandlerFake.dispatchQueuedMessages();
Adrian Roos39880be2018-04-23 17:41:17 +0200166 assertThat(mWakeLock.isHeld(), is(false));
167 }
168
169 @Test
170 public void test_releasesWakeLock_abortingLowPowerDelayed() {
171 // Transition to low power mode will be delayed to let
172 // animations play at 60 fps.
173 when(mDozeParameters.shouldControlScreenOff()).thenReturn(true);
174 mHandlerFake.setMode(QUEUEING);
175
176 mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
177 mHandlerFake.dispatchQueuedMessages();
178
179 mScreen.transitionTo(INITIALIZED, DOZE_AOD);
180 assertThat(mWakeLock.isHeld(), is(true));
181 mScreen.transitionTo(DOZE_AOD, FINISH);
182
183 assertThat(mWakeLock.isHeld(), is(false));
Lucas Dupin16cfe452018-02-08 13:14:50 -0800184 }
185
Adrian Roos2981eb02017-05-26 18:40:09 -0700186}