StatusBarKeyguardViewManager.java revision f3b3bee12994a24b60bd447dede9e8791151fcc9
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 19786afcb3eec18315ec54987a08814ff28f13d09fJorim Jaggiimport android.content.ComponentCallbacks2; 205cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.content.Context; 215cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.os.Bundle; 225cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.os.RemoteException; 23e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggiimport android.os.SystemClock; 245cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.util.Slog; 25df993513fbfe0e952175c1c5384458deaa1ff01aJorim Jaggiimport android.view.KeyEvent; 265cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.view.View; 275cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.view.ViewGroup; 28786afcb3eec18315ec54987a08814ff28f13d09fJorim Jaggiimport android.view.WindowManagerGlobal; 295cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 305cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport com.android.internal.policy.IKeyguardShowCallback; 315cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport com.android.internal.widget.LockPatternUtils; 32b601162a60663329355720083bfa199909dbf6efAdrian Roosimport com.android.keyguard.KeyguardUpdateMonitor; 335cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport com.android.keyguard.ViewMediatorCallback; 3425d7e51a10828e4433fcca90410d13a4b2342c34Jim Millerimport com.android.systemui.statusbar.CommandQueue; 355cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 366b88cdfba770efc5722338c240ccaada13d7b0d4Jorim Jaggiimport static com.android.keyguard.KeyguardHostView.OnDismissAction; 377d7090d66692170b0584a5b9f4fe3e47285ee615Adrian Roos 385cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi/** 395cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Manages creating, showing, hiding and resetting the keyguard within the status bar. Calls back 405cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * via {@link ViewMediatorCallback} to poke the wake lock and report that the keyguard is done, 415cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * which is in turn, reported to this class by the current 425cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * {@link com.android.keyguard.KeyguardViewBase}. 435cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */ 445cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggipublic class StatusBarKeyguardViewManager { 4576a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi 4676a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi // When hiding the Keyguard with timing supplied from WindowManager, better be early than late. 4776a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi private static final long HIDE_TIMING_CORRECTION_MS = -3 * 16; 4876a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi 49416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi // Delay for showing the navigation bar when the bouncer appears. This should be kept in sync 50416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi // with the appear animations of the PIN/pattern/password views. 51416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi private static final long NAV_BAR_SHOW_DELAY_BOUNCER = 320; 52416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi 535cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private static String TAG = "StatusBarKeyguardViewManager"; 545cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 555cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private final Context mContext; 565cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 575cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private LockPatternUtils mLockPatternUtils; 585cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private ViewMediatorCallback mViewMediatorCallback; 595cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private PhoneStatusBar mPhoneStatusBar; 60ecc798e6668046c2f67cf30c6ab1db2eba80cab1Jorim Jaggi private ScrimController mScrimController; 615cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 625cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private ViewGroup mContainer; 635cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private StatusBarWindowManager mStatusBarWindowManager; 645cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 655cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private boolean mScreenOn = false; 6603c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi private KeyguardBouncer mBouncer; 6703c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi private boolean mShowing; 68a6310293c5a861cdb54f2c894e90a8d9da87f8d7Jorim Jaggi private boolean mOccluded; 695cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 70b601162a60663329355720083bfa199909dbf6efAdrian Roos private boolean mFirstUpdate = true; 71b601162a60663329355720083bfa199909dbf6efAdrian Roos private boolean mLastShowing; 72b601162a60663329355720083bfa199909dbf6efAdrian Roos private boolean mLastOccluded; 73b601162a60663329355720083bfa199909dbf6efAdrian Roos private boolean mLastBouncerShowing; 74b601162a60663329355720083bfa199909dbf6efAdrian Roos private boolean mLastBouncerDismissible; 75746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi private OnDismissAction mAfterKeyguardGoneAction; 76b601162a60663329355720083bfa199909dbf6efAdrian Roos 775cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public StatusBarKeyguardViewManager(Context context, ViewMediatorCallback callback, 785cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi LockPatternUtils lockPatternUtils) { 795cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mContext = context; 805cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mViewMediatorCallback = callback; 815cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mLockPatternUtils = lockPatternUtils; 825cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 835cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 845cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void registerStatusBar(PhoneStatusBar phoneStatusBar, 85ecc798e6668046c2f67cf30c6ab1db2eba80cab1Jorim Jaggi ViewGroup container, StatusBarWindowManager statusBarWindowManager, 86ecc798e6668046c2f67cf30c6ab1db2eba80cab1Jorim Jaggi ScrimController scrimController) { 875cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mPhoneStatusBar = phoneStatusBar; 885cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mContainer = container; 895cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mStatusBarWindowManager = statusBarWindowManager; 90ecc798e6668046c2f67cf30c6ab1db2eba80cab1Jorim Jaggi mScrimController = scrimController; 9103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi mBouncer = new KeyguardBouncer(mContext, mViewMediatorCallback, mLockPatternUtils, 9203c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi mStatusBarWindowManager, container); 935cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 945cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 955cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi /** 965cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Show the keyguard. Will handle creating and attaching to the view manager 975cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * lazily. 985cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */ 995cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void show(Bundle options) { 10003c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi mShowing = true; 101cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi mStatusBarWindowManager.setKeyguardShowing(true); 10243bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi reset(); 1035cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1045cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 105a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi /** 106a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi * Shows the notification keyguard or the bouncer depending on 107a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi * {@link KeyguardBouncer#needsFullscreenBouncer()}. 108a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi */ 109a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi private void showBouncerOrKeyguard() { 110a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi if (mBouncer.needsFullscreenBouncer()) { 111a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi 112a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi // The keyguard might be showing (already). So we need to hide it. 113a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi mPhoneStatusBar.hideKeyguard(); 11495e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mBouncer.show(true /* resetSecuritySelection */); 115a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi } else { 116a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi mPhoneStatusBar.showKeyguard(); 117a0be6d53a823f8115d3863773398d640ec2a8c44Jorim Jaggi mBouncer.hide(false /* destroyView */); 1182fbad7b6a724cf0a5b98b66fe639d58f5ab10af3Jorim Jaggi mBouncer.prepare(); 119a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi } 120a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi } 121a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi 1224222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi private void showBouncer() { 1230002a45034b1103ffc5ecf4d5a14b7d1ba225005Adrian Roos if (mShowing) { 12495e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mBouncer.show(false /* resetSecuritySelection */); 1253806c771336a378b650b2ec14aa1ae7e5927f137Dan Sandler } 1264222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi updateStates(); 1275cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1285cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 129746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi public void dismissWithAction(OnDismissAction r, boolean afterKeyguardGone) { 1300002a45034b1103ffc5ecf4d5a14b7d1ba225005Adrian Roos if (mShowing) { 131746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi if (!afterKeyguardGone) { 132746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi mBouncer.showWithDismissAction(r); 133746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi } else { 13495e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mBouncer.show(false /* resetSecuritySelection */); 135746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi mAfterKeyguardGoneAction = r; 136746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi } 1377d7090d66692170b0584a5b9f4fe3e47285ee615Adrian Roos } 1387d7090d66692170b0584a5b9f4fe3e47285ee615Adrian Roos updateStates(); 1397d7090d66692170b0584a5b9f4fe3e47285ee615Adrian Roos } 1407d7090d66692170b0584a5b9f4fe3e47285ee615Adrian Roos 1415cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi /** 1425cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Reset the state of the view. 1435cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */ 1445cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void reset() { 14543bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi if (mShowing) { 14643bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi if (mOccluded) { 14743bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi mPhoneStatusBar.hideKeyguard(); 148a0be6d53a823f8115d3863773398d640ec2a8c44Jorim Jaggi mBouncer.hide(false /* destroyView */); 14943bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi } else { 15043bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi showBouncerOrKeyguard(); 15143bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi } 15243bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi updateStates(); 1533806c771336a378b650b2ec14aa1ae7e5927f137Dan Sandler } 1545cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1555cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1565cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void onScreenTurnedOff() { 1575cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mScreenOn = false; 15875c95044a8c5c073d30dcc9bd21157939f161043Jorim Jaggi mPhoneStatusBar.onScreenTurnedOff(); 15903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi mBouncer.onScreenTurnedOff(); 1605cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1615cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1625cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void onScreenTurnedOn(final IKeyguardShowCallback callback) { 1635cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mScreenOn = true; 16475c95044a8c5c073d30dcc9bd21157939f161043Jorim Jaggi mPhoneStatusBar.onScreenTurnedOn(); 16503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi if (callback != null) { 16603c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi callbackAfterDraw(callback); 1675cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1685cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1695cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1705cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private void callbackAfterDraw(final IKeyguardShowCallback callback) { 17103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi mContainer.post(new Runnable() { 1725cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi @Override 1735cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void run() { 1745cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi try { 17503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi callback.onShown(mContainer.getWindowToken()); 1765cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } catch (RemoteException e) { 1775cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi Slog.w(TAG, "Exception calling onShown():", e); 1785cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1795cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1805cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi }); 1815cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1825cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1835cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void verifyUnlock() { 18403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi dismiss(); 1855cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1865cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1875cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void setNeedsInput(boolean needsInput) { 188cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi mStatusBarWindowManager.setKeyguardNeedsInput(needsInput); 1895cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1905cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1915cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void setOccluded(boolean occluded) { 192baa23274596246d03741457701ac515a73aa8818Selim Cinek if (occluded && !mOccluded && mShowing) { 193baa23274596246d03741457701ac515a73aa8818Selim Cinek if (mPhoneStatusBar.isInLaunchTransition()) { 194baa23274596246d03741457701ac515a73aa8818Selim Cinek mOccluded = true; 195baa23274596246d03741457701ac515a73aa8818Selim Cinek mPhoneStatusBar.fadeKeyguardAfterLaunchTransition(null /* beforeFading */, 196baa23274596246d03741457701ac515a73aa8818Selim Cinek new Runnable() { 197baa23274596246d03741457701ac515a73aa8818Selim Cinek @Override 198baa23274596246d03741457701ac515a73aa8818Selim Cinek public void run() { 199826730aeb98040cd01c9b5f0656c8b9036bc07deJorim Jaggi mStatusBarWindowManager.setKeyguardOccluded(mOccluded); 200fbc88e19cb77c303b47a427a40123ccf4ba5cca7Jorim Jaggi reset(); 201baa23274596246d03741457701ac515a73aa8818Selim Cinek } 202baa23274596246d03741457701ac515a73aa8818Selim Cinek }); 203baa23274596246d03741457701ac515a73aa8818Selim Cinek return; 204baa23274596246d03741457701ac515a73aa8818Selim Cinek } 205baa23274596246d03741457701ac515a73aa8818Selim Cinek } 206a6310293c5a861cdb54f2c894e90a8d9da87f8d7Jorim Jaggi mOccluded = occluded; 207cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi mStatusBarWindowManager.setKeyguardOccluded(occluded); 2083806c771336a378b650b2ec14aa1ae7e5927f137Dan Sandler reset(); 2095cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 2105cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 2114b22bdfa84eb3b62f83982281798145e56fce21dDan Sandler public boolean isOccluded() { 2124b22bdfa84eb3b62f83982281798145e56fce21dDan Sandler return mOccluded; 2134b22bdfa84eb3b62f83982281798145e56fce21dDan Sandler } 2144b22bdfa84eb3b62f83982281798145e56fce21dDan Sandler 2155cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi /** 21676a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi * Starts the animation before we dismiss Keyguard, i.e. an disappearing animation on the 21776a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi * security view of the bouncer. 21876a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi * 2198de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi * @param finishRunnable the runnable to be run after the animation finished, or {@code null} if 2208de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi * no action should be run 22176a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi */ 22276a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi public void startPreHideAnimation(Runnable finishRunnable) { 22376a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi if (mBouncer.isShowing()) { 22476a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi mBouncer.startPreHideAnimation(finishRunnable); 2258de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi } else if (finishRunnable != null) { 22676a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi finishRunnable.run(); 22776a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi } 22876a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi } 22976a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi 23076a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi /** 2315cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Hides the keyguard view 2325cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */ 233baa23274596246d03741457701ac515a73aa8818Selim Cinek public void hide(long startTime, final long fadeoutDuration) { 23403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi mShowing = false; 23544cf91960d74eccec45b9adec291ddb8baf84b4dJorim Jaggi 236e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi long uptimeMillis = SystemClock.uptimeMillis(); 23776a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi long delay = Math.max(0, startTime + HIDE_TIMING_CORRECTION_MS - uptimeMillis); 238baa23274596246d03741457701ac515a73aa8818Selim Cinek 239baa23274596246d03741457701ac515a73aa8818Selim Cinek if (mPhoneStatusBar.isInLaunchTransition() ) { 240baa23274596246d03741457701ac515a73aa8818Selim Cinek mPhoneStatusBar.fadeKeyguardAfterLaunchTransition(new Runnable() { 241baa23274596246d03741457701ac515a73aa8818Selim Cinek @Override 242baa23274596246d03741457701ac515a73aa8818Selim Cinek public void run() { 243baa23274596246d03741457701ac515a73aa8818Selim Cinek mStatusBarWindowManager.setKeyguardShowing(false); 244baa23274596246d03741457701ac515a73aa8818Selim Cinek mStatusBarWindowManager.setKeyguardFadingAway(true); 24576a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi mBouncer.hide(true /* destroyView */); 246baa23274596246d03741457701ac515a73aa8818Selim Cinek updateStates(); 247baa23274596246d03741457701ac515a73aa8818Selim Cinek mScrimController.animateKeyguardFadingOut( 248baa23274596246d03741457701ac515a73aa8818Selim Cinek PhoneStatusBar.FADE_KEYGUARD_START_DELAY, 249baa23274596246d03741457701ac515a73aa8818Selim Cinek PhoneStatusBar.FADE_KEYGUARD_DURATION, null); 250baa23274596246d03741457701ac515a73aa8818Selim Cinek } 251baa23274596246d03741457701ac515a73aa8818Selim Cinek }, new Runnable() { 252baa23274596246d03741457701ac515a73aa8818Selim Cinek @Override 253baa23274596246d03741457701ac515a73aa8818Selim Cinek public void run() { 254baa23274596246d03741457701ac515a73aa8818Selim Cinek mPhoneStatusBar.hideKeyguard(); 255baa23274596246d03741457701ac515a73aa8818Selim Cinek mStatusBarWindowManager.setKeyguardFadingAway(false); 256baa23274596246d03741457701ac515a73aa8818Selim Cinek mViewMediatorCallback.keyguardGone(); 257746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi executeAfterKeyguardGoneAction(); 258baa23274596246d03741457701ac515a73aa8818Selim Cinek } 259baa23274596246d03741457701ac515a73aa8818Selim Cinek }); 260baa23274596246d03741457701ac515a73aa8818Selim Cinek } else { 26133ae80e35a1b170309999c9b33b310ca91eb3f05Jorim Jaggi mPhoneStatusBar.setKeyguardFadingAway(startTime, delay, fadeoutDuration); 262dbc3dce886cb7abba23a9f18e60d0f5af5c93226Jorim Jaggi boolean staying = mPhoneStatusBar.hideKeyguard(); 263dbc3dce886cb7abba23a9f18e60d0f5af5c93226Jorim Jaggi if (!staying) { 264dbc3dce886cb7abba23a9f18e60d0f5af5c93226Jorim Jaggi mStatusBarWindowManager.setKeyguardFadingAway(true); 265dbc3dce886cb7abba23a9f18e60d0f5af5c93226Jorim Jaggi mScrimController.animateKeyguardFadingOut(delay, fadeoutDuration, new Runnable() { 266dbc3dce886cb7abba23a9f18e60d0f5af5c93226Jorim Jaggi @Override 267dbc3dce886cb7abba23a9f18e60d0f5af5c93226Jorim Jaggi public void run() { 268dbc3dce886cb7abba23a9f18e60d0f5af5c93226Jorim Jaggi mStatusBarWindowManager.setKeyguardFadingAway(false); 269dbc3dce886cb7abba23a9f18e60d0f5af5c93226Jorim Jaggi mPhoneStatusBar.finishKeyguardFadingAway(); 270786afcb3eec18315ec54987a08814ff28f13d09fJorim Jaggi WindowManagerGlobal.getInstance().trimMemory( 271786afcb3eec18315ec54987a08814ff28f13d09fJorim Jaggi ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN); 272dbc3dce886cb7abba23a9f18e60d0f5af5c93226Jorim Jaggi } 273dbc3dce886cb7abba23a9f18e60d0f5af5c93226Jorim Jaggi }); 274dbc3dce886cb7abba23a9f18e60d0f5af5c93226Jorim Jaggi } else { 275dbc3dce886cb7abba23a9f18e60d0f5af5c93226Jorim Jaggi mScrimController.animateGoingToFullShade(delay, fadeoutDuration); 276dbc3dce886cb7abba23a9f18e60d0f5af5c93226Jorim Jaggi mPhoneStatusBar.finishKeyguardFadingAway(); 277dbc3dce886cb7abba23a9f18e60d0f5af5c93226Jorim Jaggi } 278baa23274596246d03741457701ac515a73aa8818Selim Cinek mStatusBarWindowManager.setKeyguardShowing(false); 27976a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi mBouncer.hide(true /* destroyView */); 280baa23274596246d03741457701ac515a73aa8818Selim Cinek mViewMediatorCallback.keyguardGone(); 281746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi executeAfterKeyguardGoneAction(); 282baa23274596246d03741457701ac515a73aa8818Selim Cinek updateStates(); 283e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi } 28444cf91960d74eccec45b9adec291ddb8baf84b4dJorim Jaggi 2855cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 2865cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 287746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi private void executeAfterKeyguardGoneAction() { 288746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi if (mAfterKeyguardGoneAction != null) { 289746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi mAfterKeyguardGoneAction.onDismiss(); 290746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi mAfterKeyguardGoneAction = null; 291746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi } 292746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi } 293746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi 2945cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi /** 2955cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Dismisses the keyguard by going to the next screen or making it gone. 2965cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */ 2975cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void dismiss() { 2985cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi if (mScreenOn) { 2990bed7f258ba1fffc10f986ee043b769f1fd40ad3Jorim Jaggi showBouncer(); 3005cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 3015cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 3025cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 3032231c6e1adefdb7636d9fe38a388f1b0660d30eaChristoph Studer /** 3042231c6e1adefdb7636d9fe38a388f1b0660d30eaChristoph Studer * WARNING: This method might cause Binder calls. 3052231c6e1adefdb7636d9fe38a388f1b0660d30eaChristoph Studer */ 3061568250853d81befcdaef63cc8588435353c3d12Jorim Jaggi public boolean isSecure() { 3071568250853d81befcdaef63cc8588435353c3d12Jorim Jaggi return mBouncer.isSecure(); 3081568250853d81befcdaef63cc8588435353c3d12Jorim Jaggi } 3091568250853d81befcdaef63cc8588435353c3d12Jorim Jaggi 3105cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi /** 3115cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * @return Whether the keyguard is showing 3125cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */ 3135cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public boolean isShowing() { 31403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi return mShowing; 3155cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 316e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi 317e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi /** 318e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi * Notifies this manager that the back button has been pressed. 319e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi * 320e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi * @return whether the back press has been handled 321e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi */ 322e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi public boolean onBackPressed() { 323e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi if (mBouncer.isShowing()) { 3246bad244c4e0bcfba1652f3cc3593a9034f84fd9bJorim Jaggi reset(); 325e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi return true; 326e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi } 327e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi return false; 328e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi } 329e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi 330f41fc9664febbdbf138e8540fd7a8281f1278eb1Jim Miller public boolean isBouncerShowing() { 331f41fc9664febbdbf138e8540fd7a8281f1278eb1Jim Miller return mBouncer.isShowing(); 332f41fc9664febbdbf138e8540fd7a8281f1278eb1Jim Miller } 333f41fc9664febbdbf138e8540fd7a8281f1278eb1Jim Miller 334416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi private long getNavBarShowDelay() { 335416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi if (mPhoneStatusBar.isKeyguardFadingAway()) { 336416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi return mPhoneStatusBar.getKeyguardFadingAwayDelay(); 337416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi } else { 338416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi 339416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi // Keyguard is not going away, thus we are showing the navigation bar because the 340416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi // bouncer is appearing. 341416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi return NAV_BAR_SHOW_DELAY_BOUNCER; 342416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi } 343416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi } 344416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi 345416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi private Runnable mMakeNavigationBarVisibleRunnable = new Runnable() { 346416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi @Override 347416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi public void run() { 348416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi mPhoneStatusBar.getNavigationBarView().setVisibility(View.VISIBLE); 349416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi } 350416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi }; 351416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi 3524222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi private void updateStates() { 353e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi int vis = mContainer.getSystemUiVisibility(); 354b601162a60663329355720083bfa199909dbf6efAdrian Roos boolean showing = mShowing; 355b601162a60663329355720083bfa199909dbf6efAdrian Roos boolean occluded = mOccluded; 356b601162a60663329355720083bfa199909dbf6efAdrian Roos boolean bouncerShowing = mBouncer.isShowing(); 35795e89caeb252a54807c76d60c7440766829e418cJorim Jaggi boolean bouncerDismissible = !mBouncer.isFullscreenBouncer(); 358b601162a60663329355720083bfa199909dbf6efAdrian Roos 359b601162a60663329355720083bfa199909dbf6efAdrian Roos if ((bouncerDismissible || !showing) != (mLastBouncerDismissible || !mLastShowing) 360b601162a60663329355720083bfa199909dbf6efAdrian Roos || mFirstUpdate) { 361b601162a60663329355720083bfa199909dbf6efAdrian Roos if (bouncerDismissible || !showing) { 362b601162a60663329355720083bfa199909dbf6efAdrian Roos mContainer.setSystemUiVisibility(vis & ~View.STATUS_BAR_DISABLE_BACK); 3631e68fb3c3842bb90ed3f474cef0ddf7116eace0eJason Monk } else { 364b601162a60663329355720083bfa199909dbf6efAdrian Roos mContainer.setSystemUiVisibility(vis | View.STATUS_BAR_DISABLE_BACK); 365b601162a60663329355720083bfa199909dbf6efAdrian Roos } 366b601162a60663329355720083bfa199909dbf6efAdrian Roos } 367b601162a60663329355720083bfa199909dbf6efAdrian Roos if ((!(showing && !occluded) || bouncerShowing) 368b601162a60663329355720083bfa199909dbf6efAdrian Roos != (!(mLastShowing && !mLastOccluded) || mLastBouncerShowing) || mFirstUpdate) { 369b601162a60663329355720083bfa199909dbf6efAdrian Roos if (mPhoneStatusBar.getNavigationBarView() != null) { 370b601162a60663329355720083bfa199909dbf6efAdrian Roos if (!(showing && !occluded) || bouncerShowing) { 371416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi mContainer.postOnAnimationDelayed(mMakeNavigationBarVisibleRunnable, 372416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi getNavBarShowDelay()); 373b601162a60663329355720083bfa199909dbf6efAdrian Roos } else { 374416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi mContainer.removeCallbacks(mMakeNavigationBarVisibleRunnable); 375b601162a60663329355720083bfa199909dbf6efAdrian Roos mPhoneStatusBar.getNavigationBarView().setVisibility(View.GONE); 376b601162a60663329355720083bfa199909dbf6efAdrian Roos } 3771e68fb3c3842bb90ed3f474cef0ddf7116eace0eJason Monk } 378a6310293c5a861cdb54f2c894e90a8d9da87f8d7Jorim Jaggi } 379b601162a60663329355720083bfa199909dbf6efAdrian Roos 380b601162a60663329355720083bfa199909dbf6efAdrian Roos if (bouncerShowing != mLastBouncerShowing || mFirstUpdate) { 381b601162a60663329355720083bfa199909dbf6efAdrian Roos mStatusBarWindowManager.setBouncerShowing(bouncerShowing); 382b601162a60663329355720083bfa199909dbf6efAdrian Roos mPhoneStatusBar.setBouncerShowing(bouncerShowing); 383ecc798e6668046c2f67cf30c6ab1db2eba80cab1Jorim Jaggi mScrimController.setBouncerShowing(bouncerShowing); 384b601162a60663329355720083bfa199909dbf6efAdrian Roos } 385b601162a60663329355720083bfa199909dbf6efAdrian Roos 386b601162a60663329355720083bfa199909dbf6efAdrian Roos KeyguardUpdateMonitor updateMonitor = KeyguardUpdateMonitor.getInstance(mContext); 387b601162a60663329355720083bfa199909dbf6efAdrian Roos if ((showing && !occluded) != (mLastShowing && !mLastOccluded) || mFirstUpdate) { 388b601162a60663329355720083bfa199909dbf6efAdrian Roos updateMonitor.sendKeyguardVisibilityChanged(showing && !occluded); 389b601162a60663329355720083bfa199909dbf6efAdrian Roos } 390b601162a60663329355720083bfa199909dbf6efAdrian Roos if (bouncerShowing != mLastBouncerShowing || mFirstUpdate) { 391b601162a60663329355720083bfa199909dbf6efAdrian Roos updateMonitor.sendKeyguardBouncerChanged(bouncerShowing); 392b601162a60663329355720083bfa199909dbf6efAdrian Roos } 393b601162a60663329355720083bfa199909dbf6efAdrian Roos 394b601162a60663329355720083bfa199909dbf6efAdrian Roos mFirstUpdate = false; 395b601162a60663329355720083bfa199909dbf6efAdrian Roos mLastShowing = showing; 396b601162a60663329355720083bfa199909dbf6efAdrian Roos mLastOccluded = occluded; 397b601162a60663329355720083bfa199909dbf6efAdrian Roos mLastBouncerShowing = bouncerShowing; 398b601162a60663329355720083bfa199909dbf6efAdrian Roos mLastBouncerDismissible = bouncerDismissible; 3992231c6e1adefdb7636d9fe38a388f1b0660d30eaChristoph Studer 4002231c6e1adefdb7636d9fe38a388f1b0660d30eaChristoph Studer mPhoneStatusBar.onKeyguardViewManagerStatesUpdated(); 401e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi } 4028c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi 4038c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi public boolean onMenuPressed() { 4048c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi return mBouncer.onMenuPressed(); 4058c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi } 406df993513fbfe0e952175c1c5384458deaa1ff01aJorim Jaggi 407df993513fbfe0e952175c1c5384458deaa1ff01aJorim Jaggi public boolean interceptMediaKey(KeyEvent event) { 408df993513fbfe0e952175c1c5384458deaa1ff01aJorim Jaggi return mBouncer.interceptMediaKey(event); 409df993513fbfe0e952175c1c5384458deaa1ff01aJorim Jaggi } 4108de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi 4118de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi public void onActivityDrawn() { 4128de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi if (mPhoneStatusBar.isCollapsing()) { 4138de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi mPhoneStatusBar.addPostCollapseAction(new Runnable() { 4148de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi @Override 4158de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi public void run() { 4168de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi mViewMediatorCallback.readyForKeyguardDone(); 4178de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi } 4188de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi }); 4198de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi } else { 4208de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi mViewMediatorCallback.readyForKeyguardDone(); 4218de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi } 4228de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi } 42384a3e7aacf6dbeccf4afb36a29f2f069dca7d486Jorim Jaggi 42484a3e7aacf6dbeccf4afb36a29f2f069dca7d486Jorim Jaggi public boolean shouldDisableWindowAnimationsForUnlock() { 42584a3e7aacf6dbeccf4afb36a29f2f069dca7d486Jorim Jaggi return mPhoneStatusBar.isInLaunchTransition(); 42684a3e7aacf6dbeccf4afb36a29f2f069dca7d486Jorim Jaggi } 42784a3e7aacf6dbeccf4afb36a29f2f069dca7d486Jorim Jaggi 42884a3e7aacf6dbeccf4afb36a29f2f069dca7d486Jorim Jaggi public boolean isGoingToNotificationShade() { 42984a3e7aacf6dbeccf4afb36a29f2f069dca7d486Jorim Jaggi return mPhoneStatusBar.isGoingToNotificationShade(); 43084a3e7aacf6dbeccf4afb36a29f2f069dca7d486Jorim Jaggi } 43131b844ba0cf418b758fbe45023d0202f208c0191Adrian Roos 43231b844ba0cf418b758fbe45023d0202f208c0191Adrian Roos public boolean isSecure(int userId) { 43331b844ba0cf418b758fbe45023d0202f208c0191Adrian Roos return mBouncer.isSecure() || mLockPatternUtils.isSecure(userId); 43431b844ba0cf418b758fbe45023d0202f208c0191Adrian Roos } 435ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller 436ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller public boolean isInputRestricted() { 437ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller return mViewMediatorCallback.isInputRestricted(); 438ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller } 43933ae80e35a1b170309999c9b33b310ca91eb3f05Jorim Jaggi 44033ae80e35a1b170309999c9b33b310ca91eb3f05Jorim Jaggi public void keyguardGoingAway() { 44133ae80e35a1b170309999c9b33b310ca91eb3f05Jorim Jaggi mPhoneStatusBar.keyguardGoingAway(); 44233ae80e35a1b170309999c9b33b310ca91eb3f05Jorim Jaggi } 44325d7e51a10828e4433fcca90410d13a4b2342c34Jim Miller 444f3b3bee12994a24b60bd447dede9e8791151fcc9Jorim Jaggi public void animateCollapsePanels(float speedUpFactor) { 445f3b3bee12994a24b60bd447dede9e8791151fcc9Jorim Jaggi mPhoneStatusBar.animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE, true /* force */, 446f3b3bee12994a24b60bd447dede9e8791151fcc9Jorim Jaggi false /* delayed */, speedUpFactor); 44725d7e51a10828e4433fcca90410d13a4b2342c34Jim Miller } 4485cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi} 449