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