blob: 8941182b1384bfe823995f3c6cbaef26606859fb [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;
lpeter8a5f4702019-01-18 16:53:07 +080021import static org.mockito.Mockito.doReturn;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070022import static org.mockito.Mockito.mock;
23import static org.mockito.Mockito.never;
lpeter8a5f4702019-01-18 16:53:07 +080024import static org.mockito.Mockito.spy;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070025import static org.mockito.Mockito.verify;
26import static org.mockito.Mockito.when;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070027
Adrian Roos6023ccb2017-06-28 16:22:02 +020028import android.app.AlarmManager;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070029import android.app.Instrumentation;
Issei Suzukica19e6e2019-02-26 12:39:11 +010030import android.hardware.display.AmbientDisplayConfiguration;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070031import android.os.Handler;
32import android.os.Looper;
Jason Monk6dceace2018-05-15 20:24:07 -040033import android.testing.AndroidTestingRunner;
34import android.testing.TestableLooper.RunWithLooper;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070035
Brett Chabot84151d92019-02-27 15:37:59 -080036import androidx.test.InstrumentationRegistry;
37import androidx.test.filters.SmallTest;
38
Jason Monk25a52b62017-05-23 10:42:59 -040039import com.android.systemui.SysuiTestCase;
lpeter8a5f4702019-01-18 16:53:07 +080040import com.android.systemui.dock.DockManager;
41import com.android.systemui.dock.DockManagerFake;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070042import com.android.systemui.statusbar.phone.DozeParameters;
43import com.android.systemui.util.wakelock.WakeLock;
44import com.android.systemui.util.wakelock.WakeLockFake;
Adrian Roos84a187f2017-04-28 14:10:51 -070045import com.android.systemui.utils.hardware.FakeSensorManager;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070046
47import org.junit.Before;
48import org.junit.BeforeClass;
Geoffrey Pitscheefa3be2017-06-12 10:55:28 -040049import org.junit.Ignore;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070050import org.junit.Test;
Adrian Roos84a187f2017-04-28 14:10:51 -070051import org.junit.runner.RunWith;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070052
Adrian Roos84a187f2017-04-28 14:10:51 -070053@SmallTest
Julien Desprez7e8798c1b2019-02-08 20:12:28 +000054@Ignore("failing")
Jason Monk6dceace2018-05-15 20:24:07 -040055@RunWith(AndroidTestingRunner.class)
Jason Monka716bac2018-12-05 15:48:21 -050056@RunWithLooper
Jason Monk25a52b62017-05-23 10:42:59 -040057public class DozeTriggersTest extends SysuiTestCase {
Adrian Roosd35d4ca2017-04-19 14:31:03 -070058 private DozeTriggers mTriggers;
59 private DozeMachine mMachine;
60 private DozeHostFake mHost;
61 private AmbientDisplayConfiguration mConfig;
62 private DozeParameters mParameters;
Adrian Roos84a187f2017-04-28 14:10:51 -070063 private FakeSensorManager mSensors;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070064 private WakeLock mWakeLock;
65 private Instrumentation mInstrumentation;
Adrian Roos6023ccb2017-06-28 16:22:02 +020066 private AlarmManager mAlarmManager;
lpeter8a5f4702019-01-18 16:53:07 +080067 private DockManagerFake mDockManagerFake;
Adrian Roosd35d4ca2017-04-19 14:31:03 -070068
69 @BeforeClass
70 public static void setupSuite() {
71 // We can't use KeyguardUpdateMonitor from tests.
72 DozeLog.setRegisterKeyguardCallback(false);
73 }
74
75 @Before
76 public void setUp() throws Exception {
77 mInstrumentation = InstrumentationRegistry.getInstrumentation();
Adrian Roosd35d4ca2017-04-19 14:31:03 -070078 mMachine = mock(DozeMachine.class);
Adrian Roos6023ccb2017-06-28 16:22:02 +020079 mAlarmManager = mock(AlarmManager.class);
Adrian Roosd35d4ca2017-04-19 14:31:03 -070080 mHost = new DozeHostFake();
81 mConfig = DozeConfigurationUtil.createMockConfig();
82 mParameters = DozeConfigurationUtil.createMockParameters();
Adrian Roos84a187f2017-04-28 14:10:51 -070083 mSensors = new FakeSensorManager(mContext);
Adrian Roosd35d4ca2017-04-19 14:31:03 -070084 mWakeLock = new WakeLockFake();
lpeter8a5f4702019-01-18 16:53:07 +080085 mDockManagerFake = spy(new DockManagerFake());
86 mContext.putComponent(DockManager.class, mDockManagerFake);
Adrian Roosd35d4ca2017-04-19 14:31:03 -070087
Jason Monk6dceace2018-05-15 20:24:07 -040088 mTriggers = new DozeTriggers(mContext, mMachine, mHost, mAlarmManager, mConfig, mParameters,
lpeter8a5f4702019-01-18 16:53:07 +080089 mSensors, Handler.createAsync(Looper.myLooper()), mWakeLock, true,
90 mDockManagerFake);
Adrian Roosd35d4ca2017-04-19 14:31:03 -070091 }
92
93 @Test
Adrian Roosd35d4ca2017-04-19 14:31:03 -070094 public void testOnNotification_stillWorksAfterOneFailedProxCheck() throws Exception {
95 when(mMachine.getState()).thenReturn(DozeMachine.State.DOZE);
96
Jason Monk6dceace2018-05-15 20:24:07 -040097 mTriggers.transitionTo(DozeMachine.State.UNINITIALIZED, DozeMachine.State.INITIALIZED);
98 mTriggers.transitionTo(DozeMachine.State.INITIALIZED, DozeMachine.State.DOZE);
Adrian Roosd35d4ca2017-04-19 14:31:03 -070099
Kevina97ea052018-09-11 13:53:18 -0700100 mHost.callback.onNotificationAlerted();
Adrian Roosd35d4ca2017-04-19 14:31:03 -0700101
Jason Monk6dceace2018-05-15 20:24:07 -0400102 mSensors.getMockProximitySensor().sendProximityResult(false); /* Near */
Adrian Roosd35d4ca2017-04-19 14:31:03 -0700103
104 verify(mMachine, never()).requestState(any());
Adrian Roos84a187f2017-04-28 14:10:51 -0700105 verify(mMachine, never()).requestPulse(anyInt());
Adrian Roosd35d4ca2017-04-19 14:31:03 -0700106
Kevina97ea052018-09-11 13:53:18 -0700107 mHost.callback.onNotificationAlerted();
Adrian Roosd35d4ca2017-04-19 14:31:03 -0700108
Jason Monk6dceace2018-05-15 20:24:07 -0400109 mSensors.getMockProximitySensor().sendProximityResult(true); /* Far */
Adrian Roosd35d4ca2017-04-19 14:31:03 -0700110
Adrian Roosd7b9d102017-04-28 15:42:58 -0700111 verify(mMachine).requestPulse(anyInt());
Adrian Roosd35d4ca2017-04-19 14:31:03 -0700112 }
113
lpeter8a5f4702019-01-18 16:53:07 +0800114 @Test
115 public void testDockEventListener_registerAndUnregister() {
116 mTriggers.transitionTo(DozeMachine.State.UNINITIALIZED, DozeMachine.State.INITIALIZED);
117
118 verify(mDockManagerFake).addListener(any());
119
120 mTriggers.transitionTo(DozeMachine.State.DOZE, DozeMachine.State.FINISH);
121
122 verify(mDockManagerFake).removeListener(any());
123 }
124
125 @Test
126 public void testOnSensor_whenUndockedWithNearAndDoubleTapScreen_shouldNotWakeUp() {
127 mSensors.getMockProximitySensor().sendProximityResult(false /* far */);
128
Lucas Dupin3d053532019-01-29 12:35:22 -0800129 mTriggers.onSensor(DozeLog.REASON_SENSOR_DOUBLE_TAP,
lpeter8a5f4702019-01-18 16:53:07 +0800130 false /* sensorPerformedProxCheck */, 50 /* screenX */, 50 /* screenY */,
131 null /* rawValues */);
132
133 verify(mMachine, never()).wakeUp();
134 }
135
136 @Test
137 public void testOnSensor_whenDockedWithNearAndDoubleTapScreen_shouldWakeUp() {
138 doReturn(true).when(mDockManagerFake).isDocked();
139 mSensors.getMockProximitySensor().sendProximityResult(false /* far */);
140
Lucas Dupin3d053532019-01-29 12:35:22 -0800141 mTriggers.onSensor(DozeLog.REASON_SENSOR_DOUBLE_TAP,
lpeter8a5f4702019-01-18 16:53:07 +0800142 false /* sensorPerformedProxCheck */, 50 /* screenX */, 50 /* screenY */,
143 null /* rawValues */);
144
145 verify(mMachine).wakeUp();
146 }
147
Geoffrey Pitscheefa3be2017-06-12 10:55:28 -0400148}