blob: 87699b816c07a8b06e5988cd15ae4158fd2bc4f6 [file] [log] [blame]
Christine Franks69c2d1d2017-01-23 14:45:29 -08001/*
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.statusbar.phone;
18
Narayan Kamathfa0ec0c2019-02-22 17:49:38 +000019import static org.mockito.Mockito.doReturn;
Jason Monka26641f2018-12-27 14:20:53 -050020import static org.mockito.Mockito.mock;
Christine Franks69c2d1d2017-01-23 14:45:29 -080021import static org.mockito.Mockito.never;
22import static org.mockito.Mockito.verify;
23
Christine Franksea7d71b2018-07-03 14:46:07 -070024import android.hardware.display.ColorDisplayManager;
Christine Franks71e003e2019-01-24 14:40:20 -080025import android.hardware.display.NightDisplayListener;
Amin Shaikh35855742018-03-09 10:54:50 -050026import android.os.Handler;
Jason Monkc141dfd2017-07-06 09:51:47 -040027import android.support.test.filters.SmallTest;
28import android.testing.AndroidTestingRunner;
Geoffrey Pitsch05b81b42017-10-06 13:47:46 -040029import android.testing.TestableLooper;
Jason Monkc141dfd2017-07-06 09:51:47 -040030import android.testing.TestableLooper.RunWithLooper;
Christine Franksea7d71b2018-07-03 14:46:07 -070031
Christine Franks69c2d1d2017-01-23 14:45:29 -080032import com.android.systemui.SysuiTestCase;
Amin Shaikh35855742018-03-09 10:54:50 -050033import com.android.systemui.qs.AutoAddTracker;
Jason Monke5b770e2017-03-03 21:49:29 -050034import com.android.systemui.qs.QSTileHost;
Narayan Kamathfa0ec0c2019-02-22 17:49:38 +000035import com.android.systemui.statusbar.policy.CastController;
36import com.android.systemui.statusbar.policy.CastController.CastDevice;
Jason Monka26641f2018-12-27 14:20:53 -050037import com.android.systemui.statusbar.policy.DataSaverController;
38import com.android.systemui.statusbar.policy.HotspotController;
Christine Franksea7d71b2018-07-03 14:46:07 -070039
Christine Franks69c2d1d2017-01-23 14:45:29 -080040import org.junit.Before;
41import org.junit.Test;
42import org.junit.runner.RunWith;
Amin Shaikh4bd8e052018-01-29 09:52:15 -050043import org.mockito.Mock;
Amin Shaikh35855742018-03-09 10:54:50 -050044import org.mockito.MockitoAnnotations;
Christine Franks69c2d1d2017-01-23 14:45:29 -080045
Narayan Kamathfa0ec0c2019-02-22 17:49:38 +000046import java.util.Collections;
47import java.util.Set;
48
Jason Monk340b0e52017-03-08 14:57:56 -050049@RunWith(AndroidTestingRunner.class)
Jason Monkc141dfd2017-07-06 09:51:47 -040050@RunWithLooper
Jason Monkfba8faf2017-05-23 10:42:59 -040051@SmallTest
Christine Franks69c2d1d2017-01-23 14:45:29 -080052public class AutoTileManagerTest extends SysuiTestCase {
53
Amin Shaikh4bd8e052018-01-29 09:52:15 -050054 @Mock private QSTileHost mQsTileHost;
Amin Shaikh35855742018-03-09 10:54:50 -050055 @Mock private AutoAddTracker mAutoAddTracker;
Narayan Kamathfa0ec0c2019-02-22 17:49:38 +000056 @Mock private CastController mCastController;
Amin Shaikh4bd8e052018-01-29 09:52:15 -050057
Christine Franks69c2d1d2017-01-23 14:45:29 -080058 private AutoTileManager mAutoTileManager;
59
60 @Before
61 public void setUp() throws Exception {
Amin Shaikh35855742018-03-09 10:54:50 -050062 MockitoAnnotations.initMocks(this);
63 mAutoTileManager = new AutoTileManager(mContext, mAutoAddTracker, mQsTileHost,
Jason Monka26641f2018-12-27 14:20:53 -050064 Handler.createAsync(TestableLooper.get(this).getLooper()),
65 mock(HotspotController.class),
66 mock(DataSaverController.class),
67 mock(ManagedProfileController.class),
Narayan Kamathfa0ec0c2019-02-22 17:49:38 +000068 mock(NightDisplayListener.class),
69 mCastController);
Christine Franks69c2d1d2017-01-23 14:45:29 -080070 }
71
72 @Test
73 public void nightTileAdded_whenActivated() {
Christine Franksea7d71b2018-07-03 14:46:07 -070074 if (!ColorDisplayManager.isNightDisplayAvailable(mContext)) {
Christine Franks69c2d1d2017-01-23 14:45:29 -080075 return;
76 }
Christine Franks71e003e2019-01-24 14:40:20 -080077 mAutoTileManager.mNightDisplayCallback.onActivated(true);
Christine Franks69c2d1d2017-01-23 14:45:29 -080078 verify(mQsTileHost).addTile("night");
79 }
80
81 @Test
82 public void nightTileNotAdded_whenDeactivated() {
Christine Franksea7d71b2018-07-03 14:46:07 -070083 if (!ColorDisplayManager.isNightDisplayAvailable(mContext)) {
Christine Franks69c2d1d2017-01-23 14:45:29 -080084 return;
85 }
Christine Franks71e003e2019-01-24 14:40:20 -080086 mAutoTileManager.mNightDisplayCallback.onActivated(false);
Christine Franks69c2d1d2017-01-23 14:45:29 -080087 verify(mQsTileHost, never()).addTile("night");
88 }
89
90 @Test
91 public void nightTileAdded_whenNightModeTwilight() {
Christine Franksea7d71b2018-07-03 14:46:07 -070092 if (!ColorDisplayManager.isNightDisplayAvailable(mContext)) {
Christine Franks69c2d1d2017-01-23 14:45:29 -080093 return;
94 }
Christine Franks71e003e2019-01-24 14:40:20 -080095 mAutoTileManager.mNightDisplayCallback.onAutoModeChanged(
Christine Franks83cc5412018-07-03 14:46:07 -070096 ColorDisplayManager.AUTO_MODE_TWILIGHT);
Christine Franks69c2d1d2017-01-23 14:45:29 -080097 verify(mQsTileHost).addTile("night");
98 }
99
100 @Test
101 public void nightTileAdded_whenNightModeCustom() {
Christine Franksea7d71b2018-07-03 14:46:07 -0700102 if (!ColorDisplayManager.isNightDisplayAvailable(mContext)) {
Christine Franks69c2d1d2017-01-23 14:45:29 -0800103 return;
104 }
Christine Franks71e003e2019-01-24 14:40:20 -0800105 mAutoTileManager.mNightDisplayCallback.onAutoModeChanged(
Christine Franks83cc5412018-07-03 14:46:07 -0700106 ColorDisplayManager.AUTO_MODE_CUSTOM_TIME);
Christine Franks69c2d1d2017-01-23 14:45:29 -0800107 verify(mQsTileHost).addTile("night");
108 }
109
110 @Test
111 public void nightTileNotAdded_whenNightModeDisabled() {
Christine Franksea7d71b2018-07-03 14:46:07 -0700112 if (!ColorDisplayManager.isNightDisplayAvailable(mContext)) {
Christine Franks69c2d1d2017-01-23 14:45:29 -0800113 return;
114 }
Christine Franks71e003e2019-01-24 14:40:20 -0800115 mAutoTileManager.mNightDisplayCallback.onAutoModeChanged(
Christine Franks83cc5412018-07-03 14:46:07 -0700116 ColorDisplayManager.AUTO_MODE_DISABLED);
Christine Franks69c2d1d2017-01-23 14:45:29 -0800117 verify(mQsTileHost, never()).addTile("night");
118 }
Narayan Kamathfa0ec0c2019-02-22 17:49:38 +0000119
120 private static Set<CastDevice> buildFakeCastDevice(boolean isCasting) {
121 CastDevice cd = new CastDevice();
122 cd.state = isCasting ? CastDevice.STATE_CONNECTED : CastDevice.STATE_DISCONNECTED;
123 return Collections.singleton(cd);
124 }
125
126 @Test
127 public void castTileAdded_whenDeviceIsCasting() {
128 doReturn(buildFakeCastDevice(true)).when(mCastController).getCastDevices();
129 mAutoTileManager.mCastCallback.onCastDevicesChanged();
130 verify(mQsTileHost).addTile("cast");
131 }
132
133 @Test
134 public void castTileNotAdded_whenDeviceIsNotCasting() {
135 doReturn(buildFakeCastDevice(false)).when(mCastController).getCastDevices();
136 mAutoTileManager.mCastCallback.onCastDevicesChanged();
137 verify(mQsTileHost, never()).addTile("cast");
138 }
Christine Franks69c2d1d2017-01-23 14:45:29 -0800139}