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

Commit 30637e41 authored by dongwan0605.kim's avatar dongwan0605.kim Committed by Mady Mellor
Browse files

Fix to snap notification view back when not clearable while updating

When a notification is being removed by swiping action,
actual removing will be performed after the swiping animation ends.
And also, it is same when removing notifications with <Clear all> button.
The actual removing will be performed after collapsing of status bar.
But before actual removing, the notification flags can be updated
to not clearable, and then the notification view can be remain
out of display by X-translation animation.

Therefore, fix to snap the notification view back when updating
if it is not clearable and need to be come back.

Change-Id: I005a9a8ac82bb513a47b5b8afc430bbe4880b52e
parent 466b702c
Loading
Loading
Loading
Loading
+49 −1
Original line number Diff line number Diff line
@@ -34,6 +34,8 @@ import android.view.accessibility.AccessibilityEvent;
import com.android.systemui.classifier.FalsingManager;
import com.android.systemui.statusbar.FlingAnimationUtils;

import java.util.HashMap;

public class SwipeHelper implements Gefingerpoken {
    static final String TAG = "com.android.systemui.SwipeHelper";
    private static final boolean DEBUG = false;
@@ -70,6 +72,7 @@ public class SwipeHelper implements Gefingerpoken {
    private float mInitialTouchPos;
    private float mPerpendicularInitialTouchPos;
    private boolean mDragging;
    private boolean mSnappingChild;
    private View mCurrView;
    private boolean mCanCurrViewBeDimissed;
    private float mDensityScale;
@@ -85,6 +88,8 @@ public class SwipeHelper implements Gefingerpoken {
    private boolean mTouchAboveFalsingThreshold;
    private boolean mDisableHwLayers;

    private HashMap<View, Animator> mDismissPendingMap = new HashMap<>();

    public SwipeHelper(int swipeDirection, Callback callback, Context context) {
        mCallback = callback;
        mHandler = new Handler();
@@ -252,6 +257,7 @@ public class SwipeHelper implements Gefingerpoken {
            case MotionEvent.ACTION_DOWN:
                mTouchAboveFalsingThreshold = false;
                mDragging = false;
                mSnappingChild = false;
                mLongPressSent = false;
                mVelocityTracker.clear();
                mCurrView = mCallback.getChildAtPosition(ev);
@@ -391,9 +397,18 @@ public class SwipeHelper implements Gefingerpoken {
            anim.setStartDelay(delay);
        }
        anim.addListener(new AnimatorListenerAdapter() {
            private boolean mCancelled;

            public void onAnimationCancel(Animator animation) {
                mCancelled = true;
            }

            public void onAnimationEnd(Animator animation) {
                updateSwipeProgressFromOffset(animView, canBeDismissed);
                mDismissPendingMap.remove(animView);
                if (!mCancelled) {
                    mCallback.onChildDismissed(animView);
                }
                if (endAction != null) {
                    endAction.run();
                }
@@ -402,7 +417,9 @@ public class SwipeHelper implements Gefingerpoken {
                }
            }
        });

        prepareDismissAnimation(animView, anim);
        mDismissPendingMap.put(animView, anim);
        anim.start();
    }

@@ -429,11 +446,13 @@ public class SwipeHelper implements Gefingerpoken {
        anim.setDuration(duration);
        anim.addListener(new AnimatorListenerAdapter() {
            public void onAnimationEnd(Animator animator) {
                mSnappingChild = false;
                updateSwipeProgressFromOffset(animView, canBeDismissed);
                mCallback.onChildSnappedBack(animView, targetLeft);
            }
        });
        prepareSnapBackAnimation(animView, anim);
        mSnappingChild = true;
        anim.start();
    }

@@ -466,6 +485,33 @@ public class SwipeHelper implements Gefingerpoken {
        updateSwipeProgressFromOffset(animView, canBeDismissed);
    }

    private void snapChildInstantly(final View view) {
        final boolean canAnimViewBeDismissed = mCallback.canChildBeDismissed(view);
        setTranslation(view, 0);
        updateSwipeProgressFromOffset(view, canAnimViewBeDismissed);
    }

    public void snapChildIfNeeded(final View view, boolean animate) {
        if ((mDragging && mCurrView == view) || mSnappingChild) {
            return;
        }
        boolean needToSnap = false;
        Animator dismissPendingAnim = mDismissPendingMap.get(view);
        if (dismissPendingAnim != null) {
            needToSnap = true;
            dismissPendingAnim.cancel();
        } else if (getTranslation(view) != 0) {
            needToSnap = true;
        }
        if (needToSnap) {
            if (animate) {
                snapChild(view, 0 /* targetLeft */, 0.0f /* velocity */);
            } else {
                snapChildInstantly(view);
            }
        }
    }

    public boolean onTouchEvent(MotionEvent ev) {
        if (mLongPressSent) {
            return true;
@@ -532,7 +578,9 @@ public class SwipeHelper implements Gefingerpoken {
                        mCallback.onDragCancelled(mCurrView);
                        snapChild(mCurrView, 0 /* leftTarget */, velocity);
                    }
                    mCurrView = null;
                }
                mDragging = false;
                break;
        }
        return true;
+6 −0
Original line number Diff line number Diff line
@@ -2160,6 +2160,12 @@ public abstract class BaseStatusBar extends SystemUI implements
        // swipe-dismissable)
        bindVetoButtonClickListener(entry.row, notification);

        if (!notification.isClearable()) {
            // The user may have performed a dismiss action on the notification, since it's
            // not clearable we should snap it back.
            mStackScroller.snapViewIfNeeded(entry.row);
        }

        if (DEBUG) {
            // Is this for you?
            boolean isForCurrentUser = isNotificationForCurrentProfiles(notification);
+5 −0
Original line number Diff line number Diff line
@@ -943,6 +943,11 @@ public class NotificationStackScrollLayout extends ViewGroup
        mSwipeHelper.dismissChild(child, 0, endRunnable, delay, true, duration);
    }

    public void snapViewIfNeeded(View child) {
        boolean animate = mIsExpanded || isPinnedHeadsUp(child);
        mSwipeHelper.snapChildIfNeeded(child, animate);
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        boolean isCancelOrUp = ev.getActionMasked() == MotionEvent.ACTION_CANCEL