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

Commit c4037509 authored by Lyn Han's avatar Lyn Han
Browse files

Make AmbientState injectable

1) Mark AmbientState as SysuiSingleton to allow access from
- PanelBar
- NotificationStackScrollLayout

2) Mark AmbientState constructor with @Inject
   for Dagger use when needed

3) Ensure that AmbientState params are injectable
- Context --- AmbientState is now global, and has access to application
  context; we can leave this unchanged (otherwise we mark it with
  @Named(VIEW_CONTEXT) to ask for the subcomponent view context)
- SectionProvider --- bind to NotificationSectionsManager in
  NotificationsModule, the closest module to AmbientState

4) Add AmbientState to constructors for NSSL and NPVC
- Have PanelBar update AmbientState directly (via PVC) instead of
  piping changes through layers of classes

Fixes: 177921542
Test: log to verify that shade open state updates correctly
Test: build sysui-studio with
       sysuiTestDebug variant and SystemUITests config, then run:

adb shell am instrument -w -e class com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutTest com.android.systemui.tests

Change-Id: I0a50d603b49c9f55f1af41084974aee59e9ce95b
parent 8f046c76
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -69,6 +69,8 @@ import com.android.systemui.statusbar.notification.row.ChannelEditorDialogContro
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
import com.android.systemui.statusbar.notification.row.OnUserInteractionCallback;
import com.android.systemui.statusbar.notification.row.PriorityOnboardingDialogController;
import com.android.systemui.statusbar.notification.stack.NotificationSectionsManager;
import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import com.android.systemui.util.leak.LeakDetector;
@@ -89,6 +91,10 @@ import dagger.Provides;
 */
@Module(includes = { NotificationSectionHeadersModule.class })
public interface NotificationsModule {
    @Binds
    StackScrollAlgorithm.SectionProvider bindSectionProvider(
            NotificationSectionsManager impl);

    /** Provides an instance of {@link NotificationEntryManager} */
    @SysUISingleton
    @Provides
+6 −1
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.content.Context;
import android.util.MathUtils;

import com.android.systemui.R;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.statusbar.NotificationShelf;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -30,9 +31,12 @@ import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
import com.android.systemui.statusbar.notification.row.ExpandableView;
import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.SectionProvider;

import javax.inject.Inject;

/**
 * A global state to track all input states for the algorithm.
 */
@SysUISingleton
public class AmbientState {

    private static final float MAX_PULSE_HEIGHT = 100000f;
@@ -83,6 +87,7 @@ public class AmbientState {
    /** Tracks the state from AlertingNotificationManager#hasNotifications() */
    private boolean mHasAlertEntries;

    @Inject
    public AmbientState(
            Context context,
            @NonNull SectionProvider sectionProvider) {
@@ -98,7 +103,7 @@ public class AmbientState {
        mBaseZHeight = getBaseHeight(mZDistanceBetweenElements);
    }

    void setIsShadeOpening(boolean isOpening) {
    public void setIsShadeOpening(boolean isOpening) {
        mIsShadeOpening = isOpening;
    }

+3 −6
Original line number Diff line number Diff line
@@ -491,7 +491,8 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
            NotificationSectionsManager notificationSectionsManager,
            GroupMembershipManager groupMembershipManager,
            GroupExpansionManager groupExpansionManager,
            SysuiStatusBarStateController statusbarStateController
            SysuiStatusBarStateController statusbarStateController,
            AmbientState ambientState
    ) {
        super(context, attrs, 0, 0);
        Resources res = getResources();
@@ -500,7 +501,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
        mSectionsManager.initialize(this, LayoutInflater.from(context));
        mSections = mSectionsManager.createSectionsForBuckets();

        mAmbientState = new AmbientState(context, mSectionsManager);
        mAmbientState = ambientState;
        mBgColor = Utils.getColorAttr(mContext, android.R.attr.colorBackgroundFloating)
                .getDefaultColor();
        int minHeight = res.getDimensionPixelSize(R.dimen.notification_min_height);
@@ -549,10 +550,6 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
        }
    }

    void setIsShadeOpening(boolean isOpening) {
        mAmbientState.setIsShadeOpening(isOpening);
    }

    void setSectionPadding(float margin) {
        mAmbientState.setSectionPadding(margin);
        requestChildrenUpdate();
+0 −4
Original line number Diff line number Diff line
@@ -271,10 +271,6 @@ public class NotificationStackScrollLayoutController {
        }
    };

    public void setIsShadeOpening(boolean isOpening) {
        mView.setIsShadeOpening(isOpening);
    }

    public void setSectionPadding(float padding) {
        mView.setSectionPadding(padding);
    }
+5 −7
Original line number Diff line number Diff line
@@ -120,6 +120,7 @@ import com.android.systemui.statusbar.notification.collection.render.ShadeViewMa
import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.ExpandableView;
import com.android.systemui.statusbar.notification.stack.AmbientState;
import com.android.systemui.statusbar.notification.stack.AnimationProperties;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
@@ -552,10 +553,12 @@ public class NotificationPanelViewController extends PanelViewController {
            AuthController authController,
            QSDetailDisplayer qsDetailDisplayer,
            ScrimController scrimController,
            MediaDataManager mediaDataManager) {
            MediaDataManager mediaDataManager,
            AmbientState ambientState) {
        super(view, falsingManager, dozeLog, keyguardStateController,
                (SysuiStatusBarStateController) statusBarStateController, vibratorHelper,
                latencyTracker, flingAnimationUtilsBuilder.get(), statusBarTouchableRegionManager);
                latencyTracker, flingAnimationUtilsBuilder.get(), statusBarTouchableRegionManager,
                ambientState);
        mView = view;
        mMetricsLogger = metricsLogger;
        mActivityManager = activityManager;
@@ -2410,11 +2413,6 @@ public class NotificationPanelViewController extends PanelViewController {
        setListening(true);
    }

    @Override
    protected void setIsShadeOpening(boolean isOpening) {
        mNotificationStackScrollLayoutController.setIsShadeOpening(isOpening);
    }

    @Override
    public void setSectionPadding(float padding) {
        if (padding == mSectionPadding) {
Loading