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

Commit 696a4143 authored by Marco Loaiza's avatar Marco Loaiza
Browse files

Add method to get deviceId from display in vdm

Test: atest VirtualDeviceManagerServiceTest

Bug: 253201821
Change-Id: If8099a1e9e698a52d9d28486978e2d5e2016e695
parent 09e7579a
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -51,6 +51,11 @@ interface IVirtualDeviceManager {
     */
    List<VirtualDevice> getVirtualDevices();

   /**
     * Returns the ID of the device which owns the display with the given ID.
     */
    int getDeviceIdForDisplayId(int displayId);

    /**
     * Returns the device policy for the given virtual device and policy type.
     */
+17 −0
Original line number Diff line number Diff line
@@ -230,6 +230,23 @@ public final class VirtualDeviceManager {
        }
    }

    /**
     * Returns the ID of the device which owns the display with the given ID.
     *
     * @hide
     */
    public int getDeviceIdForDisplayId(int displayId) {
        if (mService == null) {
            Log.w(TAG, "Failed to retrieve virtual devices; no virtual device manager service.");
            return DEFAULT_DEVICE_ID;
        }
        try {
            return mService.getDeviceIdForDisplayId(displayId);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * A virtual device has its own virtual display, audio output, microphone, and camera etc. The
     * creator of a virtual device can take the output from the virtual display and stream it over
+18 −0
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ import android.util.ArraySet;
import android.util.ExceptionUtils;
import android.util.Slog;
import android.util.SparseArray;
import android.view.Display;
import android.widget.Toast;

import com.android.internal.annotations.GuardedBy;
@@ -388,6 +389,23 @@ public class VirtualDeviceManagerService extends SystemService {
            return mLocalService.getDevicePolicy(deviceId, policyType);
        }


        @Override // Binder call
        public int getDeviceIdForDisplayId(int displayId) {
            if (displayId == Display.INVALID_DISPLAY || displayId == Display.DEFAULT_DISPLAY) {
                return VirtualDeviceManager.DEFAULT_DEVICE_ID;
            }
            synchronized (mVirtualDeviceManagerLock) {
                for (int i = 0; i < mVirtualDevices.size(); i++) {
                    VirtualDeviceImpl virtualDevice = mVirtualDevices.valueAt(i);
                    if (virtualDevice.isDisplayOwnedByVirtualDevice(displayId)) {
                        return virtualDevice.getDeviceId();
                    }
                }
            }
            return VirtualDeviceManager.DEFAULT_DEVICE_ID;
        }

        @Nullable
        private AssociationInfo getAssociationInfo(String packageName, int associationId) {
            final int callingUserId = getCallingUserHandle().getIdentifier();
+58 −9
Original line number Diff line number Diff line
@@ -84,6 +84,7 @@ import android.platform.test.annotations.Presubmit;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.util.ArraySet;
import android.view.Display;
import android.view.DisplayInfo;
import android.view.KeyEvent;
import android.view.WindowManager;
@@ -304,15 +305,50 @@ public class VirtualDeviceManagerServiceTest {
        mVdms = new VirtualDeviceManagerService(mContext);
        mLocalService = mVdms.getLocalServiceInstance();

        VirtualDeviceParams params = new VirtualDeviceParams
                .Builder()
                .setBlockedActivities(getBlockedActivities())
                .build();
        mDeviceImpl = new VirtualDeviceImpl(mContext,
                mAssociationInfo, new Binder(), /* ownerUid */ 0, VIRTUAL_DEVICE_ID,
                mInputController, mSensorController, (int associationId) -> {},
                mPendingTrampolineCallback, mActivityListener, mRunningAppsChangedCallback, params);
        mVdms.addVirtualDevice(mDeviceImpl);
        mDeviceImpl = createVirtualDevice(VIRTUAL_DEVICE_ID);
    }

    @Test
    public void getDeviceIdForDisplayId_invalidDisplayId_returnsDefault() {
        VirtualDeviceManagerService.VirtualDeviceManagerImpl vdm =
                mVdms.new VirtualDeviceManagerImpl();

        assertThat(
                vdm.getDeviceIdForDisplayId(Display.INVALID_DISPLAY))
                .isEqualTo(VirtualDeviceManager.DEFAULT_DEVICE_ID);
    }

    @Test
    public void getDeviceIdForDisplayId_defaultDisplayId_returnsDefault() {
        VirtualDeviceManagerService.VirtualDeviceManagerImpl vdm =
                mVdms.new VirtualDeviceManagerImpl();

        assertThat(
                vdm.getDeviceIdForDisplayId(Display.DEFAULT_DISPLAY))
                .isEqualTo(VirtualDeviceManager.DEFAULT_DEVICE_ID);
    }

    @Test
    public void getDeviceIdForDisplayId_nonExistentDisplayId_returnsDefault() {
        VirtualDeviceManagerService.VirtualDeviceManagerImpl vdm =
                mVdms.new VirtualDeviceManagerImpl();
        int nonExistentDisplayId = 999;

        assertThat(
                vdm.getDeviceIdForDisplayId(nonExistentDisplayId))
                .isEqualTo(VirtualDeviceManager.DEFAULT_DEVICE_ID);
    }

    @Test
    public void getDeviceIdForDisplayId_withValidVirtualDisplayId_returnsDeviceId() {
        VirtualDeviceManagerService.VirtualDeviceManagerImpl vdm =
                mVdms.new VirtualDeviceManagerImpl();
        VirtualDeviceImpl virtualDevice = createVirtualDevice(/* virtualDeviceId */ 1000);
        virtualDevice.mVirtualDisplayIds.add(DISPLAY_ID);

        assertThat(
                vdm.getDeviceIdForDisplayId(DISPLAY_ID))
                .isEqualTo(1000);
    }

    @Test
@@ -1161,4 +1197,17 @@ public class VirtualDeviceManagerServiceTest {
                intent.filterEquals(blockedAppIntent)), any(), any());
    }

    private VirtualDeviceImpl createVirtualDevice(int virtualDeviceId) {
        VirtualDeviceParams params = new VirtualDeviceParams
                .Builder()
                .setBlockedActivities(getBlockedActivities())
                .build();
        VirtualDeviceImpl virtualDeviceImpl = new VirtualDeviceImpl(mContext,
                mAssociationInfo, new Binder(), /* ownerUid */ 0, virtualDeviceId,
                mInputController, mSensorController, (int associationId) -> {},
                mPendingTrampolineCallback, mActivityListener, mRunningAppsChangedCallback, params);
        mVdms.addVirtualDevice(virtualDeviceImpl);
        return virtualDeviceImpl;
    }

}