StatusBarWindowManager.java revision 497ab023f9ed121664a210c380b43746b13e9038
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;
306b88cdfba770efc5722338c240ccaada13d7b0d4Jorim Jaggiimport com.android.systemui.keyguard.KeyguardViewMediator;
31ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggiimport com.android.systemui.statusbar.BaseStatusBar;
32ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggiimport com.android.systemui.statusbar.StatusBarState;
335cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
345cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi/**
355cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Encapsulates all logic for the status bar window state management.
365cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */
375cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggipublic class StatusBarWindowManager {
385cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
395cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private final Context mContext;
405cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private final WindowManager mWindowManager;
415cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private View mStatusBarView;
425cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private WindowManager.LayoutParams mLp;
4395e89caeb252a54807c76d60c7440766829e418cJorim Jaggi    private WindowManager.LayoutParams mLpChanged;
445cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private int mBarHeight;
455cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private final boolean mKeyguardScreenRotation;
465cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
475cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private final State mCurrentState = new State();
485cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
495cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public StatusBarWindowManager(Context context) {
505cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mContext = context;
515cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
525cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mKeyguardScreenRotation = shouldEnableKeyguardScreenRotation();
535cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
545cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
555cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private boolean shouldEnableKeyguardScreenRotation() {
565cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        Resources res = mContext.getResources();
575cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        return SystemProperties.getBoolean("lockscreen.rot_override", false)
585cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                || res.getBoolean(R.bool.config_enableLockScreenRotation);
595cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
605cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
615cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    /**
625cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     * Adds the status bar view to the window manager.
635cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     *
645cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     * @param statusBarView The view to add.
655cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     * @param barHeight The height of the status bar in collapsed state.
665cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     */
675cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void add(View statusBarView, int barHeight) {
685cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
695cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        // Now that the status bar window encompasses the sliding panel and its
705cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        // translucent backdrop, the entire thing is made TRANSLUCENT and is
715cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        // hardware-accelerated.
725cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mLp = new WindowManager.LayoutParams(
735cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                ViewGroup.LayoutParams.MATCH_PARENT,
745cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                barHeight,
755cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                WindowManager.LayoutParams.TYPE_STATUS_BAR,
765cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
775cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                        | WindowManager.LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING
785cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                        | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH
795cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                        | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
80ea56251d92050e9a672d1f66d0d4621e4dd4136eAdrian Roos                        | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS,
815cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                PixelFormat.TRANSLUCENT);
825cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mLp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
8376aaef537a83486134a8118331b70854fbdecc3eJorim Jaggi        mLp.gravity = Gravity.TOP;
845cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mLp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
855cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mLp.setTitle("StatusBar");
865cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mLp.packageName = mContext.getPackageName();
875cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mStatusBarView = statusBarView;
885cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mBarHeight = barHeight;
895cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mWindowManager.addView(mStatusBarView, mLp);
9095e89caeb252a54807c76d60c7440766829e418cJorim Jaggi        mLpChanged = new WindowManager.LayoutParams();
9195e89caeb252a54807c76d60c7440766829e418cJorim Jaggi        mLpChanged.copyFrom(mLp);
925cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
935cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
945cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private void applyKeyguardFlags(State state) {
955cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        if (state.keyguardShowing) {
9695e89caeb252a54807c76d60c7440766829e418cJorim Jaggi            mLpChanged.flags |= WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
9795e89caeb252a54807c76d60c7440766829e418cJorim Jaggi            mLpChanged.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
985cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        } else {
9995e89caeb252a54807c76d60c7440766829e418cJorim Jaggi            mLpChanged.flags &= ~WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
10095e89caeb252a54807c76d60c7440766829e418cJorim Jaggi            mLpChanged.privateFlags &= ~WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
1015cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        }
1025cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1035cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1045cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private void adjustScreenOrientation(State state) {
105ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49Jorim Jaggi        if (state.isKeyguardShowingAndNotOccluded()) {
106ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49Jorim Jaggi            if (mKeyguardScreenRotation) {
10795e89caeb252a54807c76d60c7440766829e418cJorim Jaggi                mLpChanged.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_USER;
108ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49Jorim Jaggi            } else {
10995e89caeb252a54807c76d60c7440766829e418cJorim Jaggi                mLpChanged.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
110ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49Jorim Jaggi            }
1115cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        } else {
11295e89caeb252a54807c76d60c7440766829e418cJorim Jaggi            mLpChanged.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
1135cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        }
1145cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1155cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1165cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private void applyFocusableFlag(State state) {
1175fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi        if (state.isKeyguardShowingAndNotOccluded() && state.keyguardNeedsInput
118497ab023f9ed121664a210c380b43746b13e9038Adrian Roos                && state.bouncerShowing
119497ab023f9ed121664a210c380b43746b13e9038Adrian Roos                || BaseStatusBar.ENABLE_REMOTE_INPUT && state.statusBarExpanded) {
12095e89caeb252a54807c76d60c7440766829e418cJorim Jaggi            mLpChanged.flags &= ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
12195e89caeb252a54807c76d60c7440766829e418cJorim Jaggi            mLpChanged.flags &= ~WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
1225cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        } else if (state.isKeyguardShowingAndNotOccluded() || state.statusBarFocusable) {
12395e89caeb252a54807c76d60c7440766829e418cJorim Jaggi            mLpChanged.flags &= ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
12495e89caeb252a54807c76d60c7440766829e418cJorim Jaggi            mLpChanged.flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
1255cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        } else {
12695e89caeb252a54807c76d60c7440766829e418cJorim Jaggi            mLpChanged.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
12795e89caeb252a54807c76d60c7440766829e418cJorim Jaggi            mLpChanged.flags &= ~WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
1285cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        }
1295cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1305cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1315cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private void applyHeight(State state) {
132e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi        boolean expanded = state.isKeyguardShowingAndNotOccluded() || state.statusBarExpanded
1330002a45034b1103ffc5ecf4d5a14b7d1ba225005Adrian Roos                || state.keyguardFadingAway || state.bouncerShowing;
1345cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        if (expanded) {
13595e89caeb252a54807c76d60c7440766829e418cJorim Jaggi            mLpChanged.height = ViewGroup.LayoutParams.MATCH_PARENT;
1365cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        } else {
13795e89caeb252a54807c76d60c7440766829e418cJorim Jaggi            mLpChanged.height = mBarHeight;
1385cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        }
1395cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1405cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
141a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi    private void applyFitsSystemWindows(State state) {
142a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi        mStatusBarView.setFitsSystemWindows(!state.isKeyguardShowingAndNotOccluded());
143a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi    }
144a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi
1455cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private void applyUserActivityTimeout(State state) {
146ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi        if (state.isKeyguardShowingAndNotOccluded()
147b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi                && state.statusBarState == StatusBarState.KEYGUARD
148b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi                && !state.qsExpanded) {
1496b88cdfba770efc5722338c240ccaada13d7b0d4Jorim Jaggi            mLpChanged.userActivityTimeout = KeyguardViewMediator.AWAKE_INTERVAL_DEFAULT_MS;
1505cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        } else {
15195e89caeb252a54807c76d60c7440766829e418cJorim Jaggi            mLpChanged.userActivityTimeout = -1;
1525cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        }
1535cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1545cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
15503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    private void applyInputFeatures(State state) {
1564222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi        if (state.isKeyguardShowingAndNotOccluded()
157b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi                && state.statusBarState == StatusBarState.KEYGUARD
158b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi                && !state.qsExpanded) {
15995e89caeb252a54807c76d60c7440766829e418cJorim Jaggi            mLpChanged.inputFeatures |=
16095e89caeb252a54807c76d60c7440766829e418cJorim Jaggi                    WindowManager.LayoutParams.INPUT_FEATURE_DISABLE_USER_ACTIVITY;
16103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        } else {
16295e89caeb252a54807c76d60c7440766829e418cJorim Jaggi            mLpChanged.inputFeatures &=
16395e89caeb252a54807c76d60c7440766829e418cJorim Jaggi                    ~WindowManager.LayoutParams.INPUT_FEATURE_DISABLE_USER_ACTIVITY;
16403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        }
16503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    }
16603c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi
1675cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private void apply(State state) {
1685cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        applyKeyguardFlags(state);
1695cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        applyFocusableFlag(state);
1705cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        adjustScreenOrientation(state);
1715cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        applyHeight(state);
1725cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        applyUserActivityTimeout(state);
17303c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        applyInputFeatures(state);
174a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi        applyFitsSystemWindows(state);
17595e89caeb252a54807c76d60c7440766829e418cJorim Jaggi        if (mLp.copyFrom(mLpChanged) != 0) {
17695e89caeb252a54807c76d60c7440766829e418cJorim Jaggi            mWindowManager.updateViewLayout(mStatusBarView, mLp);
17795e89caeb252a54807c76d60c7440766829e418cJorim Jaggi        }
1785cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1795cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1805cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setKeyguardShowing(boolean showing) {
1815cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.keyguardShowing = showing;
1825cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
1835cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1845cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1855cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setKeyguardOccluded(boolean occluded) {
1865cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.keyguardOccluded = occluded;
1875cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
1885cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1895cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1905cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setKeyguardNeedsInput(boolean needsInput) {
1915cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.keyguardNeedsInput = needsInput;
1925cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
1935cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1945cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1955cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setStatusBarExpanded(boolean expanded) {
1965cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.statusBarExpanded = expanded;
1975cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.statusBarFocusable = expanded;
1985cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
1995cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
2005cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
2015cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setStatusBarFocusable(boolean focusable) {
2025cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.statusBarFocusable = focusable;
2035cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
2045cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
2055cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
2065fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi    public void setBouncerShowing(boolean showing) {
2075fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi        mCurrentState.bouncerShowing = showing;
2085fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi        apply(mCurrentState);
2095fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi    }
2105fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi
211e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi    public void setKeyguardFadingAway(boolean keyguardFadingAway) {
212e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi        mCurrentState.keyguardFadingAway = keyguardFadingAway;
213e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi        apply(mCurrentState);
214e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi    }
215e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi
216b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi    public void setQsExpanded(boolean expanded) {
217b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi        mCurrentState.qsExpanded = expanded;
218b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi        apply(mCurrentState);
219b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi    }
220b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi
221ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi    /**
222ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi     * @param state The {@link StatusBarState} of the status bar.
223ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi     */
224ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi    public void setStatusBarState(int state) {
225ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi        mCurrentState.statusBarState = state;
226ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi        apply(mCurrentState);
227ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi    }
228ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi
2295cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private static class State {
2305cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        boolean keyguardShowing;
2315cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        boolean keyguardOccluded;
2325cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        boolean keyguardNeedsInput;
2335cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        boolean statusBarExpanded;
2345cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        boolean statusBarFocusable;
2355fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi        boolean bouncerShowing;
236e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi        boolean keyguardFadingAway;
237b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi        boolean qsExpanded;
2385cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
239ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi        /**
240ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi         * The {@link BaseStatusBar} state from the status bar.
241ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi         */
242ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi        int statusBarState;
243ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi
2445cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        private boolean isKeyguardShowingAndNotOccluded() {
2455cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            return keyguardShowing && !keyguardOccluded;
2465cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        }
2475cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
2485cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi}
249