Merge "Add checks where fetching vdm could cause NPE" into udc-dev
This commit is contained in:
@@ -2814,7 +2814,7 @@ class ContextImpl extends Context {
|
|||||||
public @NonNull Context createDeviceContext(int deviceId) {
|
public @NonNull Context createDeviceContext(int deviceId) {
|
||||||
if (deviceId != Context.DEVICE_ID_DEFAULT) {
|
if (deviceId != Context.DEVICE_ID_DEFAULT) {
|
||||||
VirtualDeviceManager vdm = getSystemService(VirtualDeviceManager.class);
|
VirtualDeviceManager vdm = getSystemService(VirtualDeviceManager.class);
|
||||||
if (!vdm.isValidVirtualDeviceId(deviceId)) {
|
if (vdm == null || !vdm.isValidVirtualDeviceId(deviceId)) {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"Not a valid ID of the default device or any virtual device: " + deviceId);
|
"Not a valid ID of the default device or any virtual device: " + deviceId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -877,6 +877,10 @@ public final class SystemServiceRegistry {
|
|||||||
@Override
|
@Override
|
||||||
public VirtualDeviceManager createService(ContextImpl ctx)
|
public VirtualDeviceManager createService(ContextImpl ctx)
|
||||||
throws ServiceNotFoundException {
|
throws ServiceNotFoundException {
|
||||||
|
if (!ctx.getPackageManager().hasSystemFeature(
|
||||||
|
PackageManager.FEATURE_COMPANION_DEVICE_SETUP)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
IVirtualDeviceManager service = IVirtualDeviceManager.Stub.asInterface(
|
IVirtualDeviceManager service = IVirtualDeviceManager.Stub.asInterface(
|
||||||
ServiceManager.getServiceOrThrow(Context.VIRTUAL_DEVICE_SERVICE));
|
ServiceManager.getServiceOrThrow(Context.VIRTUAL_DEVICE_SERVICE));
|
||||||
return new VirtualDeviceManager(service, ctx.getOuterContext());
|
return new VirtualDeviceManager(service, ctx.getOuterContext());
|
||||||
@@ -1648,6 +1652,7 @@ public final class SystemServiceRegistry {
|
|||||||
case Context.ETHERNET_SERVICE:
|
case Context.ETHERNET_SERVICE:
|
||||||
case Context.CONTEXTHUB_SERVICE:
|
case Context.CONTEXTHUB_SERVICE:
|
||||||
case Context.VIRTUALIZATION_SERVICE:
|
case Context.VIRTUALIZATION_SERVICE:
|
||||||
|
case Context.VIRTUAL_DEVICE_SERVICE:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
Slog.wtf(TAG, "Manager wrapper not available: " + name);
|
Slog.wtf(TAG, "Manager wrapper not available: " + name);
|
||||||
|
|||||||
@@ -5703,6 +5703,9 @@ public abstract class Context {
|
|||||||
* Use with {@link #getSystemService(String)} to retrieve a
|
* Use with {@link #getSystemService(String)} to retrieve a
|
||||||
* {@link android.companion.virtual.VirtualDeviceManager} for managing virtual devices.
|
* {@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 #getSystemService(String)
|
||||||
* @see android.companion.virtual.VirtualDeviceManager
|
* @see android.companion.virtual.VirtualDeviceManager
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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.ConfigurationInfo.GL_ES_VERSION_UNDEFINED;
|
||||||
import static android.content.pm.PackageManager.FEATURE_ACTIVITIES_ON_SECONDARY_DISPLAYS;
|
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_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_EXPANDED_PICTURE_IN_PICTURE;
|
||||||
import static android.content.pm.PackageManager.FEATURE_FREEFORM_WINDOW_MANAGEMENT;
|
import static android.content.pm.PackageManager.FEATURE_FREEFORM_WINDOW_MANAGEMENT;
|
||||||
import static android.content.pm.PackageManager.FEATURE_LEANBACK;
|
import static android.content.pm.PackageManager.FEATURE_LEANBACK;
|
||||||
@@ -401,6 +402,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
|||||||
volatile WindowProcessController mHeavyWeightProcess;
|
volatile WindowProcessController mHeavyWeightProcess;
|
||||||
boolean mHasHeavyWeightFeature;
|
boolean mHasHeavyWeightFeature;
|
||||||
boolean mHasLeanbackFeature;
|
boolean mHasLeanbackFeature;
|
||||||
|
boolean mHasCompanionDeviceSetupFeature;
|
||||||
/** The process of the top most activity. */
|
/** The process of the top most activity. */
|
||||||
volatile WindowProcessController mTopApp;
|
volatile WindowProcessController mTopApp;
|
||||||
/**
|
/**
|
||||||
@@ -859,6 +861,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
|||||||
final PackageManager pm = mContext.getPackageManager();
|
final PackageManager pm = mContext.getPackageManager();
|
||||||
mHasHeavyWeightFeature = pm.hasSystemFeature(FEATURE_CANT_SAVE_STATE);
|
mHasHeavyWeightFeature = pm.hasSystemFeature(FEATURE_CANT_SAVE_STATE);
|
||||||
mHasLeanbackFeature = pm.hasSystemFeature(FEATURE_LEANBACK);
|
mHasLeanbackFeature = pm.hasSystemFeature(FEATURE_LEANBACK);
|
||||||
|
mHasCompanionDeviceSetupFeature = pm.hasSystemFeature(FEATURE_COMPANION_DEVICE_SETUP);
|
||||||
mVrController.onSystemReady();
|
mVrController.onSystemReady();
|
||||||
mRecentTasks.onSystemReadyLocked();
|
mRecentTasks.onSystemReadyLocked();
|
||||||
mTaskSupervisor.onSystemReady();
|
mTaskSupervisor.onSystemReady();
|
||||||
|
|||||||
@@ -1239,9 +1239,14 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
|
|||||||
return Context.DEVICE_ID_DEFAULT;
|
return Context.DEVICE_ID_DEFAULT;
|
||||||
}
|
}
|
||||||
if (mVirtualDeviceManager == null) {
|
if (mVirtualDeviceManager == null) {
|
||||||
|
if (mService.mHasCompanionDeviceSetupFeature) {
|
||||||
mVirtualDeviceManager =
|
mVirtualDeviceManager =
|
||||||
mService.mContext.getSystemService(VirtualDeviceManager.class);
|
mService.mContext.getSystemService(VirtualDeviceManager.class);
|
||||||
}
|
}
|
||||||
|
if (mVirtualDeviceManager == null) {
|
||||||
|
return Context.DEVICE_ID_DEFAULT;
|
||||||
|
}
|
||||||
|
}
|
||||||
return mVirtualDeviceManager.getDeviceIdForDisplayId(displayId);
|
return mVirtualDeviceManager.getDeviceIdForDisplayId(displayId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user