diff options
| author | 2023-04-21 01:00:42 +0000 | |
|---|---|---|
| committer | 2023-04-21 01:00:42 +0000 | |
| commit | 331d9987bc024d76dc35d308ea5b3222f52d681c (patch) | |
| tree | 7cbc344e36e4e9d91cb805919dcb8e0a28dd7bbf /packages/SystemUI | |
| parent | 1c9c183adb511d8b5535cfbaf67efdf1f37fec0e (diff) | |
| parent | c5dfdd152061f6e766c47e14a4df50c9fad791a2 (diff) | |
Merge "Prevent desktop mode corner handles from triggering back gesture." into udc-dev
Diffstat (limited to 'packages/SystemUI')
3 files changed, 26 insertions, 3 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java index b9ef916eebdf..41e3e6d83eea 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java @@ -89,6 +89,7 @@ import com.android.systemui.tracing.nano.EdgeBackGestureHandlerProto; import com.android.systemui.tracing.nano.SystemUiTraceProto; import com.android.systemui.util.Assert; import com.android.wm.shell.back.BackAnimation; +import com.android.wm.shell.desktopmode.DesktopMode; import com.android.wm.shell.pip.Pip; import java.io.PrintWriter; @@ -190,6 +191,7 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack private final WindowManager mWindowManager; private final IWindowManager mWindowManagerService; private final Optional<Pip> mPipOptional; + private final Optional<DesktopMode> mDesktopModeOptional; private final FalsingManager mFalsingManager; private final Configuration mLastReportedConfig = new Configuration(); // Activities which should not trigger Back gesture. @@ -204,6 +206,7 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack private final Rect mPipExcludedBounds = new Rect(); private final Rect mNavBarOverlayExcludedBounds = new Rect(); private final Region mExcludeRegion = new Region(); + private final Region mDesktopModeExcludeRegion = new Region(); private final Region mUnrestrictedExcludeRegion = new Region(); private final Provider<NavigationBarEdgePanel> mNavBarEdgePanelProvider; private final Provider<BackGestureTfClassifierProvider> @@ -328,6 +331,9 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack private final Consumer<Boolean> mOnIsInPipStateChangedListener = (isInPip) -> mIsInPip = isInPip; + private final Consumer<Region> mDesktopCornersChangedListener = + (desktopExcludeRegion) -> mDesktopModeExcludeRegion.set(desktopExcludeRegion); + private final UserTracker.Callback mUserChangedCallback = new UserTracker.Callback() { @Override @@ -352,6 +358,7 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack WindowManager windowManager, IWindowManager windowManagerService, Optional<Pip> pipOptional, + Optional<DesktopMode> desktopModeOptional, FalsingManager falsingManager, Provider<NavigationBarEdgePanel> navigationBarEdgePanelProvider, Provider<BackGestureTfClassifierProvider> backGestureTfClassifierProviderProvider, @@ -372,6 +379,7 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack mWindowManager = windowManager; mWindowManagerService = windowManagerService; mPipOptional = pipOptional; + mDesktopModeOptional = desktopModeOptional; mFalsingManager = falsingManager; mNavBarEdgePanelProvider = navigationBarEdgePanelProvider; mBackGestureTfClassifierProviderProvider = backGestureTfClassifierProviderProvider; @@ -580,6 +588,9 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack mMainExecutor::execute, mOnPropertiesChangedListener); mPipOptional.ifPresent( pip -> pip.setOnIsInPipStateChangedListener(mOnIsInPipStateChangedListener)); + mDesktopModeOptional.ifPresent( + dm -> dm.addDesktopGestureExclusionRegionListener( + mDesktopCornersChangedListener, mMainExecutor)); try { mWindowManagerService.registerSystemGestureExclusionListener( @@ -802,11 +813,17 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack mDisplaySize.y - insets.bottom); } + private boolean desktopExcludeRegionContains(int x, int y) { + return mDesktopModeExcludeRegion.contains(x, 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 // gesture final boolean isInsidePip = mIsInPip && mPipExcludedBounds.contains(x, y); - if (isInsidePip || mNavBarOverlayExcludedBounds.contains(x, y)) { + final boolean isInDesktopExcludeRegion = desktopExcludeRegionContains(x, y); + if (isInsidePip || isInDesktopExcludeRegion + || mNavBarOverlayExcludedBounds.contains(x, y)) { return false; } @@ -1136,6 +1153,7 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack pw.println(" mUnrestrictedExcludeRegion=" + mUnrestrictedExcludeRegion); pw.println(" mIsInPip=" + mIsInPip); pw.println(" mPipExcludedBounds=" + mPipExcludedBounds); + pw.println(" mDesktopModeExclusionRegion=" + mDesktopModeExcludeRegion); pw.println(" mNavBarOverlayExcludedBounds=" + mNavBarOverlayExcludedBounds); pw.println(" mEdgeWidthLeft=" + mEdgeWidthLeft); pw.println(" mEdgeWidthRight=" + mEdgeWidthRight); @@ -1206,6 +1224,7 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack private final WindowManager mWindowManager; private final IWindowManager mWindowManagerService; private final Optional<Pip> mPipOptional; + private final Optional<DesktopMode> mDesktopModeOptional; private final FalsingManager mFalsingManager; private final Provider<NavigationBarEdgePanel> mNavBarEdgePanelProvider; private final Provider<BackGestureTfClassifierProvider> @@ -1227,6 +1246,7 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack WindowManager windowManager, IWindowManager windowManagerService, Optional<Pip> pipOptional, + Optional<DesktopMode> desktopModeOptional, FalsingManager falsingManager, Provider<NavigationBarEdgePanel> navBarEdgePanelProvider, Provider<BackGestureTfClassifierProvider> @@ -1246,6 +1266,7 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack mWindowManager = windowManager; mWindowManagerService = windowManagerService; mPipOptional = pipOptional; + mDesktopModeOptional = desktopModeOptional; mFalsingManager = falsingManager; mNavBarEdgePanelProvider = navBarEdgePanelProvider; mBackGestureTfClassifierProviderProvider = backGestureTfClassifierProviderProvider; @@ -1270,6 +1291,7 @@ public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBack mWindowManager, mWindowManagerService, mPipOptional, + mDesktopModeOptional, mFalsingManager, mNavBarEdgePanelProvider, mBackGestureTfClassifierProviderProvider, diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java b/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java index e492534b3ff6..b3e7cb0c77eb 100644 --- a/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java +++ b/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java @@ -345,7 +345,8 @@ public final class WMShell implements } void initDesktopMode(DesktopMode desktopMode) { - desktopMode.addListener(new DesktopModeTaskRepository.VisibleTasksListener() { + desktopMode.addVisibleTasksListener( + new DesktopModeTaskRepository.VisibleTasksListener() { @Override public void onVisibilityChanged(boolean hasFreeformTasks) { mSysUiState.setFlag(SYSUI_STATE_FREEFORM_ACTIVE_IN_DESKTOP_MODE, hasFreeformTasks) diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/WMShellTest.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/WMShellTest.java index 8cae99893496..9de7a87c8b82 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/WMShellTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/WMShellTest.java @@ -128,7 +128,7 @@ public class WMShellTest extends SysuiTestCase { @Test public void initDesktopMode_registersListener() { mWMShell.initDesktopMode(mDesktopMode); - verify(mDesktopMode).addListener( + verify(mDesktopMode).addVisibleTasksListener( any(DesktopModeTaskRepository.VisibleTasksListener.class), any(Executor.class)); } |