blob: 8a4983c330a285814e834ecd17c86bd19386c909 [file] [log] [blame]
Adrian Roosef7a4022017-01-19 14:48:35 -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
Julia Reynolds30203152017-05-26 13:36:31 -040019import static android.app.NotificationManager.IMPORTANCE_HIGH;
20
21import static junit.framework.Assert.assertFalse;
22import static junit.framework.Assert.assertTrue;
Chris Wren621933f2017-06-14 15:59:03 -040023import static junit.framework.TestCase.fail;
Julia Reynolds30203152017-05-26 13:36:31 -040024
Chris Wren621933f2017-06-14 15:59:03 -040025import static org.mockito.ArgumentMatchers.any;
26import static org.mockito.ArgumentMatchers.anyBoolean;
27import static org.mockito.ArgumentMatchers.anyInt;
28import static org.mockito.ArgumentMatchers.anyString;
Adrian Roosef7a4022017-01-19 14:48:35 -080029import static org.mockito.Matchers.any;
30import static org.mockito.Matchers.anyBoolean;
Chris Wren621933f2017-06-14 15:59:03 -040031import static org.mockito.Matchers.anyInt;
Julia Reynolds30203152017-05-26 13:36:31 -040032import static org.mockito.Matchers.anyString;
Adrian Roosef7a4022017-01-19 14:48:35 -080033import static org.mockito.Mockito.doAnswer;
34import static org.mockito.Mockito.mock;
Chris Wren621933f2017-06-14 15:59:03 -040035import static org.mockito.Mockito.never;
36import static org.mockito.Mockito.times;
Adrian Roosef7a4022017-01-19 14:48:35 -080037import static org.mockito.Mockito.when;
Chris Wren621933f2017-06-14 15:59:03 -040038import static org.mockito.Mockito.verify;
Adrian Roosef7a4022017-01-19 14:48:35 -080039
Julia Reynolds30203152017-05-26 13:36:31 -040040import android.app.Notification;
Jason Monk51305372017-06-22 11:41:08 -040041import android.app.trust.TrustManager;
42import android.hardware.fingerprint.FingerprintManager;
Chris Wren27a52fa2017-02-01 14:21:43 -050043import android.metrics.LogMaker;
Julia Reynolds30203152017-05-26 13:36:31 -040044import android.os.Handler;
45import android.os.HandlerThread;
46import android.os.IPowerManager;
Chris Wren621933f2017-06-14 15:59:03 -040047import android.os.Message;
Julia Reynolds30203152017-05-26 13:36:31 -040048import android.os.PowerManager;
Chris Wren621933f2017-06-14 15:59:03 -040049import android.os.RemoteException;
Julia Reynolds30203152017-05-26 13:36:31 -040050import android.os.UserHandle;
51import android.service.notification.StatusBarNotification;
Adrian Roosef7a4022017-01-19 14:48:35 -080052import android.support.test.filters.SmallTest;
Chris Wren27a52fa2017-02-01 14:21:43 -050053import android.support.test.metricshelper.MetricsAsserts;
Adrian Roosef7a4022017-01-19 14:48:35 -080054import android.support.test.runner.AndroidJUnit4;
Chris Wren621933f2017-06-14 15:59:03 -040055import android.testing.AndroidTestingRunner;
56import android.testing.TestableLooper;
57import android.testing.TestableLooper.MessageHandler;
58import android.testing.TestableLooper.RunWithLooper;
Chris Wren27a52fa2017-02-01 14:21:43 -050059import android.util.DisplayMetrics;
Jason Monk51305372017-06-22 11:41:08 -040060import android.view.ViewGroup.LayoutParams;
Adrian Roosef7a4022017-01-19 14:48:35 -080061
Chris Wrenef319902017-03-07 17:58:31 -050062import com.android.internal.logging.MetricsLogger;
Chris Wren27a52fa2017-02-01 14:21:43 -050063import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
Chris Wrenef319902017-03-07 17:58:31 -050064import com.android.internal.logging.testing.FakeMetricsLogger;
Chris Wren621933f2017-06-14 15:59:03 -040065import com.android.internal.statusbar.IStatusBarService;
Adrian Roosef7a4022017-01-19 14:48:35 -080066import com.android.keyguard.KeyguardHostView.OnDismissAction;
67import com.android.systemui.SysuiTestCase;
Julia Reynolds30203152017-05-26 13:36:31 -040068import com.android.systemui.recents.misc.SystemServicesProxy;
Chris Wren27a52fa2017-02-01 14:21:43 -050069import com.android.systemui.statusbar.ActivatableNotificationView;
Jason Monk5ecf80c2017-07-06 15:28:17 -040070import com.android.systemui.statusbar.CommandQueue;
Chris Wren27a52fa2017-02-01 14:21:43 -050071import com.android.systemui.statusbar.KeyguardIndicationController;
72import com.android.systemui.statusbar.NotificationData;
Chris Wren621933f2017-06-14 15:59:03 -040073import com.android.systemui.statusbar.NotificationData.Entry;
74import com.android.systemui.statusbar.StatusBarState;
Julia Reynolds30203152017-05-26 13:36:31 -040075import com.android.systemui.statusbar.policy.HeadsUpManager;
Chris Wren27a52fa2017-02-01 14:21:43 -050076import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
Adrian Roosef7a4022017-01-19 14:48:35 -080077
78import org.junit.Before;
79import org.junit.Test;
80import org.junit.runner.RunWith;
81
Jason Monk51305372017-06-22 11:41:08 -040082import java.io.ByteArrayOutputStream;
83import java.io.PrintWriter;
Chris Wren621933f2017-06-14 15:59:03 -040084import java.util.ArrayList;
85
Adrian Roos02de4982017-02-11 09:35:54 +010086@SmallTest
Chris Wren621933f2017-06-14 15:59:03 -040087@RunWith(AndroidTestingRunner.class)
88@RunWithLooper
Jason Monk2a6ea9c2017-01-26 11:14:51 -050089public class StatusBarTest extends SysuiTestCase {
Adrian Roosef7a4022017-01-19 14:48:35 -080090
91 StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
Chris Wren27a52fa2017-02-01 14:21:43 -050092 UnlockMethodCache mUnlockMethodCache;
93 KeyguardIndicationController mKeyguardIndicationController;
94 NotificationStackScrollLayout mStackScroller;
Chris Wren621933f2017-06-14 15:59:03 -040095 TestableStatusBar mStatusBar;
Chris Wrenef319902017-03-07 17:58:31 -050096 FakeMetricsLogger mMetricsLogger;
Julia Reynolds30203152017-05-26 13:36:31 -040097 HeadsUpManager mHeadsUpManager;
98 NotificationData mNotificationData;
99 PowerManager mPowerManager;
100 SystemServicesProxy mSystemServicesProxy;
Jorim Jaggifd3b1a12017-06-06 17:04:19 -0700101 NotificationPanelView mNotificationPanelView;
Chris Wren621933f2017-06-14 15:59:03 -0400102 IStatusBarService mBarService;
103 ArrayList<Entry> mNotificationList;
Chris Wren27a52fa2017-02-01 14:21:43 -0500104 private DisplayMetrics mDisplayMetrics = new DisplayMetrics();
105
Adrian Roos02de4982017-02-11 09:35:54 +0100106 @Before
Julia Reynolds30203152017-05-26 13:36:31 -0400107 public void setup() throws Exception {
Jason Monk51305372017-06-22 11:41:08 -0400108 mContext.addMockSystemService(TrustManager.class, mock(TrustManager.class));
109 mContext.addMockSystemService(FingerprintManager.class, mock(FingerprintManager.class));
Adrian Roosef7a4022017-01-19 14:48:35 -0800110 mStatusBarKeyguardViewManager = mock(StatusBarKeyguardViewManager.class);
Chris Wren27a52fa2017-02-01 14:21:43 -0500111 mUnlockMethodCache = mock(UnlockMethodCache.class);
112 mKeyguardIndicationController = mock(KeyguardIndicationController.class);
113 mStackScroller = mock(NotificationStackScrollLayout.class);
Chris Wrenef319902017-03-07 17:58:31 -0500114 mMetricsLogger = new FakeMetricsLogger();
Julia Reynolds30203152017-05-26 13:36:31 -0400115 mHeadsUpManager = mock(HeadsUpManager.class);
116 mNotificationData = mock(NotificationData.class);
117 mSystemServicesProxy = mock(SystemServicesProxy.class);
Jorim Jaggifd3b1a12017-06-06 17:04:19 -0700118 mNotificationPanelView = mock(NotificationPanelView.class);
Jason Monk51305372017-06-22 11:41:08 -0400119 when(mNotificationPanelView.getLayoutParams()).thenReturn(new LayoutParams(0, 0));
Chris Wren621933f2017-06-14 15:59:03 -0400120 mNotificationList = mock(ArrayList.class);
Julia Reynolds30203152017-05-26 13:36:31 -0400121 IPowerManager powerManagerService = mock(IPowerManager.class);
122 HandlerThread handlerThread = new HandlerThread("TestThread");
123 handlerThread.start();
124 mPowerManager = new PowerManager(mContext, powerManagerService,
125 new Handler(handlerThread.getLooper()));
126 when(powerManagerService.isInteractive()).thenReturn(true);
Chris Wren621933f2017-06-14 15:59:03 -0400127 mBarService = mock(IStatusBarService.class);
Julia Reynolds30203152017-05-26 13:36:31 -0400128
Jason Monk8c09ac72017-03-16 11:53:40 -0400129 mDependency.injectTestDependency(MetricsLogger.class, mMetricsLogger);
Chris Wren27a52fa2017-02-01 14:21:43 -0500130 mStatusBar = new TestableStatusBar(mStatusBarKeyguardViewManager, mUnlockMethodCache,
Julia Reynolds30203152017-05-26 13:36:31 -0400131 mKeyguardIndicationController, mStackScroller, mHeadsUpManager,
Chris Wren621933f2017-06-14 15:59:03 -0400132 mNotificationData, mPowerManager, mSystemServicesProxy, mNotificationPanelView,
133 mBarService);
Jason Monk51305372017-06-22 11:41:08 -0400134 mStatusBar.mContext = mContext;
Adrian Roosef7a4022017-01-19 14:48:35 -0800135 doAnswer(invocation -> {
136 OnDismissAction onDismissAction = (OnDismissAction) invocation.getArguments()[0];
137 onDismissAction.onDismiss();
138 return null;
139 }).when(mStatusBarKeyguardViewManager).dismissWithAction(any(), any(), anyBoolean());
140
141 doAnswer(invocation -> {
142 Runnable runnable = (Runnable) invocation.getArguments()[0];
143 runnable.run();
144 return null;
145 }).when(mStatusBarKeyguardViewManager).addAfterKeyguardGoneRunnable(any());
Chris Wren27a52fa2017-02-01 14:21:43 -0500146
147 when(mStackScroller.getActivatedChild()).thenReturn(null);
Chris Wren621933f2017-06-14 15:59:03 -0400148 TestableLooper.get(this).setMessageHandler(new MessageHandler() {
149 @Override
150 public boolean onMessageHandled(Message m) {
151 if (m.getCallback() == mStatusBar.mVisibilityReporter) {
152 return false;
153 }
154 return true;
155 }
156 });
Adrian Roosef7a4022017-01-19 14:48:35 -0800157 }
158
Adrian Roos02de4982017-02-11 09:35:54 +0100159 @Test
Jason Monk5ecf80c2017-07-06 15:28:17 -0400160 public void testSetBouncerShowing_noCrash() {
161 mStatusBar.mCommandQueue = mock(CommandQueue.class);
162 mStatusBar.setBouncerShowing(true);
163 }
164
165 @Test
Adrian Roosef7a4022017-01-19 14:48:35 -0800166 public void executeRunnableDismissingKeyguard_nullRunnable_showingAndOccluded() {
167 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
168 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(true);
169
Jason Monk2a6ea9c2017-01-26 11:14:51 -0500170 mStatusBar.executeRunnableDismissingKeyguard(null, null, false, false, false);
Adrian Roosef7a4022017-01-19 14:48:35 -0800171 }
172
Adrian Roos02de4982017-02-11 09:35:54 +0100173 @Test
Adrian Roosef7a4022017-01-19 14:48:35 -0800174 public void executeRunnableDismissingKeyguard_nullRunnable_showing() {
175 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
176 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
177
Jason Monk2a6ea9c2017-01-26 11:14:51 -0500178 mStatusBar.executeRunnableDismissingKeyguard(null, null, false, false, false);
Adrian Roosef7a4022017-01-19 14:48:35 -0800179 }
180
Adrian Roos02de4982017-02-11 09:35:54 +0100181 @Test
Adrian Roosef7a4022017-01-19 14:48:35 -0800182 public void executeRunnableDismissingKeyguard_nullRunnable_notShowing() {
183 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(false);
184 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
185
Jason Monk2a6ea9c2017-01-26 11:14:51 -0500186 mStatusBar.executeRunnableDismissingKeyguard(null, null, false, false, false);
Adrian Roosef7a4022017-01-19 14:48:35 -0800187 }
188
Adrian Roos02de4982017-02-11 09:35:54 +0100189 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500190 public void lockscreenStateMetrics_notShowing() {
191 // uninteresting state, except that fingerprint must be non-zero
192 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
193 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
194 // interesting state
195 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(false);
196 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
197 when(mUnlockMethodCache.isMethodSecure()).thenReturn(false);
Chris Wren27a52fa2017-02-01 14:21:43 -0500198 mStatusBar.onKeyguardViewManagerStatesUpdated();
199
Chris Wrenef319902017-03-07 17:58:31 -0500200 MetricsAsserts.assertHasLog("missing hidden insecure lockscreen log",
201 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500202 new LogMaker(MetricsEvent.LOCKSCREEN)
203 .setType(MetricsEvent.TYPE_CLOSE)
204 .setSubtype(0));
205 }
206
Adrian Roos02de4982017-02-11 09:35:54 +0100207 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500208 public void lockscreenStateMetrics_notShowing_secure() {
209 // uninteresting state, except that fingerprint must be non-zero
210 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
211 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
212 // interesting state
213 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(false);
214 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
215 when(mUnlockMethodCache.isMethodSecure()).thenReturn(true);
216
217 mStatusBar.onKeyguardViewManagerStatesUpdated();
218
Chris Wrenef319902017-03-07 17:58:31 -0500219 MetricsAsserts.assertHasLog("missing hidden secure lockscreen log",
220 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500221 new LogMaker(MetricsEvent.LOCKSCREEN)
222 .setType(MetricsEvent.TYPE_CLOSE)
223 .setSubtype(1));
224 }
225
Adrian Roos02de4982017-02-11 09:35:54 +0100226 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500227 public void lockscreenStateMetrics_isShowing() {
228 // uninteresting state, except that fingerprint must be non-zero
229 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
230 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
231 // interesting state
232 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
233 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
234 when(mUnlockMethodCache.isMethodSecure()).thenReturn(false);
235
236 mStatusBar.onKeyguardViewManagerStatesUpdated();
237
Chris Wrenef319902017-03-07 17:58:31 -0500238 MetricsAsserts.assertHasLog("missing insecure lockscreen showing",
239 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500240 new LogMaker(MetricsEvent.LOCKSCREEN)
241 .setType(MetricsEvent.TYPE_OPEN)
242 .setSubtype(0));
243 }
244
Adrian Roos02de4982017-02-11 09:35:54 +0100245 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500246 public void lockscreenStateMetrics_isShowing_secure() {
247 // uninteresting state, except that fingerprint must be non-zero
248 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
249 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
250 // interesting state
251 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
252 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
253 when(mUnlockMethodCache.isMethodSecure()).thenReturn(true);
254
255 mStatusBar.onKeyguardViewManagerStatesUpdated();
256
Chris Wrenef319902017-03-07 17:58:31 -0500257 MetricsAsserts.assertHasLog("missing secure lockscreen showing log",
258 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500259 new LogMaker(MetricsEvent.LOCKSCREEN)
260 .setType(MetricsEvent.TYPE_OPEN)
261 .setSubtype(1));
262 }
263
Adrian Roos02de4982017-02-11 09:35:54 +0100264 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500265 public void lockscreenStateMetrics_isShowingBouncer() {
266 // uninteresting state, except that fingerprint must be non-zero
267 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
268 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
269 // interesting state
270 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
271 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(true);
272 when(mUnlockMethodCache.isMethodSecure()).thenReturn(true);
273
274 mStatusBar.onKeyguardViewManagerStatesUpdated();
275
Chris Wrenef319902017-03-07 17:58:31 -0500276 MetricsAsserts.assertHasLog("missing bouncer log",
277 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500278 new LogMaker(MetricsEvent.BOUNCER)
279 .setType(MetricsEvent.TYPE_OPEN)
280 .setSubtype(1));
281 }
282
Adrian Roos02de4982017-02-11 09:35:54 +0100283 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500284 public void onActivatedMetrics() {
285 ActivatableNotificationView view = mock(ActivatableNotificationView.class);
286 mStatusBar.onActivated(view);
287
Chris Wrenef319902017-03-07 17:58:31 -0500288 MetricsAsserts.assertHasLog("missing lockscreen note tap log",
289 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500290 new LogMaker(MetricsEvent.ACTION_LS_NOTE)
291 .setType(MetricsEvent.TYPE_ACTION));
292 }
293
Julia Reynolds30203152017-05-26 13:36:31 -0400294 @Test
295 public void testShouldPeek_nonSuppressedGroupSummary() {
296 when(mPowerManager.isScreenOn()).thenReturn(true);
297 when(mHeadsUpManager.isSnoozed(anyString())).thenReturn(false);
298 when(mNotificationData.shouldSuppressScreenOn(any())).thenReturn(false);
299 when(mNotificationData.shouldFilterOut(any())).thenReturn(false);
300 when(mSystemServicesProxy.isDreaming()).thenReturn(false);
301 when(mNotificationData.getImportance(any())).thenReturn(IMPORTANCE_HIGH);
302
303 Notification n = new Notification.Builder(getContext(), "a")
304 .setGroup("a")
305 .setGroupSummary(true)
306 .setGroupAlertBehavior(Notification.GROUP_ALERT_SUMMARY)
307 .build();
308 StatusBarNotification sbn = new StatusBarNotification("a", "a", 0, "a", 0, 0, n,
309 UserHandle.of(0), null, 0);
310 NotificationData.Entry entry = new NotificationData.Entry(sbn);
311
312 assertTrue(mStatusBar.shouldPeek(entry, sbn));
313 }
314
315 @Test
316 public void testShouldPeek_suppressedGroupSummary() {
317 when(mPowerManager.isScreenOn()).thenReturn(true);
318 when(mHeadsUpManager.isSnoozed(anyString())).thenReturn(false);
319 when(mNotificationData.shouldSuppressScreenOn(any())).thenReturn(false);
320 when(mNotificationData.shouldFilterOut(any())).thenReturn(false);
321 when(mSystemServicesProxy.isDreaming()).thenReturn(false);
322 when(mNotificationData.getImportance(any())).thenReturn(IMPORTANCE_HIGH);
323
324 Notification n = new Notification.Builder(getContext(), "a")
325 .setGroup("a")
326 .setGroupSummary(true)
327 .setGroupAlertBehavior(Notification.GROUP_ALERT_CHILDREN)
328 .build();
329 StatusBarNotification sbn = new StatusBarNotification("a", "a", 0, "a", 0, 0, n,
330 UserHandle.of(0), null, 0);
331 NotificationData.Entry entry = new NotificationData.Entry(sbn);
332
333 assertFalse(mStatusBar.shouldPeek(entry, sbn));
334 }
335
Chris Wren621933f2017-06-14 15:59:03 -0400336 @Test
337 public void testLogHidden() {
338 try {
339 mStatusBar.handleVisibleToUserChanged(false);
340 verify(mBarService, times(1)).onPanelHidden();
341 verify(mBarService, never()).onPanelRevealed(anyBoolean(), anyInt());
342 } catch (RemoteException e) {
343 fail();
344 }
345 }
346
347 @Test
348 public void testPanelOpenForPeek() {
349 when(mHeadsUpManager.hasPinnedHeadsUp()).thenReturn(true);
350 when(mNotificationData.getActiveNotifications()).thenReturn(mNotificationList);
351 when(mNotificationList.size()).thenReturn(5);
352 when(mNotificationPanelView.isFullyCollapsed()).thenReturn(true);
353 mStatusBar.setBarStateForTest(StatusBarState.SHADE);
354
355 try {
356 mStatusBar.handleVisibleToUserChanged(true);
357
358 verify(mBarService, never()).onPanelHidden();
359 verify(mBarService, times(1)).onPanelRevealed(false, 1);
360 } catch (RemoteException e) {
361 fail();
362 }
363 TestableLooper.get(this).processAllMessages();
364 }
365
366 @Test
367 public void testPanelOpenAndClear() {
368 when(mHeadsUpManager.hasPinnedHeadsUp()).thenReturn(false);
369 when(mNotificationData.getActiveNotifications()).thenReturn(mNotificationList);
370 when(mNotificationList.size()).thenReturn(5);
371 when(mNotificationPanelView.isFullyCollapsed()).thenReturn(false);
372 mStatusBar.setBarStateForTest(StatusBarState.SHADE);
373
374 try {
375 mStatusBar.handleVisibleToUserChanged(true);
376
377 verify(mBarService, never()).onPanelHidden();
378 verify(mBarService, times(1)).onPanelRevealed(true, 5);
379 } catch (RemoteException e) {
380 fail();
381 }
382 TestableLooper.get(this).processAllMessages();
383 }
384
385 @Test
386 public void testPanelOpenAndNoClear() {
387 when(mHeadsUpManager.hasPinnedHeadsUp()).thenReturn(false);
388 when(mNotificationData.getActiveNotifications()).thenReturn(mNotificationList);
389 when(mNotificationList.size()).thenReturn(5);
390 when(mNotificationPanelView.isFullyCollapsed()).thenReturn(false);
391 mStatusBar.setBarStateForTest(StatusBarState.KEYGUARD);
392
393 try {
394 mStatusBar.handleVisibleToUserChanged(true);
395
396 verify(mBarService, never()).onPanelHidden();
397 verify(mBarService, times(1)).onPanelRevealed(false, 5);
398 } catch (RemoteException e) {
399 fail();
400 }
401 TestableLooper.get(this).processAllMessages();
402 }
403
Jason Monk51305372017-06-22 11:41:08 -0400404 @Test
405 public void testDump_DoesNotCrash() {
406 mStatusBar.dump(null, new PrintWriter(new ByteArrayOutputStream()), null);
407 }
408
Jason Monk2a6ea9c2017-01-26 11:14:51 -0500409 static class TestableStatusBar extends StatusBar {
Chris Wren27a52fa2017-02-01 14:21:43 -0500410 public TestableStatusBar(StatusBarKeyguardViewManager man,
411 UnlockMethodCache unlock, KeyguardIndicationController key,
Julia Reynolds30203152017-05-26 13:36:31 -0400412 NotificationStackScrollLayout stack, HeadsUpManager hum, NotificationData nd,
Chris Wren621933f2017-06-14 15:59:03 -0400413 PowerManager pm, SystemServicesProxy ssp, NotificationPanelView panelView,
414 IStatusBarService barService) {
Adrian Roosef7a4022017-01-19 14:48:35 -0800415 mStatusBarKeyguardViewManager = man;
Chris Wren27a52fa2017-02-01 14:21:43 -0500416 mUnlockMethodCache = unlock;
417 mKeyguardIndicationController = key;
418 mStackScroller = stack;
Julia Reynolds30203152017-05-26 13:36:31 -0400419 mHeadsUpManager = hum;
420 mNotificationData = nd;
421 mUseHeadsUp = true;
422 mPowerManager = pm;
423 mSystemServicesProxy = ssp;
Jorim Jaggifd3b1a12017-06-06 17:04:19 -0700424 mNotificationPanel = panelView;
Chris Wren621933f2017-06-14 15:59:03 -0400425 mBarService = barService;
Adrian Roosef7a4022017-01-19 14:48:35 -0800426 }
427
Chris Wren621933f2017-06-14 15:59:03 -0400428 public void setBarStateForTest(int state) {
429 mState = state;
Adrian Roosef7a4022017-01-19 14:48:35 -0800430 }
431 }
Adrian Roos02de4982017-02-11 09:35:54 +0100432}