blob: 17ca92458bcf4ba9962a7569b477da16beb1b8b2 [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;
70import com.android.systemui.statusbar.KeyguardIndicationController;
71import com.android.systemui.statusbar.NotificationData;
Chris Wren621933f2017-06-14 15:59:03 -040072import com.android.systemui.statusbar.NotificationData.Entry;
73import com.android.systemui.statusbar.StatusBarState;
Julia Reynolds30203152017-05-26 13:36:31 -040074import com.android.systemui.statusbar.policy.HeadsUpManager;
Chris Wren27a52fa2017-02-01 14:21:43 -050075import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
Adrian Roosef7a4022017-01-19 14:48:35 -080076
77import org.junit.Before;
78import org.junit.Test;
79import org.junit.runner.RunWith;
80
Jason Monk51305372017-06-22 11:41:08 -040081import java.io.ByteArrayOutputStream;
82import java.io.PrintWriter;
Chris Wren621933f2017-06-14 15:59:03 -040083import java.util.ArrayList;
84
Adrian Roos02de4982017-02-11 09:35:54 +010085@SmallTest
Chris Wren621933f2017-06-14 15:59:03 -040086@RunWith(AndroidTestingRunner.class)
87@RunWithLooper
Jason Monk2a6ea9c2017-01-26 11:14:51 -050088public class StatusBarTest extends SysuiTestCase {
Adrian Roosef7a4022017-01-19 14:48:35 -080089
90 StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
Chris Wren27a52fa2017-02-01 14:21:43 -050091 UnlockMethodCache mUnlockMethodCache;
92 KeyguardIndicationController mKeyguardIndicationController;
93 NotificationStackScrollLayout mStackScroller;
Chris Wren621933f2017-06-14 15:59:03 -040094 TestableStatusBar mStatusBar;
Chris Wrenef319902017-03-07 17:58:31 -050095 FakeMetricsLogger mMetricsLogger;
Julia Reynolds30203152017-05-26 13:36:31 -040096 HeadsUpManager mHeadsUpManager;
97 NotificationData mNotificationData;
98 PowerManager mPowerManager;
99 SystemServicesProxy mSystemServicesProxy;
Jorim Jaggifd3b1a12017-06-06 17:04:19 -0700100 NotificationPanelView mNotificationPanelView;
Chris Wren621933f2017-06-14 15:59:03 -0400101 IStatusBarService mBarService;
102 ArrayList<Entry> mNotificationList;
Chris Wren27a52fa2017-02-01 14:21:43 -0500103 private DisplayMetrics mDisplayMetrics = new DisplayMetrics();
104
Adrian Roos02de4982017-02-11 09:35:54 +0100105 @Before
Julia Reynolds30203152017-05-26 13:36:31 -0400106 public void setup() throws Exception {
Jason Monk51305372017-06-22 11:41:08 -0400107 mContext.addMockSystemService(TrustManager.class, mock(TrustManager.class));
108 mContext.addMockSystemService(FingerprintManager.class, mock(FingerprintManager.class));
Adrian Roosef7a4022017-01-19 14:48:35 -0800109 mStatusBarKeyguardViewManager = mock(StatusBarKeyguardViewManager.class);
Chris Wren27a52fa2017-02-01 14:21:43 -0500110 mUnlockMethodCache = mock(UnlockMethodCache.class);
111 mKeyguardIndicationController = mock(KeyguardIndicationController.class);
112 mStackScroller = mock(NotificationStackScrollLayout.class);
Chris Wrenef319902017-03-07 17:58:31 -0500113 mMetricsLogger = new FakeMetricsLogger();
Julia Reynolds30203152017-05-26 13:36:31 -0400114 mHeadsUpManager = mock(HeadsUpManager.class);
115 mNotificationData = mock(NotificationData.class);
116 mSystemServicesProxy = mock(SystemServicesProxy.class);
Jorim Jaggifd3b1a12017-06-06 17:04:19 -0700117 mNotificationPanelView = mock(NotificationPanelView.class);
Jason Monk51305372017-06-22 11:41:08 -0400118 when(mNotificationPanelView.getLayoutParams()).thenReturn(new LayoutParams(0, 0));
Chris Wren621933f2017-06-14 15:59:03 -0400119 mNotificationList = mock(ArrayList.class);
Julia Reynolds30203152017-05-26 13:36:31 -0400120 IPowerManager powerManagerService = mock(IPowerManager.class);
121 HandlerThread handlerThread = new HandlerThread("TestThread");
122 handlerThread.start();
123 mPowerManager = new PowerManager(mContext, powerManagerService,
124 new Handler(handlerThread.getLooper()));
125 when(powerManagerService.isInteractive()).thenReturn(true);
Chris Wren621933f2017-06-14 15:59:03 -0400126 mBarService = mock(IStatusBarService.class);
Julia Reynolds30203152017-05-26 13:36:31 -0400127
Jason Monk8c09ac72017-03-16 11:53:40 -0400128 mDependency.injectTestDependency(MetricsLogger.class, mMetricsLogger);
Chris Wren27a52fa2017-02-01 14:21:43 -0500129 mStatusBar = new TestableStatusBar(mStatusBarKeyguardViewManager, mUnlockMethodCache,
Julia Reynolds30203152017-05-26 13:36:31 -0400130 mKeyguardIndicationController, mStackScroller, mHeadsUpManager,
Chris Wren621933f2017-06-14 15:59:03 -0400131 mNotificationData, mPowerManager, mSystemServicesProxy, mNotificationPanelView,
132 mBarService);
Jason Monk51305372017-06-22 11:41:08 -0400133 mStatusBar.mContext = mContext;
Adrian Roosef7a4022017-01-19 14:48:35 -0800134 doAnswer(invocation -> {
135 OnDismissAction onDismissAction = (OnDismissAction) invocation.getArguments()[0];
136 onDismissAction.onDismiss();
137 return null;
138 }).when(mStatusBarKeyguardViewManager).dismissWithAction(any(), any(), anyBoolean());
139
140 doAnswer(invocation -> {
141 Runnable runnable = (Runnable) invocation.getArguments()[0];
142 runnable.run();
143 return null;
144 }).when(mStatusBarKeyguardViewManager).addAfterKeyguardGoneRunnable(any());
Chris Wren27a52fa2017-02-01 14:21:43 -0500145
146 when(mStackScroller.getActivatedChild()).thenReturn(null);
Chris Wren621933f2017-06-14 15:59:03 -0400147 TestableLooper.get(this).setMessageHandler(new MessageHandler() {
148 @Override
149 public boolean onMessageHandled(Message m) {
150 if (m.getCallback() == mStatusBar.mVisibilityReporter) {
151 return false;
152 }
153 return true;
154 }
155 });
Adrian Roosef7a4022017-01-19 14:48:35 -0800156 }
157
Adrian Roos02de4982017-02-11 09:35:54 +0100158 @Test
Adrian Roosef7a4022017-01-19 14:48:35 -0800159 public void executeRunnableDismissingKeyguard_nullRunnable_showingAndOccluded() {
160 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
161 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(true);
162
Jason Monk2a6ea9c2017-01-26 11:14:51 -0500163 mStatusBar.executeRunnableDismissingKeyguard(null, null, false, false, false);
Adrian Roosef7a4022017-01-19 14:48:35 -0800164 }
165
Adrian Roos02de4982017-02-11 09:35:54 +0100166 @Test
Adrian Roosef7a4022017-01-19 14:48:35 -0800167 public void executeRunnableDismissingKeyguard_nullRunnable_showing() {
168 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
169 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
170
Jason Monk2a6ea9c2017-01-26 11:14:51 -0500171 mStatusBar.executeRunnableDismissingKeyguard(null, null, false, false, false);
Adrian Roosef7a4022017-01-19 14:48:35 -0800172 }
173
Adrian Roos02de4982017-02-11 09:35:54 +0100174 @Test
Adrian Roosef7a4022017-01-19 14:48:35 -0800175 public void executeRunnableDismissingKeyguard_nullRunnable_notShowing() {
176 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(false);
177 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
178
Jason Monk2a6ea9c2017-01-26 11:14:51 -0500179 mStatusBar.executeRunnableDismissingKeyguard(null, null, false, false, false);
Adrian Roosef7a4022017-01-19 14:48:35 -0800180 }
181
Adrian Roos02de4982017-02-11 09:35:54 +0100182 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500183 public void lockscreenStateMetrics_notShowing() {
184 // uninteresting state, except that fingerprint must be non-zero
185 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
186 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
187 // interesting state
188 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(false);
189 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
190 when(mUnlockMethodCache.isMethodSecure()).thenReturn(false);
Chris Wren27a52fa2017-02-01 14:21:43 -0500191 mStatusBar.onKeyguardViewManagerStatesUpdated();
192
Chris Wrenef319902017-03-07 17:58:31 -0500193 MetricsAsserts.assertHasLog("missing hidden insecure lockscreen log",
194 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500195 new LogMaker(MetricsEvent.LOCKSCREEN)
196 .setType(MetricsEvent.TYPE_CLOSE)
197 .setSubtype(0));
198 }
199
Adrian Roos02de4982017-02-11 09:35:54 +0100200 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500201 public void lockscreenStateMetrics_notShowing_secure() {
202 // uninteresting state, except that fingerprint must be non-zero
203 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
204 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
205 // interesting state
206 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(false);
207 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
208 when(mUnlockMethodCache.isMethodSecure()).thenReturn(true);
209
210 mStatusBar.onKeyguardViewManagerStatesUpdated();
211
Chris Wrenef319902017-03-07 17:58:31 -0500212 MetricsAsserts.assertHasLog("missing hidden secure lockscreen log",
213 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500214 new LogMaker(MetricsEvent.LOCKSCREEN)
215 .setType(MetricsEvent.TYPE_CLOSE)
216 .setSubtype(1));
217 }
218
Adrian Roos02de4982017-02-11 09:35:54 +0100219 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500220 public void lockscreenStateMetrics_isShowing() {
221 // uninteresting state, except that fingerprint must be non-zero
222 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
223 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
224 // interesting state
225 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
226 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
227 when(mUnlockMethodCache.isMethodSecure()).thenReturn(false);
228
229 mStatusBar.onKeyguardViewManagerStatesUpdated();
230
Chris Wrenef319902017-03-07 17:58:31 -0500231 MetricsAsserts.assertHasLog("missing insecure lockscreen showing",
232 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500233 new LogMaker(MetricsEvent.LOCKSCREEN)
234 .setType(MetricsEvent.TYPE_OPEN)
235 .setSubtype(0));
236 }
237
Adrian Roos02de4982017-02-11 09:35:54 +0100238 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500239 public void lockscreenStateMetrics_isShowing_secure() {
240 // uninteresting state, except that fingerprint must be non-zero
241 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
242 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
243 // interesting state
244 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
245 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
246 when(mUnlockMethodCache.isMethodSecure()).thenReturn(true);
247
248 mStatusBar.onKeyguardViewManagerStatesUpdated();
249
Chris Wrenef319902017-03-07 17:58:31 -0500250 MetricsAsserts.assertHasLog("missing secure lockscreen showing log",
251 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500252 new LogMaker(MetricsEvent.LOCKSCREEN)
253 .setType(MetricsEvent.TYPE_OPEN)
254 .setSubtype(1));
255 }
256
Adrian Roos02de4982017-02-11 09:35:54 +0100257 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500258 public void lockscreenStateMetrics_isShowingBouncer() {
259 // uninteresting state, except that fingerprint must be non-zero
260 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
261 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
262 // interesting state
263 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
264 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(true);
265 when(mUnlockMethodCache.isMethodSecure()).thenReturn(true);
266
267 mStatusBar.onKeyguardViewManagerStatesUpdated();
268
Chris Wrenef319902017-03-07 17:58:31 -0500269 MetricsAsserts.assertHasLog("missing bouncer log",
270 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500271 new LogMaker(MetricsEvent.BOUNCER)
272 .setType(MetricsEvent.TYPE_OPEN)
273 .setSubtype(1));
274 }
275
Adrian Roos02de4982017-02-11 09:35:54 +0100276 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500277 public void onActivatedMetrics() {
278 ActivatableNotificationView view = mock(ActivatableNotificationView.class);
279 mStatusBar.onActivated(view);
280
Chris Wrenef319902017-03-07 17:58:31 -0500281 MetricsAsserts.assertHasLog("missing lockscreen note tap log",
282 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500283 new LogMaker(MetricsEvent.ACTION_LS_NOTE)
284 .setType(MetricsEvent.TYPE_ACTION));
285 }
286
Julia Reynolds30203152017-05-26 13:36:31 -0400287 @Test
288 public void testShouldPeek_nonSuppressedGroupSummary() {
289 when(mPowerManager.isScreenOn()).thenReturn(true);
290 when(mHeadsUpManager.isSnoozed(anyString())).thenReturn(false);
291 when(mNotificationData.shouldSuppressScreenOn(any())).thenReturn(false);
292 when(mNotificationData.shouldFilterOut(any())).thenReturn(false);
293 when(mSystemServicesProxy.isDreaming()).thenReturn(false);
294 when(mNotificationData.getImportance(any())).thenReturn(IMPORTANCE_HIGH);
295
296 Notification n = new Notification.Builder(getContext(), "a")
297 .setGroup("a")
298 .setGroupSummary(true)
299 .setGroupAlertBehavior(Notification.GROUP_ALERT_SUMMARY)
300 .build();
301 StatusBarNotification sbn = new StatusBarNotification("a", "a", 0, "a", 0, 0, n,
302 UserHandle.of(0), null, 0);
303 NotificationData.Entry entry = new NotificationData.Entry(sbn);
304
305 assertTrue(mStatusBar.shouldPeek(entry, sbn));
306 }
307
308 @Test
309 public void testShouldPeek_suppressedGroupSummary() {
310 when(mPowerManager.isScreenOn()).thenReturn(true);
311 when(mHeadsUpManager.isSnoozed(anyString())).thenReturn(false);
312 when(mNotificationData.shouldSuppressScreenOn(any())).thenReturn(false);
313 when(mNotificationData.shouldFilterOut(any())).thenReturn(false);
314 when(mSystemServicesProxy.isDreaming()).thenReturn(false);
315 when(mNotificationData.getImportance(any())).thenReturn(IMPORTANCE_HIGH);
316
317 Notification n = new Notification.Builder(getContext(), "a")
318 .setGroup("a")
319 .setGroupSummary(true)
320 .setGroupAlertBehavior(Notification.GROUP_ALERT_CHILDREN)
321 .build();
322 StatusBarNotification sbn = new StatusBarNotification("a", "a", 0, "a", 0, 0, n,
323 UserHandle.of(0), null, 0);
324 NotificationData.Entry entry = new NotificationData.Entry(sbn);
325
326 assertFalse(mStatusBar.shouldPeek(entry, sbn));
327 }
328
Chris Wren621933f2017-06-14 15:59:03 -0400329 @Test
330 public void testLogHidden() {
331 try {
332 mStatusBar.handleVisibleToUserChanged(false);
333 verify(mBarService, times(1)).onPanelHidden();
334 verify(mBarService, never()).onPanelRevealed(anyBoolean(), anyInt());
335 } catch (RemoteException e) {
336 fail();
337 }
338 }
339
340 @Test
341 public void testPanelOpenForPeek() {
342 when(mHeadsUpManager.hasPinnedHeadsUp()).thenReturn(true);
343 when(mNotificationData.getActiveNotifications()).thenReturn(mNotificationList);
344 when(mNotificationList.size()).thenReturn(5);
345 when(mNotificationPanelView.isFullyCollapsed()).thenReturn(true);
346 mStatusBar.setBarStateForTest(StatusBarState.SHADE);
347
348 try {
349 mStatusBar.handleVisibleToUserChanged(true);
350
351 verify(mBarService, never()).onPanelHidden();
352 verify(mBarService, times(1)).onPanelRevealed(false, 1);
353 } catch (RemoteException e) {
354 fail();
355 }
356 TestableLooper.get(this).processAllMessages();
357 }
358
359 @Test
360 public void testPanelOpenAndClear() {
361 when(mHeadsUpManager.hasPinnedHeadsUp()).thenReturn(false);
362 when(mNotificationData.getActiveNotifications()).thenReturn(mNotificationList);
363 when(mNotificationList.size()).thenReturn(5);
364 when(mNotificationPanelView.isFullyCollapsed()).thenReturn(false);
365 mStatusBar.setBarStateForTest(StatusBarState.SHADE);
366
367 try {
368 mStatusBar.handleVisibleToUserChanged(true);
369
370 verify(mBarService, never()).onPanelHidden();
371 verify(mBarService, times(1)).onPanelRevealed(true, 5);
372 } catch (RemoteException e) {
373 fail();
374 }
375 TestableLooper.get(this).processAllMessages();
376 }
377
378 @Test
379 public void testPanelOpenAndNoClear() {
380 when(mHeadsUpManager.hasPinnedHeadsUp()).thenReturn(false);
381 when(mNotificationData.getActiveNotifications()).thenReturn(mNotificationList);
382 when(mNotificationList.size()).thenReturn(5);
383 when(mNotificationPanelView.isFullyCollapsed()).thenReturn(false);
384 mStatusBar.setBarStateForTest(StatusBarState.KEYGUARD);
385
386 try {
387 mStatusBar.handleVisibleToUserChanged(true);
388
389 verify(mBarService, never()).onPanelHidden();
390 verify(mBarService, times(1)).onPanelRevealed(false, 5);
391 } catch (RemoteException e) {
392 fail();
393 }
394 TestableLooper.get(this).processAllMessages();
395 }
396
Jason Monk51305372017-06-22 11:41:08 -0400397 @Test
398 public void testDump_DoesNotCrash() {
399 mStatusBar.dump(null, new PrintWriter(new ByteArrayOutputStream()), null);
400 }
401
Jason Monk2a6ea9c2017-01-26 11:14:51 -0500402 static class TestableStatusBar extends StatusBar {
Chris Wren27a52fa2017-02-01 14:21:43 -0500403 public TestableStatusBar(StatusBarKeyguardViewManager man,
404 UnlockMethodCache unlock, KeyguardIndicationController key,
Julia Reynolds30203152017-05-26 13:36:31 -0400405 NotificationStackScrollLayout stack, HeadsUpManager hum, NotificationData nd,
Chris Wren621933f2017-06-14 15:59:03 -0400406 PowerManager pm, SystemServicesProxy ssp, NotificationPanelView panelView,
407 IStatusBarService barService) {
Adrian Roosef7a4022017-01-19 14:48:35 -0800408 mStatusBarKeyguardViewManager = man;
Chris Wren27a52fa2017-02-01 14:21:43 -0500409 mUnlockMethodCache = unlock;
410 mKeyguardIndicationController = key;
411 mStackScroller = stack;
Julia Reynolds30203152017-05-26 13:36:31 -0400412 mHeadsUpManager = hum;
413 mNotificationData = nd;
414 mUseHeadsUp = true;
415 mPowerManager = pm;
416 mSystemServicesProxy = ssp;
Jorim Jaggifd3b1a12017-06-06 17:04:19 -0700417 mNotificationPanel = panelView;
Chris Wren621933f2017-06-14 15:59:03 -0400418 mBarService = barService;
Adrian Roosef7a4022017-01-19 14:48:35 -0800419 }
420
Chris Wren621933f2017-06-14 15:59:03 -0400421 public void setBarStateForTest(int state) {
422 mState = state;
Adrian Roosef7a4022017-01-19 14:48:35 -0800423 }
424 }
Adrian Roos02de4982017-02-11 09:35:54 +0100425}