summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java26
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,