Loading libs/WindowManager/Shell/src/com/android/wm/shell/ShellInitImpl.java +5 −5 Original line number Diff line number Diff line Loading @@ -27,7 +27,6 @@ import com.android.wm.shell.common.annotations.ExternalThread; import com.android.wm.shell.draganddrop.DragAndDropController; import com.android.wm.shell.freeform.FreeformTaskListener; import com.android.wm.shell.fullscreen.FullscreenTaskListener; import com.android.wm.shell.fullscreen.FullscreenUnfoldController; import com.android.wm.shell.kidsmode.KidsModeTaskOrganizer; import com.android.wm.shell.pip.phone.PipTouchHandler; import com.android.wm.shell.recents.RecentTasksController; Loading @@ -35,6 +34,7 @@ import com.android.wm.shell.splitscreen.SplitScreenController; import com.android.wm.shell.startingsurface.StartingWindowController; import com.android.wm.shell.transition.DefaultMixedHandler; import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.unfold.UnfoldAnimationController; import com.android.wm.shell.unfold.UnfoldTransitionHandler; import java.util.Optional; Loading @@ -55,7 +55,7 @@ public class ShellInitImpl { private final Optional<SplitScreenController> mSplitScreenOptional; private final Optional<PipTouchHandler> mPipTouchHandlerOptional; private final FullscreenTaskListener mFullscreenTaskListener; private final Optional<FullscreenUnfoldController> mFullscreenUnfoldController; private final Optional<UnfoldAnimationController> mUnfoldController; private final Optional<UnfoldTransitionHandler> mUnfoldTransitionHandler; private final Optional<FreeformTaskListener> mFreeformTaskListenerOptional; private final ShellExecutor mMainExecutor; Loading @@ -76,7 +76,7 @@ public class ShellInitImpl { Optional<SplitScreenController> splitScreenOptional, Optional<PipTouchHandler> pipTouchHandlerOptional, FullscreenTaskListener fullscreenTaskListener, Optional<FullscreenUnfoldController> fullscreenUnfoldTransitionController, Optional<UnfoldAnimationController> unfoldAnimationController, Optional<UnfoldTransitionHandler> unfoldTransitionHandler, Optional<FreeformTaskListener> freeformTaskListenerOptional, Optional<RecentTasksController> recentTasks, Loading @@ -93,7 +93,7 @@ public class ShellInitImpl { mSplitScreenOptional = splitScreenOptional; mFullscreenTaskListener = fullscreenTaskListener; mPipTouchHandlerOptional = pipTouchHandlerOptional; mFullscreenUnfoldController = fullscreenUnfoldTransitionController; mUnfoldController = unfoldAnimationController; mUnfoldTransitionHandler = unfoldTransitionHandler; mFreeformTaskListenerOptional = freeformTaskListenerOptional; mRecentTasks = recentTasks; Loading Loading @@ -146,7 +146,7 @@ public class ShellInitImpl { mShellTaskOrganizer.addListenerForType( f, ShellTaskOrganizer.TASK_LISTENER_TYPE_FREEFORM)); mFullscreenUnfoldController.ifPresent(FullscreenUnfoldController::init); mUnfoldController.ifPresent(UnfoldAnimationController::init); mRecentTasks.ifPresent(RecentTasksController::init); // Initialize kids mode task organizer Loading libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java +22 −1 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.compatui.CompatUIController; import com.android.wm.shell.recents.RecentTasksController; import com.android.wm.shell.startingsurface.StartingWindowController; import com.android.wm.shell.unfold.UnfoldAnimationController; import java.io.PrintWriter; import java.util.ArrayList; Loading Loading @@ -178,34 +179,42 @@ public class ShellTaskOrganizer extends TaskOrganizer implements @Nullable private final Optional<RecentTasksController> mRecentTasks; @Nullable private final UnfoldAnimationController mUnfoldAnimationController; @Nullable private RunningTaskInfo mLastFocusedTaskInfo; public ShellTaskOrganizer(ShellExecutor mainExecutor, Context context) { this(null /* taskOrganizerController */, mainExecutor, context, null /* compatUI */, Optional.empty() /* unfoldAnimationController */, Optional.empty() /* recentTasksController */); } public ShellTaskOrganizer(ShellExecutor mainExecutor, Context context, @Nullable CompatUIController compatUI) { this(null /* taskOrganizerController */, mainExecutor, context, compatUI, Optional.empty() /* unfoldAnimationController */, Optional.empty() /* recentTasksController */); } public ShellTaskOrganizer(ShellExecutor mainExecutor, Context context, @Nullable CompatUIController compatUI, Optional<UnfoldAnimationController> unfoldAnimationController, Optional<RecentTasksController> recentTasks) { this(null /* taskOrganizerController */, mainExecutor, context, compatUI, recentTasks); unfoldAnimationController, recentTasks); } @VisibleForTesting protected ShellTaskOrganizer(ITaskOrganizerController taskOrganizerController, ShellExecutor mainExecutor, Context context, @Nullable CompatUIController compatUI, Optional<UnfoldAnimationController> unfoldAnimationController, Optional<RecentTasksController> recentTasks) { super(taskOrganizerController, mainExecutor); mCompatUI = compatUI; mRecentTasks = recentTasks; mUnfoldAnimationController = unfoldAnimationController.orElse(null); if (compatUI != null) { compatUI.setCompatUICallback(this); } Loading Loading @@ -437,6 +446,9 @@ public class ShellTaskOrganizer extends TaskOrganizer implements if (listener != null) { listener.onTaskAppeared(info.getTaskInfo(), info.getLeash()); } if (mUnfoldAnimationController != null) { mUnfoldAnimationController.onTaskAppeared(info.getTaskInfo(), info.getLeash()); } notifyLocusVisibilityIfNeeded(info.getTaskInfo()); notifyCompatUI(info.getTaskInfo(), listener); } Loading @@ -458,6 +470,11 @@ public class ShellTaskOrganizer extends TaskOrganizer implements public void onTaskInfoChanged(RunningTaskInfo taskInfo) { synchronized (mLock) { ProtoLog.v(WM_SHELL_TASK_ORG, "Task info changed taskId=%d", taskInfo.taskId); if (mUnfoldAnimationController != null) { mUnfoldAnimationController.onTaskInfoChanged(taskInfo); } final TaskAppearedInfo data = mTasks.get(taskInfo.taskId); final TaskListener oldListener = getTaskListener(data.getTaskInfo()); final TaskListener newListener = getTaskListener(taskInfo); Loading Loading @@ -507,6 +524,10 @@ public class ShellTaskOrganizer extends TaskOrganizer implements public void onTaskVanished(RunningTaskInfo taskInfo) { synchronized (mLock) { ProtoLog.v(WM_SHELL_TASK_ORG, "Task vanished taskId=%d", taskInfo.taskId); if (mUnfoldAnimationController != null) { mUnfoldAnimationController.onTaskVanished(taskInfo); } final int taskId = taskInfo.taskId; final TaskListener listener = getTaskListener(mTasks.get(taskId).getTaskInfo()); mTasks.remove(taskId); Loading libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +5 −0 Original line number Diff line number Diff line Loading @@ -178,6 +178,11 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange return outBounds; } /** Gets root bounds of the whole split layout */ public Rect getRootBounds() { return new Rect(mRootBounds); } /** Gets bounds of divider window with screen based coordinate. */ public Rect getDividerBounds() { return new Rect(mDividerBounds); Loading libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java +14 −11 Original line number Diff line number Diff line Loading @@ -64,7 +64,6 @@ import com.android.wm.shell.draganddrop.DragAndDrop; import com.android.wm.shell.draganddrop.DragAndDropController; import com.android.wm.shell.freeform.FreeformTaskListener; import com.android.wm.shell.fullscreen.FullscreenTaskListener; import com.android.wm.shell.fullscreen.FullscreenUnfoldController; import com.android.wm.shell.hidedisplaycutout.HideDisplayCutout; import com.android.wm.shell.hidedisplaycutout.HideDisplayCutoutController; import com.android.wm.shell.kidsmode.KidsModeTaskOrganizer; Loading @@ -88,6 +87,7 @@ import com.android.wm.shell.tasksurfacehelper.TaskSurfaceHelperController; import com.android.wm.shell.transition.ShellTransitions; import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.unfold.ShellUnfoldProgressProvider; import com.android.wm.shell.unfold.UnfoldAnimationController; import com.android.wm.shell.unfold.UnfoldTransitionHandler; import java.util.Optional; Loading Loading @@ -176,9 +176,11 @@ public abstract class WMShellBaseModule { static ShellTaskOrganizer provideShellTaskOrganizer(@ShellMainThread ShellExecutor mainExecutor, Context context, CompatUIController compatUI, Optional<UnfoldAnimationController> unfoldAnimationController, Optional<RecentTasksController> recentTasksOptional ) { return new ShellTaskOrganizer(mainExecutor, context, compatUI, recentTasksOptional); return new ShellTaskOrganizer(mainExecutor, context, compatUI, unfoldAnimationController, recentTasksOptional); } @WMSingleton Loading @@ -190,10 +192,12 @@ public abstract class WMShellBaseModule { SyncTransactionQueue syncTransactionQueue, DisplayController displayController, DisplayInsetsController displayInsetsController, Optional<UnfoldAnimationController> unfoldAnimationController, Optional<RecentTasksController> recentTasksOptional ) { return new KidsModeTaskOrganizer(mainExecutor, mainHandler, context, syncTransactionQueue, displayController, displayInsetsController, recentTasksOptional); displayController, displayInsetsController, unfoldAnimationController, recentTasksOptional); } @WMSingleton Loading Loading @@ -290,13 +294,11 @@ public abstract class WMShellBaseModule { static FullscreenTaskListener provideFullscreenTaskListener( @DynamicOverride Optional<FullscreenTaskListener> fullscreenTaskListener, SyncTransactionQueue syncQueue, Optional<FullscreenUnfoldController> optionalFullscreenUnfoldController, Optional<RecentTasksController> recentTasksOptional) { if (fullscreenTaskListener.isPresent()) { return fullscreenTaskListener.get(); } else { return new FullscreenTaskListener(syncQueue, optionalFullscreenUnfoldController, recentTasksOptional); return new FullscreenTaskListener(syncQueue, recentTasksOptional); } } Loading @@ -310,12 +312,13 @@ public abstract class WMShellBaseModule { // Workaround for dynamic overriding with a default implementation, see {@link DynamicOverride} @BindsOptionalOf @DynamicOverride abstract FullscreenUnfoldController optionalFullscreenUnfoldController(); abstract UnfoldAnimationController optionalUnfoldController(); @WMSingleton @Provides static Optional<FullscreenUnfoldController> provideFullscreenUnfoldController( @DynamicOverride Lazy<Optional<FullscreenUnfoldController>> fullscreenUnfoldController, static Optional<UnfoldAnimationController> provideUnfoldController( @DynamicOverride Lazy<Optional<UnfoldAnimationController>> fullscreenUnfoldController, Optional<ShellUnfoldProgressProvider> progressProvider) { if (progressProvider.isPresent() && progressProvider.get() != ShellUnfoldProgressProvider.NO_PROVIDER) { Loading Loading @@ -640,7 +643,7 @@ public abstract class WMShellBaseModule { Optional<SplitScreenController> splitScreenOptional, Optional<PipTouchHandler> pipTouchHandlerOptional, FullscreenTaskListener fullscreenTaskListener, Optional<FullscreenUnfoldController> appUnfoldTransitionController, Optional<UnfoldAnimationController> unfoldAnimationController, Optional<UnfoldTransitionHandler> unfoldTransitionHandler, Optional<FreeformTaskListener> freeformTaskListener, Optional<RecentTasksController> recentTasksOptional, Loading @@ -657,7 +660,7 @@ public abstract class WMShellBaseModule { splitScreenOptional, pipTouchHandlerOptional, fullscreenTaskListener, appUnfoldTransitionController, unfoldAnimationController, unfoldTransitionHandler, freeformTaskListener, recentTasksOptional, Loading libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +57 −39 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ import com.android.wm.shell.common.annotations.ShellBackgroundThread; import com.android.wm.shell.common.annotations.ShellMainThread; import com.android.wm.shell.draganddrop.DragAndDropController; import com.android.wm.shell.freeform.FreeformTaskListener; import com.android.wm.shell.fullscreen.FullscreenUnfoldController; import com.android.wm.shell.onehanded.OneHandedController; import com.android.wm.shell.pip.Pip; import com.android.wm.shell.pip.PipAnimationController; Loading @@ -68,17 +67,22 @@ import com.android.wm.shell.pip.phone.PipMotionHelper; import com.android.wm.shell.pip.phone.PipTouchHandler; import com.android.wm.shell.recents.RecentTasksController; import com.android.wm.shell.splitscreen.SplitScreenController; import com.android.wm.shell.splitscreen.StageTaskUnfoldController; import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.unfold.UnfoldAnimationController; import com.android.wm.shell.unfold.ShellUnfoldProgressProvider; import com.android.wm.shell.unfold.UnfoldBackgroundController; import com.android.wm.shell.unfold.UnfoldTransitionHandler; import com.android.wm.shell.unfold.animation.FullscreenUnfoldTaskAnimator; import com.android.wm.shell.unfold.animation.SplitTaskUnfoldAnimator; import com.android.wm.shell.unfold.animation.UnfoldTaskAnimator; import com.android.wm.shell.unfold.qualifier.UnfoldTransition; import com.android.wm.shell.unfold.qualifier.UnfoldShellTransition; import java.util.ArrayList; import java.util.List; import java.util.Optional; import javax.inject.Provider; import dagger.Binds; import dagger.Lazy; import dagger.Module; import dagger.Provides; Loading @@ -92,7 +96,7 @@ import dagger.Provides; * dependencies should go into {@link WMShellBaseModule}. */ @Module(includes = WMShellBaseModule.class) public class WMShellModule { public abstract class WMShellModule { // // Bubbles Loading Loading @@ -173,12 +177,11 @@ public class WMShellModule { DisplayImeController displayImeController, DisplayInsetsController displayInsetsController, Transitions transitions, TransactionPool transactionPool, IconProvider iconProvider, Optional<RecentTasksController> recentTasks, Provider<Optional<StageTaskUnfoldController>> stageTaskUnfoldControllerProvider) { Optional<RecentTasksController> recentTasks) { return new SplitScreenController(shellTaskOrganizer, syncQueue, context, rootTaskDisplayAreaOrganizer, mainExecutor, displayController, displayImeController, displayInsetsController, transitions, transactionPool, iconProvider, recentTasks, stageTaskUnfoldControllerProvider); recentTasks); } // Loading Loading @@ -333,62 +336,77 @@ public class WMShellModule { // // Unfold transition // @WMSingleton @Provides @DynamicOverride static FullscreenUnfoldController provideFullscreenUnfoldController( static UnfoldAnimationController provideUnfoldAnimationController( Optional<ShellUnfoldProgressProvider> progressProvider, Optional<UnfoldTransitionHandler> unfoldTransitionHandler, FullscreenUnfoldTaskAnimator fullscreenUnfoldTaskAnimator, UnfoldBackgroundController unfoldBackgroundController, TransactionPool transactionPool, @UnfoldTransition SplitTaskUnfoldAnimator splitAnimator, FullscreenUnfoldTaskAnimator fullscreenAnimator, Lazy<Optional<UnfoldTransitionHandler>> unfoldTransitionHandler, @ShellMainThread ShellExecutor mainExecutor ) { return new FullscreenUnfoldController(mainExecutor, unfoldBackgroundController, progressProvider.get(), unfoldTransitionHandler.get(), fullscreenUnfoldTaskAnimator); final List<UnfoldTaskAnimator> animators = new ArrayList<>(); animators.add(splitAnimator); animators.add(fullscreenAnimator); return new UnfoldAnimationController( transactionPool, progressProvider.get(), animators, unfoldTransitionHandler, mainExecutor ); } @Provides static FullscreenUnfoldTaskAnimator provideFullscreenUnfoldTaskAnimator( Context context, UnfoldBackgroundController unfoldBackgroundController, DisplayInsetsController displayInsetsController ) { return new FullscreenUnfoldTaskAnimator(context, unfoldBackgroundController, displayInsetsController); } @Provides static SplitTaskUnfoldAnimator provideSplitTaskUnfoldAnimatorBase( Context context, UnfoldBackgroundController backgroundController, @ShellMainThread ShellExecutor executor, Lazy<Optional<SplitScreenController>> splitScreenOptional, DisplayInsetsController displayInsetsController ) { return new FullscreenUnfoldTaskAnimator(context, displayInsetsController); return new SplitTaskUnfoldAnimator(context, executor, splitScreenOptional, backgroundController, displayInsetsController); } @WMSingleton @UnfoldShellTransition @Binds abstract SplitTaskUnfoldAnimator provideShellSplitTaskUnfoldAnimator( SplitTaskUnfoldAnimator splitTaskUnfoldAnimator); @WMSingleton @UnfoldTransition @Binds abstract SplitTaskUnfoldAnimator provideSplitTaskUnfoldAnimator( SplitTaskUnfoldAnimator splitTaskUnfoldAnimator); @WMSingleton @Provides @DynamicOverride static UnfoldTransitionHandler provideUnfoldTransitionHandler( Optional<ShellUnfoldProgressProvider> progressProvider, FullscreenUnfoldTaskAnimator animator, UnfoldBackgroundController backgroundController, @UnfoldShellTransition SplitTaskUnfoldAnimator unfoldAnimator, TransactionPool transactionPool, Transitions transitions, @ShellMainThread ShellExecutor executor) { return new UnfoldTransitionHandler(progressProvider.get(), animator, transactionPool, backgroundController, executor, transitions); } @Provides static Optional<StageTaskUnfoldController> provideStageTaskUnfoldController( Optional<ShellUnfoldProgressProvider> progressProvider, Context context, TransactionPool transactionPool, Lazy<UnfoldBackgroundController> unfoldBackgroundController, DisplayInsetsController displayInsetsController, @ShellMainThread ShellExecutor mainExecutor ) { return progressProvider.map(shellUnfoldTransitionProgressProvider -> new StageTaskUnfoldController( context, transactionPool, shellUnfoldTransitionProgressProvider, displayInsetsController, unfoldBackgroundController.get(), mainExecutor )); unfoldAnimator, transactionPool, executor, transitions); } @WMSingleton Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/ShellInitImpl.java +5 −5 Original line number Diff line number Diff line Loading @@ -27,7 +27,6 @@ import com.android.wm.shell.common.annotations.ExternalThread; import com.android.wm.shell.draganddrop.DragAndDropController; import com.android.wm.shell.freeform.FreeformTaskListener; import com.android.wm.shell.fullscreen.FullscreenTaskListener; import com.android.wm.shell.fullscreen.FullscreenUnfoldController; import com.android.wm.shell.kidsmode.KidsModeTaskOrganizer; import com.android.wm.shell.pip.phone.PipTouchHandler; import com.android.wm.shell.recents.RecentTasksController; Loading @@ -35,6 +34,7 @@ import com.android.wm.shell.splitscreen.SplitScreenController; import com.android.wm.shell.startingsurface.StartingWindowController; import com.android.wm.shell.transition.DefaultMixedHandler; import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.unfold.UnfoldAnimationController; import com.android.wm.shell.unfold.UnfoldTransitionHandler; import java.util.Optional; Loading @@ -55,7 +55,7 @@ public class ShellInitImpl { private final Optional<SplitScreenController> mSplitScreenOptional; private final Optional<PipTouchHandler> mPipTouchHandlerOptional; private final FullscreenTaskListener mFullscreenTaskListener; private final Optional<FullscreenUnfoldController> mFullscreenUnfoldController; private final Optional<UnfoldAnimationController> mUnfoldController; private final Optional<UnfoldTransitionHandler> mUnfoldTransitionHandler; private final Optional<FreeformTaskListener> mFreeformTaskListenerOptional; private final ShellExecutor mMainExecutor; Loading @@ -76,7 +76,7 @@ public class ShellInitImpl { Optional<SplitScreenController> splitScreenOptional, Optional<PipTouchHandler> pipTouchHandlerOptional, FullscreenTaskListener fullscreenTaskListener, Optional<FullscreenUnfoldController> fullscreenUnfoldTransitionController, Optional<UnfoldAnimationController> unfoldAnimationController, Optional<UnfoldTransitionHandler> unfoldTransitionHandler, Optional<FreeformTaskListener> freeformTaskListenerOptional, Optional<RecentTasksController> recentTasks, Loading @@ -93,7 +93,7 @@ public class ShellInitImpl { mSplitScreenOptional = splitScreenOptional; mFullscreenTaskListener = fullscreenTaskListener; mPipTouchHandlerOptional = pipTouchHandlerOptional; mFullscreenUnfoldController = fullscreenUnfoldTransitionController; mUnfoldController = unfoldAnimationController; mUnfoldTransitionHandler = unfoldTransitionHandler; mFreeformTaskListenerOptional = freeformTaskListenerOptional; mRecentTasks = recentTasks; Loading Loading @@ -146,7 +146,7 @@ public class ShellInitImpl { mShellTaskOrganizer.addListenerForType( f, ShellTaskOrganizer.TASK_LISTENER_TYPE_FREEFORM)); mFullscreenUnfoldController.ifPresent(FullscreenUnfoldController::init); mUnfoldController.ifPresent(UnfoldAnimationController::init); mRecentTasks.ifPresent(RecentTasksController::init); // Initialize kids mode task organizer Loading
libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java +22 −1 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.compatui.CompatUIController; import com.android.wm.shell.recents.RecentTasksController; import com.android.wm.shell.startingsurface.StartingWindowController; import com.android.wm.shell.unfold.UnfoldAnimationController; import java.io.PrintWriter; import java.util.ArrayList; Loading Loading @@ -178,34 +179,42 @@ public class ShellTaskOrganizer extends TaskOrganizer implements @Nullable private final Optional<RecentTasksController> mRecentTasks; @Nullable private final UnfoldAnimationController mUnfoldAnimationController; @Nullable private RunningTaskInfo mLastFocusedTaskInfo; public ShellTaskOrganizer(ShellExecutor mainExecutor, Context context) { this(null /* taskOrganizerController */, mainExecutor, context, null /* compatUI */, Optional.empty() /* unfoldAnimationController */, Optional.empty() /* recentTasksController */); } public ShellTaskOrganizer(ShellExecutor mainExecutor, Context context, @Nullable CompatUIController compatUI) { this(null /* taskOrganizerController */, mainExecutor, context, compatUI, Optional.empty() /* unfoldAnimationController */, Optional.empty() /* recentTasksController */); } public ShellTaskOrganizer(ShellExecutor mainExecutor, Context context, @Nullable CompatUIController compatUI, Optional<UnfoldAnimationController> unfoldAnimationController, Optional<RecentTasksController> recentTasks) { this(null /* taskOrganizerController */, mainExecutor, context, compatUI, recentTasks); unfoldAnimationController, recentTasks); } @VisibleForTesting protected ShellTaskOrganizer(ITaskOrganizerController taskOrganizerController, ShellExecutor mainExecutor, Context context, @Nullable CompatUIController compatUI, Optional<UnfoldAnimationController> unfoldAnimationController, Optional<RecentTasksController> recentTasks) { super(taskOrganizerController, mainExecutor); mCompatUI = compatUI; mRecentTasks = recentTasks; mUnfoldAnimationController = unfoldAnimationController.orElse(null); if (compatUI != null) { compatUI.setCompatUICallback(this); } Loading Loading @@ -437,6 +446,9 @@ public class ShellTaskOrganizer extends TaskOrganizer implements if (listener != null) { listener.onTaskAppeared(info.getTaskInfo(), info.getLeash()); } if (mUnfoldAnimationController != null) { mUnfoldAnimationController.onTaskAppeared(info.getTaskInfo(), info.getLeash()); } notifyLocusVisibilityIfNeeded(info.getTaskInfo()); notifyCompatUI(info.getTaskInfo(), listener); } Loading @@ -458,6 +470,11 @@ public class ShellTaskOrganizer extends TaskOrganizer implements public void onTaskInfoChanged(RunningTaskInfo taskInfo) { synchronized (mLock) { ProtoLog.v(WM_SHELL_TASK_ORG, "Task info changed taskId=%d", taskInfo.taskId); if (mUnfoldAnimationController != null) { mUnfoldAnimationController.onTaskInfoChanged(taskInfo); } final TaskAppearedInfo data = mTasks.get(taskInfo.taskId); final TaskListener oldListener = getTaskListener(data.getTaskInfo()); final TaskListener newListener = getTaskListener(taskInfo); Loading Loading @@ -507,6 +524,10 @@ public class ShellTaskOrganizer extends TaskOrganizer implements public void onTaskVanished(RunningTaskInfo taskInfo) { synchronized (mLock) { ProtoLog.v(WM_SHELL_TASK_ORG, "Task vanished taskId=%d", taskInfo.taskId); if (mUnfoldAnimationController != null) { mUnfoldAnimationController.onTaskVanished(taskInfo); } final int taskId = taskInfo.taskId; final TaskListener listener = getTaskListener(mTasks.get(taskId).getTaskInfo()); mTasks.remove(taskId); Loading
libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +5 −0 Original line number Diff line number Diff line Loading @@ -178,6 +178,11 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange return outBounds; } /** Gets root bounds of the whole split layout */ public Rect getRootBounds() { return new Rect(mRootBounds); } /** Gets bounds of divider window with screen based coordinate. */ public Rect getDividerBounds() { return new Rect(mDividerBounds); Loading
libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java +14 −11 Original line number Diff line number Diff line Loading @@ -64,7 +64,6 @@ import com.android.wm.shell.draganddrop.DragAndDrop; import com.android.wm.shell.draganddrop.DragAndDropController; import com.android.wm.shell.freeform.FreeformTaskListener; import com.android.wm.shell.fullscreen.FullscreenTaskListener; import com.android.wm.shell.fullscreen.FullscreenUnfoldController; import com.android.wm.shell.hidedisplaycutout.HideDisplayCutout; import com.android.wm.shell.hidedisplaycutout.HideDisplayCutoutController; import com.android.wm.shell.kidsmode.KidsModeTaskOrganizer; Loading @@ -88,6 +87,7 @@ import com.android.wm.shell.tasksurfacehelper.TaskSurfaceHelperController; import com.android.wm.shell.transition.ShellTransitions; import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.unfold.ShellUnfoldProgressProvider; import com.android.wm.shell.unfold.UnfoldAnimationController; import com.android.wm.shell.unfold.UnfoldTransitionHandler; import java.util.Optional; Loading Loading @@ -176,9 +176,11 @@ public abstract class WMShellBaseModule { static ShellTaskOrganizer provideShellTaskOrganizer(@ShellMainThread ShellExecutor mainExecutor, Context context, CompatUIController compatUI, Optional<UnfoldAnimationController> unfoldAnimationController, Optional<RecentTasksController> recentTasksOptional ) { return new ShellTaskOrganizer(mainExecutor, context, compatUI, recentTasksOptional); return new ShellTaskOrganizer(mainExecutor, context, compatUI, unfoldAnimationController, recentTasksOptional); } @WMSingleton Loading @@ -190,10 +192,12 @@ public abstract class WMShellBaseModule { SyncTransactionQueue syncTransactionQueue, DisplayController displayController, DisplayInsetsController displayInsetsController, Optional<UnfoldAnimationController> unfoldAnimationController, Optional<RecentTasksController> recentTasksOptional ) { return new KidsModeTaskOrganizer(mainExecutor, mainHandler, context, syncTransactionQueue, displayController, displayInsetsController, recentTasksOptional); displayController, displayInsetsController, unfoldAnimationController, recentTasksOptional); } @WMSingleton Loading Loading @@ -290,13 +294,11 @@ public abstract class WMShellBaseModule { static FullscreenTaskListener provideFullscreenTaskListener( @DynamicOverride Optional<FullscreenTaskListener> fullscreenTaskListener, SyncTransactionQueue syncQueue, Optional<FullscreenUnfoldController> optionalFullscreenUnfoldController, Optional<RecentTasksController> recentTasksOptional) { if (fullscreenTaskListener.isPresent()) { return fullscreenTaskListener.get(); } else { return new FullscreenTaskListener(syncQueue, optionalFullscreenUnfoldController, recentTasksOptional); return new FullscreenTaskListener(syncQueue, recentTasksOptional); } } Loading @@ -310,12 +312,13 @@ public abstract class WMShellBaseModule { // Workaround for dynamic overriding with a default implementation, see {@link DynamicOverride} @BindsOptionalOf @DynamicOverride abstract FullscreenUnfoldController optionalFullscreenUnfoldController(); abstract UnfoldAnimationController optionalUnfoldController(); @WMSingleton @Provides static Optional<FullscreenUnfoldController> provideFullscreenUnfoldController( @DynamicOverride Lazy<Optional<FullscreenUnfoldController>> fullscreenUnfoldController, static Optional<UnfoldAnimationController> provideUnfoldController( @DynamicOverride Lazy<Optional<UnfoldAnimationController>> fullscreenUnfoldController, Optional<ShellUnfoldProgressProvider> progressProvider) { if (progressProvider.isPresent() && progressProvider.get() != ShellUnfoldProgressProvider.NO_PROVIDER) { Loading Loading @@ -640,7 +643,7 @@ public abstract class WMShellBaseModule { Optional<SplitScreenController> splitScreenOptional, Optional<PipTouchHandler> pipTouchHandlerOptional, FullscreenTaskListener fullscreenTaskListener, Optional<FullscreenUnfoldController> appUnfoldTransitionController, Optional<UnfoldAnimationController> unfoldAnimationController, Optional<UnfoldTransitionHandler> unfoldTransitionHandler, Optional<FreeformTaskListener> freeformTaskListener, Optional<RecentTasksController> recentTasksOptional, Loading @@ -657,7 +660,7 @@ public abstract class WMShellBaseModule { splitScreenOptional, pipTouchHandlerOptional, fullscreenTaskListener, appUnfoldTransitionController, unfoldAnimationController, unfoldTransitionHandler, freeformTaskListener, recentTasksOptional, Loading
libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +57 −39 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ import com.android.wm.shell.common.annotations.ShellBackgroundThread; import com.android.wm.shell.common.annotations.ShellMainThread; import com.android.wm.shell.draganddrop.DragAndDropController; import com.android.wm.shell.freeform.FreeformTaskListener; import com.android.wm.shell.fullscreen.FullscreenUnfoldController; import com.android.wm.shell.onehanded.OneHandedController; import com.android.wm.shell.pip.Pip; import com.android.wm.shell.pip.PipAnimationController; Loading @@ -68,17 +67,22 @@ import com.android.wm.shell.pip.phone.PipMotionHelper; import com.android.wm.shell.pip.phone.PipTouchHandler; import com.android.wm.shell.recents.RecentTasksController; import com.android.wm.shell.splitscreen.SplitScreenController; import com.android.wm.shell.splitscreen.StageTaskUnfoldController; import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.unfold.UnfoldAnimationController; import com.android.wm.shell.unfold.ShellUnfoldProgressProvider; import com.android.wm.shell.unfold.UnfoldBackgroundController; import com.android.wm.shell.unfold.UnfoldTransitionHandler; import com.android.wm.shell.unfold.animation.FullscreenUnfoldTaskAnimator; import com.android.wm.shell.unfold.animation.SplitTaskUnfoldAnimator; import com.android.wm.shell.unfold.animation.UnfoldTaskAnimator; import com.android.wm.shell.unfold.qualifier.UnfoldTransition; import com.android.wm.shell.unfold.qualifier.UnfoldShellTransition; import java.util.ArrayList; import java.util.List; import java.util.Optional; import javax.inject.Provider; import dagger.Binds; import dagger.Lazy; import dagger.Module; import dagger.Provides; Loading @@ -92,7 +96,7 @@ import dagger.Provides; * dependencies should go into {@link WMShellBaseModule}. */ @Module(includes = WMShellBaseModule.class) public class WMShellModule { public abstract class WMShellModule { // // Bubbles Loading Loading @@ -173,12 +177,11 @@ public class WMShellModule { DisplayImeController displayImeController, DisplayInsetsController displayInsetsController, Transitions transitions, TransactionPool transactionPool, IconProvider iconProvider, Optional<RecentTasksController> recentTasks, Provider<Optional<StageTaskUnfoldController>> stageTaskUnfoldControllerProvider) { Optional<RecentTasksController> recentTasks) { return new SplitScreenController(shellTaskOrganizer, syncQueue, context, rootTaskDisplayAreaOrganizer, mainExecutor, displayController, displayImeController, displayInsetsController, transitions, transactionPool, iconProvider, recentTasks, stageTaskUnfoldControllerProvider); recentTasks); } // Loading Loading @@ -333,62 +336,77 @@ public class WMShellModule { // // Unfold transition // @WMSingleton @Provides @DynamicOverride static FullscreenUnfoldController provideFullscreenUnfoldController( static UnfoldAnimationController provideUnfoldAnimationController( Optional<ShellUnfoldProgressProvider> progressProvider, Optional<UnfoldTransitionHandler> unfoldTransitionHandler, FullscreenUnfoldTaskAnimator fullscreenUnfoldTaskAnimator, UnfoldBackgroundController unfoldBackgroundController, TransactionPool transactionPool, @UnfoldTransition SplitTaskUnfoldAnimator splitAnimator, FullscreenUnfoldTaskAnimator fullscreenAnimator, Lazy<Optional<UnfoldTransitionHandler>> unfoldTransitionHandler, @ShellMainThread ShellExecutor mainExecutor ) { return new FullscreenUnfoldController(mainExecutor, unfoldBackgroundController, progressProvider.get(), unfoldTransitionHandler.get(), fullscreenUnfoldTaskAnimator); final List<UnfoldTaskAnimator> animators = new ArrayList<>(); animators.add(splitAnimator); animators.add(fullscreenAnimator); return new UnfoldAnimationController( transactionPool, progressProvider.get(), animators, unfoldTransitionHandler, mainExecutor ); } @Provides static FullscreenUnfoldTaskAnimator provideFullscreenUnfoldTaskAnimator( Context context, UnfoldBackgroundController unfoldBackgroundController, DisplayInsetsController displayInsetsController ) { return new FullscreenUnfoldTaskAnimator(context, unfoldBackgroundController, displayInsetsController); } @Provides static SplitTaskUnfoldAnimator provideSplitTaskUnfoldAnimatorBase( Context context, UnfoldBackgroundController backgroundController, @ShellMainThread ShellExecutor executor, Lazy<Optional<SplitScreenController>> splitScreenOptional, DisplayInsetsController displayInsetsController ) { return new FullscreenUnfoldTaskAnimator(context, displayInsetsController); return new SplitTaskUnfoldAnimator(context, executor, splitScreenOptional, backgroundController, displayInsetsController); } @WMSingleton @UnfoldShellTransition @Binds abstract SplitTaskUnfoldAnimator provideShellSplitTaskUnfoldAnimator( SplitTaskUnfoldAnimator splitTaskUnfoldAnimator); @WMSingleton @UnfoldTransition @Binds abstract SplitTaskUnfoldAnimator provideSplitTaskUnfoldAnimator( SplitTaskUnfoldAnimator splitTaskUnfoldAnimator); @WMSingleton @Provides @DynamicOverride static UnfoldTransitionHandler provideUnfoldTransitionHandler( Optional<ShellUnfoldProgressProvider> progressProvider, FullscreenUnfoldTaskAnimator animator, UnfoldBackgroundController backgroundController, @UnfoldShellTransition SplitTaskUnfoldAnimator unfoldAnimator, TransactionPool transactionPool, Transitions transitions, @ShellMainThread ShellExecutor executor) { return new UnfoldTransitionHandler(progressProvider.get(), animator, transactionPool, backgroundController, executor, transitions); } @Provides static Optional<StageTaskUnfoldController> provideStageTaskUnfoldController( Optional<ShellUnfoldProgressProvider> progressProvider, Context context, TransactionPool transactionPool, Lazy<UnfoldBackgroundController> unfoldBackgroundController, DisplayInsetsController displayInsetsController, @ShellMainThread ShellExecutor mainExecutor ) { return progressProvider.map(shellUnfoldTransitionProgressProvider -> new StageTaskUnfoldController( context, transactionPool, shellUnfoldTransitionProgressProvider, displayInsetsController, unfoldBackgroundController.get(), mainExecutor )); unfoldAnimator, transactionPool, executor, transitions); } @WMSingleton Loading