diff options
author | 2024-12-13 10:03:01 -0800 | |
---|---|---|
committer | 2025-03-17 14:17:42 -0700 | |
commit | 0638f9681846e4df893a432728ac5318b0ab51ad (patch) | |
tree | 2a9bb163e53addb7b020eb42df2f9b139bf292c6 | |
parent | 32f78c5e922d7b53e3cb27de10f592d21d179cf8 (diff) |
Crop by navigation-bar inset during animations
This will update the surface crop of animating tasks/activities
to match the navigation-bar insets.
Bug: 336511494
Test: Enable pinned taskbar, launch app, note correct bounds
Flag: com.android.wm.shell.enable_dynamic_insets_for_app_launch
Change-Id: I0d3a62fc0e680f9d79ea796da9f94372c1c4d5c2
12 files changed, 203 insertions, 37 deletions
diff --git a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/IHomeTransitionListener.aidl b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/IHomeTransitionListener.aidl index 8481c446c6aa..8dcda53b602b 100644 --- a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/IHomeTransitionListener.aidl +++ b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/IHomeTransitionListener.aidl @@ -18,6 +18,7 @@ package com.android.wm.shell.shared; import android.window.RemoteTransition; import android.window.TransitionFilter; +import android.view.InsetsState; /** * Listener interface that Launcher attaches to SystemUI to get home activity transition callbacks @@ -29,5 +30,10 @@ oneway interface IHomeTransitionListener { * Called when a transition changes the visibility of the home activity on the default display. */ void onHomeVisibilityChanged(in boolean isVisible); + + /** + * Called when the insets at display-level change. + */ + void onDisplayInsetsChanged(in InsetsState insets); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java index f62fd819319e..b3c25d495002 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java @@ -762,6 +762,7 @@ public abstract class WMShellBaseModule { ShellTaskOrganizer organizer, TransactionPool pool, DisplayController displayController, + DisplayInsetsController displayInsetsController, @ShellMainThread ShellExecutor mainExecutor, @ShellMainThread Handler mainHandler, @ShellAnimationThread ShellExecutor animExecutor, @@ -773,15 +774,19 @@ public abstract class WMShellBaseModule { shellInit = new ShellInit(mainExecutor); } return new Transitions(context, shellInit, shellCommandHandler, shellController, organizer, - pool, displayController, mainExecutor, mainHandler, animExecutor, - rootTaskDisplayAreaOrganizer, homeTransitionObserver, focusTransitionObserver); + pool, displayController, displayInsetsController, mainExecutor, mainHandler, + animExecutor, rootTaskDisplayAreaOrganizer, homeTransitionObserver, + focusTransitionObserver); } @WMSingleton @Provides static HomeTransitionObserver provideHomeTransitionObserver(Context context, - @ShellMainThread ShellExecutor mainExecutor) { - return new HomeTransitionObserver(context, mainExecutor); + @ShellMainThread ShellExecutor mainExecutor, + DisplayInsetsController displayInsetsController, + ShellInit shellInit) { + return new HomeTransitionObserver(context, mainExecutor, displayInsetsController, + shellInit); } @WMSingleton diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultSurfaceAnimator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultSurfaceAnimator.java index ce98b03b77a6..bff08ba6d88f 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultSurfaceAnimator.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultSurfaceAnimator.java @@ -42,9 +42,10 @@ public class DefaultSurfaceAnimator { @NonNull Animation anim, @NonNull SurfaceControl leash, @NonNull Runnable finishCallback, @NonNull TransactionPool pool, @NonNull ShellExecutor mainExecutor, @Nullable Point position, float cornerRadius, - @Nullable Rect clipRect) { + @Nullable Rect clipRect, + @Nullable TransitionAnimationHelper.RoundedContentPerDisplay roundedBounds) { final DefaultAnimationAdapter adapter = new DefaultAnimationAdapter(anim, leash, - position, clipRect, cornerRadius); + position, clipRect, cornerRadius, roundedBounds); buildSurfaceAnimation(animations, anim, finishCallback, pool, mainExecutor, adapter); } @@ -109,9 +110,17 @@ public class DefaultSurfaceAnimator { @Nullable final Rect mClipRect; @Nullable private final Rect mAnimClipRect; final float mCornerRadius; + final int mWindowBottom; + + /** + * Inset changes aren't synchronized with transitions, so use a "provider" to track the + * bottom of the display content during the animation. + */ + @Nullable final TransitionAnimationHelper.RoundedContentPerDisplay mRoundedContentBounds; DefaultAnimationAdapter(@NonNull Animation anim, @NonNull SurfaceControl leash, - @Nullable Point position, @Nullable Rect clipRect, float cornerRadius) { + @Nullable Point position, @Nullable Rect clipRect, float cornerRadius, + TransitionAnimationHelper.RoundedContentPerDisplay roundedBounds) { super(leash); mAnim = anim; mPosition = (position != null && (position.x != 0 || position.y != 0)) @@ -119,6 +128,8 @@ public class DefaultSurfaceAnimator { mClipRect = (clipRect != null && !clipRect.isEmpty()) ? clipRect : null; mAnimClipRect = mClipRect != null ? new Rect() : null; mCornerRadius = cornerRadius; + mWindowBottom = clipRect != null ? clipRect.bottom : 0; + mRoundedContentBounds = roundedBounds; } @Override @@ -136,6 +147,11 @@ public class DefaultSurfaceAnimator { if (mClipRect != null) { boolean needCrop = false; + if (mRoundedContentBounds != null) { + mClipRect.bottom = Math.min(mRoundedContentBounds.mBounds.bottom, + mWindowBottom); + } + mAnimClipRect.set(mClipRect); if (transformation.hasClipRect()) { mAnimClipRect.intersectUnchecked(transformation.getClipRect()); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java index bf5800330979..ff9e09236d6c 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java @@ -66,6 +66,7 @@ import static com.android.internal.policy.TransitionAnimation.WALLPAPER_TRANSITI import static com.android.internal.policy.TransitionAnimation.WALLPAPER_TRANSITION_INTRA_OPEN; import static com.android.internal.policy.TransitionAnimation.WALLPAPER_TRANSITION_NONE; import static com.android.internal.policy.TransitionAnimation.WALLPAPER_TRANSITION_OPEN; +import static com.android.wm.shell.Flags.enableDynamicInsetsForAppLaunch; import static com.android.wm.shell.transition.DefaultSurfaceAnimator.buildSurfaceAnimation; import static com.android.wm.shell.transition.TransitionAnimationHelper.getTransitionBackgroundColorIfSet; import static com.android.wm.shell.transition.TransitionAnimationHelper.getTransitionTypeFromInfo; @@ -111,6 +112,7 @@ import com.android.window.flags.Flags; import com.android.wm.shell.RootTaskDisplayAreaOrganizer; import com.android.wm.shell.animation.SizeChangeAnimation; import com.android.wm.shell.common.DisplayController; +import com.android.wm.shell.common.DisplayInsetsController; import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.protolog.ShellProtoLogGroup; @@ -134,6 +136,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler { private final ShellExecutor mAnimExecutor; private final TransitionAnimation mTransitionAnimation; private final DevicePolicyManager mDevicePolicyManager; + private final TransitionAnimationHelper.RoundedContentTracker mRoundedContentBounds; /** Keeps track of the currently-running animations associated with each transition. */ private final ArrayMap<IBinder, ArrayList<Animator>> mAnimations = new ArrayMap<>(); @@ -163,6 +166,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler { DefaultTransitionHandler(@NonNull Context context, @NonNull ShellInit shellInit, @NonNull DisplayController displayController, + @NonNull DisplayInsetsController displayInsetsController, @NonNull TransactionPool transactionPool, @NonNull ShellExecutor mainExecutor, @NonNull Handler mainHandler, @NonNull ShellExecutor animExecutor, @@ -179,6 +183,8 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler { mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class); shellInit.addInitCallback(this::onInit, this); mRootTDAOrganizer = rootTDAOrganizer; + mRoundedContentBounds = new TransitionAnimationHelper.RoundedContentTracker( + displayController, displayInsetsController); mInteractionJankMonitor = interactionJankMonitor; } @@ -191,6 +197,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler { mMainHandler); TransitionAnimation.initAttributeCache(mContext, mMainHandler); + mRoundedContentBounds.init(); } private void updateEnterpriseThumbnailDrawable() { @@ -297,6 +304,18 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler { return ROTATION_ANIMATION_SEAMLESS; } + @Nullable + final TransitionAnimationHelper.RoundedContentPerDisplay getRoundedContentBounds( + TransitionInfo.Change change) { + if (!enableDynamicInsetsForAppLaunch()) { + return null; + } + if (change.getTaskInfo() == null && change.getActivityComponent() == null) { + return null; + } + return mRoundedContentBounds.forDisplay(change.getEndDisplayId()); + } + @Override public boolean startAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info, @NonNull SurfaceControl.Transaction startTransaction, @@ -556,7 +575,8 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler { change.getEndAbsBounds().left - animRoot.getOffset().x, change.getEndAbsBounds().top - animRoot.getOffset().y); - if (change.getActivityComponent() != null) { + final boolean isActivity = change.getActivityComponent() != null; + if (isActivity) { // For appcompat letterbox: we intentionally report the task-bounds so that we // can animate as-if letterboxes are "part of" the activity. This means we can't // always rely solely on endAbsBounds and need to also max with endRelOffset. @@ -564,7 +584,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler { animRelOffset.y = Math.max(animRelOffset.y, change.getEndRelOffset().y); } - if (change.getActivityComponent() != null && !isActivityLevel + if (isActivity && !isActivityLevel && !mRotator.isRotated(change)) { // At this point, this is an independent activity change in a non-activity // transition. This means that an activity transition got erroneously combined @@ -589,8 +609,10 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler { } buildSurfaceAnimation(animations, a, change.getLeash(), onAnimFinish, - mTransactionPool, mMainExecutor, animRelOffset, cornerRadius, - clipRect); + mTransactionPool, mMainExecutor, animRelOffset, cornerRadius, clipRect, + isTask || isActivity + ? mRoundedContentBounds.forDisplay(change.getEndDisplayId()) + : null); final TransitionInfo.AnimationOptions options = change.getAnimationOptions(); if (options != null) { @@ -932,7 +954,8 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler { a.restrictDuration(MAX_ANIMATION_DURATION); a.scaleCurrentDuration(mTransitionAnimationScaleSetting); buildSurfaceAnimation(animations, a, wt.getSurface(), finisher, mTransactionPool, - mMainExecutor, change.getEndRelOffset(), cornerRadius, change.getEndAbsBounds()); + mMainExecutor, change.getEndRelOffset(), cornerRadius, change.getEndAbsBounds(), + getRoundedContentBounds(change)); } private void attachThumbnailAnimation(@NonNull ArrayList<Animator> animations, @@ -956,7 +979,8 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler { a.restrictDuration(MAX_ANIMATION_DURATION); a.scaleCurrentDuration(mTransitionAnimationScaleSetting); buildSurfaceAnimation(animations, a, wt.getSurface(), finisher, mTransactionPool, - mMainExecutor, change.getEndRelOffset(), cornerRadius, change.getEndAbsBounds()); + mMainExecutor, change.getEndRelOffset(), cornerRadius, change.getEndAbsBounds(), + getRoundedContentBounds(change)); } private static int getWallpaperTransitType(TransitionInfo info) { diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/HomeTransitionObserver.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/HomeTransitionObserver.java index cca982142a3a..c71458dec5ce 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/HomeTransitionObserver.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/HomeTransitionObserver.java @@ -29,15 +29,18 @@ import android.annotation.NonNull; import android.app.ActivityManager; import android.content.Context; import android.os.IBinder; +import android.view.InsetsState; import android.view.SurfaceControl; import android.window.TransitionInfo; +import com.android.wm.shell.common.DisplayInsetsController; import com.android.wm.shell.common.RemoteCallable; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.SingleInstanceRemoteListener; import com.android.wm.shell.shared.IHomeTransitionListener; import com.android.wm.shell.shared.TransitionUtil; import com.android.wm.shell.shared.bubbles.BubbleAnythingFlagHelper; +import com.android.wm.shell.sysui.ShellInit; /** * The {@link TransitionObserver} that observes for transitions involving the home @@ -51,13 +54,30 @@ public class HomeTransitionObserver implements TransitionObserver, private @NonNull final Context mContext; private @NonNull final ShellExecutor mMainExecutor; + private @NonNull final DisplayInsetsController mDisplayInsetsController; private IBinder mPendingStartDragTransition; private Boolean mPendingHomeVisibilityUpdate; public HomeTransitionObserver(@NonNull Context context, - @NonNull ShellExecutor mainExecutor) { + @NonNull ShellExecutor mainExecutor, + @NonNull DisplayInsetsController displayInsetsController, + @NonNull ShellInit shellInit) { mContext = context; mMainExecutor = mainExecutor; + mDisplayInsetsController = displayInsetsController; + + shellInit.addInitCallback(this::onInit, this); + } + + private void onInit() { + mDisplayInsetsController.addInsetsChangedListener(DEFAULT_DISPLAY, + new DisplayInsetsController.OnInsetsChangedListener() { + @Override + public void insetsChanged(InsetsState insetsState) { + if (mListener == null) return; + mListener.call(l -> l.onDisplayInsetsChanged(insetsState)); + } + }); } @Override diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/ScreenRotationAnimation.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/ScreenRotationAnimation.java index aa42b7f0ca76..8100f1d1a9a9 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/ScreenRotationAnimation.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/ScreenRotationAnimation.java @@ -347,21 +347,21 @@ class ScreenRotationAnimation { @NonNull Runnable finishCallback, @NonNull ShellExecutor mainExecutor) { buildSurfaceAnimation(animations, mRotateEnterAnimation, getEnterSurface(), finishCallback, mTransactionPool, mainExecutor, null /* position */, 0 /* cornerRadius */, - null /* clipRect */); + null /* clipRect */, null); } private void startScreenshotRotationAnimation(@NonNull ArrayList<Animator> animations, @NonNull Runnable finishCallback, @NonNull ShellExecutor mainExecutor) { buildSurfaceAnimation(animations, mRotateExitAnimation, mAnimLeash, finishCallback, mTransactionPool, mainExecutor, null /* position */, 0 /* cornerRadius */, - null /* clipRect */); + null /* clipRect */, null); } private void buildScreenshotAlphaAnimation(@NonNull ArrayList<Animator> animations, @NonNull Runnable finishCallback, @NonNull ShellExecutor mainExecutor) { buildSurfaceAnimation(animations, mRotateAlphaAnimation, mAnimLeash, finishCallback, mTransactionPool, mainExecutor, null /* position */, 0 /* cornerRadius */, - null /* clipRect */); + null /* clipRect */, null); } private void buildLumaAnimation(@NonNull ArrayList<Animator> animations, diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java index edfb56019a60..48b48640a37f 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java @@ -39,6 +39,11 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.app.WindowConfiguration; import android.graphics.Color; +import android.graphics.Insets; +import android.graphics.Rect; +import android.util.SparseArray; +import android.view.InsetsSource; +import android.view.InsetsState; import android.view.SurfaceControl; import android.view.WindowManager; import android.view.animation.Animation; @@ -47,6 +52,9 @@ import android.window.TransitionInfo; import com.android.internal.R; import com.android.internal.policy.TransitionAnimation; import com.android.internal.protolog.ProtoLog; +import com.android.wm.shell.common.DisplayController; +import com.android.wm.shell.common.DisplayInsetsController; +import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.protolog.ShellProtoLogGroup; import com.android.wm.shell.shared.TransitionUtil; @@ -325,4 +333,77 @@ public class TransitionAnimationHelper { } return false; } + + /** + * In some situations (eg. TaskBar) the content area of a display appears to be rounded. For + * these situations, we may want the animation to also express the same rounded corners (even + * though in steady-state, the app internally manages the insets). This class Keeps track of, + * and provides, the bounds of rounded-corner display content. + * + * This is used to enable already-running animations to adapt to changes in taskbar/navbar + * position live. + */ + public static class RoundedContentPerDisplay implements + DisplayInsetsController.OnInsetsChangedListener { + + /** The current bounds of the display content (post-inset). */ + final Rect mBounds = new Rect(); + + @Override + public void insetsChanged(InsetsState insetsState) { + Insets insets = Insets.NONE; + for (int i = insetsState.sourceSize() - 1; i >= 0; i--) { + final InsetsSource source = insetsState.sourceAt(i); + if (!source.hasFlags(InsetsSource.FLAG_INSETS_ROUNDED_CORNER)) { + continue; + } + insets = Insets.max(source.calculateInsets(insetsState.getDisplayFrame(), false), + insets); + } + mBounds.set(insetsState.getDisplayFrame()); + mBounds.inset(insets); + } + } + + /** + * Keeps track of the bounds of rounded-corner display content (post-inset). + * + * @see RoundedContentPerDisplay + */ + public static class RoundedContentTracker implements + DisplayController.OnDisplaysChangedListener { + final DisplayController mDisplayController; + final DisplayInsetsController mDisplayInsetsController; + final SparseArray<RoundedContentPerDisplay> mPerDisplay = new SparseArray<>(); + + RoundedContentTracker(DisplayController dc, DisplayInsetsController dic) { + mDisplayController = dc; + mDisplayInsetsController = dic; + } + + void init() { + mDisplayController.addDisplayWindowListener(this); + } + + RoundedContentPerDisplay forDisplay(int displayId) { + return mPerDisplay.get(displayId); + } + + @Override + public void onDisplayAdded(int displayId) { + final RoundedContentPerDisplay perDisplay = new RoundedContentPerDisplay(); + mDisplayInsetsController.addInsetsChangedListener(displayId, perDisplay); + mPerDisplay.put(displayId, perDisplay); + final DisplayLayout dl = mDisplayController.getDisplayLayout(displayId); + perDisplay.mBounds.set(0, 0, dl.width(), dl.height()); + } + + @Override + public void onDisplayRemoved(int displayId) { + final RoundedContentPerDisplay listener = mPerDisplay.removeReturnOld(displayId); + if (listener != null) { + mDisplayInsetsController.removeInsetsChangedListener(displayId, listener); + } + } + } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java index 4f49ebcd2e83..3dc8733c879d 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java @@ -84,6 +84,7 @@ import com.android.internal.protolog.ProtoLog; import com.android.wm.shell.RootTaskDisplayAreaOrganizer; import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.common.DisplayController; +import com.android.wm.shell.common.DisplayInsetsController; import com.android.wm.shell.common.ExternalInterfaceBinder; import com.android.wm.shell.common.RemoteCallable; import com.android.wm.shell.common.ShellExecutor; @@ -314,13 +315,14 @@ public class Transitions implements RemoteCallable<Transitions>, @NonNull ShellTaskOrganizer organizer, @NonNull TransactionPool pool, @NonNull DisplayController displayController, + @NonNull DisplayInsetsController displayInsetsController, @NonNull ShellExecutor mainExecutor, @NonNull Handler mainHandler, @NonNull ShellExecutor animExecutor, @NonNull HomeTransitionObserver homeTransitionObserver, @NonNull FocusTransitionObserver focusTransitionObserver) { this(context, shellInit, new ShellCommandHandler(), shellController, organizer, pool, - displayController, mainExecutor, mainHandler, animExecutor, + displayController, displayInsetsController, mainExecutor, mainHandler, animExecutor, new RootTaskDisplayAreaOrganizer(mainExecutor, context, shellInit), homeTransitionObserver, focusTransitionObserver); } @@ -332,6 +334,7 @@ public class Transitions implements RemoteCallable<Transitions>, @NonNull ShellTaskOrganizer organizer, @NonNull TransactionPool pool, @NonNull DisplayController displayController, + @NonNull DisplayInsetsController displayInsetsController, @NonNull ShellExecutor mainExecutor, @NonNull Handler mainHandler, @NonNull ShellExecutor animExecutor, @@ -345,8 +348,8 @@ public class Transitions implements RemoteCallable<Transitions>, mDisplayController = displayController; mPlayerImpl = new TransitionPlayerImpl(); mDefaultTransitionHandler = new DefaultTransitionHandler(context, shellInit, - displayController, pool, mainExecutor, mainHandler, animExecutor, rootTDAOrganizer, - InteractionJankMonitor.getInstance()); + displayController, displayInsetsController, pool, mainExecutor, mainHandler, + animExecutor, rootTDAOrganizer, InteractionJankMonitor.getInstance()); mRemoteTransitionHandler = new RemoteTransitionHandler(mMainExecutor); mShellCommandHandler = shellCommandHandler; mShellController = shellController; 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 077b35583e04..f6e49853eddf 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 @@ -629,9 +629,9 @@ public class StageCoordinatorTests extends ShellTestCase { private Transitions createTestTransitions() { ShellInit shellInit = new ShellInit(mMainExecutor); final Transitions t = new Transitions(mContext, shellInit, mock(ShellController.class), - mTaskOrganizer, mTransactionPool, mock(DisplayController.class), mMainExecutor, - mMainHandler, mAnimExecutor, mock(HomeTransitionObserver.class), - mock(FocusTransitionObserver.class)); + mTaskOrganizer, mTransactionPool, mock(DisplayController.class), + mDisplayInsetsController, mMainExecutor, mMainHandler, mAnimExecutor, + mock(HomeTransitionObserver.class), mock(FocusTransitionObserver.class)); shellInit.init(); return t; } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/DefaultTransitionHandlerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/DefaultTransitionHandlerTest.java index 18fdbeff40f4..6996d44af034 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/DefaultTransitionHandlerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/DefaultTransitionHandlerTest.java @@ -53,6 +53,7 @@ import com.android.wm.shell.RootTaskDisplayAreaOrganizer; import com.android.wm.shell.ShellTestCase; import com.android.wm.shell.TestShellExecutor; import com.android.wm.shell.common.DisplayController; +import com.android.wm.shell.common.DisplayInsetsController; import com.android.wm.shell.shared.TransactionPool; import com.android.wm.shell.sysui.ShellInit; @@ -78,6 +79,8 @@ public class DefaultTransitionHandlerTest extends ShellTestCase { InstrumentationRegistry.getInstrumentation().getTargetContext(); private final DisplayController mDisplayController = mock(DisplayController.class); + private final DisplayInsetsController mDisplayInsetsController = + mock(DisplayInsetsController.class); private final TransactionPool mTransactionPool = new MockTransactionPool(); private final TestShellExecutor mMainExecutor = new TestShellExecutor(); private final TestShellExecutor mAnimExecutor = new TestShellExecutor(); @@ -95,7 +98,7 @@ public class DefaultTransitionHandlerTest extends ShellTestCase { mContext, mShellInit); mTransitionHandler = new DefaultTransitionHandler( - mContext, mShellInit, mDisplayController, + mContext, mShellInit, mDisplayController, mDisplayInsetsController, mTransactionPool, mMainExecutor, mMainHandler, mAnimExecutor, mRootTaskDisplayAreaOrganizer, mock(InteractionJankMonitor.class)); mShellInit.init(); diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/HomeTransitionObserverTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/HomeTransitionObserverTest.java index 55bff09e0ae2..52634c08dafd 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/HomeTransitionObserverTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/HomeTransitionObserverTest.java @@ -61,6 +61,7 @@ import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.ShellTestCase; import com.android.wm.shell.TestShellExecutor; import com.android.wm.shell.common.DisplayController; +import com.android.wm.shell.common.DisplayInsetsController; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.shared.IHomeTransitionListener; import com.android.wm.shell.shared.TransactionPool; @@ -88,6 +89,8 @@ public class HomeTransitionObserverTest extends ShellTestCase { private final TestShellExecutor mMainExecutor = new TestShellExecutor(); private final Handler mMainHandler = new Handler(Looper.getMainLooper()); private final DisplayController mDisplayController = mock(DisplayController.class); + private final DisplayInsetsController mDisplayInsetsController = + mock(DisplayInsetsController.class); private IHomeTransitionListener mListener; private Transitions mTransition; @@ -98,10 +101,11 @@ public class HomeTransitionObserverTest extends ShellTestCase { mListener = mock(IHomeTransitionListener.class); when(mListener.asBinder()).thenReturn(mock(IBinder.class)); - mHomeTransitionObserver = new HomeTransitionObserver(mContext, mMainExecutor); + mHomeTransitionObserver = new HomeTransitionObserver(mContext, mMainExecutor, + mDisplayInsetsController, mock(ShellInit.class)); mTransition = new Transitions(mContext, mock(ShellInit.class), mock(ShellController.class), - mOrganizer, mTransactionPool, mDisplayController, mMainExecutor, - mMainHandler, mAnimExecutor, mHomeTransitionObserver, + mOrganizer, mTransactionPool, mDisplayController, mDisplayInsetsController, + mMainExecutor, mMainHandler, mAnimExecutor, mHomeTransitionObserver, mock(FocusTransitionObserver.class)); mHomeTransitionObserver.setHomeTransitionListener(mTransition, mListener); } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/ShellTransitionTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/ShellTransitionTests.java index 9849b1174d8e..44bb2154f170 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/ShellTransitionTests.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/ShellTransitionTests.java @@ -107,6 +107,7 @@ import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.ShellTestCase; import com.android.wm.shell.TestShellExecutor; import com.android.wm.shell.common.DisplayController; +import com.android.wm.shell.common.DisplayInsetsController; import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.recents.IRecentsAnimationRunner; @@ -145,6 +146,8 @@ public class ShellTransitionTests extends ShellTestCase { private final ShellExecutor mAnimExecutor = new TestShellExecutor(); private final TestTransitionHandler mDefaultHandler = new TestTransitionHandler(); private final Handler mMainHandler = new Handler(Looper.getMainLooper()); + private final DisplayInsetsController mDisplayInsets = + mock(DisplayInsetsController.class); @Before public void setUp() { @@ -156,9 +159,9 @@ public class ShellTransitionTests extends ShellTestCase { public void instantiate_addInitCallback() { ShellInit shellInit = mock(ShellInit.class); final Transitions t = new Transitions(mContext, shellInit, mock(ShellController.class), - mOrganizer, mTransactionPool, createTestDisplayController(), mMainExecutor, - mMainHandler, mAnimExecutor, mock(HomeTransitionObserver.class), - mock(FocusTransitionObserver.class)); + mOrganizer, mTransactionPool, createTestDisplayController(), mDisplayInsets, + mMainExecutor, mMainHandler, mAnimExecutor, + mock(HomeTransitionObserver.class), mock(FocusTransitionObserver.class)); // One from Transitions, one from RootTaskDisplayAreaOrganizer verify(shellInit).addInitCallback(any(), eq(t)); verify(shellInit).addInitCallback(any(), isA(RootTaskDisplayAreaOrganizer.class)); @@ -169,9 +172,9 @@ public class ShellTransitionTests extends ShellTestCase { ShellInit shellInit = new ShellInit(mMainExecutor); ShellController shellController = mock(ShellController.class); final Transitions t = new Transitions(mContext, shellInit, shellController, - mOrganizer, mTransactionPool, createTestDisplayController(), mMainExecutor, - mMainHandler, mAnimExecutor, mock(HomeTransitionObserver.class), - mock(FocusTransitionObserver.class)); + mOrganizer, mTransactionPool, createTestDisplayController(), mDisplayInsets, + mMainExecutor, mMainHandler, mAnimExecutor, + mock(HomeTransitionObserver.class), mock(FocusTransitionObserver.class)); shellInit.init(); verify(shellController, times(1)).addExternalInterface( eq(IShellTransitions.DESCRIPTOR), any(), any()); @@ -1314,8 +1317,9 @@ public class ShellTransitionTests extends ShellTestCase { ShellInit shellInit = new ShellInit(mMainExecutor); final Transitions transitions = new Transitions(mContext, shellInit, mock(ShellController.class), mOrganizer, - mTransactionPool, createTestDisplayController(), mMainExecutor, - mMainHandler, mAnimExecutor, mock(HomeTransitionObserver.class), + mTransactionPool, createTestDisplayController(), mDisplayInsets, + mMainExecutor, mMainHandler, mAnimExecutor, + mock(HomeTransitionObserver.class), mock(FocusTransitionObserver.class)); final RecentTasksController mockRecentsTaskController = mock(RecentTasksController.class); doReturn(mContext).when(mockRecentsTaskController).getContext(); @@ -1909,8 +1913,8 @@ public class ShellTransitionTests extends ShellTestCase { private Transitions createTestTransitions() { ShellInit shellInit = new ShellInit(mMainExecutor); final Transitions t = new Transitions(mContext, shellInit, mock(ShellController.class), - mOrganizer, mTransactionPool, createTestDisplayController(), mMainExecutor, - mMainHandler, mAnimExecutor, mock(HomeTransitionObserver.class), + mOrganizer, mTransactionPool, createTestDisplayController(), mDisplayInsets, + mMainExecutor, mMainHandler, mAnimExecutor, mock(HomeTransitionObserver.class), mock(FocusTransitionObserver.class)); shellInit.init(); return t; |