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

Commit 231b8ccf authored by Marco Loaiza's avatar Marco Loaiza Committed by Android (Google) Code Review
Browse files

Merge "Add method to get deviceId from display in vdm"

parents 50595d14 696a4143
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;
    }

}