Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f42bf590 authored by Matthew Ng's avatar Matthew Ng Committed by android-build-merger
Browse files

Merge "Avoid saving position before minimizing when in transition" into oc-mr1-dev

am: 33b1e1fe

Change-Id: Ic7c0ffeb7f295c4161d01d7ad1d0ae2eae6d9f85
parents 0acb9df1 33b1e1fe
Loading
Loading
Loading
Loading
+32 −31
Original line number Diff line number Diff line
@@ -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);