Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ca1d1d77 authored by Mady Mellor's avatar Mady Mellor
Browse files

Don't merge task view transitions in UnfoldTransitionHandler

For TRANSIT_CHANGE TaskViewTransitions needs to do some work (i.e.
reparent the surface & set the position), however, this was being
skipped because the transition was getting merged with the unfold
transition. Skipping the merge allows TaskViewTransitions to apply
these changes in the transition & resolves this issue.

Bug: 286549869
Test: manual - expand a bubble on a folded device
             - unfold the device
             => observe that the bubble remains expanded and the
                content is in the correct position and bounds
Change-Id: I402a47f72510045840715a6583ff3614228e39a3
parent 46d3419b
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static android.view.WindowManager.TRANSIT_CHANGE;

import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_TRANSITIONS;

import android.app.ActivityManager;
import android.os.IBinder;
import android.view.SurfaceControl;
import android.window.TransitionInfo;
@@ -178,6 +179,18 @@ public class UnfoldTransitionHandler implements TransitionHandler, UnfoldListene
            @NonNull SurfaceControl.Transaction t, @NonNull IBinder mergeTarget,
            @NonNull TransitionFinishCallback finishCallback) {
        if (info.getType() == TRANSIT_CHANGE) {
            // TODO (b/286928742) unfold transition handler should be part of mixed handler to
            //  handle merges better.
            for (int i = 0; i < info.getChanges().size(); ++i) {
                final TransitionInfo.Change change = info.getChanges().get(i);
                final ActivityManager.RunningTaskInfo taskInfo = change.getTaskInfo();
                if (taskInfo != null
                        && taskInfo.configuration.windowConfiguration.isAlwaysOnTop()) {
                    // Tasks that are always on top (e.g. bubbles), will handle their own transition
                    // as they are on top of everything else. So skip merging transitions here.
                    return;
                }
            }
            // Apply changes happening during the unfold animation immediately
            t.apply();
            finishCallback.onTransitionFinished(null, null);