Loading libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerView.java +15 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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); } Loading Loading @@ -136,6 +139,8 @@ public class DividerView extends FrameLayout implements View.OnTouchListener { mSplitLayout.snapToTarget(position, snapTarget); break; } mDoubleTapDetector.onTouchEvent(event); return true; } Loading Loading @@ -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; } } } libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +10 −0 Original line number Diff line number Diff line Loading @@ -201,6 +201,10 @@ public class SplitLayout { } } void onDoubleTappedDivider() { mLayoutChangeListener.onDoubleTappedDivider(); } /** * Returns {@link DividerSnapAlgorithm.SnapTarget} which matches passing position and velocity. */ Loading Loading @@ -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() { } } } libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +6 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/split/SplitLayoutTests.java +6 −0 Original line number Diff line number Diff line Loading @@ -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() { Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerView.java +15 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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); } Loading Loading @@ -136,6 +139,8 @@ public class DividerView extends FrameLayout implements View.OnTouchListener { mSplitLayout.snapToTarget(position, snapTarget); break; } mDoubleTapDetector.onTouchEvent(event); return true; } Loading Loading @@ -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; } } }
libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +10 −0 Original line number Diff line number Diff line Loading @@ -201,6 +201,10 @@ public class SplitLayout { } } void onDoubleTappedDivider() { mLayoutChangeListener.onDoubleTappedDivider(); } /** * Returns {@link DividerSnapAlgorithm.SnapTarget} which matches passing position and velocity. */ Loading Loading @@ -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() { } } }
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +6 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/split/SplitLayoutTests.java +6 −0 Original line number Diff line number Diff line Loading @@ -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() { Loading