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

Commit d389823e authored by András Kurucz's avatar András Kurucz
Browse files

Cleanup in ExpandableNotificationRowTest

After adding some new test cases to ExpandableNotificationRowTest we
have noticed an increasing number of leaks of ExpandableNotificationRow.

How did this happen:
 - Mockito was holding onto some ExpandableNotificationRow instances and resetting the inline mocks didn't help to release them
 - NotificationTestHelper has a mock StatusBarStateController
 - NotificationTestHelper creates a real HeadsUpManagerPhone passing in
   the mock StatusBarStateController
 - HeadsUpManagerPhone sets a listener on the mock StatusBarStateController
 - that listener holds onto a NotificationEntry
 - that entry has an ExpandableNotificationRow

This CL:
 - uses a mock HeadsUpManagerPhone
 - removes some unnecessary ExpandableNotificationRow instances from ExpandableNotificationRowTest

Fixes: 265135790
Test: create heap dumps using com.android.systemui.MemoryTrackingTestCase and compare them with go/ahat
Test: atest ExpandableNotificationRowTest
Test: atest SystemUITests

Change-Id: I314a1f6e59f095f8cc6018e3d65bf90bd9cd4a75
parent 16a472fa
Loading
Loading
Loading
Loading
+211 −173

File changed.

Preview size limit exceeded, changes collapsed.

+3 −22
Original line number Diff line number Diff line
@@ -40,7 +40,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.LauncherApps;
import android.graphics.drawable.Icon;
import android.os.Handler;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
import android.testing.TestableLooper;
@@ -49,7 +48,6 @@ import android.view.LayoutInflater;
import android.widget.RemoteViews;

import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.UiEventLogger;
import com.android.systemui.TestableDependency;
import com.android.systemui.classifier.FalsingCollectorFake;
import com.android.systemui.classifier.FalsingManagerFake;
@@ -57,7 +55,6 @@ import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.media.controls.util.MediaFeatureFlag;
import com.android.systemui.media.dialog.MediaOutputDialogFactory;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.shade.ShadeExpansionStateManager;
import com.android.systemui.statusbar.NotificationMediaManager;
import com.android.systemui.statusbar.NotificationRemoteInputManager;
import com.android.systemui.statusbar.NotificationShadeWindowController;
@@ -68,7 +65,6 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider;
import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManager;
import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager;
import com.android.systemui.statusbar.notification.icon.IconBuilder;
@@ -77,11 +73,8 @@ import com.android.systemui.statusbar.notification.people.PeopleNotificationIden
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow.ExpandableNotificationRowLogger;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow.OnExpandClickListener;
import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationFlag;
import com.android.systemui.statusbar.phone.ConfigurationControllerImpl;
import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
import com.android.systemui.statusbar.policy.HeadsUpManagerLogger;
import com.android.systemui.statusbar.policy.InflatedSmartReplyState;
import com.android.systemui.statusbar.policy.InflatedSmartReplyViewHolder;
import com.android.systemui.statusbar.policy.SmartReplyConstants;
@@ -121,12 +114,12 @@ public class NotificationTestHelper {
    private final GroupMembershipManager mGroupMembershipManager;
    private final GroupExpansionManager mGroupExpansionManager;
    private ExpandableNotificationRow mRow;
    private HeadsUpManagerPhone mHeadsUpManager;
    private final HeadsUpManagerPhone mHeadsUpManager;
    private final NotifBindPipeline mBindPipeline;
    private final NotifCollectionListener mBindPipelineEntryListener;
    private final RowContentBindStage mBindStage;
    private final IconManager mIconManager;
    private StatusBarStateController mStatusBarStateController;
    private final StatusBarStateController mStatusBarStateController;
    private final PeopleNotificationIdentifier mPeopleNotificationIdentifier;
    public final OnUserInteractionCallback mOnUserInteractionCallback;
    public final Runnable mFutureDismissalRunnable;
@@ -146,19 +139,7 @@ public class NotificationTestHelper {
        mStatusBarStateController = mock(StatusBarStateController.class);
        mGroupMembershipManager = mock(GroupMembershipManager.class);
        mGroupExpansionManager = mock(GroupExpansionManager.class);
        mHeadsUpManager = new HeadsUpManagerPhone(
                mContext,
                mock(HeadsUpManagerLogger.class),
                mStatusBarStateController,
                mock(KeyguardBypassController.class),
                mock(GroupMembershipManager.class),
                mock(VisualStabilityProvider.class),
                mock(ConfigurationControllerImpl.class),
                new Handler(mTestLooper.getLooper()),
                mock(AccessibilityManagerWrapper.class),
                mock(UiEventLogger.class),
                mock(ShadeExpansionStateManager.class)
        );
        mHeadsUpManager = mock(HeadsUpManagerPhone.class);
        mIconManager = new IconManager(
                mock(CommonNotifCollection.class),
                mock(LauncherApps.class),