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

Commit e4a15a4d authored by Jeff DeCew's avatar Jeff DeCew
Browse files

New Pipeline: Fix minimized notifications not appearing minimized.

* The bug was that the LowPriorityInflationHelper checks the parent after a delay to inflate an empty ExpandableNotificationRow, by which time the ListEntry's parent was cleared by the FinalizeFilter.  In order to solve this, we need to pass state into the inflation pipeline for this particular parameter.  I created the NotifInflater.Params class to hold this, and then shoehorned that class into the not-yet-modernized NotificationRowBinder interface/impl.
* Another bug I discovered when looking for params like this was that a ranking update (such as the addition of SmartReplies) would not result in reinflating the notification, because the system had no way to detect that a ranking update would affect the view itself.  This is why I added the NotifUiAdjustment class (copied, kotlinized, and tweaked to include the 'minimized' state from the NotificationUiAdjustment).

Fixes: 205360544
Test: atest SystemUITests
Change-Id: Ic1aa2dded98b14efe0219684aa754549d9d53d81
parent 0e570670
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@ import com.android.systemui.statusbar.notification.DynamicChildBindController;
import com.android.systemui.statusbar.notification.DynamicPrivacyController;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.inflation.LowPriorityInflationHelper;
import com.android.systemui.statusbar.notification.collection.legacy.LowPriorityInflationHelper;
import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy;
import com.android.systemui.statusbar.notification.collection.legacy.VisualStabilityManager;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
+1 −3
Original line number Diff line number Diff line
@@ -55,7 +55,7 @@ import com.android.systemui.statusbar.notification.DynamicPrivacyController;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotifCollection;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.inflation.LowPriorityInflationHelper;
import com.android.systemui.statusbar.notification.collection.legacy.LowPriorityInflationHelper;
import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy;
import com.android.systemui.statusbar.notification.collection.legacy.VisualStabilityManager;
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
@@ -73,8 +73,6 @@ import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallLogger;
import com.android.systemui.statusbar.policy.RemoteInputUriController;
import com.android.systemui.statusbar.window.StatusBarWindowController;
import com.android.systemui.statusbar.window.StatusBarWindowModule;
import com.android.systemui.statusbar.window.StatusBarWindowView;
import com.android.systemui.tracing.ProtoTracer;
import com.android.systemui.util.concurrency.DelayableExecutor;
import com.android.systemui.util.time.SystemClock;
+2 −2
Original line number Diff line number Diff line
@@ -638,7 +638,7 @@ public class NotificationEntryManager implements

        // Construct the expanded view.
        if (!mFeatureFlags.isNewNotifPipelineRenderingEnabled()) {
            mNotificationRowBinderLazy.get().inflateViews(entry, mInflationCallback);
            mNotificationRowBinderLazy.get().inflateViews(entry, null, mInflationCallback);
        }

        mPendingNotifications.put(key, entry);
@@ -695,7 +695,7 @@ public class NotificationEntryManager implements
        }

        if (!mFeatureFlags.isNewNotifPipelineRenderingEnabled()) {
            mNotificationRowBinderLazy.get().inflateViews(entry, mInflationCallback);
            mNotificationRowBinderLazy.get().inflateViews(entry, null, mInflationCallback);
        }

        updateNotifications("updateNotificationInternal");
+9 −15
Original line number Diff line number Diff line
@@ -16,7 +16,8 @@

package com.android.systemui.statusbar.notification.collection;

import com.android.internal.statusbar.IStatusBarService;
import androidx.annotation.NonNull;

import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.statusbar.notification.InflationException;
import com.android.systemui.statusbar.notification.collection.inflation.NotifInflater;
@@ -34,23 +35,13 @@ import javax.inject.Inject;
@SysUISingleton
public class NotifInflaterImpl implements NotifInflater {

    private final IStatusBarService mStatusBarService;
    private final NotifCollection mNotifCollection;
    private final NotifInflationErrorManager mNotifErrorManager;
    private final NotifPipeline mNotifPipeline;

    private NotificationRowBinderImpl mNotificationRowBinder;

    @Inject
    public NotifInflaterImpl(
            IStatusBarService statusBarService,
            NotifCollection notifCollection,
            NotifInflationErrorManager errorManager,
            NotifPipeline notifPipeline) {
        mStatusBarService = statusBarService;
        mNotifCollection = notifCollection;
    public NotifInflaterImpl(NotifInflationErrorManager errorManager) {
        mNotifErrorManager = errorManager;
        mNotifPipeline = notifPipeline;
    }

    /**
@@ -61,8 +52,9 @@ public class NotifInflaterImpl implements NotifInflater {
    }

    @Override
    public void rebindViews(NotificationEntry entry, InflationCallback callback) {
        inflateViews(entry, callback);
    public void rebindViews(@NonNull NotificationEntry entry, @NonNull Params params,
            @NonNull InflationCallback callback) {
        inflateViews(entry, params, callback);
    }

    /**
@@ -70,10 +62,12 @@ public class NotifInflaterImpl implements NotifInflater {
     * views are bound.
     */
    @Override
    public void inflateViews(NotificationEntry entry, InflationCallback callback) {
    public void inflateViews(@NonNull NotificationEntry entry, @NonNull Params params,
            @NonNull InflationCallback callback) {
        try {
            requireBinder().inflateViews(
                    entry,
                    params,
                    wrapInflationCallback(callback));
        } catch (InflationException e) {
            mNotifErrorManager.setInflationError(entry, e);
+5 −2
Original line number Diff line number Diff line
@@ -1041,10 +1041,13 @@ public class ShadeListBuilder implements Dumpable {
    private void setEntrySection(ListEntry entry, NotifSection finalSection) {
        entry.getAttachState().setSection(finalSection);
        NotificationEntry representativeEntry = entry.getRepresentativeEntry();
        if (representativeEntry != null && finalSection != null) {
        if (representativeEntry != null) {
            representativeEntry.getAttachState().setSection(finalSection);
            if (finalSection != null) {
                representativeEntry.setBucket(finalSection.getBucket());
            }
        }
    }

    @NonNull
    private NotifSection findSection(ListEntry entry) {
Loading