StatusBarKeyguardViewManager.java revision e29b2dbc762bfa66093d76f5a65f55328d8753c9
15cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi/* 25cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Copyright (C) 2014 The Android Open Source Project 35cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * 45cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Licensed under the Apache License, Version 2.0 (the "License"); 55cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * you may not use this file except in compliance with the License. 65cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * You may obtain a copy of the License at 75cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * 85cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * http://www.apache.org/licenses/LICENSE-2.0 95cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * 105cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Unless required by applicable law or agreed to in writing, software 115cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * distributed under the License is distributed on an "AS IS" BASIS, 125cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * See the License for the specific language governing permissions and 145cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * limitations under the License 155cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */ 165cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 175cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggipackage com.android.systemui.statusbar.phone; 185cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 195cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.content.Context; 205cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.os.Bundle; 215cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.os.RemoteException; 22e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggiimport android.os.SystemClock; 235cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.util.Slog; 24df993513fbfe0e952175c1c5384458deaa1ff01aJorim Jaggiimport android.view.KeyEvent; 255cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.view.View; 265cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.view.ViewGroup; 275cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 285cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport com.android.internal.policy.IKeyguardShowCallback; 295cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport com.android.internal.widget.LockPatternUtils; 30b601162a60663329355720083bfa199909dbf6efAdrian Roosimport com.android.keyguard.KeyguardUpdateMonitor; 315cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport com.android.keyguard.ViewMediatorCallback; 325cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 337d7090d66692170b0584a5b9f4fe3e47285ee615Adrian Roosimport static com.android.keyguard.KeyguardHostView.OnDismissAction; 347d7090d66692170b0584a5b9f4fe3e47285ee615Adrian Roos 355cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi/** 365cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Manages creating, showing, hiding and resetting the keyguard within the status bar. Calls back 375cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * via {@link ViewMediatorCallback} to poke the wake lock and report that the keyguard is done, 385cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * which is in turn, reported to this class by the current 395cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * {@link com.android.keyguard.KeyguardViewBase}. 405cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */ 415cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggipublic class StatusBarKeyguardViewManager { 425cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private static String TAG = "StatusBarKeyguardViewManager"; 435cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 445cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private final Context mContext; 455cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 465cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private LockPatternUtils mLockPatternUtils; 475cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private ViewMediatorCallback mViewMediatorCallback; 485cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private PhoneStatusBar mPhoneStatusBar; 49ecc798e6668046c2f67cf30c6ab1db2eba80cab1Jorim Jaggi private ScrimController mScrimController; 505cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 515cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private ViewGroup mContainer; 525cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private StatusBarWindowManager mStatusBarWindowManager; 535cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 545cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private boolean mScreenOn = false; 5503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi private KeyguardBouncer mBouncer; 5603c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi private boolean mShowing; 57a6310293c5a861cdb54f2c894e90a8d9da87f8d7Jorim Jaggi private boolean mOccluded; 585cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 59b601162a60663329355720083bfa199909dbf6efAdrian Roos private boolean mFirstUpdate = true; 60b601162a60663329355720083bfa199909dbf6efAdrian Roos private boolean mLastShowing; 61b601162a60663329355720083bfa199909dbf6efAdrian Roos private boolean mLastOccluded; 62b601162a60663329355720083bfa199909dbf6efAdrian Roos private boolean mLastBouncerShowing; 63b601162a60663329355720083bfa199909dbf6efAdrian Roos private boolean mLastBouncerDismissible; 64b601162a60663329355720083bfa199909dbf6efAdrian Roos 655cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public StatusBarKeyguardViewManager(Context context, ViewMediatorCallback callback, 665cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi LockPatternUtils lockPatternUtils) { 675cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mContext = context; 685cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mViewMediatorCallback = callback; 695cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mLockPatternUtils = lockPatternUtils; 705cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 715cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 725cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void registerStatusBar(PhoneStatusBar phoneStatusBar, 73ecc798e6668046c2f67cf30c6ab1db2eba80cab1Jorim Jaggi ViewGroup container, StatusBarWindowManager statusBarWindowManager, 74ecc798e6668046c2f67cf30c6ab1db2eba80cab1Jorim Jaggi ScrimController scrimController) { 755cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mPhoneStatusBar = phoneStatusBar; 765cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mContainer = container; 775cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mStatusBarWindowManager = statusBarWindowManager; 78ecc798e6668046c2f67cf30c6ab1db2eba80cab1Jorim Jaggi mScrimController = scrimController; 7903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi mBouncer = new KeyguardBouncer(mContext, mViewMediatorCallback, mLockPatternUtils, 8003c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi mStatusBarWindowManager, container); 815cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 825cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 835cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi /** 845cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Show the keyguard. Will handle creating and attaching to the view manager 855cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * lazily. 865cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */ 875cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void show(Bundle options) { 8803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi mShowing = true; 89cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi mStatusBarWindowManager.setKeyguardShowing(true); 9043bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi reset(); 915cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 925cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 93a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi /** 94a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi * Shows the notification keyguard or the bouncer depending on 95a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi * {@link KeyguardBouncer#needsFullscreenBouncer()}. 96a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi */ 97a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi private void showBouncerOrKeyguard() { 98a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi if (mBouncer.needsFullscreenBouncer()) { 99a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi 100a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi // The keyguard might be showing (already). So we need to hide it. 101a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi mPhoneStatusBar.hideKeyguard(); 102a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi mBouncer.show(); 103a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi } else { 104a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi mPhoneStatusBar.showKeyguard(); 105a0be6d53a823f8115d3863773398d640ec2a8c44Jorim Jaggi mBouncer.hide(false /* destroyView */); 1062fbad7b6a724cf0a5b98b66fe639d58f5ab10af3Jorim Jaggi mBouncer.prepare(); 107a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi } 108a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi } 109a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi 1104222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi private void showBouncer() { 1113806c771336a378b650b2ec14aa1ae7e5927f137Dan Sandler if (!mOccluded) { 1123806c771336a378b650b2ec14aa1ae7e5927f137Dan Sandler mBouncer.show(); 1133806c771336a378b650b2ec14aa1ae7e5927f137Dan Sandler } 1144222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi updateStates(); 1155cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1165cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1177d7090d66692170b0584a5b9f4fe3e47285ee615Adrian Roos public void dismissWithAction(OnDismissAction r) { 1187d7090d66692170b0584a5b9f4fe3e47285ee615Adrian Roos if (!mOccluded) { 1197d7090d66692170b0584a5b9f4fe3e47285ee615Adrian Roos mBouncer.showWithDismissAction(r); 1207d7090d66692170b0584a5b9f4fe3e47285ee615Adrian Roos } 1217d7090d66692170b0584a5b9f4fe3e47285ee615Adrian Roos updateStates(); 1227d7090d66692170b0584a5b9f4fe3e47285ee615Adrian Roos } 1237d7090d66692170b0584a5b9f4fe3e47285ee615Adrian Roos 1245cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi /** 1255cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Reset the state of the view. 1265cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */ 1275cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void reset() { 12843bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi if (mShowing) { 12943bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi if (mOccluded) { 13043bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi mPhoneStatusBar.hideKeyguard(); 131a0be6d53a823f8115d3863773398d640ec2a8c44Jorim Jaggi mBouncer.hide(false /* destroyView */); 13243bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi } else { 13343bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi showBouncerOrKeyguard(); 13443bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi } 13543bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi updateStates(); 1363806c771336a378b650b2ec14aa1ae7e5927f137Dan Sandler } 1375cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1385cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1395cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void onScreenTurnedOff() { 1405cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mScreenOn = false; 14175c95044a8c5c073d30dcc9bd21157939f161043Jorim Jaggi mPhoneStatusBar.onScreenTurnedOff(); 14203c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi mBouncer.onScreenTurnedOff(); 1435cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1445cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1455cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void onScreenTurnedOn(final IKeyguardShowCallback callback) { 1465cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mScreenOn = true; 14775c95044a8c5c073d30dcc9bd21157939f161043Jorim Jaggi mPhoneStatusBar.onScreenTurnedOn(); 14803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi if (callback != null) { 14903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi callbackAfterDraw(callback); 1505cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1515cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1525cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1535cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private void callbackAfterDraw(final IKeyguardShowCallback callback) { 15403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi mContainer.post(new Runnable() { 1555cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi @Override 1565cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void run() { 1575cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi try { 15803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi callback.onShown(mContainer.getWindowToken()); 1595cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } catch (RemoteException e) { 1605cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi Slog.w(TAG, "Exception calling onShown():", e); 1615cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1625cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1635cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi }); 1645cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1655cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1665cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void verifyUnlock() { 16703c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi dismiss(); 1685cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1695cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1705cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void setNeedsInput(boolean needsInput) { 171cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi mStatusBarWindowManager.setKeyguardNeedsInput(needsInput); 1725cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1735cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1745cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void updateUserActivityTimeout() { 17503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi mStatusBarWindowManager.setKeyguardUserActivityTimeout(mBouncer.getUserActivityTimeout()); 1765cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1775cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1785cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void setOccluded(boolean occluded) { 179a6310293c5a861cdb54f2c894e90a8d9da87f8d7Jorim Jaggi mOccluded = occluded; 180cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi mStatusBarWindowManager.setKeyguardOccluded(occluded); 1813806c771336a378b650b2ec14aa1ae7e5927f137Dan Sandler reset(); 1825cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1835cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1845cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi /** 1855cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Hides the keyguard view 1865cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */ 187e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi public void hide(long startTime, long fadeoutDuration) { 18803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi mShowing = false; 18903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi mPhoneStatusBar.hideKeyguard(); 190e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi mStatusBarWindowManager.setKeyguardFadingAway(true); 191cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi mStatusBarWindowManager.setKeyguardShowing(false); 192e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi long uptimeMillis = SystemClock.uptimeMillis(); 193e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi long delay = startTime - uptimeMillis; 194e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi if (delay < 0) { 195e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi delay = 0; 196e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi } 197e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi mBouncer.animateHide(delay, fadeoutDuration); 198e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi mScrimController.animateKeyguardFadingOut(delay, fadeoutDuration, new Runnable() { 199e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi @Override 200e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi public void run() { 201e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi mStatusBarWindowManager.setKeyguardFadingAway(false); 202e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi } 203e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi }); 20403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi mViewMediatorCallback.keyguardGone(); 2054222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi updateStates(); 2065cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 2075cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 2085cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi /** 2095cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Dismisses the keyguard by going to the next screen or making it gone. 2105cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */ 2115cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void dismiss() { 2125cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi if (mScreenOn) { 2130bed7f258ba1fffc10f986ee043b769f1fd40ad3Jorim Jaggi showBouncer(); 2145cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 2155cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 2165cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 2171568250853d81befcdaef63cc8588435353c3d12Jorim Jaggi public boolean isSecure() { 2181568250853d81befcdaef63cc8588435353c3d12Jorim Jaggi return mBouncer.isSecure(); 2191568250853d81befcdaef63cc8588435353c3d12Jorim Jaggi } 2201568250853d81befcdaef63cc8588435353c3d12Jorim Jaggi 2215cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi /** 2225cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * @return Whether the keyguard is showing 2235cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */ 2245cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public boolean isShowing() { 22503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi return mShowing; 2265cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 227e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi 228e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi /** 229e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi * Notifies this manager that the back button has been pressed. 230e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi * 231e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi * @return whether the back press has been handled 232e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi */ 233e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi public boolean onBackPressed() { 234e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi if (mBouncer.isShowing()) { 235a0be6d53a823f8115d3863773398d640ec2a8c44Jorim Jaggi mBouncer.hide(false /* destroyView */); 236e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi mPhoneStatusBar.showKeyguard(); 2374222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi updateStates(); 238e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi return true; 239e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi } 240e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi return false; 241e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi } 242e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi 2434222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi private void updateStates() { 244e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi int vis = mContainer.getSystemUiVisibility(); 245b601162a60663329355720083bfa199909dbf6efAdrian Roos boolean showing = mShowing; 246b601162a60663329355720083bfa199909dbf6efAdrian Roos boolean occluded = mOccluded; 247b601162a60663329355720083bfa199909dbf6efAdrian Roos boolean bouncerShowing = mBouncer.isShowing(); 248b601162a60663329355720083bfa199909dbf6efAdrian Roos boolean bouncerDismissible = bouncerShowing && !mBouncer.needsFullscreenBouncer(); 249b601162a60663329355720083bfa199909dbf6efAdrian Roos 250b601162a60663329355720083bfa199909dbf6efAdrian Roos if ((bouncerDismissible || !showing) != (mLastBouncerDismissible || !mLastShowing) 251b601162a60663329355720083bfa199909dbf6efAdrian Roos || mFirstUpdate) { 252b601162a60663329355720083bfa199909dbf6efAdrian Roos if (bouncerDismissible || !showing) { 253b601162a60663329355720083bfa199909dbf6efAdrian Roos mContainer.setSystemUiVisibility(vis & ~View.STATUS_BAR_DISABLE_BACK); 2541e68fb3c3842bb90ed3f474cef0ddf7116eace0eJason Monk } else { 255b601162a60663329355720083bfa199909dbf6efAdrian Roos mContainer.setSystemUiVisibility(vis | View.STATUS_BAR_DISABLE_BACK); 256b601162a60663329355720083bfa199909dbf6efAdrian Roos } 257b601162a60663329355720083bfa199909dbf6efAdrian Roos } 258b601162a60663329355720083bfa199909dbf6efAdrian Roos if ((!(showing && !occluded) || bouncerShowing) 259b601162a60663329355720083bfa199909dbf6efAdrian Roos != (!(mLastShowing && !mLastOccluded) || mLastBouncerShowing) || mFirstUpdate) { 260b601162a60663329355720083bfa199909dbf6efAdrian Roos if (mPhoneStatusBar.getNavigationBarView() != null) { 261b601162a60663329355720083bfa199909dbf6efAdrian Roos if (!(showing && !occluded) || bouncerShowing) { 262b601162a60663329355720083bfa199909dbf6efAdrian Roos mPhoneStatusBar.getNavigationBarView().setVisibility(View.VISIBLE); 263b601162a60663329355720083bfa199909dbf6efAdrian Roos } else { 264b601162a60663329355720083bfa199909dbf6efAdrian Roos mPhoneStatusBar.getNavigationBarView().setVisibility(View.GONE); 265b601162a60663329355720083bfa199909dbf6efAdrian Roos } 2661e68fb3c3842bb90ed3f474cef0ddf7116eace0eJason Monk } 267a6310293c5a861cdb54f2c894e90a8d9da87f8d7Jorim Jaggi } 268b601162a60663329355720083bfa199909dbf6efAdrian Roos 269b601162a60663329355720083bfa199909dbf6efAdrian Roos if (bouncerShowing != mLastBouncerShowing || mFirstUpdate) { 270b601162a60663329355720083bfa199909dbf6efAdrian Roos mStatusBarWindowManager.setBouncerShowing(bouncerShowing); 271b601162a60663329355720083bfa199909dbf6efAdrian Roos mPhoneStatusBar.setBouncerShowing(bouncerShowing); 272ecc798e6668046c2f67cf30c6ab1db2eba80cab1Jorim Jaggi mScrimController.setBouncerShowing(bouncerShowing); 273b601162a60663329355720083bfa199909dbf6efAdrian Roos } 274b601162a60663329355720083bfa199909dbf6efAdrian Roos 275b601162a60663329355720083bfa199909dbf6efAdrian Roos KeyguardUpdateMonitor updateMonitor = KeyguardUpdateMonitor.getInstance(mContext); 276b601162a60663329355720083bfa199909dbf6efAdrian Roos if ((showing && !occluded) != (mLastShowing && !mLastOccluded) || mFirstUpdate) { 277b601162a60663329355720083bfa199909dbf6efAdrian Roos updateMonitor.sendKeyguardVisibilityChanged(showing && !occluded); 278b601162a60663329355720083bfa199909dbf6efAdrian Roos } 279b601162a60663329355720083bfa199909dbf6efAdrian Roos if (bouncerShowing != mLastBouncerShowing || mFirstUpdate) { 280b601162a60663329355720083bfa199909dbf6efAdrian Roos updateMonitor.sendKeyguardBouncerChanged(bouncerShowing); 281b601162a60663329355720083bfa199909dbf6efAdrian Roos } 282b601162a60663329355720083bfa199909dbf6efAdrian Roos 283b601162a60663329355720083bfa199909dbf6efAdrian Roos mFirstUpdate = false; 284b601162a60663329355720083bfa199909dbf6efAdrian Roos mLastShowing = showing; 285b601162a60663329355720083bfa199909dbf6efAdrian Roos mLastOccluded = occluded; 286b601162a60663329355720083bfa199909dbf6efAdrian Roos mLastBouncerShowing = bouncerShowing; 287b601162a60663329355720083bfa199909dbf6efAdrian Roos mLastBouncerDismissible = bouncerDismissible; 288e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi } 2898c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi 2908c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi public boolean onMenuPressed() { 2918c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi return mBouncer.onMenuPressed(); 2928c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi } 293df993513fbfe0e952175c1c5384458deaa1ff01aJorim Jaggi 294df993513fbfe0e952175c1c5384458deaa1ff01aJorim Jaggi public boolean interceptMediaKey(KeyEvent event) { 295df993513fbfe0e952175c1c5384458deaa1ff01aJorim Jaggi return mBouncer.interceptMediaKey(event); 296df993513fbfe0e952175c1c5384458deaa1ff01aJorim Jaggi } 2975cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi} 298