diff options
author | Adrian Roos <roosa@google.com> | 2015-02-18 20:37:55 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-02-18 20:37:57 +0000 |
commit | a1879609890640bd26639fc3ce1fa482efd17e8d (patch) | |
tree | 4f06d3204bc9977076a9da8258970b892518a710 | |
parent | a42d2eaf2d6b3cb6072e99b4904b76c8cc263cf3 (diff) | |
parent | cd3884dfb246855c059e15db376f0935af68d949 (diff) | |
download | frameworks_base-a1879609890640bd26639fc3ce1fa482efd17e8d.zip frameworks_base-a1879609890640bd26639fc3ce1fa482efd17e8d.tar.gz frameworks_base-a1879609890640bd26639fc3ce1fa482efd17e8d.tar.bz2 |
Merge "Set the light status flag based on right window"
3 files changed, 49 insertions, 0 deletions
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java index 3f35612..9199af1 100644 --- a/core/java/android/view/WindowManagerPolicy.java +++ b/core/java/android/view/WindowManagerPolicy.java @@ -365,6 +365,11 @@ public interface WindowManagerPolicy { * @return true if window is on default display. */ public boolean isDefaultDisplay(); + + /** + * Check whether the window is currently dimming. + */ + public boolean isDimming(); } /** diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 271ec75..b90d263 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -457,6 +457,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { static final Rect mTmpNavigationFrame = new Rect(); WindowState mTopFullscreenOpaqueWindowState; + WindowState mTopFullscreenOpaqueOrDimmingWindowState; HashSet<IApplicationToken> mAppsToBeHidden = new HashSet<IApplicationToken>(); HashSet<IApplicationToken> mAppsThatDismissKeyguard = new HashSet<IApplicationToken>(); boolean mTopIsFullscreen; @@ -3972,6 +3973,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { @Override public void beginPostLayoutPolicyLw(int displayWidth, int displayHeight) { mTopFullscreenOpaqueWindowState = null; + mTopFullscreenOpaqueOrDimmingWindowState = null; mAppsToBeHidden.clear(); mAppsThatDismissKeyguard.clear(); mForceStatusBar = false; @@ -4060,6 +4062,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { && attrs.height == WindowManager.LayoutParams.MATCH_PARENT) { if (DEBUG_LAYOUT) Slog.v(TAG, "Fullscreen window: " + win); mTopFullscreenOpaqueWindowState = win; + if (mTopFullscreenOpaqueOrDimmingWindowState == null) { + mTopFullscreenOpaqueOrDimmingWindowState = win; + } if (!mAppsThatDismissKeyguard.isEmpty() && mDismissKeyguard == DISMISS_KEYGUARD_NONE) { if (DEBUG_LAYOUT) Slog.v(TAG, @@ -4085,6 +4090,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } } + if (mTopFullscreenOpaqueOrDimmingWindowState == null + && win.isVisibleOrBehindKeyguardLw() && !win.isGoneForLayoutLw() + && win.isDimming()) { + mTopFullscreenOpaqueOrDimmingWindowState = win; + } } /** {@inheritDoc} */ @@ -6051,6 +6061,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (mForcingShowNavBar && win.getSurfaceLayer() < mForcingShowNavBarLayer) { tmpVisibility &= ~PolicyControl.adjustClearableFlags(win, View.SYSTEM_UI_CLEARABLE_FLAGS); } + tmpVisibility = updateLightStatusBarLw(tmpVisibility); final int visibility = updateSystemBarsLw(win, mLastSystemUiFlags, tmpVisibility); final int diff = visibility ^ mLastSystemUiFlags; final boolean needsMenu = win.getNeedsMenuLw(mTopFullscreenOpaqueWindowState); @@ -6079,6 +6090,26 @@ public class PhoneWindowManager implements WindowManagerPolicy { return diff; } + private int updateLightStatusBarLw(int vis) { + WindowState statusColorWin = isStatusBarKeyguard() && !mHideLockScreen + ? mStatusBar + : mTopFullscreenOpaqueOrDimmingWindowState; + + if (statusColorWin != null) { + if (statusColorWin == mTopFullscreenOpaqueWindowState) { + // If the top fullscreen-or-dimming window is also the top fullscreen, respect + // its light flag. + vis &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; + vis |= PolicyControl.getSystemUiVisibility(statusColorWin, null) + & View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; + } else if (statusColorWin != null && statusColorWin.isDimming()) { + // Otherwise if it's dimming, clear the light flag. + vis &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; + } + } + return vis; + } + private int updateSystemBarsLw(WindowState win, int oldVis, int vis) { // apply translucent bar vis flags WindowState transWin = isStatusBarKeyguard() && !mHideLockScreen @@ -6383,6 +6414,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { pw.print(prefix); pw.print("mTopFullscreenOpaqueWindowState="); pw.println(mTopFullscreenOpaqueWindowState); } + if (mTopFullscreenOpaqueOrDimmingWindowState != null) { + pw.print(prefix); pw.print("mTopFullscreenOpaqueOrDimmingWindowState="); + pw.println(mTopFullscreenOpaqueOrDimmingWindowState); + } if (mForcingShowNavBar) { pw.print(prefix); pw.print("mForcingShowNavBar="); pw.println(mForcingShowNavBar); pw.print( "mForcingShowNavBarLayer="); diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 99cc03e..d58b2b0 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -1288,6 +1288,15 @@ final class WindowState implements WindowManagerPolicy.WindowState { return displayContent.isDefaultDisplay; } + @Override + public boolean isDimming() { + TaskStack stack = getStack(); + if (stack == null) { + return false; + } + return stack.isDimming(mWinAnimator); + } + public void setShowToOwnerOnlyLocked(boolean showToOwnerOnly) { mShowToOwnerOnly = showToOwnerOnly; } |