Merge "Avoid saving position before minimizing when in transition" into oc-mr1-dev
am: 33b1e1fe4d
Change-Id: Ic7c0ffeb7f295c4161d01d7ad1d0ae2eae6d9f85
This commit is contained in:
@@ -66,9 +66,7 @@ import com.android.systemui.recents.Recents;
|
||||
import com.android.systemui.recents.events.EventBus;
|
||||
import com.android.systemui.recents.events.activity.DockedTopTaskEvent;
|
||||
import com.android.systemui.recents.events.activity.RecentsActivityStartingEvent;
|
||||
import com.android.systemui.recents.events.activity.ToggleRecentsEvent;
|
||||
import com.android.systemui.recents.events.activity.UndockingTaskEvent;
|
||||
import com.android.systemui.recents.events.ui.RecentsDrawnEvent;
|
||||
import com.android.systemui.recents.events.ui.RecentsGrowingEvent;
|
||||
import com.android.systemui.recents.misc.SystemServicesProxy;
|
||||
import com.android.systemui.stackdivider.events.StartedDragingEvent;
|
||||
@@ -124,7 +122,7 @@ public class DividerView extends FrameLayout implements OnTouchListener,
|
||||
private int mTouchSlop;
|
||||
private boolean mBackgroundLifted;
|
||||
private boolean mIsInMinimizeInteraction;
|
||||
private int mDividerPositionBeforeMinimized;
|
||||
private SnapTarget mSnapTargetBeforeMinimized;
|
||||
|
||||
private int mDividerInsets;
|
||||
private int mDisplayWidth;
|
||||
@@ -318,6 +316,12 @@ public class DividerView extends FrameLayout implements OnTouchListener,
|
||||
protected void onAttachedToWindow() {
|
||||
super.onAttachedToWindow();
|
||||
EventBus.getDefault().register(this);
|
||||
|
||||
// Save the current target if not minimized once attached to window
|
||||
if (mHomeStackResizable && mDockSide != WindowManager.DOCKED_INVALID
|
||||
&& !mIsInMinimizeInteraction) {
|
||||
saveSnapTargetBeforeMinimized(mSnapTargetBeforeMinimized);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -381,8 +385,10 @@ public class DividerView extends FrameLayout implements OnTouchListener,
|
||||
(isHorizontalDivision() ? mDisplayHeight : mDisplayWidth));
|
||||
mSnapAlgorithm = null;
|
||||
initializeSnapAlgorithm();
|
||||
mDividerPositionBeforeMinimized = mSnapAlgorithm.calculateNonDismissingSnapTarget(position)
|
||||
.position;
|
||||
|
||||
// Set the snap target before minimized but do not save until divider is attached and not
|
||||
// minimized because it does not know its minimized state yet.
|
||||
mSnapTargetBeforeMinimized = mSnapAlgorithm.calculateNonDismissingSnapTarget(position);
|
||||
}
|
||||
|
||||
public WindowManagerProxy getWindowManagerProxy() {
|
||||
@@ -601,6 +607,11 @@ public class DividerView extends FrameLayout implements OnTouchListener,
|
||||
mEntranceAnimationRunning = false;
|
||||
mExitAnimationRunning = false;
|
||||
EventBus.getDefault().send(new StoppedDragingEvent());
|
||||
|
||||
// Record last snap target the divider moved to
|
||||
if (mHomeStackResizable && !mIsInMinimizeInteraction) {
|
||||
saveSnapTargetBeforeMinimized(snapTarget);
|
||||
}
|
||||
};
|
||||
Runnable notCancelledEndAction = () -> {
|
||||
// Reset minimized divider position after unminimized state animation finishes
|
||||
@@ -629,15 +640,15 @@ public class DividerView extends FrameLayout implements OnTouchListener,
|
||||
delay = mSfChoreographer.getSurfaceFlingerOffsetMs();
|
||||
}
|
||||
if (delay == 0) {
|
||||
endAction.run();
|
||||
if (!mCancelled) {
|
||||
notCancelledEndAction.run();
|
||||
}
|
||||
endAction.run();
|
||||
} else {
|
||||
mHandler.postDelayed(endAction, delay);
|
||||
if (!mCancelled) {
|
||||
mHandler.postDelayed(notCancelledEndAction, delay);
|
||||
}
|
||||
mHandler.postDelayed(endAction, delay);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -744,12 +755,9 @@ public class DividerView extends FrameLayout implements OnTouchListener,
|
||||
if (mIsInMinimizeInteraction != minimized) {
|
||||
if (minimized) {
|
||||
mIsInMinimizeInteraction = true;
|
||||
int position = mMinimizedSnapAlgorithm.getMiddleTarget().position;
|
||||
resizeStack(position, position, mMinimizedSnapAlgorithm.getMiddleTarget());
|
||||
resizeStack(mMinimizedSnapAlgorithm.getMiddleTarget());
|
||||
} else {
|
||||
resizeStack(mDividerPositionBeforeMinimized, mDividerPositionBeforeMinimized,
|
||||
mSnapAlgorithm.calculateNonDismissingSnapTarget(
|
||||
mDividerPositionBeforeMinimized));
|
||||
resizeStack(mSnapTargetBeforeMinimized);
|
||||
mIsInMinimizeInteraction = false;
|
||||
}
|
||||
}
|
||||
@@ -786,20 +794,15 @@ public class DividerView extends FrameLayout implements OnTouchListener,
|
||||
mDockedStackMinimized = minimized;
|
||||
} else if (mDockedStackMinimized != minimized) {
|
||||
mIsInMinimizeInteraction = true;
|
||||
if (minimized && (mCurrentAnimator == null || !mCurrentAnimator.isRunning())
|
||||
&& (mDividerPositionBeforeMinimized <= 0 || !mAdjustedForIme)) {
|
||||
savePositionBeforeMinimized();
|
||||
}
|
||||
mMinimizedSnapAlgorithm = null;
|
||||
mDockedStackMinimized = minimized;
|
||||
initializeSnapAlgorithm();
|
||||
stopDragging(minimized
|
||||
? mDividerPositionBeforeMinimized
|
||||
? mSnapTargetBeforeMinimized.position
|
||||
: getCurrentPosition(),
|
||||
minimized
|
||||
? mMinimizedSnapAlgorithm.getMiddleTarget()
|
||||
: mSnapAlgorithm.calculateNonDismissingSnapTarget(
|
||||
mDividerPositionBeforeMinimized),
|
||||
: mSnapTargetBeforeMinimized,
|
||||
animDuration, Interpolators.FAST_OUT_SLOW_IN, 0);
|
||||
setAdjustedForIme(false, animDuration);
|
||||
}
|
||||
@@ -844,17 +847,11 @@ public class DividerView extends FrameLayout implements OnTouchListener,
|
||||
.setDuration(animDuration)
|
||||
.start();
|
||||
mAdjustedForIme = adjustedForIme;
|
||||
|
||||
// Only get new position if home stack is resizable, ime is open and not minimized
|
||||
// (including the animation)
|
||||
if (mHomeStackResizable && adjustedForIme && !mIsInMinimizeInteraction) {
|
||||
savePositionBeforeMinimized();
|
||||
}
|
||||
}
|
||||
|
||||
private void savePositionBeforeMinimized() {
|
||||
mDividerPositionBeforeMinimized = getCurrentPosition();
|
||||
mState.mRatioPositionBeforeMinimized = (float) mDividerPositionBeforeMinimized /
|
||||
private void saveSnapTargetBeforeMinimized(SnapTarget target) {
|
||||
mSnapTargetBeforeMinimized = target;
|
||||
mState.mRatioPositionBeforeMinimized = (float) target.position /
|
||||
(isHorizontalDivision() ? mDisplayHeight : mDisplayWidth);
|
||||
}
|
||||
|
||||
@@ -872,7 +869,6 @@ public class DividerView extends FrameLayout implements OnTouchListener,
|
||||
updateDisplayInfo();
|
||||
}
|
||||
|
||||
|
||||
public void notifyDockSideChanged(int newDockSide) {
|
||||
mDockSide = newDockSide;
|
||||
mMinimizedShadow.setDockSide(mDockSide);
|
||||
@@ -934,6 +930,10 @@ public class DividerView extends FrameLayout implements OnTouchListener,
|
||||
mSfChoreographer.scheduleAtSfVsync(mHandler, message);
|
||||
}
|
||||
|
||||
private void resizeStack(SnapTarget taskSnapTarget) {
|
||||
resizeStack(taskSnapTarget.position, taskSnapTarget.position, taskSnapTarget);
|
||||
}
|
||||
|
||||
public void resizeStack(int position, int taskPosition, SnapTarget taskSnapTarget) {
|
||||
if (mRemoved) {
|
||||
// This divider view has been removed so shouldn't have any additional influence.
|
||||
@@ -952,8 +952,9 @@ public class DividerView extends FrameLayout implements OnTouchListener,
|
||||
|
||||
mLastResizeRect.set(mDockedRect);
|
||||
if (mHomeStackResizable && mIsInMinimizeInteraction) {
|
||||
calculateBoundsForPosition(mDividerPositionBeforeMinimized, mDockSide, mDockedTaskRect);
|
||||
calculateBoundsForPosition(mDividerPositionBeforeMinimized,
|
||||
calculateBoundsForPosition(mSnapTargetBeforeMinimized.position, mDockSide,
|
||||
mDockedTaskRect);
|
||||
calculateBoundsForPosition(mSnapTargetBeforeMinimized.position,
|
||||
DockedDividerUtils.invertDockSide(mDockSide), mOtherTaskRect);
|
||||
mWindowManagerProxy.resizeDockedStack(mDockedRect, mDockedTaskRect, mDockedTaskRect,
|
||||
mOtherTaskRect, null);
|
||||
|
||||
Reference in New Issue
Block a user