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

Commit f81ad4b9 authored by Selim Cinek's avatar Selim Cinek Committed by Android (Google) Code Review
Browse files

Merge "Fixed that views could be stuck transiently at times" into pi-dev

parents c46279aa 9dd0d04e
Loading
Loading
Loading
Loading
+9 −12
Original line number Diff line number Diff line
@@ -292,7 +292,7 @@ public class NotificationStackScrollLayout extends ViewGroup
    private int[] mTempInt2 = new int[2];
    private boolean mGenerateChildOrderChangedEvent;
    private HashSet<Runnable> mAnimationFinishedRunnables = new HashSet<>();
    private HashSet<View> mClearOverlayViewsWhenFinished = new HashSet<>();
    private HashSet<ExpandableView> mClearTransientViewsWhenFinished = new HashSet<>();
    private HashSet<Pair<ExpandableNotificationRow, Boolean>> mHeadsUpChangeAnimations
            = new HashSet<>();
    private HeadsUpManagerPhone mHeadsUpManager;
@@ -2831,8 +2831,8 @@ public class NotificationStackScrollLayout extends ViewGroup
            return false;
        }
        if (isClickedHeadsUp(child)) {
            // An animation is already running, add it to the Overlay
            mClearOverlayViewsWhenFinished.add(child);
            // An animation is already running, add it transiently
            mClearTransientViewsWhenFinished.add((ExpandableView) child);
            return true;
        }
        if (mIsExpanded && mAnimationsEnabled && !isChildInInvisibleGroup(child)) {
@@ -3622,7 +3622,7 @@ public class NotificationStackScrollLayout extends ViewGroup
    }

    private void clearTemporaryViews() {
        // lets make sure nothing is in the overlay / transient anymore
        // lets make sure nothing is transient anymore
        clearTemporaryViewsInGroup(this);
        for (int i = 0; i < getChildCount(); i++) {
            ExpandableView child = (ExpandableView) getChildAt(i);
@@ -3637,9 +3637,6 @@ public class NotificationStackScrollLayout extends ViewGroup
        while (viewGroup != null && viewGroup.getTransientViewCount() != 0) {
            viewGroup.removeTransientView(viewGroup.getTransientView(0));
        }
        if (viewGroup != null) {
            viewGroup.getOverlay().clear();
        }
    }

    public void onPanelTrackingStarted() {
@@ -3747,7 +3744,7 @@ public class NotificationStackScrollLayout extends ViewGroup
        setAnimationRunning(false);
        requestChildrenUpdate();
        runAnimationFinishedRunnables();
        clearViewOverlays();
        clearTransient();
        clearHeadsUpDisappearRunning();
    }

@@ -3766,11 +3763,11 @@ public class NotificationStackScrollLayout extends ViewGroup
        }
    }

    private void clearViewOverlays() {
        for (View view : mClearOverlayViewsWhenFinished) {
            StackStateAnimator.removeFromOverlay(view);
    private void clearTransient() {
        for (ExpandableView view : mClearTransientViewsWhenFinished) {
            StackStateAnimator.removeTransientView(view);
        }
        mClearOverlayViewsWhenFinished.clear();
        mClearTransientViewsWhenFinished.clear();
    }

    private void runAnimationFinishedRunnables() {
+5 −17
Original line number Diff line number Diff line
@@ -419,9 +419,6 @@ public class StackStateAnimator {
                }, null);
            } else if (event.animationType ==
                NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_REMOVE_SWIPED_OUT) {
                // A race condition can trigger the view to be added to the overlay even though
                // it was fully swiped out. So let's remove it
                mHostLayout.getOverlay().remove(changingView);
                if (Math.abs(changingView.getTranslation()) == changingView.getWidth()
                        && changingView.getTransientContainer() != null) {
                    changingView.getTransientContainer().removeTransientView(changingView);
@@ -469,8 +466,9 @@ public class StackStateAnimator {
                        ? ANIMATION_DELAY_HEADS_UP_CLICKED
                        : 0;
                if (changingView.getParent() == null) {
                    // This notification was actually removed, so we need to add it to the overlay
                    mHostLayout.getOverlay().add(changingView);
                    // This notification was actually removed, so we need to add it transiently
                    mHostLayout.addTransientView(changingView, 0);
                    changingView.setTransientContainer(mHostLayout);
                    mTmpState.initFrom(changingView);
                    mTmpState.yTranslation = 0;
                    // We temporarily enable Y animations, the real filter will be combined
@@ -479,10 +477,7 @@ public class StackStateAnimator {
                    mAnimationProperties.delay = extraDelay + ANIMATION_DELAY_HEADS_UP;
                    mAnimationProperties.duration = ANIMATION_DURATION_HEADS_UP_DISAPPEAR;
                    mTmpState.animateTo(changingView, mAnimationProperties);
                    endRunnable = () -> {
                        // remove the temporary overlay
                        removeFromOverlay(changingView);
                    };
                    endRunnable = () -> removeTransientView(changingView);
                }
                float targetLocation = 0;
                boolean needsAnimation = true;
@@ -517,19 +512,12 @@ public class StackStateAnimator {
        }
    }

    private static void removeTransientView(ExpandableView viewToRemove) {
    public static void removeTransientView(ExpandableView viewToRemove) {
        if (viewToRemove.getTransientContainer() != null) {
            viewToRemove.getTransientContainer().removeTransientView(viewToRemove);
        }
    }

    public static void removeFromOverlay(View changingView) {
        ViewGroup parent = (ViewGroup) changingView.getParent();
        if (parent != null) {
            parent.removeView(changingView);
        }
    }

    public void animateOverScrollToAmount(float targetAmount, final boolean onTop,
            final boolean isRubberbanded) {
        final float startOverScrollAmount = mHostLayout.getCurrentOverScrollAmount(onTop);