StatusBarWindowManager.java revision a59ecc3401de0c4bf1e13665158f54669f22d06c
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
133b8f09cf5533d458868a335ce334e4880b2b0788dSelim Cinek                || state.keyguardFadingAway || state.bouncerShowing || state.headsUpShowing;
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);
175a59ecc3401de0c4bf1e13665158f54669f22d06cSelim Cinek        applyModalFlag(state);
17695e89caeb252a54807c76d60c7440766829e418cJorim Jaggi        if (mLp.copyFrom(mLpChanged) != 0) {
17795e89caeb252a54807c76d60c7440766829e418cJorim Jaggi            mWindowManager.updateViewLayout(mStatusBarView, mLp);
17895e89caeb252a54807c76d60c7440766829e418cJorim Jaggi        }
1795cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1805cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
181a59ecc3401de0c4bf1e13665158f54669f22d06cSelim Cinek    private void applyModalFlag(State state) {
182a59ecc3401de0c4bf1e13665158f54669f22d06cSelim Cinek        if (state.headsUpShowing) {
183a59ecc3401de0c4bf1e13665158f54669f22d06cSelim Cinek            mLpChanged.flags |= WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
184a59ecc3401de0c4bf1e13665158f54669f22d06cSelim Cinek        } else {
185a59ecc3401de0c4bf1e13665158f54669f22d06cSelim Cinek            mLpChanged.flags &= ~WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
186a59ecc3401de0c4bf1e13665158f54669f22d06cSelim Cinek        }
187a59ecc3401de0c4bf1e13665158f54669f22d06cSelim Cinek    }
188a59ecc3401de0c4bf1e13665158f54669f22d06cSelim Cinek
1895cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setKeyguardShowing(boolean showing) {
1905cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.keyguardShowing = showing;
1915cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
1925cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1935cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1945cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setKeyguardOccluded(boolean occluded) {
1955cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.keyguardOccluded = occluded;
1965cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
1975cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1985cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1995cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setKeyguardNeedsInput(boolean needsInput) {
2005cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.keyguardNeedsInput = needsInput;
2015cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
2025cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
2035cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
2045cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setStatusBarExpanded(boolean expanded) {
2055cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.statusBarExpanded = expanded;
2065cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.statusBarFocusable = expanded;
2075cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
2085cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
2095cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
2105cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setStatusBarFocusable(boolean focusable) {
2115cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.statusBarFocusable = focusable;
2125cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
2135cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
2145cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
2155fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi    public void setBouncerShowing(boolean showing) {
2165fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi        mCurrentState.bouncerShowing = showing;
2175fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi        apply(mCurrentState);
2185fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi    }
2195fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi
220e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi    public void setKeyguardFadingAway(boolean keyguardFadingAway) {
221e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi        mCurrentState.keyguardFadingAway = keyguardFadingAway;
222e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi        apply(mCurrentState);
223e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi    }
224e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi
225b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi    public void setQsExpanded(boolean expanded) {
226b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi        mCurrentState.qsExpanded = expanded;
227b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi        apply(mCurrentState);
228b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi    }
229b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi
230b8f09cf5533d458868a335ce334e4880b2b0788dSelim Cinek    public void setHeadsUpShowing(boolean showing) {
231b8f09cf5533d458868a335ce334e4880b2b0788dSelim Cinek        mCurrentState.headsUpShowing = showing;
232b8f09cf5533d458868a335ce334e4880b2b0788dSelim Cinek        apply(mCurrentState);
233b8f09cf5533d458868a335ce334e4880b2b0788dSelim Cinek    }
234b8f09cf5533d458868a335ce334e4880b2b0788dSelim Cinek
235ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi    /**
236ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi     * @param state The {@link StatusBarState} of the status bar.
237ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi     */
238ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi    public void setStatusBarState(int state) {
239ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi        mCurrentState.statusBarState = state;
240ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi        apply(mCurrentState);
241ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi    }
242ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi
2435cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private static class State {
2445cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        boolean keyguardShowing;
2455cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        boolean keyguardOccluded;
2465cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        boolean keyguardNeedsInput;
2475cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        boolean statusBarExpanded;
2485cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        boolean statusBarFocusable;
2495fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi        boolean bouncerShowing;
250e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi        boolean keyguardFadingAway;
251b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi        boolean qsExpanded;
252b8f09cf5533d458868a335ce334e4880b2b0788dSelim Cinek        boolean headsUpShowing;
2535cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
254ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi        /**
255ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi         * The {@link BaseStatusBar} state from the status bar.
256ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi         */
257ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi        int statusBarState;
258ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi
2595cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        private boolean isKeyguardShowingAndNotOccluded() {
2605cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            return keyguardShowing && !keyguardOccluded;
2615cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        }
2625cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
2635cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi}
264