feat: WM-Shell QPR1 (src and shared)

This commit is contained in:
Pun Butrach
2025-11-18 18:49:01 +07:00
parent b6ac1c2f3a
commit d89732512d
590 changed files with 79228 additions and 13215 deletions
@@ -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();