Loading libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerView.java +7 −7 Original line number Diff line number Diff line Loading @@ -185,7 +185,7 @@ public class DividerView extends FrameLayout implements View.OnTouchListener { nextTarget = snapAlgorithm.getDismissStartTarget(); } if (nextTarget != null) { mSplitLayout.snapToTarget(mSplitLayout.getDividePosition(), nextTarget); mSplitLayout.snapToTarget(mSplitLayout.getDividerPosition(), nextTarget); return true; } return super.performAccessibilityAction(host, action, args); Loading Loading @@ -345,9 +345,9 @@ public class DividerView extends FrameLayout implements View.OnTouchListener { mMoving = true; } if (mMoving) { final int position = mSplitLayout.getDividePosition() + touchPos - mStartPos; final int position = mSplitLayout.getDividerPosition() + touchPos - mStartPos; mLastDraggingPosition = position; mSplitLayout.updateDivideBounds(position); mSplitLayout.updateDividerBounds(position); } break; case MotionEvent.ACTION_UP: Loading @@ -363,7 +363,7 @@ public class DividerView extends FrameLayout implements View.OnTouchListener { final float velocity = isLeftRightSplit ? mVelocityTracker.getXVelocity() : mVelocityTracker.getYVelocity(); final int position = mSplitLayout.getDividePosition() + touchPos - mStartPos; final int position = mSplitLayout.getDividerPosition() + touchPos - mStartPos; final DividerSnapAlgorithm.SnapTarget snapTarget = mSplitLayout.findSnapTarget(position, velocity, false /* hardDismiss */); mSplitLayout.snapToTarget(position, snapTarget); Loading Loading @@ -472,12 +472,12 @@ public class DividerView extends FrameLayout implements View.OnTouchListener { mInteractive = interactive; mHideHandle = hideHandle; if (!mInteractive && mHideHandle && mMoving) { final int position = mSplitLayout.getDividePosition(); mSplitLayout.flingDividePosition( final int position = mSplitLayout.getDividerPosition(); mSplitLayout.flingDividerPosition( mLastDraggingPosition, position, mSplitLayout.FLING_RESIZE_DURATION, () -> mSplitLayout.setDividePosition(position, true /* applyLayoutChange */)); () -> mSplitLayout.setDividerPosition(position, true /* applyLayoutChange */)); mMoving = false; } releaseTouching(); Loading libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +17 −17 Original line number Diff line number Diff line Loading @@ -78,7 +78,7 @@ import java.util.function.Consumer; /** * Records and handles layout of splits. Helps to calculate proper bounds when configuration or * divide position changes. * divider position changes. */ public final class SplitLayout implements DisplayInsetsController.OnInsetsChangedListener { private static final String TAG = "SplitLayout"; Loading Loading @@ -278,7 +278,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange return mSplitWindowManager == null ? null : mSplitWindowManager.getSurfaceControl(); } int getDividePosition() { int getDividerPosition() { return mDividerPosition; } Loading Loading @@ -489,20 +489,20 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange public void setDividerAtBorder(boolean start) { final int pos = start ? mDividerSnapAlgorithm.getDismissStartTarget().position : mDividerSnapAlgorithm.getDismissEndTarget().position; setDividePosition(pos, false /* applyLayoutChange */); setDividerPosition(pos, false /* applyLayoutChange */); } /** * Updates bounds with the passing position. Usually used to update recording bounds while * performing animation or dragging divider bar to resize the splits. */ void updateDivideBounds(int position) { void updateDividerBounds(int position) { updateBounds(position); mSplitLayoutHandler.onLayoutSizeChanging(this, mSurfaceEffectPolicy.mParallaxOffset.x, mSurfaceEffectPolicy.mParallaxOffset.y); } void setDividePosition(int position, boolean applyLayoutChange) { void setDividerPosition(int position, boolean applyLayoutChange) { mDividerPosition = position; updateBounds(mDividerPosition); if (applyLayoutChange) { Loading @@ -511,14 +511,14 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange } /** * Updates divide position and split bounds base on the ratio within root bounds. Falls back * Updates divider position and split bounds base on the ratio within root bounds. Falls back * to middle position if the provided SnapTarget is not supported. */ public void setDivideRatio(@PersistentSnapPosition int snapPosition) { final DividerSnapAlgorithm.SnapTarget snapTarget = mDividerSnapAlgorithm.findSnapTarget( snapPosition); setDividePosition(snapTarget != null setDividerPosition(snapTarget != null ? snapTarget.position : mDividerSnapAlgorithm.getMiddleTarget().position, false /* applyLayoutChange */); Loading Loading @@ -546,24 +546,24 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange } /** * Sets new divide position and updates bounds correspondingly. Notifies listener if the new * Sets new divider position and updates bounds correspondingly. Notifies listener if the new * target indicates dismissing split. */ public void snapToTarget(int currentPosition, DividerSnapAlgorithm.SnapTarget snapTarget) { switch (snapTarget.snapPosition) { case SNAP_TO_START_AND_DISMISS: flingDividePosition(currentPosition, snapTarget.position, FLING_RESIZE_DURATION, flingDividerPosition(currentPosition, snapTarget.position, FLING_RESIZE_DURATION, () -> mSplitLayoutHandler.onSnappedToDismiss(false /* bottomOrRight */, EXIT_REASON_DRAG_DIVIDER)); break; case SNAP_TO_END_AND_DISMISS: flingDividePosition(currentPosition, snapTarget.position, FLING_RESIZE_DURATION, flingDividerPosition(currentPosition, snapTarget.position, FLING_RESIZE_DURATION, () -> mSplitLayoutHandler.onSnappedToDismiss(true /* bottomOrRight */, EXIT_REASON_DRAG_DIVIDER)); break; default: flingDividePosition(currentPosition, snapTarget.position, FLING_RESIZE_DURATION, () -> setDividePosition(snapTarget.position, true /* applyLayoutChange */)); flingDividerPosition(currentPosition, snapTarget.position, FLING_RESIZE_DURATION, () -> setDividerPosition(snapTarget.position, true /* applyLayoutChange */)); break; } } Loading Loading @@ -615,19 +615,19 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange public void flingDividerToDismiss(boolean toEnd, int reason) { final int target = toEnd ? mDividerSnapAlgorithm.getDismissEndTarget().position : mDividerSnapAlgorithm.getDismissStartTarget().position; flingDividePosition(getDividePosition(), target, FLING_EXIT_DURATION, flingDividerPosition(getDividerPosition(), target, FLING_EXIT_DURATION, () -> mSplitLayoutHandler.onSnappedToDismiss(toEnd, reason)); } /** Fling divider from current position to center position. */ public void flingDividerToCenter() { final int pos = mDividerSnapAlgorithm.getMiddleTarget().position; flingDividePosition(getDividePosition(), pos, FLING_ENTER_DURATION, () -> setDividePosition(pos, true /* applyLayoutChange */)); flingDividerPosition(getDividerPosition(), pos, FLING_ENTER_DURATION, () -> setDividerPosition(pos, true /* applyLayoutChange */)); } @VisibleForTesting void flingDividePosition(int from, int to, int duration, void flingDividerPosition(int from, int to, int duration, @Nullable Runnable flingFinishedCallback) { if (from == to) { if (flingFinishedCallback != null) { Loading @@ -647,7 +647,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange .setDuration(duration); mDividerFlingAnimator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN); mDividerFlingAnimator.addUpdateListener( animation -> updateDivideBounds((int) animation.getAnimatedValue())); animation -> updateDividerBounds((int) animation.getAnimatedValue())); mDividerFlingAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/split/SplitLayoutTests.java +10 −10 Original line number Diff line number Diff line Loading @@ -115,27 +115,27 @@ public class SplitLayoutTests extends ShellTestCase { @Test public void testUpdateDivideBounds() { mSplitLayout.updateDivideBounds(anyInt()); mSplitLayout.updateDividerBounds(anyInt()); verify(mSplitLayoutHandler).onLayoutSizeChanging(any(SplitLayout.class), anyInt(), anyInt()); } @Test public void testSetDividePosition() { mSplitLayout.setDividePosition(100, false /* applyLayoutChange */); assertThat(mSplitLayout.getDividePosition()).isEqualTo(100); mSplitLayout.setDividerPosition(100, false /* applyLayoutChange */); assertThat(mSplitLayout.getDividerPosition()).isEqualTo(100); verify(mSplitLayoutHandler, never()).onLayoutSizeChanged(any(SplitLayout.class)); mSplitLayout.setDividePosition(200, true /* applyLayoutChange */); assertThat(mSplitLayout.getDividePosition()).isEqualTo(200); mSplitLayout.setDividerPosition(200, true /* applyLayoutChange */); assertThat(mSplitLayout.getDividerPosition()).isEqualTo(200); verify(mSplitLayoutHandler).onLayoutSizeChanged(any(SplitLayout.class)); } @Test public void testSetDivideRatio() { mSplitLayout.setDividePosition(200, false /* applyLayoutChange */); mSplitLayout.setDividerPosition(200, false /* applyLayoutChange */); mSplitLayout.setDivideRatio(SNAP_TO_50_50); assertThat(mSplitLayout.getDividePosition()).isEqualTo( assertThat(mSplitLayout.getDividerPosition()).isEqualTo( mSplitLayout.mDividerSnapAlgorithm.getMiddleTarget().position); } Loading @@ -152,7 +152,7 @@ public class SplitLayoutTests extends ShellTestCase { DividerSnapAlgorithm.SnapTarget snapTarget = getSnapTarget(0 /* position */, SNAP_TO_START_AND_DISMISS); mSplitLayout.snapToTarget(mSplitLayout.getDividePosition(), snapTarget); mSplitLayout.snapToTarget(mSplitLayout.getDividerPosition(), snapTarget); waitDividerFlingFinished(); verify(mSplitLayoutHandler).onSnappedToDismiss(eq(false), anyInt()); } Loading @@ -164,7 +164,7 @@ public class SplitLayoutTests extends ShellTestCase { DividerSnapAlgorithm.SnapTarget snapTarget = getSnapTarget(0 /* position */, SNAP_TO_END_AND_DISMISS); mSplitLayout.snapToTarget(mSplitLayout.getDividePosition(), snapTarget); mSplitLayout.snapToTarget(mSplitLayout.getDividerPosition(), snapTarget); waitDividerFlingFinished(); verify(mSplitLayoutHandler).onSnappedToDismiss(eq(true), anyInt()); } Loading @@ -188,7 +188,7 @@ public class SplitLayoutTests extends ShellTestCase { } private void waitDividerFlingFinished() { verify(mSplitLayout).flingDividePosition(anyInt(), anyInt(), anyInt(), verify(mSplitLayout).flingDividerPosition(anyInt(), anyInt(), anyInt(), mRunnableCaptor.capture()); mRunnableCaptor.getValue().run(); } Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerView.java +7 −7 Original line number Diff line number Diff line Loading @@ -185,7 +185,7 @@ public class DividerView extends FrameLayout implements View.OnTouchListener { nextTarget = snapAlgorithm.getDismissStartTarget(); } if (nextTarget != null) { mSplitLayout.snapToTarget(mSplitLayout.getDividePosition(), nextTarget); mSplitLayout.snapToTarget(mSplitLayout.getDividerPosition(), nextTarget); return true; } return super.performAccessibilityAction(host, action, args); Loading Loading @@ -345,9 +345,9 @@ public class DividerView extends FrameLayout implements View.OnTouchListener { mMoving = true; } if (mMoving) { final int position = mSplitLayout.getDividePosition() + touchPos - mStartPos; final int position = mSplitLayout.getDividerPosition() + touchPos - mStartPos; mLastDraggingPosition = position; mSplitLayout.updateDivideBounds(position); mSplitLayout.updateDividerBounds(position); } break; case MotionEvent.ACTION_UP: Loading @@ -363,7 +363,7 @@ public class DividerView extends FrameLayout implements View.OnTouchListener { final float velocity = isLeftRightSplit ? mVelocityTracker.getXVelocity() : mVelocityTracker.getYVelocity(); final int position = mSplitLayout.getDividePosition() + touchPos - mStartPos; final int position = mSplitLayout.getDividerPosition() + touchPos - mStartPos; final DividerSnapAlgorithm.SnapTarget snapTarget = mSplitLayout.findSnapTarget(position, velocity, false /* hardDismiss */); mSplitLayout.snapToTarget(position, snapTarget); Loading Loading @@ -472,12 +472,12 @@ public class DividerView extends FrameLayout implements View.OnTouchListener { mInteractive = interactive; mHideHandle = hideHandle; if (!mInteractive && mHideHandle && mMoving) { final int position = mSplitLayout.getDividePosition(); mSplitLayout.flingDividePosition( final int position = mSplitLayout.getDividerPosition(); mSplitLayout.flingDividerPosition( mLastDraggingPosition, position, mSplitLayout.FLING_RESIZE_DURATION, () -> mSplitLayout.setDividePosition(position, true /* applyLayoutChange */)); () -> mSplitLayout.setDividerPosition(position, true /* applyLayoutChange */)); mMoving = false; } releaseTouching(); Loading
libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +17 −17 Original line number Diff line number Diff line Loading @@ -78,7 +78,7 @@ import java.util.function.Consumer; /** * Records and handles layout of splits. Helps to calculate proper bounds when configuration or * divide position changes. * divider position changes. */ public final class SplitLayout implements DisplayInsetsController.OnInsetsChangedListener { private static final String TAG = "SplitLayout"; Loading Loading @@ -278,7 +278,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange return mSplitWindowManager == null ? null : mSplitWindowManager.getSurfaceControl(); } int getDividePosition() { int getDividerPosition() { return mDividerPosition; } Loading Loading @@ -489,20 +489,20 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange public void setDividerAtBorder(boolean start) { final int pos = start ? mDividerSnapAlgorithm.getDismissStartTarget().position : mDividerSnapAlgorithm.getDismissEndTarget().position; setDividePosition(pos, false /* applyLayoutChange */); setDividerPosition(pos, false /* applyLayoutChange */); } /** * Updates bounds with the passing position. Usually used to update recording bounds while * performing animation or dragging divider bar to resize the splits. */ void updateDivideBounds(int position) { void updateDividerBounds(int position) { updateBounds(position); mSplitLayoutHandler.onLayoutSizeChanging(this, mSurfaceEffectPolicy.mParallaxOffset.x, mSurfaceEffectPolicy.mParallaxOffset.y); } void setDividePosition(int position, boolean applyLayoutChange) { void setDividerPosition(int position, boolean applyLayoutChange) { mDividerPosition = position; updateBounds(mDividerPosition); if (applyLayoutChange) { Loading @@ -511,14 +511,14 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange } /** * Updates divide position and split bounds base on the ratio within root bounds. Falls back * Updates divider position and split bounds base on the ratio within root bounds. Falls back * to middle position if the provided SnapTarget is not supported. */ public void setDivideRatio(@PersistentSnapPosition int snapPosition) { final DividerSnapAlgorithm.SnapTarget snapTarget = mDividerSnapAlgorithm.findSnapTarget( snapPosition); setDividePosition(snapTarget != null setDividerPosition(snapTarget != null ? snapTarget.position : mDividerSnapAlgorithm.getMiddleTarget().position, false /* applyLayoutChange */); Loading Loading @@ -546,24 +546,24 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange } /** * Sets new divide position and updates bounds correspondingly. Notifies listener if the new * Sets new divider position and updates bounds correspondingly. Notifies listener if the new * target indicates dismissing split. */ public void snapToTarget(int currentPosition, DividerSnapAlgorithm.SnapTarget snapTarget) { switch (snapTarget.snapPosition) { case SNAP_TO_START_AND_DISMISS: flingDividePosition(currentPosition, snapTarget.position, FLING_RESIZE_DURATION, flingDividerPosition(currentPosition, snapTarget.position, FLING_RESIZE_DURATION, () -> mSplitLayoutHandler.onSnappedToDismiss(false /* bottomOrRight */, EXIT_REASON_DRAG_DIVIDER)); break; case SNAP_TO_END_AND_DISMISS: flingDividePosition(currentPosition, snapTarget.position, FLING_RESIZE_DURATION, flingDividerPosition(currentPosition, snapTarget.position, FLING_RESIZE_DURATION, () -> mSplitLayoutHandler.onSnappedToDismiss(true /* bottomOrRight */, EXIT_REASON_DRAG_DIVIDER)); break; default: flingDividePosition(currentPosition, snapTarget.position, FLING_RESIZE_DURATION, () -> setDividePosition(snapTarget.position, true /* applyLayoutChange */)); flingDividerPosition(currentPosition, snapTarget.position, FLING_RESIZE_DURATION, () -> setDividerPosition(snapTarget.position, true /* applyLayoutChange */)); break; } } Loading Loading @@ -615,19 +615,19 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange public void flingDividerToDismiss(boolean toEnd, int reason) { final int target = toEnd ? mDividerSnapAlgorithm.getDismissEndTarget().position : mDividerSnapAlgorithm.getDismissStartTarget().position; flingDividePosition(getDividePosition(), target, FLING_EXIT_DURATION, flingDividerPosition(getDividerPosition(), target, FLING_EXIT_DURATION, () -> mSplitLayoutHandler.onSnappedToDismiss(toEnd, reason)); } /** Fling divider from current position to center position. */ public void flingDividerToCenter() { final int pos = mDividerSnapAlgorithm.getMiddleTarget().position; flingDividePosition(getDividePosition(), pos, FLING_ENTER_DURATION, () -> setDividePosition(pos, true /* applyLayoutChange */)); flingDividerPosition(getDividerPosition(), pos, FLING_ENTER_DURATION, () -> setDividerPosition(pos, true /* applyLayoutChange */)); } @VisibleForTesting void flingDividePosition(int from, int to, int duration, void flingDividerPosition(int from, int to, int duration, @Nullable Runnable flingFinishedCallback) { if (from == to) { if (flingFinishedCallback != null) { Loading @@ -647,7 +647,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange .setDuration(duration); mDividerFlingAnimator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN); mDividerFlingAnimator.addUpdateListener( animation -> updateDivideBounds((int) animation.getAnimatedValue())); animation -> updateDividerBounds((int) animation.getAnimatedValue())); mDividerFlingAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/split/SplitLayoutTests.java +10 −10 Original line number Diff line number Diff line Loading @@ -115,27 +115,27 @@ public class SplitLayoutTests extends ShellTestCase { @Test public void testUpdateDivideBounds() { mSplitLayout.updateDivideBounds(anyInt()); mSplitLayout.updateDividerBounds(anyInt()); verify(mSplitLayoutHandler).onLayoutSizeChanging(any(SplitLayout.class), anyInt(), anyInt()); } @Test public void testSetDividePosition() { mSplitLayout.setDividePosition(100, false /* applyLayoutChange */); assertThat(mSplitLayout.getDividePosition()).isEqualTo(100); mSplitLayout.setDividerPosition(100, false /* applyLayoutChange */); assertThat(mSplitLayout.getDividerPosition()).isEqualTo(100); verify(mSplitLayoutHandler, never()).onLayoutSizeChanged(any(SplitLayout.class)); mSplitLayout.setDividePosition(200, true /* applyLayoutChange */); assertThat(mSplitLayout.getDividePosition()).isEqualTo(200); mSplitLayout.setDividerPosition(200, true /* applyLayoutChange */); assertThat(mSplitLayout.getDividerPosition()).isEqualTo(200); verify(mSplitLayoutHandler).onLayoutSizeChanged(any(SplitLayout.class)); } @Test public void testSetDivideRatio() { mSplitLayout.setDividePosition(200, false /* applyLayoutChange */); mSplitLayout.setDividerPosition(200, false /* applyLayoutChange */); mSplitLayout.setDivideRatio(SNAP_TO_50_50); assertThat(mSplitLayout.getDividePosition()).isEqualTo( assertThat(mSplitLayout.getDividerPosition()).isEqualTo( mSplitLayout.mDividerSnapAlgorithm.getMiddleTarget().position); } Loading @@ -152,7 +152,7 @@ public class SplitLayoutTests extends ShellTestCase { DividerSnapAlgorithm.SnapTarget snapTarget = getSnapTarget(0 /* position */, SNAP_TO_START_AND_DISMISS); mSplitLayout.snapToTarget(mSplitLayout.getDividePosition(), snapTarget); mSplitLayout.snapToTarget(mSplitLayout.getDividerPosition(), snapTarget); waitDividerFlingFinished(); verify(mSplitLayoutHandler).onSnappedToDismiss(eq(false), anyInt()); } Loading @@ -164,7 +164,7 @@ public class SplitLayoutTests extends ShellTestCase { DividerSnapAlgorithm.SnapTarget snapTarget = getSnapTarget(0 /* position */, SNAP_TO_END_AND_DISMISS); mSplitLayout.snapToTarget(mSplitLayout.getDividePosition(), snapTarget); mSplitLayout.snapToTarget(mSplitLayout.getDividerPosition(), snapTarget); waitDividerFlingFinished(); verify(mSplitLayoutHandler).onSnappedToDismiss(eq(true), anyInt()); } Loading @@ -188,7 +188,7 @@ public class SplitLayoutTests extends ShellTestCase { } private void waitDividerFlingFinished() { verify(mSplitLayout).flingDividePosition(anyInt(), anyInt(), anyInt(), verify(mSplitLayout).flingDividerPosition(anyInt(), anyInt(), anyInt(), mRunnableCaptor.capture()); mRunnableCaptor.getValue().run(); } Loading