summaryrefslogtreecommitdiffstats
path: root/mobile/android/fenix/app/src
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:01:59 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:01:59 +0000
commit85310221f0512bf1aeefc49ead8a1e11bda55990 (patch)
tree70a3efbfee6c7cbeb626185b35166d2c376b4bb8 /mobile/android/fenix/app/src
parentAdding upstream version 126.0. (diff)
downloadfirefox-85310221f0512bf1aeefc49ead8a1e11bda55990.tar.xz
firefox-85310221f0512bf1aeefc49ead8a1e11bda55990.zip
Adding upstream version 126.0.1.upstream/126.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'mobile/android/fenix/app/src')
-rw-r--r--mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/SwipeToDismissBox.kt16
-rw-r--r--mobile/android/fenix/app/src/main/java/org/mozilla/fenix/messaging/state/MessagingMiddleware.kt13
-rw-r--r--mobile/android/fenix/app/src/test/java/org/mozilla/fenix/messaging/state/MessagingMiddlewareTest.kt35
3 files changed, 60 insertions, 4 deletions
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/SwipeToDismissBox.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/SwipeToDismissBox.kt
index 9992cf75d3..8c5159baec 100644
--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/SwipeToDismissBox.kt
+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/SwipeToDismissBox.kt
@@ -124,6 +124,20 @@ class SwipeToDismissState(
*/
val isSwipingToStart: Boolean
get() = swipeDestination == SwipeToDismissAnchor.Start
+
+ /**
+ * The current [IntOffset] of the swipe. If the X-offset is currently [Float.NaN], it will return 0.
+ */
+ val safeSwipeOffset: IntOffset
+ get() {
+ val xOffset = if (anchoredDraggableState.offset.isNaN()) {
+ 0
+ } else {
+ anchoredDraggableState.offset.roundToInt()
+ }
+
+ return IntOffset(x = xOffset, y = 0)
+ }
}
/**
@@ -186,7 +200,7 @@ fun SwipeToDismissBox(
)
Box(
- modifier = Modifier.offset { IntOffset(state.anchoredDraggableState.offset.roundToInt(), 0) },
+ modifier = Modifier.offset { state.safeSwipeOffset },
content = dismissContent,
)
}
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/messaging/state/MessagingMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/messaging/state/MessagingMiddleware.kt
index 46ac69595c..2122e1efee 100644
--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/messaging/state/MessagingMiddleware.kt
+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/messaging/state/MessagingMiddleware.kt
@@ -135,8 +135,15 @@ class MessagingMiddleware(
context.store.dispatch(UpdateMessageToShow(updatedMessage))
}
val oldMessageIndex = context.state.messaging.messages.indexOfFirst { it.id == updatedMessage.id }
- val newList = context.state.messaging.messages.toMutableList()
- newList[oldMessageIndex] = updatedMessage
- return newList
+
+ return if (oldMessageIndex != -1) {
+ val newList = context.state.messaging.messages.toMutableList()
+ newList[oldMessageIndex] = updatedMessage
+ newList
+ } else {
+ // No need to update the message, it was removed. This is due to a race condition, see:
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1897485
+ context.state.messaging.messages
+ }
}
}
diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/messaging/state/MessagingMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/messaging/state/MessagingMiddlewareTest.kt
index 88b9161583..05e20c1163 100644
--- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/messaging/state/MessagingMiddlewareTest.kt
+++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/messaging/state/MessagingMiddlewareTest.kt
@@ -347,6 +347,41 @@ class MessagingMiddlewareTest {
assertEquals(0, store.state.messaging.messages.size)
assertEquals(0, store.state.messaging.messageToShow.size)
}
+
+ @Test
+ fun `GIVEN message is not found WHEN updateMessage THEN do not update the message list`() = runTestOnMain {
+ val message = createMessage(messageId = "1")
+ val message2 = createMessage(messageId = "2")
+ val store = AppStore(
+ AppState(
+ messaging = MessagingState(
+ messages = listOf(
+ message,
+ ),
+ ),
+ ),
+ listOf(
+ MessagingMiddleware(controller, coroutineScope),
+ ),
+ )
+
+ every {
+ controller.getNextMessage(
+ FenixMessageSurfaceId.HOMESCREEN,
+ any(),
+ )
+ } returns message
+
+ coEvery {
+ controller.onMessageDisplayed(eq(message), any())
+ } returns message2
+
+ store.dispatch(Evaluate(FenixMessageSurfaceId.HOMESCREEN)).joinBlocking()
+ store.waitUntilIdle()
+
+ assertEquals(1, store.state.messaging.messages.count())
+ assertEquals(message, store.state.messaging.messages.first())
+ }
}
private fun createMessage(
metadata: Message.Metadata = createMetadata(),