diff options
-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, |