StatusBarKeyguardViewManager.java revision 4222d9a7fb87d73e1443ec1a2de9782b05741af6
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;
225cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.util.Slog;
235cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.view.View;
245cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.view.ViewGroup;
255cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
265cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport com.android.internal.policy.IKeyguardShowCallback;
275cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport com.android.internal.widget.LockPatternUtils;
285cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport com.android.keyguard.ViewMediatorCallback;
295cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
305cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi/**
315cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Manages creating, showing, hiding and resetting the keyguard within the status bar. Calls back
325cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * via {@link ViewMediatorCallback} to poke the wake lock and report that the keyguard is done,
335cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * which is in turn, reported to this class by the current
345cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * {@link com.android.keyguard.KeyguardViewBase}.
355cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */
365cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggipublic class StatusBarKeyguardViewManager {
375cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private static String TAG = "StatusBarKeyguardViewManager";
385cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
395cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private final Context mContext;
405cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
415cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private LockPatternUtils mLockPatternUtils;
425cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private ViewMediatorCallback mViewMediatorCallback;
435cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private PhoneStatusBar mPhoneStatusBar;
445cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
455cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private ViewGroup mContainer;
465cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private StatusBarWindowManager mStatusBarWindowManager;
475cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
485cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private boolean mScreenOn = false;
4903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    private KeyguardBouncer mBouncer;
5003c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    private boolean mShowing;
51a6310293c5a861cdb54f2c894e90a8d9da87f8d7Jorim Jaggi    private boolean mOccluded;
525cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
535cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public StatusBarKeyguardViewManager(Context context, ViewMediatorCallback callback,
545cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            LockPatternUtils lockPatternUtils) {
555cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mContext = context;
565cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mViewMediatorCallback = callback;
575cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mLockPatternUtils = lockPatternUtils;
585cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
595cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
605cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void registerStatusBar(PhoneStatusBar phoneStatusBar,
615cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            ViewGroup container, StatusBarWindowManager statusBarWindowManager) {
625cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mPhoneStatusBar = phoneStatusBar;
635cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mContainer = container;
645cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mStatusBarWindowManager = statusBarWindowManager;
6503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mBouncer = new KeyguardBouncer(mContext, mViewMediatorCallback, mLockPatternUtils,
6603c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi                mStatusBarWindowManager, container);
675cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
685cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
695cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    /**
705cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     * Show the keyguard.  Will handle creating and attaching to the view manager
715cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     * lazily.
725cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     */
735cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void show(Bundle options) {
7403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mShowing = true;
75cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi        mStatusBarWindowManager.setKeyguardShowing(true);
76a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi        showBouncerOrKeyguard();
774222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi        updateStates();
785cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
795cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
80a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi    /**
81a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi     * Shows the notification keyguard or the bouncer depending on
82a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi     * {@link KeyguardBouncer#needsFullscreenBouncer()}.
83a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi     */
84a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi    private void showBouncerOrKeyguard() {
85a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi        if (mBouncer.needsFullscreenBouncer()) {
86a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi
87a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi            // The keyguard might be showing (already). So we need to hide it.
88a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi            mPhoneStatusBar.hideKeyguard();
89a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi            mBouncer.show();
90a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi        } else {
91a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi            mPhoneStatusBar.showKeyguard();
92a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi            mBouncer.hide();
93a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi            mBouncer.prepare();
94a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi        }
95a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi    }
96a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi
974222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi    private void showBouncer() {
982e50f28f4154ce289748ef5c5cfdd8bd9c38c682John Spurlock        mBouncer.show();
994222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi        updateStates();
1005cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1015cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1025cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    /**
1035cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     * Reset the state of the view.
1045cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     */
1055cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void reset() {
106a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi        showBouncerOrKeyguard();
1074222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi        updateStates();
1085cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1095cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1105cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void onScreenTurnedOff() {
1115cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mScreenOn = false;
11203c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mBouncer.onScreenTurnedOff();
1135cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1145cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1155cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void onScreenTurnedOn(final IKeyguardShowCallback callback) {
1165cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mScreenOn = true;
11703c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        if (callback != null) {
11803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi            callbackAfterDraw(callback);
1195cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        }
1205cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1215cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1225cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private void callbackAfterDraw(final IKeyguardShowCallback callback) {
12303c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mContainer.post(new Runnable() {
1245cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            @Override
1255cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            public void run() {
1265cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                try {
12703c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi                    callback.onShown(mContainer.getWindowToken());
1285cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                } catch (RemoteException e) {
1295cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                    Slog.w(TAG, "Exception calling onShown():", e);
1305cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                }
1315cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            }
1325cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        });
1335cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1345cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1355cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void verifyUnlock() {
13603c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        dismiss();
1375cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1385cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1395cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setNeedsInput(boolean needsInput) {
140cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi        mStatusBarWindowManager.setKeyguardNeedsInput(needsInput);
1415cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1425cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1435cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void updateUserActivityTimeout() {
14403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mStatusBarWindowManager.setKeyguardUserActivityTimeout(mBouncer.getUserActivityTimeout());
1455cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1465cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1475cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setOccluded(boolean occluded) {
148a6310293c5a861cdb54f2c894e90a8d9da87f8d7Jorim Jaggi        mOccluded = occluded;
149cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi        mStatusBarWindowManager.setKeyguardOccluded(occluded);
1504222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi        updateStates();
1515cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1525cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1535cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    /**
1545cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     * Hides the keyguard view
1555cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     */
1565cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void hide() {
15703c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mShowing = false;
15803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mPhoneStatusBar.hideKeyguard();
159cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi        mStatusBarWindowManager.setKeyguardShowing(false);
16003c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mBouncer.hide();
16103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mViewMediatorCallback.keyguardGone();
1624222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi        updateStates();
1635cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1645cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1655cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    /**
1665cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     * Dismisses the keyguard by going to the next screen or making it gone.
1675cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     */
1685cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void dismiss() {
1695cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        if (mScreenOn) {
1700bed7f258ba1fffc10f986ee043b769f1fd40ad3Jorim Jaggi            showBouncer();
1715cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        }
1725cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1735cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1741568250853d81befcdaef63cc8588435353c3d12Jorim Jaggi    public boolean isSecure() {
1751568250853d81befcdaef63cc8588435353c3d12Jorim Jaggi        return mBouncer.isSecure();
1761568250853d81befcdaef63cc8588435353c3d12Jorim Jaggi    }
1771568250853d81befcdaef63cc8588435353c3d12Jorim Jaggi
1785cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    /**
1795cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     * @return Whether the keyguard is showing
1805cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     */
1815cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public boolean isShowing() {
18203c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        return mShowing;
1835cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
184e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi
185e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi    /**
186e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi     * Notifies this manager that the back button has been pressed.
187e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi     *
188e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi     * @return whether the back press has been handled
189e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi     */
190e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi    public boolean onBackPressed() {
191e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi        if (mBouncer.isShowing()) {
192e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi            mBouncer.hide();
193e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi            mPhoneStatusBar.showKeyguard();
1944222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi            updateStates();
195e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi            return true;
196e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi        }
197e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi        return false;
198e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi    }
199e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi
2004222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi    private void updateStates() {
201e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi        int vis = mContainer.getSystemUiVisibility();
202a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi        boolean bouncerDismissable = mBouncer.isShowing() && !mBouncer.needsFullscreenBouncer();
203a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi        if (bouncerDismissable || !mShowing) {
204e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi            mContainer.setSystemUiVisibility(vis & ~View.STATUS_BAR_DISABLE_BACK);
205e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi        } else {
206e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi            mContainer.setSystemUiVisibility(vis | View.STATUS_BAR_DISABLE_BACK);
207e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi        }
208a6310293c5a861cdb54f2c894e90a8d9da87f8d7Jorim Jaggi        if (!(mShowing && !mOccluded) || mBouncer.isShowing()) {
209a6310293c5a861cdb54f2c894e90a8d9da87f8d7Jorim Jaggi            mPhoneStatusBar.getNavigationBarView().setVisibility(View.VISIBLE);
210a6310293c5a861cdb54f2c894e90a8d9da87f8d7Jorim Jaggi        } else {
211a6310293c5a861cdb54f2c894e90a8d9da87f8d7Jorim Jaggi            mPhoneStatusBar.getNavigationBarView().setVisibility(View.GONE);
212a6310293c5a861cdb54f2c894e90a8d9da87f8d7Jorim Jaggi        }
2134222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi        mPhoneStatusBar.setBouncerShowing(mBouncer.isShowing());
214e5c7a894635d72514d6f1e952d0f18ba6035e86dJorim Jaggi    }
2158c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi
2168c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi    public boolean onMenuPressed() {
2178c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi        return mBouncer.onMenuPressed();
2188c8bcc160aba9a5e93c8df2a99a39a856fafffabJorim Jaggi    }
2195cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi}
220