feat: WM-Shell QPR1 (src and shared)
This commit is contained in:
+33
-5
@@ -18,6 +18,7 @@ package com.android.wm.shell.desktopmode;
|
||||
|
||||
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
|
||||
|
||||
import static com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_ENTER_MODE_APP_HANDLE_MENU;
|
||||
import static com.android.wm.shell.desktopmode.DesktopModeTransitionTypes.getEnterTransitionType;
|
||||
import static com.android.wm.shell.desktopmode.DesktopModeTransitionTypes.isEnterDesktopModeTransition;
|
||||
|
||||
@@ -26,6 +27,7 @@ import android.animation.AnimatorListenerAdapter;
|
||||
import android.animation.RectEvaluator;
|
||||
import android.animation.ValueAnimator;
|
||||
import android.app.ActivityManager;
|
||||
import android.content.Context;
|
||||
import android.graphics.Rect;
|
||||
import android.os.IBinder;
|
||||
import android.util.Slog;
|
||||
@@ -39,6 +41,9 @@ import android.window.WindowContainerTransaction;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.internal.jank.InteractionJankMonitor;
|
||||
import com.android.internal.util.LatencyTracker;
|
||||
import com.android.wm.shell.shared.R;
|
||||
import com.android.wm.shell.shared.desktopmode.DesktopModeTransitionSource;
|
||||
import com.android.wm.shell.transition.Transitions;
|
||||
import com.android.wm.shell.windowdecor.OnTaskResizeAnimationListener;
|
||||
@@ -54,25 +59,40 @@ import java.util.function.Supplier;
|
||||
public class EnterDesktopTaskTransitionHandler implements Transitions.TransitionHandler {
|
||||
|
||||
private static final String TAG = "EnterDesktopTaskTransitionHandler";
|
||||
private final Context mContext;
|
||||
private final Transitions mTransitions;
|
||||
private final Supplier<SurfaceControl.Transaction> mTransactionSupplier;
|
||||
|
||||
public static final int FREEFORM_ANIMATION_DURATION = 336;
|
||||
|
||||
private final List<IBinder> mPendingTransitionTokens = new ArrayList<>();
|
||||
private final InteractionJankMonitor mInteractionJankMonitor;
|
||||
private final LatencyTracker mLatencyTracker;
|
||||
|
||||
private OnTaskResizeAnimationListener mOnTaskResizeAnimationListener;
|
||||
|
||||
private int mToDesktopAnimationDurationMs;
|
||||
|
||||
public EnterDesktopTaskTransitionHandler(
|
||||
Transitions transitions) {
|
||||
this(transitions, SurfaceControl.Transaction::new);
|
||||
Transitions transitions,
|
||||
Context context,
|
||||
InteractionJankMonitor interactionJankMonitor,
|
||||
LatencyTracker latencyTracker) {
|
||||
this(transitions, context, interactionJankMonitor, latencyTracker,
|
||||
SurfaceControl.Transaction::new);
|
||||
}
|
||||
|
||||
public EnterDesktopTaskTransitionHandler(
|
||||
Transitions transitions,
|
||||
Context context,
|
||||
InteractionJankMonitor interactionJankMonitor,
|
||||
LatencyTracker latencyTracker,
|
||||
Supplier<SurfaceControl.Transaction> supplier) {
|
||||
mContext = context;
|
||||
mTransitions = transitions;
|
||||
mInteractionJankMonitor = interactionJankMonitor;
|
||||
mLatencyTracker = latencyTracker;
|
||||
mTransactionSupplier = supplier;
|
||||
mToDesktopAnimationDurationMs =
|
||||
mContext.getResources().getInteger(R.integer.to_desktop_animation_duration_ms);
|
||||
}
|
||||
|
||||
void setOnTaskResizeAnimationListener(OnTaskResizeAnimationListener listener) {
|
||||
@@ -117,6 +137,13 @@ public class EnterDesktopTaskTransitionHandler implements Transitions.Transition
|
||||
}
|
||||
}
|
||||
|
||||
if (transitionHandled
|
||||
&& info.getType()
|
||||
== DesktopModeTransitionTypes
|
||||
.TRANSIT_ENTER_DESKTOP_FROM_APP_HANDLE_MENU_BUTTON) {
|
||||
mLatencyTracker.onActionEnd(LatencyTracker.ACTION_DESKTOP_MODE_ENTER_APP_HANDLE_MENU);
|
||||
}
|
||||
|
||||
mPendingTransitionTokens.remove(transition);
|
||||
|
||||
return transitionHandled;
|
||||
@@ -160,7 +187,7 @@ public class EnterDesktopTaskTransitionHandler implements Transitions.Transition
|
||||
mOnTaskResizeAnimationListener.onAnimationStart(taskInfo.taskId, startT, startBounds);
|
||||
final ValueAnimator animator = ValueAnimator.ofObject(new RectEvaluator(),
|
||||
change.getStartAbsBounds(), change.getEndAbsBounds());
|
||||
animator.setDuration(FREEFORM_ANIMATION_DURATION);
|
||||
animator.setDuration(mToDesktopAnimationDurationMs);
|
||||
SurfaceControl.Transaction t = mTransactionSupplier.get();
|
||||
animator.addUpdateListener(animation -> {
|
||||
final Rect animationValue = (Rect) animator.getAnimatedValue();
|
||||
@@ -175,6 +202,7 @@ public class EnterDesktopTaskTransitionHandler implements Transitions.Transition
|
||||
mOnTaskResizeAnimationListener.onAnimationEnd(taskInfo.taskId);
|
||||
mTransitions.getMainExecutor().execute(
|
||||
() -> finishCallback.onTransitionFinished(null));
|
||||
mInteractionJankMonitor.end(CUJ_DESKTOP_MODE_ENTER_MODE_APP_HANDLE_MENU);
|
||||
}
|
||||
});
|
||||
animator.start();
|
||||
|
||||
Reference in New Issue
Block a user