diff options
| author | 2013-01-09 19:01:26 -0800 | |
|---|---|---|
| committer | 2013-01-09 19:01:26 -0800 | |
| commit | 9e6575bc52f421484fe262aff224db247e70d830 (patch) | |
| tree | 71536052f31d3020f54557ca794cc3c55455889c | |
| parent | 79cc4a2ab0130acca83de5945a43adf9925beac1 (diff) | |
| parent | 854458f4d52937f9a1385559d759bd8019eb3294 (diff) | |
am 854458f4: am 0287ca3c: am e62fa825: Merge from master: fix issue #7966357: Super lights out mode vs. volume dialog
* commit '854458f4d52937f9a1385559d759bd8019eb3294':
Merge from master: fix issue #7966357: Super lights out mode vs. volume dialog
4 files changed, 30 insertions, 2 deletions
diff --git a/core/java/android/view/VolumePanel.java b/core/java/android/view/VolumePanel.java index d7c7f4640c56..001d0206e7ba 100644 --- a/core/java/android/view/VolumePanel.java +++ b/core/java/android/view/VolumePanel.java @@ -302,6 +302,7 @@ public class VolumePanel extends Handler implements OnSeekBarChangeListener, Vie lp.type = LayoutParams.TYPE_VOLUME_OVERLAY; lp.width = LayoutParams.WRAP_CONTENT; lp.height = LayoutParams.WRAP_CONTENT; + lp.privateFlags |= LayoutParams.PRIVATE_FLAG_FORCE_SHOW_NAV_BAR; window.setAttributes(lp); window.addFlags(LayoutParams.FLAG_NOT_FOCUSABLE | LayoutParams.FLAG_NOT_TOUCH_MODAL | LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH); diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index 3b31ff638b19..6a67d8b8acdf 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -946,6 +946,13 @@ public interface WindowManager extends ViewManager { public static final int PRIVATE_FLAG_SHOW_FOR_ALL_USERS = 0x00000010; /** + * Special flag for the volume overlay: force the window manager out of "hide nav bar" + * mode while the window is on screen. + * + * {@hide} */ + public static final int PRIVATE_FLAG_FORCE_SHOW_NAV_BAR = 0x00000020; + + /** * Control flags that are private to the platform. * @hide */ diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java index 242fb97c09bc..fb515ac1e722 100644 --- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @@ -412,6 +412,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { boolean mForceStatusBar; boolean mForceStatusBarFromKeyguard; boolean mHideLockScreen; + boolean mForcingShowNavBar; + int mForcingShowNavBarLayer; // States of keyguard dismiss. private static final int DISMISS_KEYGUARD_NONE = 0; // Keyguard not being dismissed. @@ -2936,6 +2938,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { mTopFullscreenOpaqueWindowState = null; mForceStatusBar = false; mForceStatusBarFromKeyguard = false; + mForcingShowNavBar = false; + mForcingShowNavBarLayer = -1; mHideLockScreen = false; mAllowLockscreenWhenOn = false; @@ -2950,6 +2954,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { WindowManager.LayoutParams attrs) { if (DEBUG_LAYOUT) Slog.i(TAG, "Win " + win + ": isVisibleOrBehindKeyguardLw=" + win.isVisibleOrBehindKeyguardLw()); + if (mTopFullscreenOpaqueWindowState == null && (win.getAttrs().privateFlags + &WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_SHOW_NAV_BAR) != 0) { + if (mForcingShowNavBarLayer < 0) { + mForcingShowNavBar = true; + mForcingShowNavBarLayer = win.getSurfaceLayer(); + } + } if (mTopFullscreenOpaqueWindowState == null && win.isVisibleOrBehindKeyguardLw() && !win.isGoneForLayoutLw()) { if ((attrs.flags & FLAG_FORCE_NOT_FULLSCREEN) != 0) { @@ -4478,9 +4489,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { // will quickly lose focus once it correctly gets hidden. return 0; } - final int visibility = mFocusedWindow.getSystemUiVisibility() + int tmpVisibility = mFocusedWindow.getSystemUiVisibility() & ~mResettingSystemUiFlags & ~mForceClearedSystemUiFlags; + if (mForcingShowNavBar && mFocusedWindow.getSurfaceLayer() < mForcingShowNavBarLayer) { + tmpVisibility &= ~View.SYSTEM_UI_CLEARABLE_FLAGS; + } + final int visibility = tmpVisibility; int diff = visibility ^ mLastSystemUiFlags; final boolean needsMenu = mFocusedWindow.getNeedsMenuLw(mTopFullscreenOpaqueWindowState); if (diff == 0 && mLastFocusNeedsMenu == needsMenu @@ -4667,6 +4682,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { pw.print(prefix); pw.print("mTopFullscreenOpaqueWindowState="); pw.println(mTopFullscreenOpaqueWindowState); } + if (mForcingShowNavBar) { + pw.print(prefix); pw.print("mForcingShowNavBar="); + pw.println(mForcingShowNavBar); pw.print( "mForcingShowNavBarLayer="); + pw.println(mForcingShowNavBarLayer); + } pw.print(prefix); pw.print("mTopIsFullscreen="); pw.print(mTopIsFullscreen); pw.print(" mHideLockScreen="); pw.println(mHideLockScreen); pw.print(prefix); pw.print("mForceStatusBar="); pw.print(mForceStatusBar); diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 2ba9a100e3ec..6e81e9d0cb93 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -3904,7 +3904,7 @@ public final class ActivityManagerService extends ActivityManagerNative } boolean didSomething = killPackageProcessesLocked(name, appId, userId, - -100, callerWillRestart, false, doit, evenPersistent, + -100, callerWillRestart, true, doit, evenPersistent, name == null ? ("force stop user " + userId) : ("force stop " + name)); TaskRecord lastTask = null; |