package com.bitchat.android import android.app.Application import com.bitchat.android.nostr.RelayDirectory import com.bitchat.android.ui.theme.ThemePreferenceManager import com.bitchat.android.net.ArtiTorManager /** * Main application class for bitchat Android */ class BitchatApplication : Application() { override fun onCreate() { super.onCreate() // Initialize Tor first so any early network goes over Tor try { val torProvider = ArtiTorManager.getInstance() torProvider.init(this) } catch (_: Exception){} // 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) } catch (_: Exception) { } // Warm up Nostr identity to ensure npub is available for favorite notifications try { com.bitchat.android.nostr.NostrIdentityBridge.getCurrentNostrIdentity(this) } catch (_: Exception) { } // Initialize theme preference ThemePreferenceManager.init(this) // Initialize debug preference manager (persists debug toggles) try { com.bitchat.android.ui.debug.DebugPreferenceManager.init(this) } catch (_: Exception) { } // Initialize mesh service preferences try { com.bitchat.android.service.MeshServicePreferences.init(this) } catch (_: Exception) { } // Proactively start the foreground service to keep mesh alive try { com.bitchat.android.service.MeshForegroundService.start(this) } catch (_: Exception) { } // TorManager already initialized above } }