blob: 0e3ea7a07e7d5bfad32ae4f30fbc09ba3ba5f464 [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;
Chris Wren27a52fa2017-02-01 14:21:43 -050041import android.metrics.LogMaker;
Julia Reynolds30203152017-05-26 13:36:31 -040042import android.os.Handler;
43import android.os.HandlerThread;
44import android.os.IPowerManager;
Chris Wren621933f2017-06-14 15:59:03 -040045import android.os.Message;
Julia Reynolds30203152017-05-26 13:36:31 -040046import android.os.PowerManager;
Chris Wren621933f2017-06-14 15:59:03 -040047import android.os.RemoteException;
Julia Reynolds30203152017-05-26 13:36:31 -040048import android.os.UserHandle;
49import android.service.notification.StatusBarNotification;
Adrian Roosef7a4022017-01-19 14:48:35 -080050import android.support.test.filters.SmallTest;
Chris Wren27a52fa2017-02-01 14:21:43 -050051import android.support.test.metricshelper.MetricsAsserts;
Adrian Roosef7a4022017-01-19 14:48:35 -080052import android.support.test.runner.AndroidJUnit4;
Chris Wren621933f2017-06-14 15:59:03 -040053import android.testing.AndroidTestingRunner;
54import android.testing.TestableLooper;
55import android.testing.TestableLooper.MessageHandler;
56import android.testing.TestableLooper.RunWithLooper;
Chris Wren27a52fa2017-02-01 14:21:43 -050057import android.util.DisplayMetrics;
Adrian Roosef7a4022017-01-19 14:48:35 -080058
Chris Wrenef319902017-03-07 17:58:31 -050059import com.android.internal.logging.MetricsLogger;
Chris Wren27a52fa2017-02-01 14:21:43 -050060import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
Chris Wrenef319902017-03-07 17:58:31 -050061import com.android.internal.logging.testing.FakeMetricsLogger;
Chris Wren621933f2017-06-14 15:59:03 -040062import com.android.internal.statusbar.IStatusBarService;
Adrian Roosef7a4022017-01-19 14:48:35 -080063import com.android.keyguard.KeyguardHostView.OnDismissAction;
64import com.android.systemui.SysuiTestCase;
Julia Reynolds30203152017-05-26 13:36:31 -040065import com.android.systemui.recents.misc.SystemServicesProxy;
Chris Wren27a52fa2017-02-01 14:21:43 -050066import com.android.systemui.statusbar.ActivatableNotificationView;
67import com.android.systemui.statusbar.KeyguardIndicationController;
68import com.android.systemui.statusbar.NotificationData;
Chris Wren621933f2017-06-14 15:59:03 -040069import com.android.systemui.statusbar.NotificationData.Entry;
70import com.android.systemui.statusbar.StatusBarState;
Julia Reynolds30203152017-05-26 13:36:31 -040071import com.android.systemui.statusbar.policy.HeadsUpManager;
Chris Wren27a52fa2017-02-01 14:21:43 -050072import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
Adrian Roosef7a4022017-01-19 14:48:35 -080073
74import org.junit.Before;
75import org.junit.Test;
76import org.junit.runner.RunWith;
77
Chris Wren621933f2017-06-14 15:59:03 -040078import java.util.ArrayList;
79
Adrian Roos02de4982017-02-11 09:35:54 +010080@SmallTest
Chris Wren621933f2017-06-14 15:59:03 -040081@RunWith(AndroidTestingRunner.class)
82@RunWithLooper
Jason Monk2a6ea9c2017-01-26 11:14:51 -050083public class StatusBarTest extends SysuiTestCase {
Adrian Roosef7a4022017-01-19 14:48:35 -080084
85 StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
Chris Wren27a52fa2017-02-01 14:21:43 -050086 UnlockMethodCache mUnlockMethodCache;
87 KeyguardIndicationController mKeyguardIndicationController;
88 NotificationStackScrollLayout mStackScroller;
Chris Wren621933f2017-06-14 15:59:03 -040089 TestableStatusBar mStatusBar;
Chris Wrenef319902017-03-07 17:58:31 -050090 FakeMetricsLogger mMetricsLogger;
Julia Reynolds30203152017-05-26 13:36:31 -040091 HeadsUpManager mHeadsUpManager;
92 NotificationData mNotificationData;
93 PowerManager mPowerManager;
94 SystemServicesProxy mSystemServicesProxy;
Jorim Jaggifd3b1a12017-06-06 17:04:19 -070095 NotificationPanelView mNotificationPanelView;
Chris Wren621933f2017-06-14 15:59:03 -040096 IStatusBarService mBarService;
97 ArrayList<Entry> mNotificationList;
Chris Wren27a52fa2017-02-01 14:21:43 -050098 private DisplayMetrics mDisplayMetrics = new DisplayMetrics();
99
Adrian Roos02de4982017-02-11 09:35:54 +0100100 @Before
Julia Reynolds30203152017-05-26 13:36:31 -0400101 public void setup() throws Exception {
Adrian Roosef7a4022017-01-19 14:48:35 -0800102 mStatusBarKeyguardViewManager = mock(StatusBarKeyguardViewManager.class);
Chris Wren27a52fa2017-02-01 14:21:43 -0500103 mUnlockMethodCache = mock(UnlockMethodCache.class);
104 mKeyguardIndicationController = mock(KeyguardIndicationController.class);
105 mStackScroller = mock(NotificationStackScrollLayout.class);
Chris Wrenef319902017-03-07 17:58:31 -0500106 mMetricsLogger = new FakeMetricsLogger();
Julia Reynolds30203152017-05-26 13:36:31 -0400107 mHeadsUpManager = mock(HeadsUpManager.class);
108 mNotificationData = mock(NotificationData.class);
109 mSystemServicesProxy = mock(SystemServicesProxy.class);
Jorim Jaggifd3b1a12017-06-06 17:04:19 -0700110 mNotificationPanelView = mock(NotificationPanelView.class);
Chris Wren621933f2017-06-14 15:59:03 -0400111 mNotificationList = mock(ArrayList.class);
Julia Reynolds30203152017-05-26 13:36:31 -0400112 IPowerManager powerManagerService = mock(IPowerManager.class);
113 HandlerThread handlerThread = new HandlerThread("TestThread");
114 handlerThread.start();
115 mPowerManager = new PowerManager(mContext, powerManagerService,
116 new Handler(handlerThread.getLooper()));
117 when(powerManagerService.isInteractive()).thenReturn(true);
Chris Wren621933f2017-06-14 15:59:03 -0400118 mBarService = mock(IStatusBarService.class);
Julia Reynolds30203152017-05-26 13:36:31 -0400119
Jason Monk8c09ac72017-03-16 11:53:40 -0400120 mDependency.injectTestDependency(MetricsLogger.class, mMetricsLogger);
Chris Wren27a52fa2017-02-01 14:21:43 -0500121 mStatusBar = new TestableStatusBar(mStatusBarKeyguardViewManager, mUnlockMethodCache,
Julia Reynolds30203152017-05-26 13:36:31 -0400122 mKeyguardIndicationController, mStackScroller, mHeadsUpManager,
Chris Wren621933f2017-06-14 15:59:03 -0400123 mNotificationData, mPowerManager, mSystemServicesProxy, mNotificationPanelView,
124 mBarService);
Adrian Roosef7a4022017-01-19 14:48:35 -0800125 doAnswer(invocation -> {
126 OnDismissAction onDismissAction = (OnDismissAction) invocation.getArguments()[0];
127 onDismissAction.onDismiss();
128 return null;
129 }).when(mStatusBarKeyguardViewManager).dismissWithAction(any(), any(), anyBoolean());
130
131 doAnswer(invocation -> {
132 Runnable runnable = (Runnable) invocation.getArguments()[0];
133 runnable.run();
134 return null;
135 }).when(mStatusBarKeyguardViewManager).addAfterKeyguardGoneRunnable(any());
Chris Wren27a52fa2017-02-01 14:21:43 -0500136
137 when(mStackScroller.getActivatedChild()).thenReturn(null);
Chris Wren621933f2017-06-14 15:59:03 -0400138 TestableLooper.get(this).setMessageHandler(new MessageHandler() {
139 @Override
140 public boolean onMessageHandled(Message m) {
141 if (m.getCallback() == mStatusBar.mVisibilityReporter) {
142 return false;
143 }
144 return true;
145 }
146 });
Adrian Roosef7a4022017-01-19 14:48:35 -0800147 }
148
Adrian Roos02de4982017-02-11 09:35:54 +0100149 @Test
Adrian Roosef7a4022017-01-19 14:48:35 -0800150 public void executeRunnableDismissingKeyguard_nullRunnable_showingAndOccluded() {
151 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
152 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(true);
153
Jason Monk2a6ea9c2017-01-26 11:14:51 -0500154 mStatusBar.executeRunnableDismissingKeyguard(null, null, false, false, false);
Adrian Roosef7a4022017-01-19 14:48:35 -0800155 }
156
Adrian Roos02de4982017-02-11 09:35:54 +0100157 @Test
Adrian Roosef7a4022017-01-19 14:48:35 -0800158 public void executeRunnableDismissingKeyguard_nullRunnable_showing() {
159 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
160 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
161
Jason Monk2a6ea9c2017-01-26 11:14:51 -0500162 mStatusBar.executeRunnableDismissingKeyguard(null, null, false, false, false);
Adrian Roosef7a4022017-01-19 14:48:35 -0800163 }
164
Adrian Roos02de4982017-02-11 09:35:54 +0100165 @Test
Adrian Roosef7a4022017-01-19 14:48:35 -0800166 public void executeRunnableDismissingKeyguard_nullRunnable_notShowing() {
167 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(false);
168 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
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
Chris Wren27a52fa2017-02-01 14:21:43 -0500174 public void lockscreenStateMetrics_notShowing() {
175 // uninteresting state, except that fingerprint must be non-zero
176 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
177 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
178 // interesting state
179 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(false);
180 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
181 when(mUnlockMethodCache.isMethodSecure()).thenReturn(false);
Chris Wren27a52fa2017-02-01 14:21:43 -0500182 mStatusBar.onKeyguardViewManagerStatesUpdated();
183
Chris Wrenef319902017-03-07 17:58:31 -0500184 MetricsAsserts.assertHasLog("missing hidden insecure lockscreen log",
185 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500186 new LogMaker(MetricsEvent.LOCKSCREEN)
187 .setType(MetricsEvent.TYPE_CLOSE)
188 .setSubtype(0));
189 }
190
Adrian Roos02de4982017-02-11 09:35:54 +0100191 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500192 public void lockscreenStateMetrics_notShowing_secure() {
193 // uninteresting state, except that fingerprint must be non-zero
194 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
195 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
196 // interesting state
197 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(false);
198 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
199 when(mUnlockMethodCache.isMethodSecure()).thenReturn(true);
200
201 mStatusBar.onKeyguardViewManagerStatesUpdated();
202
Chris Wrenef319902017-03-07 17:58:31 -0500203 MetricsAsserts.assertHasLog("missing hidden secure lockscreen log",
204 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500205 new LogMaker(MetricsEvent.LOCKSCREEN)
206 .setType(MetricsEvent.TYPE_CLOSE)
207 .setSubtype(1));
208 }
209
Adrian Roos02de4982017-02-11 09:35:54 +0100210 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500211 public void lockscreenStateMetrics_isShowing() {
212 // uninteresting state, except that fingerprint must be non-zero
213 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
214 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
215 // interesting state
216 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
217 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
218 when(mUnlockMethodCache.isMethodSecure()).thenReturn(false);
219
220 mStatusBar.onKeyguardViewManagerStatesUpdated();
221
Chris Wrenef319902017-03-07 17:58:31 -0500222 MetricsAsserts.assertHasLog("missing insecure lockscreen showing",
223 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500224 new LogMaker(MetricsEvent.LOCKSCREEN)
225 .setType(MetricsEvent.TYPE_OPEN)
226 .setSubtype(0));
227 }
228
Adrian Roos02de4982017-02-11 09:35:54 +0100229 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500230 public void lockscreenStateMetrics_isShowing_secure() {
231 // uninteresting state, except that fingerprint must be non-zero
232 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
233 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
234 // interesting state
235 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
236 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
237 when(mUnlockMethodCache.isMethodSecure()).thenReturn(true);
238
239 mStatusBar.onKeyguardViewManagerStatesUpdated();
240
Chris Wrenef319902017-03-07 17:58:31 -0500241 MetricsAsserts.assertHasLog("missing secure lockscreen showing log",
242 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500243 new LogMaker(MetricsEvent.LOCKSCREEN)
244 .setType(MetricsEvent.TYPE_OPEN)
245 .setSubtype(1));
246 }
247
Adrian Roos02de4982017-02-11 09:35:54 +0100248 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500249 public void lockscreenStateMetrics_isShowingBouncer() {
250 // uninteresting state, except that fingerprint must be non-zero
251 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
252 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
253 // interesting state
254 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
255 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(true);
256 when(mUnlockMethodCache.isMethodSecure()).thenReturn(true);
257
258 mStatusBar.onKeyguardViewManagerStatesUpdated();
259
Chris Wrenef319902017-03-07 17:58:31 -0500260 MetricsAsserts.assertHasLog("missing bouncer log",
261 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500262 new LogMaker(MetricsEvent.BOUNCER)
263 .setType(MetricsEvent.TYPE_OPEN)
264 .setSubtype(1));
265 }
266
Adrian Roos02de4982017-02-11 09:35:54 +0100267 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500268 public void onActivatedMetrics() {
269 ActivatableNotificationView view = mock(ActivatableNotificationView.class);
270 mStatusBar.onActivated(view);
271
Chris Wrenef319902017-03-07 17:58:31 -0500272 MetricsAsserts.assertHasLog("missing lockscreen note tap log",
273 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500274 new LogMaker(MetricsEvent.ACTION_LS_NOTE)
275 .setType(MetricsEvent.TYPE_ACTION));
276 }
277
Julia Reynolds30203152017-05-26 13:36:31 -0400278 @Test
279 public void testShouldPeek_nonSuppressedGroupSummary() {
280 when(mPowerManager.isScreenOn()).thenReturn(true);
281 when(mHeadsUpManager.isSnoozed(anyString())).thenReturn(false);
282 when(mNotificationData.shouldSuppressScreenOn(any())).thenReturn(false);
283 when(mNotificationData.shouldFilterOut(any())).thenReturn(false);
284 when(mSystemServicesProxy.isDreaming()).thenReturn(false);
285 when(mNotificationData.getImportance(any())).thenReturn(IMPORTANCE_HIGH);
286
287 Notification n = new Notification.Builder(getContext(), "a")
288 .setGroup("a")
289 .setGroupSummary(true)
290 .setGroupAlertBehavior(Notification.GROUP_ALERT_SUMMARY)
291 .build();
292 StatusBarNotification sbn = new StatusBarNotification("a", "a", 0, "a", 0, 0, n,
293 UserHandle.of(0), null, 0);
294 NotificationData.Entry entry = new NotificationData.Entry(sbn);
295
296 assertTrue(mStatusBar.shouldPeek(entry, sbn));
297 }
298
299 @Test
300 public void testShouldPeek_suppressedGroupSummary() {
301 when(mPowerManager.isScreenOn()).thenReturn(true);
302 when(mHeadsUpManager.isSnoozed(anyString())).thenReturn(false);
303 when(mNotificationData.shouldSuppressScreenOn(any())).thenReturn(false);
304 when(mNotificationData.shouldFilterOut(any())).thenReturn(false);
305 when(mSystemServicesProxy.isDreaming()).thenReturn(false);
306 when(mNotificationData.getImportance(any())).thenReturn(IMPORTANCE_HIGH);
307
308 Notification n = new Notification.Builder(getContext(), "a")
309 .setGroup("a")
310 .setGroupSummary(true)
311 .setGroupAlertBehavior(Notification.GROUP_ALERT_CHILDREN)
312 .build();
313 StatusBarNotification sbn = new StatusBarNotification("a", "a", 0, "a", 0, 0, n,
314 UserHandle.of(0), null, 0);
315 NotificationData.Entry entry = new NotificationData.Entry(sbn);
316
317 assertFalse(mStatusBar.shouldPeek(entry, sbn));
318 }
319
Chris Wren621933f2017-06-14 15:59:03 -0400320 @Test
321 public void testLogHidden() {
322 try {
323 mStatusBar.handleVisibleToUserChanged(false);
324 verify(mBarService, times(1)).onPanelHidden();
325 verify(mBarService, never()).onPanelRevealed(anyBoolean(), anyInt());
326 } catch (RemoteException e) {
327 fail();
328 }
329 }
330
331 @Test
332 public void testPanelOpenForPeek() {
333 when(mHeadsUpManager.hasPinnedHeadsUp()).thenReturn(true);
334 when(mNotificationData.getActiveNotifications()).thenReturn(mNotificationList);
335 when(mNotificationList.size()).thenReturn(5);
336 when(mNotificationPanelView.isFullyCollapsed()).thenReturn(true);
337 mStatusBar.setBarStateForTest(StatusBarState.SHADE);
338
339 try {
340 mStatusBar.handleVisibleToUserChanged(true);
341
342 verify(mBarService, never()).onPanelHidden();
343 verify(mBarService, times(1)).onPanelRevealed(false, 1);
344 } catch (RemoteException e) {
345 fail();
346 }
347 TestableLooper.get(this).processAllMessages();
348 }
349
350 @Test
351 public void testPanelOpenAndClear() {
352 when(mHeadsUpManager.hasPinnedHeadsUp()).thenReturn(false);
353 when(mNotificationData.getActiveNotifications()).thenReturn(mNotificationList);
354 when(mNotificationList.size()).thenReturn(5);
355 when(mNotificationPanelView.isFullyCollapsed()).thenReturn(false);
356 mStatusBar.setBarStateForTest(StatusBarState.SHADE);
357
358 try {
359 mStatusBar.handleVisibleToUserChanged(true);
360
361 verify(mBarService, never()).onPanelHidden();
362 verify(mBarService, times(1)).onPanelRevealed(true, 5);
363 } catch (RemoteException e) {
364 fail();
365 }
366 TestableLooper.get(this).processAllMessages();
367 }
368
369 @Test
370 public void testPanelOpenAndNoClear() {
371 when(mHeadsUpManager.hasPinnedHeadsUp()).thenReturn(false);
372 when(mNotificationData.getActiveNotifications()).thenReturn(mNotificationList);
373 when(mNotificationList.size()).thenReturn(5);
374 when(mNotificationPanelView.isFullyCollapsed()).thenReturn(false);
375 mStatusBar.setBarStateForTest(StatusBarState.KEYGUARD);
376
377 try {
378 mStatusBar.handleVisibleToUserChanged(true);
379
380 verify(mBarService, never()).onPanelHidden();
381 verify(mBarService, times(1)).onPanelRevealed(false, 5);
382 } catch (RemoteException e) {
383 fail();
384 }
385 TestableLooper.get(this).processAllMessages();
386 }
387
Jason Monk2a6ea9c2017-01-26 11:14:51 -0500388 static class TestableStatusBar extends StatusBar {
Chris Wren27a52fa2017-02-01 14:21:43 -0500389 public TestableStatusBar(StatusBarKeyguardViewManager man,
390 UnlockMethodCache unlock, KeyguardIndicationController key,
Julia Reynolds30203152017-05-26 13:36:31 -0400391 NotificationStackScrollLayout stack, HeadsUpManager hum, NotificationData nd,
Chris Wren621933f2017-06-14 15:59:03 -0400392 PowerManager pm, SystemServicesProxy ssp, NotificationPanelView panelView,
393 IStatusBarService barService) {
Adrian Roosef7a4022017-01-19 14:48:35 -0800394 mStatusBarKeyguardViewManager = man;
Chris Wren27a52fa2017-02-01 14:21:43 -0500395 mUnlockMethodCache = unlock;
396 mKeyguardIndicationController = key;
397 mStackScroller = stack;
Julia Reynolds30203152017-05-26 13:36:31 -0400398 mHeadsUpManager = hum;
399 mNotificationData = nd;
400 mUseHeadsUp = true;
401 mPowerManager = pm;
402 mSystemServicesProxy = ssp;
Jorim Jaggifd3b1a12017-06-06 17:04:19 -0700403 mNotificationPanel = panelView;
Chris Wren621933f2017-06-14 15:59:03 -0400404 mBarService = barService;
Adrian Roosef7a4022017-01-19 14:48:35 -0800405 }
406
Chris Wren621933f2017-06-14 15:59:03 -0400407 public void setBarStateForTest(int state) {
408 mState = state;
Adrian Roosef7a4022017-01-19 14:48:35 -0800409 }
410 }
Adrian Roos02de4982017-02-11 09:35:54 +0100411}