diff --git a/app/src/main/java/com/bitchat/android/ui/ChatHeader.kt b/app/src/main/java/com/bitchat/android/ui/ChatHeader.kt index a5f90f84..4374ea04 100644 --- a/app/src/main/java/com/bitchat/android/ui/ChatHeader.kt +++ b/app/src/main/java/com/bitchat/android/ui/ChatHeader.kt @@ -211,6 +211,7 @@ fun ChatHeaderContent( val favoritePeers by viewModel.favoritePeers.observeAsState(emptySet()) val peerFingerprints by viewModel.peerFingerprints.observeAsState(emptyMap()) val peerSessionStates by viewModel.peerSessionStates.observeAsState(emptyMap()) + val peerNicknames by viewModel.peerNicknames.observeAsState(emptyMap()) // Reactive favorite computation - no more static lookups! val isFavorite = isFavoriteReactive( @@ -224,7 +225,7 @@ fun ChatHeaderContent( PrivateChatHeader( peerID = selectedPrivatePeer, - peerNicknames = viewModel.meshService.getPeerNicknames(), + peerNicknames = peerNicknames, isFavorite = isFavorite, sessionState = sessionState, onBackClick = onBackClick, diff --git a/app/src/main/java/com/bitchat/android/ui/ChatState.kt b/app/src/main/java/com/bitchat/android/ui/ChatState.kt index b01a7e67..bbc55dfe 100644 --- a/app/src/main/java/com/bitchat/android/ui/ChatState.kt +++ b/app/src/main/java/com/bitchat/android/ui/ChatState.kt @@ -97,6 +97,12 @@ class ChatState { // Peer fingerprint state for reactive favorites (for reactive UI updates) private val _peerFingerprints = MutableLiveData>(emptyMap()) val peerFingerprints: LiveData> = _peerFingerprints + + private val _peerNicknames = MutableLiveData>(emptyMap()) + val peerNicknames: LiveData> = _peerNicknames + + private val _peerRSSI = MutableLiveData>(emptyMap()) + val peerRSSI: LiveData> = _peerRSSI // peerIDToPublicKeyFingerprint REMOVED - fingerprints now handled centrally in PeerManager @@ -241,6 +247,14 @@ class ChatState { fun setPeerFingerprints(fingerprints: Map) { _peerFingerprints.value = fingerprints } + + fun setPeerNicknames(nicknames: Map) { + _peerNicknames.value = nicknames + } + + fun setPeerRSSI(rssi: Map) { + _peerRSSI.value = rssi + } fun setShowAppInfo(show: Boolean) { _showAppInfo.value = show diff --git a/app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt b/app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt index f61fe0f5..a345a837 100644 --- a/app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt +++ b/app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt @@ -88,6 +88,8 @@ class ChatViewModel( val favoritePeers: LiveData> = state.favoritePeers val peerSessionStates: LiveData> = state.peerSessionStates val peerFingerprints: LiveData> = state.peerFingerprints + val peerNicknames: LiveData> = state.peerNicknames + val peerRSSI: LiveData> = state.peerRSSI val showAppInfo: LiveData = state.showAppInfo init { @@ -303,7 +305,7 @@ class ChatViewModel( } /** - * Update reactive states for all connected peers (session states and fingerprints) + * Update reactive states for all connected peers (session states, fingerprints, nicknames, RSSI) */ private fun updateReactiveStates() { val currentPeers = state.getConnectedPeersValue() @@ -313,10 +315,15 @@ class ChatViewModel( meshService.getSessionState(peerID).toString() } state.setPeerSessionStates(sessionStates) - // Update fingerprint mappings from centralized manager val fingerprints = privateChatManager.getAllPeerFingerprints() state.setPeerFingerprints(fingerprints) + + val nicknames = meshService.getPeerNicknames() + state.setPeerNicknames(nicknames) + + val rssiValues = meshService.getPeerRSSI() + state.setPeerRSSI(rssiValues) } // MARK: - Debug and Troubleshooting diff --git a/app/src/main/java/com/bitchat/android/ui/SidebarComponents.kt b/app/src/main/java/com/bitchat/android/ui/SidebarComponents.kt index 5688e0a8..6f8939e9 100644 --- a/app/src/main/java/com/bitchat/android/ui/SidebarComponents.kt +++ b/app/src/main/java/com/bitchat/android/ui/SidebarComponents.kt @@ -43,11 +43,9 @@ fun SidebarOverlay( val selectedPrivatePeer by viewModel.selectedPrivateChatPeer.observeAsState() val nickname by viewModel.nickname.observeAsState("") val unreadChannelMessages by viewModel.unreadChannelMessages.observeAsState(emptyMap()) - - // Get peer data from mesh service - val peerNicknames = viewModel.meshService.getPeerNicknames() - val peerRSSI = viewModel.meshService.getPeerRSSI() - + val peerNicknames by viewModel.peerNicknames.observeAsState(emptyMap()) + val peerRSSI by viewModel.peerRSSI.observeAsState(emptyMap()) + Box( modifier = modifier .background(Color.Black.copy(alpha = 0.5f))