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

Commit 389bf56b 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
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:558bf873fa3683962e0002bc5061032be56d3bb4)
Merged-In: Iff49ff89ea2367187f8ba34bad6730a1bb6f3738
Change-Id: Iff49ff89ea2367187f8ba34bad6730a1bb6f3738
parent b88d7399
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -18,10 +18,15 @@ 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.wm.shell.common.annotations.ExternalThread;
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 java.util.concurrent.Executor;
@@ -74,6 +79,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
@@ -494,6 +494,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
@@ -1105,6 +1114,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;
+11 −1
Original line number Diff line number Diff line
@@ -115,7 +115,17 @@ flag {
}

flag {
    name: "notifications_background_media_icons"
   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"
    description: "Updates icons for media notifications in the background."
    bug: "315143160"
+29 −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,3 +31,30 @@ 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,
        PRIVATE,
        CLONED
    }
}
+19 −4
Original line number Diff line number Diff line
@@ -55,9 +55,8 @@ 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,
@@ -66,7 +65,23 @@ constructor(
                        it.baseIntent?.component,
                        it.taskDescription?.backgroundColor,
                        isForegroundTask = it.taskId in foregroundTaskIds && it.isVisible
                        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