diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2021-01-14 21:21:06 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2021-01-14 21:21:06 +0000 |
commit | 4663bdc7617681882ea8d0fe49df5e4ef180da45 (patch) | |
tree | ef293542e4ea5266228c758008a570efa2fb55e7 | |
parent | 5c44f55a927cf8e737c97f47867783f6012dd01b (diff) | |
parent | d19771c9aff8951a451a235d8368a0ea53da57cb (diff) |
Merge "Add double tap callback for divider bar"
4 files changed, 37 insertions, 0 deletions
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 707747b3889b..e17a943b5cb0 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 9721d302a98a..d77def54c87e 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 0c6edf10ba94..bdac37ab737e 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 @@ -271,6 +271,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(); if (dividerLeash == null) return; 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 0d1c6f93d8e3..5821eed6f611 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 @@ -83,6 +83,12 @@ public class SplitLayoutTests extends ShellTestCase { } @Test + public void testOnDoubleTappedDivider() { + mSplitLayout.onDoubleTappedDivider(); + verify(mLayoutChangeListener).onDoubleTappedDivider(); + } + + @Test @UiThreadTest public void testSnapToDismissTarget() { // verify it callbacks properly when the snap target indicates dismissing split. |