Merge "[Screenshot Test] Optimize Mockito usage for screenshot tests" into main
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowBuilder.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowBuilder.kt
index 4dd3ae7..2eb1573 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowBuilder.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowBuilder.kt
@@ -35,7 +35,9 @@
import com.android.systemui.flags.FakeFeatureFlagsClassic
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags
+import com.android.systemui.media.controls.util.MediaFeatureFlag
import com.android.systemui.media.dialog.MediaOutputDialogManager
+import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.shared.system.ActivityManagerWrapper
import com.android.systemui.shared.system.DevicePolicyManagerWrapper
@@ -46,6 +48,7 @@
import com.android.systemui.statusbar.RankingBuilder
import com.android.systemui.statusbar.SmartReplyController
import com.android.systemui.statusbar.notification.ColorUpdateLogger
+import com.android.systemui.statusbar.notification.ConversationNotificationManager
import com.android.systemui.statusbar.notification.ConversationNotificationProcessor
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder
@@ -69,6 +72,7 @@
import com.android.systemui.statusbar.notification.row.shared.NotificationRowContentBinderRefactor
import com.android.systemui.statusbar.notification.stack.NotificationChildrenContainerLogger
import com.android.systemui.statusbar.phone.KeyguardBypassController
+import com.android.systemui.statusbar.phone.KeyguardDismissUtil
import com.android.systemui.statusbar.policy.HeadsUpManager
import com.android.systemui.statusbar.policy.SmartActionInflaterImpl
import com.android.systemui.statusbar.policy.SmartReplyConstants
@@ -84,6 +88,7 @@
import com.android.systemui.wmshell.BubblesManager
import java.util.Optional
import java.util.concurrent.CountDownLatch
+import java.util.concurrent.Executor
import java.util.concurrent.TimeUnit
import kotlinx.coroutines.test.TestScope
import org.junit.Assert.assertTrue
@@ -128,19 +133,19 @@
dependency.injectMockDependency(NotificationShadeWindowController::class.java)
dependency.injectMockDependency(MediaOutputDialogManager::class.java)
- mMockLogger = Mockito.mock(ExpandableNotificationRowLogger::class.java)
- mStatusBarStateController = Mockito.mock(StatusBarStateController::class.java)
- mKeyguardBypassController = Mockito.mock(KeyguardBypassController::class.java)
+ mMockLogger = Mockito.mock(ExpandableNotificationRowLogger::class.java, STUB_ONLY)
+ mStatusBarStateController = Mockito.mock(StatusBarStateController::class.java, STUB_ONLY)
+ mKeyguardBypassController = Mockito.mock(KeyguardBypassController::class.java, STUB_ONLY)
mGroupMembershipManager = GroupMembershipManagerImpl()
- mSmartReplyController = Mockito.mock(SmartReplyController::class.java)
+ mSmartReplyController = Mockito.mock(SmartReplyController::class.java, STUB_ONLY)
val dumpManager = DumpManager()
mGroupExpansionManager = GroupExpansionManagerImpl(dumpManager, mGroupMembershipManager)
- mHeadsUpManager = Mockito.mock(HeadsUpManager::class.java)
+ mHeadsUpManager = Mockito.mock(HeadsUpManager::class.java, STUB_ONLY)
mIconManager =
IconManager(
- Mockito.mock(CommonNotifCollection::class.java),
- Mockito.mock(LauncherApps::class.java),
+ Mockito.mock(CommonNotifCollection::class.java, STUB_ONLY),
+ Mockito.mock(LauncherApps::class.java, STUB_ONLY),
IconBuilder(context),
mTestScope,
mBgCoroutineContext,
@@ -173,7 +178,7 @@
}
)
val remoteViewsFactories = getNotifRemoteViewsFactoryContainer(featureFlags)
- val remoteInputManager = Mockito.mock(NotificationRemoteInputManager::class.java)
+ val remoteInputManager = Mockito.mock(NotificationRemoteInputManager::class.java, STUB_ONLY)
val smartReplyStateInflater =
SmartReplyStateInflaterImpl(
constants = mSmartReplyConstants,
@@ -183,7 +188,8 @@
smartRepliesInflater =
SmartReplyInflaterImpl(
constants = mSmartReplyConstants,
- keyguardDismissUtil = mock(),
+ keyguardDismissUtil =
+ Mockito.mock(KeyguardDismissUtil::class.java, STUB_ONLY),
remoteInputManager = remoteInputManager,
smartReplyController = mSmartReplyController,
context = context
@@ -191,7 +197,7 @@
smartActionsInflater =
SmartActionInflaterImpl(
constants = mSmartReplyConstants,
- activityStarter = mock(),
+ activityStarter = Mockito.mock(ActivityStarter::class.java, STUB_ONLY),
smartReplyController = mSmartReplyController,
headsUpManager = mHeadsUpManager
)
@@ -206,41 +212,42 @@
}
val conversationProcessor =
ConversationNotificationProcessor(
- mock(),
- mock(),
+ Mockito.mock(LauncherApps::class.java, STUB_ONLY),
+ Mockito.mock(ConversationNotificationManager::class.java, STUB_ONLY),
)
+
mContentBinder =
if (NotificationRowContentBinderRefactor.isEnabled)
NotificationRowContentBinderImpl(
- mock(),
+ Mockito.mock(NotifRemoteViewCache::class.java, STUB_ONLY),
remoteInputManager,
conversationProcessor,
- mock(),
- mock(),
- mock(),
+ Mockito.mock(RichOngoingNotificationContentExtractor::class.java, STUB_ONLY),
+ Mockito.mock(RichOngoingNotificationViewInflater::class.java, STUB_ONLY),
+ Mockito.mock(Executor::class.java, STUB_ONLY),
smartReplyStateInflater,
notifLayoutInflaterFactoryProvider,
- mock(),
- mock(),
+ Mockito.mock(HeadsUpStyleProvider::class.java, STUB_ONLY),
+ Mockito.mock(NotificationRowContentBinderLogger::class.java, STUB_ONLY),
)
else
NotificationContentInflater(
- mock(),
+ Mockito.mock(NotifRemoteViewCache::class.java, STUB_ONLY),
remoteInputManager,
conversationProcessor,
- mock(),
- mock(),
+ Mockito.mock(MediaFeatureFlag::class.java, STUB_ONLY),
+ Mockito.mock(Executor::class.java, STUB_ONLY),
smartReplyStateInflater,
notifLayoutInflaterFactoryProvider,
- mock(),
- mock(),
+ Mockito.mock(HeadsUpStyleProvider::class.java, STUB_ONLY),
+ Mockito.mock(NotificationRowContentBinderLogger::class.java, STUB_ONLY),
)
mContentBinder.setInflateSynchronously(true)
mBindStage =
RowContentBindStage(
mContentBinder,
- mock(),
- mock(),
+ Mockito.mock(NotifInflationErrorManager::class.java, STUB_ONLY),
+ Mockito.mock(RowContentBindStageLogger::class.java, STUB_ONLY),
)
val collection = Mockito.mock(CommonNotifCollection::class.java)
@@ -248,7 +255,7 @@
mBindPipeline =
NotifBindPipeline(
collection,
- Mockito.mock(NotifBindPipelineLogger::class.java),
+ Mockito.mock(NotifBindPipelineLogger::class.java, STUB_ONLY),
NotificationEntryProcessorFactoryExecutorImpl(mMainExecutor),
)
mBindPipeline.setStage(mBindStage)
@@ -256,9 +263,11 @@
val collectionListenerCaptor = ArgumentCaptor.forClass(NotifCollectionListener::class.java)
Mockito.verify(collection).addCollectionListener(collectionListenerCaptor.capture())
mBindPipelineEntryListener = collectionListenerCaptor.value
- mPeopleNotificationIdentifier = Mockito.mock(PeopleNotificationIdentifier::class.java)
+ mPeopleNotificationIdentifier =
+ Mockito.mock(PeopleNotificationIdentifier::class.java, STUB_ONLY)
mOnUserInteractionCallback = Mockito.mock(OnUserInteractionCallback::class.java)
- mDismissibilityProvider = Mockito.mock(NotificationDismissibilityProvider::class.java)
+ mDismissibilityProvider =
+ Mockito.mock(NotificationDismissibilityProvider::class.java, STUB_ONLY)
val mFutureDismissalRunnable = Mockito.mock(Runnable::class.java)
whenever(
mOnUserInteractionCallback.registerFutureDismissal(
@@ -320,7 +329,10 @@
// set, but we do not want to override an existing value that is needed by a specific test.
val rowInflaterTask =
- RowInflaterTask(mFakeSystemClock, Mockito.mock(RowInflaterTaskLogger::class.java))
+ RowInflaterTask(
+ mFakeSystemClock,
+ Mockito.mock(RowInflaterTaskLogger::class.java, STUB_ONLY)
+ )
val row = rowInflaterTask.inflateSynchronously(context, null, entry)
entry.row = row
@@ -329,7 +341,7 @@
mBindPipeline.manageRow(entry, row)
row.initialize(
entry,
- Mockito.mock(RemoteInputViewSubcomponent.Factory::class.java),
+ Mockito.mock(RemoteInputViewSubcomponent.Factory::class.java, STUB_ONLY),
APP_NAME,
entry.key,
mMockLogger,
@@ -338,23 +350,23 @@
mGroupExpansionManager,
mHeadsUpManager,
mBindStage,
- Mockito.mock(OnExpandClickListener::class.java),
- Mockito.mock(CoordinateOnClickListener::class.java),
+ Mockito.mock(OnExpandClickListener::class.java, STUB_ONLY),
+ Mockito.mock(CoordinateOnClickListener::class.java, STUB_ONLY),
FalsingManagerFake(),
mStatusBarStateController,
mPeopleNotificationIdentifier,
mOnUserInteractionCallback,
- Optional.of(Mockito.mock(BubblesManager::class.java)),
- Mockito.mock(NotificationGutsManager::class.java),
+ Optional.of(Mockito.mock(BubblesManager::class.java, STUB_ONLY)),
+ Mockito.mock(NotificationGutsManager::class.java, STUB_ONLY),
mDismissibilityProvider,
- Mockito.mock(MetricsLogger::class.java),
- Mockito.mock(NotificationChildrenContainerLogger::class.java),
- Mockito.mock(ColorUpdateLogger::class.java),
+ Mockito.mock(MetricsLogger::class.java, STUB_ONLY),
+ Mockito.mock(NotificationChildrenContainerLogger::class.java, STUB_ONLY),
+ Mockito.mock(ColorUpdateLogger::class.java, STUB_ONLY),
mSmartReplyConstants,
mSmartReplyController,
featureFlags,
- Mockito.mock(IStatusBarService::class.java),
- Mockito.mock(UiEventLogger::class.java)
+ Mockito.mock(IStatusBarService::class.java, STUB_ONLY),
+ Mockito.mock(UiEventLogger::class.java, STUB_ONLY)
)
row.setAboveShelfChangedListener { aboveShelf: Boolean -> }
mBindStage.getStageParams(entry).requireContentViews(extraInflationFlags)
@@ -381,6 +393,8 @@
private val Notification.isConversationStyleNotification
get() = extras.getBoolean(IS_CONVERSATION_FLAG, false)
+ private val STUB_ONLY = Mockito.withSettings().stubOnly()
+
fun markAsConversation(builder: Notification.Builder) {
builder.addExtras(bundleOf(IS_CONVERSATION_FLAG to true))
}