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

Commit 924ff30a authored by Vladimir Komsiyski's avatar Vladimir Komsiyski Committed by Android (Google) Code Review
Browse files

Merge "Get the user's main display instead of hardcoding DEFAULT_DISPLAY" into main

parents 8b8cebe7 6d030047
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -135,6 +135,7 @@ final class ComputerControlSessionImpl extends IComputerControlSession.Stub
    private final OnClosedListener mOnClosedListener;
    private final IVirtualDevice mVirtualDevice;
    private final int mVirtualDisplayId;
    private final int mMainDisplayId;
    private final IVirtualDisplayCallback mVirtualDisplayToken;
    private final IVirtualInputDevice mVirtualTouchscreen;
    private final IVirtualInputDevice mVirtualDpad;
@@ -163,6 +164,9 @@ final class ComputerControlSessionImpl extends IComputerControlSession.Stub
        mOwnerPackageName = attributionSource.getPackageName();
        mOnClosedListener = onClosedListener;
        mInjector = injector;
        // TODO(b/440005498): Consider using the display from the app's context instead.
        mMainDisplayId = injector.getMainDisplayIdForUser(
                UserHandle.getUserId(attributionSource.getUid()));

        final VirtualDeviceParams virtualDeviceParams = new VirtualDeviceParams.Builder()
                .setName(mParams.getName())
@@ -189,8 +193,7 @@ final class ComputerControlSessionImpl extends IComputerControlSession.Stub
        final VirtualDisplayConfig virtualDisplayConfig;
        if (params.getDisplaySurface() == null) {
            displayFlags |= DisplayManager.VIRTUAL_DISPLAY_FLAG_ALWAYS_UNLOCKED;
            final DisplayInfo defaultDisplayInfo =
                    mInjector.getDisplayInfo(Display.DEFAULT_DISPLAY);
            final DisplayInfo defaultDisplayInfo = mInjector.getDisplayInfo(mMainDisplayId);
            mDisplayWidth = defaultDisplayInfo.logicalWidth;
            mDisplayHeight = defaultDisplayInfo.logicalHeight;
            virtualDisplayConfig = new VirtualDisplayConfig.Builder(
@@ -328,7 +331,7 @@ final class ComputerControlSessionImpl extends IComputerControlSession.Stub
            mVirtualDevice.addActivityPolicyExemption(
                    new ActivityPolicyExemption.Builder().setPackageName(packageName).build());
        }
        final UserHandle user = UserHandle.of(UserHandle.getUserId(Binder.getCallingUid()));
        final UserHandle user = Binder.getCallingUserHandle();
        Binder.withCleanCallingIdentity(() -> mInjector.launchApplicationOnDisplayAsUser(
                packageName, mVirtualDisplayId, user));
        notifyApplicationLaunchToStabilityCalculator();
@@ -744,6 +747,10 @@ final class ComputerControlSessionImpl extends IComputerControlSession.Stub
            return (long) (ViewConfiguration.getLongPressTimeout() * LONG_PRESS_TIMEOUT_MULTIPLIER);
        }

        public int getMainDisplayIdForUser(@UserIdInt int user) {
            return mUserManagerInternal.getMainDisplayAssignedToUser(user);
        }

        public IRemoteComputerControlInputConnection getInputConnection(int displayId) {
            // getUserAssignedToDisplay returns the main userId, if we want to support cross
            // profile CC interactions and typing on CC display, we need to find the right user
+6 −0
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.platform.app.InstrumentationRegistry;

import com.android.server.LocalServices;
import com.android.server.pm.UserManagerInternal;
import com.android.server.wm.WindowManagerInternal;

import org.junit.After;
@@ -87,6 +88,8 @@ public class ComputerControlSessionProcessorTest {
    @Mock
    private WindowManagerInternal mWindowManagerInternal;
    @Mock
    private UserManagerInternal mUserManagerInternal;
    @Mock
    private ComputerControlSessionProcessor.VirtualDeviceFactory mVirtualDeviceFactory;
    @Mock
    private ComputerControlSessionProcessor.PendingIntentFactory mPendingIntentFactory;
@@ -120,6 +123,9 @@ public class ComputerControlSessionProcessorTest {
        LocalServices.removeServiceForTest(WindowManagerInternal.class);
        LocalServices.addService(WindowManagerInternal.class, mWindowManagerInternal);

        LocalServices.removeServiceForTest(UserManagerInternal.class);
        LocalServices.addService(UserManagerInternal.class, mUserManagerInternal);

        mContext = spy(new ContextWrapper(
                InstrumentationRegistry.getInstrumentation().getTargetContext()));
        when(mContext.getSystemService(Context.KEYGUARD_SERVICE)).thenReturn(mKeyguardManager);
+5 −1
Original line number Diff line number Diff line
@@ -93,6 +93,7 @@ public class ComputerControlSessionTest {

    private static final String PERMISSION_CONTROLLER_PACKAGE = "permission.controller.package";

    private static final int MAIN_DISPLAY_ID = 41;
    private static final int VIRTUAL_DISPLAY_ID = 42;
    private static final int DISPLAY_WIDTH = 600;
    private static final int DISPLAY_HEIGHT = 1000;
@@ -147,11 +148,14 @@ public class ComputerControlSessionTest {
    public void setUp() throws Exception {
        mMockitoSession = MockitoAnnotations.openMocks(this);

        when(mInjector.getMainDisplayIdForUser(anyInt())).thenReturn(MAIN_DISPLAY_ID);

        DisplayInfo displayInfo = new DisplayInfo();
        displayInfo.logicalWidth = DISPLAY_WIDTH;
        displayInfo.logicalHeight = DISPLAY_HEIGHT;
        displayInfo.logicalDensityDpi = DISPLAY_DPI;
        when(mInjector.getDisplayInfo(anyInt())).thenReturn(displayInfo);
        when(mInjector.getDisplayInfo(MAIN_DISPLAY_ID)).thenReturn(displayInfo);
        when(mInjector.getDisplayInfo(VIRTUAL_DISPLAY_ID)).thenReturn(displayInfo);

        when(mInjector.getPermissionControllerPackageName())
                .thenReturn(PERMISSION_CONTROLLER_PACKAGE);