From a2d7b1117abc23a3ff0ccda15a2f9138aaa7f4fc Mon Sep 17 00:00:00 2001 From: Craig Mautner Date: Tue, 21 Aug 2012 15:12:20 -0700 Subject: [PATCH] Fix to allow SYSTEM_UID to display windows. Was not previously checking to make sure that the appId was not SYSTEM_UID (1000). This caused certain system windows to fail to appear. Change-Id: I939dc2f8a256acb84b7c413c7e00003a89aff6d4 --- .../java/com/android/server/wm/WindowState.java | 14 ++++++++------ .../com/android/server/wm/WindowStateAnimator.java | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/services/java/com/android/server/wm/WindowState.java b/services/java/com/android/server/wm/WindowState.java index ae641a30d66d7..a52e1d7bc72e9 100644 --- a/services/java/com/android/server/wm/WindowState.java +++ b/services/java/com/android/server/wm/WindowState.java @@ -36,6 +36,7 @@ import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Region; import android.os.IBinder; +import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; import android.util.Slog; @@ -261,8 +262,8 @@ final class WindowState implements WindowManagerPolicy.WindowState { DisplayContent mDisplayContent; - // UserId of the owner. Don't display windows of non-current user. - final int mOwnerUserId; + // UserId and appId of the owner. Don't display windows of non-current user. + final int mOwnerUid; WindowState(WindowManagerService service, Session s, IWindow c, WindowToken token, WindowState attachedWindow, int seq, WindowManager.LayoutParams a, @@ -271,7 +272,7 @@ final class WindowState implements WindowManagerPolicy.WindowState { mSession = s; mClient = c; mToken = token; - mOwnerUserId = UserHandle.getUserId(s.mUid); + mOwnerUid = s.mUid; mAttrs.copyFrom(a); mViewVisibility = viewVisibility; mDisplayContent = displayContent; @@ -904,7 +905,7 @@ final class WindowState implements WindowManagerPolicy.WindowState { boolean showLw(boolean doAnimation, boolean requestAnim) { if (isOtherUsersAppWindow()) { Slog.w(TAG, "Current user " + mService.mCurrentUserId + " trying to display " - + this + ", type " + mAttrs.type + ", belonging to " + mOwnerUserId); + + this + ", type " + mAttrs.type + ", belonging to " + mOwnerUid); return false; } if (mPolicyVisibility && mPolicyVisibilityAfterAnim) { @@ -985,9 +986,10 @@ final class WindowState implements WindowManagerPolicy.WindowState { boolean isOtherUsersAppWindow() { final int type = mAttrs.type; - if ((mOwnerUserId != mService.mCurrentUserId) + if ((UserHandle.getUserId(mOwnerUid) != mService.mCurrentUserId) + && (mOwnerUid != Process.SYSTEM_UID) && (type >= TYPE_BASE_APPLICATION) && (type <= LAST_APPLICATION_WINDOW) - && (type != TYPE_APPLICATION_STARTING)) { + && (type != TYPE_APPLICATION_STARTING)) { return true; } return false; diff --git a/services/java/com/android/server/wm/WindowStateAnimator.java b/services/java/com/android/server/wm/WindowStateAnimator.java index b213b291cd1cb..2c9f7f3a4275c 100644 --- a/services/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/java/com/android/server/wm/WindowStateAnimator.java @@ -1302,7 +1302,7 @@ class WindowStateAnimator { boolean performShowLocked() { if (mWin.isOtherUsersAppWindow()) { Slog.w(TAG, "Current user " + mService.mCurrentUserId + " trying to display " - + this + ", type " + mWin.mAttrs.type + ", belonging to " + mWin.mOwnerUserId); + + this + ", type " + mWin.mAttrs.type + ", belonging to " + mWin.mOwnerUid); return false; } if (DEBUG_VISIBILITY || (DEBUG_STARTING_WINDOW &&