diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java index c69dc0d8c4..72c163ebc3 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java @@ -89,6 +89,7 @@ import com.android.launcher3.views.ActivityContext; import com.android.systemui.shared.recents.model.Task; import com.android.systemui.shared.rotation.RotationButtonController; import com.android.systemui.shared.system.ActivityManagerWrapper; +import com.android.systemui.unfold.updates.RotationChangeProvider; import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider; import java.io.PrintWriter; @@ -198,7 +199,9 @@ public class TaskbarActivityContext extends BaseTaskbarContext { new TaskbarViewController(this, taskbarView), new TaskbarScrimViewController(this, taskbarScrimView), new TaskbarUnfoldAnimationController(this, unfoldTransitionProgressProvider, - mWindowManager, WindowManagerGlobal.getWindowManagerService()), + mWindowManager, + new RotationChangeProvider(WindowManagerGlobal.getWindowManagerService(), this, + getMainExecutor())), new TaskbarKeyguardController(this), new StashedHandleViewController(this, stashedHandleView), new TaskbarStashController(this), diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarUnfoldAnimationController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarUnfoldAnimationController.java index 64a4fa79df..4c937a7f9b 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarUnfoldAnimationController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarUnfoldAnimationController.java @@ -15,13 +15,13 @@ */ package com.android.launcher3.taskbar; -import android.view.IWindowManager; import android.view.View; import android.view.WindowManager; import com.android.quickstep.util.LauncherViewsMoveFromCenterTranslationApplier; import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator; import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener; +import com.android.systemui.unfold.updates.RotationChangeProvider; import com.android.systemui.unfold.util.NaturalRotationUnfoldProgressProvider; import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider; @@ -41,16 +41,20 @@ public class TaskbarUnfoldAnimationController implements public TaskbarUnfoldAnimationController(BaseTaskbarContext context, ScopedUnfoldTransitionProgressProvider source, - WindowManager windowManager, IWindowManager iWindowManager) { + WindowManager windowManager, + RotationChangeProvider rotationChangeProvider) { mScopedUnfoldTransitionProgressProvider = source; mNaturalUnfoldTransitionProgressProvider = - new NaturalRotationUnfoldProgressProvider(context, iWindowManager, source); + new NaturalRotationUnfoldProgressProvider(context, + rotationChangeProvider, + source); mMoveFromCenterAnimator = new UnfoldMoveFromCenterAnimator(windowManager, new LauncherViewsMoveFromCenterTranslationApplier()); } /** * Initializes the controller + * * @param taskbarControllers references to all other taskbar controllers */ public void init(TaskbarControllers taskbarControllers) { diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java index 4ca27b1145..ee9845ba78 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java +++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java @@ -66,6 +66,7 @@ import android.os.SystemProperties; import android.view.Display; import android.view.HapticFeedbackConstants; import android.view.View; +import android.view.WindowManagerGlobal; import android.window.SplashScreen; import androidx.annotation.Nullable; @@ -139,12 +140,14 @@ import com.android.quickstep.views.RecentsView; import com.android.quickstep.views.TaskView; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.RemoteAnimationTargetCompat; +import com.android.systemui.unfold.UnfoldSharedComponent; import com.android.systemui.unfold.UnfoldTransitionFactory; import com.android.systemui.unfold.UnfoldTransitionProgressProvider; import com.android.systemui.unfold.config.ResourceUnfoldTransitionConfig; import com.android.systemui.unfold.config.UnfoldTransitionConfig; import com.android.systemui.unfold.system.ActivityManagerActivityTypeProvider; import com.android.systemui.unfold.system.DeviceStateManagerFoldProvider; +import com.android.systemui.unfold.updates.RotationChangeProvider; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -173,6 +176,7 @@ public class QuickstepLauncher extends Launcher { // Will be updated when dragging from taskbar. private @Nullable DragOptions mNextWorkspaceDragOptions = null; private @Nullable UnfoldTransitionProgressProvider mUnfoldTransitionProgressProvider; + private @Nullable RotationChangeProvider mRotationChangeProvider; private @Nullable LauncherUnfoldAnimationController mLauncherUnfoldAnimationController; /** * If Launcher restarted while in the middle of an Overview split select, it needs this data to @@ -664,8 +668,8 @@ public class QuickstepLauncher extends Launcher { private void initUnfoldTransitionProgressProvider() { final UnfoldTransitionConfig config = new ResourceUnfoldTransitionConfig(); if (config.isEnabled()) { - mUnfoldTransitionProgressProvider = - UnfoldTransitionFactory.createUnfoldTransitionProgressProvider( + UnfoldSharedComponent unfoldComponent = + UnfoldTransitionFactory.createUnfoldSharedComponent( /* context= */ this, config, ProxyScreenStatusProvider.INSTANCE, @@ -677,13 +681,21 @@ public class QuickstepLauncher extends Launcher { getMainThreadHandler(), getMainExecutor(), /* backgroundExecutor= */ THREAD_POOL_EXECUTOR, - /* tracingTagPrefix= */ "launcher" + /* tracingTagPrefix= */ "launcher", + WindowManagerGlobal.getWindowManagerService() ); + mUnfoldTransitionProgressProvider = unfoldComponent.getUnfoldTransitionProvider() + .orElseThrow(() -> new IllegalStateException( + "Trying to create UnfoldTransitionProgressProvider when the " + + "transition is disabled")); + + mRotationChangeProvider = unfoldComponent.getRotationChangeProvider(); mLauncherUnfoldAnimationController = new LauncherUnfoldAnimationController( - this, + /* launcher= */ this, getWindowManager(), - mUnfoldTransitionProgressProvider + mUnfoldTransitionProgressProvider, + mRotationChangeProvider ); } } diff --git a/quickstep/src/com/android/quickstep/util/BaseUnfoldMoveFromCenterAnimator.java b/quickstep/src/com/android/quickstep/util/BaseUnfoldMoveFromCenterAnimator.java index 143042fb31..2a513ee7ee 100644 --- a/quickstep/src/com/android/quickstep/util/BaseUnfoldMoveFromCenterAnimator.java +++ b/quickstep/src/com/android/quickstep/util/BaseUnfoldMoveFromCenterAnimator.java @@ -16,12 +16,14 @@ package com.android.quickstep.util; import android.annotation.CallSuper; +import android.view.Surface.Rotation; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator; import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener; +import com.android.systemui.unfold.updates.RotationChangeProvider; import java.util.HashMap; import java.util.Map; @@ -32,15 +34,20 @@ import java.util.Map; public abstract class BaseUnfoldMoveFromCenterAnimator implements TransitionProgressListener { private final UnfoldMoveFromCenterAnimator mMoveFromCenterAnimation; + private final RotationChangeProvider mRotationChangeProvider; private final Map mOriginalClipToPadding = new HashMap<>(); private final Map mOriginalClipChildren = new HashMap<>(); + private final UnfoldMoveFromCenterRotationListener mRotationListener = + new UnfoldMoveFromCenterRotationListener(); private boolean mAnimationInProgress = false; - public BaseUnfoldMoveFromCenterAnimator(WindowManager windowManager) { + public BaseUnfoldMoveFromCenterAnimator(WindowManager windowManager, + RotationChangeProvider rotationChangeProvider) { mMoveFromCenterAnimation = new UnfoldMoveFromCenterAnimator(windowManager, new LauncherViewsMoveFromCenterTranslationApplier()); + mRotationChangeProvider = rotationChangeProvider; } @CallSuper @@ -50,6 +57,7 @@ public abstract class BaseUnfoldMoveFromCenterAnimator implements TransitionProg mMoveFromCenterAnimation.updateDisplayProperties(); onPrepareViewsForAnimation(); onTransitionProgress(0f); + mRotationChangeProvider.addCallback(mRotationListener); } @CallSuper @@ -62,6 +70,7 @@ public abstract class BaseUnfoldMoveFromCenterAnimator implements TransitionProg @Override public void onTransitionFinished() { mAnimationInProgress = false; + mRotationChangeProvider.removeCallback(mRotationListener); mMoveFromCenterAnimation.onTransitionFinished(); clearRegisteredViews(); } @@ -109,4 +118,14 @@ public abstract class BaseUnfoldMoveFromCenterAnimator implements TransitionProg view.setClipChildren(originalClipChildren); } } + + private class UnfoldMoveFromCenterRotationListener implements + RotationChangeProvider.RotationListener { + + @Override + public void onRotationChanged(@Rotation int newRotation) { + mMoveFromCenterAnimation.updateDisplayProperties(newRotation); + updateRegisteredViewsIfNeeded(); + } + } } diff --git a/quickstep/src/com/android/quickstep/util/LauncherUnfoldAnimationController.java b/quickstep/src/com/android/quickstep/util/LauncherUnfoldAnimationController.java index 97be4370b9..f12074b538 100644 --- a/quickstep/src/com/android/quickstep/util/LauncherUnfoldAnimationController.java +++ b/quickstep/src/com/android/quickstep/util/LauncherUnfoldAnimationController.java @@ -24,7 +24,6 @@ import android.annotation.Nullable; import android.util.FloatProperty; import android.util.MathUtils; import android.view.WindowManager; -import android.view.WindowManagerGlobal; import androidx.core.view.OneShotPreDrawListener; @@ -34,6 +33,7 @@ import com.android.launcher3.Workspace; import com.android.launcher3.util.HorizontalInsettableView; import com.android.systemui.unfold.UnfoldTransitionProgressProvider; import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener; +import com.android.systemui.unfold.updates.RotationChangeProvider; import com.android.systemui.unfold.util.NaturalRotationUnfoldProgressProvider; import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider; @@ -62,16 +62,17 @@ public class LauncherUnfoldAnimationController { public LauncherUnfoldAnimationController( Launcher launcher, WindowManager windowManager, - UnfoldTransitionProgressProvider unfoldTransitionProgressProvider) { + UnfoldTransitionProgressProvider unfoldTransitionProgressProvider, + RotationChangeProvider rotationChangeProvider) { mLauncher = launcher; mProgressProvider = new ScopedUnfoldTransitionProgressProvider( unfoldTransitionProgressProvider); mUnfoldMoveFromCenterHotseatAnimator = new UnfoldMoveFromCenterHotseatAnimator(launcher, - windowManager); + windowManager, rotationChangeProvider); mUnfoldMoveFromCenterWorkspaceAnimator = new UnfoldMoveFromCenterWorkspaceAnimator(launcher, - windowManager); + windowManager, rotationChangeProvider); mNaturalOrientationProgressProvider = new NaturalRotationUnfoldProgressProvider(launcher, - WindowManagerGlobal.getWindowManagerService(), mProgressProvider); + rotationChangeProvider, mProgressProvider); mNaturalOrientationProgressProvider.init(); // Animated in all orientations diff --git a/quickstep/src/com/android/quickstep/util/UnfoldMoveFromCenterHotseatAnimator.java b/quickstep/src/com/android/quickstep/util/UnfoldMoveFromCenterHotseatAnimator.java index dc97dd6f86..01a997a451 100644 --- a/quickstep/src/com/android/quickstep/util/UnfoldMoveFromCenterHotseatAnimator.java +++ b/quickstep/src/com/android/quickstep/util/UnfoldMoveFromCenterHotseatAnimator.java @@ -21,6 +21,7 @@ import android.view.WindowManager; import com.android.launcher3.Hotseat; import com.android.launcher3.Launcher; +import com.android.systemui.unfold.updates.RotationChangeProvider; /** * Animation that moves hotseat icons from center to the sides (final position) @@ -29,8 +30,9 @@ public class UnfoldMoveFromCenterHotseatAnimator extends BaseUnfoldMoveFromCente private final Launcher mLauncher; - public UnfoldMoveFromCenterHotseatAnimator(Launcher launcher, WindowManager windowManager) { - super(windowManager); + public UnfoldMoveFromCenterHotseatAnimator(Launcher launcher, WindowManager windowManager, + RotationChangeProvider rotationChangeProvider) { + super(windowManager, rotationChangeProvider); mLauncher = launcher; } diff --git a/quickstep/src/com/android/quickstep/util/UnfoldMoveFromCenterWorkspaceAnimator.java b/quickstep/src/com/android/quickstep/util/UnfoldMoveFromCenterWorkspaceAnimator.java index 354d1579b0..95a4b8f2e2 100644 --- a/quickstep/src/com/android/quickstep/util/UnfoldMoveFromCenterWorkspaceAnimator.java +++ b/quickstep/src/com/android/quickstep/util/UnfoldMoveFromCenterWorkspaceAnimator.java @@ -22,6 +22,7 @@ import com.android.launcher3.CellLayout; import com.android.launcher3.Launcher; import com.android.launcher3.ShortcutAndWidgetContainer; import com.android.launcher3.Workspace; +import com.android.systemui.unfold.updates.RotationChangeProvider; /** * Animation that moves launcher icons and widgets from center to the sides (final position) @@ -30,8 +31,9 @@ public class UnfoldMoveFromCenterWorkspaceAnimator extends BaseUnfoldMoveFromCen private final Launcher mLauncher; - public UnfoldMoveFromCenterWorkspaceAnimator(Launcher launcher, WindowManager windowManager) { - super(windowManager); + public UnfoldMoveFromCenterWorkspaceAnimator(Launcher launcher, WindowManager windowManager, + RotationChangeProvider rotationChangeProvider) { + super(windowManager, rotationChangeProvider); mLauncher = launcher; }