diff options
author | Craig Mautner <cmautner@google.com> | 2012-10-07 11:55:58 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2012-10-07 11:55:58 -0700 |
commit | 8565363126ed2c39444eb42f9879d0a88ed7905b (patch) | |
tree | 390d4087eec6b8077f950342a3b2557b409efb9d /services/java/com | |
parent | 02ff76c5d93b30e028edde473f3fb59994102b89 (diff) | |
parent | 337aa27a6307e0f40705ee676551dda4bf6cb894 (diff) | |
download | frameworks_base-8565363126ed2c39444eb42f9879d0a88ed7905b.zip frameworks_base-8565363126ed2c39444eb42f9879d0a88ed7905b.tar.gz frameworks_base-8565363126ed2c39444eb42f9879d0a88ed7905b.tar.bz2 |
am 337aa27a: am 8ee7ac22: am 33877e15: Merge "Adds showWhenLocked attribute to Activities." into jb-mr1-dev
* commit '337aa27a6307e0f40705ee676551dda4bf6cb894':
Adds showWhenLocked attribute to Activities.
Diffstat (limited to 'services/java/com')
6 files changed, 34 insertions, 13 deletions
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 44b5619..bffd0bc 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -7456,6 +7456,7 @@ public final class ActivityManagerService extends ActivityManagerNative lp.format = v.getBackground().getOpacity(); lp.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; + lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS; ((WindowManager)mContext.getSystemService( Context.WINDOW_SERVICE)).addView(v, lp); } diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java index 4925d19..a728a4c 100755 --- a/services/java/com/android/server/am/ActivityStack.java +++ b/services/java/com/android/server/am/ActivityStack.java @@ -428,12 +428,17 @@ final class ActivityStack { mLaunchingActivity = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "ActivityManager-Launch"); mLaunchingActivity.setReferenceCounted(false); } - + + private boolean okToShow(ActivityRecord r) { + return r.userId == mCurrentUser + || (r.info.flags & ActivityInfo.FLAG_SHOW_ON_LOCK_SCREEN) != 0; + } + final ActivityRecord topRunningActivityLocked(ActivityRecord notTop) { int i = mHistory.size()-1; while (i >= 0) { ActivityRecord r = mHistory.get(i); - if (!r.finishing && r != notTop && r.userId == mCurrentUser) { + if (!r.finishing && r != notTop && okToShow(r)) { return r; } i--; @@ -445,7 +450,7 @@ final class ActivityStack { int i = mHistory.size()-1; while (i >= 0) { ActivityRecord r = mHistory.get(i); - if (!r.finishing && !r.delayedResume && r != notTop && r.userId == mCurrentUser) { + if (!r.finishing && !r.delayedResume && r != notTop && okToShow(r)) { return r; } i--; @@ -468,7 +473,7 @@ final class ActivityStack { ActivityRecord r = mHistory.get(i); // Note: the taskId check depends on real taskId fields being non-zero if (!r.finishing && (token != r.appToken) && (taskId != r.task.taskId) - && r.userId == mCurrentUser) { + && okToShow(r)) { return r; } i--; @@ -1814,7 +1819,8 @@ final class ActivityStack { mHistory.add(addPos, r); r.putInHistory(); mService.mWindowManager.addAppToken(addPos, r.appToken, r.task.taskId, - r.info.screenOrientation, r.fullscreen); + r.info.screenOrientation, r.fullscreen, + (r.info.flags & ActivityInfo.FLAG_SHOW_ON_LOCK_SCREEN) != 0); if (VALIDATE_TOKENS) { validateAppTokensLocked(); } @@ -1878,7 +1884,8 @@ final class ActivityStack { } r.updateOptionsLocked(options); mService.mWindowManager.addAppToken( - addPos, r.appToken, r.task.taskId, r.info.screenOrientation, r.fullscreen); + addPos, r.appToken, r.task.taskId, r.info.screenOrientation, r.fullscreen, + (r.info.flags & ActivityInfo.FLAG_SHOW_ON_LOCK_SCREEN) != 0); boolean doShow = true; if (newTask) { // Even though this activity is starting fresh, we still need @@ -1916,7 +1923,8 @@ final class ActivityStack { // If this is the first activity, don't do any fancy animations, // because there is nothing for it to animate on top of. mService.mWindowManager.addAppToken(addPos, r.appToken, r.task.taskId, - r.info.screenOrientation, r.fullscreen); + r.info.screenOrientation, r.fullscreen, + (r.info.flags & ActivityInfo.FLAG_SHOW_ON_LOCK_SCREEN) != 0); ActivityOptions.abort(options); } if (VALIDATE_TOKENS) { @@ -2624,7 +2632,6 @@ final class ActivityStack { Bundle options) { final Intent intent = r.intent; final int callingUid = r.launchedFromUid; - final int userId = r.userId; int launchFlags = intent.getFlags(); diff --git a/services/java/com/android/server/wm/AppWindowToken.java b/services/java/com/android/server/wm/AppWindowToken.java index 13b072c..7efffe5 100644 --- a/services/java/com/android/server/wm/AppWindowToken.java +++ b/services/java/com/android/server/wm/AppWindowToken.java @@ -50,6 +50,7 @@ class AppWindowToken extends WindowToken { int groupId = -1; boolean appFullscreen; int requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; + boolean showWhenLocked; // The input dispatching timeout for this application token in nanoseconds. long inputDispatchingTimeoutNanos; diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 545d1a9..9e5d41a 100755 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -3703,7 +3703,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void addAppToken(int addPos, IApplicationToken token, - int groupId, int requestedOrientation, boolean fullscreen) { + int groupId, int requestedOrientation, boolean fullscreen, boolean showWhenLocked) { if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS, "addAppToken()")) { throw new SecurityException("Requires MANAGE_APP_TOKENS permission"); @@ -3733,6 +3733,7 @@ public class WindowManagerService extends IWindowManager.Stub atoken.inputDispatchingTimeoutNanos = inputDispatchingTimeoutNanos; atoken.groupId = groupId; atoken.appFullscreen = fullscreen; + atoken.showWhenLocked = showWhenLocked; atoken.requestedOrientation = requestedOrientation; if (DEBUG_TOKEN_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG, "addAppToken: " + atoken + " at " + addPos); @@ -5411,7 +5412,7 @@ public class WindowManagerService extends IWindowManager.Stub final WindowList windows = iterator.next().getWindowList(); for (int i = 0; i < windows.size(); i++) { final WindowState win = windows.get(i); - if (win.isOtherUsersAppWindow()) { + if (win.isHiddenFromUserLocked()) { Slog.w(TAG, "current user violation " + newUserId + " hiding " + win + ", attrs=" + win.mAttrs.type + ", belonging to " + win.mOwnerUid); diff --git a/services/java/com/android/server/wm/WindowState.java b/services/java/com/android/server/wm/WindowState.java index 6e388f2..dee66a6 100644 --- a/services/java/com/android/server/wm/WindowState.java +++ b/services/java/com/android/server/wm/WindowState.java @@ -940,7 +940,7 @@ final class WindowState implements WindowManagerPolicy.WindowState { } boolean showLw(boolean doAnimation, boolean requestAnim) { - if (isOtherUsersAppWindow()) { + if (isHiddenFromUserLocked()) { Slog.w(TAG, "current user violation " + mService.mCurrentUserId + " trying to display " + this + ", type " + mAttrs.type + ", belonging to " + mOwnerUid); return false; @@ -1030,7 +1030,18 @@ final class WindowState implements WindowManagerPolicy.WindowState { mShowToOwnerOnly = showToOwnerOnly; } - boolean isOtherUsersAppWindow() { + boolean isHiddenFromUserLocked() { + // Save some cycles by not calling getDisplayInfo unless it is an application + // window intended for all users. + if (mAttrs.type < WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW + && mAppToken != null && mAppToken.showWhenLocked) { + final DisplayInfo displayInfo = mDisplayContent.getDisplayInfo(); + if (isFullscreen(displayInfo.appWidth, displayInfo.appHeight)) { + // Is a fullscreen window, like the clock alarm. Show to everyone. + return false; + } + } + return mShowToOwnerOnly && UserHandle.getUserId(mOwnerUid) != mService.mCurrentUserId; } diff --git a/services/java/com/android/server/wm/WindowStateAnimator.java b/services/java/com/android/server/wm/WindowStateAnimator.java index 43f7a08..2bfefe1 100644 --- a/services/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/java/com/android/server/wm/WindowStateAnimator.java @@ -1334,7 +1334,7 @@ class WindowStateAnimator { // This must be called while inside a transaction. boolean performShowLocked() { - if (mWin.isOtherUsersAppWindow()) { + if (mWin.isHiddenFromUserLocked()) { Slog.w(TAG, "current user violation " + mService.mCurrentUserId + " trying to display " + this + ", type " + mWin.mAttrs.type + ", belonging to " + mWin.mOwnerUid); return false; |