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

Commit 0e373661 authored by Maryam Dehaini's avatar Maryam Dehaini
Browse files

Open intent in correct user profile

Uses Context#startActivityAsUser so that activity is opened in correct
user profile.

Bug: 354782324
Test: open in browser from secondary user
Flag: EXEMPT bugfix
Change-Id: I3ffbeb1bf752a2ee2f2cfa43b4bebe2dff2778a3
parent 9d2ee3f3
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -487,16 +487,16 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
        if (decoration == null) {
            return;
        }
        openInBrowser(uri);
        openInBrowser(uri, decoration.getUser());
        decoration.closeHandleMenu();
        decoration.closeMaximizeMenu();
    }

    private void openInBrowser(Uri uri) {
    private void openInBrowser(Uri uri, @NonNull UserHandle userHandle) {
        final Intent intent = Intent.makeMainSelectorActivity(ACTION_MAIN, CATEGORY_APP_BROWSER)
                .setData(uri)
                .addFlags(FLAG_ACTIVITY_NEW_TASK);
        mContext.startActivity(intent);
        mContext.startActivityAsUser(intent, userHandle);
    }

    private void onToDesktop(int taskId, DesktopModeTransitionSource source) {
+5 −0
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Handler;
import android.os.Trace;
import android.os.UserHandle;
import android.util.Size;
import android.util.Slog;
import android.view.Choreographer;
@@ -480,6 +481,10 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
        return mGenericLink;
    }

    UserHandle getUser() {
        return mUserContext.getUser();
    }

    private void updateDragResizeListener(SurfaceControl oldDecorationSurface) {
        if (!isDragResizable(mTaskInfo)) {
            if (!mTaskInfo.positionInParent.equals(mPositionInParent)) {
+5 −2
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.hardware.display.VirtualDisplay
import android.hardware.input.InputManager
import android.net.Uri
import android.os.Handler
import android.os.UserHandle
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.platform.test.flag.junit.CheckFlagsRule
@@ -160,6 +161,7 @@ class DesktopModeWindowDecorViewModelTests : ShellTestCase() {
    @Mock private lateinit var mockWindowManager: IWindowManager
    @Mock private lateinit var mockInteractionJankMonitor: InteractionJankMonitor
    @Mock private lateinit var mockGenericLinksParser: AppToWebGenericLinksParser
    @Mock private lateinit var mockUserHandle: UserHandle
    @Mock private lateinit var mockToast: Toast
    private val bgExecutor = TestShellExecutor()
    @Mock private lateinit var mockMultiInstanceHelper: MultiInstanceHelper
@@ -853,12 +855,12 @@ class DesktopModeWindowDecorViewModelTests : ShellTestCase() {

        openInBrowserListenerCaptor.value.accept(uri)

        verify(spyContext).startActivity(argThat { intent ->
        verify(spyContext).startActivityAsUser(argThat { intent ->
            intent.data == uri
                    && ((intent.flags and Intent.FLAG_ACTIVITY_NEW_TASK) != 0)
                    && intent.categories.contains(Intent.CATEGORY_LAUNCHER)
                    && intent.action == Intent.ACTION_MAIN
        })
        }, eq(mockUserHandle))
    }

    @Test
@@ -1069,6 +1071,7 @@ class DesktopModeWindowDecorViewModelTests : ShellTestCase() {
        ).thenReturn(decoration)
        decoration.mTaskInfo = task
        whenever(decoration.isFocused).thenReturn(task.isFocused)
        whenever(decoration.user).thenReturn(mockUserHandle)
        if (task.windowingMode == WINDOWING_MODE_MULTI_WINDOW) {
            whenever(mockSplitScreenController.isTaskInSplitScreen(task.taskId))
                .thenReturn(true)