diff --git a/app/src/main/java/com/bitchat/android/BitchatApplication.kt b/app/src/main/java/com/bitchat/android/BitchatApplication.kt index 7a0ede22..df9cd6e5 100644 --- a/app/src/main/java/com/bitchat/android/BitchatApplication.kt +++ b/app/src/main/java/com/bitchat/android/BitchatApplication.kt @@ -19,6 +19,9 @@ class BitchatApplication : Application() { // Initialize relay directory (loads assets/nostr_relays.csv) RelayDirectory.initialize(this) + // Initialize LocationNotesManager dependencies early so sheet subscriptions can start immediately + try { com.bitchat.android.nostr.LocationNotesInitializer.initialize(this) } catch (_: Exception) { } + // Initialize favorites persistence early so MessageRouter/NostrTransport can use it on startup try { com.bitchat.android.favorites.FavoritesPersistenceService.initialize(this) diff --git a/app/src/main/java/com/bitchat/android/nostr/LocationNotesManager.kt b/app/src/main/java/com/bitchat/android/nostr/LocationNotesManager.kt index 37c02f05..655a9783 100644 --- a/app/src/main/java/com/bitchat/android/nostr/LocationNotesManager.kt +++ b/app/src/main/java/com/bitchat/android/nostr/LocationNotesManager.kt @@ -297,8 +297,27 @@ class LocationNotesManager private constructor() { val subscribe = subscribeFunc if (subscribe == null) { - Log.e(TAG, "Cannot subscribe - subscribe function not initialized") + Log.e(TAG, "Cannot subscribe - subscribe function not initialized; will retry shortly") _state.value = State.LOADING + // Retry a few times in case initialization is racing the sheet open + scope.launch { + var attempts = 0 + while (attempts < 10 && subscribeFunc == null) { + delay(300) + attempts++ + } + val subNow = subscribeFunc + if (subNow != null) { + // Try again now that dependencies are ready + subscribeAll() + } else { + // Give UI a chance to show empty state rather than spinner forever + if (!_initialLoadComplete.value!!) { + _initialLoadComplete.value = true + _state.value = State.READY + } + } + } return }