diff options
author | 2020-07-05 21:21:13 +0000 | |
---|---|---|
committer | 2020-07-05 21:21:13 +0000 | |
commit | 0a357617bbcf21103204f11e6021ef46c0d0decc (patch) | |
tree | a31f3ad10e4eda40f5d3aa54952433b2cb4a33e0 | |
parent | 90c00b95869b20cfa52ec3d30785288de61e7f26 (diff) | |
parent | 45387676fc546640a772588351119b2279e693e1 (diff) |
Merge "Allow doze dream package to start a DreamActivity" into rvc-dev am: 45387676fc
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12066923
Change-Id: Ie9b5c194267602752ab29ebacd0104d0afdc8768
-rw-r--r-- | services/core/java/com/android/server/wm/ActivityRecord.java | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 2e9f70448488..241f5e88935a 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -268,6 +268,7 @@ import android.os.storage.StorageManager; import android.service.dreams.DreamActivity; import android.service.dreams.DreamManagerInternal; import android.service.voice.IVoiceInteractionSession; +import android.text.TextUtils; import android.util.ArraySet; import android.util.EventLog; import android.util.Log; @@ -2054,23 +2055,28 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } static boolean canLaunchDreamActivity(String packageName) { - final DreamManagerInternal dreamManager = - LocalServices.getService(DreamManagerInternal.class); - - // Verify that the package is the current active dream. The getActiveDreamComponent() - // call path does not acquire the DreamManager lock and thus is safe to use. - final ComponentName activeDream = dreamManager.getActiveDreamComponent(false /* doze */); - if (activeDream == null || activeDream.getPackageName() == null - || !activeDream.getPackageName().equals(packageName)) { + if (packageName == null) { return false; } - // Verify that the device is dreaming. if (!LocalServices.getService(ActivityTaskManagerInternal.class).isDreaming()) { return false; } - return true; + final DreamManagerInternal dreamManager = + LocalServices.getService(DreamManagerInternal.class); + + // Verify that the package is the current active dream or doze component. The + // getActiveDreamComponent() call path does not acquire the DreamManager lock and thus + // is safe to use. + final ComponentName activeDream = dreamManager.getActiveDreamComponent(false /* doze */); + final ComponentName activeDoze = dreamManager.getActiveDreamComponent(true /* doze */); + return TextUtils.equals(packageName, getPackageName(activeDream)) + || TextUtils.equals(packageName, getPackageName(activeDoze)); + } + + private static String getPackageName(ComponentName componentName) { + return componentName != null ? componentName.getPackageName() : null; } private void setActivityType(boolean componentSpecified, int launchedFromUid, Intent intent, |