Merge "Get PiP state from Shell in EdgeBackGestureHandler" into tm-qpr-dev

This commit is contained in:
Hongwei Wang
2022-06-22 16:56:57 +00:00
committed by Android (Google) Code Review
6 changed files with 98 additions and 28 deletions

View File

@@ -68,15 +68,15 @@ import com.android.wm.shell.pip.phone.PipTouchHandler;
import com.android.wm.shell.recents.RecentTasksController; import com.android.wm.shell.recents.RecentTasksController;
import com.android.wm.shell.splitscreen.SplitScreenController; import com.android.wm.shell.splitscreen.SplitScreenController;
import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.transition.Transitions;
import com.android.wm.shell.unfold.UnfoldAnimationController;
import com.android.wm.shell.unfold.ShellUnfoldProgressProvider; import com.android.wm.shell.unfold.ShellUnfoldProgressProvider;
import com.android.wm.shell.unfold.UnfoldAnimationController;
import com.android.wm.shell.unfold.UnfoldBackgroundController; import com.android.wm.shell.unfold.UnfoldBackgroundController;
import com.android.wm.shell.unfold.UnfoldTransitionHandler; import com.android.wm.shell.unfold.UnfoldTransitionHandler;
import com.android.wm.shell.unfold.animation.FullscreenUnfoldTaskAnimator; import com.android.wm.shell.unfold.animation.FullscreenUnfoldTaskAnimator;
import com.android.wm.shell.unfold.animation.SplitTaskUnfoldAnimator; import com.android.wm.shell.unfold.animation.SplitTaskUnfoldAnimator;
import com.android.wm.shell.unfold.animation.UnfoldTaskAnimator; import com.android.wm.shell.unfold.animation.UnfoldTaskAnimator;
import com.android.wm.shell.unfold.qualifier.UnfoldTransition;
import com.android.wm.shell.unfold.qualifier.UnfoldShellTransition; import com.android.wm.shell.unfold.qualifier.UnfoldShellTransition;
import com.android.wm.shell.unfold.qualifier.UnfoldTransition;
import com.android.wm.shell.windowdecor.CaptionWindowDecorViewModel; import com.android.wm.shell.windowdecor.CaptionWindowDecorViewModel;
import com.android.wm.shell.windowdecor.WindowDecorViewModel; import com.android.wm.shell.windowdecor.WindowDecorViewModel;
@@ -218,6 +218,7 @@ public abstract class WMShellModule {
PipKeepClearAlgorithm pipKeepClearAlgorithm, PipBoundsState pipBoundsState, PipKeepClearAlgorithm pipKeepClearAlgorithm, PipBoundsState pipBoundsState,
PipMotionHelper pipMotionHelper, PipMediaController pipMediaController, PipMotionHelper pipMotionHelper, PipMediaController pipMediaController,
PhonePipMenuController phonePipMenuController, PipTaskOrganizer pipTaskOrganizer, PhonePipMenuController phonePipMenuController, PipTaskOrganizer pipTaskOrganizer,
PipTransitionState pipTransitionState,
PipTouchHandler pipTouchHandler, PipTransitionController pipTransitionController, PipTouchHandler pipTouchHandler, PipTransitionController pipTransitionController,
WindowManagerShellWrapper windowManagerShellWrapper, WindowManagerShellWrapper windowManagerShellWrapper,
TaskStackListenerImpl taskStackListener, TaskStackListenerImpl taskStackListener,
@@ -227,7 +228,7 @@ public abstract class WMShellModule {
return Optional.ofNullable(PipController.create(context, displayController, return Optional.ofNullable(PipController.create(context, displayController,
pipAppOpsListener, pipBoundsAlgorithm, pipKeepClearAlgorithm, pipBoundsState, pipAppOpsListener, pipBoundsAlgorithm, pipKeepClearAlgorithm, pipBoundsState,
pipMotionHelper, pipMotionHelper,
pipMediaController, phonePipMenuController, pipTaskOrganizer, pipMediaController, phonePipMenuController, pipTaskOrganizer, pipTransitionState,
pipTouchHandler, pipTransitionController, windowManagerShellWrapper, pipTouchHandler, pipTransitionController, windowManagerShellWrapper,
taskStackListener, pipParamsChangedForwarder, oneHandedController, mainExecutor)); taskStackListener, pipParamsChangedForwarder, oneHandedController, mainExecutor));
} }

View File

@@ -86,12 +86,12 @@ public interface Pip {
} }
/** /**
* Registers the pinned stack animation listener. * Set the callback when {@link PipTaskOrganizer#isInPip()} state is changed.
* *
* @param callback The callback of pinned stack animation. * @param callback The callback accepts the result of {@link PipTaskOrganizer#isInPip()}
* when it's changed.
*/ */
default void setPinnedStackAnimationListener(Consumer<Boolean> callback) { default void setOnIsInPipStateChangedListener(Consumer<Boolean> callback) {}
}
/** /**
* Set the pinned stack with {@link PipAnimationController.AnimationType} * Set the pinned stack with {@link PipAnimationController.AnimationType}

View File

@@ -17,12 +17,15 @@
package com.android.wm.shell.pip; package com.android.wm.shell.pip;
import android.annotation.IntDef; import android.annotation.IntDef;
import android.annotation.NonNull;
import android.app.PictureInPictureParams; import android.app.PictureInPictureParams;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.List;
/** /**
* Used to keep track of PiP leash state as it appears and animates by {@link PipTaskOrganizer} and * Used to keep track of PiP leash state as it appears and animates by {@link PipTaskOrganizer} and
@@ -37,6 +40,9 @@ public class PipTransitionState {
public static final int ENTERED_PIP = 4; public static final int ENTERED_PIP = 4;
public static final int EXITING_PIP = 5; public static final int EXITING_PIP = 5;
private final List<OnPipTransitionStateChangedListener> mOnPipTransitionStateChangedListeners =
new ArrayList<>();
/** /**
* If set to {@code true}, no entering PiP transition would be kicked off and most likely * If set to {@code true}, no entering PiP transition would be kicked off and most likely
* it's due to the fact that Launcher is handling the transition directly when swiping * it's due to the fact that Launcher is handling the transition directly when swiping
@@ -65,16 +71,21 @@ public class PipTransitionState {
} }
public void setTransitionState(@TransitionState int state) { public void setTransitionState(@TransitionState int state) {
if (mState != state) {
for (int i = 0; i < mOnPipTransitionStateChangedListeners.size(); i++) {
mOnPipTransitionStateChangedListeners.get(i).onPipTransitionStateChanged(
mState, state);
}
mState = state; mState = state;
} }
}
public @TransitionState int getTransitionState() { public @TransitionState int getTransitionState() {
return mState; return mState;
} }
public boolean isInPip() { public boolean isInPip() {
return mState >= TASK_APPEARED return isInPip(mState);
&& mState != EXITING_PIP;
} }
public void setInSwipePipToHomeTransition(boolean inSwipePipToHomeTransition) { public void setInSwipePipToHomeTransition(boolean inSwipePipToHomeTransition) {
@@ -94,4 +105,23 @@ public class PipTransitionState {
return mState < ENTERING_PIP return mState < ENTERING_PIP
|| mState == EXITING_PIP; || mState == EXITING_PIP;
} }
public void addOnPipTransitionStateChangedListener(
@NonNull OnPipTransitionStateChangedListener listener) {
mOnPipTransitionStateChangedListeners.add(listener);
}
public void removeOnPipTransitionStateChangedListener(
@NonNull OnPipTransitionStateChangedListener listener) {
mOnPipTransitionStateChangedListeners.remove(listener);
}
public static boolean isInPip(@TransitionState int state) {
return state >= TASK_APPEARED && state != EXITING_PIP;
}
public interface OnPipTransitionStateChangedListener {
void onPipTransitionStateChanged(@TransitionState int oldState,
@TransitionState int newState);
}
} }

View File

@@ -84,6 +84,7 @@ import com.android.wm.shell.pip.PipParamsChangedForwarder;
import com.android.wm.shell.pip.PipSnapAlgorithm; import com.android.wm.shell.pip.PipSnapAlgorithm;
import com.android.wm.shell.pip.PipTaskOrganizer; import com.android.wm.shell.pip.PipTaskOrganizer;
import com.android.wm.shell.pip.PipTransitionController; import com.android.wm.shell.pip.PipTransitionController;
import com.android.wm.shell.pip.PipTransitionState;
import com.android.wm.shell.pip.PipUtils; import com.android.wm.shell.pip.PipUtils;
import com.android.wm.shell.protolog.ShellProtoLogGroup; import com.android.wm.shell.protolog.ShellProtoLogGroup;
import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.transition.Transitions;
@@ -128,11 +129,14 @@ public class PipController implements PipTransitionController.PipTransitionCallb
protected PhonePipMenuController mMenuController; protected PhonePipMenuController mMenuController;
protected PipTaskOrganizer mPipTaskOrganizer; protected PipTaskOrganizer mPipTaskOrganizer;
private PipTransitionState mPipTransitionState;
protected PinnedStackListenerForwarder.PinnedTaskListener mPinnedTaskListener = protected PinnedStackListenerForwarder.PinnedTaskListener mPinnedTaskListener =
new PipControllerPinnedTaskListener(); new PipControllerPinnedTaskListener();
private boolean mIsKeyguardShowingOrAnimating; private boolean mIsKeyguardShowingOrAnimating;
private Consumer<Boolean> mOnIsInPipStateChangedListener;
private interface PipAnimationListener { private interface PipAnimationListener {
/** /**
* Notifies the listener that the Pip animation is started. * Notifies the listener that the Pip animation is started.
@@ -291,6 +295,7 @@ public class PipController implements PipTransitionController.PipTransitionCallb
PipKeepClearAlgorithm pipKeepClearAlgorithm, PipBoundsState pipBoundsState, PipKeepClearAlgorithm pipKeepClearAlgorithm, PipBoundsState pipBoundsState,
PipMotionHelper pipMotionHelper, PipMediaController pipMediaController, PipMotionHelper pipMotionHelper, PipMediaController pipMediaController,
PhonePipMenuController phonePipMenuController, PipTaskOrganizer pipTaskOrganizer, PhonePipMenuController phonePipMenuController, PipTaskOrganizer pipTaskOrganizer,
PipTransitionState pipTransitionState,
PipTouchHandler pipTouchHandler, PipTransitionController pipTransitionController, PipTouchHandler pipTouchHandler, PipTransitionController pipTransitionController,
WindowManagerShellWrapper windowManagerShellWrapper, WindowManagerShellWrapper windowManagerShellWrapper,
TaskStackListenerImpl taskStackListener, TaskStackListenerImpl taskStackListener,
@@ -305,7 +310,8 @@ public class PipController implements PipTransitionController.PipTransitionCallb
return new PipController(context, displayController, pipAppOpsListener, pipBoundsAlgorithm, return new PipController(context, displayController, pipAppOpsListener, pipBoundsAlgorithm,
pipKeepClearAlgorithm, pipBoundsState, pipMotionHelper, pipMediaController, pipKeepClearAlgorithm, pipBoundsState, pipMotionHelper, pipMediaController,
phonePipMenuController, pipTaskOrganizer, pipTouchHandler, pipTransitionController, phonePipMenuController, pipTaskOrganizer, pipTransitionState,
pipTouchHandler, pipTransitionController,
windowManagerShellWrapper, taskStackListener, pipParamsChangedForwarder, windowManagerShellWrapper, taskStackListener, pipParamsChangedForwarder,
oneHandedController, mainExecutor) oneHandedController, mainExecutor)
.mImpl; .mImpl;
@@ -321,6 +327,7 @@ public class PipController implements PipTransitionController.PipTransitionCallb
PipMediaController pipMediaController, PipMediaController pipMediaController,
PhonePipMenuController phonePipMenuController, PhonePipMenuController phonePipMenuController,
PipTaskOrganizer pipTaskOrganizer, PipTaskOrganizer pipTaskOrganizer,
PipTransitionState pipTransitionState,
PipTouchHandler pipTouchHandler, PipTouchHandler pipTouchHandler,
PipTransitionController pipTransitionController, PipTransitionController pipTransitionController,
WindowManagerShellWrapper windowManagerShellWrapper, WindowManagerShellWrapper windowManagerShellWrapper,
@@ -344,6 +351,7 @@ public class PipController implements PipTransitionController.PipTransitionCallb
mPipBoundsState = pipBoundsState; mPipBoundsState = pipBoundsState;
mPipMotionHelper = pipMotionHelper; mPipMotionHelper = pipMotionHelper;
mPipTaskOrganizer = pipTaskOrganizer; mPipTaskOrganizer = pipTaskOrganizer;
mPipTransitionState = pipTransitionState;
mMainExecutor = mainExecutor; mMainExecutor = mainExecutor;
mMediaController = pipMediaController; mMediaController = pipMediaController;
mMenuController = phonePipMenuController; mMenuController = phonePipMenuController;
@@ -370,6 +378,15 @@ public class PipController implements PipTransitionController.PipTransitionCallb
onDisplayChanged(mDisplayController.getDisplayLayout(displayId), onDisplayChanged(mDisplayController.getDisplayLayout(displayId),
false /* saveRestoreSnapFraction */); false /* saveRestoreSnapFraction */);
}); });
mPipTransitionState.addOnPipTransitionStateChangedListener((oldState, newState) -> {
if (mOnIsInPipStateChangedListener != null) {
final boolean wasInPip = PipTransitionState.isInPip(oldState);
final boolean nowInPip = PipTransitionState.isInPip(newState);
if (nowInPip != wasInPip) {
mOnIsInPipStateChangedListener.accept(nowInPip);
}
}
});
mPipBoundsState.setOnMinimalSizeChangeCallback( mPipBoundsState.setOnMinimalSizeChangeCallback(
() -> { () -> {
// The minimal size drives the normal bounds, so they need to be recalculated. // The minimal size drives the normal bounds, so they need to be recalculated.
@@ -664,6 +681,13 @@ public class PipController implements PipTransitionController.PipTransitionCallb
} }
} }
private void setOnIsInPipStateChangedListener(Consumer<Boolean> callback) {
mOnIsInPipStateChangedListener = callback;
if (mOnIsInPipStateChangedListener != null) {
callback.accept(mPipTransitionState.isInPip());
}
}
private void setShelfHeightLocked(boolean visible, int height) { private void setShelfHeightLocked(boolean visible, int height) {
final int shelfHeight = visible ? height : 0; final int shelfHeight = visible ? height : 0;
mPipBoundsState.setShelfVisibility(visible, shelfHeight); mPipBoundsState.setShelfVisibility(visible, shelfHeight);
@@ -940,6 +964,13 @@ public class PipController implements PipTransitionController.PipTransitionCallb
}); });
} }
@Override
public void setOnIsInPipStateChangedListener(Consumer<Boolean> callback) {
mMainExecutor.execute(() -> {
PipController.this.setOnIsInPipStateChangedListener(callback);
});
}
@Override @Override
public void setPinnedStackAnimationType(int animationType) { public void setPinnedStackAnimationType(int animationType) {
mMainExecutor.execute(() -> { mMainExecutor.execute(() -> {

View File

@@ -53,6 +53,7 @@ import com.android.wm.shell.pip.PipParamsChangedForwarder;
import com.android.wm.shell.pip.PipSnapAlgorithm; import com.android.wm.shell.pip.PipSnapAlgorithm;
import com.android.wm.shell.pip.PipTaskOrganizer; import com.android.wm.shell.pip.PipTaskOrganizer;
import com.android.wm.shell.pip.PipTransitionController; import com.android.wm.shell.pip.PipTransitionController;
import com.android.wm.shell.pip.PipTransitionState;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -80,6 +81,7 @@ public class PipControllerTest extends ShellTestCase {
@Mock private PipSnapAlgorithm mMockPipSnapAlgorithm; @Mock private PipSnapAlgorithm mMockPipSnapAlgorithm;
@Mock private PipMediaController mMockPipMediaController; @Mock private PipMediaController mMockPipMediaController;
@Mock private PipTaskOrganizer mMockPipTaskOrganizer; @Mock private PipTaskOrganizer mMockPipTaskOrganizer;
@Mock private PipTransitionState mMockPipTransitionState;
@Mock private PipTransitionController mMockPipTransitionController; @Mock private PipTransitionController mMockPipTransitionController;
@Mock private PipTouchHandler mMockPipTouchHandler; @Mock private PipTouchHandler mMockPipTouchHandler;
@Mock private PipMotionHelper mMockPipMotionHelper; @Mock private PipMotionHelper mMockPipMotionHelper;
@@ -104,8 +106,8 @@ public class PipControllerTest extends ShellTestCase {
mMockPipAppOpsListener, mMockPipBoundsAlgorithm, mMockPipAppOpsListener, mMockPipBoundsAlgorithm,
mMockPipKeepClearAlgorithm, mMockPipKeepClearAlgorithm,
mMockPipBoundsState, mMockPipMotionHelper, mMockPipMediaController, mMockPipBoundsState, mMockPipMotionHelper, mMockPipMediaController,
mMockPhonePipMenuController, mMockPipTaskOrganizer, mMockPipTouchHandler, mMockPhonePipMenuController, mMockPipTaskOrganizer, mMockPipTransitionState,
mMockPipTransitionController, mMockWindowManagerShellWrapper, mMockPipTouchHandler, mMockPipTransitionController, mMockWindowManagerShellWrapper,
mMockTaskStackListener, mPipParamsChangedForwarder, mMockTaskStackListener, mPipParamsChangedForwarder,
mMockOneHandedController, mMockExecutor); mMockOneHandedController, mMockExecutor);
when(mMockPipBoundsAlgorithm.getSnapAlgorithm()).thenReturn(mMockPipSnapAlgorithm); when(mMockPipBoundsAlgorithm.getSnapAlgorithm()).thenReturn(mMockPipSnapAlgorithm);
@@ -138,8 +140,8 @@ public class PipControllerTest extends ShellTestCase {
mMockPipAppOpsListener, mMockPipBoundsAlgorithm, mMockPipAppOpsListener, mMockPipBoundsAlgorithm,
mMockPipKeepClearAlgorithm, mMockPipKeepClearAlgorithm,
mMockPipBoundsState, mMockPipMotionHelper, mMockPipMediaController, mMockPipBoundsState, mMockPipMotionHelper, mMockPipMediaController,
mMockPhonePipMenuController, mMockPipTaskOrganizer, mMockPipTouchHandler, mMockPhonePipMenuController, mMockPipTaskOrganizer, mMockPipTransitionState,
mMockPipTransitionController, mMockWindowManagerShellWrapper, mMockPipTouchHandler, mMockPipTransitionController, mMockWindowManagerShellWrapper,
mMockTaskStackListener, mPipParamsChangedForwarder, mMockTaskStackListener, mPipParamsChangedForwarder,
mMockOneHandedController, mMockExecutor)); mMockOneHandedController, mMockExecutor));
} }

View File

@@ -84,13 +84,16 @@ import com.android.systemui.tracing.ProtoTracer;
import com.android.systemui.tracing.nano.EdgeBackGestureHandlerProto; import com.android.systemui.tracing.nano.EdgeBackGestureHandlerProto;
import com.android.systemui.tracing.nano.SystemUiTraceProto; import com.android.systemui.tracing.nano.SystemUiTraceProto;
import com.android.wm.shell.back.BackAnimation; import com.android.wm.shell.back.BackAnimation;
import com.android.wm.shell.pip.Pip;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.ArrayDeque; import java.util.ArrayDeque;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.function.Consumer;
import javax.inject.Inject; import javax.inject.Inject;
@@ -147,16 +150,6 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
mPackageName = "_UNKNOWN"; mPackageName = "_UNKNOWN";
} }
} }
@Override
public void onActivityPinned(String packageName, int userId, int taskId, int stackId) {
mIsInPipMode = true;
}
@Override
public void onActivityUnpinned() {
mIsInPipMode = false;
}
}; };
private DeviceConfig.OnPropertiesChangedListener mOnPropertiesChangedListener = private DeviceConfig.OnPropertiesChangedListener mOnPropertiesChangedListener =
@@ -188,6 +181,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
private final ViewConfiguration mViewConfiguration; private final ViewConfiguration mViewConfiguration;
private final WindowManager mWindowManager; private final WindowManager mWindowManager;
private final IWindowManager mWindowManagerService; private final IWindowManager mWindowManagerService;
private final Optional<Pip> mPipOptional;
private final FalsingManager mFalsingManager; private final FalsingManager mFalsingManager;
// Activities which should not trigger Back gesture. // Activities which should not trigger Back gesture.
private final List<ComponentName> mGestureBlockingActivities = new ArrayList<>(); private final List<ComponentName> mGestureBlockingActivities = new ArrayList<>();
@@ -218,6 +212,8 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
// We temporarily disable back gesture when user is quickswitching // We temporarily disable back gesture when user is quickswitching
// between apps of different orientations // between apps of different orientations
private boolean mDisabledForQuickstep; private boolean mDisabledForQuickstep;
// This gets updated when the value of PipTransitionState#isInPip changes.
private boolean mIsInPip;
private final PointF mDownPoint = new PointF(); private final PointF mDownPoint = new PointF();
private final PointF mEndPoint = new PointF(); private final PointF mEndPoint = new PointF();
@@ -233,7 +229,6 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
private boolean mIsNavBarShownTransiently; private boolean mIsNavBarShownTransiently;
private boolean mIsBackGestureAllowed; private boolean mIsBackGestureAllowed;
private boolean mGestureBlockingActivityRunning; private boolean mGestureBlockingActivityRunning;
private boolean mIsInPipMode;
private boolean mIsNewBackAffordanceEnabled; private boolean mIsNewBackAffordanceEnabled;
private InputMonitor mInputMonitor; private InputMonitor mInputMonitor;
@@ -302,6 +297,8 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
} }
}; };
private final Consumer<Boolean> mOnIsInPipStateChangedListener =
(isInPip) -> mIsInPip = isInPip;
EdgeBackGestureHandler( EdgeBackGestureHandler(
Context context, Context context,
@@ -316,6 +313,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
ViewConfiguration viewConfiguration, ViewConfiguration viewConfiguration,
WindowManager windowManager, WindowManager windowManager,
IWindowManager windowManagerService, IWindowManager windowManagerService,
Optional<Pip> pipOptional,
FalsingManager falsingManager, FalsingManager falsingManager,
LatencyTracker latencyTracker, LatencyTracker latencyTracker,
FeatureFlags featureFlags) { FeatureFlags featureFlags) {
@@ -332,6 +330,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
mViewConfiguration = viewConfiguration; mViewConfiguration = viewConfiguration;
mWindowManager = windowManager; mWindowManager = windowManager;
mWindowManagerService = windowManagerService; mWindowManagerService = windowManagerService;
mPipOptional = pipOptional;
mFalsingManager = falsingManager; mFalsingManager = falsingManager;
mLatencyTracker = latencyTracker; mLatencyTracker = latencyTracker;
mFeatureFlags = featureFlags; mFeatureFlags = featureFlags;
@@ -491,6 +490,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
mPluginManager.removePluginListener(this); mPluginManager.removePluginListener(this);
TaskStackChangeListeners.getInstance().unregisterTaskStackListener(mTaskStackListener); TaskStackChangeListeners.getInstance().unregisterTaskStackListener(mTaskStackListener);
DeviceConfig.removeOnPropertiesChangedListener(mOnPropertiesChangedListener); DeviceConfig.removeOnPropertiesChangedListener(mOnPropertiesChangedListener);
mPipOptional.ifPresent(pip -> pip.setOnIsInPipStateChangedListener(null));
try { try {
mWindowManagerService.unregisterSystemGestureExclusionListener( mWindowManagerService.unregisterSystemGestureExclusionListener(
@@ -508,6 +508,8 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
TaskStackChangeListeners.getInstance().registerTaskStackListener(mTaskStackListener); TaskStackChangeListeners.getInstance().registerTaskStackListener(mTaskStackListener);
DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_SYSTEMUI, DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_SYSTEMUI,
mMainExecutor::execute, mOnPropertiesChangedListener); mMainExecutor::execute, mOnPropertiesChangedListener);
mPipOptional.ifPresent(
pip -> pip.setOnIsInPipStateChangedListener(mOnIsInPipStateChangedListener));
try { try {
mWindowManagerService.registerSystemGestureExclusionListener( mWindowManagerService.registerSystemGestureExclusionListener(
@@ -680,7 +682,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
private boolean isWithinTouchRegion(int x, int y) { private boolean isWithinTouchRegion(int x, int y) {
// If the point is inside the PiP or Nav bar overlay excluded bounds, then ignore the back // If the point is inside the PiP or Nav bar overlay excluded bounds, then ignore the back
// gesture // gesture
final boolean isInsidePip = mIsInPipMode && mPipExcludedBounds.contains(x, y); final boolean isInsidePip = mIsInPip && mPipExcludedBounds.contains(x, y);
if (isInsidePip || mNavBarOverlayExcludedBounds.contains(x, y)) { if (isInsidePip || mNavBarOverlayExcludedBounds.contains(x, y)) {
return false; return false;
} }
@@ -933,7 +935,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
pw.println(" mInRejectedExclusion=" + mInRejectedExclusion); pw.println(" mInRejectedExclusion=" + mInRejectedExclusion);
pw.println(" mExcludeRegion=" + mExcludeRegion); pw.println(" mExcludeRegion=" + mExcludeRegion);
pw.println(" mUnrestrictedExcludeRegion=" + mUnrestrictedExcludeRegion); pw.println(" mUnrestrictedExcludeRegion=" + mUnrestrictedExcludeRegion);
pw.println(" mIsInPipMode=" + mIsInPipMode); pw.println(" mIsInPip=" + mIsInPip);
pw.println(" mPipExcludedBounds=" + mPipExcludedBounds); pw.println(" mPipExcludedBounds=" + mPipExcludedBounds);
pw.println(" mNavBarOverlayExcludedBounds=" + mNavBarOverlayExcludedBounds); pw.println(" mNavBarOverlayExcludedBounds=" + mNavBarOverlayExcludedBounds);
pw.println(" mEdgeWidthLeft=" + mEdgeWidthLeft); pw.println(" mEdgeWidthLeft=" + mEdgeWidthLeft);
@@ -1002,6 +1004,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
private final ViewConfiguration mViewConfiguration; private final ViewConfiguration mViewConfiguration;
private final WindowManager mWindowManager; private final WindowManager mWindowManager;
private final IWindowManager mWindowManagerService; private final IWindowManager mWindowManagerService;
private final Optional<Pip> mPipOptional;
private final FalsingManager mFalsingManager; private final FalsingManager mFalsingManager;
private final LatencyTracker mLatencyTracker; private final LatencyTracker mLatencyTracker;
private final FeatureFlags mFeatureFlags; private final FeatureFlags mFeatureFlags;
@@ -1018,6 +1021,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
ViewConfiguration viewConfiguration, ViewConfiguration viewConfiguration,
WindowManager windowManager, WindowManager windowManager,
IWindowManager windowManagerService, IWindowManager windowManagerService,
Optional<Pip> pipOptional,
FalsingManager falsingManager, FalsingManager falsingManager,
LatencyTracker latencyTracker, LatencyTracker latencyTracker,
FeatureFlags featureFlags) { FeatureFlags featureFlags) {
@@ -1032,6 +1036,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
mViewConfiguration = viewConfiguration; mViewConfiguration = viewConfiguration;
mWindowManager = windowManager; mWindowManager = windowManager;
mWindowManagerService = windowManagerService; mWindowManagerService = windowManagerService;
mPipOptional = pipOptional;
mFalsingManager = falsingManager; mFalsingManager = falsingManager;
mLatencyTracker = latencyTracker; mLatencyTracker = latencyTracker;
mFeatureFlags = featureFlags; mFeatureFlags = featureFlags;
@@ -1052,6 +1057,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
mViewConfiguration, mViewConfiguration,
mWindowManager, mWindowManager,
mWindowManagerService, mWindowManagerService,
mPipOptional,
mFalsingManager, mFalsingManager,
mLatencyTracker, mLatencyTracker,
mFeatureFlags); mFeatureFlags);