Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9ac1adbd authored by tyiu's avatar tyiu
Browse files

Add support for disabling VDM

Since Virtual Device Manager Service is not gaurenteed to be running on
any given devices, platform code should be prepared for cases where VDM
obtained by getSystemService is null.

This change reinforce platform code where such case could throw
NullPointerException.

Bug: 340929246
Test: Local build with VDM disabled + cts + presubmit
Flag: NONE non-feature update
Change-Id: Id33f7e93bcf7813267434ea6703752af537c09ca
parent fd030200
Loading
Loading
Loading
Loading
+22 −10
Original line number Diff line number Diff line
@@ -2303,6 +2303,12 @@ class ContextImpl extends Context {
                && PermissionManager.DEVICE_AWARE_PERMISSIONS.contains(permission)) {
            VirtualDeviceManager virtualDeviceManager =
                    getSystemService(VirtualDeviceManager.class);
            if (virtualDeviceManager == null) {
                Slog.e(
                        TAG,
                        "VDM is not enabled when device id is not default. deviceId = "
                                + deviceId);
            } else {
                VirtualDevice virtualDevice = virtualDeviceManager.getVirtualDevice(deviceId);
                if (virtualDevice != null) {
                    if ((Objects.equals(permission, Manifest.permission.RECORD_AUDIO)
@@ -2318,6 +2324,7 @@ class ContextImpl extends Context {
                                    + deviceId);
                }
            }
        }

        return PermissionManager.checkPermission(permission, pid, uid, deviceId);
    }
@@ -3169,6 +3176,11 @@ class ContextImpl extends Context {
    public void updateDeviceId(int updatedDeviceId) {
        if (updatedDeviceId != Context.DEVICE_ID_DEFAULT) {
            VirtualDeviceManager vdm = getSystemService(VirtualDeviceManager.class);
            if (vdm == null) {
                throw new IllegalArgumentException(
                        "VDM is not enabled when updating to non-default device id: "
                                + updatedDeviceId);
            }
            if (!vdm.isValidVirtualDeviceId(updatedDeviceId)) {
                throw new IllegalArgumentException(
                        "Not a valid ID of the default device or any virtual device: "
+3 −1
Original line number Diff line number Diff line
@@ -347,7 +347,9 @@ public class Camera {

        VirtualDeviceManager virtualDeviceManager =
                context.getSystemService(VirtualDeviceManager.class);
        return virtualDeviceManager.getDevicePolicy(context.getDeviceId(), POLICY_TYPE_CAMERA);
        return virtualDeviceManager == null
                ? DEVICE_POLICY_DEFAULT
                : virtualDeviceManager.getDevicePolicy(context.getDeviceId(), POLICY_TYPE_CAMERA);
    }

    /**
+3 −1
Original line number Diff line number Diff line
@@ -581,7 +581,9 @@ public final class CameraManager {
        if (mVirtualDeviceManager == null) {
            mVirtualDeviceManager = context.getSystemService(VirtualDeviceManager.class);
        }
        return mVirtualDeviceManager.getDevicePolicy(context.getDeviceId(), POLICY_TYPE_CAMERA);
        return mVirtualDeviceManager == null
                ? DEVICE_POLICY_DEFAULT
                : mVirtualDeviceManager.getDevicePolicy(context.getDeviceId(), POLICY_TYPE_CAMERA);
    }

    // TODO(b/147726300): Investigate how to support foldables/multi-display devices.
+13 −11
Original line number Diff line number Diff line
@@ -374,6 +374,8 @@ public class PermissionUsageHelper implements AppOpsManager.OnOpActiveChangedLis
    public @NonNull List<PermissionGroupUsage> getOpUsageDataForAllDevices(
            boolean includeMicrophoneUsage) {
        List<PermissionGroupUsage> allUsages = new ArrayList<>();

        if (mVirtualDeviceManager != null) {
            List<VirtualDevice> virtualDevices = mVirtualDeviceManager.getVirtualDevices();
            ArraySet<String> persistentDeviceIds = new ArraySet<>();

@@ -387,7 +389,7 @@ public class PermissionUsageHelper implements AppOpsManager.OnOpActiveChangedLis
                        getOpUsageDataByDevice(includeMicrophoneUsage,
                                persistentDeviceIds.valueAt(index)));
            }

        }
        return allUsages;
    }

+4 −2
Original line number Diff line number Diff line
@@ -4069,9 +4069,11 @@ public class AudioManager {
    private boolean delegateSoundEffectToVdm(@SystemSoundEffect int effectType) {
        if (hasCustomPolicyVirtualDeviceContext()) {
            VirtualDeviceManager vdm = getVirtualDeviceManager();
            if (vdm != null) {
                vdm.playSoundEffect(mOriginalContextDeviceId, effectType);
                return true;
            }
        }
        return false;
    }

Loading