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

Commit 18724363 authored by Vinit Nayak's avatar Vinit Nayak
Browse files

Add test for granting focus on flex split launch

* Inject IActivityTaskManager instead of getting it from
binder

Bug: 396026394
Flag: com.android.wm.shell.enable_flexible_two_app_split
Change-Id: I2bc438af7fb150aee199429288801e61d4498c61
parent ed87d3ee
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.wm.shell.dagger;

import android.app.IActivityTaskManager;
import android.content.Context;
import android.os.Handler;

@@ -97,12 +98,13 @@ public class TvWMShellModule {
            @ShellMainThread Handler mainHandler,
            SystemWindows systemWindows,
            RootDisplayAreaOrganizer rootDisplayAreaOrganizer,
            DesktopState desktopState) {
            DesktopState desktopState,
            IActivityTaskManager activityTaskManager) {
        return new TvSplitScreenController(context, shellInit, shellCommandHandler, shellController,
                shellTaskOrganizer, syncQueue, rootTDAOrganizer, displayController,
                displayImeController, displayInsetsController, transitions, transactionPool,
                iconProvider, recentTasks, launchAdjacentController, multiInstanceHelper,
                splitState, mainExecutor, mainHandler, systemWindows, rootDisplayAreaOrganizer,
                desktopState);
                desktopState, activityTaskManager);
    }
}
+5 −2
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import static com.android.hardware.input.Flags.manageKeyGestures;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.IActivityTaskManager;
import android.app.KeyguardManager;
import android.content.Context;
import android.content.pm.LauncherApps;
@@ -586,7 +587,8 @@ public abstract class WMShellModule {
            @ShellMainThread ShellExecutor mainExecutor,
            @ShellMainThread Handler mainHandler,
            RootDisplayAreaOrganizer rootDisplayAreaOrganizer,
            DesktopState desktopState) {
            DesktopState desktopState,
            IActivityTaskManager activityTaskManager) {
        return new SplitScreenController(
                context,
                shellInit,
@@ -612,7 +614,8 @@ public abstract class WMShellModule {
                mainExecutor,
                mainHandler,
                rootDisplayAreaOrganizer,
                desktopState);
                desktopState,
                activityTaskManager);
    }

    //
+6 −2
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ import static com.android.wm.shell.splitscreen.SplitScreen.STAGE_TYPE_UNDEFINED;
import android.app.ActivityManager;
import android.app.ActivityOptions;
import android.app.ActivityTaskManager;
import android.app.IActivityTaskManager;
import android.app.PendingIntent;
import android.app.TaskInfo;
import android.content.ComponentName;
@@ -207,6 +208,7 @@ public class SplitScreenController implements SplitDragPolicy.Starter,
    private final MultiInstanceHelper mMultiInstanceHelpher;
    private final SplitState mSplitState;
    private final RootDisplayAreaOrganizer mRootDisplayAreaOrganizer;
    private final IActivityTaskManager mActivityTaskManager;
    private final SplitScreenShellCommandHandler mSplitScreenShellCommandHandler;
    private final DesktopState mDesktopState;

@@ -241,7 +243,8 @@ public class SplitScreenController implements SplitDragPolicy.Starter,
            ShellExecutor mainExecutor,
            Handler mainHandler,
            RootDisplayAreaOrganizer rootDisplayAreaOrganizer,
            DesktopState desktopState) {
            DesktopState desktopState,
            IActivityTaskManager activityTaskManager) {
        mShellCommandHandler = shellCommandHandler;
        mShellController = shellController;
        mTaskOrganizer = shellTaskOrganizer;
@@ -266,6 +269,7 @@ public class SplitScreenController implements SplitDragPolicy.Starter,
        mMultiInstanceHelpher = multiInstanceHelper;
        mSplitState = splitState;
        mRootDisplayAreaOrganizer = rootDisplayAreaOrganizer;
        mActivityTaskManager = activityTaskManager;
        mSplitScreenShellCommandHandler = new SplitScreenShellCommandHandler(this);
        mDesktopState = desktopState;
        // TODO(b/238217847): Temporarily add this check here until we can remove the dynamic
@@ -312,7 +316,7 @@ public class SplitScreenController implements SplitDragPolicy.Starter,
                mDisplayInsetsController, mTransitions, mTransactionPool, mIconProvider,
                mMainExecutor, mMainHandler, mRecentTasksOptional, mLaunchAdjacentController,
                mWindowDecorViewModel, mSplitState, mDesktopTasksController, mRootTDAOrganizer,
                mRootDisplayAreaOrganizer, mDesktopState);
                mRootDisplayAreaOrganizer, mDesktopState, mActivityTaskManager);
    }

    @Override
+8 −5
Original line number Diff line number Diff line
@@ -213,6 +213,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,

    private final int mDisplayId;
    private SplitLayout mSplitLayout;
    private final IActivityTaskManager mActivityTaskManager;
    private ValueAnimator mDividerFadeInAnimator;
    private boolean mDividerVisible;
    private boolean mKeyguardActive;
@@ -388,7 +389,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
            Optional<DesktopTasksController> desktopTasksController,
            RootTaskDisplayAreaOrganizer rootTDAOrganizer,
            RootDisplayAreaOrganizer rootDisplayAreaOrganizer,
            DesktopState desktopState) {
            DesktopState desktopState,
            IActivityTaskManager activityTaskManager) {
        mContext = context;
        mDisplayId = displayId;
        mSyncQueue = syncQueue;
@@ -459,6 +461,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
        mStatusBarHider = new SplitStatusBarHider(taskOrganizer, splitState,
                rootDisplayAreaOrganizer);
        mSplitTransitionModifier = new SplitTransitionModifier();
        mActivityTaskManager = activityTaskManager;
    }

    @VisibleForTesting
@@ -474,7 +477,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
            Optional<DesktopTasksController> desktopTasksController,
            RootTaskDisplayAreaOrganizer rootTDAOrganizer,
            RootDisplayAreaOrganizer rootDisplayAreaOrganizer,
            DesktopState desktopState) {
            DesktopState desktopState,
            IActivityTaskManager activityTaskManager) {
        mContext = context;
        mDisplayId = displayId;
        mSyncQueue = syncQueue;
@@ -487,6 +491,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
        mDisplayInsetsController = displayInsetsController;
        mTransactionPool = transactionPool;
        mSplitLayout = splitLayout;
        mActivityTaskManager = activityTaskManager;
        mSplitTransitions = new SplitScreenTransitions(transactionPool, transitions,
                this::onTransitionAnimationComplete, this);
        mLogger = new SplitscreenEventLogger();
@@ -1638,10 +1643,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
     * Grants focus to the main or the side stages.
     */
    protected void grantFocusToStage(@SplitPosition int stageToFocus) {
        IActivityTaskManager activityTaskManagerService = IActivityTaskManager.Stub.asInterface(
                ServiceManager.getService(Context.ACTIVITY_TASK_SERVICE));
        try {
            activityTaskManagerService.setFocusedTask(getTaskId(stageToFocus));
            mActivityTaskManager.setFocusedTask(getTaskId(stageToFocus));
        } catch (RemoteException | NullPointerException e) {
            ProtoLog.e(WM_SHELL_SPLIT_SCREEN,
                    "Unable to update focus on the chosen stage: %s", e.getMessage());
+9 −3
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.wm.shell.splitscreen.tv;

import static android.view.Display.DEFAULT_DISPLAY;

import android.app.IActivityTaskManager;
import android.content.Context;
import android.os.Handler;

@@ -69,6 +70,7 @@ public class TvSplitScreenController extends SplitScreenController {

    private final Handler mMainHandler;
    private final SystemWindows mSystemWindows;
    private final IActivityTaskManager mActivityTaskManager;

    public TvSplitScreenController(Context context,
            ShellInit shellInit,
@@ -91,13 +93,15 @@ public class TvSplitScreenController extends SplitScreenController {
            Handler mainHandler,
            SystemWindows systemWindows,
            RootDisplayAreaOrganizer rootDisplayAreaOrganizer,
            DesktopState desktopState) {
            DesktopState desktopState,
            IActivityTaskManager activityTaskManager) {
        super(context, shellInit, shellCommandHandler, shellController, shellTaskOrganizer,
                syncQueue, rootTDAOrganizer, displayController, displayImeController,
                displayInsetsController, null, transitions, transactionPool,
                iconProvider, recentTasks, launchAdjacentController, Optional.empty(),
                Optional.empty(), null /* stageCoordinator */, multiInstanceHelper, splitState,
                mainExecutor, mainHandler, rootDisplayAreaOrganizer, desktopState);
                mainExecutor, mainHandler, rootDisplayAreaOrganizer, desktopState,
                activityTaskManager);

        mTaskOrganizer = shellTaskOrganizer;
        mSyncQueue = syncQueue;
@@ -117,6 +121,7 @@ public class TvSplitScreenController extends SplitScreenController {
        mSystemWindows = systemWindows;
        mRootTDAOrganizer = rootTDAOrganizer;
        mRootDisplayAreaOrganizer = rootDisplayAreaOrganizer;
        mActivityTaskManager = activityTaskManager;
    }

    /**
@@ -130,7 +135,8 @@ public class TvSplitScreenController extends SplitScreenController {
                mDisplayInsetsController, mTransitions, mTransactionPool,
                mIconProvider, mMainExecutor, mMainHandler,
                mRecentTasksOptional, mLaunchAdjacentController, mSplitState, mSystemWindows,
                mRootTDAOrganizer, mRootDisplayAreaOrganizer, getDesktopState());
                mRootTDAOrganizer, mRootDisplayAreaOrganizer, getDesktopState(),
                mActivityTaskManager);
    }

}
Loading