summaryrefslogtreecommitdiffstats
path: root/policy
diff options
context:
space:
mode:
Diffstat (limited to 'policy')
-rw-r--r--policy/src/com/android/internal/policy/impl/PhoneWindow.java6
-rwxr-xr-xpolicy/src/com/android/internal/policy/impl/PhoneWindowManager.java35
2 files changed, 36 insertions, 5 deletions
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
index 24c9443..db5f6c1 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
@@ -21,6 +21,7 @@ import static android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN;
import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR;
import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
+import static android.view.WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY;
import com.android.internal.view.BaseSurfaceHolder;
import com.android.internal.view.RootViewSurfaceTaker;
@@ -2324,6 +2325,11 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
setFlags(FLAG_SHOW_WALLPAPER, FLAG_SHOW_WALLPAPER&(~getForcedWindowFlags()));
}
+ if (getContext().getApplicationInfo().targetSdkVersion
+ < android.os.Build.VERSION_CODES.HONEYCOMB) {
+ addFlags(WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY);
+ }
+
WindowManager.LayoutParams params = getAttributes();
if (!hasSoftInputMode()) {
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 449bd4c..ec5b098 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -287,6 +287,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
Intent mDeskDockIntent;
boolean mSearchKeyPressed;
boolean mConsumeSearchKeyUp;
+ boolean mShowMenuKey = false; // track FLAG_NEEDS_MENU_KEY on frontmost window
// support for activating the lock screen while the screen is on
boolean mAllowLockscreenWhenOn;
@@ -1603,8 +1604,12 @@ public class PhoneWindowManager implements WindowManagerPolicy {
/** {@inheritDoc} */
public int finishAnimationLw() {
int changes = 0;
-
boolean topIsFullscreen = false;
+
+ final WindowManager.LayoutParams lp = (mTopFullscreenOpaqueWindowState != null)
+ ? mTopFullscreenOpaqueWindowState.getAttrs()
+ : null;
+
if (mStatusBar != null) {
if (localLOGV) Log.i(TAG, "force=" + mForceStatusBar
+ " top=" + mTopFullscreenOpaqueWindowState);
@@ -1612,7 +1617,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
if (DEBUG_LAYOUT) Log.v(TAG, "Showing status bar");
if (mStatusBar.showLw(true)) changes |= FINISH_LAYOUT_REDO_LAYOUT;
} else if (mTopFullscreenOpaqueWindowState != null) {
- final WindowManager.LayoutParams lp = mTopFullscreenOpaqueWindowState.getAttrs();
if (localLOGV) {
Log.d(TAG, "frame: " + mTopFullscreenOpaqueWindowState.getFrameLw()
+ " shown frame: " + mTopFullscreenOpaqueWindowState.getShownFrameLw());
@@ -1637,10 +1641,26 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
}
}
-
- if (topIsFullscreen != mTopIsFullscreen) {
+
+ boolean topNeedsMenu = mShowMenuKey;
+ if (lp != null) {
+ topNeedsMenu = (lp.flags & WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY) != 0;
+ }
+
+ if (DEBUG_LAYOUT) Log.v(TAG, "Top window "
+ + (topNeedsMenu ? "needs" : "does not need")
+ + " the MENU key");
+
+ final boolean changedFullscreen = (mTopIsFullscreen != topIsFullscreen);
+ final boolean changedMenu = (topNeedsMenu != mShowMenuKey);
+
+ if (changedFullscreen || changedMenu) {
final boolean topIsFullscreenF = topIsFullscreen;
+ final boolean topNeedsMenuF = topNeedsMenu;
+
mTopIsFullscreen = topIsFullscreen;
+ mShowMenuKey = topNeedsMenu;
+
mHandler.post(new Runnable() {
public void run() {
if (mStatusBarService == null) {
@@ -1654,7 +1674,12 @@ public class PhoneWindowManager implements WindowManagerPolicy {
final IStatusBarService sbs = mStatusBarService;
if (mStatusBarService != null) {
try {
- sbs.setActiveWindowIsFullscreen(topIsFullscreenF);
+ if (changedFullscreen) {
+ sbs.setActiveWindowIsFullscreen(topIsFullscreenF);
+ }
+ if (changedMenu) {
+ sbs.setMenuKeyVisible(topNeedsMenuF);
+ }
} catch (RemoteException e) {
// This should be impossible because we're in the same process.
mStatusBarService = null;