blob: 37e00052383cedb1ca1b0d67d1c9fa828255cde4 [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
Julia Reynoldsed1c9af2018-03-21 15:21:09 -040021import static junit.framework.Assert.assertEquals;
Julia Reynolds30203152017-05-26 13:36:31 -040022import static junit.framework.Assert.assertFalse;
Julia Reynoldsed1c9af2018-03-21 15:21:09 -040023import static junit.framework.Assert.assertNotNull;
Julia Reynolds30203152017-05-26 13:36:31 -040024import static junit.framework.Assert.assertTrue;
Chris Wren621933f2017-06-14 15:59:03 -040025import static junit.framework.TestCase.fail;
Julia Reynolds30203152017-05-26 13:36:31 -040026
Chris Wren621933f2017-06-14 15:59:03 -040027import static org.mockito.ArgumentMatchers.any;
28import static org.mockito.ArgumentMatchers.anyBoolean;
29import static org.mockito.ArgumentMatchers.anyInt;
30import static org.mockito.ArgumentMatchers.anyString;
Lucas Dupin311eac82017-12-11 14:40:07 -080031import static org.mockito.ArgumentMatchers.eq;
Adrian Roosef7a4022017-01-19 14:48:35 -080032import static org.mockito.Mockito.doAnswer;
33import static org.mockito.Mockito.mock;
Chris Wren621933f2017-06-14 15:59:03 -040034import static org.mockito.Mockito.never;
Lucas Dupind5107302018-03-19 15:30:29 -070035import static org.mockito.Mockito.reset;
Chris Wren621933f2017-06-14 15:59:03 -040036import static org.mockito.Mockito.times;
Chris Wren621933f2017-06-14 15:59:03 -040037import static org.mockito.Mockito.verify;
Jason Monk9c4faa82017-08-15 09:32:27 -040038import static org.mockito.Mockito.when;
Adrian Roosef7a4022017-01-19 14:48:35 -080039
Julia Reynolds30203152017-05-26 13:36:31 -040040import android.app.Notification;
Charles He2eda2422017-09-24 17:55:21 +010041import android.app.StatusBarManager;
Jason Monk51305372017-06-22 11:41:08 -040042import android.app.trust.TrustManager;
Eliot Courtneya6d8cf22017-10-20 13:26:58 +090043import android.content.Context;
jovanak5f6dc612018-03-27 11:59:22 -070044import android.content.pm.UserInfo;
Jason Monk51305372017-06-22 11:41:08 -040045import android.hardware.fingerprint.FingerprintManager;
Chris Wren27a52fa2017-02-01 14:21:43 -050046import android.metrics.LogMaker;
Jason Monk9c4faa82017-08-15 09:32:27 -040047import android.os.Binder;
Julia Reynolds30203152017-05-26 13:36:31 -040048import android.os.Handler;
49import android.os.HandlerThread;
50import android.os.IPowerManager;
Julia Reynolds30203152017-05-26 13:36:31 -040051import android.os.PowerManager;
Chris Wren621933f2017-06-14 15:59:03 -040052import android.os.RemoteException;
Julia Reynolds30203152017-05-26 13:36:31 -040053import android.os.UserHandle;
54import android.service.notification.StatusBarNotification;
Adrian Roosef7a4022017-01-19 14:48:35 -080055import android.support.test.filters.SmallTest;
Chris Wren27a52fa2017-02-01 14:21:43 -050056import android.support.test.metricshelper.MetricsAsserts;
Chris Wren621933f2017-06-14 15:59:03 -040057import android.testing.AndroidTestingRunner;
58import android.testing.TestableLooper;
Chris Wren621933f2017-06-14 15:59:03 -040059import android.testing.TestableLooper.RunWithLooper;
Eliot Courtney09322282017-11-09 15:31:19 +090060import android.util.SparseArray;
Julia Reynoldsed1c9af2018-03-21 15:21:09 -040061import android.view.Gravity;
62import android.view.View;
Jason Monk51305372017-06-22 11:41:08 -040063import android.view.ViewGroup.LayoutParams;
Adrian Roosef7a4022017-01-19 14:48:35 -080064
Chris Wrenef319902017-03-07 17:58:31 -050065import com.android.internal.logging.MetricsLogger;
Chris Wren27a52fa2017-02-01 14:21:43 -050066import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
Chris Wrenef319902017-03-07 17:58:31 -050067import com.android.internal.logging.testing.FakeMetricsLogger;
Chris Wren621933f2017-06-14 15:59:03 -040068import com.android.internal.statusbar.IStatusBarService;
Adrian Roosef7a4022017-01-19 14:48:35 -080069import com.android.keyguard.KeyguardHostView.OnDismissAction;
Eliot Courtneya6d8cf22017-10-20 13:26:58 +090070import com.android.systemui.ForegroundServiceController;
Jason Monk9c4faa82017-08-15 09:32:27 -040071import com.android.systemui.R;
Adrian Roosef7a4022017-01-19 14:48:35 -080072import com.android.systemui.SysuiTestCase;
Jason Monk9c4faa82017-08-15 09:32:27 -040073import com.android.systemui.assist.AssistManager;
Lucas Dupin47a65c72018-02-15 14:16:18 -080074import com.android.systemui.keyguard.KeyguardViewMediator;
jovanak5f6dc612018-03-27 11:59:22 -070075import com.android.systemui.classifier.FalsingManager;
Adrian Roos6d5ebb72017-08-03 15:10:22 +020076import com.android.systemui.keyguard.WakefulnessLifecycle;
Julia Reynolds30203152017-05-26 13:36:31 -040077import com.android.systemui.recents.misc.SystemServicesProxy;
Chris Wren27a52fa2017-02-01 14:21:43 -050078import com.android.systemui.statusbar.ActivatableNotificationView;
Julia Reynoldsfc640012018-02-21 12:25:27 -050079import com.android.systemui.statusbar.AppOpsListener;
Jason Monk5ecf80c2017-07-06 15:28:17 -040080import com.android.systemui.statusbar.CommandQueue;
Julia Reynoldsed1c9af2018-03-21 15:21:09 -040081import com.android.systemui.statusbar.ExpandableNotificationRow;
82import com.android.systemui.statusbar.FooterView;
83import com.android.systemui.statusbar.FooterViewButton;
Chris Wren27a52fa2017-02-01 14:21:43 -050084import com.android.systemui.statusbar.KeyguardIndicationController;
85import com.android.systemui.statusbar.NotificationData;
Chris Wren621933f2017-06-14 15:59:03 -040086import com.android.systemui.statusbar.NotificationData.Entry;
Eliot Courtneya6d8cf22017-10-20 13:26:58 +090087import com.android.systemui.statusbar.NotificationEntryManager;
88import com.android.systemui.statusbar.NotificationGutsManager;
Eliot Courtney2b4c3a02017-11-27 13:27:46 +090089import com.android.systemui.statusbar.NotificationListContainer;
Eliot Courtney3985ad52017-11-17 16:51:52 +090090import com.android.systemui.statusbar.NotificationListener;
Eliot Courtney09322282017-11-09 15:31:19 +090091import com.android.systemui.statusbar.NotificationLockscreenUserManager;
Eliot Courtney3985ad52017-11-17 16:51:52 +090092import com.android.systemui.statusbar.NotificationLogger;
Eliot Courtneya6d8cf22017-10-20 13:26:58 +090093import com.android.systemui.statusbar.NotificationMediaManager;
94import com.android.systemui.statusbar.NotificationPresenter;
95import com.android.systemui.statusbar.NotificationRemoteInputManager;
jovanak5f6dc612018-03-27 11:59:22 -070096import com.android.systemui.statusbar.NotificationShelf;
Eliot Courtney2b4c3a02017-11-27 13:27:46 +090097import com.android.systemui.statusbar.NotificationViewHierarchyManager;
Selim Cinek7c6fe5b2018-04-09 18:27:13 -070098import com.android.systemui.statusbar.RemoteInputController;
Chris Wren621933f2017-06-14 15:59:03 -040099import com.android.systemui.statusbar.StatusBarState;
Selim Cinek7e222c3c2018-01-25 12:22:41 -0800100import com.android.systemui.statusbar.notification.ActivityLaunchAnimator;
Eliot Courtneya6d8cf22017-10-20 13:26:58 +0900101import com.android.systemui.statusbar.notification.VisualStabilityManager;
Jason Monk9c4faa82017-08-15 09:32:27 -0400102import com.android.systemui.statusbar.policy.DeviceProvisionedController;
Jason Monk9c4faa82017-08-15 09:32:27 -0400103import com.android.systemui.statusbar.policy.KeyguardMonitor;
104import com.android.systemui.statusbar.policy.KeyguardMonitorImpl;
jovanak5f6dc612018-03-27 11:59:22 -0700105import com.android.systemui.statusbar.policy.UserSwitcherController;
Chris Wren27a52fa2017-02-01 14:21:43 -0500106import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
Adrian Roosef7a4022017-01-19 14:48:35 -0800107
108import org.junit.Before;
109import org.junit.Test;
110import org.junit.runner.RunWith;
Julia Reynoldsed1c9af2018-03-21 15:21:09 -0400111import org.mockito.ArgumentCaptor;
Eliot Courtney8f56b0e2017-12-14 18:54:28 +0900112import org.mockito.Mock;
113import org.mockito.MockitoAnnotations;
Adrian Roosef7a4022017-01-19 14:48:35 -0800114
Jason Monk51305372017-06-22 11:41:08 -0400115import java.io.ByteArrayOutputStream;
116import java.io.PrintWriter;
Chris Wren621933f2017-06-14 15:59:03 -0400117import java.util.ArrayList;
Julia Reynoldsed1c9af2018-03-21 15:21:09 -0400118import java.util.function.Predicate;
Chris Wren621933f2017-06-14 15:59:03 -0400119
Adrian Roos02de4982017-02-11 09:35:54 +0100120@SmallTest
Chris Wren621933f2017-06-14 15:59:03 -0400121@RunWith(AndroidTestingRunner.class)
122@RunWithLooper
Jason Monk2a6ea9c2017-01-26 11:14:51 -0500123public class StatusBarTest extends SysuiTestCase {
Eliot Courtney8f56b0e2017-12-14 18:54:28 +0900124 @Mock private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
125 @Mock private UnlockMethodCache mUnlockMethodCache;
126 @Mock private KeyguardIndicationController mKeyguardIndicationController;
127 @Mock private NotificationStackScrollLayout mStackScroller;
yoshiki iguchi4e30e762018-02-06 12:09:23 +0900128 @Mock private HeadsUpManagerPhone mHeadsUpManager;
Eliot Courtney8f56b0e2017-12-14 18:54:28 +0900129 @Mock private SystemServicesProxy mSystemServicesProxy;
130 @Mock private NotificationPanelView mNotificationPanelView;
131 @Mock private IStatusBarService mBarService;
132 @Mock private ScrimController mScrimController;
133 @Mock private ArrayList<Entry> mNotificationList;
134 @Mock private FingerprintUnlockController mFingerprintUnlockController;
135 @Mock private NotificationData mNotificationData;
Adrian Roosef7a4022017-01-19 14:48:35 -0800136
Eliot Courtney8f56b0e2017-12-14 18:54:28 +0900137 // Mock dependencies:
138 @Mock private NotificationViewHierarchyManager mViewHierarchyManager;
139 @Mock private VisualStabilityManager mVisualStabilityManager;
140 @Mock private NotificationListener mNotificationListener;
Lucas Dupin47a65c72018-02-15 14:16:18 -0800141 @Mock private KeyguardViewMediator mKeyguardViewMediator;
jovanak5f6dc612018-03-27 11:59:22 -0700142 @Mock private NotificationLockscreenUserManager mLockscreenUserManager;
Selim Cinek7c6fe5b2018-04-09 18:27:13 -0700143 @Mock private NotificationRemoteInputManager mRemoteInputManager;
144 @Mock private RemoteInputController mRemoteInputController;
Eliot Courtney8f56b0e2017-12-14 18:54:28 +0900145
Eliot Courtney2b4c3a02017-11-27 13:27:46 +0900146 private TestableStatusBar mStatusBar;
147 private FakeMetricsLogger mMetricsLogger;
Eliot Courtney2b4c3a02017-11-27 13:27:46 +0900148 private PowerManager mPowerManager;
Eliot Courtneya6d8cf22017-10-20 13:26:58 +0900149 private TestableNotificationEntryManager mEntryManager;
Eliot Courtney8f56b0e2017-12-14 18:54:28 +0900150 private NotificationLogger mNotificationLogger;
Chris Wren27a52fa2017-02-01 14:21:43 -0500151
Adrian Roos02de4982017-02-11 09:35:54 +0100152 @Before
Julia Reynolds30203152017-05-26 13:36:31 -0400153 public void setup() throws Exception {
Eliot Courtney8f56b0e2017-12-14 18:54:28 +0900154 MockitoAnnotations.initMocks(this);
Jason Monk9c4faa82017-08-15 09:32:27 -0400155 mDependency.injectMockDependency(AssistManager.class);
156 mDependency.injectMockDependency(DeviceProvisionedController.class);
Eliot Courtneya6d8cf22017-10-20 13:26:58 +0900157 mDependency.injectMockDependency(NotificationGutsManager.class);
Eliot Courtneya6d8cf22017-10-20 13:26:58 +0900158 mDependency.injectMockDependency(NotificationMediaManager.class);
159 mDependency.injectMockDependency(ForegroundServiceController.class);
Eliot Courtney8f56b0e2017-12-14 18:54:28 +0900160 mDependency.injectTestDependency(NotificationViewHierarchyManager.class,
161 mViewHierarchyManager);
162 mDependency.injectTestDependency(VisualStabilityManager.class, mVisualStabilityManager);
163 mDependency.injectTestDependency(NotificationListener.class, mNotificationListener);
Jason Monk9c4faa82017-08-15 09:32:27 -0400164 mDependency.injectTestDependency(KeyguardMonitor.class, mock(KeyguardMonitorImpl.class));
Julia Reynoldsfc640012018-02-21 12:25:27 -0500165 mDependency.injectTestDependency(AppOpsListener.class, mock(AppOpsListener.class));
Eliot Courtney8f56b0e2017-12-14 18:54:28 +0900166
Jason Monk51305372017-06-22 11:41:08 -0400167 mContext.addMockSystemService(TrustManager.class, mock(TrustManager.class));
168 mContext.addMockSystemService(FingerprintManager.class, mock(FingerprintManager.class));
Eliot Courtney8f56b0e2017-12-14 18:54:28 +0900169
Chris Wrenef319902017-03-07 17:58:31 -0500170 mMetricsLogger = new FakeMetricsLogger();
Eliot Courtney8f56b0e2017-12-14 18:54:28 +0900171 mDependency.injectTestDependency(MetricsLogger.class, mMetricsLogger);
Eliot Courtney8f56b0e2017-12-14 18:54:28 +0900172 mDependency.injectTestDependency(NotificationLogger.class, mNotificationLogger);
Eugene Susla2de69552018-03-20 13:22:17 -0700173 mNotificationLogger = new NotificationLogger();
Eliot Courtney8f56b0e2017-12-14 18:54:28 +0900174
Julia Reynolds30203152017-05-26 13:36:31 -0400175 IPowerManager powerManagerService = mock(IPowerManager.class);
176 HandlerThread handlerThread = new HandlerThread("TestThread");
177 handlerThread.start();
178 mPowerManager = new PowerManager(mContext, powerManagerService,
179 new Handler(handlerThread.getLooper()));
Eliot Courtney8f56b0e2017-12-14 18:54:28 +0900180
181 CommandQueue commandQueue = mock(CommandQueue.class);
182 when(commandQueue.asBinder()).thenReturn(new Binder());
183 mContext.putComponent(CommandQueue.class, commandQueue);
184
185 mContext.setTheme(R.style.Theme_SystemUI_Light);
186
187 when(mStackScroller.generateLayoutParams(any())).thenReturn(new LayoutParams(0, 0));
188 when(mNotificationPanelView.getLayoutParams()).thenReturn(new LayoutParams(0, 0));
Julia Reynolds30203152017-05-26 13:36:31 -0400189 when(powerManagerService.isInteractive()).thenReturn(true);
Eliot Courtney8f56b0e2017-12-14 18:54:28 +0900190 when(mStackScroller.getActivatedChild()).thenReturn(null);
Julia Reynolds30203152017-05-26 13:36:31 -0400191
Adrian Roosef7a4022017-01-19 14:48:35 -0800192 doAnswer(invocation -> {
193 OnDismissAction onDismissAction = (OnDismissAction) invocation.getArguments()[0];
194 onDismissAction.onDismiss();
195 return null;
196 }).when(mStatusBarKeyguardViewManager).dismissWithAction(any(), any(), anyBoolean());
197
198 doAnswer(invocation -> {
199 Runnable runnable = (Runnable) invocation.getArguments()[0];
200 runnable.run();
201 return null;
202 }).when(mStatusBarKeyguardViewManager).addAfterKeyguardGoneRunnable(any());
Chris Wren27a52fa2017-02-01 14:21:43 -0500203
Eliot Courtney6c313d32017-12-14 19:57:51 +0900204 mEntryManager = new TestableNotificationEntryManager(mSystemServicesProxy, mPowerManager,
205 mContext);
Selim Cinek7c6fe5b2018-04-09 18:27:13 -0700206 when(mRemoteInputManager.getController()).thenReturn(mRemoteInputController);
Eliot Courtney8f56b0e2017-12-14 18:54:28 +0900207 mStatusBar = new TestableStatusBar(mStatusBarKeyguardViewManager, mUnlockMethodCache,
208 mKeyguardIndicationController, mStackScroller, mHeadsUpManager,
209 mPowerManager, mNotificationPanelView, mBarService, mNotificationListener,
210 mNotificationLogger, mVisualStabilityManager, mViewHierarchyManager,
Selim Cinek7e222c3c2018-01-25 12:22:41 -0800211 mEntryManager, mScrimController, mFingerprintUnlockController,
jovanak5f6dc612018-03-27 11:59:22 -0700212 mock(ActivityLaunchAnimator.class), mKeyguardViewMediator,
Selim Cinek7c6fe5b2018-04-09 18:27:13 -0700213 mRemoteInputManager, mock(NotificationGroupManager.class),
jovanak5f6dc612018-03-27 11:59:22 -0700214 mock(FalsingManager.class), mock(StatusBarWindowManager.class),
215 mock(NotificationIconAreaController.class), mock(DozeScrimController.class),
216 mock(NotificationShelf.class), mLockscreenUserManager,
217 mock(CommandQueue.class));
Eliot Courtney8f56b0e2017-12-14 18:54:28 +0900218 mStatusBar.mContext = mContext;
219 mStatusBar.mComponents = mContext.getComponents();
Eliot Courtney2b4c3a02017-11-27 13:27:46 +0900220 mEntryManager.setUpForTest(mStatusBar, mStackScroller, mStatusBar, mHeadsUpManager,
221 mNotificationData);
Eliot Courtney4a96b362017-12-14 19:38:52 +0900222 mNotificationLogger.setUpWithEntryManager(mEntryManager, mStackScroller);
Eliot Courtney3985ad52017-11-17 16:51:52 +0900223
Eliot Courtney3985ad52017-11-17 16:51:52 +0900224 TestableLooper.get(this).setMessageHandler(m -> {
225 if (m.getCallback() == mStatusBar.mNotificationLogger.getVisibilityReporter()) {
226 return false;
Chris Wren621933f2017-06-14 15:59:03 -0400227 }
Eliot Courtney3985ad52017-11-17 16:51:52 +0900228 return true;
Chris Wren621933f2017-06-14 15:59:03 -0400229 });
Adrian Roosef7a4022017-01-19 14:48:35 -0800230 }
231
Adrian Roos02de4982017-02-11 09:35:54 +0100232 @Test
Jason Monk5ecf80c2017-07-06 15:28:17 -0400233 public void testSetBouncerShowing_noCrash() {
234 mStatusBar.mCommandQueue = mock(CommandQueue.class);
235 mStatusBar.setBouncerShowing(true);
236 }
237
238 @Test
Adrian Roosef7a4022017-01-19 14:48:35 -0800239 public void executeRunnableDismissingKeyguard_nullRunnable_showingAndOccluded() {
240 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
241 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(true);
242
Jason Monk2a6ea9c2017-01-26 11:14:51 -0500243 mStatusBar.executeRunnableDismissingKeyguard(null, null, false, false, false);
Adrian Roosef7a4022017-01-19 14:48:35 -0800244 }
245
Adrian Roos02de4982017-02-11 09:35:54 +0100246 @Test
Adrian Roosef7a4022017-01-19 14:48:35 -0800247 public void executeRunnableDismissingKeyguard_nullRunnable_showing() {
248 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
249 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
250
Jason Monk2a6ea9c2017-01-26 11:14:51 -0500251 mStatusBar.executeRunnableDismissingKeyguard(null, null, false, false, false);
Adrian Roosef7a4022017-01-19 14:48:35 -0800252 }
253
Adrian Roos02de4982017-02-11 09:35:54 +0100254 @Test
Adrian Roosef7a4022017-01-19 14:48:35 -0800255 public void executeRunnableDismissingKeyguard_nullRunnable_notShowing() {
256 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(false);
257 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
258
Jason Monk2a6ea9c2017-01-26 11:14:51 -0500259 mStatusBar.executeRunnableDismissingKeyguard(null, null, false, false, false);
Adrian Roosef7a4022017-01-19 14:48:35 -0800260 }
261
Adrian Roos02de4982017-02-11 09:35:54 +0100262 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500263 public void lockscreenStateMetrics_notShowing() {
264 // uninteresting state, except that fingerprint must be non-zero
265 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
266 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
267 // interesting state
268 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(false);
269 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
270 when(mUnlockMethodCache.isMethodSecure()).thenReturn(false);
Chris Wren27a52fa2017-02-01 14:21:43 -0500271 mStatusBar.onKeyguardViewManagerStatesUpdated();
272
Chris Wrenef319902017-03-07 17:58:31 -0500273 MetricsAsserts.assertHasLog("missing hidden insecure lockscreen log",
274 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500275 new LogMaker(MetricsEvent.LOCKSCREEN)
276 .setType(MetricsEvent.TYPE_CLOSE)
277 .setSubtype(0));
278 }
279
Adrian Roos02de4982017-02-11 09:35:54 +0100280 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500281 public void lockscreenStateMetrics_notShowing_secure() {
282 // uninteresting state, except that fingerprint must be non-zero
283 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
284 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
285 // interesting state
286 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(false);
287 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
288 when(mUnlockMethodCache.isMethodSecure()).thenReturn(true);
289
290 mStatusBar.onKeyguardViewManagerStatesUpdated();
291
Chris Wrenef319902017-03-07 17:58:31 -0500292 MetricsAsserts.assertHasLog("missing hidden secure lockscreen log",
293 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500294 new LogMaker(MetricsEvent.LOCKSCREEN)
295 .setType(MetricsEvent.TYPE_CLOSE)
296 .setSubtype(1));
297 }
298
Adrian Roos02de4982017-02-11 09:35:54 +0100299 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500300 public void lockscreenStateMetrics_isShowing() {
301 // uninteresting state, except that fingerprint must be non-zero
302 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
303 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
304 // interesting state
305 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
306 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
307 when(mUnlockMethodCache.isMethodSecure()).thenReturn(false);
308
309 mStatusBar.onKeyguardViewManagerStatesUpdated();
310
Chris Wrenef319902017-03-07 17:58:31 -0500311 MetricsAsserts.assertHasLog("missing insecure lockscreen showing",
312 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500313 new LogMaker(MetricsEvent.LOCKSCREEN)
314 .setType(MetricsEvent.TYPE_OPEN)
315 .setSubtype(0));
316 }
317
Adrian Roos02de4982017-02-11 09:35:54 +0100318 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500319 public void lockscreenStateMetrics_isShowing_secure() {
320 // uninteresting state, except that fingerprint must be non-zero
321 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
322 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
323 // interesting state
324 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
325 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
326 when(mUnlockMethodCache.isMethodSecure()).thenReturn(true);
327
328 mStatusBar.onKeyguardViewManagerStatesUpdated();
329
Chris Wrenef319902017-03-07 17:58:31 -0500330 MetricsAsserts.assertHasLog("missing secure lockscreen showing log",
331 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500332 new LogMaker(MetricsEvent.LOCKSCREEN)
333 .setType(MetricsEvent.TYPE_OPEN)
334 .setSubtype(1));
335 }
336
Adrian Roos02de4982017-02-11 09:35:54 +0100337 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500338 public void lockscreenStateMetrics_isShowingBouncer() {
339 // uninteresting state, except that fingerprint must be non-zero
340 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
341 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
342 // interesting state
343 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
344 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(true);
345 when(mUnlockMethodCache.isMethodSecure()).thenReturn(true);
346
347 mStatusBar.onKeyguardViewManagerStatesUpdated();
348
Chris Wrenef319902017-03-07 17:58:31 -0500349 MetricsAsserts.assertHasLog("missing bouncer log",
350 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500351 new LogMaker(MetricsEvent.BOUNCER)
352 .setType(MetricsEvent.TYPE_OPEN)
353 .setSubtype(1));
354 }
355
Adrian Roos02de4982017-02-11 09:35:54 +0100356 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500357 public void onActivatedMetrics() {
358 ActivatableNotificationView view = mock(ActivatableNotificationView.class);
359 mStatusBar.onActivated(view);
360
Chris Wrenef319902017-03-07 17:58:31 -0500361 MetricsAsserts.assertHasLog("missing lockscreen note tap log",
362 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500363 new LogMaker(MetricsEvent.ACTION_LS_NOTE)
364 .setType(MetricsEvent.TYPE_ACTION));
365 }
366
Julia Reynolds30203152017-05-26 13:36:31 -0400367 @Test
368 public void testShouldPeek_nonSuppressedGroupSummary() {
369 when(mPowerManager.isScreenOn()).thenReturn(true);
370 when(mHeadsUpManager.isSnoozed(anyString())).thenReturn(false);
Julia Reynolds24653c32018-03-02 13:16:37 -0500371 when(mNotificationData.shouldSuppressStatusBar(any())).thenReturn(false);
Julia Reynolds30203152017-05-26 13:36:31 -0400372 when(mNotificationData.shouldFilterOut(any())).thenReturn(false);
373 when(mSystemServicesProxy.isDreaming()).thenReturn(false);
374 when(mNotificationData.getImportance(any())).thenReturn(IMPORTANCE_HIGH);
375
376 Notification n = new Notification.Builder(getContext(), "a")
377 .setGroup("a")
378 .setGroupSummary(true)
379 .setGroupAlertBehavior(Notification.GROUP_ALERT_SUMMARY)
380 .build();
381 StatusBarNotification sbn = new StatusBarNotification("a", "a", 0, "a", 0, 0, n,
382 UserHandle.of(0), null, 0);
383 NotificationData.Entry entry = new NotificationData.Entry(sbn);
384
Eliot Courtneya6d8cf22017-10-20 13:26:58 +0900385 assertTrue(mEntryManager.shouldPeek(entry, sbn));
Julia Reynolds30203152017-05-26 13:36:31 -0400386 }
387
388 @Test
389 public void testShouldPeek_suppressedGroupSummary() {
390 when(mPowerManager.isScreenOn()).thenReturn(true);
391 when(mHeadsUpManager.isSnoozed(anyString())).thenReturn(false);
Julia Reynolds24653c32018-03-02 13:16:37 -0500392 when(mNotificationData.shouldSuppressStatusBar(any())).thenReturn(false);
Julia Reynolds30203152017-05-26 13:36:31 -0400393 when(mNotificationData.shouldFilterOut(any())).thenReturn(false);
394 when(mSystemServicesProxy.isDreaming()).thenReturn(false);
395 when(mNotificationData.getImportance(any())).thenReturn(IMPORTANCE_HIGH);
396
397 Notification n = new Notification.Builder(getContext(), "a")
398 .setGroup("a")
399 .setGroupSummary(true)
400 .setGroupAlertBehavior(Notification.GROUP_ALERT_CHILDREN)
401 .build();
402 StatusBarNotification sbn = new StatusBarNotification("a", "a", 0, "a", 0, 0, n,
403 UserHandle.of(0), null, 0);
404 NotificationData.Entry entry = new NotificationData.Entry(sbn);
405
Eliot Courtneya6d8cf22017-10-20 13:26:58 +0900406 assertFalse(mEntryManager.shouldPeek(entry, sbn));
Julia Reynolds30203152017-05-26 13:36:31 -0400407 }
408
Chris Wren621933f2017-06-14 15:59:03 -0400409 @Test
Julia Reynolds24653c32018-03-02 13:16:37 -0500410 public void testShouldPeek_suppressedPeek() {
Beverly38159ce2017-07-13 16:39:24 -0400411 when(mPowerManager.isScreenOn()).thenReturn(true);
412 when(mHeadsUpManager.isSnoozed(anyString())).thenReturn(false);
413 when(mNotificationData.shouldFilterOut(any())).thenReturn(false);
414 when(mSystemServicesProxy.isDreaming()).thenReturn(false);
415 when(mNotificationData.getImportance(any())).thenReturn(IMPORTANCE_HIGH);
416
Julia Reynolds24653c32018-03-02 13:16:37 -0500417 when(mNotificationData.shouldSuppressPeek(any())).thenReturn(true);
418
419 Notification n = new Notification.Builder(getContext(), "a").build();
420 StatusBarNotification sbn = new StatusBarNotification("a", "a", 0, "a", 0, 0, n,
421 UserHandle.of(0), null, 0);
422 NotificationData.Entry entry = new NotificationData.Entry(sbn);
423
424 assertFalse(mEntryManager.shouldPeek(entry, sbn));
425 }
426
427 @Test
428 public void testShouldPeek_noSuppressedPeek() {
429 when(mPowerManager.isScreenOn()).thenReturn(true);
430 when(mHeadsUpManager.isSnoozed(anyString())).thenReturn(false);
431 when(mNotificationData.shouldFilterOut(any())).thenReturn(false);
432 when(mSystemServicesProxy.isDreaming()).thenReturn(false);
433 when(mNotificationData.getImportance(any())).thenReturn(IMPORTANCE_HIGH);
434
435 when(mNotificationData.shouldSuppressPeek(any())).thenReturn(false);
Beverly38159ce2017-07-13 16:39:24 -0400436
437 Notification n = new Notification.Builder(getContext(), "a").build();
438 StatusBarNotification sbn = new StatusBarNotification("a", "a", 0, "a", 0, 0, n,
439 UserHandle.of(0), null, 0);
440 NotificationData.Entry entry = new NotificationData.Entry(sbn);
441
Eliot Courtneya6d8cf22017-10-20 13:26:58 +0900442 assertTrue(mEntryManager.shouldPeek(entry, sbn));
Beverly38159ce2017-07-13 16:39:24 -0400443 }
444
445 @Test
e.min30d36512018-03-29 10:06:21 +0900446 public void testPeek_disabledStatusBar() {
447 Notification n = new Notification.Builder(getContext(), "a").build();
448 StatusBarNotification sbn = new StatusBarNotification("a", "a", 0, "a", 0, 0, n,
449 UserHandle.of(0), null, 0);
450 NotificationData.Entry entry = new NotificationData.Entry(sbn);
451 mStatusBar.disable(StatusBarManager.DISABLE_EXPAND, 0, false /* animate */);
452
453 assertFalse("The panel shouldn't allow peek while disabled",
454 mStatusBar.shouldPeek(entry, sbn));
455 }
456
457 @Test
458 public void testPeek_disabledNotificationShade() {
459 Notification n = new Notification.Builder(getContext(), "a").build();
460 StatusBarNotification sbn = new StatusBarNotification("a", "a", 0, "a", 0, 0, n,
461 UserHandle.of(0), null, 0);
462 NotificationData.Entry entry = new NotificationData.Entry(sbn);
463 mStatusBar.disable(0, StatusBarManager.DISABLE2_NOTIFICATION_SHADE, false /* animate */);
464
465 assertFalse("The panel shouldn't allow peek while notitifcation shade disabled",
466 mStatusBar.shouldPeek(entry, sbn));
467 }
468
469 @Test
Chris Wren621933f2017-06-14 15:59:03 -0400470 public void testLogHidden() {
471 try {
472 mStatusBar.handleVisibleToUserChanged(false);
Selim Cinek1a891a92017-12-04 17:41:27 +0100473 waitForUiOffloadThread();
Chris Wren621933f2017-06-14 15:59:03 -0400474 verify(mBarService, times(1)).onPanelHidden();
475 verify(mBarService, never()).onPanelRevealed(anyBoolean(), anyInt());
476 } catch (RemoteException e) {
477 fail();
478 }
479 }
480
481 @Test
482 public void testPanelOpenForPeek() {
483 when(mHeadsUpManager.hasPinnedHeadsUp()).thenReturn(true);
484 when(mNotificationData.getActiveNotifications()).thenReturn(mNotificationList);
485 when(mNotificationList.size()).thenReturn(5);
486 when(mNotificationPanelView.isFullyCollapsed()).thenReturn(true);
487 mStatusBar.setBarStateForTest(StatusBarState.SHADE);
488
489 try {
490 mStatusBar.handleVisibleToUserChanged(true);
Selim Cinek1a891a92017-12-04 17:41:27 +0100491 waitForUiOffloadThread();
Chris Wren621933f2017-06-14 15:59:03 -0400492 verify(mBarService, never()).onPanelHidden();
493 verify(mBarService, times(1)).onPanelRevealed(false, 1);
494 } catch (RemoteException e) {
495 fail();
496 }
497 TestableLooper.get(this).processAllMessages();
498 }
499
500 @Test
501 public void testPanelOpenAndClear() {
502 when(mHeadsUpManager.hasPinnedHeadsUp()).thenReturn(false);
503 when(mNotificationData.getActiveNotifications()).thenReturn(mNotificationList);
504 when(mNotificationList.size()).thenReturn(5);
505 when(mNotificationPanelView.isFullyCollapsed()).thenReturn(false);
506 mStatusBar.setBarStateForTest(StatusBarState.SHADE);
507
508 try {
509 mStatusBar.handleVisibleToUserChanged(true);
Selim Cinek1a891a92017-12-04 17:41:27 +0100510 waitForUiOffloadThread();
Chris Wren621933f2017-06-14 15:59:03 -0400511 verify(mBarService, never()).onPanelHidden();
512 verify(mBarService, times(1)).onPanelRevealed(true, 5);
513 } catch (RemoteException e) {
514 fail();
515 }
516 TestableLooper.get(this).processAllMessages();
517 }
518
519 @Test
520 public void testPanelOpenAndNoClear() {
521 when(mHeadsUpManager.hasPinnedHeadsUp()).thenReturn(false);
522 when(mNotificationData.getActiveNotifications()).thenReturn(mNotificationList);
523 when(mNotificationList.size()).thenReturn(5);
524 when(mNotificationPanelView.isFullyCollapsed()).thenReturn(false);
525 mStatusBar.setBarStateForTest(StatusBarState.KEYGUARD);
526
527 try {
528 mStatusBar.handleVisibleToUserChanged(true);
Selim Cinek1a891a92017-12-04 17:41:27 +0100529 waitForUiOffloadThread();
Chris Wren621933f2017-06-14 15:59:03 -0400530 verify(mBarService, never()).onPanelHidden();
531 verify(mBarService, times(1)).onPanelRevealed(false, 5);
532 } catch (RemoteException e) {
533 fail();
534 }
535 TestableLooper.get(this).processAllMessages();
536 }
537
Jason Monk51305372017-06-22 11:41:08 -0400538 @Test
Charles He2eda2422017-09-24 17:55:21 +0100539 public void testDisableExpandStatusBar() {
540 mStatusBar.setBarStateForTest(StatusBarState.SHADE);
541 mStatusBar.setUserSetupForTest(true);
542 when(mStatusBar.isDeviceProvisioned()).thenReturn(true);
543
544 mStatusBar.disable(StatusBarManager.DISABLE_NONE,
545 StatusBarManager.DISABLE2_NOTIFICATION_SHADE, false);
546 verify(mNotificationPanelView).setQsExpansionEnabled(false);
547 mStatusBar.animateExpandNotificationsPanel();
548 verify(mNotificationPanelView, never()).expand(anyBoolean());
549 mStatusBar.animateExpandSettingsPanel(null);
550 verify(mNotificationPanelView, never()).expand(anyBoolean());
551
552 mStatusBar.disable(StatusBarManager.DISABLE_NONE, StatusBarManager.DISABLE2_NONE, false);
553 verify(mNotificationPanelView).setQsExpansionEnabled(true);
554 mStatusBar.animateExpandNotificationsPanel();
Eugene Susla2de69552018-03-20 13:22:17 -0700555 verify(mNotificationPanelView).expandWithoutQs();
Charles He2eda2422017-09-24 17:55:21 +0100556 mStatusBar.animateExpandSettingsPanel(null);
Eugene Susla2de69552018-03-20 13:22:17 -0700557 verify(mNotificationPanelView).expandWithQs();
Charles He2eda2422017-09-24 17:55:21 +0100558 }
559
560 @Test
Jason Monk51305372017-06-22 11:41:08 -0400561 public void testDump_DoesNotCrash() {
562 mStatusBar.dump(null, new PrintWriter(new ByteArrayOutputStream()), null);
563 }
564
Jason Monk9c4faa82017-08-15 09:32:27 -0400565 @Test
566 @RunWithLooper(setAsMainLooper = true)
567 public void testUpdateKeyguardState_DoesNotCrash() {
Jason Monk9c4faa82017-08-15 09:32:27 -0400568 mStatusBar.mState = StatusBarState.KEYGUARD;
Eliot Courtney09322282017-11-09 15:31:19 +0900569 when(mStatusBar.mLockscreenUserManager.getCurrentProfiles()).thenReturn(
570 new SparseArray<>());
Jason Monk9c4faa82017-08-15 09:32:27 -0400571 mStatusBar.updateKeyguardState(false, false);
572 }
573
Lucas Dupinc2e75462017-12-06 13:59:25 -0800574 @Test
575 public void testFingerprintNotification_UpdatesScrims() {
Lucas Dupinc2e75462017-12-06 13:59:25 -0800576 mStatusBar.notifyFpAuthModeChanged();
577 verify(mScrimController).transitionTo(any(), any());
578 }
579
Lucas Dupin311eac82017-12-11 14:40:07 -0800580 @Test
581 public void testFingerprintUnlock_UpdatesScrims() {
582 // Simulate unlocking from AoD with fingerprint.
583 when(mFingerprintUnlockController.getMode())
584 .thenReturn(FingerprintUnlockController.MODE_WAKE_AND_UNLOCK);
585 mStatusBar.updateScrimController();
586 verify(mScrimController).transitionTo(eq(ScrimState.UNLOCKED), any());
587 }
588
Lucas Dupind5107302018-03-19 15:30:29 -0700589 @Test
590 public void testSetOccluded_propagatesToScrimController() {
591 mStatusBar.setOccluded(true);
592 verify(mScrimController).setKeyguardOccluded(eq(true));
593
594 reset(mScrimController);
595 mStatusBar.setOccluded(false);
596 verify(mScrimController).setKeyguardOccluded(eq(false));
597 }
598
Julia Reynoldsed1c9af2018-03-21 15:21:09 -0400599 @Test
600 public void testInflateFooterView() {
601 mStatusBar.reevaluateStyles();
602 ArgumentCaptor<FooterView> captor = ArgumentCaptor.forClass(FooterView.class);
603 verify(mStackScroller).setFooterView(captor.capture());
604
605 assertNotNull(captor.getValue().findViewById(R.id.manage_text).hasOnClickListeners());
606 assertNotNull(captor.getValue().findViewById(R.id.dismiss_text).hasOnClickListeners());
607 }
608
609 @Test
610 public void testUpdateFooter_noNotifications() {
611 mStatusBar.setBarStateForTest(StatusBarState.SHADE);
612 assertEquals(0, mEntryManager.getNotificationData().getActiveNotifications().size());
613
614 mStatusBar.updateFooter();
615 verify(mStackScroller).updateFooterView(false, false);
616 }
617
618 @Test
Selim Cinek7c6fe5b2018-04-09 18:27:13 -0700619 public void testUpdateFooter_remoteInput() {
620 mStatusBar.setBarStateForTest(StatusBarState.SHADE);
621 ArrayList<Entry> entries = new ArrayList<>();
622 entries.add(mock(Entry.class));
623 when(mNotificationData.getActiveNotifications()).thenReturn(entries);
624
625 ExpandableNotificationRow row = mock(ExpandableNotificationRow.class);
626 when(row.canViewBeDismissed()).thenReturn(true);
627 when(mStackScroller.getChildCount()).thenReturn(1);
628 when(mStackScroller.getChildAt(anyInt())).thenReturn(row);
629 when(mRemoteInputController.isRemoteInputActive()).thenReturn(true);
630
631 mStatusBar.updateFooter();
632 verify(mStackScroller).updateFooterView(false, true);
633 }
634
635 @Test
Julia Reynoldsed1c9af2018-03-21 15:21:09 -0400636 public void testUpdateFooter_oneClearableNotification() {
637 mStatusBar.setBarStateForTest(StatusBarState.SHADE);
638 ArrayList<Entry> entries = new ArrayList<>();
639 entries.add(mock(Entry.class));
640 when(mNotificationData.getActiveNotifications()).thenReturn(entries);
641
642 ExpandableNotificationRow row = mock(ExpandableNotificationRow.class);
643 when(row.canViewBeDismissed()).thenReturn(true);
644 when(mStackScroller.getChildCount()).thenReturn(1);
645 when(mStackScroller.getChildAt(anyInt())).thenReturn(row);
646
647 mStatusBar.updateFooter();
648 verify(mStackScroller).updateFooterView(true, true);
649 }
650
651 @Test
652 public void testUpdateFooter_oneNonClearableNotification() {
653 mStatusBar.setBarStateForTest(StatusBarState.SHADE);
654 ArrayList<Entry> entries = new ArrayList<>();
655 entries.add(mock(Entry.class));
656 when(mNotificationData.getActiveNotifications()).thenReturn(entries);
657
658 mStatusBar.updateFooter();
659 verify(mStackScroller).updateFooterView(true, false);
660 }
661
662 @Test
663 public void testUpdateFooter_atEnd() {
664 // add footer
665 mStatusBar.reevaluateStyles();
666
667 // add notification
668 ExpandableNotificationRow row = mock(ExpandableNotificationRow.class);
669 when(row.isClearable()).thenReturn(true);
670 mStackScroller.addContainerView(row);
671
672 mStatusBar.onUpdateRowStates();
673
674 // move footer to end
675 verify(mStackScroller).changeViewPosition(any(FooterView.class), eq(-1 /* end */));
676 }
677
jovanak5f6dc612018-03-27 11:59:22 -0700678 @Test
679 public void testSetState_changesIsFullScreenUserSwitcherState() {
680 mStatusBar.setBarStateForTest(StatusBarState.KEYGUARD);
681 assertFalse(mStatusBar.isFullScreenUserSwitcherState());
682
683 mStatusBar.setBarStateForTest(StatusBarState.FULLSCREEN_USER_SWITCHER);
684 assertTrue(mStatusBar.isFullScreenUserSwitcherState());
685 }
686
687 @Test
688 public void testShowKeyguardImplementation_setsState() {
689 when(mLockscreenUserManager.getCurrentProfiles()).thenReturn(new SparseArray<>());
690
691 mStatusBar.setBarStateForTest(StatusBarState.SHADE);
692
693 // By default, showKeyguardImpl sets state to KEYGUARD.
694 mStatusBar.showKeyguardImpl();
695 assertTrue(mStatusBar.mState == StatusBarState.KEYGUARD);
696
697 // If useFullscreenUserSwitcher is true, state is set to FULLSCREEN_USER_SWITCHER.
698 mStatusBar.mUserSwitcherController = mock(UserSwitcherController.class);
699 when(mStatusBar.mUserSwitcherController.useFullscreenUserSwitcher()).thenReturn(true);
700 mStatusBar.showKeyguardImpl();
701 assertTrue(mStatusBar.mState == StatusBarState.FULLSCREEN_USER_SWITCHER);
702 }
703
Jason Monk2a6ea9c2017-01-26 11:14:51 -0500704 static class TestableStatusBar extends StatusBar {
Chris Wren27a52fa2017-02-01 14:21:43 -0500705 public TestableStatusBar(StatusBarKeyguardViewManager man,
706 UnlockMethodCache unlock, KeyguardIndicationController key,
yoshiki iguchi4e30e762018-02-06 12:09:23 +0900707 NotificationStackScrollLayout stack, HeadsUpManagerPhone hum,
Eliot Courtneya6d8cf22017-10-20 13:26:58 +0900708 PowerManager pm, NotificationPanelView panelView,
Eliot Courtney3985ad52017-11-17 16:51:52 +0900709 IStatusBarService barService, NotificationListener notificationListener,
Eliot Courtneya6d8cf22017-10-20 13:26:58 +0900710 NotificationLogger notificationLogger,
Eliot Courtney2b4c3a02017-11-27 13:27:46 +0900711 VisualStabilityManager visualStabilityManager,
712 NotificationViewHierarchyManager viewHierarchyManager,
Eliot Courtneya6d8cf22017-10-20 13:26:58 +0900713 TestableNotificationEntryManager entryManager, ScrimController scrimController,
Selim Cinek7e222c3c2018-01-25 12:22:41 -0800714 FingerprintUnlockController fingerprintUnlockController,
jovanak5f6dc612018-03-27 11:59:22 -0700715 ActivityLaunchAnimator launchAnimator, KeyguardViewMediator keyguardViewMediator,
716 NotificationRemoteInputManager notificationRemoteInputManager,
717 NotificationGroupManager notificationGroupManager,
718 FalsingManager falsingManager,
719 StatusBarWindowManager statusBarWindowManager,
720 NotificationIconAreaController notificationIconAreaController,
721 DozeScrimController dozeScrimController,
722 NotificationShelf notificationShelf,
723 NotificationLockscreenUserManager notificationLockscreenUserManager,
724 CommandQueue commandQueue) {
Adrian Roosef7a4022017-01-19 14:48:35 -0800725 mStatusBarKeyguardViewManager = man;
Chris Wren27a52fa2017-02-01 14:21:43 -0500726 mUnlockMethodCache = unlock;
727 mKeyguardIndicationController = key;
728 mStackScroller = stack;
Julia Reynolds30203152017-05-26 13:36:31 -0400729 mHeadsUpManager = hum;
Julia Reynolds30203152017-05-26 13:36:31 -0400730 mPowerManager = pm;
Jorim Jaggifd3b1a12017-06-06 17:04:19 -0700731 mNotificationPanel = panelView;
Chris Wren621933f2017-06-14 15:59:03 -0400732 mBarService = barService;
Eliot Courtney3985ad52017-11-17 16:51:52 +0900733 mNotificationListener = notificationListener;
734 mNotificationLogger = notificationLogger;
Adrian Roos6d5ebb72017-08-03 15:10:22 +0200735 mWakefulnessLifecycle = createAwakeWakefulnessLifecycle();
Eliot Courtney2b4c3a02017-11-27 13:27:46 +0900736 mVisualStabilityManager = visualStabilityManager;
737 mViewHierarchyManager = viewHierarchyManager;
Eliot Courtneya6d8cf22017-10-20 13:26:58 +0900738 mEntryManager = entryManager;
Lucas Dupinc2e75462017-12-06 13:59:25 -0800739 mScrimController = scrimController;
Lucas Dupin311eac82017-12-11 14:40:07 -0800740 mFingerprintUnlockController = fingerprintUnlockController;
Selim Cinek7e222c3c2018-01-25 12:22:41 -0800741 mActivityLaunchAnimator = launchAnimator;
Lucas Dupin47a65c72018-02-15 14:16:18 -0800742 mKeyguardViewMediator = keyguardViewMediator;
Julia Reynoldsed1c9af2018-03-21 15:21:09 -0400743 mClearAllEnabled = true;
jovanak5f6dc612018-03-27 11:59:22 -0700744 mRemoteInputManager = notificationRemoteInputManager;
745 mGroupManager = notificationGroupManager;
746 mFalsingManager = falsingManager;
747 mStatusBarWindowManager = statusBarWindowManager;
748 mNotificationIconAreaController = notificationIconAreaController;
749 mDozeScrimController = dozeScrimController;
750 mNotificationShelf = notificationShelf;
751 mLockscreenUserManager = notificationLockscreenUserManager;
752 mCommandQueue = commandQueue;
Adrian Roos6d5ebb72017-08-03 15:10:22 +0200753 }
754
755 private WakefulnessLifecycle createAwakeWakefulnessLifecycle() {
756 WakefulnessLifecycle wakefulnessLifecycle = new WakefulnessLifecycle();
757 wakefulnessLifecycle.dispatchStartedWakingUp();
758 wakefulnessLifecycle.dispatchFinishedWakingUp();
759 return wakefulnessLifecycle;
Adrian Roosef7a4022017-01-19 14:48:35 -0800760 }
761
Jason Monk9c4faa82017-08-15 09:32:27 -0400762 @Override
763 protected void updateTheme() {
764 // Do nothing for now, until we have more mocking and StatusBar is smaller.
765 }
766
Chris Wren621933f2017-06-14 15:59:03 -0400767 public void setBarStateForTest(int state) {
768 mState = state;
Adrian Roosef7a4022017-01-19 14:48:35 -0800769 }
Charles He2eda2422017-09-24 17:55:21 +0100770
771 public void setUserSetupForTest(boolean userSetup) {
772 mUserSetup = userSetup;
773 }
Eliot Courtneya6d8cf22017-10-20 13:26:58 +0900774
775 }
776
777 private class TestableNotificationEntryManager extends NotificationEntryManager {
778
Eliot Courtney6c313d32017-12-14 19:57:51 +0900779 public TestableNotificationEntryManager(SystemServicesProxy systemServicesProxy,
780 PowerManager powerManager, Context context) {
781 super(context);
Eliot Courtneya6d8cf22017-10-20 13:26:58 +0900782 mSystemServicesProxy = systemServicesProxy;
783 mPowerManager = powerManager;
784 }
785
786 public void setUpForTest(NotificationPresenter presenter,
Eliot Courtney2b4c3a02017-11-27 13:27:46 +0900787 NotificationListContainer listContainer,
Eliot Courtneya6d8cf22017-10-20 13:26:58 +0900788 Callback callback,
yoshiki iguchi4e30e762018-02-06 12:09:23 +0900789 HeadsUpManagerPhone headsUpManager,
Eliot Courtneya6d8cf22017-10-20 13:26:58 +0900790 NotificationData notificationData) {
Eliot Courtney2b4c3a02017-11-27 13:27:46 +0900791 super.setUpWithPresenter(presenter, listContainer, callback, headsUpManager);
Eliot Courtneya6d8cf22017-10-20 13:26:58 +0900792 mNotificationData = notificationData;
793 mUseHeadsUp = true;
794 }
Adrian Roosef7a4022017-01-19 14:48:35 -0800795 }
Eliot Courtney09322282017-11-09 15:31:19 +0900796}