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

Commit 34958fa2 authored by Mady Mellor's avatar Mady Mellor
Browse files

Fix inline controls from being swipeable

Currently you can swipe / translate inline controls, this
should not be possible. This CL fixes that.

Bug: 22451710
Change-Id: I3e048dce7df6d44ce80ee79bd449973bde0bc222
parent 60b7bcc6
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -144,7 +144,9 @@ public class SwipeHelper implements Gefingerpoken {
    protected Animator getViewTranslationAnimator(View v, float target,
            AnimatorUpdateListener listener) {
        ObjectAnimator anim = createTranslationAnimation(v, target);
        if (listener != null) {
            anim.addUpdateListener(listener);
        }
        return anim;
    }

@@ -370,6 +372,9 @@ public class SwipeHelper implements Gefingerpoken {
        };

        Animator anim = getViewTranslationAnimator(animView, newPos, updateListener);
        if (anim == null) {
            return;
        }
        if (useAccelerateInterpolator) {
            anim.setInterpolator(Interpolators.FAST_OUT_LINEAR_IN);
        } else {
@@ -411,6 +416,9 @@ public class SwipeHelper implements Gefingerpoken {
        };

        Animator anim = getViewTranslationAnimator(animView, targetLeft, updateListener);
        if (anim == null) {
            return;
        }
        int duration = SNAP_ANIM_LEN;
        anim.setDuration(duration);
        anim.addListener(new AnimatorListenerAdapter() {
+53 −7
Original line number Diff line number Diff line
@@ -684,7 +684,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
        mTranslateableViews.remove(mGutsStub);
    }

    public void setTranslationForOutline(float translationX) {
    private void setTranslationForOutline(float translationX) {
        setOutlineRect(false, translationX, getTop(), getRight() + translationX, getBottom());
    }

@@ -704,6 +704,46 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
        if (mTranslateAnim != null) {
            mTranslateAnim.cancel();
        }
        mTranslateAnim = (AnimatorSet) getTranslateViewAnimator(leftTarget,
                null /* updateListener */);
        if (mTranslateAnim != null) {
            mTranslateAnim.start();
        }
    }

    @Override
    public void setTranslation(float translationX) {
        if (areGutsExposed()) {
            // Don't translate if guts are showing.
            return;
        }
        // Translate the group of views
        for (int i = 0; i < mTranslateableViews.size(); i++) {
            if (mTranslateableViews.get(i) != null) {
                mTranslateableViews.get(i).setTranslationX(translationX);
            }
        }
        setTranslationForOutline(translationX);
        if (mSettingsIconRow != null) {
            mSettingsIconRow.updateSettingsIcons(translationX, getMeasuredWidth());
        }
    }

    @Override
    public float getTranslation() {
        if (mTranslateableViews != null && mTranslateableViews.size() > 0) {
            // All of the views in the list should have same translation, just use first one.
            return mTranslateableViews.get(0).getTranslationX();
        }
        return 0;
    }

    public Animator getTranslateViewAnimator(final float leftTarget,
            AnimatorUpdateListener listener) {
        if (areGutsExposed()) {
            // No translation if guts are exposed.
            return null;
        }
        AnimatorSet set = new AnimatorSet();
        if (mTranslateableViews != null) {
            for (int i = 0; i < mTranslateableViews.size(); i++) {
@@ -715,8 +755,15 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
                        @Override
                        public void onAnimationUpdate(ValueAnimator animation) {
                            setTranslationForOutline((float) animation.getAnimatedValue());
                            if (mSettingsIconRow != null) {
                                mSettingsIconRow.updateSettingsIcons(
                                        (float) animation.getAnimatedValue(), getMeasuredWidth());
                            }
                        }
                    });
                    if (listener != null) {
                        translateAnim.addUpdateListener(listener);
                    }
                }
                translateAnim.addListener(new AnimatorListenerAdapter() {
                    @Override
@@ -730,8 +777,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
                set.play(translateAnim);
            }
        }
        mTranslateAnim = set;
        set.start();
        return set;
    }

    public float getSpaceForGear() {
@@ -748,10 +794,6 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
        return mSettingsIconRow;
    }

    public ArrayList<View> getContentViews() {
        return mTranslateableViews;
    }

    public void inflateGuts() {
        if (mGuts == null) {
            mGutsStub.inflate();
@@ -1169,6 +1211,10 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
        return mMaxExpandHeight;
    }

    public boolean areGutsExposed() {
        return (mGuts != null && mGuts.areGutsExposed());
    }

    @Override
    public boolean isContentExpandable() {
        NotificationContentView showingLayout = getShowingLayout();
+14 −0
Original line number Diff line number Diff line
@@ -283,6 +283,20 @@ public abstract class ExpandableView extends FrameLayout {
    public void setBelowSpeedBump(boolean below) {
    }

    /**
     * Sets the translation of the view.
     */
    public void setTranslation(float translation) {
        setTranslationX(translation);
    }

    /**
     * Gets the translation of the view.
     */
    public float getTranslation() {
        return getTranslationX();
    }

    public void onHeightReset() {
        if (mOnHeightChangedListener != null) {
            mOnHeightChangedListener.onReset(this);
+24 −75
Original line number Diff line number Diff line
@@ -734,6 +734,7 @@ public class NotificationStackScrollLayout extends ViewGroup

        if (targetLeft == 0 && mCurrIconRow != null) {
            mCurrIconRow.resetState();
            mCurrIconRow = null;
            if (mGearExposedView != null && mGearExposedView == mTranslatingParentView) {
                mGearExposedView = null;
            }
@@ -3399,7 +3400,6 @@ public class NotificationStackScrollLayout extends ViewGroup

        private static final long GEAR_SHOW_DELAY = 60;

        private ArrayList<View> mTranslatingViews = new ArrayList<>();
        private CheckForDrag mCheckForDrag;
        private Handler mHandler;
        private int mMoveState = MOVE_STATE_UNDEFINED;
@@ -3416,6 +3416,7 @@ public class NotificationStackScrollLayout extends ViewGroup

            // Reset check for drag gesture
            mCheckForDrag = null;
            mCurrIconRow = null;

            // Slide back any notifications that might be showing a gear
            resetExposedGearView();
@@ -3424,9 +3425,6 @@ public class NotificationStackScrollLayout extends ViewGroup
                // Set the listener for the current row's gear
                mCurrIconRow = ((ExpandableNotificationRow) currView).getSettingsRow();
                mCurrIconRow.setGearListener(NotificationStackScrollLayout.this);

                // And the translating children
                mTranslatingViews = ((ExpandableNotificationRow) currView).getContentViews();
            }
            mMoveState = MOVE_STATE_UNDEFINED;
        }
@@ -3440,15 +3438,12 @@ public class NotificationStackScrollLayout extends ViewGroup
            }
            mMoveState = newMoveState;

            if (view instanceof ExpandableNotificationRow) {
                ((ExpandableNotificationRow) view).setTranslationForOutline(translation);
                if (!isPinnedHeadsUp(view)) {
                    // Only show the gear if we're not a heads up view.
            final boolean gutsExposed = (view instanceof ExpandableNotificationRow)
                    && ((ExpandableNotificationRow) view).areGutsExposed();

            if (!isPinnedHeadsUp(view) && !gutsExposed) {
                // Only show the gear if we're not a heads up view and guts aren't exposed.
                checkForDrag();
                    if (mCurrIconRow != null) {
                        mCurrIconRow.updateSettingsIcons(translation, getSize(view));
                    }
                }
            }
        }

@@ -3471,12 +3466,12 @@ public class NotificationStackScrollLayout extends ViewGroup
                    (!fromLeft && absTrans >= snapBackThreshold * 0.4f
                            && absTrans <= notiThreshold);

            if (pastGear && !isPinnedHeadsUp(animView)) {
            if (pastGear && !isPinnedHeadsUp(animView)
                    && (animView instanceof ExpandableNotificationRow)) {
                // bouncity
                final float target = fromLeft ? snapBackThreshold : -snapBackThreshold;
                mGearExposedView = mTranslatingParentView;
                if (mGearDisplayedListener != null
                        && (animView instanceof ExpandableNotificationRow)) {
                if (mGearDisplayedListener != null) {
                    mGearDisplayedListener.onGearDisplayed((ExpandableNotificationRow) animView);
                }
                super.snapChild(animView, target, velocity);
@@ -3485,39 +3480,17 @@ public class NotificationStackScrollLayout extends ViewGroup
            }
        }

        @Override
        public void onTranslationUpdate(View animView, float value, boolean canBeDismissed) {
            if (mDismissAllInProgress) {
                // When dismissing all, we translate the entire view instead.
                super.onTranslationUpdate(animView, value, canBeDismissed);
                return;
            }
            if (animView instanceof ExpandableNotificationRow) {
                ((ExpandableNotificationRow) animView).setTranslationForOutline(value);
            }
            if (mCurrIconRow != null) {
                mCurrIconRow.updateSettingsIcons(value, getSize(animView));
            }
        }

        @Override
        public Animator getViewTranslationAnimator(View v, float target,
                AnimatorUpdateListener listener) {
            if (mDismissAllInProgress) {
                // When dismissing all, we translate the entire view instead.
                return super.getViewTranslationAnimator(v, target, listener);
            } else if (v instanceof ExpandableNotificationRow) {
                return ((ExpandableNotificationRow) v).getTranslateViewAnimator(target, listener);
            } else {
                return super.getViewTranslationAnimator(v, target, listener);
            }
            ArrayList<Animator> animators = new ArrayList<Animator>();
            for (int i = 0; i < mTranslatingViews.size(); i++) {
                ObjectAnimator anim = createTranslationAnimation(mTranslatingViews.get(i), target);
                animators.add(anim);
                if (i == 0 && listener != null) {
                    anim.addUpdateListener(listener);
                }
            }
            AnimatorSet set = new AnimatorSet();
            set.playTogether(animators);
            return set;
        }

        @Override
@@ -3525,13 +3498,8 @@ public class NotificationStackScrollLayout extends ViewGroup
            if (mDismissAllInProgress) {
                // When dismissing all, we translate the entire view instead.
                super.setTranslation(v, translate);
                return;
            }
            // Translate the group of views
            for (int i = 0; i < mTranslatingViews.size(); i++) {
                if (mTranslatingViews.get(i) != null) {
                    super.setTranslation(mTranslatingViews.get(i), translate);
                }
            } else {
                ((ExpandableView) v).setTranslation(translate);
            }
        }

@@ -3540,15 +3508,11 @@ public class NotificationStackScrollLayout extends ViewGroup
            if (mDismissAllInProgress) {
                // When dismissing all, we translate the entire view instead.
                return super.getTranslation(v);
            } else {
                return ((ExpandableView) v).getTranslation();
            }
            // All of the views in the list should have same translation, just use first one.
            if (mTranslatingViews.size() > 0) {
                return super.getTranslation(mTranslatingViews.get(0));
            }
            return 0;
        }


        /**
         * Returns the horizontal space in pixels required to display the gear behind a
         * notification.
@@ -3603,26 +3567,11 @@ public class NotificationStackScrollLayout extends ViewGroup
            final View prevGearExposedView = mGearExposedView;
            mGearExposedView = null;

            AnimatorListenerAdapter listener = new AnimatorListenerAdapter() {
                public void onAnimationEnd(Animator animator) {
                    if (prevGearExposedView instanceof ExpandableNotificationRow) {
                        ((ExpandableNotificationRow) prevGearExposedView).getSettingsRow()
                                .resetState();
                    }
            Animator anim = getViewTranslationAnimator(prevGearExposedView,
                    0 /* leftTarget */, null /* updateListener */);
            if (anim != null) {
                anim.start();
            }
            };
            AnimatorUpdateListener updateListener = new AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    if (prevGearExposedView instanceof ExpandableNotificationRow) {
                        ((ExpandableNotificationRow) prevGearExposedView)
                                .setTranslationForOutline((float) animation.getAnimatedValue());
                    }
                }
            };
            Animator set = getViewTranslationAnimator(prevGearExposedView, 0, updateListener);
            set.addListener(listener);
            set.start();
        }
    }