summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Matt Pietal <mpietal@google.com> 2021-10-01 09:05:57 -0400
committer Matt Pietal <mpietal@google.com> 2021-10-07 13:53:23 +0000
commit74b7f3c123338a9a6ec42e600cb0795fe63005c9 (patch)
tree21508cc69a7296b927bca9ea1933b910bac2bfab
parent5250bc61b08c23935ec45a59c9bc21f5abd18bc8 (diff)
Start keyguard docs
1. Move responsibility for the bouncer container to the NotificationShadeWindowViewController 2. Start very basic keyguard documentation (much more to come) Bug: 195430376 Test: atest KeyguardBouncerTest StatusBarTest StatusBarKeyguardViewManagerTest NotificationPanelViewControllerTest Change-Id: Iba45a9252fd37c00b2023407eb44bd91c44a87ad
-rw-r--r--packages/SystemUI/docs/keyguard.md12
-rw-r--r--packages/SystemUI/docs/keyguard/bouncer.md18
-rw-r--r--packages/SystemUI/res/layout/super_notification_shade.xml2
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java27
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java7
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java2
11 files changed, 74 insertions, 32 deletions
diff --git a/packages/SystemUI/docs/keyguard.md b/packages/SystemUI/docs/keyguard.md
new file mode 100644
index 000000000000..e3d48aee96e4
--- /dev/null
+++ b/packages/SystemUI/docs/keyguard.md
@@ -0,0 +1,12 @@
+# Keyguard (aka Lockscreen)
+
+Keyguard is responsible for:
+
+1. Handling authentication to allow the user to unlock the device, via biometrics or [KeyguardBouncer][1]
+2. Displaying informational content such as the time, notifications, and smartspace
+3. Always-on Display (AOD)
+
+Keyguard is the first screen available when turning on the device, as long as the user has not specified a security method of NONE.
+
+[1]: /frameworks/base/packages/SystemUI/docs/keyguard/bouncer.md
+
diff --git a/packages/SystemUI/docs/keyguard/bouncer.md b/packages/SystemUI/docs/keyguard/bouncer.md
new file mode 100644
index 000000000000..a724966a639a
--- /dev/null
+++ b/packages/SystemUI/docs/keyguard/bouncer.md
@@ -0,0 +1,18 @@
+# Bouncer
+
+[KeyguardBouncer][1] is the component responsible for displaying the security method set by the user (password, PIN, pattern) as well as SIM-related security methods, allowing the user to unlock the device or SIM.
+
+## Components
+
+The bouncer contains a hierarchy of controllers/views to render the user's security method and to manage the authentication attempts.
+
+1. [KeyguardBouncer][1] - Entrypoint for managing the bouncer visibility.
+ 1. [KeyguardHostViewController][2] - Intercepts media keys. Can most likely be merged with the next item.
+ 1. [KeyguardSecurityContainerController][3] - Manages unlock attempt responses, one-handed use
+ 1. [KeyguardSecurityViewFlipperController][4] - Based upon the [KeyguardSecurityModel#SecurityMode][5], will instantiate the required view and controller. PIN, Pattern, etc.
+
+[1]: /frameworks/base/packages/SystemUI/com/android/systemui/statusbar/phone/KeyguardBouncer
+[2]: /frameworks/base/packages/SystemUI/com/android/keyguard/KeyguardHostViewController
+[3]: /frameworks/base/packages/SystemUI/com/android/keyguard/KeyguardSecurityContainerController
+[4]: /frameworks/base/packages/SystemUI/com/android/keyguard/KeyguardSecurityViewFlipperController
+[5]: /frameworks/base/packages/SystemUI/com/android/keyguard/KeyguardSecurityModel
diff --git a/packages/SystemUI/res/layout/super_notification_shade.xml b/packages/SystemUI/res/layout/super_notification_shade.xml
index d9a56707fb31..e02a1767a96c 100644
--- a/packages/SystemUI/res/layout/super_notification_shade.xml
+++ b/packages/SystemUI/res/layout/super_notification_shade.xml
@@ -97,7 +97,7 @@
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true" />
- <FrameLayout android:id="@+id/keyboard_bouncer_container"
+ <FrameLayout android:id="@+id/keyguard_bouncer_container"
android:layout_height="0dp"
android:layout_width="match_parent"
android:layout_weight="1" />
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java
index ecc8c0074e18..db729da9c8bf 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java
@@ -18,7 +18,6 @@ package com.android.keyguard;
import android.os.Bundle;
import android.view.View;
-import android.view.ViewGroup;
import android.view.ViewRootImpl;
import com.android.systemui.keyguard.KeyguardViewMediator;
@@ -186,14 +185,12 @@ public interface KeyguardViewController {
/**
* Registers the StatusBar to which this Keyguard View is mounted.
* @param statusBar
- * @param container
* @param notificationPanelViewController
* @param biometricUnlockController
* @param notificationContainer
* @param bypassController
*/
void registerStatusBar(StatusBar statusBar,
- ViewGroup container,
NotificationPanelViewController notificationPanelViewController,
BiometricUnlockController biometricUnlockController,
View notificationContainer,
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index 1561eb6368a8..c5694398cdc6 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -77,7 +77,6 @@ import android.view.IRemoteAnimationRunner;
import android.view.RemoteAnimationTarget;
import android.view.SyncRtSurfaceTransactionApplier;
import android.view.View;
-import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.WindowManagerPolicyConstants;
import android.view.animation.Animation;
@@ -2623,7 +2622,6 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
* Registers the StatusBar to which the Keyguard View is mounted.
*
* @param statusBar
- * @param container
* @param panelView
* @param biometricUnlockController
* @param notificationContainer
@@ -2631,10 +2629,10 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable,
* @return the View Controller for the Keyguard View this class is mediating.
*/
public KeyguardViewController registerStatusBar(StatusBar statusBar,
- ViewGroup container, NotificationPanelViewController panelView,
+ NotificationPanelViewController panelView,
BiometricUnlockController biometricUnlockController,
View notificationContainer, KeyguardBypassController bypassController) {
- mKeyguardViewControllerLazy.get().registerStatusBar(statusBar, container, panelView,
+ mKeyguardViewControllerLazy.get().registerStatusBar(statusBar, panelView,
biometricUnlockController, notificationContainer, bypassController);
return mKeyguardViewControllerLazy.get();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
index f1d5e0271b96..a090ac35070e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
@@ -126,6 +126,19 @@ public class KeyguardBouncer {
mExpansionCallbacks.add(expansionCallback);
}
+ /**
+ * Enable/disable only the back button
+ */
+ public void setBackButtonEnabled(boolean enabled) {
+ int vis = mContainer.getSystemUiVisibility();
+ if (enabled) {
+ vis &= ~View.STATUS_BAR_DISABLE_BACK;
+ } else {
+ vis |= View.STATUS_BAR_DISABLE_BACK;
+ }
+ mContainer.setSystemUiVisibility(vis);
+ }
+
public void show(boolean resetSecuritySelection) {
show(resetSecuritySelection, true /* scrimmed */);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java
index 03d0bb02e1bd..9d06d2bae8cb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java
@@ -171,6 +171,13 @@ public class NotificationShadeWindowViewController {
mBrightnessMirror = mView.findViewById(R.id.brightness_mirror_container);
}
+ /**
+ * @return Location where to place the KeyguardBouncer
+ */
+ public ViewGroup getBouncerContainer() {
+ return mView.findViewById(R.id.keyguard_bouncer_container);
+ }
+
/** Inflates the {@link R.layout#status_bar_expanded} layout and sets it up. */
public void setupExpandedStatusBar() {
mStackScrollLayout = mView.findViewById(R.id.notification_stack_scroller);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index 67b2ee5ba210..78ab0d7f8a2f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -1552,6 +1552,9 @@ public class StatusBar extends SystemUI implements
time, PowerManager.WAKE_REASON_GESTURE, "com.android.systemui:" + why);
mWakeUpComingFromTouch = true;
where.getLocationInWindow(mTmpInt2);
+
+ // NOTE, the incoming view can sometimes be the entire container... unsure if
+ // this location is valuable enough
mWakeUpTouchLocation = new PointF(mTmpInt2[0] + where.getWidth() / 2,
mTmpInt2[1] + where.getHeight() / 2);
mFalsingCollector.onScreenOnFromTouch();
@@ -1645,7 +1648,7 @@ public class StatusBar extends SystemUI implements
}
});
mStatusBarKeyguardViewManager.registerStatusBar(
- /* statusBar= */ this, getBouncerContainer(),
+ /* statusBar= */ this,
mNotificationPanelViewController, mBiometricUnlockController,
mStackScroller, mKeyguardBypassController);
mKeyguardIndicationController
@@ -1680,8 +1683,8 @@ public class StatusBar extends SystemUI implements
return mNotificationPanelViewController;
}
- protected ViewGroup getBouncerContainer() {
- return mNotificationShadeWindowView.findViewById(R.id.keyboard_bouncer_container);
+ public ViewGroup getBouncerContainer() {
+ return mNotificationShadeWindowViewController.getBouncerContainer();
}
public int getStatusBarHeight() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
index 18fd9d3c6651..07489a91f128 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -120,7 +120,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
@Override
public void onFullyShown() {
updateStates();
- mStatusBar.wakeUpIfDozing(SystemClock.uptimeMillis(), mContainer, "BOUNCER_VISIBLE");
+ mStatusBar.wakeUpIfDozing(SystemClock.uptimeMillis(),
+ mStatusBar.getBouncerContainer(), "BOUNCER_VISIBLE");
}
@Override
@@ -174,7 +175,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
private NotificationPanelViewController mNotificationPanelViewController;
private BiometricUnlockController mBiometricUnlockController;
- private ViewGroup mContainer;
private View mNotificationContainer;
protected KeyguardBouncer mBouncer;
@@ -270,14 +270,14 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
@Override
public void registerStatusBar(StatusBar statusBar,
- ViewGroup container,
NotificationPanelViewController notificationPanelViewController,
BiometricUnlockController biometricUnlockController,
View notificationContainer,
KeyguardBypassController bypassController) {
mStatusBar = statusBar;
- mContainer = container;
mBiometricUnlockController = biometricUnlockController;
+
+ ViewGroup container = mStatusBar.getBouncerContainer();
mBouncer = mKeyguardBouncerFactory.create(container, mExpansionCallback);
mNotificationPanelViewController = notificationPanelViewController;
notificationPanelViewController.addExpansionListener(this);
@@ -356,7 +356,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
} else if (mPulsing && expansion == KeyguardBouncer.EXPANSION_VISIBLE) {
// Panel expanded while pulsing but didn't translate the bouncer (because we are
// unlocked.) Let's simply wake-up to dismiss the lock screen.
- mStatusBar.wakeUpIfDozing(SystemClock.uptimeMillis(), mContainer, "BOUNCER_VISIBLE");
+ mStatusBar.wakeUpIfDozing(SystemClock.uptimeMillis(), mStatusBar.getBouncerContainer(),
+ "BOUNCER_VISIBLE");
}
}
@@ -833,7 +834,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
}
public void onKeyguardFadedAway() {
- mContainer.postDelayed(() -> mNotificationShadeWindowController
+ mNotificationContainer.postDelayed(() -> mNotificationShadeWindowController
.setKeyguardFadingAway(false), 100);
ViewGroupFadeHelper.reset(mNotificationPanelViewController.getView());
mStatusBar.finishKeyguardFadingAway();
@@ -958,10 +959,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
};
protected void updateStates() {
- if (mContainer == null ) {
- return;
- }
- int vis = mContainer.getSystemUiVisibility();
boolean showing = mShowing;
boolean occluded = mOccluded;
boolean bouncerShowing = mBouncer.isShowing();
@@ -973,9 +970,9 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
(mLastBouncerDismissible || !mLastShowing || mLastRemoteInputActive)
|| mFirstUpdate) {
if (bouncerDismissible || !showing || remoteInputActive) {
- mContainer.setSystemUiVisibility(vis & ~View.STATUS_BAR_DISABLE_BACK);
+ mBouncer.setBackButtonEnabled(true);
} else {
- mContainer.setSystemUiVisibility(vis | View.STATUS_BAR_DISABLE_BACK);
+ mBouncer.setBackButtonEnabled(false);
}
}
@@ -1042,11 +1039,11 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
if (delay == 0) {
mMakeNavigationBarVisibleRunnable.run();
} else {
- mContainer.postOnAnimationDelayed(mMakeNavigationBarVisibleRunnable,
+ mNotificationContainer.postOnAnimationDelayed(mMakeNavigationBarVisibleRunnable,
delay);
}
} else {
- mContainer.removeCallbacks(mMakeNavigationBarVisibleRunnable);
+ mNotificationContainer.removeCallbacks(mMakeNavigationBarVisibleRunnable);
mStatusBar.getNotificationShadeWindowView().getWindowInsetsController()
.hide(navigationBars());
}
@@ -1371,4 +1368,4 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
void requestUdfps(boolean requestUdfps, int color);
}
-} \ No newline at end of file
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
index 6e3d5ce7953e..3fcd0712079f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
@@ -16,15 +16,12 @@
package com.android.systemui.statusbar.phone;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.clearInvocations;
-import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
@@ -119,7 +116,7 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
any(ViewGroup.class),
any(KeyguardBouncer.BouncerExpansionCallback.class)))
.thenReturn(mBouncer);
-
+ when(mStatusBar.getBouncerContainer()).thenReturn(mContainer);
when(mContainer.findViewById(anyInt())).thenReturn(mKeyguardMessageArea);
mWakefulnessLifecycle = new WakefulnessLifecycle(
getContext(),
@@ -143,7 +140,7 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
mUnlockedScreenOffAnimationController,
mKeyguardMessageAreaFactory,
mShadeController);
- mStatusBarKeyguardViewManager.registerStatusBar(mStatusBar, mContainer,
+ mStatusBarKeyguardViewManager.registerStatusBar(mStatusBar,
mNotificationPanelView, mBiometrucUnlockController,
mNotificationContainer, mBypassController);
mStatusBarKeyguardViewManager.show(null);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
index 6868e1855c65..741d95f283e3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
@@ -459,7 +459,7 @@ public class StatusBarTest extends SysuiTestCase {
mock(DumpManager.class),
mActivityLaunchAnimator,
mDialogLaunchAnimator);
- when(mKeyguardViewMediator.registerStatusBar(any(StatusBar.class), any(ViewGroup.class),
+ when(mKeyguardViewMediator.registerStatusBar(any(StatusBar.class),
any(NotificationPanelViewController.class), any(BiometricUnlockController.class),
any(ViewGroup.class), any(KeyguardBypassController.class)))
.thenReturn(mStatusBarKeyguardViewManager);