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

Commit 558bf873 authored by dakinola's avatar dakinola Committed by Daniel Akinola
Browse files

Allow recent apps to be launched with split screen pair from MediaProjectionAppSelector

Updating the logic so that when selecting a recent app to partial screenshare, if it is currently part of a split screen pair, the pair will be launched together

Bug: 320449039
Flag: ACONFIG com.android.systemui.pss_app_selector_recents_split_screeen DISABLED
Test: Manual testing
Test: atest ShellRecentTaskListProviderTest
Test: atest MediaProjectionAppSelectorControllerTest
Test: atest MediaProjectionRecentsViewControllerTest
Change-Id: Iff49ff89ea2367187f8ba34bad6730a1bb6f3738
parent d0eb85b7
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -18,9 +18,14 @@ package com.android.wm.shell.splitscreen;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.graphics.Rect;
import android.os.Bundle;
import android.window.RemoteTransition;

import com.android.internal.logging.InstanceId;
import com.android.wm.shell.common.split.SplitScreenConstants.PersistentSnapPosition;
import com.android.wm.shell.common.split.SplitScreenConstants.SplitPosition;
import com.android.wm.shell.shared.annotations.ExternalThread;

@@ -72,6 +77,12 @@ public interface SplitScreen {
        }
    }

    /** Launches a pair of tasks into splitscreen */
    void startTasks(int taskId1, @Nullable Bundle options1, int taskId2,
            @Nullable Bundle options2, @SplitPosition int splitPosition,
            @PersistentSnapPosition int snapPosition, @Nullable RemoteTransition remoteTransition,
            InstanceId instanceId);

    /** Registers listener that gets split screen callback. */
    void registerSplitScreenListener(@NonNull SplitScreenListener listener,
            @NonNull Executor executor);
+18 −0
Original line number Diff line number Diff line
@@ -506,6 +506,15 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
        return mStageCoordinator.getActivateSplitPosition(taskInfo);
    }

    /** Start two tasks in parallel as a splitscreen pair. */
    public void startTasks(int taskId1, @Nullable Bundle options1, int taskId2,
            @Nullable Bundle options2, @SplitPosition int splitPosition,
            @PersistentSnapPosition int snapPosition,
            @Nullable RemoteTransition remoteTransition, InstanceId instanceId) {
        mStageCoordinator.startTasks(taskId1, options1, taskId2, options2, splitPosition,
                snapPosition, remoteTransition, instanceId);
    }

    /**
     * Move a task to split select
     * @param taskInfo the task being moved to split select
@@ -1119,6 +1128,15 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
            }
        };

        @Override
        public void startTasks(int taskId1, @Nullable Bundle options1, int taskId2,
                @Nullable Bundle options2, int splitPosition, int snapPosition,
                @Nullable RemoteTransition remoteTransition, InstanceId instanceId) {
            mMainExecutor.execute(() -> SplitScreenController.this.startTasks(
                    taskId1, options1, taskId2, options2, splitPosition, snapPosition,
                    remoteTransition, instanceId));
        }

        @Override
        public void registerSplitScreenListener(SplitScreenListener listener, Executor executor) {
            if (mExecutors.containsKey(listener)) return;
+10 −0
Original line number Diff line number Diff line
@@ -147,6 +147,16 @@ flag {
   }
}

flag {
   name: "pss_app_selector_recents_split_screen"
   namespace: "systemui"
   description: "Allows recent apps selected for partial screenshare to be launched in split screen mode"
   bug: "320449039"
   metadata {
        purpose: PURPOSE_BUGFIX
   }
}

flag {
    name: "notifications_background_icons"
    namespace: "systemui"
+20 −0
Original line number Diff line number Diff line
@@ -18,7 +18,9 @@ package com.android.systemui.mediaprojection.appselector.data

import android.annotation.ColorInt
import android.annotation.UserIdInt
import android.app.ActivityManager.RecentTaskInfo
import android.content.ComponentName
import com.android.wm.shell.util.SplitBounds

data class RecentTask(
    val taskId: Int,
@@ -29,7 +31,25 @@ data class RecentTask(
    @ColorInt val colorBackground: Int?,
    val isForegroundTask: Boolean,
    val userType: UserType,
    val splitBounds: SplitBounds?,
) {
    constructor(
        taskInfo: RecentTaskInfo,
        isForegroundTask: Boolean,
        userType: UserType,
        splitBounds: SplitBounds? = null
    ) : this(
        taskInfo.taskId,
        taskInfo.displayId,
        taskInfo.userId,
        taskInfo.topActivity,
        taskInfo.baseIntent?.component,
        taskInfo.taskDescription?.backgroundColor,
        isForegroundTask,
        userType,
        splitBounds
    )

    enum class UserType {
        STANDARD,
        WORK,
+19 −12
Original line number Diff line number Diff line
@@ -58,19 +58,26 @@ constructor(
            val foregroundTaskId1 = foregroundGroup?.taskInfo1?.taskId
            val foregroundTaskId2 = foregroundGroup?.taskInfo2?.taskId
            val foregroundTaskIds = listOfNotNull(foregroundTaskId1, foregroundTaskId2)
            groupedTasks
                .flatMap { listOfNotNull(it.taskInfo1, it.taskInfo2) }
                .map {
            groupedTasks.flatMap {
                val task1 =
                    RecentTask(
                        it.taskId,
                        it.displayId,
                        it.userId,
                        it.topActivity,
                        it.baseIntent?.component,
                        it.taskDescription?.backgroundColor,
                        isForegroundTask = it.taskId in foregroundTaskIds && it.isVisible,
                        userType = userManager.getUserInfo(it.userId).toUserType(),
                        it.taskInfo1,
                        it.taskInfo1.taskId in foregroundTaskIds && it.taskInfo1.isVisible,
                        userManager.getUserInfo(it.taskInfo1.userId).toUserType(),
                        it.splitBounds
                    )

                val task2 =
                    if (it.taskInfo2 != null) {
                        RecentTask(
                            it.taskInfo2!!,
                            it.taskInfo2!!.taskId in foregroundTaskIds && it.taskInfo2!!.isVisible,
                            userManager.getUserInfo(it.taskInfo2!!.userId).toUserType(),
                            it.splitBounds
                        )
                    } else null

                listOfNotNull(task1, task2)
            }
        }

Loading