This commit addresses issue #265 where the NotificationReplyReceiver
used an unbound CoroutineScope when handling asynchronous reply saves
to the Room database. If the DAO operation hangs, the PendingResult.finish()
method is never called, which could lead to an Application Not Responding (ANR)
error.
Changes made:
- Wrapped the Room upsert operation inside a `withTimeout(5000L)` block
within the IO coroutine in `NotificationReplyReceiver.kt`.
- Ensures that if the operation exceeds 5 seconds, a TimeoutCancellationException
is thrown and caught, allowing `pendingResult.finish()` to execute in the
`finally` block.
- Added a unit test in `NotificationReplyReceiverTest.kt` to verify that
if the mock DAO hangs indefinitely, the PendingResult is still correctly finished
after the timeout.
Impact:
- Prevents potential ANRs caused by stuck local DB transactions during inline
notification replies.