Show enter PIN/PUK before notifications on Keyguard.
Change-Id: Icec12a43487fe76378e10bb8aaaa163c53b69075
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index bb39d36..cbfc266 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -1285,6 +1285,9 @@
flags |= StatusBarManager.DISABLE_SEARCH;
}
}
+ if (isShowingAndNotOccluded()) {
+ flags |= StatusBarManager.DISABLE_HOME;
+ }
if (DEBUG) {
Log.d(TAG, "adjustStatusBarLocked: mShowing=" + mShowing + " mOccluded=" + mOccluded
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 7cbde36..71d1862 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
@@ -17,20 +17,18 @@
package com.android.systemui.statusbar.phone;
import android.content.Context;
-import android.os.RemoteException;
-import android.util.Slog;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import com.android.internal.policy.IKeyguardShowCallback;
import com.android.internal.widget.LockPatternUtils;
-import com.android.keyguard.KeyguardHostView;
import com.android.keyguard.KeyguardViewBase;
import com.android.keyguard.R;
import com.android.keyguard.ViewMediatorCallback;
import com.android.systemui.keyguard.KeyguardViewMediator;
+import static com.android.keyguard.KeyguardSecurityModel.*;
+
/**
* A class which manages the bouncer on the lockscreen.
*/
@@ -66,6 +64,7 @@
if (!mKeyguardView.dismiss()) {
mRoot.setVisibility(View.VISIBLE);
mKeyguardView.requestFocus();
+ mKeyguardView.onResume();
}
}
@@ -84,14 +83,8 @@
}
public void onScreenTurnedOff() {
- if (mKeyguardView != null) {
- mKeyguardView.onScreenTurnedOff();
- }
- }
-
- public void onScreenTurnedOn() {
- if (mKeyguardView != null) {
- mKeyguardView.onScreenTurnedOn();
+ if (mKeyguardView != null && mRoot.getVisibility() == View.VISIBLE) {
+ mKeyguardView.onPause();
}
}
@@ -136,4 +129,17 @@
public boolean onBackPressed() {
return mKeyguardView != null && mKeyguardView.handleBackKey();
}
+
+ /**
+ * @return True if and only if the current security method should be shown before showing
+ * the notifications on Keyguard, like SIM PIN/PUK.
+ */
+ public boolean needsFullscreenBouncer() {
+ if (mKeyguardView != null) {
+ SecurityMode mode = mKeyguardView.getSecurityMode();
+ return mode == SecurityMode.SimPin
+ || mode == SecurityMode.SimPuk;
+ }
+ return false;
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 1d01f91..679b81b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -2826,7 +2826,6 @@
if (isFlippedToSettings()) {
flipToNotifications();
}
- mStatusBarWindow.setSystemUiVisibility(View.STATUS_BAR_DISABLE_HOME);
mKeyguardStatusView.setVisibility(View.VISIBLE);
mNotificationPanelHeader.setVisibility(View.GONE);
if (mKeyguardSettingsFlipButton == null) {
@@ -2843,11 +2842,11 @@
public void hideKeyguard() {
mOnKeyguard = false;
- mStatusBarWindow.setSystemUiVisibility(0);
mKeyguardStatusView.setVisibility(View.GONE);
mNotificationPanelHeader.setVisibility(View.VISIBLE);
mKeyguardSettingsFlipButton.setVisibility(View.GONE);
updateRowStates();
+ instantCollapseNotificationPanel();
}
public void userActivity() {
@@ -2876,6 +2875,10 @@
mNotificationPanel.setExpandedFraction(1);
}
+ private void instantCollapseNotificationPanel() {
+ mNotificationPanel.setExpandedFraction(0);
+ }
+
@Override
public void onActivated(View view) {
userActivity();
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 b8592c3..f666773 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -80,11 +80,27 @@
public void show(Bundle options) {
mShowing = true;
mStatusBarWindowManager.setKeyguardShowing(true);
- mPhoneStatusBar.showKeyguard();
- mBouncer.prepare();
+ showBouncerOrKeyguard();
updateBackButtonState();
}
+ /**
+ * Shows the notification keyguard or the bouncer depending on
+ * {@link KeyguardBouncer#needsFullscreenBouncer()}.
+ */
+ private void showBouncerOrKeyguard() {
+ if (mBouncer.needsFullscreenBouncer()) {
+
+ // The keyguard might be showing (already). So we need to hide it.
+ mPhoneStatusBar.hideKeyguard();
+ mBouncer.show();
+ } else {
+ mPhoneStatusBar.showKeyguard();
+ mBouncer.hide();
+ mBouncer.prepare();
+ }
+ }
+
public void showBouncer() {
mBouncer.show();
updateBackButtonState();
@@ -94,8 +110,7 @@
* Reset the state of the view.
*/
public void reset() {
- mBouncer.reset();
- mPhoneStatusBar.showKeyguard();
+ showBouncerOrKeyguard();
updateBackButtonState();
}
@@ -106,7 +121,6 @@
public void onScreenTurnedOn(final IKeyguardShowCallback callback) {
mScreenOn = true;
- mBouncer.onScreenTurnedOn();
if (callback != null) {
callbackAfterDraw(callback);
}
@@ -185,7 +199,8 @@
private void updateBackButtonState() {
int vis = mContainer.getSystemUiVisibility();
- if (mBouncer.isShowing()) {
+ boolean bouncerDismissable = mBouncer.isShowing() && !mBouncer.needsFullscreenBouncer();
+ if (bouncerDismissable || !mShowing) {
mContainer.setSystemUiVisibility(vis & ~View.STATUS_BAR_DISABLE_BACK);
} else {
mContainer.setSystemUiVisibility(vis | View.STATUS_BAR_DISABLE_BACK);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java
index 6153cde..716e326 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java
@@ -128,6 +128,10 @@
}
}
+ private void applyFitsSystemWindows(State state) {
+ mStatusBarView.setFitsSystemWindows(!state.isKeyguardShowingAndNotOccluded());
+ }
+
private void applyUserActivityTimeout(State state) {
if (state.isKeyguardShowingAndNotOccluded()) {
mLp.userActivityTimeout = state.keyguardUserActivityTimeout;
@@ -151,6 +155,7 @@
applyHeight(state);
applyUserActivityTimeout(state);
applyInputFeatures(state);
+ applyFitsSystemWindows(state);
mWindowManager.updateViewLayout(mStatusBarView, mLp);
}