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

Commit b2041717 authored by Ján Sebechlebský's avatar Ján Sebechlebský Committed by Automerger Merge Worker
Browse files

Merge "Refactor virtual display creation and cleanup" into udc-dev am: 940e020a

parents 0dfd81e5 940e020a
Loading
Loading
Loading
Loading
+223 −119

File changed.

Preview size limit exceeded, changes collapsed.

+64 −82
Original line number Diff line number Diff line
@@ -37,7 +37,6 @@ import android.companion.virtual.VirtualDeviceParams;
import android.companion.virtual.sensor.VirtualSensor;
import android.content.Context;
import android.content.Intent;
import android.hardware.display.DisplayManagerInternal;
import android.hardware.display.IVirtualDisplayCallback;
import android.hardware.display.VirtualDisplayConfig;
import android.os.Binder;
@@ -193,12 +192,21 @@ public class VirtualDeviceManagerService extends SystemService {
        }
    }

    @VisibleForTesting
    void removeVirtualDevice(int deviceId) {
        synchronized (mVirtualDeviceManagerLock) {
            mAppsOnVirtualDevices.remove(deviceId);
            mVirtualDevices.remove(deviceId);
        }

        Intent i = new Intent(VirtualDeviceManager.ACTION_VIRTUAL_DEVICE_REMOVED);
        i.putExtra(VirtualDeviceManager.EXTRA_VIRTUAL_DEVICE_ID, deviceId);
        i.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
        final long identity = Binder.clearCallingIdentity();
        try {
            getContext().sendBroadcastAsUser(i, UserHandle.ALL);
        } finally {
            Binder.restoreCallingIdentity(identity);
        }
    }

    class VirtualDeviceManagerImpl extends IVirtualDeviceManager.Stub {
@@ -206,7 +214,8 @@ public class VirtualDeviceManagerService extends SystemService {
        private final VirtualDeviceImpl.PendingTrampolineCallback mPendingTrampolineCallback =
                new VirtualDeviceImpl.PendingTrampolineCallback() {
                    @Override
            public void startWaitingForPendingTrampoline(PendingTrampoline pendingTrampoline) {
                    public void startWaitingForPendingTrampoline(
                            PendingTrampoline pendingTrampoline) {
                        PendingTrampoline existing = mPendingTrampolines.put(
                                pendingTrampoline.mPendingIntent.getCreatorPackage(),
                                pendingTrampoline);
@@ -217,8 +226,10 @@ public class VirtualDeviceManagerService extends SystemService {
                    }

                    @Override
            public void stopWaitingForPendingTrampoline(PendingTrampoline pendingTrampoline) {
                mPendingTrampolines.remove(pendingTrampoline.mPendingIntent.getCreatorPackage());
                    public void stopWaitingForPendingTrampoline(
                            PendingTrampoline pendingTrampoline) {
                        mPendingTrampolines.remove(
                                pendingTrampoline.mPendingIntent.getCreatorPackage());
                    }
                };

@@ -251,8 +262,9 @@ public class VirtualDeviceManagerService extends SystemService {
                final Consumer<ArraySet<Integer>> runningAppsChangedCallback =
                        runningUids -> notifyRunningAppsChanged(deviceId, runningUids);
                VirtualDeviceImpl virtualDevice = new VirtualDeviceImpl(getContext(),
                        associationInfo, token, callingUid, deviceId, cameraAccessController,
                        this::onDeviceClosed, mPendingTrampolineCallback, activityListener,
                        associationInfo, VirtualDeviceManagerService.this, token, callingUid,
                        deviceId, cameraAccessController,
                        mPendingTrampolineCallback, activityListener,
                        soundEffectListener, runningAppsChangedCallback, params);
                mVirtualDevices.put(deviceId, virtualDevice);
                return virtualDevice;
@@ -281,26 +293,9 @@ public class VirtualDeviceManagerService extends SystemService {
                        "uid " + callingUid
                                + " is not the owner of the supplied VirtualDevice");
            }
            GenericWindowPolicyController gwpc;
            final long token = Binder.clearCallingIdentity();
            try {
                gwpc = virtualDeviceImpl.createWindowPolicyController(
                    virtualDisplayConfig.getDisplayCategories());
            } finally {
                Binder.restoreCallingIdentity(token);
            }

            DisplayManagerInternal displayManager = getLocalService(
                    DisplayManagerInternal.class);
            int displayId = displayManager.createVirtualDisplay(virtualDisplayConfig, callback,
                    virtualDevice, gwpc, packageName);

            final long tokenTwo = Binder.clearCallingIdentity();
            try {
                virtualDeviceImpl.onVirtualDisplayCreatedLocked(gwpc, displayId);
            } finally {
                Binder.restoreCallingIdentity(tokenTwo);
            }
            int displayId = virtualDeviceImpl.createVirtualDisplay(virtualDisplayConfig, callback,
                    packageName);
            mLocalService.onVirtualDisplayCreated(displayId);
            return displayId;
        }
@@ -412,19 +407,6 @@ public class VirtualDeviceManagerService extends SystemService {
            return null;
        }

        private void onDeviceClosed(int deviceId) {
            removeVirtualDevice(deviceId);
            Intent i = new Intent(VirtualDeviceManager.ACTION_VIRTUAL_DEVICE_REMOVED);
            i.putExtra(VirtualDeviceManager.EXTRA_VIRTUAL_DEVICE_ID, deviceId);
            i.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
            final long identity = Binder.clearCallingIdentity();
            try {
                getContext().sendBroadcastAsUser(i, UserHandle.ALL);
            } finally {
                Binder.restoreCallingIdentity(identity);
            }
        }

        @Override
        public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
                throws RemoteException {
@@ -512,9 +494,14 @@ public class VirtualDeviceManagerService extends SystemService {
        @Override
        public void onVirtualDisplayRemoved(IVirtualDevice virtualDevice, int displayId) {
            final VirtualDisplayListener[] listeners;
            VirtualDeviceImpl virtualDeviceImpl;
            synchronized (mVirtualDeviceManagerLock) {
                ((VirtualDeviceImpl) virtualDevice).onVirtualDisplayRemovedLocked(displayId);
                listeners = mVirtualDisplayListeners.toArray(new VirtualDisplayListener[0]);
                virtualDeviceImpl = mVirtualDevices.get(
                        ((VirtualDeviceImpl) virtualDevice).getDeviceId());
            }
            if (virtualDeviceImpl != null) {
                virtualDeviceImpl.onVirtualDisplayRemoved(displayId);
            }
            mHandler.post(() -> {
                for (VirtualDisplayListener listener : listeners) {
@@ -599,16 +586,11 @@ public class VirtualDeviceManagerService extends SystemService {

        @Override
        public @NonNull ArraySet<Integer> getDisplayIdsForDevice(int deviceId) {
            VirtualDeviceImpl virtualDevice;
            synchronized (mVirtualDeviceManagerLock) {
                int size = mVirtualDevices.size();
                for (int i = 0; i < size; i++) {
                    VirtualDeviceImpl device = mVirtualDevices.valueAt(i);
                    if (device.getDeviceId() == deviceId) {
                        return new ArraySet<>(device.mVirtualDisplayIds);
                    }
                }
                virtualDevice = mVirtualDevices.get(deviceId);
            }
            return new ArraySet<>();
            return virtualDevice == null ? new ArraySet<>() : virtualDevice.getDisplayIds();
        }

        @Override
+119 −121

File changed.

Preview size limit exceeded, changes collapsed.