Revert "Apply FLAG_SHOW_WHEN_LOCKED within tasks."
This reverts commit f7ad855718dc576a1618a54035b82e92356aa0d8.
After careful consideration this would prove to be a security leak to leave it in. Tasks could deliberately launch dialog activities that don't want to be seen in an unsecure setting. These would then be visible over the task background.
Change-Id: Ia7e984bc9616573af6c7772f6ea0f2dd588bb85d
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index 858cf4b..bd203c8 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -124,8 +124,6 @@
* to prepareAddWindow() until removeWindow().
*/
public interface WindowState {
- public final static int UNKNOWN_TASK_ID = -1;
-
/**
* Return the uid of the app that owns this window.
*/
@@ -274,7 +272,7 @@
* Get the layer at which this window's surface will be Z-ordered.
*/
public int getSurfaceLayer();
-
+
/**
* Return the token for the application (actually activity) that owns
* this window. May return null for system windows.
@@ -284,11 +282,6 @@
public IApplicationToken getAppToken();
/**
- * Return the taskId of the task that owns this window.
- */
- public int getTaskId();
-
- /**
* Return true if, at any point, the application token associated with
* this window has actually displayed any windows. This is most useful
* with the "starting up" window to determine if any windows were
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 41705ef..3c23c6e 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -106,7 +106,6 @@
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
-import java.util.HashSet;
import static android.view.WindowManager.LayoutParams.*;
import static android.view.WindowManagerPolicy.WindowManagerFuncs.LID_ABSENT;
@@ -375,7 +374,7 @@
static final Rect mTmpNavigationFrame = new Rect();
WindowState mTopFullscreenOpaqueWindowState;
- HashSet<Integer> mTasksToBeHidden = new HashSet<Integer>();
+ boolean mHideWindowBehindKeyguard;
boolean mTopIsFullscreen;
boolean mForceStatusBar;
boolean mForceStatusBarFromKeyguard;
@@ -3367,7 +3366,7 @@
@Override
public void beginPostLayoutPolicyLw(int displayWidth, int displayHeight) {
mTopFullscreenOpaqueWindowState = null;
- mTasksToBeHidden.clear();
+ mHideWindowBehindKeyguard = false;
mForceStatusBar = false;
mForceStatusBarFromKeyguard = false;
mForcingShowNavBar = false;
@@ -3418,18 +3417,12 @@
final boolean showWhenLocked = (fl & FLAG_SHOW_WHEN_LOCKED) != 0;
if (appWindow) {
- final int taskId = win.getTaskId();
- if (taskId != WindowState.UNKNOWN_TASK_ID && showWhenLocked) {
- mTasksToBeHidden.remove(taskId);
- } else {
- mTasksToBeHidden.add(taskId);
- }
if (attrs.x == 0 && attrs.y == 0
&& attrs.width == WindowManager.LayoutParams.MATCH_PARENT
&& attrs.height == WindowManager.LayoutParams.MATCH_PARENT) {
if (DEBUG_LAYOUT) Slog.v(TAG, "Fullscreen window: " + win);
mTopFullscreenOpaqueWindowState = win;
- if (mTasksToBeHidden.isEmpty()) {
+ if (!mHideWindowBehindKeyguard) {
if (showWhenLocked) {
if (DEBUG_LAYOUT) Slog.v(TAG,
"Setting mHideLockScreen to true by win " + win);
@@ -3449,6 +3442,8 @@
if ((fl & FLAG_ALLOW_LOCK_WHILE_SCREEN_ON) != 0) {
mAllowLockscreenWhenOn = true;
}
+ } else if (!showWhenLocked) {
+ mHideWindowBehindKeyguard = true;
}
}
}
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 3434053..2c0e99e 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -709,11 +709,6 @@
return mAppToken != null ? mAppToken.appToken : null;
}
- @Override
- public int getTaskId() {
- return mAppToken != null ? mAppToken.groupId : UNKNOWN_TASK_ID;
- }
-
boolean setInsetsChanged() {
mOverscanInsetsChanged |= !mLastOverscanInsets.equals(mOverscanInsets);
mContentInsetsChanged |= !mLastContentInsets.equals(mContentInsets);