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; 22e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggiimport android.os.SystemClock; 230d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggiimport android.os.Trace; 24df993513fbfe0e952175c1c5384458deaa1ff01aJorim Jaggiimport android.view.KeyEvent; 255cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.view.View; 265cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.view.ViewGroup; 27b774e554f32fd65cac30b43d1cf679403ef4af82Jorim Jaggiimport android.view.ViewRootImpl; 28786afcb3eec18315ec54987a08814ff28f13d09fJorim Jaggiimport android.view.WindowManagerGlobal; 295cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 305cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport com.android.internal.widget.LockPatternUtils; 31b601162a60663329355720083bfa199909dbf6efAdrian Roosimport com.android.keyguard.KeyguardUpdateMonitor; 325cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport com.android.keyguard.ViewMediatorCallback; 3325d7e51a10828e4433fcca90410d13a4b2342c34Jim Millerimport com.android.systemui.statusbar.CommandQueue; 345cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 356b88cdfba770efc5722338c240ccaada13d7b0d4Jorim Jaggiimport static com.android.keyguard.KeyguardHostView.OnDismissAction; 367d7090d66692170b0584a5b9f4fe3e47285ee615Adrian Roos 375cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi/** 385cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Manages creating, showing, hiding and resetting the keyguard within the status bar. Calls back 395cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * via {@link ViewMediatorCallback} to poke the wake lock and report that the keyguard is done, 405cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * which is in turn, reported to this class by the current 415cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * {@link com.android.keyguard.KeyguardViewBase}. 425cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */ 435cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggipublic class StatusBarKeyguardViewManager { 4476a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi 4576a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi // When hiding the Keyguard with timing supplied from WindowManager, better be early than late. 4676a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi private static final long HIDE_TIMING_CORRECTION_MS = -3 * 16; 4776a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi 48416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi // Delay for showing the navigation bar when the bouncer appears. This should be kept in sync 49416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi // with the appear animations of the PIN/pattern/password views. 50416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi private static final long NAV_BAR_SHOW_DELAY_BOUNCER = 320; 51416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi 52007f0e8f207d3d6d2f47d725b72459edf317cce9Jorim Jaggi private static final long WAKE_AND_UNLOCK_SCRIM_FADEOUT_DURATION_MS = 200; 53007f0e8f207d3d6d2f47d725b72459edf317cce9Jorim Jaggi 545cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private static String TAG = "StatusBarKeyguardViewManager"; 555cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 565cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private final Context mContext; 575cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 585cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private LockPatternUtils mLockPatternUtils; 595cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private ViewMediatorCallback mViewMediatorCallback; 605cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private PhoneStatusBar mPhoneStatusBar; 61ecc798e6668046c2f67cf30c6ab1db2eba80cab1Jorim Jaggi private ScrimController mScrimController; 6283eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi private FingerprintUnlockController mFingerprintUnlockController; 635cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 645cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private ViewGroup mContainer; 655cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private StatusBarWindowManager mStatusBarWindowManager; 665cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 670d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi private boolean mDeviceInteractive = false; 680d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi private boolean mScreenTurnedOn; 6903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi private KeyguardBouncer mBouncer; 7003c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi private boolean mShowing; 71a6310293c5a861cdb54f2c894e90a8d9da87f8d7Jorim Jaggi private boolean mOccluded; 725cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 73b601162a60663329355720083bfa199909dbf6efAdrian Roos private boolean mFirstUpdate = true; 74b601162a60663329355720083bfa199909dbf6efAdrian Roos private boolean mLastShowing; 75b601162a60663329355720083bfa199909dbf6efAdrian Roos private boolean mLastOccluded; 76b601162a60663329355720083bfa199909dbf6efAdrian Roos private boolean mLastBouncerShowing; 77b601162a60663329355720083bfa199909dbf6efAdrian Roos private boolean mLastBouncerDismissible; 78746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi private OnDismissAction mAfterKeyguardGoneAction; 790d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi private boolean mDeviceWillWakeUp; 800d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi private boolean mDeferScrimFadeOut; 81b601162a60663329355720083bfa199909dbf6efAdrian Roos 825cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public StatusBarKeyguardViewManager(Context context, ViewMediatorCallback callback, 835cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi LockPatternUtils lockPatternUtils) { 845cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mContext = context; 855cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mViewMediatorCallback = callback; 865cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mLockPatternUtils = lockPatternUtils; 875cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 885cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 895cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void registerStatusBar(PhoneStatusBar phoneStatusBar, 90ecc798e6668046c2f67cf30c6ab1db2eba80cab1Jorim Jaggi ViewGroup container, StatusBarWindowManager statusBarWindowManager, 9183eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi ScrimController scrimController, 9283eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi FingerprintUnlockController fingerprintUnlockController) { 935cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mPhoneStatusBar = phoneStatusBar; 945cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mContainer = container; 955cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mStatusBarWindowManager = statusBarWindowManager; 96ecc798e6668046c2f67cf30c6ab1db2eba80cab1Jorim Jaggi mScrimController = scrimController; 9783eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi mFingerprintUnlockController = fingerprintUnlockController; 9803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi mBouncer = new KeyguardBouncer(mContext, mViewMediatorCallback, mLockPatternUtils, 9903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi mStatusBarWindowManager, container); 1005cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1015cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1025cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi /** 1035cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Show the keyguard. Will handle creating and attaching to the view manager 1045cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * lazily. 1055cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */ 1065cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void show(Bundle options) { 10703c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi mShowing = true; 108cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi mStatusBarWindowManager.setKeyguardShowing(true); 109edd32b881780e52b4ecc43f8df3b6b091e70a863Selim Cinek mScrimController.abortKeyguardFadingOut(); 11043bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi reset(); 1115cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1125cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 113a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi /** 114a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi * Shows the notification keyguard or the bouncer depending on 115a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi * {@link KeyguardBouncer#needsFullscreenBouncer()}. 116a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi */ 117a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi private void showBouncerOrKeyguard() { 118a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi if (mBouncer.needsFullscreenBouncer()) { 119a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi 120a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi // The keyguard might be showing (already). So we need to hide it. 121a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi mPhoneStatusBar.hideKeyguard(); 12295e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mBouncer.show(true /* resetSecuritySelection */); 123a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi } else { 124a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi mPhoneStatusBar.showKeyguard(); 125a0be6d53a823f8115d3863773398d640ec2a8c44Jorim Jaggi mBouncer.hide(false /* destroyView */); 1262fbad7b6a724cf0a5b98b66fe639d58f5ab10af3Jorim Jaggi mBouncer.prepare(); 127a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi } 128a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi } 129a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi 1304222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi private void showBouncer() { 1310002a45034b1103ffc5ecf4d5a14b7d1ba225005Adrian Roos if (mShowing) { 13295e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mBouncer.show(false /* resetSecuritySelection */); 1333806c771336a378b650b2ec14aa1ae7e5927f137Dan Sandler } 1344222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi updateStates(); 1355cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1365cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 137d944986fbdb3d45fab9ae4120af76ca4f6b0909cJorim Jaggi public void dismissWithAction(OnDismissAction r, Runnable cancelAction, 138d944986fbdb3d45fab9ae4120af76ca4f6b0909cJorim Jaggi boolean afterKeyguardGone) { 1390002a45034b1103ffc5ecf4d5a14b7d1ba225005Adrian Roos if (mShowing) { 140746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi if (!afterKeyguardGone) { 141d944986fbdb3d45fab9ae4120af76ca4f6b0909cJorim Jaggi mBouncer.showWithDismissAction(r, cancelAction); 142746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi } else { 14395e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mBouncer.show(false /* resetSecuritySelection */); 144746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi mAfterKeyguardGoneAction = r; 145746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi } 1467d7090d66692170b0584a5b9f4fe3e47285ee615Adrian Roos } 1477d7090d66692170b0584a5b9f4fe3e47285ee615Adrian Roos updateStates(); 1487d7090d66692170b0584a5b9f4fe3e47285ee615Adrian Roos } 1497d7090d66692170b0584a5b9f4fe3e47285ee615Adrian Roos 1505cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi /** 1515cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Reset the state of the view. 1525cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */ 1535cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void reset() { 15443bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi if (mShowing) { 15543bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi if (mOccluded) { 15643bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi mPhoneStatusBar.hideKeyguard(); 157d322f1af916038816ef2a5b56fef4d9648d8433eAdrian Roos mPhoneStatusBar.stopWaitingForKeyguardExit(); 158a0be6d53a823f8115d3863773398d640ec2a8c44Jorim Jaggi mBouncer.hide(false /* destroyView */); 15943bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi } else { 16043bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi showBouncerOrKeyguard(); 16143bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi } 1621fcafc49ad34cb8f778862653d452ac0fe61461cSelim Cinek KeyguardUpdateMonitor.getInstance(mContext).sendKeyguardReset(); 16343bdbbdad6c54c732b2caa09d7544cfdd677ac5bJorim Jaggi updateStates(); 1643806c771336a378b650b2ec14aa1ae7e5927f137Dan Sandler } 1655cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1665cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 16718f18ae078ee97bbdfc9da39d4a19866dceb6a3eJorim Jaggi public void onStartedGoingToSleep() { 16818f18ae078ee97bbdfc9da39d4a19866dceb6a3eJorim Jaggi mPhoneStatusBar.onStartedGoingToSleep(); 16918f18ae078ee97bbdfc9da39d4a19866dceb6a3eJorim Jaggi } 17018f18ae078ee97bbdfc9da39d4a19866dceb6a3eJorim Jaggi 1710d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi public void onFinishedGoingToSleep() { 1720d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi mDeviceInteractive = false; 17350ff3afb01f2ac4a93dba418a71d54ad8adeba9dJorim Jaggi mPhoneStatusBar.onFinishedGoingToSleep(); 17403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi mBouncer.onScreenTurnedOff(); 1755cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1765cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1770d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi public void onStartedWakingUp() { 1780d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi mDeviceInteractive = true; 1790d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi mDeviceWillWakeUp = false; 18050ff3afb01f2ac4a93dba418a71d54ad8adeba9dJorim Jaggi mPhoneStatusBar.onStartedWakingUp(); 1815cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1825cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1839373911d41c133fce80b8ecf6e688204f2c667e7Jorim Jaggi public void onScreenTurningOn() { 1849373911d41c133fce80b8ecf6e688204f2c667e7Jorim Jaggi mPhoneStatusBar.onScreenTurningOn(); 1859373911d41c133fce80b8ecf6e688204f2c667e7Jorim Jaggi } 1869373911d41c133fce80b8ecf6e688204f2c667e7Jorim Jaggi 187372d1bdd54fe977c71bdaae895687c76ac35202aSelim Cinek public boolean isScreenTurnedOn() { 188372d1bdd54fe977c71bdaae895687c76ac35202aSelim Cinek return mScreenTurnedOn; 189372d1bdd54fe977c71bdaae895687c76ac35202aSelim Cinek } 190372d1bdd54fe977c71bdaae895687c76ac35202aSelim Cinek 1910d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi public void onScreenTurnedOn() { 1920d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi mScreenTurnedOn = true; 1930d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi if (mDeferScrimFadeOut) { 1940d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi mDeferScrimFadeOut = false; 195ab45a217b0002dcf586d529ab8581cacbbfc37e9Jorim Jaggi animateScrimControllerKeyguardFadingOut(0, WAKE_AND_UNLOCK_SCRIM_FADEOUT_DURATION_MS, 196ab45a217b0002dcf586d529ab8581cacbbfc37e9Jorim Jaggi true /* skipFirstFrame */); 1970d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi updateStates(); 1980d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi } 19950ff3afb01f2ac4a93dba418a71d54ad8adeba9dJorim Jaggi mPhoneStatusBar.onScreenTurnedOn(); 2000d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi } 2010d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi 2020d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi public void onScreenTurnedOff() { 2030d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi mScreenTurnedOn = false; 2040d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi } 2050d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi 2060d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi public void notifyDeviceWakeUpRequested() { 2070d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi mDeviceWillWakeUp = !mDeviceInteractive; 208f8fbc2a7cc1449ba1f8ebc3e8f09359903293ad1Selim Cinek } 209f8fbc2a7cc1449ba1f8ebc3e8f09359903293ad1Selim Cinek 2105cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void verifyUnlock() { 21103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi dismiss(); 2125cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 2135cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 2145cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void setNeedsInput(boolean needsInput) { 215cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi mStatusBarWindowManager.setKeyguardNeedsInput(needsInput); 2165cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 2175cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 2185cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void setOccluded(boolean occluded) { 219baa23274596246d03741457701ac515a73aa8818Selim Cinek if (occluded && !mOccluded && mShowing) { 220baa23274596246d03741457701ac515a73aa8818Selim Cinek if (mPhoneStatusBar.isInLaunchTransition()) { 221baa23274596246d03741457701ac515a73aa8818Selim Cinek mOccluded = true; 222baa23274596246d03741457701ac515a73aa8818Selim Cinek mPhoneStatusBar.fadeKeyguardAfterLaunchTransition(null /* beforeFading */, 223baa23274596246d03741457701ac515a73aa8818Selim Cinek new Runnable() { 224baa23274596246d03741457701ac515a73aa8818Selim Cinek @Override 225baa23274596246d03741457701ac515a73aa8818Selim Cinek public void run() { 226826730aeb98040cd01c9b5f0656c8b9036bc07deJorim Jaggi mStatusBarWindowManager.setKeyguardOccluded(mOccluded); 227fbc88e19cb77c303b47a427a40123ccf4ba5cca7Jorim Jaggi reset(); 228baa23274596246d03741457701ac515a73aa8818Selim Cinek } 229baa23274596246d03741457701ac515a73aa8818Selim Cinek }); 230baa23274596246d03741457701ac515a73aa8818Selim Cinek return; 231baa23274596246d03741457701ac515a73aa8818Selim Cinek } 232baa23274596246d03741457701ac515a73aa8818Selim Cinek } 233a6310293c5a861cdb54f2c894e90a8d9da87f8d7Jorim Jaggi mOccluded = occluded; 234cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi mStatusBarWindowManager.setKeyguardOccluded(occluded); 2353806c771336a378b650b2ec14aa1ae7e5927f137Dan Sandler reset(); 2365cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 2375cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 2384b22bdfa84eb3b62f83982281798145e56fce21dDan Sandler public boolean isOccluded() { 2394b22bdfa84eb3b62f83982281798145e56fce21dDan Sandler return mOccluded; 2404b22bdfa84eb3b62f83982281798145e56fce21dDan Sandler } 2414b22bdfa84eb3b62f83982281798145e56fce21dDan Sandler 2425cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi /** 24376a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi * Starts the animation before we dismiss Keyguard, i.e. an disappearing animation on the 24476a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi * security view of the bouncer. 24576a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi * 2468de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi * @param finishRunnable the runnable to be run after the animation finished, or {@code null} if 2478de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi * no action should be run 24876a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi */ 24976a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi public void startPreHideAnimation(Runnable finishRunnable) { 25076a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi if (mBouncer.isShowing()) { 25176a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi mBouncer.startPreHideAnimation(finishRunnable); 2528de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi } else if (finishRunnable != null) { 25376a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi finishRunnable.run(); 25476a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi } 25576a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi } 25676a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi 25776a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi /** 2585cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Hides the keyguard view 2595cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */ 260baa23274596246d03741457701ac515a73aa8818Selim Cinek public void hide(long startTime, final long fadeoutDuration) { 26103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi mShowing = false; 26244cf91960d74eccec45b9adec291ddb8baf84b4dJorim Jaggi 263e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi long uptimeMillis = SystemClock.uptimeMillis(); 26476a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi long delay = Math.max(0, startTime + HIDE_TIMING_CORRECTION_MS - uptimeMillis); 265baa23274596246d03741457701ac515a73aa8818Selim Cinek 266baa23274596246d03741457701ac515a73aa8818Selim Cinek if (mPhoneStatusBar.isInLaunchTransition() ) { 267baa23274596246d03741457701ac515a73aa8818Selim Cinek mPhoneStatusBar.fadeKeyguardAfterLaunchTransition(new Runnable() { 268baa23274596246d03741457701ac515a73aa8818Selim Cinek @Override 269baa23274596246d03741457701ac515a73aa8818Selim Cinek public void run() { 270baa23274596246d03741457701ac515a73aa8818Selim Cinek mStatusBarWindowManager.setKeyguardShowing(false); 271baa23274596246d03741457701ac515a73aa8818Selim Cinek mStatusBarWindowManager.setKeyguardFadingAway(true); 27276a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi mBouncer.hide(true /* destroyView */); 273baa23274596246d03741457701ac515a73aa8818Selim Cinek updateStates(); 274baa23274596246d03741457701ac515a73aa8818Selim Cinek mScrimController.animateKeyguardFadingOut( 275baa23274596246d03741457701ac515a73aa8818Selim Cinek PhoneStatusBar.FADE_KEYGUARD_START_DELAY, 276ab45a217b0002dcf586d529ab8581cacbbfc37e9Jorim Jaggi PhoneStatusBar.FADE_KEYGUARD_DURATION, null, 277ab45a217b0002dcf586d529ab8581cacbbfc37e9Jorim Jaggi false /* skipFirstFrame */); 278baa23274596246d03741457701ac515a73aa8818Selim Cinek } 279baa23274596246d03741457701ac515a73aa8818Selim Cinek }, new Runnable() { 280baa23274596246d03741457701ac515a73aa8818Selim Cinek @Override 281baa23274596246d03741457701ac515a73aa8818Selim Cinek public void run() { 282baa23274596246d03741457701ac515a73aa8818Selim Cinek mPhoneStatusBar.hideKeyguard(); 283baa23274596246d03741457701ac515a73aa8818Selim Cinek mStatusBarWindowManager.setKeyguardFadingAway(false); 284baa23274596246d03741457701ac515a73aa8818Selim Cinek mViewMediatorCallback.keyguardGone(); 285746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi executeAfterKeyguardGoneAction(); 286baa23274596246d03741457701ac515a73aa8818Selim Cinek } 287baa23274596246d03741457701ac515a73aa8818Selim Cinek }); 288baa23274596246d03741457701ac515a73aa8818Selim Cinek } else { 28983eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi if (mFingerprintUnlockController.getMode() 29083eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi == FingerprintUnlockController.MODE_WAKE_AND_UNLOCK_PULSING) { 29183eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi mFingerprintUnlockController.startKeyguardFadingAway(); 292909788500bbe54b14017be3c1f2b4fee7945c63dJorim Jaggi mPhoneStatusBar.setKeyguardFadingAway(startTime, 0, 240); 2930d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi mStatusBarWindowManager.setKeyguardFadingAway(true); 29483eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi mPhoneStatusBar.fadeKeyguardWhilePulsing(); 295909788500bbe54b14017be3c1f2b4fee7945c63dJorim Jaggi animateScrimControllerKeyguardFadingOut(0, 240, new Runnable() { 296909788500bbe54b14017be3c1f2b4fee7945c63dJorim Jaggi @Override 297909788500bbe54b14017be3c1f2b4fee7945c63dJorim Jaggi public void run() { 298909788500bbe54b14017be3c1f2b4fee7945c63dJorim Jaggi mPhoneStatusBar.hideKeyguard(); 299909788500bbe54b14017be3c1f2b4fee7945c63dJorim Jaggi } 300ab45a217b0002dcf586d529ab8581cacbbfc37e9Jorim Jaggi }, false /* skipFirstFrame */); 301dbc3dce886cb7abba23a9f18e60d0f5af5c93226Jorim Jaggi } else { 30283eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi mFingerprintUnlockController.startKeyguardFadingAway(); 30383eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi mPhoneStatusBar.setKeyguardFadingAway(startTime, delay, fadeoutDuration); 30483eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi boolean staying = mPhoneStatusBar.hideKeyguard(); 30583eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi if (!staying) { 30683eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi mStatusBarWindowManager.setKeyguardFadingAway(true); 30783eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi if (mFingerprintUnlockController.getMode() 30883eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi == FingerprintUnlockController.MODE_WAKE_AND_UNLOCK) { 30983eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi if (!mScreenTurnedOn) { 31083eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi mDeferScrimFadeOut = true; 31183eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi } else { 31283eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi 31383eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi // Screen is already on, don't defer with fading out. 31483eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi animateScrimControllerKeyguardFadingOut(0, 315ab45a217b0002dcf586d529ab8581cacbbfc37e9Jorim Jaggi WAKE_AND_UNLOCK_SCRIM_FADEOUT_DURATION_MS, 316ab45a217b0002dcf586d529ab8581cacbbfc37e9Jorim Jaggi true /* skipFirstFrame */); 31783eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi } 31883eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi } else { 319ab45a217b0002dcf586d529ab8581cacbbfc37e9Jorim Jaggi animateScrimControllerKeyguardFadingOut(delay, fadeoutDuration, 320ab45a217b0002dcf586d529ab8581cacbbfc37e9Jorim Jaggi false /* skipFirstFrame */); 32183eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi } 32283eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi } else { 32383eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi mScrimController.animateGoingToFullShade(delay, fadeoutDuration); 32483eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi mPhoneStatusBar.finishKeyguardFadingAway(); 32583eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi } 326dbc3dce886cb7abba23a9f18e60d0f5af5c93226Jorim Jaggi } 327baa23274596246d03741457701ac515a73aa8818Selim Cinek mStatusBarWindowManager.setKeyguardShowing(false); 32876a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi mBouncer.hide(true /* destroyView */); 329baa23274596246d03741457701ac515a73aa8818Selim Cinek mViewMediatorCallback.keyguardGone(); 330746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi executeAfterKeyguardGoneAction(); 331baa23274596246d03741457701ac515a73aa8818Selim Cinek updateStates(); 332e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi } 3335cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 3345cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 335ab45a217b0002dcf586d529ab8581cacbbfc37e9Jorim Jaggi private void animateScrimControllerKeyguardFadingOut(long delay, long duration, 336ab45a217b0002dcf586d529ab8581cacbbfc37e9Jorim Jaggi boolean skipFirstFrame) { 337ab45a217b0002dcf586d529ab8581cacbbfc37e9Jorim Jaggi animateScrimControllerKeyguardFadingOut(delay, duration, null /* endRunnable */, 338ab45a217b0002dcf586d529ab8581cacbbfc37e9Jorim Jaggi skipFirstFrame); 339909788500bbe54b14017be3c1f2b4fee7945c63dJorim Jaggi } 340909788500bbe54b14017be3c1f2b4fee7945c63dJorim Jaggi 341909788500bbe54b14017be3c1f2b4fee7945c63dJorim Jaggi private void animateScrimControllerKeyguardFadingOut(long delay, long duration, 342ab45a217b0002dcf586d529ab8581cacbbfc37e9Jorim Jaggi final Runnable endRunnable, boolean skipFirstFrame) { 3430d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi Trace.asyncTraceBegin(Trace.TRACE_TAG_VIEW, "Fading out", 0); 3440d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi mScrimController.animateKeyguardFadingOut(delay, duration, new Runnable() { 3450d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi @Override 3460d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi public void run() { 347909788500bbe54b14017be3c1f2b4fee7945c63dJorim Jaggi if (endRunnable != null) { 348909788500bbe54b14017be3c1f2b4fee7945c63dJorim Jaggi endRunnable.run(); 349909788500bbe54b14017be3c1f2b4fee7945c63dJorim Jaggi } 3500d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi mStatusBarWindowManager.setKeyguardFadingAway(false); 3510d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi mPhoneStatusBar.finishKeyguardFadingAway(); 35283eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi mFingerprintUnlockController.finishKeyguardFadingAway(); 3530d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi WindowManagerGlobal.getInstance().trimMemory( 3540d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN); 3550d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi Trace.asyncTraceEnd(Trace.TRACE_TAG_VIEW, "Fading out", 0); 3560d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi } 357ab45a217b0002dcf586d529ab8581cacbbfc37e9Jorim Jaggi }, skipFirstFrame); 3580d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi } 3590d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi 360746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi private void executeAfterKeyguardGoneAction() { 361746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi if (mAfterKeyguardGoneAction != null) { 362746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi mAfterKeyguardGoneAction.onDismiss(); 363746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi mAfterKeyguardGoneAction = null; 364746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi } 365746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi } 366746f7facf2c5f9a7362387806b5926b951bb024aJorim Jaggi 3675cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi /** 3685cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Dismisses the keyguard by going to the next screen or making it gone. 3695cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */ 3705cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void dismiss() { 3710d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi if (mDeviceInteractive || mDeviceWillWakeUp) { 3720bed7f258ba1fffc10f986ee043b769f1fd40ad3Jorim Jaggi showBouncer(); 3735cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 3745cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 3755cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 3762231c6e1adefdb7636d9fe38a388f1b0660d30eaChristoph Studer /** 3772231c6e1adefdb7636d9fe38a388f1b0660d30eaChristoph Studer * WARNING: This method might cause Binder calls. 3782231c6e1adefdb7636d9fe38a388f1b0660d30eaChristoph Studer */ 3791568250853d81befcdaef63cc8588435353c3d12Jorim Jaggi public boolean isSecure() { 3801568250853d81befcdaef63cc8588435353c3d12Jorim Jaggi return mBouncer.isSecure(); 3811568250853d81befcdaef63cc8588435353c3d12Jorim Jaggi } 3821568250853d81befcdaef63cc8588435353c3d12Jorim Jaggi 3835cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi /** 3845cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * @return Whether the keyguard is showing 3855cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */ 3865cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public boolean isShowing() { 38703c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi return mShowing; 3885cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 389e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi 390e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi /** 391e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi * Notifies this manager that the back button has been pressed. 392e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi * 393e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi * @return whether the back press has been handled 394e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi */ 395e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi public boolean onBackPressed() { 396e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi if (mBouncer.isShowing()) { 397372d1bdd54fe977c71bdaae895687c76ac35202aSelim Cinek mPhoneStatusBar.endAffordanceLaunch(); 3986bad244c4e0bcfba1652f3cc3593a9034f84fd9bJorim Jaggi reset(); 399e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi return true; 400e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi } 401e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi return false; 402e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi } 403e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi 404f41fc9664febbdbf138e8540fd7a8281f1278eb1Jim Miller public boolean isBouncerShowing() { 405f41fc9664febbdbf138e8540fd7a8281f1278eb1Jim Miller return mBouncer.isShowing(); 406f41fc9664febbdbf138e8540fd7a8281f1278eb1Jim Miller } 407f41fc9664febbdbf138e8540fd7a8281f1278eb1Jim Miller 408416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi private long getNavBarShowDelay() { 409416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi if (mPhoneStatusBar.isKeyguardFadingAway()) { 410416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi return mPhoneStatusBar.getKeyguardFadingAwayDelay(); 411416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi } else { 412416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi 413416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi // Keyguard is not going away, thus we are showing the navigation bar because the 414416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi // bouncer is appearing. 415416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi return NAV_BAR_SHOW_DELAY_BOUNCER; 416416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi } 417416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi } 418416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi 419416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi private Runnable mMakeNavigationBarVisibleRunnable = new Runnable() { 420416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi @Override 421416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi public void run() { 422416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi mPhoneStatusBar.getNavigationBarView().setVisibility(View.VISIBLE); 423416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi } 424416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi }; 425416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi 4264222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi private void updateStates() { 427e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi int vis = mContainer.getSystemUiVisibility(); 428b601162a60663329355720083bfa199909dbf6efAdrian Roos boolean showing = mShowing; 429b601162a60663329355720083bfa199909dbf6efAdrian Roos boolean occluded = mOccluded; 430b601162a60663329355720083bfa199909dbf6efAdrian Roos boolean bouncerShowing = mBouncer.isShowing(); 43195e89caeb252a54807c76d60c7440766829e418cJorim Jaggi boolean bouncerDismissible = !mBouncer.isFullscreenBouncer(); 432b601162a60663329355720083bfa199909dbf6efAdrian Roos 433b601162a60663329355720083bfa199909dbf6efAdrian Roos if ((bouncerDismissible || !showing) != (mLastBouncerDismissible || !mLastShowing) 434b601162a60663329355720083bfa199909dbf6efAdrian Roos || mFirstUpdate) { 435b601162a60663329355720083bfa199909dbf6efAdrian Roos if (bouncerDismissible || !showing) { 436b601162a60663329355720083bfa199909dbf6efAdrian Roos mContainer.setSystemUiVisibility(vis & ~View.STATUS_BAR_DISABLE_BACK); 4371e68fb3c3842bb90ed3f474cef0ddf7116eace0eJason Monk } else { 438b601162a60663329355720083bfa199909dbf6efAdrian Roos mContainer.setSystemUiVisibility(vis | View.STATUS_BAR_DISABLE_BACK); 439b601162a60663329355720083bfa199909dbf6efAdrian Roos } 440b601162a60663329355720083bfa199909dbf6efAdrian Roos } 4410d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi 442ab45a217b0002dcf586d529ab8581cacbbfc37e9Jorim Jaggi boolean navBarVisible = (!(showing && !occluded) || bouncerShowing); 443ab45a217b0002dcf586d529ab8581cacbbfc37e9Jorim Jaggi boolean lastNavBarVisible = (!(mLastShowing && !mLastOccluded) || mLastBouncerShowing); 4440d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi if (navBarVisible != lastNavBarVisible || mFirstUpdate) { 445b601162a60663329355720083bfa199909dbf6efAdrian Roos if (mPhoneStatusBar.getNavigationBarView() != null) { 4460d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi if (navBarVisible) { 44783eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi long delay = getNavBarShowDelay(); 44883eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi if (delay == 0) { 44983eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi mMakeNavigationBarVisibleRunnable.run(); 45083eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi } else { 45183eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi mContainer.postOnAnimationDelayed(mMakeNavigationBarVisibleRunnable, 45283eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi delay); 45383eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi } 454b601162a60663329355720083bfa199909dbf6efAdrian Roos } else { 455416493bf66dff0aa7fcd9ea505ed10dbff1f2906Jorim Jaggi mContainer.removeCallbacks(mMakeNavigationBarVisibleRunnable); 456b601162a60663329355720083bfa199909dbf6efAdrian Roos mPhoneStatusBar.getNavigationBarView().setVisibility(View.GONE); 457b601162a60663329355720083bfa199909dbf6efAdrian Roos } 4581e68fb3c3842bb90ed3f474cef0ddf7116eace0eJason Monk } 459a6310293c5a861cdb54f2c894e90a8d9da87f8d7Jorim Jaggi } 460b601162a60663329355720083bfa199909dbf6efAdrian Roos 461b601162a60663329355720083bfa199909dbf6efAdrian Roos if (bouncerShowing != mLastBouncerShowing || mFirstUpdate) { 462b601162a60663329355720083bfa199909dbf6efAdrian Roos mStatusBarWindowManager.setBouncerShowing(bouncerShowing); 463b601162a60663329355720083bfa199909dbf6efAdrian Roos mPhoneStatusBar.setBouncerShowing(bouncerShowing); 464ecc798e6668046c2f67cf30c6ab1db2eba80cab1Jorim Jaggi mScrimController.setBouncerShowing(bouncerShowing); 465b601162a60663329355720083bfa199909dbf6efAdrian Roos } 466b601162a60663329355720083bfa199909dbf6efAdrian Roos 467b601162a60663329355720083bfa199909dbf6efAdrian Roos KeyguardUpdateMonitor updateMonitor = KeyguardUpdateMonitor.getInstance(mContext); 468b601162a60663329355720083bfa199909dbf6efAdrian Roos if ((showing && !occluded) != (mLastShowing && !mLastOccluded) || mFirstUpdate) { 4696a15d528c0a4501389008ef945dec38b5ca6919aJorim Jaggi updateMonitor.onKeyguardVisibilityChanged(showing && !occluded); 470b601162a60663329355720083bfa199909dbf6efAdrian Roos } 471b601162a60663329355720083bfa199909dbf6efAdrian Roos if (bouncerShowing != mLastBouncerShowing || mFirstUpdate) { 472b601162a60663329355720083bfa199909dbf6efAdrian Roos updateMonitor.sendKeyguardBouncerChanged(bouncerShowing); 473b601162a60663329355720083bfa199909dbf6efAdrian Roos } 474b601162a60663329355720083bfa199909dbf6efAdrian Roos 475b601162a60663329355720083bfa199909dbf6efAdrian Roos mFirstUpdate = false; 476b601162a60663329355720083bfa199909dbf6efAdrian Roos mLastShowing = showing; 477b601162a60663329355720083bfa199909dbf6efAdrian Roos mLastOccluded = occluded; 478b601162a60663329355720083bfa199909dbf6efAdrian Roos mLastBouncerShowing = bouncerShowing; 479b601162a60663329355720083bfa199909dbf6efAdrian Roos mLastBouncerDismissible = bouncerDismissible; 4802231c6e1adefdb7636d9fe38a388f1b0660d30eaChristoph Studer 4812231c6e1adefdb7636d9fe38a388f1b0660d30eaChristoph Studer mPhoneStatusBar.onKeyguardViewManagerStatesUpdated(); 482e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi } 4838c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi 4848c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi public boolean onMenuPressed() { 4858c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi return mBouncer.onMenuPressed(); 4868c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi } 487df993513fbfe0e952175c1c5384458deaa1ff01aJorim Jaggi 488df993513fbfe0e952175c1c5384458deaa1ff01aJorim Jaggi public boolean interceptMediaKey(KeyEvent event) { 489df993513fbfe0e952175c1c5384458deaa1ff01aJorim Jaggi return mBouncer.interceptMediaKey(event); 490df993513fbfe0e952175c1c5384458deaa1ff01aJorim Jaggi } 4918de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi 4928de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi public void onActivityDrawn() { 4938de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi if (mPhoneStatusBar.isCollapsing()) { 4948de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi mPhoneStatusBar.addPostCollapseAction(new Runnable() { 4958de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi @Override 4968de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi public void run() { 4978de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi mViewMediatorCallback.readyForKeyguardDone(); 4988de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi } 4998de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi }); 5008de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi } else { 5018de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi mViewMediatorCallback.readyForKeyguardDone(); 5028de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi } 5038de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi } 50484a3e7aacf6dbeccf4afb36a29f2f069dca7d486Jorim Jaggi 50584a3e7aacf6dbeccf4afb36a29f2f069dca7d486Jorim Jaggi public boolean shouldDisableWindowAnimationsForUnlock() { 50684a3e7aacf6dbeccf4afb36a29f2f069dca7d486Jorim Jaggi return mPhoneStatusBar.isInLaunchTransition(); 50784a3e7aacf6dbeccf4afb36a29f2f069dca7d486Jorim Jaggi } 50884a3e7aacf6dbeccf4afb36a29f2f069dca7d486Jorim Jaggi 50984a3e7aacf6dbeccf4afb36a29f2f069dca7d486Jorim Jaggi public boolean isGoingToNotificationShade() { 51084a3e7aacf6dbeccf4afb36a29f2f069dca7d486Jorim Jaggi return mPhoneStatusBar.isGoingToNotificationShade(); 51184a3e7aacf6dbeccf4afb36a29f2f069dca7d486Jorim Jaggi } 51231b844ba0cf418b758fbe45023d0202f208c0191Adrian Roos 51331b844ba0cf418b758fbe45023d0202f208c0191Adrian Roos public boolean isSecure(int userId) { 51431b844ba0cf418b758fbe45023d0202f208c0191Adrian Roos return mBouncer.isSecure() || mLockPatternUtils.isSecure(userId); 51531b844ba0cf418b758fbe45023d0202f208c0191Adrian Roos } 516ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller 517ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller public boolean isInputRestricted() { 518ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller return mViewMediatorCallback.isInputRestricted(); 519ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller } 52033ae80e35a1b170309999c9b33b310ca91eb3f05Jorim Jaggi 52133ae80e35a1b170309999c9b33b310ca91eb3f05Jorim Jaggi public void keyguardGoingAway() { 52233ae80e35a1b170309999c9b33b310ca91eb3f05Jorim Jaggi mPhoneStatusBar.keyguardGoingAway(); 52333ae80e35a1b170309999c9b33b310ca91eb3f05Jorim Jaggi } 52425d7e51a10828e4433fcca90410d13a4b2342c34Jim Miller 525f3b3bee12994a24b60bd447dede9e8791151fcc9Jorim Jaggi public void animateCollapsePanels(float speedUpFactor) { 526f3b3bee12994a24b60bd447dede9e8791151fcc9Jorim Jaggi mPhoneStatusBar.animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE, true /* force */, 527f3b3bee12994a24b60bd447dede9e8791151fcc9Jorim Jaggi false /* delayed */, speedUpFactor); 52825d7e51a10828e4433fcca90410d13a4b2342c34Jim Miller } 5295cc86599ce0e5596655859d09c52934030da240bJorim Jaggi 5305cc86599ce0e5596655859d09c52934030da240bJorim Jaggi /** 5315cc86599ce0e5596655859d09c52934030da240bJorim Jaggi * Notifies that the user has authenticated by other means than using the bouncer, for example, 5325cc86599ce0e5596655859d09c52934030da240bJorim Jaggi * fingerprint. 5335cc86599ce0e5596655859d09c52934030da240bJorim Jaggi */ 53425b4d4b280c6aa07656328bd9dd90977781d00e1Jorim Jaggi public void notifyKeyguardAuthenticated(boolean strongAuth) { 53525b4d4b280c6aa07656328bd9dd90977781d00e1Jorim Jaggi mBouncer.notifyKeyguardAuthenticated(strongAuth); 5365cc86599ce0e5596655859d09c52934030da240bJorim Jaggi } 5370d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi 538cfafe4ea6ff1610c24d94a9a9ecc7df6b841518cSelim Cinek public void showBouncerMessage(String message, int color) { 539cfafe4ea6ff1610c24d94a9a9ecc7df6b841518cSelim Cinek mBouncer.showMessage(message, color); 540cfafe4ea6ff1610c24d94a9a9ecc7df6b841518cSelim Cinek } 541b774e554f32fd65cac30b43d1cf679403ef4af82Jorim Jaggi 542b774e554f32fd65cac30b43d1cf679403ef4af82Jorim Jaggi public ViewRootImpl getViewRootImpl() { 543b774e554f32fd65cac30b43d1cf679403ef4af82Jorim Jaggi return mPhoneStatusBar.getStatusBarView().getViewRootImpl(); 544b774e554f32fd65cac30b43d1cf679403ef4af82Jorim Jaggi } 5455cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi} 546