Merge "Fix issue #5522658: Menu button shown on lock screen if app underneath requests it" into ics-mr1
This commit is contained in:
committed by
Android (Google) Code Review
commit
be425ccea4
@@ -360,6 +360,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
|||||||
int mResettingSystemUiFlags = 0;
|
int mResettingSystemUiFlags = 0;
|
||||||
// Bits that we are currently always keeping cleared.
|
// Bits that we are currently always keeping cleared.
|
||||||
int mForceClearedSystemUiFlags = 0;
|
int mForceClearedSystemUiFlags = 0;
|
||||||
|
// What we last reported to system UI about whether the compatibility
|
||||||
|
// menu needs to be displayed.
|
||||||
|
boolean mLastFocusNeedsMenu = false;
|
||||||
|
|
||||||
FakeWindow mHideNavFakeWindow = null;
|
FakeWindow mHideNavFakeWindow = null;
|
||||||
|
|
||||||
@@ -370,8 +373,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
|||||||
static final Rect mTmpNavigationFrame = new Rect();
|
static final Rect mTmpNavigationFrame = new Rect();
|
||||||
|
|
||||||
WindowState mTopFullscreenOpaqueWindowState;
|
WindowState mTopFullscreenOpaqueWindowState;
|
||||||
WindowState mTopAppWindowState;
|
|
||||||
WindowState mLastTopAppWindowState;
|
|
||||||
boolean mTopIsFullscreen;
|
boolean mTopIsFullscreen;
|
||||||
boolean mForceStatusBar;
|
boolean mForceStatusBar;
|
||||||
boolean mHideLockScreen;
|
boolean mHideLockScreen;
|
||||||
@@ -2250,7 +2251,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
public void beginAnimationLw(int displayWidth, int displayHeight) {
|
public void beginAnimationLw(int displayWidth, int displayHeight) {
|
||||||
mTopFullscreenOpaqueWindowState = null;
|
mTopFullscreenOpaqueWindowState = null;
|
||||||
mTopAppWindowState = null;
|
|
||||||
mForceStatusBar = false;
|
mForceStatusBar = false;
|
||||||
|
|
||||||
mHideLockScreen = false;
|
mHideLockScreen = false;
|
||||||
@@ -2288,12 +2288,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (mTopAppWindowState == null && win.isVisibleOrBehindKeyguardLw()) {
|
|
||||||
if (attrs.type >= FIRST_APPLICATION_WINDOW
|
|
||||||
&& attrs.type <= LAST_APPLICATION_WINDOW) {
|
|
||||||
mTopAppWindowState = win;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@@ -2349,35 +2343,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
|||||||
|
|
||||||
mTopIsFullscreen = topIsFullscreen;
|
mTopIsFullscreen = topIsFullscreen;
|
||||||
|
|
||||||
if (mTopAppWindowState != null && mTopAppWindowState != mLastTopAppWindowState) {
|
|
||||||
mLastTopAppWindowState = mTopAppWindowState;
|
|
||||||
|
|
||||||
final boolean topNeedsMenu = (mTopAppWindowState.getAttrs().flags
|
|
||||||
& WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY) != 0;
|
|
||||||
|
|
||||||
mHandler.post(new Runnable() {
|
|
||||||
public void run() {
|
|
||||||
if (mStatusBarService == null) {
|
|
||||||
// This is the one that can not go away, but it doesn't come up
|
|
||||||
// before the window manager does, so don't fail if it doesn't
|
|
||||||
// exist. This works as long as no fullscreen windows come up
|
|
||||||
// before the status bar service does.
|
|
||||||
mStatusBarService = IStatusBarService.Stub.asInterface(
|
|
||||||
ServiceManager.getService("statusbar"));
|
|
||||||
}
|
|
||||||
final IStatusBarService sbs = mStatusBarService;
|
|
||||||
if (mStatusBarService != null) {
|
|
||||||
try {
|
|
||||||
sbs.topAppWindowChanged(topNeedsMenu);
|
|
||||||
} catch (RemoteException e) {
|
|
||||||
// This should be impossible because we're in the same process.
|
|
||||||
mStatusBarService = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hide the key guard if a visible window explicitly specifies that it wants to be displayed
|
// Hide the key guard if a visible window explicitly specifies that it wants to be displayed
|
||||||
// when the screen is locked
|
// when the screen is locked
|
||||||
if (mKeyguard != null) {
|
if (mKeyguard != null) {
|
||||||
@@ -3711,10 +3676,13 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
|||||||
& ~mResettingSystemUiFlags
|
& ~mResettingSystemUiFlags
|
||||||
& ~mForceClearedSystemUiFlags;
|
& ~mForceClearedSystemUiFlags;
|
||||||
int diff = visibility ^ mLastSystemUiFlags;
|
int diff = visibility ^ mLastSystemUiFlags;
|
||||||
if (diff == 0) {
|
final boolean needsMenu = (mFocusedWindow.getAttrs().flags
|
||||||
|
& WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY) != 0;
|
||||||
|
if (diff == 0 && mLastFocusNeedsMenu == needsMenu) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
mLastSystemUiFlags = visibility;
|
mLastSystemUiFlags = visibility;
|
||||||
|
mLastFocusNeedsMenu = needsMenu;
|
||||||
mHandler.post(new Runnable() {
|
mHandler.post(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
if (mStatusBarService == null) {
|
if (mStatusBarService == null) {
|
||||||
@@ -3724,6 +3692,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
|||||||
if (mStatusBarService != null) {
|
if (mStatusBarService != null) {
|
||||||
try {
|
try {
|
||||||
mStatusBarService.setSystemUiVisibility(visibility);
|
mStatusBarService.setSystemUiVisibility(visibility);
|
||||||
|
mStatusBarService.topAppWindowChanged(needsMenu);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
// not much to be done
|
// not much to be done
|
||||||
mStatusBarService = null;
|
mStatusBarService = null;
|
||||||
@@ -3756,6 +3725,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
|||||||
pw.print(" mForceClearedSystemUiFlags=0x");
|
pw.print(" mForceClearedSystemUiFlags=0x");
|
||||||
pw.println(Integer.toHexString(mForceClearedSystemUiFlags));
|
pw.println(Integer.toHexString(mForceClearedSystemUiFlags));
|
||||||
}
|
}
|
||||||
|
if (mLastFocusNeedsMenu) {
|
||||||
|
pw.print(prefix); pw.print("mLastFocusNeedsMenu=");
|
||||||
|
pw.println(mLastFocusNeedsMenu);
|
||||||
|
}
|
||||||
pw.print(prefix); pw.print("mUiMode="); pw.print(mUiMode);
|
pw.print(prefix); pw.print("mUiMode="); pw.print(mUiMode);
|
||||||
pw.print(" mDockMode="); pw.print(mDockMode);
|
pw.print(" mDockMode="); pw.print(mDockMode);
|
||||||
pw.print(" mCarDockRotation="); pw.print(mCarDockRotation);
|
pw.print(" mCarDockRotation="); pw.print(mCarDockRotation);
|
||||||
|
|||||||
Reference in New Issue
Block a user