diff options
5 files changed, 46 insertions, 17 deletions
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardViewBase.java b/packages/Keyguard/src/com/android/keyguard/KeyguardViewBase.java index 2ea8f85..bc0f364 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardViewBase.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardViewBase.java @@ -107,7 +107,6 @@ public abstract class KeyguardViewBase extends FrameLayout implements SecurityCa mSecurityContainer.setSecurityCallback(this); mSecurityContainer.showPrimarySecurityScreen(false); // mSecurityContainer.updateSecurityViews(false /* not bouncing */); - setBackButtonEnabled(false); } /** @@ -127,12 +126,6 @@ public abstract class KeyguardViewBase extends FrameLayout implements SecurityCa return dismiss(false); } - private void setBackButtonEnabled(boolean enabled) { - setSystemUiVisibility(enabled ? - getSystemUiVisibility() & ~View.STATUS_BAR_DISABLE_BACK : - getSystemUiVisibility() | View.STATUS_BAR_DISABLE_BACK); - } - protected void showBouncer(boolean show) { CharSequence what = getContext().getResources().getText( show ? R.string.keyguard_accessibility_show_bouncer @@ -143,8 +136,7 @@ public abstract class KeyguardViewBase extends FrameLayout implements SecurityCa public boolean handleBackKey() { if (mSecurityContainer.getCurrentSecuritySelection() == SecurityMode.Account) { - // go back to primary screen and re-disable back - setBackButtonEnabled(false); + // go back to primary screen mSecurityContainer.showPrimarySecurityScreen(false /*turningOff*/); return true; } @@ -207,12 +199,6 @@ public abstract class KeyguardViewBase extends FrameLayout implements SecurityCa @Override public void onSecurityModeChanged(SecurityMode securityMode, boolean needsInput) { - // Enable or disable the back button based on security mode - if (securityMode == SecurityMode.Account && !mLockPatternUtils.isPermanentlyLocked()) { - // we're showing account as a backup, provide a way to get back to primary - setBackButtonEnabled(true); - } - if (mViewMediatorCallback != null) { mViewMediatorCallback.setNeedsInput(needsInput); } 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 11ccf2e..7cbde36 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java @@ -105,6 +105,10 @@ public class KeyguardBouncer { return KeyguardViewMediator.AWAKE_INTERVAL_DEFAULT_MS; } + public boolean isShowing() { + return mRoot != null && mRoot.getVisibility() == View.VISIBLE; + } + private void ensureView() { if (mRoot == null) { inflateView(); @@ -128,4 +132,8 @@ public class KeyguardBouncer { mRoot = null; } } + + public boolean onBackPressed() { + return mKeyguardView != null && mKeyguardView.handleBackKey(); + } } 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 a8b86a8..05d723a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -2857,6 +2857,15 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { } } + public boolean onBackPressed() { + if (mOnKeyguard) { + return mStatusBarKeyguardViewManager.onBackPressed(); + } else { + animateCollapsePanels(); + return true; + } + } + private void showBouncer() { if (mOnKeyguard) { mStatusBarKeyguardViewManager.dismiss(); 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 73fc466..b8592c3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -62,7 +62,6 @@ public class StatusBarKeyguardViewManager { mContext = context; mViewMediatorCallback = callback; mLockPatternUtils = lockPatternUtils; - } public void registerStatusBar(PhoneStatusBar phoneStatusBar, @@ -83,10 +82,12 @@ public class StatusBarKeyguardViewManager { mStatusBarWindowManager.setKeyguardShowing(true); mPhoneStatusBar.showKeyguard(); mBouncer.prepare(); + updateBackButtonState(); } public void showBouncer() { mBouncer.show(); + updateBackButtonState(); } /** @@ -95,6 +96,7 @@ public class StatusBarKeyguardViewManager { public void reset() { mBouncer.reset(); mPhoneStatusBar.showKeyguard(); + updateBackButtonState(); } public void onScreenTurnedOff() { @@ -165,4 +167,28 @@ public class StatusBarKeyguardViewManager { public boolean isShowing() { return mShowing; } + + /** + * Notifies this manager that the back button has been pressed. + * + * @return whether the back press has been handled + */ + public boolean onBackPressed() { + if (mBouncer.isShowing()) { + mBouncer.hide(); + mPhoneStatusBar.showKeyguard(); + updateBackButtonState(); + return true; + } + return false; + } + + private void updateBackButtonState() { + int vis = mContainer.getSystemUiVisibility(); + if (mBouncer.isShowing()) { + 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/StatusBarWindowView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java index ea3f899..dd89f47 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java @@ -79,7 +79,7 @@ public class StatusBarWindowView extends FrameLayout switch (event.getKeyCode()) { case KeyEvent.KEYCODE_BACK: if (!down) { - mService.animateCollapsePanels(); + mService.onBackPressed(); } return true; } |