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