diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java index c237e1deeae34..e479509247d35 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java @@ -79,7 +79,6 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.util.ContrastColorUtil; import com.android.internal.widget.CachingIconView; import com.android.internal.widget.CallLayout; -import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.animation.Interpolators; import com.android.systemui.classifier.FalsingCollector; @@ -90,6 +89,7 @@ import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin.MenuItem import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.NotificationMediaManager; import com.android.systemui.statusbar.RemoteInputController; +import com.android.systemui.statusbar.SmartReplyController; import com.android.systemui.statusbar.StatusBarIconView; import com.android.systemui.statusbar.notification.AboveShelfChangedListener; import com.android.systemui.statusbar.notification.ExpandAnimationParameters; @@ -111,10 +111,11 @@ import com.android.systemui.statusbar.notification.stack.ExpandableViewState; import com.android.systemui.statusbar.notification.stack.NotificationChildrenContainer; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout; import com.android.systemui.statusbar.notification.stack.SwipeableView; -import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.CentralSurfaces; +import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.statusbar.policy.InflatedSmartReplyState; +import com.android.systemui.statusbar.policy.SmartReplyConstants; import com.android.systemui.statusbar.policy.dagger.RemoteInputViewSubcomponent; import com.android.systemui.util.Compile; import com.android.systemui.util.DumpUtilsKt; @@ -169,6 +170,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView private RowContentBindStage mRowContentBindStage; private PeopleNotificationIdentifier mPeopleNotificationIdentifier; private Optional mBubblesManagerOptional; + private MetricsLogger mMetricsLogger; private int mIconTransformContentShift; private int mMaxHeadsUpHeightBeforeN; private int mMaxHeadsUpHeightBeforeP; @@ -304,8 +306,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView final boolean wasExpanded = mGroupExpansionManager.isGroupExpanded(mEntry); boolean nowExpanded = mGroupExpansionManager.toggleGroupExpansion(mEntry); mOnExpandClickListener.onExpandClicked(mEntry, v, nowExpanded); - MetricsLogger.action(mContext, MetricsEvent.ACTION_NOTIFICATION_GROUP_EXPANDER, - nowExpanded); + mMetricsLogger.action(MetricsEvent.ACTION_NOTIFICATION_GROUP_EXPANDER, nowExpanded); onExpansionChanged(true /* userAction */, wasExpanded); } else if (mEnableNonGroupedNotificationExpand) { if (v.isAccessibilityFocused()) { @@ -327,8 +328,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView } notifyHeightChanged(true); mOnExpandClickListener.onExpandClicked(mEntry, v, nowExpanded); - MetricsLogger.action(mContext, MetricsEvent.ACTION_NOTIFICATION_EXPANDER, - nowExpanded); + mMetricsLogger.action(MetricsEvent.ACTION_NOTIFICATION_EXPANDER, nowExpanded); } } }; @@ -1271,7 +1271,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView addView(mMenuRow.getMenuView(), menuIndex); } for (NotificationContentView l : mLayouts) { - l.initView(); + l.reinflate(); l.reInflateViews(); } mEntry.getSbn().clearPackageContext(); @@ -1464,7 +1464,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView * @param fromAccessibility whether this dismiss is coming from an accessibility action */ public void performDismiss(boolean fromAccessibility) { - Dependency.get(MetricsLogger.class).count(NotificationCounters.NOTIFICATION_DISMISSED, 1); + mMetricsLogger.count(NotificationCounters.NOTIFICATION_DISMISSED, 1); dismiss(fromAccessibility); if (mEntry.isDismissable()) { if (mOnUserInteractionCallback != null) { @@ -1600,7 +1600,10 @@ public class ExpandableNotificationRow extends ActivatableNotificationView PeopleNotificationIdentifier peopleNotificationIdentifier, OnUserInteractionCallback onUserInteractionCallback, Optional bubblesManagerOptional, - NotificationGutsManager gutsManager) { + NotificationGutsManager gutsManager, + MetricsLogger metricsLogger, + SmartReplyConstants smartReplyConstants, + SmartReplyController smartReplyController) { mEntry = entry; mAppName = appName; if (mMenuRow == null) { @@ -1623,15 +1626,18 @@ public class ExpandableNotificationRow extends ActivatableNotificationView mFalsingManager = falsingManager; mFalsingCollector = falsingCollector; mStatusBarStateController = statusBarStateController; - mPeopleNotificationIdentifier = peopleNotificationIdentifier; for (NotificationContentView l : mLayouts) { - l.setPeopleNotificationIdentifier(mPeopleNotificationIdentifier); - l.setRemoteInputViewSubcomponentFactory(rivSubcomponentFactory); + l.initialize( + mPeopleNotificationIdentifier, + rivSubcomponentFactory, + smartReplyConstants, + smartReplyController); } mOnUserInteractionCallback = onUserInteractionCallback; mBubblesManagerOptional = bubblesManagerOptional; mNotificationGutsManager = gutsManager; + mMetricsLogger = metricsLogger; cacheIsSystemNotification(); } @@ -3127,7 +3133,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView if (mGroupMembershipManager.isGroupSummary(mEntry)) { event = MetricsEvent.ACTION_NOTIFICATION_GROUP_GESTURE_EXPANDER; } - MetricsLogger.action(mContext, event, userExpanded); + mMetricsLogger.action(event, userExpanded); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java index c4beb5bf4d7bc..599039d465561 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java @@ -27,6 +27,7 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.android.internal.logging.MetricsLogger; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; @@ -35,6 +36,7 @@ import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.shared.plugins.PluginManager; import com.android.systemui.statusbar.NotificationMediaManager; +import com.android.systemui.statusbar.SmartReplyController; import com.android.systemui.statusbar.notification.FeedbackIcon; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManager; @@ -49,6 +51,7 @@ import com.android.systemui.statusbar.notification.row.dagger.NotificationRowSco import com.android.systemui.statusbar.notification.stack.NotificationListContainer; import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.policy.HeadsUpManager; +import com.android.systemui.statusbar.policy.SmartReplyConstants; import com.android.systemui.statusbar.policy.dagger.RemoteInputViewSubcomponent; import com.android.systemui.util.time.SystemClock; import com.android.systemui.wmshell.BubblesManager; @@ -82,6 +85,7 @@ public class ExpandableNotificationRowController implements NotifViewController private final HeadsUpManager mHeadsUpManager; private final ExpandableNotificationRow.OnExpandClickListener mOnExpandClickListener; private final StatusBarStateController mStatusBarStateController; + private final MetricsLogger mMetricsLogger; private final ExpandableNotificationRow.ExpansionLogger mExpansionLogger = this::logNotificationExpansion; @@ -94,16 +98,21 @@ public class ExpandableNotificationRowController implements NotifViewController private final boolean mAllowLongPress; private final PeopleNotificationIdentifier mPeopleNotificationIdentifier; private final Optional mBubblesManagerOptional; + private final SmartReplyConstants mSmartReplyConstants; + private final SmartReplyController mSmartReplyController; private final ExpandableNotificationRowDragController mDragController; @Inject public ExpandableNotificationRowController( ExpandableNotificationRow view, - NotificationListContainer listContainer, - RemoteInputViewSubcomponent.Factory rivSubcomponentFactory, ActivatableNotificationViewController activatableNotificationViewController, + RemoteInputViewSubcomponent.Factory rivSubcomponentFactory, + MetricsLogger metricsLogger, + NotificationListContainer listContainer, NotificationMediaManager mediaManager, + SmartReplyConstants smartReplyConstants, + SmartReplyController smartReplyController, PluginManager pluginManager, SystemClock clock, @AppName String appName, @@ -152,6 +161,9 @@ public class ExpandableNotificationRowController implements NotifViewController mPeopleNotificationIdentifier = peopleNotificationIdentifier; mBubblesManagerOptional = bubblesManagerOptional; mDragController = dragController; + mMetricsLogger = metricsLogger; + mSmartReplyConstants = smartReplyConstants; + mSmartReplyController = smartReplyController; } /** @@ -179,7 +191,10 @@ public class ExpandableNotificationRowController implements NotifViewController mPeopleNotificationIdentifier, mOnUserInteractionCallback, mBubblesManagerOptional, - mNotificationGutsManager + mNotificationGutsManager, + mMetricsLogger, + mSmartReplyConstants, + mSmartReplyController ); mView.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); if (mAllowLongPress) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java index adb4ce68c0315..b9c7113206df0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java @@ -39,7 +39,6 @@ import android.widget.ImageView; import android.widget.LinearLayout; import com.android.internal.annotations.VisibleForTesting; -import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin; import com.android.systemui.statusbar.RemoteInputController; @@ -94,7 +93,6 @@ public class NotificationContentView extends FrameLayout implements Notification private final Rect mClipBounds = new Rect(); private int mMinContractedHeight; - private int mNotificationContentMarginEnd; private View mContractedChild; private View mExpandedChild; private View mHeadsUpChild; @@ -116,7 +114,7 @@ public class NotificationContentView extends FrameLayout implements Notification private NotificationViewWrapper mContractedWrapper; private NotificationViewWrapper mExpandedWrapper; private NotificationViewWrapper mHeadsUpWrapper; - private HybridGroupManager mHybridGroupManager; + private final HybridGroupManager mHybridGroupManager; private int mClipTopAmount; private int mContentHeight; private int mVisibleType = VISIBLE_TYPE_NONE; @@ -128,7 +126,6 @@ public class NotificationContentView extends FrameLayout implements Notification private int mHeadsUpHeight; private int mNotificationMaxHeight; private NotificationEntry mNotificationEntry; - private GroupMembershipManager mGroupMembershipManager; private RemoteInputController mRemoteInputController; private Runnable mExpandedVisibleListener; private PeopleNotificationIdentifier mPeopleIdentifier; @@ -184,7 +181,6 @@ public class NotificationContentView extends FrameLayout implements Notification private boolean mFocusOnVisibilityChange; private boolean mHeadsUpAnimatingAway; private int mClipBottomAmount; - private boolean mIsLowPriority; private boolean mIsContentExpandable; private boolean mRemoteInputVisible; private int mUnrestrictedContentHeight; @@ -192,16 +188,23 @@ public class NotificationContentView extends FrameLayout implements Notification public NotificationContentView(Context context, AttributeSet attrs) { super(context, attrs); mHybridGroupManager = new HybridGroupManager(getContext()); - mSmartReplyConstants = Dependency.get(SmartReplyConstants.class); - mSmartReplyController = Dependency.get(SmartReplyController.class); - initView(); + reinflate(); } - public void initView() { + public void initialize( + PeopleNotificationIdentifier peopleNotificationIdentifier, + RemoteInputViewSubcomponent.Factory rivSubcomponentFactory, + SmartReplyConstants smartReplyConstants, + SmartReplyController smartReplyController) { + mPeopleIdentifier = peopleNotificationIdentifier; + mRemoteInputSubcomponentFactory = rivSubcomponentFactory; + mSmartReplyConstants = smartReplyConstants; + mSmartReplyController = smartReplyController; + } + + public void reinflate() { mMinContractedHeight = getResources().getDimensionPixelSize( R.dimen.min_notification_layout_height); - mNotificationContentMarginEnd = getResources().getDimensionPixelSize( - com.android.internal.R.dimen.notification_content_margin_end); } public void setHeights(int smallHeight, int headsUpMaxHeight, int maxHeight) { @@ -1606,7 +1609,6 @@ public class NotificationContentView extends FrameLayout implements Notification } public void setGroupMembershipManager(GroupMembershipManager groupMembershipManager) { - mGroupMembershipManager = groupMembershipManager; } public void setRemoteInputController(RemoteInputController r) { @@ -1694,10 +1696,6 @@ public class NotificationContentView extends FrameLayout implements Notification mContainingNotification = containingNotification; } - public void setPeopleNotificationIdentifier(PeopleNotificationIdentifier peopleIdentifier) { - mPeopleIdentifier = peopleIdentifier; - } - public void requestSelectLayout(boolean needsAnimation) { selectLayout(needsAnimation, false); } @@ -1865,7 +1863,6 @@ public class NotificationContentView extends FrameLayout implements Notification } public void setIsLowPriority(boolean isLowPriority) { - mIsLowPriority = isLowPriority; } public boolean isDimmable() { @@ -2090,10 +2087,6 @@ public class NotificationContentView extends FrameLayout implements Notification return false; } - public void setRemoteInputViewSubcomponentFactory(RemoteInputViewSubcomponent.Factory factory) { - mRemoteInputSubcomponentFactory = factory; - } - private static class RemoteInputViewData { @Nullable RemoteInputView mView; @Nullable RemoteInputViewController mController; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationEntryManagerInflationTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationEntryManagerInflationTest.java index 7fc5ece670d43..251ac7d250fe1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationEntryManagerInflationTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationEntryManagerInflationTest.java @@ -41,6 +41,7 @@ import android.testing.TestableLooper; import androidx.asynclayoutinflater.view.AsyncLayoutInflater; import androidx.test.filters.SmallTest; +import com.android.internal.logging.MetricsLogger; import com.android.internal.statusbar.IStatusBarService; import com.android.internal.util.NotificationMessagingUtil; import com.android.systemui.R; @@ -87,6 +88,7 @@ import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.statusbar.policy.InflatedSmartReplyState; import com.android.systemui.statusbar.policy.InflatedSmartReplyViewHolder; +import com.android.systemui.statusbar.policy.SmartReplyConstants; import com.android.systemui.statusbar.policy.SmartReplyStateInflater; import com.android.systemui.statusbar.policy.dagger.RemoteInputViewSubcomponent; import com.android.systemui.util.concurrency.FakeExecutor; @@ -252,13 +254,17 @@ public class NotificationEntryManagerInflationTest extends SysuiTestCase { .thenAnswer((Answer) invocation -> new ExpandableNotificationRowController( viewCaptor.getValue(), - mListContainer, - mock(RemoteInputViewSubcomponent.Factory.class), mock(ActivatableNotificationViewController.class), + mock(RemoteInputViewSubcomponent.Factory.class), + mock(MetricsLogger.class), + mListContainer, mNotificationMediaManager, + mock(SmartReplyConstants.class), + mock(SmartReplyController.class), mock(PluginManager.class), new FakeSystemClock(), - "FOOBAR", "FOOBAR", + "FOOBAR", + "FOOBAR", mKeyguardBypassController, mGroupMembershipManager, mGroupExpansionManager, @@ -275,8 +281,7 @@ public class NotificationEntryManagerInflationTest extends SysuiTestCase { mock(FeatureFlags.class), mPeopleNotificationIdentifier, Optional.of(mock(BubblesManager.class)), - mock(ExpandableNotificationRowDragController.class) - )); + mock(ExpandableNotificationRowDragController.class))); when(mNotificationRowComponentBuilder.activatableNotificationView(any())) .thenReturn(mNotificationRowComponentBuilder); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationTestHelper.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationTestHelper.java index 72f8f70058fc0..1ecb09bc8514f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationTestHelper.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationTestHelper.java @@ -44,6 +44,7 @@ import android.text.TextUtils; import android.view.LayoutInflater; import android.widget.RemoteViews; +import com.android.internal.logging.MetricsLogger; import com.android.systemui.TestableDependency; import com.android.systemui.classifier.FalsingCollectorFake; import com.android.systemui.classifier.FalsingManagerFake; @@ -54,6 +55,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.NotificationMediaManager; import com.android.systemui.statusbar.NotificationRemoteInputManager; import com.android.systemui.statusbar.NotificationShadeWindowController; +import com.android.systemui.statusbar.SmartReplyController; import com.android.systemui.statusbar.notification.ConversationNotificationProcessor; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder; @@ -73,6 +75,7 @@ import com.android.systemui.statusbar.phone.KeyguardBypassController; 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; import com.android.systemui.statusbar.policy.SmartReplyStateInflater; import com.android.systemui.statusbar.policy.dagger.RemoteInputViewSubcomponent; import com.android.systemui.tests.R; @@ -505,7 +508,10 @@ public class NotificationTestHelper { mPeopleNotificationIdentifier, mOnUserInteractionCallback, Optional.of(mock(BubblesManager.class)), - mock(NotificationGutsManager.class)); + mock(NotificationGutsManager.class), + mock(MetricsLogger.class), + mock(SmartReplyConstants.class), + mock(SmartReplyController.class)); row.setAboveShelfChangedListener(aboveShelf -> { }); mBindStage.getStageParams(entry).requireContentViews(extraInflationFlags);