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

Commit 95b4fde7 authored by Julia Reynolds's avatar Julia Reynolds Committed by Android (Google) Code Review
Browse files

Merge "Avoid reentrant pipeline run" into main

parents 51c0963d c3be7530
Loading
Loading
Loading
Loading
+10 −0
Original line number Original line Diff line number Diff line
@@ -1779,6 +1779,16 @@ flag {
    bug: "365064144"
    bug: "365064144"
}
}


flag {
    name: "notification_reentrant_dismiss"
    namespace: "systemui"
    description: "Posts to avoid a crashing reentrant pipeline run"
    bug: "328328054"
    metadata {
        purpose: PURPOSE_BUGFIX
      }
}

flag {
flag {
    name: "stoppable_fgs_system_app"
    name: "stoppable_fgs_system_app"
    namespace: "systemui"
    namespace: "systemui"
+11 −4
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.statusbar.notification.row;
import static android.app.Notification.Action.SEMANTIC_ACTION_MARK_CONVERSATION_AS_PRIORITY;
import static android.app.Notification.Action.SEMANTIC_ACTION_MARK_CONVERSATION_AS_PRIORITY;
import static android.service.notification.NotificationListenerService.REASON_CANCEL;
import static android.service.notification.NotificationListenerService.REASON_CANCEL;


import static com.android.systemui.flags.Flags.ENABLE_NOTIFICATIONS_SIMULATE_SLOW_MEASURE;
import static com.android.systemui.statusbar.notification.collection.NotificationEntry.DismissState.PARENT_DISMISSED;
import static com.android.systemui.statusbar.notification.collection.NotificationEntry.DismissState.PARENT_DISMISSED;
import static com.android.systemui.statusbar.notification.row.NotificationContentView.VISIBLE_TYPE_HEADSUP;
import static com.android.systemui.statusbar.notification.row.NotificationContentView.VISIBLE_TYPE_HEADSUP;
import static com.android.systemui.statusbar.policy.RemoteInputView.FOCUS_ANIMATION_MIN_SCALE;
import static com.android.systemui.statusbar.policy.RemoteInputView.FOCUS_ANIMATION_MIN_SCALE;
@@ -75,8 +76,8 @@ import com.android.internal.statusbar.IStatusBarService;
import com.android.internal.util.ContrastColorUtil;
import com.android.internal.util.ContrastColorUtil;
import com.android.internal.widget.CachingIconView;
import com.android.internal.widget.CachingIconView;
import com.android.internal.widget.CallLayout;
import com.android.internal.widget.CallLayout;
import com.android.systemui.Flags;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.flags.RefactorFlag;
import com.android.systemui.flags.RefactorFlag;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.PluginListener;
import com.android.systemui.plugins.PluginListener;
@@ -293,7 +294,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView


    private static boolean shouldSimulateSlowMeasure() {
    private static boolean shouldSimulateSlowMeasure() {
        return Compile.IS_DEBUG && RefactorFlag.forView(
        return Compile.IS_DEBUG && RefactorFlag.forView(
                Flags.ENABLE_NOTIFICATIONS_SIMULATE_SLOW_MEASURE).isEnabled();
                ENABLE_NOTIFICATIONS_SIMULATE_SLOW_MEASURE).isEnabled();
    }
    }


    private static final String SLOW_MEASURE_SIMULATE_DELAY_PROPERTY =
    private static final String SLOW_MEASURE_SIMULATE_DELAY_PROPERTY =
@@ -1679,10 +1680,16 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
        dismiss(fromAccessibility);
        dismiss(fromAccessibility);
        if (canEntryBeDismissed()) {
        if (canEntryBeDismissed()) {
            if (mOnUserInteractionCallback != null) {
            if (mOnUserInteractionCallback != null) {
                if (Flags.notificationReentrantDismiss()) {
                    Runnable futureDismissal = mOnUserInteractionCallback.registerFutureDismissal(
                            mEntry, REASON_CANCEL);
                    post(futureDismissal);
                } else {
                    mOnUserInteractionCallback.registerFutureDismissal(mEntry, REASON_CANCEL).run();
                    mOnUserInteractionCallback.registerFutureDismissal(mEntry, REASON_CANCEL).run();
                }
                }
            }
            }
        }
        }
    }


    @Override
    @Override
    public View getShelfTransformationTarget() {
    public View getShelfTransformationTarget() {
@@ -1986,7 +1993,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
        mColorUpdateLogger = colorUpdateLogger;
        mColorUpdateLogger = colorUpdateLogger;
        mDismissibilityProvider = dismissibilityProvider;
        mDismissibilityProvider = dismissibilityProvider;
        mFeatureFlags = featureFlags;
        mFeatureFlags = featureFlags;
        setHapticFeedbackEnabled(!com.android.systemui.Flags.msdlFeedback());
        setHapticFeedbackEnabled(!Flags.msdlFeedback());
    }
    }


    private void initDimens() {
    private void initDimens() {
+15 −0
Original line number Original line Diff line number Diff line
@@ -45,6 +45,7 @@ import android.graphics.drawable.AnimatedVectorDrawable;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Drawable;
import android.os.UserHandle;
import android.os.UserHandle;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.annotations.EnableFlags;
import android.testing.TestableLooper;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.testing.TestableLooper.RunWithLooper;
@@ -551,12 +552,26 @@ public class ExpandableNotificationRowTest extends SysuiTestCase {
    }
    }


    @Test
    @Test
    @DisableFlags(com.android.systemui.Flags.FLAG_NOTIFICATION_REENTRANT_DISMISS)
    public void testCanDismiss_immediately() throws Exception {
        ExpandableNotificationRow row =
                mNotificationTestHelper.createRow(mNotificationTestHelper.createNotification());
        when(mNotificationTestHelper.getDismissibilityProvider().isDismissable(row.getEntry()))
                .thenReturn(true);
        row.performDismiss(false);
        verify(mNotificationTestHelper.getOnUserInteractionCallback())
                .registerFutureDismissal(any(), anyInt());
    }

    @Test
    @EnableFlags(com.android.systemui.Flags.FLAG_NOTIFICATION_REENTRANT_DISMISS)
    public void testCanDismiss() throws Exception {
    public void testCanDismiss() throws Exception {
        ExpandableNotificationRow row =
        ExpandableNotificationRow row =
                mNotificationTestHelper.createRow(mNotificationTestHelper.createNotification());
                mNotificationTestHelper.createRow(mNotificationTestHelper.createNotification());
        when(mNotificationTestHelper.getDismissibilityProvider().isDismissable(row.getEntry()))
        when(mNotificationTestHelper.getDismissibilityProvider().isDismissable(row.getEntry()))
                .thenReturn(true);
                .thenReturn(true);
        row.performDismiss(false);
        row.performDismiss(false);
        TestableLooper.get(this).processAllMessages();
        verify(mNotificationTestHelper.getOnUserInteractionCallback())
        verify(mNotificationTestHelper.getOnUserInteractionCallback())
                .registerFutureDismissal(any(), anyInt());
                .registerFutureDismissal(any(), anyInt());
    }
    }