diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerView.java index 707747b3889b1..e17a943b5cb06 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerView.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerView.java @@ -21,6 +21,7 @@ import static android.view.WindowManager.LayoutParams.FLAG_SLIPPERY; import android.content.Context; import android.util.AttributeSet; +import android.view.GestureDetector; import android.view.MotionEvent; import android.view.SurfaceControlViewHost; import android.view.VelocityTracker; @@ -54,6 +55,7 @@ public class DividerView extends FrameLayout implements View.OnTouchListener { private VelocityTracker mVelocityTracker; private boolean mMoving; private int mStartPos; + private GestureDetector mDoubleTapDetector; public DividerView(@NonNull Context context) { super(context); @@ -88,6 +90,7 @@ public class DividerView extends FrameLayout implements View.OnTouchListener { mBackground = findViewById(R.id.docked_divider_background); mTouchElevation = getResources().getDimensionPixelSize( R.dimen.docked_stack_divider_lift_elevation); + mDoubleTapDetector = new GestureDetector(getContext(), new DoubleTapListener()); setOnTouchListener(this); } @@ -136,6 +139,8 @@ public class DividerView extends FrameLayout implements View.OnTouchListener { mSplitLayout.snapToTarget(position, snapTarget); break; } + + mDoubleTapDetector.onTouchEvent(event); return true; } @@ -200,4 +205,14 @@ public class DividerView extends FrameLayout implements View.OnTouchListener { private boolean isLandscape() { return getResources().getConfiguration().orientation == ORIENTATION_LANDSCAPE; } + + private class DoubleTapListener extends GestureDetector.SimpleOnGestureListener { + @Override + public boolean onDoubleTap(MotionEvent e) { + if (mSplitLayout != null) { + mSplitLayout.onDoubleTappedDivider(); + } + return false; + } + } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java index 9721d302a98a2..d77def54c87e1 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java @@ -201,6 +201,10 @@ public class SplitLayout { } } + void onDoubleTappedDivider() { + mLayoutChangeListener.onDoubleTappedDivider(); + } + /** * Returns {@link DividerSnapAlgorithm.SnapTarget} which matches passing position and velocity. */ @@ -249,9 +253,15 @@ public class SplitLayout { public interface LayoutChangeListener { /** Calls when dismissing split. */ void onSnappedToDismiss(boolean snappedToEnd); + /** Calls when the bounds is changing due to animation or dragging divider bar. */ void onBoundsChanging(SplitLayout layout); + /** Calls when the target bounds changed. */ void onBoundsChanged(SplitLayout layout); + + /** Calls when user double tapped on the divider bar. */ + default void onDoubleTappedDivider() { + } } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java index 0c6edf10ba944..bdac37ab737e9 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java @@ -270,6 +270,12 @@ class StageCoordinator implements SplitLayout.LayoutChangeListener, } + @Override + public void onDoubleTappedDivider() { + setSideStagePosition(mSideStagePosition == SIDE_STAGE_POSITION_TOP_OR_LEFT + ? SIDE_STAGE_POSITION_BOTTOM_OR_RIGHT : SIDE_STAGE_POSITION_TOP_OR_LEFT); + } + @Override public void onBoundsChanged(SplitLayout layout) { final SurfaceControl dividerLeash = mSplitLayout.getDividerLeash(); diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/split/SplitLayoutTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/split/SplitLayoutTests.java index 0d1c6f93d8e3c..5821eed6f6110 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/split/SplitLayoutTests.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/split/SplitLayoutTests.java @@ -82,6 +82,12 @@ public class SplitLayoutTests extends ShellTestCase { verify(mLayoutChangeListener).onBoundsChanged(any(SplitLayout.class)); } + @Test + public void testOnDoubleTappedDivider() { + mSplitLayout.onDoubleTappedDivider(); + verify(mLayoutChangeListener).onDoubleTappedDivider(); + } + @Test @UiThreadTest public void testSnapToDismissTarget() {