blob: 09f6b554064b833e2acccce8de7f187fcf1e1fb7 [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
19import static org.mockito.Matchers.any;
20import static org.mockito.Matchers.anyBoolean;
21import static org.mockito.Mockito.doAnswer;
22import static org.mockito.Mockito.mock;
23import static org.mockito.Mockito.when;
24
Chris Wren27a52fa2017-02-01 14:21:43 -050025import android.metrics.LogMaker;
Adrian Roos02de4982017-02-11 09:35:54 +010026import android.support.test.filters.FlakyTest;
Adrian Roosef7a4022017-01-19 14:48:35 -080027import android.support.test.filters.SmallTest;
Chris Wren27a52fa2017-02-01 14:21:43 -050028import android.support.test.metricshelper.MetricsAsserts;
Adrian Roosef7a4022017-01-19 14:48:35 -080029import android.support.test.runner.AndroidJUnit4;
Chris Wren27a52fa2017-02-01 14:21:43 -050030import android.util.DisplayMetrics;
Adrian Roosef7a4022017-01-19 14:48:35 -080031
Chris Wrenef319902017-03-07 17:58:31 -050032import com.android.internal.logging.MetricsLogger;
Chris Wren27a52fa2017-02-01 14:21:43 -050033import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
Chris Wrenef319902017-03-07 17:58:31 -050034import com.android.internal.logging.testing.FakeMetricsLogger;
Adrian Roosef7a4022017-01-19 14:48:35 -080035import com.android.keyguard.KeyguardHostView.OnDismissAction;
36import com.android.systemui.SysuiTestCase;
Chris Wren27a52fa2017-02-01 14:21:43 -050037import com.android.systemui.statusbar.ActivatableNotificationView;
38import com.android.systemui.statusbar.KeyguardIndicationController;
39import com.android.systemui.statusbar.NotificationData;
40import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
Adrian Roosef7a4022017-01-19 14:48:35 -080041
42import org.junit.Before;
Adrian Roos02de4982017-02-11 09:35:54 +010043import org.junit.Ignore;
Adrian Roosef7a4022017-01-19 14:48:35 -080044import org.junit.Test;
45import org.junit.runner.RunWith;
46
Adrian Roos02de4982017-02-11 09:35:54 +010047@SmallTest
48@RunWith(AndroidJUnit4.class)
Jason Monk2a6ea9c2017-01-26 11:14:51 -050049public class StatusBarTest extends SysuiTestCase {
Adrian Roosef7a4022017-01-19 14:48:35 -080050
51 StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
Chris Wren27a52fa2017-02-01 14:21:43 -050052 UnlockMethodCache mUnlockMethodCache;
53 KeyguardIndicationController mKeyguardIndicationController;
54 NotificationStackScrollLayout mStackScroller;
Jason Monk2a6ea9c2017-01-26 11:14:51 -050055 StatusBar mStatusBar;
Chris Wrenef319902017-03-07 17:58:31 -050056 FakeMetricsLogger mMetricsLogger;
Adrian Roosef7a4022017-01-19 14:48:35 -080057
Chris Wren27a52fa2017-02-01 14:21:43 -050058 private DisplayMetrics mDisplayMetrics = new DisplayMetrics();
59
Adrian Roos02de4982017-02-11 09:35:54 +010060 @Before
Adrian Roosef7a4022017-01-19 14:48:35 -080061 public void setup() {
62 mStatusBarKeyguardViewManager = mock(StatusBarKeyguardViewManager.class);
Chris Wren27a52fa2017-02-01 14:21:43 -050063 mUnlockMethodCache = mock(UnlockMethodCache.class);
64 mKeyguardIndicationController = mock(KeyguardIndicationController.class);
65 mStackScroller = mock(NotificationStackScrollLayout.class);
Chris Wrenef319902017-03-07 17:58:31 -050066 mMetricsLogger = new FakeMetricsLogger();
Chris Wren27a52fa2017-02-01 14:21:43 -050067 mStatusBar = new TestableStatusBar(mStatusBarKeyguardViewManager, mUnlockMethodCache,
Chris Wrenef319902017-03-07 17:58:31 -050068 mKeyguardIndicationController, mStackScroller, mMetricsLogger);
Adrian Roosef7a4022017-01-19 14:48:35 -080069
70 doAnswer(invocation -> {
71 OnDismissAction onDismissAction = (OnDismissAction) invocation.getArguments()[0];
72 onDismissAction.onDismiss();
73 return null;
74 }).when(mStatusBarKeyguardViewManager).dismissWithAction(any(), any(), anyBoolean());
75
76 doAnswer(invocation -> {
77 Runnable runnable = (Runnable) invocation.getArguments()[0];
78 runnable.run();
79 return null;
80 }).when(mStatusBarKeyguardViewManager).addAfterKeyguardGoneRunnable(any());
Chris Wren27a52fa2017-02-01 14:21:43 -050081
82 when(mStackScroller.getActivatedChild()).thenReturn(null);
Adrian Roosef7a4022017-01-19 14:48:35 -080083 }
84
Adrian Roos02de4982017-02-11 09:35:54 +010085 @Test
Adrian Roosef7a4022017-01-19 14:48:35 -080086 public void executeRunnableDismissingKeyguard_nullRunnable_showingAndOccluded() {
87 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
88 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(true);
89
Jason Monk2a6ea9c2017-01-26 11:14:51 -050090 mStatusBar.executeRunnableDismissingKeyguard(null, null, false, false, false);
Adrian Roosef7a4022017-01-19 14:48:35 -080091 }
92
Adrian Roos02de4982017-02-11 09:35:54 +010093 @Test
Adrian Roosef7a4022017-01-19 14:48:35 -080094 public void executeRunnableDismissingKeyguard_nullRunnable_showing() {
95 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
96 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
97
Jason Monk2a6ea9c2017-01-26 11:14:51 -050098 mStatusBar.executeRunnableDismissingKeyguard(null, null, false, false, false);
Adrian Roosef7a4022017-01-19 14:48:35 -080099 }
100
Adrian Roos02de4982017-02-11 09:35:54 +0100101 @Test
Adrian Roosef7a4022017-01-19 14:48:35 -0800102 public void executeRunnableDismissingKeyguard_nullRunnable_notShowing() {
103 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(false);
104 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
105
Jason Monk2a6ea9c2017-01-26 11:14:51 -0500106 mStatusBar.executeRunnableDismissingKeyguard(null, null, false, false, false);
Adrian Roosef7a4022017-01-19 14:48:35 -0800107 }
108
Adrian Roos02de4982017-02-11 09:35:54 +0100109 @Ignore("flaky test")
110 @FlakyTest
111 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500112 public void lockscreenStateMetrics_notShowing() {
113 // uninteresting state, except that fingerprint must be non-zero
114 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
115 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
116 // interesting state
117 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(false);
118 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
119 when(mUnlockMethodCache.isMethodSecure()).thenReturn(false);
Chris Wren27a52fa2017-02-01 14:21:43 -0500120 mStatusBar.onKeyguardViewManagerStatesUpdated();
121
Chris Wrenef319902017-03-07 17:58:31 -0500122 MetricsAsserts.assertHasLog("missing hidden insecure lockscreen log",
123 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500124 new LogMaker(MetricsEvent.LOCKSCREEN)
125 .setType(MetricsEvent.TYPE_CLOSE)
126 .setSubtype(0));
127 }
128
Adrian Roos02de4982017-02-11 09:35:54 +0100129 @Ignore("flaky test")
130 @FlakyTest
131 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500132 public void lockscreenStateMetrics_notShowing_secure() {
133 // uninteresting state, except that fingerprint must be non-zero
134 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
135 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
136 // interesting state
137 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(false);
138 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
139 when(mUnlockMethodCache.isMethodSecure()).thenReturn(true);
140
141 mStatusBar.onKeyguardViewManagerStatesUpdated();
142
Chris Wrenef319902017-03-07 17:58:31 -0500143 MetricsAsserts.assertHasLog("missing hidden secure lockscreen log",
144 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500145 new LogMaker(MetricsEvent.LOCKSCREEN)
146 .setType(MetricsEvent.TYPE_CLOSE)
147 .setSubtype(1));
148 }
149
Adrian Roos02de4982017-02-11 09:35:54 +0100150 @Ignore("flaky test")
151 @FlakyTest
152 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500153 public void lockscreenStateMetrics_isShowing() {
154 // uninteresting state, except that fingerprint must be non-zero
155 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
156 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
157 // interesting state
158 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
159 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
160 when(mUnlockMethodCache.isMethodSecure()).thenReturn(false);
161
162 mStatusBar.onKeyguardViewManagerStatesUpdated();
163
Chris Wrenef319902017-03-07 17:58:31 -0500164 MetricsAsserts.assertHasLog("missing insecure lockscreen showing",
165 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500166 new LogMaker(MetricsEvent.LOCKSCREEN)
167 .setType(MetricsEvent.TYPE_OPEN)
168 .setSubtype(0));
169 }
170
Adrian Roos02de4982017-02-11 09:35:54 +0100171 @Ignore("flaky test")
172 @FlakyTest
173 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500174 public void lockscreenStateMetrics_isShowing_secure() {
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(true);
180 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
181 when(mUnlockMethodCache.isMethodSecure()).thenReturn(true);
182
183 mStatusBar.onKeyguardViewManagerStatesUpdated();
184
Chris Wrenef319902017-03-07 17:58:31 -0500185 MetricsAsserts.assertHasLog("missing secure lockscreen showing log",
186 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500187 new LogMaker(MetricsEvent.LOCKSCREEN)
188 .setType(MetricsEvent.TYPE_OPEN)
189 .setSubtype(1));
190 }
191
Adrian Roos02de4982017-02-11 09:35:54 +0100192 @Ignore("flaky test")
193 @FlakyTest
194 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500195 public void lockscreenStateMetrics_isShowingBouncer() {
196 // uninteresting state, except that fingerprint must be non-zero
197 when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false);
198 when(mUnlockMethodCache.canSkipBouncer()).thenReturn(true);
199 // interesting state
200 when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
201 when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(true);
202 when(mUnlockMethodCache.isMethodSecure()).thenReturn(true);
203
204 mStatusBar.onKeyguardViewManagerStatesUpdated();
205
Chris Wrenef319902017-03-07 17:58:31 -0500206 MetricsAsserts.assertHasLog("missing bouncer log",
207 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500208 new LogMaker(MetricsEvent.BOUNCER)
209 .setType(MetricsEvent.TYPE_OPEN)
210 .setSubtype(1));
211 }
212
Adrian Roos02de4982017-02-11 09:35:54 +0100213 @Ignore("flaky test")
214 @FlakyTest
215 @Test
Chris Wren27a52fa2017-02-01 14:21:43 -0500216 public void onActivatedMetrics() {
217 ActivatableNotificationView view = mock(ActivatableNotificationView.class);
218 mStatusBar.onActivated(view);
219
Chris Wrenef319902017-03-07 17:58:31 -0500220 MetricsAsserts.assertHasLog("missing lockscreen note tap log",
221 mMetricsLogger.getLogs(),
Chris Wren27a52fa2017-02-01 14:21:43 -0500222 new LogMaker(MetricsEvent.ACTION_LS_NOTE)
223 .setType(MetricsEvent.TYPE_ACTION));
224 }
225
Jason Monk2a6ea9c2017-01-26 11:14:51 -0500226 static class TestableStatusBar extends StatusBar {
Chris Wren27a52fa2017-02-01 14:21:43 -0500227 public TestableStatusBar(StatusBarKeyguardViewManager man,
228 UnlockMethodCache unlock, KeyguardIndicationController key,
Chris Wrenef319902017-03-07 17:58:31 -0500229 NotificationStackScrollLayout stack, MetricsLogger logger) {
Adrian Roosef7a4022017-01-19 14:48:35 -0800230 mStatusBarKeyguardViewManager = man;
Chris Wren27a52fa2017-02-01 14:21:43 -0500231 mUnlockMethodCache = unlock;
232 mKeyguardIndicationController = key;
233 mStackScroller = stack;
Chris Wrenef319902017-03-07 17:58:31 -0500234 mMetricsLogger = logger;
Adrian Roosef7a4022017-01-19 14:48:35 -0800235 }
236
237 @Override
Jason Monk2a6ea9c2017-01-26 11:14:51 -0500238 protected H createHandler() {
Adrian Roosef7a4022017-01-19 14:48:35 -0800239 return null;
240 }
241 }
Adrian Roos02de4982017-02-11 09:35:54 +0100242}