Merge "Revert "Improve enter split transition"" into tm-qpr-dev
This commit is contained in:
@@ -80,10 +80,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
|
|||||||
public static final int PARALLAX_DISMISSING = 1;
|
public static final int PARALLAX_DISMISSING = 1;
|
||||||
public static final int PARALLAX_ALIGN_CENTER = 2;
|
public static final int PARALLAX_ALIGN_CENTER = 2;
|
||||||
|
|
||||||
private static final int FLING_RESIZE_DURATION = 250;
|
private static final int FLING_ANIMATION_DURATION = 250;
|
||||||
private static final int FLING_SWITCH_DURATION = 350;
|
|
||||||
private static final int FLING_ENTER_DURATION = 350;
|
|
||||||
private static final int FLING_EXIT_DURATION = 350;
|
|
||||||
|
|
||||||
private final int mDividerWindowWidth;
|
private final int mDividerWindowWidth;
|
||||||
private final int mDividerInsets;
|
private final int mDividerInsets;
|
||||||
@@ -96,9 +93,6 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
|
|||||||
private final Rect mBounds1 = new Rect();
|
private final Rect mBounds1 = new Rect();
|
||||||
// Bounds2 final position should be always at bottom or right
|
// Bounds2 final position should be always at bottom or right
|
||||||
private final Rect mBounds2 = new Rect();
|
private final Rect mBounds2 = new Rect();
|
||||||
// The temp bounds outside of display bounds for side stage when split screen inactive to avoid
|
|
||||||
// flicker next time active split screen.
|
|
||||||
private final Rect mInvisibleBounds = new Rect();
|
|
||||||
private final Rect mWinBounds1 = new Rect();
|
private final Rect mWinBounds1 = new Rect();
|
||||||
private final Rect mWinBounds2 = new Rect();
|
private final Rect mWinBounds2 = new Rect();
|
||||||
private final SplitLayoutHandler mSplitLayoutHandler;
|
private final SplitLayoutHandler mSplitLayoutHandler;
|
||||||
@@ -147,10 +141,6 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
|
|||||||
resetDividerPosition();
|
resetDividerPosition();
|
||||||
|
|
||||||
mDimNonImeSide = resources.getBoolean(R.bool.config_dimNonImeAttachedSide);
|
mDimNonImeSide = resources.getBoolean(R.bool.config_dimNonImeAttachedSide);
|
||||||
|
|
||||||
mInvisibleBounds.set(mRootBounds);
|
|
||||||
mInvisibleBounds.offset(isLandscape() ? mRootBounds.right : 0,
|
|
||||||
isLandscape() ? 0 : mRootBounds.bottom);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getDividerInsets(Resources resources, Display display) {
|
private int getDividerInsets(Resources resources, Display display) {
|
||||||
@@ -249,12 +239,6 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
|
|||||||
rect.offset(-mRootBounds.left, -mRootBounds.top);
|
rect.offset(-mRootBounds.left, -mRootBounds.top);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Gets bounds size equal to root bounds but outside of screen, used for position side stage
|
|
||||||
* when split inactive to avoid flicker when next time active. */
|
|
||||||
public void getInvisibleBounds(Rect rect) {
|
|
||||||
rect.set(mInvisibleBounds);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Returns leash of the current divider bar. */
|
/** Returns leash of the current divider bar. */
|
||||||
@Nullable
|
@Nullable
|
||||||
public SurfaceControl getDividerLeash() {
|
public SurfaceControl getDividerLeash() {
|
||||||
@@ -300,10 +284,6 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
|
|||||||
mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds, null);
|
mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds, null);
|
||||||
initDividerPosition(mTempRect);
|
initDividerPosition(mTempRect);
|
||||||
|
|
||||||
mInvisibleBounds.set(mRootBounds);
|
|
||||||
mInvisibleBounds.offset(isLandscape() ? mRootBounds.right : 0,
|
|
||||||
isLandscape() ? 0 : mRootBounds.bottom);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -425,13 +405,6 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
|
|||||||
mFreezeDividerWindow = freezeDividerWindow;
|
mFreezeDividerWindow = freezeDividerWindow;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Update current layout as divider put on start or end position. */
|
|
||||||
public void setDividerAtBorder(boolean start) {
|
|
||||||
final int pos = start ? mDividerSnapAlgorithm.getDismissStartTarget().position
|
|
||||||
: mDividerSnapAlgorithm.getDismissEndTarget().position;
|
|
||||||
setDividePosition(pos, false /* applyLayoutChange */);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates bounds with the passing position. Usually used to update recording bounds while
|
* Updates bounds with the passing position. Usually used to update recording bounds while
|
||||||
* performing animation or dragging divider bar to resize the splits.
|
* performing animation or dragging divider bar to resize the splits.
|
||||||
@@ -476,17 +449,17 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
|
|||||||
public void snapToTarget(int currentPosition, DividerSnapAlgorithm.SnapTarget snapTarget) {
|
public void snapToTarget(int currentPosition, DividerSnapAlgorithm.SnapTarget snapTarget) {
|
||||||
switch (snapTarget.flag) {
|
switch (snapTarget.flag) {
|
||||||
case FLAG_DISMISS_START:
|
case FLAG_DISMISS_START:
|
||||||
flingDividePosition(currentPosition, snapTarget.position, FLING_RESIZE_DURATION,
|
flingDividePosition(currentPosition, snapTarget.position,
|
||||||
() -> mSplitLayoutHandler.onSnappedToDismiss(false /* bottomOrRight */,
|
() -> mSplitLayoutHandler.onSnappedToDismiss(false /* bottomOrRight */,
|
||||||
EXIT_REASON_DRAG_DIVIDER));
|
EXIT_REASON_DRAG_DIVIDER));
|
||||||
break;
|
break;
|
||||||
case FLAG_DISMISS_END:
|
case FLAG_DISMISS_END:
|
||||||
flingDividePosition(currentPosition, snapTarget.position, FLING_RESIZE_DURATION,
|
flingDividePosition(currentPosition, snapTarget.position,
|
||||||
() -> mSplitLayoutHandler.onSnappedToDismiss(true /* bottomOrRight */,
|
() -> mSplitLayoutHandler.onSnappedToDismiss(true /* bottomOrRight */,
|
||||||
EXIT_REASON_DRAG_DIVIDER));
|
EXIT_REASON_DRAG_DIVIDER));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
flingDividePosition(currentPosition, snapTarget.position, FLING_RESIZE_DURATION,
|
flingDividePosition(currentPosition, snapTarget.position,
|
||||||
() -> setDividePosition(snapTarget.position, true /* applyLayoutChange */));
|
() -> setDividePosition(snapTarget.position, true /* applyLayoutChange */));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -541,20 +514,12 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
|
|||||||
public void flingDividerToDismiss(boolean toEnd, int reason) {
|
public void flingDividerToDismiss(boolean toEnd, int reason) {
|
||||||
final int target = toEnd ? mDividerSnapAlgorithm.getDismissEndTarget().position
|
final int target = toEnd ? mDividerSnapAlgorithm.getDismissEndTarget().position
|
||||||
: mDividerSnapAlgorithm.getDismissStartTarget().position;
|
: mDividerSnapAlgorithm.getDismissStartTarget().position;
|
||||||
flingDividePosition(getDividePosition(), target, FLING_EXIT_DURATION,
|
flingDividePosition(getDividePosition(), target,
|
||||||
() -> mSplitLayoutHandler.onSnappedToDismiss(toEnd, reason));
|
() -> 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 */));
|
|
||||||
}
|
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void flingDividePosition(int from, int to, int duration,
|
void flingDividePosition(int from, int to, @Nullable Runnable flingFinishedCallback) {
|
||||||
@Nullable Runnable flingFinishedCallback) {
|
|
||||||
if (from == to) {
|
if (from == to) {
|
||||||
// No animation run, still callback to stop resizing.
|
// No animation run, still callback to stop resizing.
|
||||||
mSplitLayoutHandler.onLayoutSizeChanged(this);
|
mSplitLayoutHandler.onLayoutSizeChanged(this);
|
||||||
@@ -564,7 +529,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
|
|||||||
}
|
}
|
||||||
ValueAnimator animator = ValueAnimator
|
ValueAnimator animator = ValueAnimator
|
||||||
.ofInt(from, to)
|
.ofInt(from, to)
|
||||||
.setDuration(duration);
|
.setDuration(FLING_ANIMATION_DURATION);
|
||||||
animator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
|
animator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
|
||||||
animator.addUpdateListener(
|
animator.addUpdateListener(
|
||||||
animation -> updateDivideBounds((int) animation.getAnimatedValue()));
|
animation -> updateDivideBounds((int) animation.getAnimatedValue()));
|
||||||
@@ -621,7 +586,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
|
|||||||
|
|
||||||
AnimatorSet set = new AnimatorSet();
|
AnimatorSet set = new AnimatorSet();
|
||||||
set.playTogether(animator1, animator2, animator3);
|
set.playTogether(animator1, animator2, animator3);
|
||||||
set.setDuration(FLING_SWITCH_DURATION);
|
set.setDuration(FLING_ANIMATION_DURATION);
|
||||||
set.addListener(new AnimatorListenerAdapter() {
|
set.addListener(new AnimatorListenerAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void onAnimationEnd(Animator animation) {
|
public void onAnimationEnd(Animator animation) {
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
|
|||||||
import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
|
import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
|
||||||
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
|
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
|
||||||
import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
|
import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
|
||||||
import static android.content.res.Configuration.SMALLEST_SCREEN_WIDTH_DP_UNDEFINED;
|
|
||||||
import static android.view.Display.DEFAULT_DISPLAY;
|
import static android.view.Display.DEFAULT_DISPLAY;
|
||||||
import static android.view.RemoteAnimationTarget.MODE_OPENING;
|
import static android.view.RemoteAnimationTarget.MODE_OPENING;
|
||||||
import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
|
import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
|
||||||
@@ -489,6 +488,13 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
final WindowContainerTransaction wct = new WindowContainerTransaction();
|
final WindowContainerTransaction wct = new WindowContainerTransaction();
|
||||||
options = resolveStartStage(STAGE_TYPE_UNDEFINED, position, options, wct);
|
options = resolveStartStage(STAGE_TYPE_UNDEFINED, position, options, wct);
|
||||||
|
|
||||||
|
// If split still not active, apply windows bounds first to avoid surface reset to
|
||||||
|
// wrong pos by SurfaceAnimator from wms.
|
||||||
|
// TODO(b/223325631): check is it still necessary after improve enter transition done.
|
||||||
|
if (!mMainStage.isActive()) {
|
||||||
|
updateWindowBounds(mSplitLayout, wct);
|
||||||
|
}
|
||||||
|
|
||||||
wct.sendPendingIntent(intent, fillInIntent, options);
|
wct.sendPendingIntent(intent, fillInIntent, options);
|
||||||
mSyncQueue.queue(transition, WindowManager.TRANSIT_OPEN, wct);
|
mSyncQueue.queue(transition, WindowManager.TRANSIT_OPEN, wct);
|
||||||
}
|
}
|
||||||
@@ -635,7 +641,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
wct.startTask(sideTaskId, sideOptions);
|
wct.startTask(sideTaskId, sideOptions);
|
||||||
}
|
}
|
||||||
// Using legacy transitions, so we can't use blast sync since it conflicts.
|
// Using legacy transitions, so we can't use blast sync since it conflicts.
|
||||||
mSyncQueue.queue(wct);
|
mTaskOrganizer.applyTransaction(wct);
|
||||||
mSyncQueue.runInSync(t -> {
|
mSyncQueue.runInSync(t -> {
|
||||||
setDividerVisibility(true, t);
|
setDividerVisibility(true, t);
|
||||||
updateSurfaceBounds(mSplitLayout, t, false /* applyResizingOffset */);
|
updateSurfaceBounds(mSplitLayout, t, false /* applyResizingOffset */);
|
||||||
@@ -887,13 +893,10 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
mShouldUpdateRecents = false;
|
mShouldUpdateRecents = false;
|
||||||
mIsDividerRemoteAnimating = false;
|
mIsDividerRemoteAnimating = false;
|
||||||
|
|
||||||
mSplitLayout.getInvisibleBounds(mTempRect1);
|
|
||||||
if (childrenToTop == null) {
|
if (childrenToTop == null) {
|
||||||
mSideStage.removeAllTasks(wct, false /* toTop */);
|
mSideStage.removeAllTasks(wct, false /* toTop */);
|
||||||
mMainStage.deactivate(wct, false /* toTop */);
|
mMainStage.deactivate(wct, false /* toTop */);
|
||||||
wct.reorder(mRootTaskInfo.token, false /* onTop */);
|
wct.reorder(mRootTaskInfo.token, false /* onTop */);
|
||||||
wct.setForceTranslucent(mRootTaskInfo.token, true);
|
|
||||||
wct.setBounds(mSideStage.mRootTaskInfo.token, mTempRect1);
|
|
||||||
onTransitionAnimationComplete();
|
onTransitionAnimationComplete();
|
||||||
} else {
|
} else {
|
||||||
// Expand to top side split as full screen for fading out decor animation and dismiss
|
// Expand to top side split as full screen for fading out decor animation and dismiss
|
||||||
@@ -904,32 +907,27 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
? mSideStage : mMainStage;
|
? mSideStage : mMainStage;
|
||||||
tempFullStage.resetBounds(wct);
|
tempFullStage.resetBounds(wct);
|
||||||
wct.setSmallestScreenWidthDp(tempFullStage.mRootTaskInfo.token,
|
wct.setSmallestScreenWidthDp(tempFullStage.mRootTaskInfo.token,
|
||||||
SMALLEST_SCREEN_WIDTH_DP_UNDEFINED);
|
mRootTaskInfo.configuration.smallestScreenWidthDp);
|
||||||
dismissStage.dismiss(wct, false /* toTop */);
|
dismissStage.dismiss(wct, false /* toTop */);
|
||||||
}
|
}
|
||||||
mSyncQueue.queue(wct);
|
mSyncQueue.queue(wct);
|
||||||
mSyncQueue.runInSync(t -> {
|
mSyncQueue.runInSync(t -> {
|
||||||
t.setWindowCrop(mMainStage.mRootLeash, null)
|
t.setWindowCrop(mMainStage.mRootLeash, null)
|
||||||
.setWindowCrop(mSideStage.mRootLeash, null);
|
.setWindowCrop(mSideStage.mRootLeash, null);
|
||||||
|
t.setPosition(mMainStage.mRootLeash, 0, 0)
|
||||||
|
.setPosition(mSideStage.mRootLeash, 0, 0);
|
||||||
t.hide(mMainStage.mDimLayer).hide(mSideStage.mDimLayer);
|
t.hide(mMainStage.mDimLayer).hide(mSideStage.mDimLayer);
|
||||||
setDividerVisibility(false, t);
|
setDividerVisibility(false, t);
|
||||||
|
|
||||||
if (childrenToTop == null) {
|
// In this case, exit still under progress, fade out the split decor after first WCT
|
||||||
t.setPosition(mSideStage.mRootLeash, mTempRect1.left, mTempRect1.right);
|
// done and do remaining WCT after animation finished.
|
||||||
} else {
|
if (childrenToTop != null) {
|
||||||
// In this case, exit still under progress, fade out the split decor after first WCT
|
|
||||||
// done and do remaining WCT after animation finished.
|
|
||||||
childrenToTop.fadeOutDecor(() -> {
|
childrenToTop.fadeOutDecor(() -> {
|
||||||
WindowContainerTransaction finishedWCT = new WindowContainerTransaction();
|
WindowContainerTransaction finishedWCT = new WindowContainerTransaction();
|
||||||
mIsExiting = false;
|
mIsExiting = false;
|
||||||
childrenToTop.dismiss(finishedWCT, true /* toTop */);
|
childrenToTop.dismiss(finishedWCT, true /* toTop */);
|
||||||
finishedWCT.reorder(mRootTaskInfo.token, false /* toTop */);
|
finishedWCT.reorder(mRootTaskInfo.token, false /* toTop */);
|
||||||
finishedWCT.setForceTranslucent(mRootTaskInfo.token, true);
|
mTaskOrganizer.applyTransaction(finishedWCT);
|
||||||
finishedWCT.setBounds(mSideStage.mRootTaskInfo.token, mTempRect1);
|
|
||||||
mSyncQueue.queue(finishedWCT);
|
|
||||||
mSyncQueue.runInSync(at -> {
|
|
||||||
at.setPosition(mSideStage.mRootLeash, mTempRect1.left, mTempRect1.right);
|
|
||||||
});
|
|
||||||
onTransitionAnimationComplete();
|
onTransitionAnimationComplete();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -998,7 +996,6 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
mMainStage.activate(wct, true /* includingTopTask */);
|
mMainStage.activate(wct, true /* includingTopTask */);
|
||||||
updateWindowBounds(mSplitLayout, wct);
|
updateWindowBounds(mSplitLayout, wct);
|
||||||
wct.reorder(mRootTaskInfo.token, true);
|
wct.reorder(mRootTaskInfo.token, true);
|
||||||
wct.setForceTranslucent(mRootTaskInfo.token, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void finishEnterSplitScreen(SurfaceControl.Transaction t) {
|
void finishEnterSplitScreen(SurfaceControl.Transaction t) {
|
||||||
@@ -1224,13 +1221,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
// Make the stages adjacent to each other so they occlude what's behind them.
|
// Make the stages adjacent to each other so they occlude what's behind them.
|
||||||
wct.setAdjacentRoots(mMainStage.mRootTaskInfo.token, mSideStage.mRootTaskInfo.token);
|
wct.setAdjacentRoots(mMainStage.mRootTaskInfo.token, mSideStage.mRootTaskInfo.token);
|
||||||
wct.setLaunchAdjacentFlagRoot(mSideStage.mRootTaskInfo.token);
|
wct.setLaunchAdjacentFlagRoot(mSideStage.mRootTaskInfo.token);
|
||||||
wct.setForceTranslucent(mRootTaskInfo.token, true);
|
mTaskOrganizer.applyTransaction(wct);
|
||||||
mSplitLayout.getInvisibleBounds(mTempRect1);
|
|
||||||
wct.setBounds(mSideStage.mRootTaskInfo.token, mTempRect1);
|
|
||||||
mSyncQueue.queue(wct);
|
|
||||||
mSyncQueue.runInSync(t -> {
|
|
||||||
t.setPosition(mSideStage.mRootLeash, mTempRect1.left, mTempRect1.top);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onRootTaskVanished() {
|
private void onRootTaskVanished() {
|
||||||
@@ -1386,17 +1377,10 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
// TODO (b/238697912) : Add the validation to prevent entering non-recovered status
|
// TODO (b/238697912) : Add the validation to prevent entering non-recovered status
|
||||||
final WindowContainerTransaction wct = new WindowContainerTransaction();
|
final WindowContainerTransaction wct = new WindowContainerTransaction();
|
||||||
mSplitLayout.init();
|
mSplitLayout.init();
|
||||||
mSplitLayout.setDividerAtBorder(mSideStagePosition == SPLIT_POSITION_TOP_OR_LEFT);
|
prepareEnterSplitScreen(wct);
|
||||||
mMainStage.activate(wct, true /* includingTopTask */);
|
|
||||||
updateWindowBounds(mSplitLayout, wct);
|
|
||||||
wct.reorder(mRootTaskInfo.token, true);
|
|
||||||
wct.setForceTranslucent(mRootTaskInfo.token, false);
|
|
||||||
mSyncQueue.queue(wct);
|
mSyncQueue.queue(wct);
|
||||||
mSyncQueue.runInSync(t -> {
|
mSyncQueue.runInSync(t ->
|
||||||
updateSurfaceBounds(mSplitLayout, t, false /* applyResizingOffset */);
|
updateSurfaceBounds(mSplitLayout, t, false /* applyResizingOffset */));
|
||||||
|
|
||||||
mSplitLayout.flingDividerToCenter();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
if (mMainStageListener.mHasChildren && mSideStageListener.mHasChildren) {
|
if (mMainStageListener.mHasChildren && mSideStageListener.mHasChildren) {
|
||||||
mShouldUpdateRecents = true;
|
mShouldUpdateRecents = true;
|
||||||
@@ -1838,7 +1822,6 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
// properly for the animation itself.
|
// properly for the animation itself.
|
||||||
mSplitLayout.release();
|
mSplitLayout.release();
|
||||||
mSplitLayout.resetDividerPosition();
|
mSplitLayout.resetDividerPosition();
|
||||||
mSideStagePosition = SPLIT_POSITION_BOTTOM_OR_RIGHT;
|
|
||||||
mTopStageAfterFoldDismiss = STAGE_TYPE_UNDEFINED;
|
mTopStageAfterFoldDismiss = STAGE_TYPE_UNDEFINED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -159,8 +159,7 @@ public class SplitLayoutTests extends ShellTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void waitDividerFlingFinished() {
|
private void waitDividerFlingFinished() {
|
||||||
verify(mSplitLayout).flingDividePosition(anyInt(), anyInt(), anyInt(),
|
verify(mSplitLayout).flingDividePosition(anyInt(), anyInt(), mRunnableCaptor.capture());
|
||||||
mRunnableCaptor.capture());
|
|
||||||
mRunnableCaptor.getValue().run();
|
mRunnableCaptor.getValue().run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user