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