|
|
@ -25,10 +25,12 @@ import org.mozilla.fenix.gleanplumb.NimbusMessagingStorage
|
|
|
|
typealias AppStoreMiddlewareContext = MiddlewareContext<AppState, AppAction>
|
|
|
|
typealias AppStoreMiddlewareContext = MiddlewareContext<AppState, AppAction>
|
|
|
|
|
|
|
|
|
|
|
|
class MessagingMiddleware(
|
|
|
|
class MessagingMiddleware(
|
|
|
|
messagingStorage: NimbusMessagingStorage,
|
|
|
|
private val messagingStorage: NimbusMessagingStorage,
|
|
|
|
coroutineScope: CoroutineScope = CoroutineScope(Dispatchers.IO),
|
|
|
|
private val coroutineScope: CoroutineScope = CoroutineScope(Dispatchers.IO),
|
|
|
|
clock: () -> Long = { System.currentTimeMillis() },
|
|
|
|
clock: () -> Long = { System.currentTimeMillis() },
|
|
|
|
) : NimbusMessagingController(messagingStorage, coroutineScope, clock), Middleware<AppState, AppAction> {
|
|
|
|
) : Middleware<AppState, AppAction> {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private val controller = NimbusMessagingController(messagingStorage, coroutineScope, clock)
|
|
|
|
|
|
|
|
|
|
|
|
override fun invoke(
|
|
|
|
override fun invoke(
|
|
|
|
context: AppStoreMiddlewareContext,
|
|
|
|
context: AppStoreMiddlewareContext,
|
|
|
@ -72,7 +74,7 @@ class MessagingMiddleware(
|
|
|
|
oldMessage: Message,
|
|
|
|
oldMessage: Message,
|
|
|
|
context: AppStoreMiddlewareContext,
|
|
|
|
context: AppStoreMiddlewareContext,
|
|
|
|
) {
|
|
|
|
) {
|
|
|
|
val newMessage = onMessageDisplayed(oldMessage)
|
|
|
|
val newMessage = controller.onMessageDisplayed(oldMessage)
|
|
|
|
val newMessages = if (!newMessage.isExpired) {
|
|
|
|
val newMessages = if (!newMessage.isExpired) {
|
|
|
|
updateMessage(context, oldMessage, newMessage)
|
|
|
|
updateMessage(context, oldMessage, newMessage)
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
@ -90,7 +92,7 @@ class MessagingMiddleware(
|
|
|
|
val newMessages = removeMessage(context, message)
|
|
|
|
val newMessages = removeMessage(context, message)
|
|
|
|
context.dispatch(UpdateMessages(newMessages))
|
|
|
|
context.dispatch(UpdateMessages(newMessages))
|
|
|
|
consumeMessageToShowIfNeeded(context, message)
|
|
|
|
consumeMessageToShowIfNeeded(context, message)
|
|
|
|
onMessageDismissed(message)
|
|
|
|
controller.onMessageDismissed(message)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@VisibleForTesting
|
|
|
|
@VisibleForTesting
|
|
|
@ -99,7 +101,7 @@ class MessagingMiddleware(
|
|
|
|
context: AppStoreMiddlewareContext,
|
|
|
|
context: AppStoreMiddlewareContext,
|
|
|
|
) {
|
|
|
|
) {
|
|
|
|
// Update Nimbus storage.
|
|
|
|
// Update Nimbus storage.
|
|
|
|
onMessageClicked(message)
|
|
|
|
controller.onMessageClicked(message)
|
|
|
|
// Update app state.
|
|
|
|
// Update app state.
|
|
|
|
val newMessages = removeMessage(context, message)
|
|
|
|
val newMessages = removeMessage(context, message)
|
|
|
|
context.dispatch(UpdateMessages(newMessages))
|
|
|
|
context.dispatch(UpdateMessages(newMessages))
|
|
|
|