17517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin/*
27517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin * Copyright (C) 2017 The Android Open Source Project
37517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin *
47517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin * Licensed under the Apache License, Version 2.0 (the "License");
57517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin * you may not use this file except in compliance with the License.
67517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin * You may obtain a copy of the License at
77517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin *
87517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin *      http://www.apache.org/licenses/LICENSE-2.0
97517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin *
107517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin * Unless required by applicable law or agreed to in writing, software
117517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin * distributed under the License is distributed on an "AS IS" BASIS,
127517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin * See the License for the specific language governing permissions and
147517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin * limitations under the License
157517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin */
167517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin
177517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupinpackage com.android.systemui.doze;
187517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin
19660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupinimport static org.mockito.ArgumentMatchers.anyBoolean;
207517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupinimport static org.mockito.ArgumentMatchers.eq;
217517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupinimport static org.mockito.Mockito.mock;
22660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupinimport static org.mockito.Mockito.reset;
237517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupinimport static org.mockito.Mockito.verify;
24660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupinimport static org.mockito.Mockito.when;
257517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin
267517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupinimport android.app.IWallpaperManager;
277517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupinimport android.os.RemoteException;
287517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupinimport android.support.test.filters.SmallTest;
297517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin
30660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupinimport com.android.keyguard.KeyguardUpdateMonitor;
317517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupinimport com.android.systemui.SysuiTestCase;
32660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupinimport com.android.systemui.statusbar.phone.DozeParameters;
337517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin
34660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupinimport org.junit.Before;
357517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupinimport org.junit.Test;
367517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupinimport org.junit.runner.RunWith;
377517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupinimport org.junit.runners.JUnit4;
38660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupinimport org.mockito.Mock;
39660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupinimport org.mockito.MockitoAnnotations;
407517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin
417517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin@RunWith(JUnit4.class)
427517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin@SmallTest
437517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupinpublic class DozeWallpaperStateTest extends SysuiTestCase {
447517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin
45660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin    private DozeWallpaperState mDozeWallpaperState;
46660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin    @Mock IWallpaperManager mIWallpaperManager;
47660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin    @Mock DozeParameters mDozeParameters;
48660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin
49660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin    @Before
50660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin    public void setUp() {
51660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        MockitoAnnotations.initMocks(this);
5230c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin        mDozeWallpaperState = new DozeWallpaperState(mIWallpaperManager, mDozeParameters);
53660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin    }
54660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin
557517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin    @Test
567517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin    public void testDreamNotification() throws RemoteException {
57660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        // Pre-condition
58660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        when(mDozeParameters.getAlwaysOn()).thenReturn(true);
59660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin
60660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        mDozeWallpaperState.transitionTo(DozeMachine.State.UNINITIALIZED,
617517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin                DozeMachine.State.DOZE_AOD);
62660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        verify(mIWallpaperManager).setInAmbientMode(eq(true), anyBoolean());
63660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        mDozeWallpaperState.transitionTo(DozeMachine.State.DOZE_AOD, DozeMachine.State.FINISH);
64660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        verify(mIWallpaperManager).setInAmbientMode(eq(false), anyBoolean());
65660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin
66660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        // Make sure we're sending false when AoD is off
67660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        reset(mDozeParameters);
68660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        mDozeWallpaperState.transitionTo(DozeMachine.State.FINISH, DozeMachine.State.DOZE_AOD);
69660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        verify(mIWallpaperManager).setInAmbientMode(eq(false), anyBoolean());
70660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin    }
71660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin
72660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin    @Test
73660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin    public void testAnimates_whenSupported() throws RemoteException {
74660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        // Pre-conditions
75660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        when(mDozeParameters.getDisplayNeedsBlanking()).thenReturn(false);
7616cfe45dec96154d37b36364f67cedce16ca2484Lucas Dupin        when(mDozeParameters.shouldControlScreenOff()).thenReturn(true);
77660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        when(mDozeParameters.getAlwaysOn()).thenReturn(true);
78660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin
79660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        mDozeWallpaperState.transitionTo(DozeMachine.State.UNINITIALIZED,
80660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin                DozeMachine.State.DOZE_AOD);
81660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        verify(mIWallpaperManager).setInAmbientMode(eq(true), eq(true));
82660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin
83660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        mDozeWallpaperState.transitionTo(DozeMachine.State.DOZE_AOD, DozeMachine.State.FINISH);
84660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        verify(mIWallpaperManager).setInAmbientMode(eq(false), eq(true));
85660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin    }
86660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin
87660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin    @Test
88660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin    public void testDoesNotAnimate_whenNotSupported() throws RemoteException {
89660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        // Pre-conditions
90660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        when(mDozeParameters.getDisplayNeedsBlanking()).thenReturn(true);
91660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        when(mDozeParameters.getAlwaysOn()).thenReturn(true);
9216cfe45dec96154d37b36364f67cedce16ca2484Lucas Dupin        when(mDozeParameters.shouldControlScreenOff()).thenReturn(false);
93660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin
94660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        mDozeWallpaperState.transitionTo(DozeMachine.State.UNINITIALIZED,
95660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin                DozeMachine.State.DOZE_AOD);
96660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        verify(mIWallpaperManager).setInAmbientMode(eq(true), eq(false));
97660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin
98660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        mDozeWallpaperState.transitionTo(DozeMachine.State.DOZE_AOD, DozeMachine.State.FINISH);
99660d573e438c4b1a044fa399bb99272a0bcc9f22Lucas Dupin        verify(mIWallpaperManager).setInAmbientMode(eq(false), eq(false));
1007517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin    }
10130c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin
10230c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin    @Test
10330c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin    public void testTransitionTo_requestPulseIsAmbientMode() throws RemoteException {
10430c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin        mDozeWallpaperState.transitionTo(DozeMachine.State.DOZE,
10530c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin                DozeMachine.State.DOZE_REQUEST_PULSE);
10630c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin        verify(mIWallpaperManager).setInAmbientMode(eq(true), eq(false));
10730c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin    }
10830c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin
10930c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin    @Test
11030c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin    public void testTransitionTo_pulseIsAmbientMode() throws RemoteException {
11130c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin        mDozeWallpaperState.transitionTo(DozeMachine.State.DOZE_REQUEST_PULSE,
11230c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin                DozeMachine.State.DOZE_PULSING);
11330c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin        verify(mIWallpaperManager).setInAmbientMode(eq(true), eq(false));
11430c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin    }
11530c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin
11630c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin    @Test
11730c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin    public void testTransitionTo_animatesWhenWakingUpFromPulse() throws RemoteException {
11830c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin        mDozeWallpaperState.transitionTo(DozeMachine.State.DOZE_REQUEST_PULSE,
11930c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin                DozeMachine.State.DOZE_PULSING);
12030c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin        reset(mIWallpaperManager);
12130c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin        mDozeWallpaperState.transitionTo(DozeMachine.State.DOZE_PULSING,
12230c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin                DozeMachine.State.FINISH);
12330c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin        verify(mIWallpaperManager).setInAmbientMode(eq(false), eq(true));
12430c75471492ec7862ab7fbd56358a75178e0ed52Lucas Dupin    }
1257517b5dcce8dde3a22177857b8fff6439fd98d82Lucas Dupin}
126