summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/ContextImpl.java2
-rw-r--r--core/java/android/app/SystemServiceRegistry.java5
-rw-r--r--core/java/android/content/Context.java3
-rw-r--r--services/core/java/com/android/server/wm/ActivityTaskManagerService.java3
-rw-r--r--services/core/java/com/android/server/wm/ActivityTaskSupervisor.java9
5 files changed, 19 insertions, 3 deletions
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index e3ec4937ba2c..4713a3135976 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -2814,7 +2814,7 @@ class ContextImpl extends Context {
public @NonNull Context createDeviceContext(int deviceId) {
if (deviceId != Context.DEVICE_ID_DEFAULT) {
VirtualDeviceManager vdm = getSystemService(VirtualDeviceManager.class);
- if (!vdm.isValidVirtualDeviceId(deviceId)) {
+ if (vdm == null || !vdm.isValidVirtualDeviceId(deviceId)) {
throw new IllegalArgumentException(
"Not a valid ID of the default device or any virtual device: " + deviceId);
}
diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java
index 6d80a44d3d60..83e015357589 100644
--- a/core/java/android/app/SystemServiceRegistry.java
+++ b/core/java/android/app/SystemServiceRegistry.java
@@ -877,6 +877,10 @@ public final class SystemServiceRegistry {
@Override
public VirtualDeviceManager createService(ContextImpl ctx)
throws ServiceNotFoundException {
+ if (!ctx.getPackageManager().hasSystemFeature(
+ PackageManager.FEATURE_COMPANION_DEVICE_SETUP)) {
+ return null;
+ }
IVirtualDeviceManager service = IVirtualDeviceManager.Stub.asInterface(
ServiceManager.getServiceOrThrow(Context.VIRTUAL_DEVICE_SERVICE));
return new VirtualDeviceManager(service, ctx.getOuterContext());
@@ -1648,6 +1652,7 @@ public final class SystemServiceRegistry {
case Context.ETHERNET_SERVICE:
case Context.CONTEXTHUB_SERVICE:
case Context.VIRTUALIZATION_SERVICE:
+ case Context.VIRTUAL_DEVICE_SERVICE:
return null;
}
Slog.wtf(TAG, "Manager wrapper not available: " + name);
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index bebb899cc8c9..beec880e0316 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -5703,6 +5703,9 @@ public abstract class Context {
* Use with {@link #getSystemService(String)} to retrieve a
* {@link android.companion.virtual.VirtualDeviceManager} for managing virtual devices.
*
+ * On devices without {@link PackageManager#FEATURE_COMPANION_DEVICE_SETUP}
+ * system feature the {@link #getSystemService(String)} will return {@code null}.
+ *
* @see #getSystemService(String)
* @see android.companion.virtual.VirtualDeviceManager
*/
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 18be2a355cab..7d478b3c7ca5 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -45,6 +45,7 @@ import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
import static android.content.pm.ConfigurationInfo.GL_ES_VERSION_UNDEFINED;
import static android.content.pm.PackageManager.FEATURE_ACTIVITIES_ON_SECONDARY_DISPLAYS;
import static android.content.pm.PackageManager.FEATURE_CANT_SAVE_STATE;
+import static android.content.pm.PackageManager.FEATURE_COMPANION_DEVICE_SETUP;
import static android.content.pm.PackageManager.FEATURE_EXPANDED_PICTURE_IN_PICTURE;
import static android.content.pm.PackageManager.FEATURE_FREEFORM_WINDOW_MANAGEMENT;
import static android.content.pm.PackageManager.FEATURE_LEANBACK;
@@ -401,6 +402,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
volatile WindowProcessController mHeavyWeightProcess;
boolean mHasHeavyWeightFeature;
boolean mHasLeanbackFeature;
+ boolean mHasCompanionDeviceSetupFeature;
/** The process of the top most activity. */
volatile WindowProcessController mTopApp;
/**
@@ -859,6 +861,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
final PackageManager pm = mContext.getPackageManager();
mHasHeavyWeightFeature = pm.hasSystemFeature(FEATURE_CANT_SAVE_STATE);
mHasLeanbackFeature = pm.hasSystemFeature(FEATURE_LEANBACK);
+ mHasCompanionDeviceSetupFeature = pm.hasSystemFeature(FEATURE_COMPANION_DEVICE_SETUP);
mVrController.onSystemReady();
mRecentTasks.onSystemReadyLocked();
mTaskSupervisor.onSystemReady();
diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
index 089db15130fa..37634f818f4b 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
@@ -1240,8 +1240,13 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
return Context.DEVICE_ID_DEFAULT;
}
if (mVirtualDeviceManager == null) {
- mVirtualDeviceManager =
- mService.mContext.getSystemService(VirtualDeviceManager.class);
+ if (mService.mHasCompanionDeviceSetupFeature) {
+ mVirtualDeviceManager =
+ mService.mContext.getSystemService(VirtualDeviceManager.class);
+ }
+ if (mVirtualDeviceManager == null) {
+ return Context.DEVICE_ID_DEFAULT;
+ }
}
return mVirtualDeviceManager.getDeviceIdForDisplayId(displayId);
}