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

Commit 04c0fa9b authored by Winson Chung's avatar Winson Chung
Browse files

Fix issues where the task was still touchable in overview

- Reparent above the top window as an activity can have multiple windows
- Fix ordering when reparenting tasks into the temporary split container
  to match the previous ordering since the input consumer is layered
  above the top window

Fixes: 197571005
Fixes: 195958376
Test: Launch maps > share place > enter overview
      Enable stage split > split > enter overview
Change-Id: I84899e71f079f001eef737217897642460f5832b
parent d1436f18
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -67,6 +67,8 @@ import com.android.wm.shell.transition.LegacyTransitions;
import com.android.wm.shell.transition.Transitions;

import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.concurrent.Executor;

/**
@@ -295,11 +297,15 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
        mRootTDAOrganizer.attachToDisplayArea(DEFAULT_DISPLAY, builder);
        SurfaceControl sc = builder.build();
        SurfaceControl.Transaction transaction = new SurfaceControl.Transaction();

        // Ensure that we order these in the parent in the right z-order as their previous order
        Arrays.sort(apps, (a1, a2) -> a1.prefixOrderIndex - a2.prefixOrderIndex);
        int layer = 1;
        for (RemoteAnimationTarget appTarget : apps) {
            // TODO(b/195958376) set the correct layer/z-order in transaction for the new surface
            transaction.reparent(appTarget.leash, sc);
            transaction.setPosition(appTarget.leash, appTarget.screenSpaceBounds.left,
                    appTarget.screenSpaceBounds.top);
            transaction.setLayer(appTarget.leash, layer++);
        }
        transaction.apply();
        transaction.close();
+1 −1
Original line number Diff line number Diff line
@@ -582,7 +582,7 @@ final class InputMonitor {
                if (recentsAnimationController.updateInputConsumerForApp(
                        mRecentsAnimationInputConsumer.mWindowHandle)) {
                    mRecentsAnimationInputConsumer.show(mInputTransaction,
                            recentsAnimationController.getHighestLayerActivity());
                            recentsAnimationController.getHighestLayerWindow());
                    mAddRecentsAnimationInputConsumerHandle = false;
                }
            }
+3 −3
Original line number Diff line number Diff line
@@ -1103,9 +1103,9 @@ public class RecentsAnimationController implements DeathRecipient {
    }

    /**
     * Returns the activity with the highest layer, or null if none is found.
     * Returns the window with the highest layer, or null if none is found.
     */
    public ActivityRecord getHighestLayerActivity() {
    public WindowState getHighestLayerWindow() {
        int highestLayer = Integer.MIN_VALUE;
        Task highestLayerTask = null;
        for (int i = mPendingAnimations.size() - 1; i >= 0; i--) {
@@ -1116,7 +1116,7 @@ public class RecentsAnimationController implements DeathRecipient {
                highestLayerTask = adapter.mTask;
            }
        }
        return highestLayerTask.getTopMostActivity();
        return highestLayerTask.getTopMostActivity().getTopChild();
    }

    boolean isAnimatingTask(Task task) {