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 19dc589ac82b5fe2063f4cfd94c8ae26d43d5420a0Sudheer Shankaimport android.app.ActivityManager; 20f6782ee1c87ba1f39f595d1facb8b13d851988b9Jorim Jaggiimport android.app.IActivityManager; 215cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.content.Context; 225cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.content.pm.ActivityInfo; 235cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.content.res.Resources; 245cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.graphics.PixelFormat; 256ce0fb8ddbdc726d55c81a4bf797f028e441e448Wale Ogunwaleimport android.os.Binder; 26f6782ee1c87ba1f39f595d1facb8b13d851988b9Jorim Jaggiimport android.os.RemoteException; 275cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.os.SystemProperties; 28f6782ee1c87ba1f39f595d1facb8b13d851988b9Jorim Jaggiimport android.util.Log; 295cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.view.Gravity; 305cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.view.View; 315cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.view.ViewGroup; 325cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport android.view.WindowManager; 33f12ec0fb6419920d3aa606141a91343cc9421275Jorim Jaggiimport android.view.WindowManager.LayoutParams; 345cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 355cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggiimport com.android.keyguard.R; 36421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monkimport com.android.systemui.Dumpable; 376b88cdfba770efc5722338c240ccaada13d7b0d4Jorim Jaggiimport com.android.systemui.keyguard.KeyguardViewMediator; 38d28ccd7cab8e1a187dfd6c5733efe7cdfb652202Adrian Roosimport com.android.systemui.statusbar.RemoteInputController; 39ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggiimport com.android.systemui.statusbar.StatusBarState; 405cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 417025f26a99483d333cd8e4df0b919c3b9e9334b3Selim Cinekimport java.io.FileDescriptor; 427025f26a99483d333cd8e4df0b919c3b9e9334b3Selim Cinekimport java.io.PrintWriter; 436a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinekimport java.lang.reflect.Field; 446a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek 455cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi/** 465cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Encapsulates all logic for the status bar window state management. 475cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */ 48421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monkpublic class StatusBarWindowManager implements RemoteInputController.Callback, Dumpable { 495cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 50f6782ee1c87ba1f39f595d1facb8b13d851988b9Jorim Jaggi private static final String TAG = "StatusBarWindowManager"; 51f6782ee1c87ba1f39f595d1facb8b13d851988b9Jorim Jaggi 525cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private final Context mContext; 535cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private final WindowManager mWindowManager; 54f6782ee1c87ba1f39f595d1facb8b13d851988b9Jorim Jaggi private final IActivityManager mActivityManager; 555cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private View mStatusBarView; 565cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private WindowManager.LayoutParams mLp; 5795e89caeb252a54807c76d60c7440766829e418cJorim Jaggi private WindowManager.LayoutParams mLpChanged; 58f6782ee1c87ba1f39f595d1facb8b13d851988b9Jorim Jaggi private boolean mHasTopUi; 59f6782ee1c87ba1f39f595d1facb8b13d851988b9Jorim Jaggi private boolean mHasTopUiChanged; 605cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private int mBarHeight; 615cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private final boolean mKeyguardScreenRotation; 623e23eb59d09faca2e40e308a191d8499ffdb6ab3Adrian Roos private float mScreenBrightnessDoze; 635cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private final State mCurrentState = new State(); 64421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk private OtherwisedCollapsedListener mListener; 655cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 665cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public StatusBarWindowManager(Context context) { 675cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mContext = context; 685cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 69dc589ac82b5fe2063f4cfd94c8ae26d43d5420a0Sudheer Shanka mActivityManager = ActivityManager.getService(); 705cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mKeyguardScreenRotation = shouldEnableKeyguardScreenRotation(); 7183eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi mScreenBrightnessDoze = mContext.getResources().getInteger( 7283eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi com.android.internal.R.integer.config_screenBrightnessDoze) / 255f; 735cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 745cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 755cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private boolean shouldEnableKeyguardScreenRotation() { 765cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi Resources res = mContext.getResources(); 775cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi return SystemProperties.getBoolean("lockscreen.rot_override", false) 785cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi || res.getBoolean(R.bool.config_enableLockScreenRotation); 795cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 805cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 815cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi /** 825cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * Adds the status bar view to the window manager. 835cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * 845cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * @param statusBarView The view to add. 855cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi * @param barHeight The height of the status bar in collapsed state. 865cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi */ 875cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void add(View statusBarView, int barHeight) { 885cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 895cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi // Now that the status bar window encompasses the sliding panel and its 905cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi // translucent backdrop, the entire thing is made TRANSLUCENT and is 915cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi // hardware-accelerated. 925cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mLp = new WindowManager.LayoutParams( 935cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi ViewGroup.LayoutParams.MATCH_PARENT, 945cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi barHeight, 955cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi WindowManager.LayoutParams.TYPE_STATUS_BAR, 965cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 975cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi | WindowManager.LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING 985cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH 995cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH 100ea56251d92050e9a672d1f66d0d4621e4dd4136eAdrian Roos | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, 1015cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi PixelFormat.TRANSLUCENT); 1026ce0fb8ddbdc726d55c81a4bf797f028e441e448Wale Ogunwale mLp.token = new Binder(); 10376aaef537a83486134a8118331b70854fbdecc3eJorim Jaggi mLp.gravity = Gravity.TOP; 1045cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mLp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; 1055cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mLp.setTitle("StatusBar"); 1065cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mLp.packageName = mContext.getPackageName(); 1075cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mStatusBarView = statusBarView; 1085cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mBarHeight = barHeight; 1095cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mWindowManager.addView(mStatusBarView, mLp); 11095e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mLpChanged = new WindowManager.LayoutParams(); 11195e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mLpChanged.copyFrom(mLp); 1125cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1135cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1143e23eb59d09faca2e40e308a191d8499ffdb6ab3Adrian Roos public void setDozeScreenBrightness(int value) { 1153e23eb59d09faca2e40e308a191d8499ffdb6ab3Adrian Roos mScreenBrightnessDoze = value / 255f; 1163e23eb59d09faca2e40e308a191d8499ffdb6ab3Adrian Roos } 1173e23eb59d09faca2e40e308a191d8499ffdb6ab3Adrian Roos 118987f1937a0231a2b6d09bf7c3bbb7df9de04d6b4Lucas Dupin public void setKeyguardDark(boolean dark) { 119987f1937a0231a2b6d09bf7c3bbb7df9de04d6b4Lucas Dupin int vis = mStatusBarView.getSystemUiVisibility(); 120987f1937a0231a2b6d09bf7c3bbb7df9de04d6b4Lucas Dupin if (dark) { 121987f1937a0231a2b6d09bf7c3bbb7df9de04d6b4Lucas Dupin vis = vis | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR; 122987f1937a0231a2b6d09bf7c3bbb7df9de04d6b4Lucas Dupin vis = vis | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; 123987f1937a0231a2b6d09bf7c3bbb7df9de04d6b4Lucas Dupin } else { 124987f1937a0231a2b6d09bf7c3bbb7df9de04d6b4Lucas Dupin vis = vis & ~View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR; 125987f1937a0231a2b6d09bf7c3bbb7df9de04d6b4Lucas Dupin vis = vis & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; 126987f1937a0231a2b6d09bf7c3bbb7df9de04d6b4Lucas Dupin } 127987f1937a0231a2b6d09bf7c3bbb7df9de04d6b4Lucas Dupin mStatusBarView.setSystemUiVisibility(vis); 128987f1937a0231a2b6d09bf7c3bbb7df9de04d6b4Lucas Dupin } 129987f1937a0231a2b6d09bf7c3bbb7df9de04d6b4Lucas Dupin 1305cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private void applyKeyguardFlags(State state) { 1315cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi if (state.keyguardShowing) { 13295e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mLpChanged.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD; 1335cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } else { 13495e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mLpChanged.privateFlags &= ~WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD; 1355cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 136d5c2db630fc816e2d9154a61ccbd6770bc57cff8Adrian Roos 13767cca7442bfeffc0bace506a796cfdd39e5d511cAdrian Roos if (state.keyguardShowing && !state.backdropShowing && !state.dozing) { 138d5c2db630fc816e2d9154a61ccbd6770bc57cff8Adrian Roos mLpChanged.flags |= WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; 139d5c2db630fc816e2d9154a61ccbd6770bc57cff8Adrian Roos } else { 140d5c2db630fc816e2d9154a61ccbd6770bc57cff8Adrian Roos mLpChanged.flags &= ~WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; 141d5c2db630fc816e2d9154a61ccbd6770bc57cff8Adrian Roos } 1425cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1435cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1445cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private void adjustScreenOrientation(State state) { 1458206944f26715283a412c897d638bf4cf4bd5f4dAdrian Roos if (state.isKeyguardShowingAndNotOccluded() || state.dozing) { 146ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49Jorim Jaggi if (mKeyguardScreenRotation) { 14795e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mLpChanged.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_USER; 148ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49Jorim Jaggi } else { 14995e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mLpChanged.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR; 150ca36cf7bcaa8785a13b1e1a6038d94a9dd963c49Jorim Jaggi } 1515cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } else { 15295e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mLpChanged.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; 1535cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1545cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1555cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1565cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private void applyFocusableFlag(State state) { 1574a21a7fab6c0cca2c668650969e9af50c9c5068eSelim Cinek boolean panelFocusable = state.statusBarFocusable && state.panelExpanded; 158bb336699bd7127742d43db4e2bed9c60220d0620Jorim Jaggi if (state.bouncerShowing && (state.keyguardOccluded || state.keyguardNeedsInput) 1592a6ea9c2a1b52b0386270ec73e1e6d6a9b614a34Jason Monk || StatusBar.ENABLE_REMOTE_INPUT && state.remoteInputActive) { 16095e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mLpChanged.flags &= ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; 16195e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mLpChanged.flags &= ~WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; 1624a21a7fab6c0cca2c668650969e9af50c9c5068eSelim Cinek } else if (state.isKeyguardShowingAndNotOccluded() || panelFocusable) { 16395e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mLpChanged.flags &= ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; 16495e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mLpChanged.flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; 1655cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } else { 16695e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mLpChanged.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; 16795e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mLpChanged.flags &= ~WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; 1685cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 169dc5b4535165d82e5e9c83576a47bd95cd422ca0aAdrian Roos 1705153d4ac95bc128ecf634d09b9e647cd20e70a65Adrian Roos mLpChanged.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; 1715cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1725cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1735cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private void applyHeight(State state) { 1746a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek boolean expanded = isExpanded(state); 175421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk if (state.forcePluginOpen) { 176421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk mListener.setWouldOtherwiseCollapse(expanded); 177421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk expanded = true; 178421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk } 1795cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi if (expanded) { 18095e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mLpChanged.height = ViewGroup.LayoutParams.MATCH_PARENT; 1815cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } else { 18295e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mLpChanged.height = mBarHeight; 1835cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1845cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 1855cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 1866a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek private boolean isExpanded(State state) { 1876a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek return !state.forceCollapsed && (state.isKeyguardShowingAndNotOccluded() 1886a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek || state.panelVisible || state.keyguardFadingAway || state.bouncerShowing 189a5c6322dc5ad01d05560182651d4af84d32c2fc5Adrian Roos || state.headsUpShowing || state.scrimsVisible); 1906a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek } 1916a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek 192a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi private void applyFitsSystemWindows(State state) { 193a5d6cd0981ba54b0fa775a7c6a4f7eb8f425896cAdrian Roos boolean fitsSystemWindows = !state.isKeyguardShowingAndNotOccluded(); 194a5d6cd0981ba54b0fa775a7c6a4f7eb8f425896cAdrian Roos if (mStatusBarView.getFitsSystemWindows() != fitsSystemWindows) { 195a5d6cd0981ba54b0fa775a7c6a4f7eb8f425896cAdrian Roos mStatusBarView.setFitsSystemWindows(fitsSystemWindows); 196a5d6cd0981ba54b0fa775a7c6a4f7eb8f425896cAdrian Roos mStatusBarView.requestApplyInsets(); 197a5d6cd0981ba54b0fa775a7c6a4f7eb8f425896cAdrian Roos } 198a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi } 199a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi 2005cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private void applyUserActivityTimeout(State state) { 201ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi if (state.isKeyguardShowingAndNotOccluded() 202b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi && state.statusBarState == StatusBarState.KEYGUARD 203b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi && !state.qsExpanded) { 2046b88cdfba770efc5722338c240ccaada13d7b0d4Jorim Jaggi mLpChanged.userActivityTimeout = KeyguardViewMediator.AWAKE_INTERVAL_DEFAULT_MS; 2055cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } else { 20695e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mLpChanged.userActivityTimeout = -1; 2075cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 2085cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 2095cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 21003c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi private void applyInputFeatures(State state) { 2114222d9a7fb87d73e1443ec1a2de9782b05741af6Jorim Jaggi if (state.isKeyguardShowingAndNotOccluded() 212b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi && state.statusBarState == StatusBarState.KEYGUARD 2136069c4099e21765af3508a2f7de4dad779dc0543Vadim Tryshev && !state.qsExpanded && !state.forceUserActivity) { 21495e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mLpChanged.inputFeatures |= 21595e89caeb252a54807c76d60c7440766829e418cJorim Jaggi WindowManager.LayoutParams.INPUT_FEATURE_DISABLE_USER_ACTIVITY; 21603c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi } else { 21795e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mLpChanged.inputFeatures &= 21895e89caeb252a54807c76d60c7440766829e418cJorim Jaggi ~WindowManager.LayoutParams.INPUT_FEATURE_DISABLE_USER_ACTIVITY; 21903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi } 22003c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi } 22103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi 2225cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private void apply(State state) { 2235cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi applyKeyguardFlags(state); 2244a4a2bddc48a33cbaa49a8844b9fd36e2fc5e219Selim Cinek applyForceStatusBarVisibleFlag(state); 2255cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi applyFocusableFlag(state); 2265cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi adjustScreenOrientation(state); 2275cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi applyHeight(state); 2285cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi applyUserActivityTimeout(state); 22903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi applyInputFeatures(state); 230a005f1b6853e8852c328f4fdc02fb8f9c9ae1cd6Jorim Jaggi applyFitsSystemWindows(state); 231a59ecc3401de0c4bf1e13665158f54669f22d06cSelim Cinek applyModalFlag(state); 23283eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi applyBrightness(state); 233f6782ee1c87ba1f39f595d1facb8b13d851988b9Jorim Jaggi applyHasTopUi(state); 234f12ec0fb6419920d3aa606141a91343cc9421275Jorim Jaggi applySleepToken(state); 23595e89caeb252a54807c76d60c7440766829e418cJorim Jaggi if (mLp.copyFrom(mLpChanged) != 0) { 23695e89caeb252a54807c76d60c7440766829e418cJorim Jaggi mWindowManager.updateViewLayout(mStatusBarView, mLp); 23795e89caeb252a54807c76d60c7440766829e418cJorim Jaggi } 238f6782ee1c87ba1f39f595d1facb8b13d851988b9Jorim Jaggi if (mHasTopUi != mHasTopUiChanged) { 239f6782ee1c87ba1f39f595d1facb8b13d851988b9Jorim Jaggi try { 240f6782ee1c87ba1f39f595d1facb8b13d851988b9Jorim Jaggi mActivityManager.setHasTopUi(mHasTopUiChanged); 241f6782ee1c87ba1f39f595d1facb8b13d851988b9Jorim Jaggi } catch (RemoteException e) { 242f6782ee1c87ba1f39f595d1facb8b13d851988b9Jorim Jaggi Log.e(TAG, "Failed to call setHasTopUi", e); 243f6782ee1c87ba1f39f595d1facb8b13d851988b9Jorim Jaggi } 244f6782ee1c87ba1f39f595d1facb8b13d851988b9Jorim Jaggi mHasTopUi = mHasTopUiChanged; 245f6782ee1c87ba1f39f595d1facb8b13d851988b9Jorim Jaggi } 2465cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 2475cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 2484a4a2bddc48a33cbaa49a8844b9fd36e2fc5e219Selim Cinek private void applyForceStatusBarVisibleFlag(State state) { 2494a4a2bddc48a33cbaa49a8844b9fd36e2fc5e219Selim Cinek if (state.forceStatusBarVisible) { 2504a4a2bddc48a33cbaa49a8844b9fd36e2fc5e219Selim Cinek mLpChanged.privateFlags |= WindowManager 2514a4a2bddc48a33cbaa49a8844b9fd36e2fc5e219Selim Cinek .LayoutParams.PRIVATE_FLAG_FORCE_STATUS_BAR_VISIBLE_TRANSPARENT; 2524a4a2bddc48a33cbaa49a8844b9fd36e2fc5e219Selim Cinek } else { 2534a4a2bddc48a33cbaa49a8844b9fd36e2fc5e219Selim Cinek mLpChanged.privateFlags &= ~WindowManager 2544a4a2bddc48a33cbaa49a8844b9fd36e2fc5e219Selim Cinek .LayoutParams.PRIVATE_FLAG_FORCE_STATUS_BAR_VISIBLE_TRANSPARENT; 2554a4a2bddc48a33cbaa49a8844b9fd36e2fc5e219Selim Cinek } 2564a4a2bddc48a33cbaa49a8844b9fd36e2fc5e219Selim Cinek } 2574a4a2bddc48a33cbaa49a8844b9fd36e2fc5e219Selim Cinek 258a59ecc3401de0c4bf1e13665158f54669f22d06cSelim Cinek private void applyModalFlag(State state) { 259a59ecc3401de0c4bf1e13665158f54669f22d06cSelim Cinek if (state.headsUpShowing) { 260a59ecc3401de0c4bf1e13665158f54669f22d06cSelim Cinek mLpChanged.flags |= WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; 261a59ecc3401de0c4bf1e13665158f54669f22d06cSelim Cinek } else { 262a59ecc3401de0c4bf1e13665158f54669f22d06cSelim Cinek mLpChanged.flags &= ~WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; 263a59ecc3401de0c4bf1e13665158f54669f22d06cSelim Cinek } 264a59ecc3401de0c4bf1e13665158f54669f22d06cSelim Cinek } 265a59ecc3401de0c4bf1e13665158f54669f22d06cSelim Cinek 26683eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi private void applyBrightness(State state) { 26783eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi if (state.forceDozeBrightness) { 26883eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi mLpChanged.screenBrightness = mScreenBrightnessDoze; 26983eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi } else { 27083eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi mLpChanged.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE; 27183eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi } 27283eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi } 27383eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi 274f6782ee1c87ba1f39f595d1facb8b13d851988b9Jorim Jaggi private void applyHasTopUi(State state) { 275f6782ee1c87ba1f39f595d1facb8b13d851988b9Jorim Jaggi mHasTopUiChanged = isExpanded(state); 276f6782ee1c87ba1f39f595d1facb8b13d851988b9Jorim Jaggi } 277f6782ee1c87ba1f39f595d1facb8b13d851988b9Jorim Jaggi 278f12ec0fb6419920d3aa606141a91343cc9421275Jorim Jaggi private void applySleepToken(State state) { 279f12ec0fb6419920d3aa606141a91343cc9421275Jorim Jaggi if (state.dozing) { 280f12ec0fb6419920d3aa606141a91343cc9421275Jorim Jaggi mLpChanged.privateFlags |= LayoutParams.PRIVATE_FLAG_ACQUIRES_SLEEP_TOKEN; 281f12ec0fb6419920d3aa606141a91343cc9421275Jorim Jaggi } else { 282f12ec0fb6419920d3aa606141a91343cc9421275Jorim Jaggi mLpChanged.privateFlags &= ~LayoutParams.PRIVATE_FLAG_ACQUIRES_SLEEP_TOKEN; 283f12ec0fb6419920d3aa606141a91343cc9421275Jorim Jaggi } 284f12ec0fb6419920d3aa606141a91343cc9421275Jorim Jaggi } 285f12ec0fb6419920d3aa606141a91343cc9421275Jorim Jaggi 2865cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void setKeyguardShowing(boolean showing) { 2875cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mCurrentState.keyguardShowing = showing; 2885cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi apply(mCurrentState); 2895cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 2905cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 2915cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void setKeyguardOccluded(boolean occluded) { 2925cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mCurrentState.keyguardOccluded = occluded; 2935cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi apply(mCurrentState); 2945cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 2955cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 2965cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void setKeyguardNeedsInput(boolean needsInput) { 2975cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mCurrentState.keyguardNeedsInput = needsInput; 2985cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi apply(mCurrentState); 2995cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 3005cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 3014a21a7fab6c0cca2c668650969e9af50c9c5068eSelim Cinek public void setPanelVisible(boolean visible) { 3024a21a7fab6c0cca2c668650969e9af50c9c5068eSelim Cinek mCurrentState.panelVisible = visible; 3034a21a7fab6c0cca2c668650969e9af50c9c5068eSelim Cinek mCurrentState.statusBarFocusable = visible; 3045cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi apply(mCurrentState); 3055cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 3065cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 3075cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void setStatusBarFocusable(boolean focusable) { 3085cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi mCurrentState.statusBarFocusable = focusable; 3095cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi apply(mCurrentState); 3105cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 3115cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 3125fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi public void setBouncerShowing(boolean showing) { 3135fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi mCurrentState.bouncerShowing = showing; 3145fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi apply(mCurrentState); 3155fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi } 3165fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi 317d5c2db630fc816e2d9154a61ccbd6770bc57cff8Adrian Roos public void setBackdropShowing(boolean showing) { 318d5c2db630fc816e2d9154a61ccbd6770bc57cff8Adrian Roos mCurrentState.backdropShowing = showing; 319d5c2db630fc816e2d9154a61ccbd6770bc57cff8Adrian Roos apply(mCurrentState); 320d5c2db630fc816e2d9154a61ccbd6770bc57cff8Adrian Roos } 321d5c2db630fc816e2d9154a61ccbd6770bc57cff8Adrian Roos 322e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi public void setKeyguardFadingAway(boolean keyguardFadingAway) { 323e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi mCurrentState.keyguardFadingAway = keyguardFadingAway; 324e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi apply(mCurrentState); 325e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi } 326e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi 327b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi public void setQsExpanded(boolean expanded) { 328b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi mCurrentState.qsExpanded = expanded; 329b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi apply(mCurrentState); 330b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi } 331b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi 3326069c4099e21765af3508a2f7de4dad779dc0543Vadim Tryshev public void setForceUserActivity(boolean forceUserActivity) { 3336069c4099e21765af3508a2f7de4dad779dc0543Vadim Tryshev mCurrentState.forceUserActivity = forceUserActivity; 3346069c4099e21765af3508a2f7de4dad779dc0543Vadim Tryshev apply(mCurrentState); 3356069c4099e21765af3508a2f7de4dad779dc0543Vadim Tryshev } 3366069c4099e21765af3508a2f7de4dad779dc0543Vadim Tryshev 337a5c6322dc5ad01d05560182651d4af84d32c2fc5Adrian Roos public void setScrimsVisible(boolean scrimsVisible) { 338a5c6322dc5ad01d05560182651d4af84d32c2fc5Adrian Roos mCurrentState.scrimsVisible = scrimsVisible; 339a5c6322dc5ad01d05560182651d4af84d32c2fc5Adrian Roos apply(mCurrentState); 340a5c6322dc5ad01d05560182651d4af84d32c2fc5Adrian Roos } 341a5c6322dc5ad01d05560182651d4af84d32c2fc5Adrian Roos 342b8f09cf5533d458868a335ce334e4880b2b0788dSelim Cinek public void setHeadsUpShowing(boolean showing) { 343b8f09cf5533d458868a335ce334e4880b2b0788dSelim Cinek mCurrentState.headsUpShowing = showing; 344b8f09cf5533d458868a335ce334e4880b2b0788dSelim Cinek apply(mCurrentState); 345b8f09cf5533d458868a335ce334e4880b2b0788dSelim Cinek } 346b8f09cf5533d458868a335ce334e4880b2b0788dSelim Cinek 347ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi /** 348ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi * @param state The {@link StatusBarState} of the status bar. 349ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi */ 350ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi public void setStatusBarState(int state) { 351ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi mCurrentState.statusBarState = state; 352ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi apply(mCurrentState); 353ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi } 354ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi 3554a4a2bddc48a33cbaa49a8844b9fd36e2fc5e219Selim Cinek public void setForceStatusBarVisible(boolean forceStatusBarVisible) { 3564a4a2bddc48a33cbaa49a8844b9fd36e2fc5e219Selim Cinek mCurrentState.forceStatusBarVisible = forceStatusBarVisible; 3574a4a2bddc48a33cbaa49a8844b9fd36e2fc5e219Selim Cinek apply(mCurrentState); 3584a4a2bddc48a33cbaa49a8844b9fd36e2fc5e219Selim Cinek } 3594a4a2bddc48a33cbaa49a8844b9fd36e2fc5e219Selim Cinek 360737bff3476a3af8f930d29fccce16d033fbc3efaSelim Cinek /** 361737bff3476a3af8f930d29fccce16d033fbc3efaSelim Cinek * Force the window to be collapsed, even if it should theoretically be expanded. 362737bff3476a3af8f930d29fccce16d033fbc3efaSelim Cinek * Used for when a heads-up comes in but we still need to wait for the touchable regions to 363737bff3476a3af8f930d29fccce16d033fbc3efaSelim Cinek * be computed. 364737bff3476a3af8f930d29fccce16d033fbc3efaSelim Cinek */ 365737bff3476a3af8f930d29fccce16d033fbc3efaSelim Cinek public void setForceWindowCollapsed(boolean force) { 366737bff3476a3af8f930d29fccce16d033fbc3efaSelim Cinek mCurrentState.forceCollapsed = force; 367737bff3476a3af8f930d29fccce16d033fbc3efaSelim Cinek apply(mCurrentState); 368737bff3476a3af8f930d29fccce16d033fbc3efaSelim Cinek } 369737bff3476a3af8f930d29fccce16d033fbc3efaSelim Cinek 3704a21a7fab6c0cca2c668650969e9af50c9c5068eSelim Cinek public void setPanelExpanded(boolean isExpanded) { 3714a21a7fab6c0cca2c668650969e9af50c9c5068eSelim Cinek mCurrentState.panelExpanded = isExpanded; 3724a21a7fab6c0cca2c668650969e9af50c9c5068eSelim Cinek apply(mCurrentState); 3734a21a7fab6c0cca2c668650969e9af50c9c5068eSelim Cinek } 3744a21a7fab6c0cca2c668650969e9af50c9c5068eSelim Cinek 375d28ccd7cab8e1a187dfd6c5733efe7cdfb652202Adrian Roos @Override 376d28ccd7cab8e1a187dfd6c5733efe7cdfb652202Adrian Roos public void onRemoteInputActive(boolean remoteInputActive) { 3771c0ca508b9d6184beba2050e6ab3a44ac5be137aAdrian Roos mCurrentState.remoteInputActive = remoteInputActive; 3781c0ca508b9d6184beba2050e6ab3a44ac5be137aAdrian Roos apply(mCurrentState); 3791c0ca508b9d6184beba2050e6ab3a44ac5be137aAdrian Roos } 3801c0ca508b9d6184beba2050e6ab3a44ac5be137aAdrian Roos 38183eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi /** 38283eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi * Set whether the screen brightness is forced to the value we use for doze mode by the status 38383eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi * bar window. 38483eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi */ 38583eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi public void setForceDozeBrightness(boolean forceDozeBrightness) { 38683eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi mCurrentState.forceDozeBrightness = forceDozeBrightness; 38783eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi apply(mCurrentState); 38883eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi } 38983eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi 39067cca7442bfeffc0bace506a796cfdd39e5d511cAdrian Roos public void setDozing(boolean dozing) { 39167cca7442bfeffc0bace506a796cfdd39e5d511cAdrian Roos mCurrentState.dozing = dozing; 39267cca7442bfeffc0bace506a796cfdd39e5d511cAdrian Roos apply(mCurrentState); 39367cca7442bfeffc0bace506a796cfdd39e5d511cAdrian Roos } 39467cca7442bfeffc0bace506a796cfdd39e5d511cAdrian Roos 39511c62e17af9096f76d4532f26cacd809c3a5ef53Jorim Jaggi public void setBarHeight(int barHeight) { 39611c62e17af9096f76d4532f26cacd809c3a5ef53Jorim Jaggi mBarHeight = barHeight; 39711c62e17af9096f76d4532f26cacd809c3a5ef53Jorim Jaggi apply(mCurrentState); 39811c62e17af9096f76d4532f26cacd809c3a5ef53Jorim Jaggi } 39911c62e17af9096f76d4532f26cacd809c3a5ef53Jorim Jaggi 400421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk public void setForcePluginOpen(boolean forcePluginOpen) { 401421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk mCurrentState.forcePluginOpen = forcePluginOpen; 402421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk apply(mCurrentState); 403421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk } 404421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk 405421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk public void setStateListener(OtherwisedCollapsedListener listener) { 406421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk mListener = listener; 407421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk } 408421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk 4097025f26a99483d333cd8e4df0b919c3b9e9334b3Selim Cinek public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { 4107025f26a99483d333cd8e4df0b919c3b9e9334b3Selim Cinek pw.println("StatusBarWindowManager state:"); 4117025f26a99483d333cd8e4df0b919c3b9e9334b3Selim Cinek pw.println(mCurrentState); 4126a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek } 4136a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek 414d5c2db630fc816e2d9154a61ccbd6770bc57cff8Adrian Roos public boolean isShowingWallpaper() { 415d5c2db630fc816e2d9154a61ccbd6770bc57cff8Adrian Roos return !mCurrentState.backdropShowing; 416d5c2db630fc816e2d9154a61ccbd6770bc57cff8Adrian Roos } 417d5c2db630fc816e2d9154a61ccbd6770bc57cff8Adrian Roos 4185cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private static class State { 4195cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi boolean keyguardShowing; 4205cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi boolean keyguardOccluded; 4215cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi boolean keyguardNeedsInput; 4224a21a7fab6c0cca2c668650969e9af50c9c5068eSelim Cinek boolean panelVisible; 4234a21a7fab6c0cca2c668650969e9af50c9c5068eSelim Cinek boolean panelExpanded; 4245cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi boolean statusBarFocusable; 4255fd4d05aae4b8b0dc1d1b21a206e218f47b0ea3aJorim Jaggi boolean bouncerShowing; 426e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi boolean keyguardFadingAway; 427b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi boolean qsExpanded; 428b8f09cf5533d458868a335ce334e4880b2b0788dSelim Cinek boolean headsUpShowing; 4294a4a2bddc48a33cbaa49a8844b9fd36e2fc5e219Selim Cinek boolean forceStatusBarVisible; 430737bff3476a3af8f930d29fccce16d033fbc3efaSelim Cinek boolean forceCollapsed; 43183eb6bb5d83d3994a3750b566a2109a049ab1388Jorim Jaggi boolean forceDozeBrightness; 4326069c4099e21765af3508a2f7de4dad779dc0543Vadim Tryshev boolean forceUserActivity; 433d5c2db630fc816e2d9154a61ccbd6770bc57cff8Adrian Roos boolean backdropShowing; 4345cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi 435ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi /** 4362a6ea9c2a1b52b0386270ec73e1e6d6a9b614a34Jason Monk * The {@link StatusBar} state from the status bar. 437ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi */ 438ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi int statusBarState; 439ecbab3662d4474bbb45477939aaa167eb883212bJorim Jaggi 4401c0ca508b9d6184beba2050e6ab3a44ac5be137aAdrian Roos boolean remoteInputActive; 441421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk boolean forcePluginOpen; 44267cca7442bfeffc0bace506a796cfdd39e5d511cAdrian Roos boolean dozing; 443a5c6322dc5ad01d05560182651d4af84d32c2fc5Adrian Roos boolean scrimsVisible; 4441c0ca508b9d6184beba2050e6ab3a44ac5be137aAdrian Roos 4455cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private boolean isKeyguardShowingAndNotOccluded() { 4465cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi return keyguardShowing && !keyguardOccluded; 4475cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 4486a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek 4496a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek @Override 4506a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek public String toString() { 4516a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek StringBuilder result = new StringBuilder(); 4526a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek String newLine = "\n"; 4536a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek result.append("Window State {"); 4546a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek result.append(newLine); 4556a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek 4566a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek Field[] fields = this.getClass().getDeclaredFields(); 4576a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek 4586a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek // Print field names paired with their values 4596a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek for (Field field : fields) { 4606a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek result.append(" "); 4616a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek try { 4626a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek result.append(field.getName()); 4636a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek result.append(": "); 4646a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek //requires access to private field: 4656a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek result.append(field.get(this)); 4666a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek } catch (IllegalAccessException ex) { 4676a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek } 4686a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek result.append(newLine); 4696a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek } 4706a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek result.append("}"); 4716a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek 4726a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek return result.toString(); 4736a1bd2b3dbc993e63632f12819d77ae5fa872a06Selim Cinek } 4745cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 475421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk 476421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk /** 477421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk * Custom listener to pipe data back to plugins about whether or not the status bar would be 478421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk * collapsed if not for the plugin. 479421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk * TODO: Find cleaner way to do this. 480421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk */ 481421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk public interface OtherwisedCollapsedListener { 482421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk void setWouldOtherwiseCollapse(boolean otherwiseCollapse); 483421a9410b462770544c6ae9a554542fa2fe1acb1Jason Monk } 4845cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi} 485