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.doze; 18 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.INITIALIZED; 23 import static com.android.systemui.doze.DozeMachine.State.UNINITIALIZED; 24 25 import static org.mockito.ArgumentMatchers.any; 26 import static org.mockito.ArgumentMatchers.anyInt; 27 import static org.mockito.ArgumentMatchers.anyLong; 28 import static org.mockito.ArgumentMatchers.eq; 29 import static org.mockito.Mockito.clearInvocations; 30 import static org.mockito.Mockito.verify; 31 import static org.mockito.Mockito.when; 32 33 import android.app.AlarmManager; 34 import android.os.Handler; 35 import android.os.HandlerThread; 36 import android.testing.TestableLooper; 37 38 import androidx.test.filters.SmallTest; 39 import androidx.test.runner.AndroidJUnit4; 40 41 import com.android.systemui.DejankUtils; 42 import com.android.systemui.SysuiTestCase; 43 import com.android.systemui.statusbar.phone.DozeParameters; 44 import com.android.systemui.util.wakelock.WakeLockFake; 45 46 import org.junit.After; 47 import org.junit.Before; 48 import org.junit.Test; 49 import org.junit.runner.RunWith; 50 import org.mockito.Mock; 51 import org.mockito.MockitoAnnotations; 52 53 @RunWith(AndroidJUnit4.class) 54 @SmallTest 55 @TestableLooper.RunWithLooper 56 public class DozeUiTest extends SysuiTestCase { 57 58 @Mock 59 private AlarmManager mAlarmManager; 60 @Mock 61 private DozeMachine mMachine; 62 @Mock 63 private DozeParameters mDozeParameters; 64 @Mock 65 private DozeHost mHost; 66 @Mock 67 private DozeLog mDozeLog; 68 private WakeLockFake mWakeLock; 69 private Handler mHandler; 70 private HandlerThread mHandlerThread; 71 private DozeUi mDozeUi; 72 73 @Before setUp()74 public void setUp() throws Exception { 75 allowTestableLooperAsMainThread(); 76 MockitoAnnotations.initMocks(this); 77 DejankUtils.setImmediate(true); 78 79 mHandlerThread = new HandlerThread("DozeUiTest"); 80 mHandlerThread.start(); 81 mWakeLock = new WakeLockFake(); 82 mHandler = mHandlerThread.getThreadHandler(); 83 84 mDozeUi = new DozeUi(mContext, mAlarmManager, mWakeLock, mHost, mHandler, 85 mDozeParameters, mDozeLog); 86 mDozeUi.setDozeMachine(mMachine); 87 } 88 89 @After tearDown()90 public void tearDown() throws Exception { 91 DejankUtils.setImmediate(false); 92 mHandlerThread.quit(); 93 mHandler = null; 94 mHandlerThread = null; 95 } 96 97 @Test pausingAndUnpausingAod_registersTimeTickAfterUnpausing()98 public void pausingAndUnpausingAod_registersTimeTickAfterUnpausing() { 99 mDozeUi.transitionTo(UNINITIALIZED, INITIALIZED); 100 mDozeUi.transitionTo(INITIALIZED, DOZE_AOD); 101 mDozeUi.transitionTo(DOZE_AOD, DOZE_AOD_PAUSED); 102 103 clearInvocations(mAlarmManager); 104 105 mDozeUi.transitionTo(DOZE_AOD_PAUSED, DOZE_AOD); 106 107 verify(mAlarmManager).setExact(anyInt(), anyLong(), eq("doze_time_tick"), any(), any()); 108 } 109 110 @Test transitionSetsAnimateWakeup_noAlwaysOn()111 public void transitionSetsAnimateWakeup_noAlwaysOn() { 112 mDozeUi.transitionTo(UNINITIALIZED, DOZE); 113 verify(mHost).setAnimateWakeup(eq(false)); 114 } 115 116 @Test transitionSetsAnimateWakeup_alwaysOn()117 public void transitionSetsAnimateWakeup_alwaysOn() { 118 when(mDozeParameters.getAlwaysOn()).thenReturn(true); 119 when(mDozeParameters.getDisplayNeedsBlanking()).thenReturn(false); 120 mDozeUi.transitionTo(UNINITIALIZED, DOZE); 121 verify(mHost).setAnimateWakeup(eq(true)); 122 } 123 } 124