Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryAdapterTest.kt +36 −14 Original line number Original line Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.app.PendingIntent import android.os.UserHandle import android.os.UserHandle import android.platform.test.annotations.EnableFlags import android.platform.test.annotations.EnableFlags import android.platform.test.flag.junit.SetFlagsRule import android.platform.test.flag.junit.SetFlagsRule import android.service.notification.NotificationListenerService.REASON_CANCEL import android.testing.TestableLooper.RunWithLooper import android.testing.TestableLooper.RunWithLooper import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest Loading @@ -35,6 +36,7 @@ import com.android.systemui.statusbar.notification.collection.provider.mockHighP import com.android.systemui.statusbar.notification.mockNotificationActivityStarter import com.android.systemui.statusbar.notification.mockNotificationActivityStarter import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier.Companion.TYPE_FULL_PERSON import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier.Companion.TYPE_FULL_PERSON import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.row.OnUserInteractionCallback import com.android.systemui.statusbar.notification.row.entryAdapterFactory import com.android.systemui.statusbar.notification.row.entryAdapterFactory import com.android.systemui.statusbar.notification.row.mockNotificationActionClickManager import com.android.systemui.statusbar.notification.row.mockNotificationActionClickManager import com.android.systemui.statusbar.notification.shared.NotificationBundleUi import com.android.systemui.statusbar.notification.shared.NotificationBundleUi Loading @@ -46,10 +48,11 @@ import org.junit.Test import org.junit.runner.RunWith import org.junit.runner.RunWith import org.mockito.ArgumentMatchers.anyLong import org.mockito.ArgumentMatchers.anyLong import org.mockito.Mockito import org.mockito.Mockito import org.mockito.Mockito.mock import org.mockito.kotlin.mock import org.mockito.Mockito.verify import org.mockito.kotlin.verify import org.mockito.kotlin.any import org.mockito.kotlin.any import org.mockito.kotlin.eq import org.mockito.kotlin.eq import org.mockito.kotlin.whenever @SmallTest @SmallTest @RunWith(AndroidJUnit4::class) @RunWith(AndroidJUnit4::class) Loading Loading @@ -121,7 +124,7 @@ class NotificationEntryAdapterTest : SysuiTestCase() { @Test @Test fun getRow_adapter() { fun getRow_adapter() { val row = mock(ExpandableNotificationRow::class.java) val row : ExpandableNotificationRow = mock() val notification: Notification = val notification: Notification = Notification.Builder(mContext, "").setSmallIcon(R.drawable.ic_person).build() Notification.Builder(mContext, "").setSmallIcon(R.drawable.ic_person).build() Loading @@ -138,7 +141,7 @@ class NotificationEntryAdapterTest : SysuiTestCase() { @Test @Test fun isGroupRoot_adapter_groupSummary() { fun isGroupRoot_adapter_groupSummary() { val row = mock(ExpandableNotificationRow::class.java) val row : ExpandableNotificationRow = mock() val notification: Notification = val notification: Notification = Notification.Builder(mContext, "") Notification.Builder(mContext, "") .setSmallIcon(R.drawable.ic_person) .setSmallIcon(R.drawable.ic_person) Loading Loading @@ -183,7 +186,7 @@ class NotificationEntryAdapterTest : SysuiTestCase() { @Test @Test fun isClearable_adapter() { fun isClearable_adapter() { val row = mock(ExpandableNotificationRow::class.java) val row : ExpandableNotificationRow = mock() val notification: Notification = val notification: Notification = Notification.Builder(mContext, "").setSmallIcon(R.drawable.ic_person).build() Notification.Builder(mContext, "").setSmallIcon(R.drawable.ic_person).build() Loading @@ -200,7 +203,7 @@ class NotificationEntryAdapterTest : SysuiTestCase() { @Test @Test fun getSummarization_adapter() { fun getSummarization_adapter() { val row = mock(ExpandableNotificationRow::class.java) val row : ExpandableNotificationRow = mock() val notification: Notification = val notification: Notification = Notification.Builder(mContext, "").setSmallIcon(R.drawable.ic_person).build() Notification.Builder(mContext, "").setSmallIcon(R.drawable.ic_person).build() Loading @@ -219,7 +222,7 @@ class NotificationEntryAdapterTest : SysuiTestCase() { @Test @Test fun getIcons_adapter() { fun getIcons_adapter() { val row = mock(ExpandableNotificationRow::class.java) val row : ExpandableNotificationRow = mock() val notification: Notification = val notification: Notification = Notification.Builder(mContext, "").setSmallIcon(R.drawable.ic_person).build() Notification.Builder(mContext, "").setSmallIcon(R.drawable.ic_person).build() Loading Loading @@ -321,7 +324,7 @@ class NotificationEntryAdapterTest : SysuiTestCase() { assertThat(underTest.isMarkedForUserTriggeredMovement) assertThat(underTest.isMarkedForUserTriggeredMovement) .isEqualTo(entry.isMarkedForUserTriggeredMovement) .isEqualTo(entry.isMarkedForUserTriggeredMovement) underTest.markForUserTriggeredMovement() underTest.markForUserTriggeredMovement(true) assertThat(underTest.isMarkedForUserTriggeredMovement) assertThat(underTest.isMarkedForUserTriggeredMovement) .isEqualTo(entry.isMarkedForUserTriggeredMovement) .isEqualTo(entry.isMarkedForUserTriggeredMovement) } } Loading Loading @@ -358,7 +361,7 @@ class NotificationEntryAdapterTest : SysuiTestCase() { @Test @Test fun canDragAndDrop() { fun canDragAndDrop() { val pi = mock(PendingIntent::class.java) val pi : PendingIntent = mock() Mockito.`when`(pi.isActivity).thenReturn(true) Mockito.`when`(pi.isActivity).thenReturn(true) val notification: Notification = val notification: Notification = Notification.Builder(mContext, "") Notification.Builder(mContext, "") Loading Loading @@ -444,7 +447,7 @@ class NotificationEntryAdapterTest : SysuiTestCase() { val notification: Notification = val notification: Notification = Notification.Builder(mContext, "") Notification.Builder(mContext, "") .setSmallIcon(R.drawable.ic_person) .setSmallIcon(R.drawable.ic_person) .setFullScreenIntent(mock(PendingIntent::class.java), true) .setFullScreenIntent(mock(), true) .build() .build() val entry = val entry = Loading @@ -462,7 +465,7 @@ class NotificationEntryAdapterTest : SysuiTestCase() { val notification: Notification = val notification: Notification = Notification.Builder(mContext, "") Notification.Builder(mContext, "") .setSmallIcon(R.drawable.ic_person) .setSmallIcon(R.drawable.ic_person) .addAction(mock(Notification.Action::class.java)) .addAction(mock()) .build() .build() val entry = NotificationEntryBuilder().setNotification(notification).build() val entry = NotificationEntryBuilder().setNotification(notification).build() Loading Loading @@ -490,7 +493,7 @@ class NotificationEntryAdapterTest : SysuiTestCase() { val notification: Notification = val notification: Notification = Notification.Builder(mContext, "") Notification.Builder(mContext, "") .setSmallIcon(R.drawable.ic_person) .setSmallIcon(R.drawable.ic_person) .addAction(mock(Notification.Action::class.java)) .addAction(mock()) .build() .build() val entry = NotificationEntryBuilder().setNotification(notification).build() val entry = NotificationEntryBuilder().setNotification(notification).build() Loading Loading @@ -518,10 +521,10 @@ class NotificationEntryAdapterTest : SysuiTestCase() { val notification: Notification = val notification: Notification = Notification.Builder(mContext, "") Notification.Builder(mContext, "") .setSmallIcon(R.drawable.ic_person) .setSmallIcon(R.drawable.ic_person) .addAction(mock(Notification.Action::class.java)) .addAction(mock()) .build() .build() val entry = NotificationEntryBuilder().setNotification(notification).build() val entry = NotificationEntryBuilder().setNotification(notification).build() val row = mock(ExpandableNotificationRow::class.java) val row : ExpandableNotificationRow= mock() underTest = factory.create(entry) as NotificationEntryAdapter underTest = factory.create(entry) as NotificationEntryAdapter Loading @@ -530,6 +533,25 @@ class NotificationEntryAdapterTest : SysuiTestCase() { } } @Test @Test fun registerFutureDismissal() { val notification: Notification = Notification.Builder(mContext, "") .setSmallIcon(R.drawable.ic_person) .addAction(mock()) .build() val entry = NotificationEntryBuilder().setNotification(notification).build() val callback: OnUserInteractionCallback = mock() whenever(callback.registerFutureDismissal(any(), any())).thenReturn(mock()) underTest = factory.create(entry) as NotificationEntryAdapter underTest.registerFutureDismissal( callback, REASON_CANCEL, ) verify(callback).registerFutureDismissal(entry, REASON_CANCEL) } fun getRemoteInputEntryAdapter() { fun getRemoteInputEntryAdapter() { val notification: Notification = val notification: Notification = Notification.Builder(mContext, "").setSmallIcon(R.drawable.ic_person).build() Notification.Builder(mContext, "").setSmallIcon(R.drawable.ic_person).build() Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutControllerTest.java +31 −11 Original line number Original line Diff line number Diff line Loading @@ -87,6 +87,7 @@ import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.row.NotificationGutsManager; import com.android.systemui.statusbar.notification.row.NotificationGutsManager; import com.android.systemui.statusbar.notification.row.NotificationTestHelper; import com.android.systemui.statusbar.notification.row.NotificationTestHelper; import com.android.systemui.statusbar.notification.shared.GroupHunAnimationFix; import com.android.systemui.statusbar.notification.shared.GroupHunAnimationFix; import com.android.systemui.statusbar.notification.shared.NotificationBundleUi; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController.NotificationPanelEvent; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController.NotificationPanelEvent; import com.android.systemui.statusbar.notification.stack.NotificationSwipeHelper.NotificationCallback; import com.android.systemui.statusbar.notification.stack.NotificationSwipeHelper.NotificationCallback; import com.android.systemui.statusbar.notification.stack.ui.viewbinder.NotificationListViewBinder; import com.android.systemui.statusbar.notification.stack.ui.viewbinder.NotificationListViewBinder; Loading Loading @@ -124,7 +125,6 @@ public class NotificationStackScrollLayoutControllerTest extends SysuiTestCase { @Mock private NotificationsController mNotificationsController; @Mock private NotificationsController mNotificationsController; @Mock private NotificationVisibilityProvider mVisibilityProvider; @Mock private NotificationVisibilityProvider mVisibilityProvider; @Mock private NotificationWakeUpCoordinator mNotificationWakeUpCoordinator; @Mock private NotificationWakeUpCoordinator mNotificationWakeUpCoordinator; @Mock private HeadsUpManager mHeadsUpManager; @Mock private HeadsUpTouchHelper.Callback mHeadsUpCallback; @Mock private HeadsUpTouchHelper.Callback mHeadsUpCallback; @Mock private Provider<IStatusBarService> mStatusBarService; @Mock private Provider<IStatusBarService> mStatusBarService; @Mock private NotificationRoundnessManager mNotificationRoundnessManager; @Mock private NotificationRoundnessManager mNotificationRoundnessManager; Loading Loading @@ -227,7 +227,7 @@ public class NotificationStackScrollLayoutControllerTest extends SysuiTestCase { row.setHeadsUpAnimatingAway(true); row.setHeadsUpAnimatingAway(true); // Then: mHeadsUpManager.onEntryAnimatingAwayEnded is not called // Then: mHeadsUpManager.onEntryAnimatingAwayEnded is not called verify(mHeadsUpManager, never()).onEntryAnimatingAwayEnded(row.getEntry()); verify(mKosmos.getMockHeadsUpManager(), never()).onEntryAnimatingAwayEnded(row.getEntry()); } } @Test @Test Loading @@ -238,7 +238,7 @@ public class NotificationStackScrollLayoutControllerTest extends SysuiTestCase { initController(/* viewIsAttached= */ true); initController(/* viewIsAttached= */ true); mController.setHeadsUpAppearanceController(mock(HeadsUpAppearanceController.class)); mController.setHeadsUpAppearanceController(mock(HeadsUpAppearanceController.class)); NotificationListContainer listContainer = mController.getNotificationListContainer(); NotificationListContainer listContainer = mController.getNotificationListContainer(); ExpandableNotificationRow row = mNotificationTestHelper.createRow(); ExpandableNotificationRow row = mKosmos.createRow(); listContainer.bindRow(row); listContainer.bindRow(row); row.setHeadsUpAnimatingAway(true); row.setHeadsUpAnimatingAway(true); Loading @@ -246,7 +246,7 @@ public class NotificationStackScrollLayoutControllerTest extends SysuiTestCase { row.setHeadsUpAnimatingAway(false); row.setHeadsUpAnimatingAway(false); // Then: mHeadsUpManager.onEntryAnimatingAwayEnded is called // Then: mHeadsUpManager.onEntryAnimatingAwayEnded is called verify(mHeadsUpManager).onEntryAnimatingAwayEnded(row.getEntry()); verify(mKosmos.getMockHeadsUpManager()).onEntryAnimatingAwayEnded(any()); } } @Test @Test public void testOnDensityOrFontScaleChanged_reInflatesFooterViews() { public void testOnDensityOrFontScaleChanged_reInflatesFooterViews() { Loading Loading @@ -570,8 +570,13 @@ public class NotificationStackScrollLayoutControllerTest extends SysuiTestCase { @Test @Test public void testOnMenuShownLogging() { public void testOnMenuShownLogging() { ExpandableNotificationRow row = mock(ExpandableNotificationRow.class, RETURNS_DEEP_STUBS); ExpandableNotificationRow row = mock(ExpandableNotificationRow.class, RETURNS_DEEP_STUBS); when(row.getEntry().getSbn().getLogMaker()).thenReturn(new LogMaker( if (NotificationBundleUi.isEnabled()) { when(row.getEntryAdapter().getSbn().getLogMaker()).thenReturn(new LogMaker( MetricsProto.MetricsEvent.VIEW_UNKNOWN)); } else { when(row.getEntryLegacy().getSbn().getLogMaker()).thenReturn(new LogMaker( MetricsProto.MetricsEvent.VIEW_UNKNOWN)); MetricsProto.MetricsEvent.VIEW_UNKNOWN)); } ArgumentCaptor<OnMenuEventListener> onMenuEventListenerArgumentCaptor = ArgumentCaptor<OnMenuEventListener> onMenuEventListenerArgumentCaptor = ArgumentCaptor.forClass(OnMenuEventListener.class); ArgumentCaptor.forClass(OnMenuEventListener.class); Loading @@ -583,7 +588,12 @@ public class NotificationStackScrollLayoutControllerTest extends SysuiTestCase { OnMenuEventListener onMenuEventListener = onMenuEventListenerArgumentCaptor.getValue(); OnMenuEventListener onMenuEventListener = onMenuEventListenerArgumentCaptor.getValue(); onMenuEventListener.onMenuShown(row); onMenuEventListener.onMenuShown(row); verify(row.getEntry().getSbn()).getLogMaker(); // This writes most of the log data // This writes most of the log data if (NotificationBundleUi.isEnabled()) { verify(row.getEntryAdapter().getSbn()).getLogMaker(); } else { verify(row.getEntryLegacy().getSbn()).getLogMaker(); } verify(mMetricsLogger).write(logMatcher(MetricsProto.MetricsEvent.ACTION_REVEAL_GEAR, verify(mMetricsLogger).write(logMatcher(MetricsProto.MetricsEvent.ACTION_REVEAL_GEAR, MetricsProto.MetricsEvent.TYPE_ACTION)); MetricsProto.MetricsEvent.TYPE_ACTION)); } } Loading Loading @@ -621,8 +631,13 @@ public class NotificationStackScrollLayoutControllerTest extends SysuiTestCase { @Test @Test public void testOnMenuClickedLogging() { public void testOnMenuClickedLogging() { ExpandableNotificationRow row = mock(ExpandableNotificationRow.class, RETURNS_DEEP_STUBS); ExpandableNotificationRow row = mock(ExpandableNotificationRow.class, RETURNS_DEEP_STUBS); when(row.getEntry().getSbn().getLogMaker()).thenReturn(new LogMaker( if (NotificationBundleUi.isEnabled()) { when(row.getEntryAdapter().getSbn().getLogMaker()).thenReturn(new LogMaker( MetricsProto.MetricsEvent.VIEW_UNKNOWN)); MetricsProto.MetricsEvent.VIEW_UNKNOWN)); } else { when(row.getEntryLegacy().getSbn().getLogMaker()).thenReturn(new LogMaker( MetricsProto.MetricsEvent.VIEW_UNKNOWN)); } ArgumentCaptor<OnMenuEventListener> onMenuEventListenerArgumentCaptor = ArgumentCaptor<OnMenuEventListener> onMenuEventListenerArgumentCaptor = ArgumentCaptor.forClass(OnMenuEventListener.class); ArgumentCaptor.forClass(OnMenuEventListener.class); Loading @@ -635,7 +650,12 @@ public class NotificationStackScrollLayoutControllerTest extends SysuiTestCase { onMenuEventListener.onMenuClicked(row, 0, 0, mock( onMenuEventListener.onMenuClicked(row, 0, 0, mock( NotificationMenuRowPlugin.MenuItem.class)); NotificationMenuRowPlugin.MenuItem.class)); verify(row.getEntry().getSbn()).getLogMaker(); // This writes most of the log data // This writes most of the log data if (NotificationBundleUi.isEnabled()) { verify(row.getEntryAdapter().getSbn()).getLogMaker(); } else { verify(row.getEntryLegacy().getSbn()).getLogMaker(); } verify(mMetricsLogger).write(logMatcher(MetricsProto.MetricsEvent.ACTION_TOUCH_GEAR, verify(mMetricsLogger).write(logMatcher(MetricsProto.MetricsEvent.ACTION_TOUCH_GEAR, MetricsProto.MetricsEvent.TYPE_ACTION)); MetricsProto.MetricsEvent.TYPE_ACTION)); } } Loading Loading @@ -764,7 +784,7 @@ public class NotificationStackScrollLayoutControllerTest extends SysuiTestCase { mNotificationsController, mNotificationsController, mVisibilityProvider, mVisibilityProvider, mNotificationWakeUpCoordinator, mNotificationWakeUpCoordinator, mHeadsUpManager, mKosmos.getMockHeadsUpManager(), mStatusBarService, mStatusBarService, mNotificationRoundnessManager, mNotificationRoundnessManager, mTunerService, mTunerService, Loading packages/SystemUI/src/com/android/systemui/statusbar/HeadsUpStatusBarView.java +3 −2 Original line number Original line Diff line number Diff line Loading @@ -29,7 +29,7 @@ import com.android.keyguard.AlphaOptimizedLinearLayout; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.res.R; import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntry.OnSensitivityChangedListener; import com.android.systemui.statusbar.notification.collection.PipelineEntry; import java.util.ArrayList; import java.util.ArrayList; Loading Loading @@ -125,7 +125,8 @@ public class HeadsUpStatusBarView extends AlphaOptimizedLinearLayout { } } } } private final OnSensitivityChangedListener mOnSensitivityChangedListener = entry -> { private final PipelineEntry.OnSensitivityChangedListener mOnSensitivityChangedListener = entry -> { if (entry != mShowingEntry) { if (entry != mShowingEntry) { throw new IllegalStateException("Got a sensitivity change for " + entry throw new IllegalStateException("Got a sensitivity change for " + entry + " but mShowingEntry is " + mShowingEntry); + " but mShowingEntry is " + mShowingEntry); Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/BundleEntryAdapter.kt +51 −1 Original line number Original line Diff line number Diff line Loading @@ -27,6 +27,9 @@ import com.android.systemui.statusbar.notification.collection.provider.HighPrior import com.android.systemui.statusbar.notification.icon.IconPack import com.android.systemui.statusbar.notification.icon.IconPack import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier.Companion.TYPE_NON_PERSON import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier.Companion.TYPE_NON_PERSON import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.row.NotifBindPipeline import com.android.systemui.statusbar.notification.row.OnUserInteractionCallback import com.android.systemui.statusbar.notification.row.RowContentBindStage import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow class BundleEntryAdapter( class BundleEntryAdapter( Loading Loading @@ -120,7 +123,7 @@ class BundleEntryAdapter( Log.wtf(TAG, "onImportanceChanged() called") Log.wtf(TAG, "onImportanceChanged() called") } } override fun markForUserTriggeredMovement() { override fun markForUserTriggeredMovement(marked: Boolean) { Log.wtf(TAG, "markForUserTriggeredMovement() called") Log.wtf(TAG, "markForUserTriggeredMovement() called") } } Loading Loading @@ -200,6 +203,53 @@ class BundleEntryAdapter( override fun getRemoteInputEntryAdapter(): RemoteInputEntryAdapter? { override fun getRemoteInputEntryAdapter(): RemoteInputEntryAdapter? { return null return null } } override fun addOnSensitivityChangedListener( listener: PipelineEntry.OnSensitivityChangedListener? ) { entry.addOnSensitivityChangedListener(listener) } override fun removeOnSensitivityChangedListener( listener: PipelineEntry.OnSensitivityChangedListener? ) { entry.removeOnSensitivityChangedListener(listener) } override fun setSeenInShade(seen: Boolean) { entry.isSeenInShade = seen } override fun isSeenInShade(): Boolean { return entry.isSeenInShade } override fun onEntryAnimatingAwayEnded() { Log.wtf(TAG, "onEntryAnimatingAwayEnded() called") } override fun registerFutureDismissal( callback: OnUserInteractionCallback, reason: Int, ): Runnable? { // TODO(b/389839319): what should the pipeline do when a bundle is dismissed? return null } override fun markForReinflation(stage: RowContentBindStage) { Log.wtf(TAG, "markForReinflation() called") } override fun isViewBacked(): Boolean { return false } override fun requestRebind( stage: RowContentBindStage, callback: NotifBindPipeline.BindCallback, ) { Log.wtf(TAG, "requestRebind() called") } } } private const val TAG = "BundleEntryAdapter" private const val TAG = "BundleEntryAdapter" packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/EntryAdapter.java +27 −1 Original line number Original line Diff line number Diff line Loading @@ -27,6 +27,9 @@ import com.android.systemui.statusbar.notification.collection.notifcollection.No import com.android.systemui.statusbar.notification.icon.IconPack; import com.android.systemui.statusbar.notification.icon.IconPack; import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier; import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.row.NotifBindPipeline; import com.android.systemui.statusbar.notification.row.OnUserInteractionCallback; import com.android.systemui.statusbar.notification.row.RowContentBindStage; import kotlinx.coroutines.flow.StateFlow; import kotlinx.coroutines.flow.StateFlow; Loading Loading @@ -148,7 +151,7 @@ public interface EntryAdapter { * in the shade and change something about its appearance to delay the appearance change until * in the shade and change something about its appearance to delay the appearance change until * the ranking reordering is likely to have settled. * the ranking reordering is likely to have settled. */ */ void markForUserTriggeredMovement(); void markForUserTriggeredMovement(boolean marked); /** /** * Determines whether a row is considered 'high priority'. * Determines whether a row is considered 'high priority'. Loading Loading @@ -202,5 +205,28 @@ public interface EntryAdapter { void onEntryClicked(ExpandableNotificationRow row); void onEntryClicked(ExpandableNotificationRow row); @Nullable RemoteInputEntryAdapter getRemoteInputEntryAdapter(); @Nullable RemoteInputEntryAdapter getRemoteInputEntryAdapter(); /** Add a listener to be notified when the entry's sensitivity changes. */ void addOnSensitivityChangedListener( PipelineEntry.OnSensitivityChangedListener listener); /** Remove a listener that was registered above. */ void removeOnSensitivityChangedListener( PipelineEntry.OnSensitivityChangedListener listener); void setSeenInShade(boolean seen); boolean isSeenInShade(); void onEntryAnimatingAwayEnded(); Runnable registerFutureDismissal(@NonNull OnUserInteractionCallback callback, int reason); void markForReinflation(@NonNull RowContentBindStage stage); boolean isViewBacked(); void requestRebind(@NonNull RowContentBindStage stage, @NonNull NotifBindPipeline.BindCallback callback); } } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryAdapterTest.kt +36 −14 Original line number Original line Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.app.PendingIntent import android.os.UserHandle import android.os.UserHandle import android.platform.test.annotations.EnableFlags import android.platform.test.annotations.EnableFlags import android.platform.test.flag.junit.SetFlagsRule import android.platform.test.flag.junit.SetFlagsRule import android.service.notification.NotificationListenerService.REASON_CANCEL import android.testing.TestableLooper.RunWithLooper import android.testing.TestableLooper.RunWithLooper import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest Loading @@ -35,6 +36,7 @@ import com.android.systemui.statusbar.notification.collection.provider.mockHighP import com.android.systemui.statusbar.notification.mockNotificationActivityStarter import com.android.systemui.statusbar.notification.mockNotificationActivityStarter import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier.Companion.TYPE_FULL_PERSON import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier.Companion.TYPE_FULL_PERSON import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.row.OnUserInteractionCallback import com.android.systemui.statusbar.notification.row.entryAdapterFactory import com.android.systemui.statusbar.notification.row.entryAdapterFactory import com.android.systemui.statusbar.notification.row.mockNotificationActionClickManager import com.android.systemui.statusbar.notification.row.mockNotificationActionClickManager import com.android.systemui.statusbar.notification.shared.NotificationBundleUi import com.android.systemui.statusbar.notification.shared.NotificationBundleUi Loading @@ -46,10 +48,11 @@ import org.junit.Test import org.junit.runner.RunWith import org.junit.runner.RunWith import org.mockito.ArgumentMatchers.anyLong import org.mockito.ArgumentMatchers.anyLong import org.mockito.Mockito import org.mockito.Mockito import org.mockito.Mockito.mock import org.mockito.kotlin.mock import org.mockito.Mockito.verify import org.mockito.kotlin.verify import org.mockito.kotlin.any import org.mockito.kotlin.any import org.mockito.kotlin.eq import org.mockito.kotlin.eq import org.mockito.kotlin.whenever @SmallTest @SmallTest @RunWith(AndroidJUnit4::class) @RunWith(AndroidJUnit4::class) Loading Loading @@ -121,7 +124,7 @@ class NotificationEntryAdapterTest : SysuiTestCase() { @Test @Test fun getRow_adapter() { fun getRow_adapter() { val row = mock(ExpandableNotificationRow::class.java) val row : ExpandableNotificationRow = mock() val notification: Notification = val notification: Notification = Notification.Builder(mContext, "").setSmallIcon(R.drawable.ic_person).build() Notification.Builder(mContext, "").setSmallIcon(R.drawable.ic_person).build() Loading @@ -138,7 +141,7 @@ class NotificationEntryAdapterTest : SysuiTestCase() { @Test @Test fun isGroupRoot_adapter_groupSummary() { fun isGroupRoot_adapter_groupSummary() { val row = mock(ExpandableNotificationRow::class.java) val row : ExpandableNotificationRow = mock() val notification: Notification = val notification: Notification = Notification.Builder(mContext, "") Notification.Builder(mContext, "") .setSmallIcon(R.drawable.ic_person) .setSmallIcon(R.drawable.ic_person) Loading Loading @@ -183,7 +186,7 @@ class NotificationEntryAdapterTest : SysuiTestCase() { @Test @Test fun isClearable_adapter() { fun isClearable_adapter() { val row = mock(ExpandableNotificationRow::class.java) val row : ExpandableNotificationRow = mock() val notification: Notification = val notification: Notification = Notification.Builder(mContext, "").setSmallIcon(R.drawable.ic_person).build() Notification.Builder(mContext, "").setSmallIcon(R.drawable.ic_person).build() Loading @@ -200,7 +203,7 @@ class NotificationEntryAdapterTest : SysuiTestCase() { @Test @Test fun getSummarization_adapter() { fun getSummarization_adapter() { val row = mock(ExpandableNotificationRow::class.java) val row : ExpandableNotificationRow = mock() val notification: Notification = val notification: Notification = Notification.Builder(mContext, "").setSmallIcon(R.drawable.ic_person).build() Notification.Builder(mContext, "").setSmallIcon(R.drawable.ic_person).build() Loading @@ -219,7 +222,7 @@ class NotificationEntryAdapterTest : SysuiTestCase() { @Test @Test fun getIcons_adapter() { fun getIcons_adapter() { val row = mock(ExpandableNotificationRow::class.java) val row : ExpandableNotificationRow = mock() val notification: Notification = val notification: Notification = Notification.Builder(mContext, "").setSmallIcon(R.drawable.ic_person).build() Notification.Builder(mContext, "").setSmallIcon(R.drawable.ic_person).build() Loading Loading @@ -321,7 +324,7 @@ class NotificationEntryAdapterTest : SysuiTestCase() { assertThat(underTest.isMarkedForUserTriggeredMovement) assertThat(underTest.isMarkedForUserTriggeredMovement) .isEqualTo(entry.isMarkedForUserTriggeredMovement) .isEqualTo(entry.isMarkedForUserTriggeredMovement) underTest.markForUserTriggeredMovement() underTest.markForUserTriggeredMovement(true) assertThat(underTest.isMarkedForUserTriggeredMovement) assertThat(underTest.isMarkedForUserTriggeredMovement) .isEqualTo(entry.isMarkedForUserTriggeredMovement) .isEqualTo(entry.isMarkedForUserTriggeredMovement) } } Loading Loading @@ -358,7 +361,7 @@ class NotificationEntryAdapterTest : SysuiTestCase() { @Test @Test fun canDragAndDrop() { fun canDragAndDrop() { val pi = mock(PendingIntent::class.java) val pi : PendingIntent = mock() Mockito.`when`(pi.isActivity).thenReturn(true) Mockito.`when`(pi.isActivity).thenReturn(true) val notification: Notification = val notification: Notification = Notification.Builder(mContext, "") Notification.Builder(mContext, "") Loading Loading @@ -444,7 +447,7 @@ class NotificationEntryAdapterTest : SysuiTestCase() { val notification: Notification = val notification: Notification = Notification.Builder(mContext, "") Notification.Builder(mContext, "") .setSmallIcon(R.drawable.ic_person) .setSmallIcon(R.drawable.ic_person) .setFullScreenIntent(mock(PendingIntent::class.java), true) .setFullScreenIntent(mock(), true) .build() .build() val entry = val entry = Loading @@ -462,7 +465,7 @@ class NotificationEntryAdapterTest : SysuiTestCase() { val notification: Notification = val notification: Notification = Notification.Builder(mContext, "") Notification.Builder(mContext, "") .setSmallIcon(R.drawable.ic_person) .setSmallIcon(R.drawable.ic_person) .addAction(mock(Notification.Action::class.java)) .addAction(mock()) .build() .build() val entry = NotificationEntryBuilder().setNotification(notification).build() val entry = NotificationEntryBuilder().setNotification(notification).build() Loading Loading @@ -490,7 +493,7 @@ class NotificationEntryAdapterTest : SysuiTestCase() { val notification: Notification = val notification: Notification = Notification.Builder(mContext, "") Notification.Builder(mContext, "") .setSmallIcon(R.drawable.ic_person) .setSmallIcon(R.drawable.ic_person) .addAction(mock(Notification.Action::class.java)) .addAction(mock()) .build() .build() val entry = NotificationEntryBuilder().setNotification(notification).build() val entry = NotificationEntryBuilder().setNotification(notification).build() Loading Loading @@ -518,10 +521,10 @@ class NotificationEntryAdapterTest : SysuiTestCase() { val notification: Notification = val notification: Notification = Notification.Builder(mContext, "") Notification.Builder(mContext, "") .setSmallIcon(R.drawable.ic_person) .setSmallIcon(R.drawable.ic_person) .addAction(mock(Notification.Action::class.java)) .addAction(mock()) .build() .build() val entry = NotificationEntryBuilder().setNotification(notification).build() val entry = NotificationEntryBuilder().setNotification(notification).build() val row = mock(ExpandableNotificationRow::class.java) val row : ExpandableNotificationRow= mock() underTest = factory.create(entry) as NotificationEntryAdapter underTest = factory.create(entry) as NotificationEntryAdapter Loading @@ -530,6 +533,25 @@ class NotificationEntryAdapterTest : SysuiTestCase() { } } @Test @Test fun registerFutureDismissal() { val notification: Notification = Notification.Builder(mContext, "") .setSmallIcon(R.drawable.ic_person) .addAction(mock()) .build() val entry = NotificationEntryBuilder().setNotification(notification).build() val callback: OnUserInteractionCallback = mock() whenever(callback.registerFutureDismissal(any(), any())).thenReturn(mock()) underTest = factory.create(entry) as NotificationEntryAdapter underTest.registerFutureDismissal( callback, REASON_CANCEL, ) verify(callback).registerFutureDismissal(entry, REASON_CANCEL) } fun getRemoteInputEntryAdapter() { fun getRemoteInputEntryAdapter() { val notification: Notification = val notification: Notification = Notification.Builder(mContext, "").setSmallIcon(R.drawable.ic_person).build() Notification.Builder(mContext, "").setSmallIcon(R.drawable.ic_person).build() Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutControllerTest.java +31 −11 Original line number Original line Diff line number Diff line Loading @@ -87,6 +87,7 @@ import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.row.NotificationGutsManager; import com.android.systemui.statusbar.notification.row.NotificationGutsManager; import com.android.systemui.statusbar.notification.row.NotificationTestHelper; import com.android.systemui.statusbar.notification.row.NotificationTestHelper; import com.android.systemui.statusbar.notification.shared.GroupHunAnimationFix; import com.android.systemui.statusbar.notification.shared.GroupHunAnimationFix; import com.android.systemui.statusbar.notification.shared.NotificationBundleUi; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController.NotificationPanelEvent; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController.NotificationPanelEvent; import com.android.systemui.statusbar.notification.stack.NotificationSwipeHelper.NotificationCallback; import com.android.systemui.statusbar.notification.stack.NotificationSwipeHelper.NotificationCallback; import com.android.systemui.statusbar.notification.stack.ui.viewbinder.NotificationListViewBinder; import com.android.systemui.statusbar.notification.stack.ui.viewbinder.NotificationListViewBinder; Loading Loading @@ -124,7 +125,6 @@ public class NotificationStackScrollLayoutControllerTest extends SysuiTestCase { @Mock private NotificationsController mNotificationsController; @Mock private NotificationsController mNotificationsController; @Mock private NotificationVisibilityProvider mVisibilityProvider; @Mock private NotificationVisibilityProvider mVisibilityProvider; @Mock private NotificationWakeUpCoordinator mNotificationWakeUpCoordinator; @Mock private NotificationWakeUpCoordinator mNotificationWakeUpCoordinator; @Mock private HeadsUpManager mHeadsUpManager; @Mock private HeadsUpTouchHelper.Callback mHeadsUpCallback; @Mock private HeadsUpTouchHelper.Callback mHeadsUpCallback; @Mock private Provider<IStatusBarService> mStatusBarService; @Mock private Provider<IStatusBarService> mStatusBarService; @Mock private NotificationRoundnessManager mNotificationRoundnessManager; @Mock private NotificationRoundnessManager mNotificationRoundnessManager; Loading Loading @@ -227,7 +227,7 @@ public class NotificationStackScrollLayoutControllerTest extends SysuiTestCase { row.setHeadsUpAnimatingAway(true); row.setHeadsUpAnimatingAway(true); // Then: mHeadsUpManager.onEntryAnimatingAwayEnded is not called // Then: mHeadsUpManager.onEntryAnimatingAwayEnded is not called verify(mHeadsUpManager, never()).onEntryAnimatingAwayEnded(row.getEntry()); verify(mKosmos.getMockHeadsUpManager(), never()).onEntryAnimatingAwayEnded(row.getEntry()); } } @Test @Test Loading @@ -238,7 +238,7 @@ public class NotificationStackScrollLayoutControllerTest extends SysuiTestCase { initController(/* viewIsAttached= */ true); initController(/* viewIsAttached= */ true); mController.setHeadsUpAppearanceController(mock(HeadsUpAppearanceController.class)); mController.setHeadsUpAppearanceController(mock(HeadsUpAppearanceController.class)); NotificationListContainer listContainer = mController.getNotificationListContainer(); NotificationListContainer listContainer = mController.getNotificationListContainer(); ExpandableNotificationRow row = mNotificationTestHelper.createRow(); ExpandableNotificationRow row = mKosmos.createRow(); listContainer.bindRow(row); listContainer.bindRow(row); row.setHeadsUpAnimatingAway(true); row.setHeadsUpAnimatingAway(true); Loading @@ -246,7 +246,7 @@ public class NotificationStackScrollLayoutControllerTest extends SysuiTestCase { row.setHeadsUpAnimatingAway(false); row.setHeadsUpAnimatingAway(false); // Then: mHeadsUpManager.onEntryAnimatingAwayEnded is called // Then: mHeadsUpManager.onEntryAnimatingAwayEnded is called verify(mHeadsUpManager).onEntryAnimatingAwayEnded(row.getEntry()); verify(mKosmos.getMockHeadsUpManager()).onEntryAnimatingAwayEnded(any()); } } @Test @Test public void testOnDensityOrFontScaleChanged_reInflatesFooterViews() { public void testOnDensityOrFontScaleChanged_reInflatesFooterViews() { Loading Loading @@ -570,8 +570,13 @@ public class NotificationStackScrollLayoutControllerTest extends SysuiTestCase { @Test @Test public void testOnMenuShownLogging() { public void testOnMenuShownLogging() { ExpandableNotificationRow row = mock(ExpandableNotificationRow.class, RETURNS_DEEP_STUBS); ExpandableNotificationRow row = mock(ExpandableNotificationRow.class, RETURNS_DEEP_STUBS); when(row.getEntry().getSbn().getLogMaker()).thenReturn(new LogMaker( if (NotificationBundleUi.isEnabled()) { when(row.getEntryAdapter().getSbn().getLogMaker()).thenReturn(new LogMaker( MetricsProto.MetricsEvent.VIEW_UNKNOWN)); } else { when(row.getEntryLegacy().getSbn().getLogMaker()).thenReturn(new LogMaker( MetricsProto.MetricsEvent.VIEW_UNKNOWN)); MetricsProto.MetricsEvent.VIEW_UNKNOWN)); } ArgumentCaptor<OnMenuEventListener> onMenuEventListenerArgumentCaptor = ArgumentCaptor<OnMenuEventListener> onMenuEventListenerArgumentCaptor = ArgumentCaptor.forClass(OnMenuEventListener.class); ArgumentCaptor.forClass(OnMenuEventListener.class); Loading @@ -583,7 +588,12 @@ public class NotificationStackScrollLayoutControllerTest extends SysuiTestCase { OnMenuEventListener onMenuEventListener = onMenuEventListenerArgumentCaptor.getValue(); OnMenuEventListener onMenuEventListener = onMenuEventListenerArgumentCaptor.getValue(); onMenuEventListener.onMenuShown(row); onMenuEventListener.onMenuShown(row); verify(row.getEntry().getSbn()).getLogMaker(); // This writes most of the log data // This writes most of the log data if (NotificationBundleUi.isEnabled()) { verify(row.getEntryAdapter().getSbn()).getLogMaker(); } else { verify(row.getEntryLegacy().getSbn()).getLogMaker(); } verify(mMetricsLogger).write(logMatcher(MetricsProto.MetricsEvent.ACTION_REVEAL_GEAR, verify(mMetricsLogger).write(logMatcher(MetricsProto.MetricsEvent.ACTION_REVEAL_GEAR, MetricsProto.MetricsEvent.TYPE_ACTION)); MetricsProto.MetricsEvent.TYPE_ACTION)); } } Loading Loading @@ -621,8 +631,13 @@ public class NotificationStackScrollLayoutControllerTest extends SysuiTestCase { @Test @Test public void testOnMenuClickedLogging() { public void testOnMenuClickedLogging() { ExpandableNotificationRow row = mock(ExpandableNotificationRow.class, RETURNS_DEEP_STUBS); ExpandableNotificationRow row = mock(ExpandableNotificationRow.class, RETURNS_DEEP_STUBS); when(row.getEntry().getSbn().getLogMaker()).thenReturn(new LogMaker( if (NotificationBundleUi.isEnabled()) { when(row.getEntryAdapter().getSbn().getLogMaker()).thenReturn(new LogMaker( MetricsProto.MetricsEvent.VIEW_UNKNOWN)); MetricsProto.MetricsEvent.VIEW_UNKNOWN)); } else { when(row.getEntryLegacy().getSbn().getLogMaker()).thenReturn(new LogMaker( MetricsProto.MetricsEvent.VIEW_UNKNOWN)); } ArgumentCaptor<OnMenuEventListener> onMenuEventListenerArgumentCaptor = ArgumentCaptor<OnMenuEventListener> onMenuEventListenerArgumentCaptor = ArgumentCaptor.forClass(OnMenuEventListener.class); ArgumentCaptor.forClass(OnMenuEventListener.class); Loading @@ -635,7 +650,12 @@ public class NotificationStackScrollLayoutControllerTest extends SysuiTestCase { onMenuEventListener.onMenuClicked(row, 0, 0, mock( onMenuEventListener.onMenuClicked(row, 0, 0, mock( NotificationMenuRowPlugin.MenuItem.class)); NotificationMenuRowPlugin.MenuItem.class)); verify(row.getEntry().getSbn()).getLogMaker(); // This writes most of the log data // This writes most of the log data if (NotificationBundleUi.isEnabled()) { verify(row.getEntryAdapter().getSbn()).getLogMaker(); } else { verify(row.getEntryLegacy().getSbn()).getLogMaker(); } verify(mMetricsLogger).write(logMatcher(MetricsProto.MetricsEvent.ACTION_TOUCH_GEAR, verify(mMetricsLogger).write(logMatcher(MetricsProto.MetricsEvent.ACTION_TOUCH_GEAR, MetricsProto.MetricsEvent.TYPE_ACTION)); MetricsProto.MetricsEvent.TYPE_ACTION)); } } Loading Loading @@ -764,7 +784,7 @@ public class NotificationStackScrollLayoutControllerTest extends SysuiTestCase { mNotificationsController, mNotificationsController, mVisibilityProvider, mVisibilityProvider, mNotificationWakeUpCoordinator, mNotificationWakeUpCoordinator, mHeadsUpManager, mKosmos.getMockHeadsUpManager(), mStatusBarService, mStatusBarService, mNotificationRoundnessManager, mNotificationRoundnessManager, mTunerService, mTunerService, Loading
packages/SystemUI/src/com/android/systemui/statusbar/HeadsUpStatusBarView.java +3 −2 Original line number Original line Diff line number Diff line Loading @@ -29,7 +29,7 @@ import com.android.keyguard.AlphaOptimizedLinearLayout; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.res.R; import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntry.OnSensitivityChangedListener; import com.android.systemui.statusbar.notification.collection.PipelineEntry; import java.util.ArrayList; import java.util.ArrayList; Loading Loading @@ -125,7 +125,8 @@ public class HeadsUpStatusBarView extends AlphaOptimizedLinearLayout { } } } } private final OnSensitivityChangedListener mOnSensitivityChangedListener = entry -> { private final PipelineEntry.OnSensitivityChangedListener mOnSensitivityChangedListener = entry -> { if (entry != mShowingEntry) { if (entry != mShowingEntry) { throw new IllegalStateException("Got a sensitivity change for " + entry throw new IllegalStateException("Got a sensitivity change for " + entry + " but mShowingEntry is " + mShowingEntry); + " but mShowingEntry is " + mShowingEntry); Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/BundleEntryAdapter.kt +51 −1 Original line number Original line Diff line number Diff line Loading @@ -27,6 +27,9 @@ import com.android.systemui.statusbar.notification.collection.provider.HighPrior import com.android.systemui.statusbar.notification.icon.IconPack import com.android.systemui.statusbar.notification.icon.IconPack import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier.Companion.TYPE_NON_PERSON import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier.Companion.TYPE_NON_PERSON import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.row.NotifBindPipeline import com.android.systemui.statusbar.notification.row.OnUserInteractionCallback import com.android.systemui.statusbar.notification.row.RowContentBindStage import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow class BundleEntryAdapter( class BundleEntryAdapter( Loading Loading @@ -120,7 +123,7 @@ class BundleEntryAdapter( Log.wtf(TAG, "onImportanceChanged() called") Log.wtf(TAG, "onImportanceChanged() called") } } override fun markForUserTriggeredMovement() { override fun markForUserTriggeredMovement(marked: Boolean) { Log.wtf(TAG, "markForUserTriggeredMovement() called") Log.wtf(TAG, "markForUserTriggeredMovement() called") } } Loading Loading @@ -200,6 +203,53 @@ class BundleEntryAdapter( override fun getRemoteInputEntryAdapter(): RemoteInputEntryAdapter? { override fun getRemoteInputEntryAdapter(): RemoteInputEntryAdapter? { return null return null } } override fun addOnSensitivityChangedListener( listener: PipelineEntry.OnSensitivityChangedListener? ) { entry.addOnSensitivityChangedListener(listener) } override fun removeOnSensitivityChangedListener( listener: PipelineEntry.OnSensitivityChangedListener? ) { entry.removeOnSensitivityChangedListener(listener) } override fun setSeenInShade(seen: Boolean) { entry.isSeenInShade = seen } override fun isSeenInShade(): Boolean { return entry.isSeenInShade } override fun onEntryAnimatingAwayEnded() { Log.wtf(TAG, "onEntryAnimatingAwayEnded() called") } override fun registerFutureDismissal( callback: OnUserInteractionCallback, reason: Int, ): Runnable? { // TODO(b/389839319): what should the pipeline do when a bundle is dismissed? return null } override fun markForReinflation(stage: RowContentBindStage) { Log.wtf(TAG, "markForReinflation() called") } override fun isViewBacked(): Boolean { return false } override fun requestRebind( stage: RowContentBindStage, callback: NotifBindPipeline.BindCallback, ) { Log.wtf(TAG, "requestRebind() called") } } } private const val TAG = "BundleEntryAdapter" private const val TAG = "BundleEntryAdapter"
packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/EntryAdapter.java +27 −1 Original line number Original line Diff line number Diff line Loading @@ -27,6 +27,9 @@ import com.android.systemui.statusbar.notification.collection.notifcollection.No import com.android.systemui.statusbar.notification.icon.IconPack; import com.android.systemui.statusbar.notification.icon.IconPack; import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier; import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.row.NotifBindPipeline; import com.android.systemui.statusbar.notification.row.OnUserInteractionCallback; import com.android.systemui.statusbar.notification.row.RowContentBindStage; import kotlinx.coroutines.flow.StateFlow; import kotlinx.coroutines.flow.StateFlow; Loading Loading @@ -148,7 +151,7 @@ public interface EntryAdapter { * in the shade and change something about its appearance to delay the appearance change until * in the shade and change something about its appearance to delay the appearance change until * the ranking reordering is likely to have settled. * the ranking reordering is likely to have settled. */ */ void markForUserTriggeredMovement(); void markForUserTriggeredMovement(boolean marked); /** /** * Determines whether a row is considered 'high priority'. * Determines whether a row is considered 'high priority'. Loading Loading @@ -202,5 +205,28 @@ public interface EntryAdapter { void onEntryClicked(ExpandableNotificationRow row); void onEntryClicked(ExpandableNotificationRow row); @Nullable RemoteInputEntryAdapter getRemoteInputEntryAdapter(); @Nullable RemoteInputEntryAdapter getRemoteInputEntryAdapter(); /** Add a listener to be notified when the entry's sensitivity changes. */ void addOnSensitivityChangedListener( PipelineEntry.OnSensitivityChangedListener listener); /** Remove a listener that was registered above. */ void removeOnSensitivityChangedListener( PipelineEntry.OnSensitivityChangedListener listener); void setSeenInShade(boolean seen); boolean isSeenInShade(); void onEntryAnimatingAwayEnded(); Runnable registerFutureDismissal(@NonNull OnUserInteractionCallback callback, int reason); void markForReinflation(@NonNull RowContentBindStage stage); boolean isViewBacked(); void requestRebind(@NonNull RowContentBindStage stage, @NonNull NotifBindPipeline.BindCallback callback); } }