StatusBarWindowManager.java revision ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49
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.app.ActionBar;
205cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.content.Context;
215cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.content.pm.ActivityInfo;
225cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.content.res.Resources;
235cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.graphics.PixelFormat;
245cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.os.SystemProperties;
255cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.view.Gravity;
265cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.view.View;
275cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.view.ViewGroup;
285cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.view.WindowManager;
295cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
305cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport com.android.keyguard.R;
315cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
325cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi/**
335cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Encapsulates all logic for the status bar window state management.
345cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */
355cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggipublic class StatusBarWindowManager {
365cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
375cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private final Context mContext;
385cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private final WindowManager mWindowManager;
395cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private View mStatusBarView;
405cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private WindowManager.LayoutParams mLp;
415cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private int mBarHeight;
425cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private final boolean mKeyguardScreenRotation;
435cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
445cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private final State mCurrentState = new State();
455cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
465cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public StatusBarWindowManager(Context context) {
475cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mContext = context;
485cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
495cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mKeyguardScreenRotation = shouldEnableKeyguardScreenRotation();
505cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
515cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
525cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private boolean shouldEnableKeyguardScreenRotation() {
535cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        Resources res = mContext.getResources();
545cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        return SystemProperties.getBoolean("lockscreen.rot_override", false)
555cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                || res.getBoolean(R.bool.config_enableLockScreenRotation);
565cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
575cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
585cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    /**
595cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     * Adds the status bar view to the window manager.
605cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     *
615cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     * @param statusBarView The view to add.
625cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     * @param barHeight The height of the status bar in collapsed state.
635cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi     */
645cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void add(View statusBarView, int barHeight) {
655cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
665cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        // Now that the status bar window encompasses the sliding panel and its
675cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        // translucent backdrop, the entire thing is made TRANSLUCENT and is
685cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        // hardware-accelerated.
695cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mLp = new WindowManager.LayoutParams(
705cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                ViewGroup.LayoutParams.MATCH_PARENT,
715cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                barHeight,
725cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                WindowManager.LayoutParams.TYPE_STATUS_BAR,
735cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
745cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                        | WindowManager.LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING
755cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                        | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH
765cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                        | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
775cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                        | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION
785cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                        | WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
795cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi                PixelFormat.TRANSLUCENT);
805cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
815cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mLp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
825cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mLp.gravity = Gravity.TOP | Gravity.FILL_HORIZONTAL;
835cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mLp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
845cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mLp.setTitle("StatusBar");
855cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mLp.packageName = mContext.getPackageName();
865cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mStatusBarView = statusBarView;
875cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mBarHeight = barHeight;
885cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mWindowManager.addView(mStatusBarView, mLp);
895cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
905cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
915cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private void applyKeyguardFlags(State state) {
925cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        if (state.keyguardShowing) {
935cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mLp.flags |= WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
945cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mLp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
955cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        } else {
965cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mLp.flags &= ~WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
975cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mLp.privateFlags &= ~WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
985cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        }
995cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1005cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1015cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private void adjustScreenOrientation(State state) {
102ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49Jorim Jaggi        if (state.isKeyguardShowingAndNotOccluded()) {
103ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49Jorim Jaggi            if (mKeyguardScreenRotation) {
104ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49Jorim Jaggi                mLp.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_USER;
105ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49Jorim Jaggi            } else {
106ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49Jorim Jaggi                mLp.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
107ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49Jorim Jaggi            }
1085cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        } else {
109ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49Jorim Jaggi            mLp.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
1105cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        }
1115cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1125cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1135cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private void applyFocusableFlag(State state) {
1145cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        if (state.isKeyguardShowingAndNotOccluded() && state.keyguardNeedsInput) {
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) {
1405cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        if (state.isKeyguardShowingAndNotOccluded()) {
1415cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mLp.userActivityTimeout = state.keyguardUserActivityTimeout;
1425cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        } else {
1435cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mLp.userActivityTimeout = -1;
1445cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        }
1455cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1465cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
14703c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    private void applyInputFeatures(State state) {
14803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        if (state.isKeyguardShowingAndNotOccluded()) {
14903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi            mLp.inputFeatures |= WindowManager.LayoutParams.INPUT_FEATURE_DISABLE_USER_ACTIVITY;
15003c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        } else {
15103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi            mLp.inputFeatures &= ~WindowManager.LayoutParams.INPUT_FEATURE_DISABLE_USER_ACTIVITY;
15203c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        }
15303c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    }
15403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi
1555cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private void apply(State state) {
1565cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        applyKeyguardFlags(state);
1575cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        applyFocusableFlag(state);
1585cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        adjustScreenOrientation(state);
1595cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        applyHeight(state);
1605cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        applyUserActivityTimeout(state);
16103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        applyInputFeatures(state);
162a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi        applyFitsSystemWindows(state);
1635cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mWindowManager.updateViewLayout(mStatusBarView, mLp);
1645cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1655cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1665cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setKeyguardShowing(boolean showing) {
1675cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.keyguardShowing = showing;
1685cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
1695cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1705cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1715cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setKeyguardOccluded(boolean occluded) {
1725cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.keyguardOccluded = occluded;
1735cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
1745cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1755cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1765cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setKeyguardNeedsInput(boolean needsInput) {
1775cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.keyguardNeedsInput = needsInput;
1785cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
1795cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1805cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1815cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setStatusBarExpanded(boolean expanded) {
1825cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.statusBarExpanded = expanded;
1835cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.statusBarFocusable = expanded;
1845cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
1855cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1865cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1875cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setStatusBarFocusable(boolean focusable) {
1885cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.statusBarFocusable = focusable;
1895cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
1905cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1915cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1925cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    public void setKeyguardUserActivityTimeout(long timeout) {
1935cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        mCurrentState.keyguardUserActivityTimeout = timeout;
1945cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        apply(mCurrentState);
1955cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
1965cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
1975cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private static class State {
1985cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        boolean keyguardShowing;
1995cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        boolean keyguardOccluded;
2005cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        boolean keyguardNeedsInput;
2015cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        boolean statusBarExpanded;
2025cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        boolean statusBarFocusable;
2035cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        long keyguardUserActivityTimeout;
2045cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi
2055cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        private boolean isKeyguardShowingAndNotOccluded() {
2065cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            return keyguardShowing && !keyguardOccluded;
2075cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        }
2085cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    }
2095cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi}
210