diff --git a/app/src/main/java/app/closer/data/remote/FirestoreCapsuleDataSource.kt b/app/src/main/java/app/closer/data/remote/FirestoreCapsuleDataSource.kt index 34c8f7f4..19a7248d 100644 --- a/app/src/main/java/app/closer/data/remote/FirestoreCapsuleDataSource.kt +++ b/app/src/main/java/app/closer/data/remote/FirestoreCapsuleDataSource.kt @@ -67,7 +67,12 @@ class FirestoreCapsuleDataSource @Inject constructor( val reg = col(coupleId) .orderBy("createdAt", com.google.firebase.firestore.Query.Direction.DESCENDING) .addSnapshotListener { snap, err -> - if (err != null || snap == null) return@addSnapshotListener + // Propagate listener failures (e.g. PERMISSION_DENIED) by closing the flow so + // the collector's error handling runs. Previously this swallowed the error + // (`return@`), so the flow never emitted or closed and the Memory Lane screen + // hung on its loading indicator forever (F-OBS). + if (err != null) { close(err); return@addSnapshotListener } + if (snap == null) return@addSnapshotListener trySend(snap.documents.mapNotNull { doc -> runCatching { mapToCapsule(doc, coupleId) }.getOrNull() })