blob: 756227e58ec29cb84c692040351c1e9cb63eff20 [file] [log] [blame]
Adrian Roosd35d4ca2017-04-19 14:31:03 -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 org.mockito.ArgumentMatchers.any;
20import static org.mockito.ArgumentMatchers.anyInt;
Lucas Dupined5b7a92019-03-20 11:00:27 -070021import static org.mockito.ArgumentMatchers.eq;
Lucas Dupin3174c662019-07-15 15:49:54 -070022import static org.mockito.Mockito.clearInvocations;
Lucas Dupinedbe45b2019-10-14 15:43:03 -070023import static org.mockito.Mockito.doAnswer;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070024import static org.mockito.Mockito.mock;
25import static org.mockito.Mockito.never;
lpeter8a5f4702019-01-18 16:53:07 +080026import static org.mockito.Mockito.spy;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070027import static org.mockito.Mockito.verify;
28import static org.mockito.Mockito.when;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070029
Adrian Roos6023ccb2017-06-28 16:22:02 +020030import android.app.AlarmManager;
Lucas Dupin3174c662019-07-15 15:49:54 -070031import android.hardware.Sensor;
Issei Suzukica19e6e2019-02-26 12:39:11 +010032import android.hardware.display.AmbientDisplayConfiguration;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070033import android.os.Handler;
34import android.os.Looper;
Jason Monk6dceace2018-05-15 20:24:07 -040035import android.testing.AndroidTestingRunner;
Dave Mankoff63a12822019-09-16 14:38:06 -040036import android.testing.TestableLooper;
Jason Monk6dceace2018-05-15 20:24:07 -040037import android.testing.TestableLooper.RunWithLooper;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070038
Brett Chabot84151d92019-02-27 15:37:59 -080039import androidx.test.filters.SmallTest;
40
Jason Monk25a52b62017-05-23 10:42:59 -040041import com.android.systemui.SysuiTestCase;
Lucas Dupin3174c662019-07-15 15:49:54 -070042import com.android.systemui.dock.DockManager;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070043import com.android.systemui.statusbar.phone.DozeParameters;
Dave Mankoff63a12822019-09-16 14:38:06 -040044import com.android.systemui.util.sensors.AsyncSensorManager;
Dave Mankoffbf52f4b2019-09-20 14:34:28 -040045import com.android.systemui.util.sensors.FakeProximitySensor;
Dave Mankoff63a12822019-09-16 14:38:06 -040046import com.android.systemui.util.sensors.FakeSensorManager;
Dave Mankoffbf52f4b2019-09-20 14:34:28 -040047import com.android.systemui.util.sensors.ProximitySensor;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070048import com.android.systemui.util.wakelock.WakeLock;
49import com.android.systemui.util.wakelock.WakeLockFake;
50
51import org.junit.Before;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070052import org.junit.Test;
Adrian Roos84a187f2017-04-28 14:10:51 -070053import org.junit.runner.RunWith;
Lucas Dupinedbe45b2019-10-14 15:43:03 -070054import org.mockito.ArgumentCaptor;
55import org.mockito.Mock;
56import org.mockito.MockitoAnnotations;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070057
Adrian Roos84a187f2017-04-28 14:10:51 -070058@SmallTest
Jason Monk6dceace2018-05-15 20:24:07 -040059@RunWith(AndroidTestingRunner.class)
Lucas Dupin3174c662019-07-15 15:49:54 -070060@RunWithLooper(setAsMainLooper = true)
Jason Monk25a52b62017-05-23 10:42:59 -040061public class DozeTriggersTest extends SysuiTestCase {
Lucas Dupinedbe45b2019-10-14 15:43:03 -070062
63 @Mock
Adrian Roosd35d4ca2017-04-19 14:31:03 -070064 private DozeMachine mMachine;
Lucas Dupinedbe45b2019-10-14 15:43:03 -070065 @Mock
66 private DozeHost mHost;
67 @Mock
68 private AlarmManager mAlarmManager;
69 private DozeTriggers mTriggers;
Adrian Roos84a187f2017-04-28 14:10:51 -070070 private FakeSensorManager mSensors;
Lucas Dupin3174c662019-07-15 15:49:54 -070071 private Sensor mTapSensor;
Lucas Dupin3174c662019-07-15 15:49:54 -070072 private DockManager mDockManagerFake;
Dave Mankoffbf52f4b2019-09-20 14:34:28 -040073 private FakeProximitySensor mProximitySensor;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070074
Adrian Roosd35d4ca2017-04-19 14:31:03 -070075 @Before
76 public void setUp() throws Exception {
Lucas Dupinedbe45b2019-10-14 15:43:03 -070077 MockitoAnnotations.initMocks(this);
Dave Mankoff63a12822019-09-16 14:38:06 -040078 AmbientDisplayConfiguration config = DozeConfigurationUtil.createMockConfig();
79 DozeParameters parameters = DozeConfigurationUtil.createMockParameters();
Lucas Dupin3174c662019-07-15 15:49:54 -070080 mSensors = spy(new FakeSensorManager(mContext));
81 mTapSensor = mSensors.getFakeTapSensor().getSensor();
Dave Mankoff63a12822019-09-16 14:38:06 -040082 WakeLock wakeLock = new WakeLockFake();
Lucas Dupin3174c662019-07-15 15:49:54 -070083 mDockManagerFake = mock(DockManager.class);
Dave Mankoff63a12822019-09-16 14:38:06 -040084 AsyncSensorManager asyncSensorManager =
85 new AsyncSensorManager(mSensors, null, new Handler());
Dave Mankoffd94c9692019-10-18 12:38:21 -040086 mProximitySensor = new FakeProximitySensor(getContext().getResources(), asyncSensorManager);
Adrian Roosd35d4ca2017-04-19 14:31:03 -070087
Lucas Dupinedbe45b2019-10-14 15:43:03 -070088 mTriggers = new DozeTriggers(mContext, mMachine, mHost, mAlarmManager, config, parameters,
Dave Mankoff63a12822019-09-16 14:38:06 -040089 asyncSensorManager, Handler.createAsync(Looper.myLooper()), wakeLock, true,
Beverlycc4a62f2019-09-26 14:55:28 -040090 mDockManagerFake, mProximitySensor, mock(DozeLog.class));
Dave Mankoff63a12822019-09-16 14:38:06 -040091 waitForSensorManager();
Adrian Roosd35d4ca2017-04-19 14:31:03 -070092 }
93
94 @Test
Adrian Roosd35d4ca2017-04-19 14:31:03 -070095 public void testOnNotification_stillWorksAfterOneFailedProxCheck() throws Exception {
96 when(mMachine.getState()).thenReturn(DozeMachine.State.DOZE);
Lucas Dupinedbe45b2019-10-14 15:43:03 -070097 ArgumentCaptor<DozeHost.Callback> captor = ArgumentCaptor.forClass(DozeHost.Callback.class);
98 doAnswer(invocation -> null).when(mHost).addCallback(captor.capture());
Adrian Roosd35d4ca2017-04-19 14:31:03 -070099
Jason Monk6dceace2018-05-15 20:24:07 -0400100 mTriggers.transitionTo(DozeMachine.State.UNINITIALIZED, DozeMachine.State.INITIALIZED);
101 mTriggers.transitionTo(DozeMachine.State.INITIALIZED, DozeMachine.State.DOZE);
Lucas Dupin3174c662019-07-15 15:49:54 -0700102 clearInvocations(mMachine);
Adrian Roosd35d4ca2017-04-19 14:31:03 -0700103
Dave Mankoffbf52f4b2019-09-20 14:34:28 -0400104 mProximitySensor.setLastEvent(new ProximitySensor.ProximityEvent(true, 1));
Lucas Dupinedbe45b2019-10-14 15:43:03 -0700105 captor.getValue().onNotificationAlerted(null /* pulseSuppressedListener */);
Dave Mankoffbf52f4b2019-09-20 14:34:28 -0400106 mProximitySensor.alertListeners();
Adrian Roosd35d4ca2017-04-19 14:31:03 -0700107
108 verify(mMachine, never()).requestState(any());
Adrian Roos84a187f2017-04-28 14:10:51 -0700109 verify(mMachine, never()).requestPulse(anyInt());
Adrian Roosd35d4ca2017-04-19 14:31:03 -0700110
Lucas Dupinedbe45b2019-10-14 15:43:03 -0700111 captor.getValue().onNotificationAlerted(null /* pulseSuppressedListener */);
Dave Mankoff63a12822019-09-16 14:38:06 -0400112 waitForSensorManager();
Dave Mankoffbf52f4b2019-09-20 14:34:28 -0400113 mProximitySensor.setLastEvent(new ProximitySensor.ProximityEvent(false, 2));
114 mProximitySensor.alertListeners();
Adrian Roosd35d4ca2017-04-19 14:31:03 -0700115
Adrian Roosd7b9d102017-04-28 15:42:58 -0700116 verify(mMachine).requestPulse(anyInt());
Adrian Roosd35d4ca2017-04-19 14:31:03 -0700117 }
118
lpeter8a5f4702019-01-18 16:53:07 +0800119 @Test
Lucas Dupin3174c662019-07-15 15:49:54 -0700120 public void testTransitionTo_disablesAndEnablesTouchSensors() {
121 when(mMachine.getState()).thenReturn(DozeMachine.State.DOZE);
122
123 mTriggers.transitionTo(DozeMachine.State.INITIALIZED, DozeMachine.State.DOZE);
Dave Mankoff63a12822019-09-16 14:38:06 -0400124 waitForSensorManager();
Lucas Dupin3174c662019-07-15 15:49:54 -0700125 verify(mSensors).requestTriggerSensor(any(), eq(mTapSensor));
126
127 clearInvocations(mSensors);
128 mTriggers.transitionTo(DozeMachine.State.DOZE,
129 DozeMachine.State.DOZE_REQUEST_PULSE);
130 mTriggers.transitionTo(DozeMachine.State.DOZE_REQUEST_PULSE,
131 DozeMachine.State.DOZE_PULSING);
Dave Mankoff63a12822019-09-16 14:38:06 -0400132 waitForSensorManager();
Lucas Dupin3174c662019-07-15 15:49:54 -0700133 verify(mSensors).cancelTriggerSensor(any(), eq(mTapSensor));
134
135 clearInvocations(mSensors);
136 mTriggers.transitionTo(DozeMachine.State.DOZE_PULSING, DozeMachine.State.DOZE_PULSE_DONE);
Dave Mankoff63a12822019-09-16 14:38:06 -0400137 waitForSensorManager();
Lucas Dupin3174c662019-07-15 15:49:54 -0700138 verify(mSensors).requestTriggerSensor(any(), eq(mTapSensor));
139 }
140
141 @Test
lpeter8a5f4702019-01-18 16:53:07 +0800142 public void testDockEventListener_registerAndUnregister() {
143 mTriggers.transitionTo(DozeMachine.State.UNINITIALIZED, DozeMachine.State.INITIALIZED);
lpeter8a5f4702019-01-18 16:53:07 +0800144 verify(mDockManagerFake).addListener(any());
145
146 mTriggers.transitionTo(DozeMachine.State.DOZE, DozeMachine.State.FINISH);
lpeter8a5f4702019-01-18 16:53:07 +0800147 verify(mDockManagerFake).removeListener(any());
148 }
Dave Mankoff63a12822019-09-16 14:38:06 -0400149
Dave Mankoffbf52f4b2019-09-20 14:34:28 -0400150 @Test
151 public void testProximitySensorNotAvailablel() {
152 mProximitySensor.setSensorAvailable(false);
Beverlycc4a62f2019-09-26 14:55:28 -0400153 mTriggers.onSensor(DozeEvent.PULSE_REASON_SENSOR_LONG_PRESS, 100, 100, null);
154 mTriggers.onSensor(DozeEvent.PULSE_REASON_SENSOR_WAKE_LOCK_SCREEN, 100, 100,
155 new float[]{1});
156 mTriggers.onSensor(DozeEvent.REASON_SENSOR_TAP, 100, 100, null);
Dave Mankoffbf52f4b2019-09-20 14:34:28 -0400157 }
158
Dave Mankoff63a12822019-09-16 14:38:06 -0400159 private void waitForSensorManager() {
160 TestableLooper.get(this).processAllMessages();
161 }
Geoffrey Pitscheefa3be2017-06-12 10:55:28 -0400162}