blob: 1248cbbd335d015f69197d916d2f4eb675de9b75 [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.testing.AndroidTestingRunner;
Geoffrey Pitsch05b81b42017-10-06 13:47:46 -040028import android.testing.TestableLooper;
Jason Monkc141dfd2017-07-06 09:51:47 -040029import android.testing.TestableLooper.RunWithLooper;
Christine Franksea7d71b2018-07-03 14:46:07 -070030
Brett Chabot84151d92019-02-27 15:37:59 -080031import androidx.test.filters.SmallTest;
32
Christine Franks69c2d1d2017-01-23 14:45:29 -080033import com.android.systemui.SysuiTestCase;
Amin Shaikh35855742018-03-09 10:54:50 -050034import com.android.systemui.qs.AutoAddTracker;
Jason Monke5b770e2017-03-03 21:49:29 -050035import com.android.systemui.qs.QSTileHost;
Narayan Kamathfa0ec0c2019-02-22 17:49:38 +000036import com.android.systemui.statusbar.policy.CastController;
37import com.android.systemui.statusbar.policy.CastController.CastDevice;
Jason Monka26641f2018-12-27 14:20:53 -050038import com.android.systemui.statusbar.policy.DataSaverController;
39import com.android.systemui.statusbar.policy.HotspotController;
Christine Franksea7d71b2018-07-03 14:46:07 -070040
Christine Franks69c2d1d2017-01-23 14:45:29 -080041import org.junit.Before;
42import org.junit.Test;
43import org.junit.runner.RunWith;
Amin Shaikh4bd8e052018-01-29 09:52:15 -050044import org.mockito.Mock;
Amin Shaikh35855742018-03-09 10:54:50 -050045import org.mockito.MockitoAnnotations;
Christine Franks69c2d1d2017-01-23 14:45:29 -080046
Narayan Kamathfa0ec0c2019-02-22 17:49:38 +000047import java.util.Collections;
48import java.util.Set;
49
Jason Monk340b0e52017-03-08 14:57:56 -050050@RunWith(AndroidTestingRunner.class)
Jason Monkc141dfd2017-07-06 09:51:47 -040051@RunWithLooper
Jason Monkfba8faf2017-05-23 10:42:59 -040052@SmallTest
Christine Franks69c2d1d2017-01-23 14:45:29 -080053public class AutoTileManagerTest extends SysuiTestCase {
54
Amin Shaikh4bd8e052018-01-29 09:52:15 -050055 @Mock private QSTileHost mQsTileHost;
Amin Shaikh35855742018-03-09 10:54:50 -050056 @Mock private AutoAddTracker mAutoAddTracker;
Narayan Kamathfa0ec0c2019-02-22 17:49:38 +000057 @Mock private CastController mCastController;
Amin Shaikh4bd8e052018-01-29 09:52:15 -050058
Christine Franks69c2d1d2017-01-23 14:45:29 -080059 private AutoTileManager mAutoTileManager;
60
61 @Before
62 public void setUp() throws Exception {
Amin Shaikh35855742018-03-09 10:54:50 -050063 MockitoAnnotations.initMocks(this);
64 mAutoTileManager = new AutoTileManager(mContext, mAutoAddTracker, mQsTileHost,
Jason Monka26641f2018-12-27 14:20:53 -050065 Handler.createAsync(TestableLooper.get(this).getLooper()),
66 mock(HotspotController.class),
67 mock(DataSaverController.class),
68 mock(ManagedProfileController.class),
Narayan Kamathfa0ec0c2019-02-22 17:49:38 +000069 mock(NightDisplayListener.class),
70 mCastController);
Christine Franks69c2d1d2017-01-23 14:45:29 -080071 }
72
73 @Test
74 public void nightTileAdded_whenActivated() {
Christine Franksea7d71b2018-07-03 14:46:07 -070075 if (!ColorDisplayManager.isNightDisplayAvailable(mContext)) {
Christine Franks69c2d1d2017-01-23 14:45:29 -080076 return;
77 }
Christine Franks71e003e2019-01-24 14:40:20 -080078 mAutoTileManager.mNightDisplayCallback.onActivated(true);
Christine Franks69c2d1d2017-01-23 14:45:29 -080079 verify(mQsTileHost).addTile("night");
80 }
81
82 @Test
83 public void nightTileNotAdded_whenDeactivated() {
Christine Franksea7d71b2018-07-03 14:46:07 -070084 if (!ColorDisplayManager.isNightDisplayAvailable(mContext)) {
Christine Franks69c2d1d2017-01-23 14:45:29 -080085 return;
86 }
Christine Franks71e003e2019-01-24 14:40:20 -080087 mAutoTileManager.mNightDisplayCallback.onActivated(false);
Christine Franks69c2d1d2017-01-23 14:45:29 -080088 verify(mQsTileHost, never()).addTile("night");
89 }
90
91 @Test
92 public void nightTileAdded_whenNightModeTwilight() {
Christine Franksea7d71b2018-07-03 14:46:07 -070093 if (!ColorDisplayManager.isNightDisplayAvailable(mContext)) {
Christine Franks69c2d1d2017-01-23 14:45:29 -080094 return;
95 }
Christine Franks71e003e2019-01-24 14:40:20 -080096 mAutoTileManager.mNightDisplayCallback.onAutoModeChanged(
Christine Franks83cc5412018-07-03 14:46:07 -070097 ColorDisplayManager.AUTO_MODE_TWILIGHT);
Christine Franks69c2d1d2017-01-23 14:45:29 -080098 verify(mQsTileHost).addTile("night");
99 }
100
101 @Test
102 public void nightTileAdded_whenNightModeCustom() {
Christine Franksea7d71b2018-07-03 14:46:07 -0700103 if (!ColorDisplayManager.isNightDisplayAvailable(mContext)) {
Christine Franks69c2d1d2017-01-23 14:45:29 -0800104 return;
105 }
Christine Franks71e003e2019-01-24 14:40:20 -0800106 mAutoTileManager.mNightDisplayCallback.onAutoModeChanged(
Christine Franks83cc5412018-07-03 14:46:07 -0700107 ColorDisplayManager.AUTO_MODE_CUSTOM_TIME);
Christine Franks69c2d1d2017-01-23 14:45:29 -0800108 verify(mQsTileHost).addTile("night");
109 }
110
111 @Test
112 public void nightTileNotAdded_whenNightModeDisabled() {
Christine Franksea7d71b2018-07-03 14:46:07 -0700113 if (!ColorDisplayManager.isNightDisplayAvailable(mContext)) {
Christine Franks69c2d1d2017-01-23 14:45:29 -0800114 return;
115 }
Christine Franks71e003e2019-01-24 14:40:20 -0800116 mAutoTileManager.mNightDisplayCallback.onAutoModeChanged(
Christine Franks83cc5412018-07-03 14:46:07 -0700117 ColorDisplayManager.AUTO_MODE_DISABLED);
Christine Franks69c2d1d2017-01-23 14:45:29 -0800118 verify(mQsTileHost, never()).addTile("night");
119 }
Narayan Kamathfa0ec0c2019-02-22 17:49:38 +0000120
121 private static Set<CastDevice> buildFakeCastDevice(boolean isCasting) {
122 CastDevice cd = new CastDevice();
123 cd.state = isCasting ? CastDevice.STATE_CONNECTED : CastDevice.STATE_DISCONNECTED;
124 return Collections.singleton(cd);
125 }
126
127 @Test
128 public void castTileAdded_whenDeviceIsCasting() {
129 doReturn(buildFakeCastDevice(true)).when(mCastController).getCastDevices();
130 mAutoTileManager.mCastCallback.onCastDevicesChanged();
131 verify(mQsTileHost).addTile("cast");
132 }
133
134 @Test
135 public void castTileNotAdded_whenDeviceIsNotCasting() {
136 doReturn(buildFakeCastDevice(false)).when(mCastController).getCastDevices();
137 mAutoTileManager.mCastCallback.onCastDevicesChanged();
138 verify(mQsTileHost, never()).addTile("cast");
139 }
Christine Franks69c2d1d2017-01-23 14:45:29 -0800140}