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

Commit d842bdb9 authored by Yining Liu's avatar Yining Liu Committed by Android (Google) Code Review
Browse files

Merge changes I4bd2bc4c,I2ccb344a into main

* changes:
  Fix wrong notification content alpha
  Clean up dead code from SwipeHelper
parents c09ee07c 9f32d37a
Loading
Loading
Loading
Loading
+29 −31
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
import com.android.systemui.res.R;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.shared.NotificationContentAlphaOptimization;
import com.android.wm.shell.animation.FlingAnimationUtils;
import com.android.wm.shell.shared.animation.PhysicsAnimator;
import com.android.wm.shell.shared.animation.PhysicsAnimator.SpringConfig;
@@ -63,13 +64,6 @@ import java.util.function.Consumer;
public class SwipeHelper implements Gefingerpoken, Dumpable {
    static final String TAG = "com.android.systemui.SwipeHelper";
    private static final boolean DEBUG_INVALIDATE = false;
    private static final boolean CONSTRAIN_SWIPE = true;
    private static final boolean FADE_OUT_DURING_SWIPE = true;
    private static final boolean DISMISS_IF_SWIPED_FAR_ENOUGH = true;

    public static final int X = 0;
    public static final int Y = 1;

    private static final float SWIPE_ESCAPE_VELOCITY = 500f; // dp/sec
    private static final int DEFAULT_ESCAPE_ANIMATION_DURATION = 200; // ms
    private static final int MAX_ESCAPE_ANIMATION_DURATION = 400; // ms
@@ -171,10 +165,6 @@ public class SwipeHelper implements Gefingerpoken, Dumpable {
        mPagingTouchSlop = pagingTouchSlop;
    }

    public void setDisableHardwareLayers(boolean disableHwLayers) {
        mDisableHwLayers = disableHwLayers;
    }

    private float getPos(MotionEvent ev) {
        return ev.getX();
    }
@@ -253,14 +243,15 @@ public class SwipeHelper implements Gefingerpoken, Dumpable {
            float translation) {
        float swipeProgress = getSwipeProgressForOffset(animView, translation);
        if (!mCallback.updateSwipeProgress(animView, dismissable, swipeProgress)) {
            if (FADE_OUT_DURING_SWIPE && dismissable) {
                if (!mDisableHwLayers) {
            if (dismissable
                    || (NotificationContentAlphaOptimization.isEnabled() && translation == 0)) {
                // We need to reset the content alpha even when the view is not dismissible (eg.
                //  when Guts is visible)
                if (swipeProgress != 0f && swipeProgress != 1f) {
                    animView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
                } else {
                    animView.setLayerType(View.LAYER_TYPE_NONE, null);
                }
                }
                updateSwipeProgressAlpha(animView, getSwipeAlpha(swipeProgress));
            }
        }
@@ -436,9 +427,7 @@ public class SwipeHelper implements Gefingerpoken, Dumpable {
            duration = fixedDuration;
        }

        if (!mDisableHwLayers) {
        animView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
        }
        AnimatorUpdateListener updateListener = new AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
@@ -493,9 +482,7 @@ public class SwipeHelper implements Gefingerpoken, Dumpable {
                if (endAction != null) {
                    endAction.accept(mCancelled);
                }
                if (!mDisableHwLayers) {
                animView.setLayerType(View.LAYER_TYPE_NONE, null);
                }
                onDismissChildWithAnimationFinished();
            }
        });
@@ -612,7 +599,11 @@ public class SwipeHelper implements Gefingerpoken, Dumpable {
     * view is being animated to dismiss or snap.
     */
    public void onTranslationUpdate(View animView, float value, boolean canBeDismissed) {
        updateSwipeProgressFromOffset(animView, canBeDismissed, value);
        updateSwipeProgressFromOffset(
                animView,
                /* dismissable= */ canBeDismissed,
                /* translation= */ value
        );
    }

    private void snapChildInstantly(final View view) {
@@ -689,7 +680,7 @@ public class SwipeHelper implements Gefingerpoken, Dumpable {
                    } else {
                        // don't let items that can't be dismissed be dragged more than
                        // maxScrollDistance
                        if (CONSTRAIN_SWIPE && !mCallback.canChildBeDismissedInDirection(
                        if (!mCallback.canChildBeDismissedInDirection(
                                mTouchedView,
                                delta > 0)) {
                            float size = getSize(mTouchedView);
@@ -761,8 +752,7 @@ public class SwipeHelper implements Gefingerpoken, Dumpable {

    protected boolean swipedFarEnough() {
        float translation = getTranslation(mTouchedView);
        return DISMISS_IF_SWIPED_FAR_ENOUGH
                && Math.abs(translation) > SWIPED_FAR_ENOUGH_SIZE_FRACTION * getSize(
        return Math.abs(translation) > SWIPED_FAR_ENOUGH_SIZE_FRACTION * getSize(
                mTouchedView);
    }

@@ -822,9 +812,18 @@ public class SwipeHelper implements Gefingerpoken, Dumpable {
    }

    public void forceResetSwipeState(@NonNull View view) {
        if (view.getTranslationX() == 0) return;
        if (view.getTranslationX() == 0
                && (!NotificationContentAlphaOptimization.isEnabled() || view.getAlpha() == 1f)
        ) {
            // Don't do anything when translation is 0 and alpha is 1
            return;
        }
        setTranslation(view, 0);
        updateSwipeProgressFromOffset(view, /* dismissable= */ true, 0);
        updateSwipeProgressFromOffset(
                view,
                /* dismissable= */ true,
                /* translation= */ 0
        );
    }

    /** This method resets the swipe state, and if `resetAll` is true, also resets the snap state */
@@ -893,7 +892,6 @@ public class SwipeHelper implements Gefingerpoken, Dumpable {
        pw.append("mTranslation=").println(mTranslation);
        pw.append("mCanCurrViewBeDimissed=").println(mCanCurrViewBeDimissed);
        pw.append("mMenuRowIntercepting=").println(mMenuRowIntercepting);
        pw.append("mDisableHwLayers=").println(mDisableHwLayers);
        pw.append("mDismissPendingMap: ").println(mDismissPendingMap.size());
        if (!mDismissPendingMap.isEmpty()) {
            mDismissPendingMap.forEach((view, animator) -> {
+17 −1
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import static org.mockito.Mockito.when;
import android.animation.Animator;
import android.animation.ValueAnimator.AnimatorUpdateListener;
import android.os.Handler;
import android.platform.test.annotations.EnableFlags;
import android.service.notification.StatusBarNotification;
import android.testing.TestableLooper;
import android.view.MotionEvent;
@@ -52,6 +53,7 @@ import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper.SnoozeOption;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.shared.NotificationContentAlphaOptimization;

import org.junit.Before;
import org.junit.Rule;
@@ -672,16 +674,30 @@ public class NotificationSwipeHelperTest extends SysuiTestCase {
    }

    @Test
    public void testForceResetSwipeStateDoesNothingIfTranslationIsZero() {
    public void testForceResetSwipeStateDoesNothingIfTranslationIsZeroAndAlphaIsOne() {
        doReturn(FAKE_ROW_WIDTH).when(mNotificationRow).getMeasuredWidth();
        doReturn(0f).when(mNotificationRow).getTranslationX();
        doReturn(1f).when(mNotificationRow).getAlpha();

        mSwipeHelper.forceResetSwipeState(mNotificationRow);

        verify(mNotificationRow).getTranslationX();
        verify(mNotificationRow).getAlpha();
        verifyNoMoreInteractions(mNotificationRow);
    }

    @Test
    @EnableFlags(NotificationContentAlphaOptimization.FLAG_NAME)
    public void testForceResetSwipeStateResetsAlphaIfTranslationIsZeroAndAlphaNotOne() {
        doReturn(FAKE_ROW_WIDTH).when(mNotificationRow).getMeasuredWidth();
        doReturn(0f).when(mNotificationRow).getTranslationX();
        doReturn(0.5f).when(mNotificationRow).getAlpha();

        mSwipeHelper.forceResetSwipeState(mNotificationRow);

        verify(mNotificationRow).setContentAlpha(eq(1f));
    }

    @Test
    public void testForceResetSwipeStateResetsTranslationAndAlpha() {
        doReturn(FAKE_ROW_WIDTH).when(mNotificationRow).getMeasuredWidth();