StatusBarWindowManager.java revision ea56251d92050e9a672d1f66d0d4621e4dd4136e
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.content.pm.ActivityInfo;
215cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.content.res.Resources;
225cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.graphics.PixelFormat;
235cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.os.SystemProperties;
245cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.view.Gravity;
255cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.view.View;
265cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.view.ViewGroup;
275cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.view.WindowManager;
285cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
295cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport com.android.keyguard.R;
30ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggiimport com.android.systemui.statusbar.BaseStatusBar;
31ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggiimport com.android.systemui.statusbar.StatusBarState;
325cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
335cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi/**
345cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Encapsulates all logic for the status bar window state management.
355cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */
365cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggipublic class StatusBarWindowManager {
375cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
385cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private final Context mContext;
395cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private final WindowManager mWindowManager;
405cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private View mStatusBarView;
415cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private WindowManager.LayoutParams mLp;
425cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private int mBarHeight;
435cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private final boolean mKeyguardScreenRotation;
445cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
455cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private final State mCurrentState = new State();
465cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
475cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public StatusBarWindowManager(Context context) {
485cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mContext = context;
495cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
505cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mKeyguardScreenRotation = shouldEnableKeyguardScreenRotation();
515cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
525cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
535cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private boolean shouldEnableKeyguardScreenRotation() {
545cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        Resources res = mContext.getResources();
555cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        return SystemProperties.getBoolean("lockscreen.rot_override", false)
565cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                || res.getBoolean(R.bool.config_enableLockScreenRotation);
575cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
585cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
595cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    /**
605cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     * Adds the status bar view to the window manager.
615cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     *
625cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     * @param statusBarView The view to add.
635cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     * @param barHeight The height of the status bar in collapsed state.
645cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     */
655cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void add(View statusBarView, int barHeight) {
665cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
675cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        // Now that the status bar window encompasses the sliding panel and its
685cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        // translucent backdrop, the entire thing is made TRANSLUCENT and is
695cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        // hardware-accelerated.
705cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mLp = new WindowManager.LayoutParams(
715cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                ViewGroup.LayoutParams.MATCH_PARENT,
725cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                barHeight,
735cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                WindowManager.LayoutParams.TYPE_STATUS_BAR,
745cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
755cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                        | WindowManager.LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING
765cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                        | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH
775cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                        | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
78ea56251d92050e9a672d1f66d0d4621e4dd4136eAdrian Roos                        | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS,
795cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                PixelFormat.TRANSLUCENT);
805cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mLp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
8176aaef537a83486134a8118331b70854fbdecc3eJorim Jaggi        mLp.gravity = Gravity.TOP;
825cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mLp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
835cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mLp.setTitle("StatusBar");
845cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mLp.packageName = mContext.getPackageName();
855cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mStatusBarView = statusBarView;
865cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mBarHeight = barHeight;
875cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mWindowManager.addView(mStatusBarView, mLp);
885cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
895cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
905cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private void applyKeyguardFlags(State state) {
915cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        if (state.keyguardShowing) {
925cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mLp.flags |= WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
935cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mLp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
945cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        } else {
955cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mLp.flags &= ~WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
965cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mLp.privateFlags &= ~WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
975cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        }
985cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
995cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1005cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private void adjustScreenOrientation(State state) {
101ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49Jorim Jaggi        if (state.isKeyguardShowingAndNotOccluded()) {
102ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49Jorim Jaggi            if (mKeyguardScreenRotation) {
103ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49Jorim Jaggi                mLp.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_USER;
104ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49Jorim Jaggi            } else {
105ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49Jorim Jaggi                mLp.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
106ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49Jorim Jaggi            }
1075cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        } else {
108ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49Jorim Jaggi            mLp.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
1095cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        }
1105cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1115cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1125cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private void applyFocusableFlag(State state) {
1135fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi        if (state.isKeyguardShowingAndNotOccluded() && state.keyguardNeedsInput
1145fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi                && state.bouncerShowing) {
1155cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mLp.flags &= ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
1165cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mLp.flags &= ~WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
1175cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        } else if (state.isKeyguardShowingAndNotOccluded() || state.statusBarFocusable) {
1185cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mLp.flags &= ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
1195cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mLp.flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
1205cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        } else {
1215cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mLp.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
1225cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mLp.flags &= ~WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
1235cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        }
1245cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1255cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1265cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private void applyHeight(State state) {
1275cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        boolean expanded = state.isKeyguardShowingAndNotOccluded() || state.statusBarExpanded;
1285cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        if (expanded) {
1295cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mLp.height = ViewGroup.LayoutParams.MATCH_PARENT;
1305cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        } else {
1315cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mLp.height = mBarHeight;
1325cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        }
1335cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1345cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
135a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi    private void applyFitsSystemWindows(State state) {
136a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi        mStatusBarView.setFitsSystemWindows(!state.isKeyguardShowingAndNotOccluded());
137a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi    }
138a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi
1395cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private void applyUserActivityTimeout(State state) {
140ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi        if (state.isKeyguardShowingAndNotOccluded()
141ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi                && state.statusBarState == StatusBarState.KEYGUARD) {
1425cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mLp.userActivityTimeout = state.keyguardUserActivityTimeout;
1435cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        } else {
1445cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mLp.userActivityTimeout = -1;
1455cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        }
1465cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1475cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
14803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    private void applyInputFeatures(State state) {
1494222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi        if (state.isKeyguardShowingAndNotOccluded()
1504222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi                && state.statusBarState == StatusBarState.KEYGUARD) {
15103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi            mLp.inputFeatures |= WindowManager.LayoutParams.INPUT_FEATURE_DISABLE_USER_ACTIVITY;
15203c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        } else {
15303c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi            mLp.inputFeatures &= ~WindowManager.LayoutParams.INPUT_FEATURE_DISABLE_USER_ACTIVITY;
15403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        }
15503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    }
15603c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi
1575cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private void apply(State state) {
1585cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        applyKeyguardFlags(state);
1595cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        applyFocusableFlag(state);
1605cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        adjustScreenOrientation(state);
1615cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        applyHeight(state);
1625cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        applyUserActivityTimeout(state);
16303c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        applyInputFeatures(state);
164a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi        applyFitsSystemWindows(state);
1655cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mWindowManager.updateViewLayout(mStatusBarView, mLp);
1665cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1675cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1685cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setKeyguardShowing(boolean showing) {
1695cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.keyguardShowing = showing;
1705cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
1715cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1725cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1735cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setKeyguardOccluded(boolean occluded) {
1745cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.keyguardOccluded = occluded;
1755cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
1765cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1775cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1785cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setKeyguardNeedsInput(boolean needsInput) {
1795cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.keyguardNeedsInput = needsInput;
1805cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
1815cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1825cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1835cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setStatusBarExpanded(boolean expanded) {
1845cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.statusBarExpanded = expanded;
1855cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.statusBarFocusable = expanded;
1865cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
1875cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1885cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1895cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setStatusBarFocusable(boolean focusable) {
1905cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.statusBarFocusable = focusable;
1915cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
1925cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1935cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1945cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setKeyguardUserActivityTimeout(long timeout) {
1955cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.keyguardUserActivityTimeout = timeout;
1965cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
1975cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1985cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1995fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi    public void setBouncerShowing(boolean showing) {
2005fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi        mCurrentState.bouncerShowing = showing;
2015fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi        apply(mCurrentState);
2025fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi    }
2035fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi
204ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi    /**
205ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi     * @param state The {@link StatusBarState} of the status bar.
206ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi     */
207ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi    public void setStatusBarState(int state) {
208ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi        mCurrentState.statusBarState = state;
209ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi        apply(mCurrentState);
210ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi    }
211ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi
2125cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private static class State {
2135cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        boolean keyguardShowing;
2145cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        boolean keyguardOccluded;
2155cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        boolean keyguardNeedsInput;
2165cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        boolean statusBarExpanded;
2175cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        boolean statusBarFocusable;
2185cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        long keyguardUserActivityTimeout;
2195fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi        boolean bouncerShowing;
2205cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
221ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi        /**
222ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi         * The {@link BaseStatusBar} state from the status bar.
223ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi         */
224ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi        int statusBarState;
225ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi
2265cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        private boolean isKeyguardShowingAndNotOccluded() {
2275cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            return keyguardShowing && !keyguardOccluded;
2285cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        }
2295cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
2305cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi}
231