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

Commit 43bafaa8 authored by Hongwei Wang's avatar Hongwei Wang
Browse files

Add SYSUI_STATE_DISABLE_GESTURE_PIP_INVOCATION

This SysUiState flag would be set to true when PiP animation starts and
false when it finishes.

This is to prevent the Recents transition that may conflict with PiP.

Flag: EXEMPT bug fix
Bug: 340724371
Test: Swipe to show TaskBar while expanding PiP to FS mode
Change-Id: Ie20de7665caeb60f672efb89cf005d7b2d354d8b
parent df4eea8b
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -212,12 +212,13 @@ public abstract class Pip1Module {
    @WMSingleton
    @Provides
    static PipMotionHelper providePipMotionHelper(Context context,
            @ShellMainThread ShellExecutor mainExecutor,
            PipBoundsState pipBoundsState, PipTaskOrganizer pipTaskOrganizer,
            PhonePipMenuController menuController, PipSnapAlgorithm pipSnapAlgorithm,
            PipTransitionController pipTransitionController,
            FloatingContentCoordinator floatingContentCoordinator,
            Optional<PipPerfHintController> pipPerfHintControllerOptional) {
        return new PipMotionHelper(context, pipBoundsState, pipTaskOrganizer,
        return new PipMotionHelper(context, mainExecutor, pipBoundsState, pipTaskOrganizer,
                menuController, pipSnapAlgorithm, pipTransitionController,
                floatingContentCoordinator, pipPerfHintControllerOptional);
    }
+7 −4
Original line number Diff line number Diff line
@@ -16,10 +16,12 @@

package com.android.wm.shell.pip;

import android.annotation.NonNull;
import android.graphics.Rect;

import com.android.wm.shell.shared.annotations.ExternalThread;

import java.util.concurrent.Executor;
import java.util.function.Consumer;

/**
@@ -69,9 +71,10 @@ public interface Pip {
    default void removePipExclusionBoundsChangeListener(Consumer<Rect> listener) { }

    /**
     * @return {@link PipTransitionController} instance.
     * Register {@link PipTransitionController.PipTransitionCallback} to listen on PiP transition
     * started / finished callbacks.
     */
    default PipTransitionController getPipTransitionController() {
        return null;
    }
    default void registerPipTransitionCallback(
            @NonNull PipTransitionController.PipTransitionCallback callback,
            @NonNull Executor executor) { }
}
+2 −1
Original line number Diff line number Diff line
@@ -423,7 +423,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
            });
            mPipTransitionController.setPipOrganizer(this);
            displayController.addDisplayWindowListener(this);
            pipTransitionController.registerPipTransitionCallback(mPipTransitionCallback);
            pipTransitionController.registerPipTransitionCallback(
                    mPipTransitionCallback, mMainExecutor);
        }
    }

+19 −14
Original line number Diff line number Diff line
@@ -53,8 +53,9 @@ import com.android.wm.shell.transition.DefaultMixedHandler;
import com.android.wm.shell.transition.Transitions;

import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executor;

/**
 * Responsible supplying PiP Transitions.
@@ -66,7 +67,7 @@ public abstract class PipTransitionController implements Transitions.TransitionH
    protected final ShellTaskOrganizer mShellTaskOrganizer;
    protected final PipMenuController mPipMenuController;
    protected final Transitions mTransitions;
    private final List<PipTransitionCallback> mPipTransitionCallbacks = new ArrayList<>();
    private final Map<PipTransitionCallback, Executor> mPipTransitionCallbacks = new HashMap<>();
    protected PipTaskOrganizer mPipOrganizer;
    protected DefaultMixedHandler mMixedHandler;

@@ -181,16 +182,18 @@ public abstract class PipTransitionController implements Transitions.TransitionH
    /**
     * Registers {@link PipTransitionCallback} to receive transition callbacks.
     */
    public void registerPipTransitionCallback(PipTransitionCallback callback) {
        mPipTransitionCallbacks.add(callback);
    public void registerPipTransitionCallback(
            @NonNull PipTransitionCallback callback, @NonNull Executor executor) {
        mPipTransitionCallbacks.put(callback, executor);
    }

    protected void sendOnPipTransitionStarted(
            @PipAnimationController.TransitionDirection int direction) {
        final Rect pipBounds = mPipBoundsState.getBounds();
        for (int i = mPipTransitionCallbacks.size() - 1; i >= 0; i--) {
            final PipTransitionCallback callback = mPipTransitionCallbacks.get(i);
            callback.onPipTransitionStarted(direction, pipBounds);
        for (Map.Entry<PipTransitionCallback, Executor> entry
                : mPipTransitionCallbacks.entrySet()) {
            entry.getValue().execute(
                    () -> entry.getKey().onPipTransitionStarted(direction, pipBounds));
        }
        if (isInPipDirection(direction) && Flags.enablePipUiStateCallbackOnEntering()) {
            try {
@@ -207,9 +210,10 @@ public abstract class PipTransitionController implements Transitions.TransitionH

    protected void sendOnPipTransitionFinished(
            @PipAnimationController.TransitionDirection int direction) {
        for (int i = mPipTransitionCallbacks.size() - 1; i >= 0; i--) {
            final PipTransitionCallback callback = mPipTransitionCallbacks.get(i);
            callback.onPipTransitionFinished(direction);
        for (Map.Entry<PipTransitionCallback, Executor> entry
                : mPipTransitionCallbacks.entrySet()) {
            entry.getValue().execute(
                    () -> entry.getKey().onPipTransitionFinished(direction));
        }
        if (isInPipDirection(direction) && Flags.enablePipUiStateCallbackOnEntering()) {
            try {
@@ -226,9 +230,10 @@ public abstract class PipTransitionController implements Transitions.TransitionH

    protected void sendOnPipTransitionCancelled(
            @PipAnimationController.TransitionDirection int direction) {
        for (int i = mPipTransitionCallbacks.size() - 1; i >= 0; i--) {
            final PipTransitionCallback callback = mPipTransitionCallbacks.get(i);
            callback.onPipTransitionCanceled(direction);
        for (Map.Entry<PipTransitionCallback, Executor> entry
                : mPipTransitionCallbacks.entrySet()) {
            entry.getValue().execute(
                    () -> entry.getKey().onPipTransitionCanceled(direction));
        }
    }

+7 −3
Original line number Diff line number Diff line
@@ -106,6 +106,7 @@ import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.function.Consumer;

/**
@@ -487,7 +488,7 @@ public class PipController implements PipTransitionController.PipTransitionCallb
        mShellCommandHandler.addDumpCallback(this::dump, this);
        mPipInputConsumer = new PipInputConsumer(WindowManagerGlobal.getWindowManagerService(),
                INPUT_CONSUMER_PIP, mMainExecutor);
        mPipTransitionController.registerPipTransitionCallback(this);
        mPipTransitionController.registerPipTransitionCallback(this, mMainExecutor);
        mPipTaskOrganizer.registerOnDisplayIdChangeCallback((int displayId) -> {
            mPipDisplayLayoutState.setDisplayId(displayId);
            onDisplayChanged(mDisplayController.getDisplayLayout(displayId),
@@ -1229,8 +1230,11 @@ public class PipController implements PipTransitionController.PipTransitionCallb
        }

        @Override
        public PipTransitionController getPipTransitionController() {
            return mPipTransitionController;
        public void registerPipTransitionCallback(
                PipTransitionController.PipTransitionCallback callback,
                Executor executor) {
            mMainExecutor.execute(() -> mPipTransitionController.registerPipTransitionCallback(
                    callback, executor));
        }
    }

Loading