summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/companion/virtual/IVirtualDeviceManager.aidl3
-rw-r--r--core/java/android/companion/virtual/VirtualDeviceInternal.java2
-rw-r--r--core/java/android/companion/virtual/VirtualDeviceParams.java21
-rw-r--r--core/java/android/companion/virtual/sensor/VirtualSensorConfig.java5
-rw-r--r--services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java17
-rw-r--r--services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java12
-rw-r--r--services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java5
7 files changed, 51 insertions, 14 deletions
diff --git a/core/java/android/companion/virtual/IVirtualDeviceManager.aidl b/core/java/android/companion/virtual/IVirtualDeviceManager.aidl
index ee7836f0f7f0..ed8484fe7266 100644
--- a/core/java/android/companion/virtual/IVirtualDeviceManager.aidl
+++ b/core/java/android/companion/virtual/IVirtualDeviceManager.aidl
@@ -21,6 +21,7 @@ import android.companion.virtual.IVirtualDeviceActivityListener;
import android.companion.virtual.IVirtualDeviceSoundEffectListener;
import android.companion.virtual.VirtualDevice;
import android.companion.virtual.VirtualDeviceParams;
+import android.content.AttributionSource;
import android.hardware.display.IVirtualDisplayCallback;
import android.hardware.display.VirtualDisplayConfig;
@@ -46,7 +47,7 @@ interface IVirtualDeviceManager {
*/
@EnforcePermission("CREATE_VIRTUAL_DEVICE")
IVirtualDevice createVirtualDevice(
- in IBinder token, String packageName, int associationId,
+ in IBinder token, in AttributionSource attributionSource, int associationId,
in VirtualDeviceParams params, in IVirtualDeviceActivityListener activityListener,
in IVirtualDeviceSoundEffectListener soundEffectListener);
diff --git a/core/java/android/companion/virtual/VirtualDeviceInternal.java b/core/java/android/companion/virtual/VirtualDeviceInternal.java
index f68cfff1c053..d13bfd4f6229 100644
--- a/core/java/android/companion/virtual/VirtualDeviceInternal.java
+++ b/core/java/android/companion/virtual/VirtualDeviceInternal.java
@@ -145,7 +145,7 @@ public class VirtualDeviceInternal {
mContext = context.getApplicationContext();
mVirtualDevice = service.createVirtualDevice(
new Binder(),
- mContext.getPackageName(),
+ mContext.getAttributionSource(),
associationId,
params,
mActivityListenerBinder,
diff --git a/core/java/android/companion/virtual/VirtualDeviceParams.java b/core/java/android/companion/virtual/VirtualDeviceParams.java
index 45d6dc62bfe8..b6d837589284 100644
--- a/core/java/android/companion/virtual/VirtualDeviceParams.java
+++ b/core/java/android/companion/virtual/VirtualDeviceParams.java
@@ -43,6 +43,7 @@ import android.util.ArraySet;
import android.util.SparseArray;
import android.util.SparseIntArray;
+import java.io.PrintWriter;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -501,6 +502,26 @@ public final class VirtualDeviceParams implements Parcelable {
+ ")";
}
+ /**
+ * Dumps debugging information about the VirtualDeviceParams
+ * @hide
+ */
+ public void dump(PrintWriter pw, String prefix) {
+ pw.println(prefix + "mName=" + mName);
+ pw.println(prefix + "mLockState=" + mLockState);
+ pw.println(prefix + "mUsersWithMatchingAccounts=" + mUsersWithMatchingAccounts);
+ pw.println(prefix + "mAllowedCrossTaskNavigations=" + mAllowedCrossTaskNavigations);
+ pw.println(prefix + "mBlockedCrossTaskNavigations=" + mBlockedCrossTaskNavigations);
+ pw.println(prefix + "mAllowedActivities=" + mAllowedActivities);
+ pw.println(prefix + "mBlockedActivities=" + mBlockedActivities);
+ pw.println(prefix + "mDevicePolicies=" + mDevicePolicies);
+ pw.println(prefix + "mDefaultNavigationPolicy=" + mDefaultNavigationPolicy);
+ pw.println(prefix + "mDefaultActivityPolicy=" + mDefaultActivityPolicy);
+ pw.println(prefix + "mVirtualSensorConfigs=" + mVirtualSensorConfigs);
+ pw.println(prefix + "mAudioPlaybackSessionId=" + mAudioPlaybackSessionId);
+ pw.println(prefix + "mAudioRecordingSessionId=" + mAudioRecordingSessionId);
+ }
+
@NonNull
public static final Parcelable.Creator<VirtualDeviceParams> CREATOR =
new Parcelable.Creator<VirtualDeviceParams>() {
diff --git a/core/java/android/companion/virtual/sensor/VirtualSensorConfig.java b/core/java/android/companion/virtual/sensor/VirtualSensorConfig.java
index 3bdf9aa8015b..0dbe411a400e 100644
--- a/core/java/android/companion/virtual/sensor/VirtualSensorConfig.java
+++ b/core/java/android/companion/virtual/sensor/VirtualSensorConfig.java
@@ -104,6 +104,11 @@ public final class VirtualSensorConfig implements Parcelable {
parcel.writeInt(mFlags);
}
+ @Override
+ public String toString() {
+ return "VirtualSensorConfig{" + "mType=" + mType + ", mName='" + mName + '\'' + '}';
+ }
+
/**
* Returns the type of the sensor.
*
diff --git a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java
index ee6c28ed3fe1..d1be5a9e971d 100644
--- a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java
+++ b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java
@@ -43,6 +43,7 @@ import android.companion.virtual.audio.IAudioConfigChangedCallback;
import android.companion.virtual.audio.IAudioRoutingCallback;
import android.companion.virtual.sensor.VirtualSensor;
import android.companion.virtual.sensor.VirtualSensorEvent;
+import android.content.AttributionSource;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -125,6 +126,7 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
private final VirtualDeviceManagerService mService;
private final PendingTrampolineCallback mPendingTrampolineCallback;
private final int mOwnerUid;
+ private final String mOwnerPackageName;
private int mDeviceId;
private @Nullable String mPersistentDeviceId;
// Thou shall not hold the mVirtualDeviceLock over the mInputController calls.
@@ -196,7 +198,7 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
AssociationInfo associationInfo,
VirtualDeviceManagerService service,
IBinder token,
- int ownerUid,
+ AttributionSource attributionSource,
int deviceId,
CameraAccessController cameraAccessController,
PendingTrampolineCallback pendingTrampolineCallback,
@@ -209,7 +211,7 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
associationInfo,
service,
token,
- ownerUid,
+ attributionSource,
deviceId,
/* inputController= */ null,
cameraAccessController,
@@ -227,7 +229,7 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
AssociationInfo associationInfo,
VirtualDeviceManagerService service,
IBinder token,
- int ownerUid,
+ AttributionSource attributionSource,
int deviceId,
InputController inputController,
CameraAccessController cameraAccessController,
@@ -238,7 +240,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
VirtualDeviceParams params,
DisplayManagerGlobal displayManager) {
super(PermissionEnforcer.fromContext(context));
- UserHandle ownerUserHandle = UserHandle.getUserHandleForUid(ownerUid);
+ mOwnerPackageName = attributionSource.getPackageName();
+ UserHandle ownerUserHandle = UserHandle.getUserHandleForUid(attributionSource.getUid());
mContext = context.createContextAsUser(ownerUserHandle, 0);
mAssociationInfo = associationInfo;
mPersistentDeviceId = PERSISTENT_ID_PREFIX_CDM_ASSOCIATION + associationInfo.getId();
@@ -247,7 +250,7 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
mActivityListener = activityListener;
mSoundEffectListener = soundEffectListener;
mRunningAppsChangedCallback = runningAppsChangedCallback;
- mOwnerUid = ownerUid;
+ mOwnerUid = attributionSource.getUid();
mDeviceId = deviceId;
mAppToken = token;
mParams = params;
@@ -771,7 +774,9 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
fout.println(" VirtualDevice: ");
fout.println(" mDeviceId: " + mDeviceId);
fout.println(" mAssociationId: " + mAssociationInfo.getId());
- fout.println(" mParams: " + mParams);
+ fout.println(" mOwnerPackageName: " + mOwnerPackageName);
+ fout.println(" mParams: ");
+ mParams.dump(fout, " ");
fout.println(" mVirtualDisplayIds: ");
synchronized (mVirtualDeviceLock) {
for (int i = 0; i < mVirtualDisplays.size(); i++) {
diff --git a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java
index 77508a8fcc0d..e558498e4715 100644
--- a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java
+++ b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java
@@ -35,6 +35,7 @@ import android.companion.virtual.VirtualDevice;
import android.companion.virtual.VirtualDeviceManager;
import android.companion.virtual.VirtualDeviceParams;
import android.companion.virtual.sensor.VirtualSensor;
+import android.content.AttributionSource;
import android.content.Context;
import android.content.Intent;
import android.hardware.display.IVirtualDisplayCallback;
@@ -314,13 +315,15 @@ public class VirtualDeviceManagerService extends SystemService {
@Override // Binder call
public IVirtualDevice createVirtualDevice(
IBinder token,
- String packageName,
+ AttributionSource attributionSource,
int associationId,
@NonNull VirtualDeviceParams params,
@NonNull IVirtualDeviceActivityListener activityListener,
@NonNull IVirtualDeviceSoundEffectListener soundEffectListener) {
createVirtualDevice_enforcePermission();
+ attributionSource.enforceCallingUid();
final int callingUid = getCallingUid();
+ final String packageName = attributionSource.getPackageName();
if (!PermissionUtils.validateCallingPackageName(getContext(), packageName)) {
throw new SecurityException(
"Package name " + packageName + " does not belong to calling uid "
@@ -340,10 +343,9 @@ public class VirtualDeviceManagerService extends SystemService {
final int deviceId = sNextUniqueIndex.getAndIncrement();
final Consumer<ArraySet<Integer>> runningAppsChangedCallback =
runningUids -> notifyRunningAppsChanged(deviceId, runningUids);
- VirtualDeviceImpl virtualDevice = new VirtualDeviceImpl(getContext(),
- associationInfo, VirtualDeviceManagerService.this, token, callingUid,
- deviceId, cameraAccessController,
- mPendingTrampolineCallback, activityListener,
+ VirtualDeviceImpl virtualDevice = new VirtualDeviceImpl(getContext(), associationInfo,
+ VirtualDeviceManagerService.this, token, attributionSource, deviceId,
+ cameraAccessController, mPendingTrampolineCallback, activityListener,
soundEffectListener, runningAppsChangedCallback, params);
synchronized (mVirtualDeviceManagerLock) {
if (mVirtualDevices.size() == 0) {
diff --git a/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java
index bcbbcd4456ee..908afc861f8b 100644
--- a/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java
@@ -61,6 +61,7 @@ import android.companion.virtual.sensor.IVirtualSensorCallback;
import android.companion.virtual.sensor.VirtualSensor;
import android.companion.virtual.sensor.VirtualSensorCallback;
import android.companion.virtual.sensor.VirtualSensorConfig;
+import android.content.AttributionSource;
import android.content.ComponentName;
import android.content.Context;
import android.content.ContextWrapper;
@@ -1729,7 +1730,9 @@ public class VirtualDeviceManagerServiceTest {
private VirtualDeviceImpl createVirtualDevice(int virtualDeviceId, int ownerUid,
VirtualDeviceParams params) {
VirtualDeviceImpl virtualDeviceImpl = new VirtualDeviceImpl(mContext,
- mAssociationInfo, mVdms, new Binder(), ownerUid, virtualDeviceId,
+ mAssociationInfo, mVdms, new Binder(),
+ new AttributionSource(ownerUid, "com.android.virtualdevice.test", "virtualdevice"),
+ virtualDeviceId,
mInputController, mCameraAccessController,
mPendingTrampolineCallback, mActivityListener, mSoundEffectListener,
mRunningAppsChangedCallback, params, new DisplayManagerGlobal(mIDisplayManager));