summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitDecorManager.java70
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java4
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvWMShellModule.java4
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java6
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java10
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java48
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageOrderOperator.kt5
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java25
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/tv/TvSplitScreenController.java11
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/tv/TvStageCoordinator.java4
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitScreenControllerTests.java4
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTestUtils.java6
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTransitionTests.java10
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageCoordinatorTests.java8
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageOrderOperatorTests.kt7
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageTaskListenerTests.java7
16 files changed, 56 insertions, 173 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitDecorManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitDecorManager.java
index 9fb36b36ff29..d20ad5d1b908 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitDecorManager.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitDecorManager.java
@@ -33,14 +33,12 @@ import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
import android.app.ActivityManager;
import android.content.Context;
-import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Binder;
-import android.os.Trace;
import android.view.IWindow;
import android.view.LayoutInflater;
import android.view.SurfaceControl;
@@ -52,12 +50,10 @@ import android.widget.FrameLayout;
import android.widget.ImageView;
import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import com.android.launcher3.icons.IconProvider;
import com.android.wm.shell.R;
import com.android.wm.shell.common.ScreenshotUtils;
-import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.SurfaceUtils;
import java.util.function.Consumer;
@@ -83,19 +79,9 @@ public class SplitDecorManager extends WindowlessWindowManager {
private static final String RESIZING_BACKGROUND_SURFACE_NAME = "ResizingBackground";
private static final String GAP_BACKGROUND_SURFACE_NAME = "GapBackground";
- // Indicates the loading state of mIcon
- enum IconLoadState {
- NOT_LOADED,
- LOADING,
- LOADED
- }
-
private final IconProvider mIconProvider;
- private final ShellExecutor mMainExecutor;
- private final ShellExecutor mBgExecutor;
private Drawable mIcon;
- private IconLoadState mIconLoadState = IconLoadState.NOT_LOADED;
private ImageView mVeilIconView;
private SurfaceControlViewHost mViewHost;
/** The parent surface that this is attached to. Should be the stage root. */
@@ -123,14 +109,9 @@ public class SplitDecorManager extends WindowlessWindowManager {
private int mOffsetY;
private int mRunningAnimationCount = 0;
- public SplitDecorManager(Configuration configuration,
- IconProvider iconProvider,
- ShellExecutor mainExecutor,
- ShellExecutor bgExecutor) {
+ public SplitDecorManager(Configuration configuration, IconProvider iconProvider) {
super(configuration, null /* rootSurface */, null /* hostInputToken */);
mIconProvider = iconProvider;
- mMainExecutor = mainExecutor;
- mBgExecutor = bgExecutor;
}
@Override
@@ -218,7 +199,6 @@ public class SplitDecorManager extends WindowlessWindowManager {
}
mHostLeash = null;
mIcon = null;
- mIconLoadState = IconLoadState.NOT_LOADED;
mVeilIconView = null;
mIsCurrentlyChanging = false;
mShown = false;
@@ -280,11 +260,10 @@ public class SplitDecorManager extends WindowlessWindowManager {
.setWindowCrop(mGapBackgroundLeash, sideBounds.width(), sideBounds.height());
}
- if (mIconLoadState == IconLoadState.NOT_LOADED && resizingTask.topActivityInfo != null) {
- loadIconInBackground(resizingTask.topActivityInfo, () -> {
- mVeilIconView.setImageDrawable(mIcon);
- mVeilIconView.setVisibility(View.VISIBLE);
- });
+ if (mIcon == null && resizingTask.topActivityInfo != null) {
+ mIcon = mIconProvider.getIcon(resizingTask.topActivityInfo);
+ mVeilIconView.setImageDrawable(mIcon);
+ mVeilIconView.setVisibility(View.VISIBLE);
WindowManager.LayoutParams lp =
(WindowManager.LayoutParams) mViewHost.getView().getLayoutParams();
@@ -438,10 +417,10 @@ public class SplitDecorManager extends WindowlessWindowManager {
}
if (mIcon == null && resizingTask.topActivityInfo != null) {
- loadIconInBackground(resizingTask.topActivityInfo, () -> {
- mVeilIconView.setImageDrawable(mIcon);
- mVeilIconView.setVisibility(View.VISIBLE);
- });
+ // Initialize icon
+ mIcon = mIconProvider.getIcon(resizingTask.topActivityInfo);
+ mVeilIconView.setImageDrawable(mIcon);
+ mVeilIconView.setVisibility(View.VISIBLE);
WindowManager.LayoutParams lp =
(WindowManager.LayoutParams) mViewHost.getView().getLayoutParams();
@@ -474,7 +453,7 @@ public class SplitDecorManager extends WindowlessWindowManager {
return;
}
- // Re-center icon
+ // Recenter icon
t.setPosition(mIconLeash,
mInstantaneousBounds.width() / 2f - mIconSize / 2f,
mInstantaneousBounds.height() / 2f - mIconSize / 2f);
@@ -617,38 +596,9 @@ public class SplitDecorManager extends WindowlessWindowManager {
mVeilIconView.setImageDrawable(null);
t.hide(mIconLeash);
mIcon = null;
- mIconLoadState = IconLoadState.NOT_LOADED;
}
}
- /**
- * Loads the icon for the given {@param info}, calling {@param postLoadCb} on the main thread
- * if provided.
- */
- private void loadIconInBackground(@NonNull ActivityInfo info, @Nullable Runnable postLoadCb) {
- mIconLoadState = IconLoadState.LOADING;
- mBgExecutor.setBoost();
- mBgExecutor.execute(() -> {
- Trace.beginSection("SplitDecorManager.loadIconInBackground("
- + info.applicationInfo.packageName + ")");
- final Drawable icon = mIconProvider.getIcon(info);
- Trace.endSection();
- mMainExecutor.execute(() -> {
- if (mIconLoadState != IconLoadState.LOADING) {
- // The request was canceled while loading in the background, just drop the
- // result
- return;
- }
- mIcon = icon;
- mIconLoadState = IconLoadState.LOADED;
- if (postLoadCb != null) {
- postLoadCb.run();
- }
- });
- mBgExecutor.resetBoost();
- });
- }
-
private static float[] getResizingBackgroundColor(ActivityManager.RunningTaskInfo taskInfo) {
final int taskBgColor = taskInfo.taskDescription.getBackgroundColor();
return Color.valueOf(taskBgColor == -1 ? Color.WHITE : taskBgColor).getComponents();
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java
index 4bcec702281d..bcc34b1d2085 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java
@@ -794,10 +794,6 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
}
void onStartDragging() {
- // This triggers initialization of things like the resize veil in preparation for
- // showing it when the user moves the divider past the slop
- updateDividerBounds(getDividerPosition(), false /* shouldUseParallaxEffect */);
-
mInteractionJankMonitor.begin(getDividerLeash(), mContext, mHandler,
CUJ_SPLIT_SCREEN_RESIZE);
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvWMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvWMShellModule.java
index 5b6b897e55d9..aebd94fc173a 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvWMShellModule.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvWMShellModule.java
@@ -34,7 +34,6 @@ import com.android.wm.shell.common.split.SplitState;
import com.android.wm.shell.dagger.pip.TvPipModule;
import com.android.wm.shell.recents.RecentTasksController;
import com.android.wm.shell.shared.TransactionPool;
-import com.android.wm.shell.shared.annotations.ShellBackgroundThread;
import com.android.wm.shell.shared.annotations.ShellMainThread;
import com.android.wm.shell.splitscreen.SplitScreenController;
import com.android.wm.shell.splitscreen.tv.TvSplitScreenController;
@@ -94,12 +93,11 @@ public class TvWMShellModule {
SplitState splitState,
@ShellMainThread ShellExecutor mainExecutor,
Handler mainHandler,
- @ShellBackgroundThread ShellExecutor bgExecutor,
SystemWindows systemWindows) {
return new TvSplitScreenController(context, shellInit, shellCommandHandler, shellController,
shellTaskOrganizer, syncQueue, rootTDAOrganizer, displayController,
displayImeController, displayInsetsController, transitions, transactionPool,
iconProvider, recentTasks, launchAdjacentController, multiInstanceHelper,
- splitState, mainExecutor, mainHandler, bgExecutor, systemWindows);
+ splitState, mainExecutor, mainHandler, systemWindows);
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
index 48b0a6cb364b..1916215dea74 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
@@ -520,8 +520,7 @@ public abstract class WMShellModule {
MultiInstanceHelper multiInstanceHelper,
SplitState splitState,
@ShellMainThread ShellExecutor mainExecutor,
- @ShellMainThread Handler mainHandler,
- @ShellBackgroundThread ShellExecutor bgExecutor) {
+ @ShellMainThread Handler mainHandler) {
return new SplitScreenController(
context,
shellInit,
@@ -545,8 +544,7 @@ public abstract class WMShellModule {
multiInstanceHelper,
splitState,
mainExecutor,
- mainHandler,
- bgExecutor);
+ mainHandler);
}
//
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java
index 39ed2061c675..c724135aeced 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java
@@ -185,7 +185,6 @@ public class SplitScreenController implements SplitDragPolicy.Starter,
private final LauncherApps mLauncherApps;
private final RootTaskDisplayAreaOrganizer mRootTDAOrganizer;
private final ShellExecutor mMainExecutor;
- private final ShellExecutor mBgExecutor;
private final Handler mMainHandler;
private final SplitScreenImpl mImpl = new SplitScreenImpl();
private final DisplayController mDisplayController;
@@ -232,8 +231,7 @@ public class SplitScreenController implements SplitDragPolicy.Starter,
MultiInstanceHelper multiInstanceHelper,
SplitState splitState,
ShellExecutor mainExecutor,
- Handler mainHandler,
- ShellExecutor bgExecutor) {
+ Handler mainHandler) {
mShellCommandHandler = shellCommandHandler;
mShellController = shellController;
mTaskOrganizer = shellTaskOrganizer;
@@ -243,7 +241,6 @@ public class SplitScreenController implements SplitDragPolicy.Starter,
mRootTDAOrganizer = rootTDAOrganizer;
mMainExecutor = mainExecutor;
mMainHandler = mainHandler;
- mBgExecutor = bgExecutor;
mDisplayController = displayController;
mDisplayImeController = displayImeController;
mDisplayInsetsController = displayInsetsController;
@@ -301,9 +298,8 @@ public class SplitScreenController implements SplitDragPolicy.Starter,
return new StageCoordinator(mContext, DEFAULT_DISPLAY, mSyncQueue,
mTaskOrganizer, mDisplayController, mDisplayImeController,
mDisplayInsetsController, mTransitions, mTransactionPool, mIconProvider,
- mMainExecutor, mMainHandler, mBgExecutor, mRecentTasksOptional,
- mLaunchAdjacentController, mWindowDecorViewModel, mSplitState,
- mDesktopTasksController);
+ mMainExecutor, mMainHandler, mRecentTasksOptional, mLaunchAdjacentController,
+ mWindowDecorViewModel, mSplitState, mDesktopTasksController);
}
@Override
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java
index 535112f5124a..5696074043a2 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java
@@ -216,7 +216,6 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
private final SplitscreenEventLogger mLogger;
private final ShellExecutor mMainExecutor;
private final Handler mMainHandler;
- private final ShellExecutor mBgExecutor;
// Cache live tile tasks while entering recents, evict them from stages in finish transaction
// if user is opening another task(s).
private final ArrayList<Integer> mPausingTasks = new ArrayList<>();
@@ -345,20 +344,12 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
}
};
- protected StageCoordinator(Context context,
- int displayId,
- SyncTransactionQueue syncQueue,
- ShellTaskOrganizer taskOrganizer,
- DisplayController displayController,
+ protected StageCoordinator(Context context, int displayId, SyncTransactionQueue syncQueue,
+ ShellTaskOrganizer taskOrganizer, DisplayController displayController,
DisplayImeController displayImeController,
- DisplayInsetsController displayInsetsController,
- Transitions transitions,
- TransactionPool transactionPool,
- IconProvider iconProvider,
- ShellExecutor mainExecutor,
- Handler mainHandler,
- ShellExecutor bgExecutor,
- Optional<RecentTasksController> recentTasks,
+ DisplayInsetsController displayInsetsController, Transitions transitions,
+ TransactionPool transactionPool, IconProvider iconProvider, ShellExecutor mainExecutor,
+ Handler mainHandler, Optional<RecentTasksController> recentTasks,
LaunchAdjacentController launchAdjacentController,
Optional<WindowDecorViewModel> windowDecorViewModel, SplitState splitState,
Optional<DesktopTasksController> desktopTasksController) {
@@ -369,7 +360,6 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
mLogger = new SplitscreenEventLogger();
mMainExecutor = mainExecutor;
mMainHandler = mainHandler;
- mBgExecutor = bgExecutor;
mRecentTasks = recentTasks;
mLaunchAdjacentController = launchAdjacentController;
mWindowDecorViewModel = windowDecorViewModel;
@@ -386,8 +376,6 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
this /*stageListenerCallbacks*/,
mSyncQueue,
iconProvider,
- mMainExecutor,
- mBgExecutor,
mWindowDecorViewModel);
} else {
mMainStage = new StageTaskListener(
@@ -397,8 +385,6 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
this /*stageListenerCallbacks*/,
mSyncQueue,
iconProvider,
- mMainExecutor,
- mBgExecutor,
mWindowDecorViewModel, STAGE_TYPE_MAIN);
mSideStage = new StageTaskListener(
mContext,
@@ -407,8 +393,6 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
this /*stageListenerCallbacks*/,
mSyncQueue,
iconProvider,
- mMainExecutor,
- mBgExecutor,
mWindowDecorViewModel, STAGE_TYPE_SIDE);
}
mDisplayController = displayController;
@@ -430,22 +414,13 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
}
@VisibleForTesting
- StageCoordinator(Context context,
- int displayId,
- SyncTransactionQueue syncQueue,
- ShellTaskOrganizer taskOrganizer,
- StageTaskListener mainStage,
- StageTaskListener sideStage,
- DisplayController displayController,
+ StageCoordinator(Context context, int displayId, SyncTransactionQueue syncQueue,
+ ShellTaskOrganizer taskOrganizer, StageTaskListener mainStage,
+ StageTaskListener sideStage, DisplayController displayController,
DisplayImeController displayImeController,
- DisplayInsetsController displayInsetsController,
- SplitLayout splitLayout,
- Transitions transitions,
- TransactionPool transactionPool,
- ShellExecutor mainExecutor,
- Handler mainHandler,
- ShellExecutor bgExecutor,
- Optional<RecentTasksController> recentTasks,
+ DisplayInsetsController displayInsetsController, SplitLayout splitLayout,
+ Transitions transitions, TransactionPool transactionPool, ShellExecutor mainExecutor,
+ Handler mainHandler, Optional<RecentTasksController> recentTasks,
LaunchAdjacentController launchAdjacentController,
Optional<WindowDecorViewModel> windowDecorViewModel, SplitState splitState,
Optional<DesktopTasksController> desktopTasksController) {
@@ -465,7 +440,6 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
mLogger = new SplitscreenEventLogger();
mMainExecutor = mainExecutor;
mMainHandler = mainHandler;
- mBgExecutor = bgExecutor;
mRecentTasks = recentTasks;
mLaunchAdjacentController = launchAdjacentController;
mWindowDecorViewModel = windowDecorViewModel;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageOrderOperator.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageOrderOperator.kt
index 5256e7867499..a92100410d3d 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageOrderOperator.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageOrderOperator.kt
@@ -20,7 +20,6 @@ import android.content.Context
import com.android.internal.protolog.ProtoLog
import com.android.launcher3.icons.IconProvider
import com.android.wm.shell.ShellTaskOrganizer
-import com.android.wm.shell.common.ShellExecutor
import com.android.wm.shell.common.SyncTransactionQueue
import com.android.wm.shell.protolog.ShellProtoLogGroup
import com.android.wm.shell.shared.split.SplitScreenConstants
@@ -53,8 +52,6 @@ class StageOrderOperator (
stageCallbacks: StageTaskListener.StageListenerCallbacks,
syncQueue: SyncTransactionQueue,
iconProvider: IconProvider,
- mainExecutor: ShellExecutor,
- bgExecutor: ShellExecutor,
windowDecorViewModel: Optional<WindowDecorViewModel>
) {
@@ -86,8 +83,6 @@ class StageOrderOperator (
stageCallbacks,
syncQueue,
iconProvider,
- mainExecutor,
- bgExecutor,
windowDecorViewModel,
stageIds[i])
)
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java
index 816f51f997d5..f1245ba26cc2 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java
@@ -48,7 +48,6 @@ import com.android.internal.protolog.ProtoLog;
import com.android.internal.util.ArrayUtils;
import com.android.launcher3.icons.IconProvider;
import com.android.wm.shell.ShellTaskOrganizer;
-import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.SurfaceUtils;
import com.android.wm.shell.common.SyncTransactionQueue;
import com.android.wm.shell.common.split.SplitDecorManager;
@@ -96,8 +95,6 @@ public class StageTaskListener implements ShellTaskOrganizer.TaskListener {
private final StageListenerCallbacks mCallbacks;
private final SyncTransactionQueue mSyncQueue;
private final IconProvider mIconProvider;
- private final ShellExecutor mMainExecutor;
- private final ShellExecutor mBgExecutor;
private final Optional<WindowDecorViewModel> mWindowDecorViewModel;
/** Whether or not the root task has been created. */
@@ -114,21 +111,14 @@ public class StageTaskListener implements ShellTaskOrganizer.TaskListener {
// TODO(b/204308910): Extracts SplitDecorManager related code to common package.
private SplitDecorManager mSplitDecorManager;
- StageTaskListener(Context context,
- ShellTaskOrganizer taskOrganizer,
- int displayId,
- StageListenerCallbacks callbacks,
- SyncTransactionQueue syncQueue,
+ StageTaskListener(Context context, ShellTaskOrganizer taskOrganizer, int displayId,
+ StageListenerCallbacks callbacks, SyncTransactionQueue syncQueue,
IconProvider iconProvider,
- ShellExecutor mainExecutor,
- ShellExecutor bgExecutor,
Optional<WindowDecorViewModel> windowDecorViewModel, int id) {
mContext = context;
mCallbacks = callbacks;
mSyncQueue = syncQueue;
mIconProvider = iconProvider;
- mMainExecutor = mainExecutor;
- mBgExecutor = bgExecutor;
mWindowDecorViewModel = windowDecorViewModel;
taskOrganizer.createRootTask(displayId, WINDOWING_MODE_MULTI_WINDOW, this);
mId = id;
@@ -224,8 +214,9 @@ public class StageTaskListener implements ShellTaskOrganizer.TaskListener {
if (mRootTaskInfo == null) {
mRootLeash = leash;
mRootTaskInfo = taskInfo;
- mSplitDecorManager = new SplitDecorManager(mRootTaskInfo.configuration, mIconProvider,
- mMainExecutor, mBgExecutor);
+ mSplitDecorManager = new SplitDecorManager(
+ mRootTaskInfo.configuration,
+ mIconProvider);
mHasRootTask = true;
mCallbacks.onRootTaskAppeared();
if (mVisible != mRootTaskInfo.isVisible) {
@@ -353,6 +344,12 @@ public class StageTaskListener implements ShellTaskOrganizer.TaskListener {
}
}
+ void screenshotIfNeeded(SurfaceControl.Transaction t) {
+ if (mSplitDecorManager != null) {
+ mSplitDecorManager.screenshotIfNeeded(t);
+ }
+ }
+
void fadeOutDecor(Runnable finishedCallback) {
if (mSplitDecorManager != null) {
mSplitDecorManager.fadeOutDecor(finishedCallback, false /* addDelay */);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/tv/TvSplitScreenController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/tv/TvSplitScreenController.java
index ea7553061137..c5e158c6b452 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/tv/TvSplitScreenController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/tv/TvSplitScreenController.java
@@ -53,7 +53,6 @@ public class TvSplitScreenController extends SplitScreenController {
private final SyncTransactionQueue mSyncQueue;
private final Context mContext;
private final ShellExecutor mMainExecutor;
- private final ShellExecutor mBgExecutor;
private final DisplayController mDisplayController;
private final DisplayImeController mDisplayImeController;
private final DisplayInsetsController mDisplayInsetsController;
@@ -86,20 +85,18 @@ public class TvSplitScreenController extends SplitScreenController {
SplitState splitState,
ShellExecutor mainExecutor,
Handler mainHandler,
- ShellExecutor bgExecutor,
SystemWindows systemWindows) {
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, bgExecutor);
+ mainExecutor, mainHandler);
+
mTaskOrganizer = shellTaskOrganizer;
mSyncQueue = syncQueue;
mContext = context;
mMainExecutor = mainExecutor;
- mMainHandler = mainHandler;
- mBgExecutor = bgExecutor;
mDisplayController = displayController;
mDisplayImeController = displayImeController;
mDisplayInsetsController = displayInsetsController;
@@ -109,6 +106,8 @@ public class TvSplitScreenController extends SplitScreenController {
mRecentTasksOptional = recentTasks;
mLaunchAdjacentController = launchAdjacentController;
mSplitState = splitState;
+
+ mMainHandler = mainHandler;
mSystemWindows = systemWindows;
}
@@ -121,7 +120,7 @@ public class TvSplitScreenController extends SplitScreenController {
return new TvStageCoordinator(mContext, DEFAULT_DISPLAY, mSyncQueue,
mTaskOrganizer, mDisplayController, mDisplayImeController,
mDisplayInsetsController, mTransitions, mTransactionPool,
- mIconProvider, mMainExecutor, mMainHandler, mBgExecutor,
+ mIconProvider, mMainExecutor, mMainHandler,
mRecentTasksOptional, mLaunchAdjacentController, mSplitState, mSystemWindows);
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/tv/TvStageCoordinator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/tv/TvStageCoordinator.java
index 9d85bea421ae..e1bf12fc6082 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/tv/TvStageCoordinator.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/tv/TvStageCoordinator.java
@@ -51,14 +51,14 @@ public class TvStageCoordinator extends StageCoordinator
DisplayInsetsController displayInsetsController, Transitions transitions,
TransactionPool transactionPool,
IconProvider iconProvider, ShellExecutor mainExecutor,
- Handler mainHandler, ShellExecutor bgExecutor,
+ Handler mainHandler,
Optional<RecentTasksController> recentTasks,
LaunchAdjacentController launchAdjacentController,
SplitState splitState,
SystemWindows systemWindows) {
super(context, displayId, syncQueue, taskOrganizer, displayController, displayImeController,
displayInsetsController, transitions, transactionPool, iconProvider,
- mainExecutor, mainHandler, bgExecutor, recentTasks, launchAdjacentController,
+ mainExecutor, mainHandler, recentTasks, launchAdjacentController,
Optional.empty(), splitState, Optional.empty());
mTvSplitMenuController = new TvSplitMenuController(context, this,
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitScreenControllerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitScreenControllerTests.java
index bca9c3fdda39..bb9703fce2e3 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitScreenControllerTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitScreenControllerTests.java
@@ -106,7 +106,6 @@ public class SplitScreenControllerTests extends ShellTestCase {
@Mock RootTaskDisplayAreaOrganizer mRootTDAOrganizer;
@Mock ShellExecutor mMainExecutor;
@Mock Handler mMainHandler;
- @Mock ShellExecutor mBgExecutor;
@Mock DisplayController mDisplayController;
@Mock DisplayImeController mDisplayImeController;
@Mock DisplayInsetsController mDisplayInsetsController;
@@ -138,8 +137,7 @@ public class SplitScreenControllerTests extends ShellTestCase {
mDisplayInsetsController, mDragAndDropController, mTransitions, mTransactionPool,
mIconProvider, Optional.of(mRecentTasks), mLaunchAdjacentController,
Optional.of(mWindowDecorViewModel), Optional.of(mDesktopTasksController),
- mStageCoordinator, mMultiInstanceHelper, mSplitState, mMainExecutor, mMainHandler,
- mBgExecutor));
+ mStageCoordinator, mMultiInstanceHelper, mSplitState, mMainExecutor, mMainHandler));
}
@Test
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTestUtils.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTestUtils.java
index ada7b4aff37d..ae0c9d6cbf7c 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTestUtils.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTestUtils.java
@@ -79,15 +79,15 @@ public class SplitTestUtils {
StageTaskListener sideStage, DisplayController displayController,
DisplayImeController imeController, DisplayInsetsController insetsController,
SplitLayout splitLayout, Transitions transitions, TransactionPool transactionPool,
- ShellExecutor mainExecutor, Handler mainHandler, ShellExecutor bgExecutor,
+ ShellExecutor mainExecutor, Handler mainHandler,
Optional<RecentTasksController> recentTasks,
LaunchAdjacentController launchAdjacentController,
Optional<WindowDecorViewModel> windowDecorViewModel, SplitState splitState,
Optional<DesktopTasksController> desktopTasksController) {
super(context, displayId, syncQueue, taskOrganizer, mainStage,
sideStage, displayController, imeController, insetsController, splitLayout,
- transitions, transactionPool, mainExecutor, mainHandler, bgExecutor,
- recentTasks, launchAdjacentController, windowDecorViewModel, splitState,
+ transitions, transactionPool, mainExecutor, mainHandler, recentTasks,
+ launchAdjacentController, windowDecorViewModel, splitState,
desktopTasksController);
// Prepare root task for testing.
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTransitionTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTransitionTests.java
index ffa8b6089660..b0fdfacd7d83 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTransitionTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTransitionTests.java
@@ -111,7 +111,6 @@ public class SplitTransitionTests extends ShellTestCase {
@Mock private WindowDecorViewModel mWindowDecorViewModel;
@Mock private SplitState mSplitState;
@Mock private ShellExecutor mMainExecutor;
- @Mock private ShellExecutor mBgExecutor;
@Mock private Handler mMainHandler;
@Mock private LaunchAdjacentController mLaunchAdjacentController;
@Mock private DefaultMixedHandler mMixedHandler;
@@ -137,19 +136,18 @@ public class SplitTransitionTests extends ShellTestCase {
mSplitLayout = SplitTestUtils.createMockSplitLayout();
mMainStage = spy(new StageTaskListener(mContext, mTaskOrganizer, DEFAULT_DISPLAY, mock(
StageTaskListener.StageListenerCallbacks.class), mSyncQueue,
- mIconProvider, mMainExecutor, mBgExecutor, Optional.of(mWindowDecorViewModel),
- STAGE_TYPE_MAIN));
+ mIconProvider, Optional.of(mWindowDecorViewModel), STAGE_TYPE_MAIN));
mMainStage.onTaskAppeared(new TestRunningTaskInfoBuilder().build(), createMockSurface());
mSideStage = spy(new StageTaskListener(mContext, mTaskOrganizer, DEFAULT_DISPLAY, mock(
StageTaskListener.StageListenerCallbacks.class), mSyncQueue,
- mIconProvider, mMainExecutor, mBgExecutor, Optional.of(mWindowDecorViewModel),
- STAGE_TYPE_SIDE));
+ mIconProvider, Optional.of(mWindowDecorViewModel), STAGE_TYPE_SIDE));
mSideStage.onTaskAppeared(new TestRunningTaskInfoBuilder().build(), createMockSurface());
mStageCoordinator = new SplitTestUtils.TestStageCoordinator(mContext, DEFAULT_DISPLAY,
mSyncQueue, mTaskOrganizer, mMainStage, mSideStage, mDisplayController,
mDisplayImeController, mDisplayInsetsController, mSplitLayout, mTransitions,
- mTransactionPool, mMainExecutor, mMainHandler, mBgExecutor, Optional.empty(),
+ mTransactionPool, mMainExecutor, mMainHandler, Optional.empty(),
mLaunchAdjacentController, Optional.empty(), mSplitState, Optional.empty());
+
mStageCoordinator.setMixedHandler(mMixedHandler);
mSplitScreenTransitions = mStageCoordinator.getSplitTransitions();
doAnswer((Answer<IBinder>) invocation -> mock(IBinder.class))
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageCoordinatorTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageCoordinatorTests.java
index 9d1df864764f..2d0ea5fdc884 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageCoordinatorTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageCoordinatorTests.java
@@ -119,8 +119,6 @@ public class StageCoordinatorTests extends ShellTestCase {
private DefaultMixedHandler mDefaultMixedHandler;
@Mock
private SplitState mSplitState;
- @Mock
- private ShellExecutor mBgExecutor;
private final Rect mBounds1 = new Rect(10, 20, 30, 40);
private final Rect mBounds2 = new Rect(5, 10, 15, 20);
@@ -143,9 +141,9 @@ public class StageCoordinatorTests extends ShellTestCase {
mStageCoordinator = spy(new StageCoordinator(mContext, DEFAULT_DISPLAY, mSyncQueue,
mTaskOrganizer, mMainStage, mSideStage, mDisplayController, mDisplayImeController,
mDisplayInsetsController, mSplitLayout, mTransitions, mTransactionPool,
- mMainExecutor, mMainHandler, mBgExecutor, Optional.empty(),
- mLaunchAdjacentController, Optional.empty(), mSplitState,
- Optional.empty()));
+ mMainExecutor, mMainHandler, Optional.empty(), mLaunchAdjacentController,
+ Optional.empty(), mSplitState, Optional.empty()));
+
mDividerLeash = new SurfaceControl.Builder().setName("fakeDivider").build();
when(mSplitLayout.getTopLeftBounds()).thenReturn(mBounds1);
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageOrderOperatorTests.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageOrderOperatorTests.kt
index 62b830dfd691..3b4a86a71d90 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageOrderOperatorTests.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageOrderOperatorTests.kt
@@ -23,7 +23,6 @@ import com.android.launcher3.icons.IconProvider
import com.android.wm.shell.Flags.enableFlexibleSplit
import com.android.wm.shell.ShellTaskOrganizer
import com.android.wm.shell.ShellTestCase
-import com.android.wm.shell.common.ShellExecutor
import com.android.wm.shell.common.SyncTransactionQueue
import com.android.wm.shell.shared.split.SplitScreenConstants.SNAP_TO_2_33_66
import com.android.wm.shell.shared.split.SplitScreenConstants.SNAP_TO_2_50_50
@@ -42,10 +41,6 @@ import java.util.Optional
class StageOrderOperatorTests : ShellTestCase() {
@Mock
- lateinit var mMainExecutor: ShellExecutor
- @Mock
- lateinit var mBgExecutor: ShellExecutor
- @Mock
lateinit var mTaskOrganizer: ShellTaskOrganizer
@Mock
lateinit var mSyncQueue: SyncTransactionQueue
@@ -67,8 +62,6 @@ class StageOrderOperatorTests : ShellTestCase() {
stageListenerCallbacks,
mSyncQueue,
iconProvider,
- mMainExecutor,
- mBgExecutor,
windowDecorViewModel,
)
assert(stageOrderOperator.activeStages.size == 0)
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageTaskListenerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageTaskListenerTests.java
index effc6a7daf62..fe91440b106f 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageTaskListenerTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageTaskListenerTests.java
@@ -43,7 +43,6 @@ import com.android.launcher3.icons.IconProvider;
import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.ShellTestCase;
import com.android.wm.shell.TestRunningTaskInfoBuilder;
-import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.SyncTransactionQueue;
import com.android.wm.shell.windowdecor.WindowDecorViewModel;
@@ -74,10 +73,6 @@ public final class StageTaskListenerTests extends ShellTestCase {
@Mock
private SyncTransactionQueue mSyncQueue;
@Mock
- private ShellExecutor mMainExecutor;
- @Mock
- private ShellExecutor mBgExecutor;
- @Mock
private IconProvider mIconProvider;
@Mock
private WindowDecorViewModel mWindowDecorViewModel;
@@ -100,8 +95,6 @@ public final class StageTaskListenerTests extends ShellTestCase {
mCallbacks,
mSyncQueue,
mIconProvider,
- mMainExecutor,
- mBgExecutor,
Optional.of(mWindowDecorViewModel),
STAGE_TYPE_UNDEFINED);
mRootTask = new TestRunningTaskInfoBuilder().build();