Skip to content

Commit ea25b71

Browse files
committed
fix favorites
1 parent d54d470 commit ea25b71

6 files changed

Lines changed: 87 additions & 12 deletions

File tree

app/src/main/java/com/bitchat/android/ui/ChatHeader.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.bitchat.android.ui
22

3+
import android.util.Log
34
import androidx.compose.foundation.clickable
45
import androidx.compose.foundation.layout.*
56
import androidx.compose.foundation.text.BasicTextField
@@ -253,7 +254,10 @@ private fun PrivateChatHeader(
253254

254255
// Favorite button - positioned on the right
255256
IconButton(
256-
onClick = onToggleFavorite,
257+
onClick = {
258+
Log.d("ChatHeader", "Header toggle favorite: peerID=$peerID, currentFavorite=$isFavorite")
259+
onToggleFavorite()
260+
},
257261
modifier = Modifier.align(Alignment.CenterEnd)
258262
) {
259263
Icon(

app/src/main/java/com/bitchat/android/ui/ChatState.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.bitchat.android.ui
22

3+
import android.util.Log
34
import androidx.lifecycle.LiveData
45
import androidx.lifecycle.MediatorLiveData
56
import androidx.lifecycle.MutableLiveData
@@ -188,6 +189,7 @@ class ChatState {
188189
}
189190

190191
fun setFavoritePeers(favorites: Set<String>) {
192+
Log.d("ChatState", "setFavoritePeers called with ${favorites.size} favorites: $favorites")
191193
_favoritePeers.value = favorites
192194
}
193195

app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.bitchat.android.ui
22

33
import android.app.Application
44
import android.content.Context
5+
import android.util.Log
56
import androidx.lifecycle.AndroidViewModel
67
import androidx.lifecycle.LiveData
78
import androidx.lifecycle.viewModelScope
@@ -100,6 +101,10 @@ class ChatViewModel(
100101
state.setFavoritePeers(dataManager.favoritePeers)
101102
dataManager.loadBlockedUsers()
102103

104+
// Log all favorites at startup
105+
dataManager.logAllFavorites()
106+
logCurrentFavoriteState()
107+
103108
// Note: Mesh service is now started by MainActivity
104109

105110
// Show welcome message if no peers after delay
@@ -249,7 +254,19 @@ class ChatViewModel(
249254
}
250255

251256
fun toggleFavorite(peerID: String) {
257+
Log.d("ChatViewModel", "toggleFavorite called for peerID: $peerID")
252258
privateChatManager.toggleFavorite(peerID)
259+
260+
// Log current state after toggle
261+
logCurrentFavoriteState()
262+
}
263+
264+
private fun logCurrentFavoriteState() {
265+
Log.i("ChatViewModel", "=== CURRENT FAVORITE STATE ===")
266+
Log.i("ChatViewModel", "LiveData favorite peers: ${favoritePeers.value}")
267+
Log.i("ChatViewModel", "DataManager favorite peers: ${dataManager.favoritePeers}")
268+
Log.i("ChatViewModel", "Peer fingerprints: ${privateChatManager.getAllPeerFingerprints()}")
269+
Log.i("ChatViewModel", "==============================")
253270
}
254271

255272
// MARK: - Debug and Troubleshooting

app/src/main/java/com/bitchat/android/ui/DataManager.kt

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.bitchat.android.ui
22

33
import android.content.Context
44
import android.content.SharedPreferences
5+
import android.util.Log
56
import com.google.gson.Gson
67
import kotlin.random.Random
78

@@ -10,6 +11,10 @@ import kotlin.random.Random
1011
*/
1112
class DataManager(private val context: Context) {
1213

14+
companion object {
15+
private const val TAG = "DataManager"
16+
}
17+
1318
private val prefs: SharedPreferences = context.getSharedPreferences("bitchat_prefs", Context.MODE_PRIVATE)
1419
private val gson = Gson()
1520

@@ -126,24 +131,41 @@ class DataManager(private val context: Context) {
126131
fun loadFavorites() {
127132
val savedFavorites = prefs.getStringSet("favorites", emptySet()) ?: emptySet()
128133
_favoritePeers.addAll(savedFavorites)
134+
Log.d(TAG, "Loaded ${savedFavorites.size} favorite users from storage: $savedFavorites")
129135
}
130136

131137
fun saveFavorites() {
132138
prefs.edit().putStringSet("favorites", _favoritePeers).apply()
139+
Log.d(TAG, "Saved ${_favoritePeers.size} favorite users to storage: $_favoritePeers")
133140
}
134141

135142
fun addFavorite(fingerprint: String) {
136-
_favoritePeers.add(fingerprint)
143+
val wasAdded = _favoritePeers.add(fingerprint)
144+
Log.d(TAG, "addFavorite: fingerprint=$fingerprint, wasAdded=$wasAdded")
137145
saveFavorites()
146+
logAllFavorites()
138147
}
139148

140149
fun removeFavorite(fingerprint: String) {
141-
_favoritePeers.remove(fingerprint)
150+
val wasRemoved = _favoritePeers.remove(fingerprint)
151+
Log.d(TAG, "removeFavorite: fingerprint=$fingerprint, wasRemoved=$wasRemoved")
142152
saveFavorites()
153+
logAllFavorites()
143154
}
144155

145156
fun isFavorite(fingerprint: String): Boolean {
146-
return _favoritePeers.contains(fingerprint)
157+
val result = _favoritePeers.contains(fingerprint)
158+
Log.d(TAG, "isFavorite check: fingerprint=$fingerprint, result=$result")
159+
return result
160+
}
161+
162+
fun logAllFavorites() {
163+
Log.i(TAG, "=== ALL FAVORITE USERS ===")
164+
Log.i(TAG, "Total favorites: ${_favoritePeers.size}")
165+
_favoritePeers.forEach { fingerprint ->
166+
Log.i(TAG, "Favorite fingerprint: $fingerprint")
167+
}
168+
Log.i(TAG, "========================")
147169
}
148170

149171
// MARK: - Blocked Users Management

app/src/main/java/com/bitchat/android/ui/PrivateChatManager.kt

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.bitchat.android.ui
33
import com.bitchat.android.model.BitchatMessage
44
import com.bitchat.android.model.DeliveryStatus
55
import java.util.*
6+
import android.util.Log
67

78
/**
89
* Handles private chat functionality including peer management and blocking
@@ -13,6 +14,10 @@ class PrivateChatManager(
1314
private val dataManager: DataManager
1415
) {
1516

17+
companion object {
18+
private const val TAG = "PrivateChatManager"
19+
}
20+
1621
// Peer identification mapping
1722
private val peerIDToPublicKeyFingerprint = mutableMapOf<String, String>()
1823

@@ -99,17 +104,39 @@ class PrivateChatManager(
99104
fun toggleFavorite(peerID: String) {
100105
val fingerprint = peerIDToPublicKeyFingerprint[peerID] ?: return
101106

102-
if (dataManager.isFavorite(fingerprint)) {
107+
Log.d(TAG, "toggleFavorite called for peerID: $peerID, fingerprint: $fingerprint")
108+
109+
val wasFavorite = dataManager.isFavorite(fingerprint)
110+
Log.d(TAG, "Current favorite status: $wasFavorite")
111+
112+
if (wasFavorite) {
103113
dataManager.removeFavorite(fingerprint)
114+
Log.d(TAG, "Removed from favorites: $fingerprint")
104115
} else {
105116
dataManager.addFavorite(fingerprint)
117+
Log.d(TAG, "Added to favorites: $fingerprint")
106118
}
119+
120+
// Update state to trigger UI refresh
107121
state.setFavoritePeers(dataManager.favoritePeers)
122+
123+
Log.d(TAG, "Updated favorite peers state. New favorites: ${dataManager.favoritePeers}")
124+
Log.d(TAG, "All peer fingerprints: $peerIDToPublicKeyFingerprint")
108125
}
109126

110127
fun isFavorite(peerID: String): Boolean {
111128
val fingerprint = peerIDToPublicKeyFingerprint[peerID] ?: return false
112-
return dataManager.isFavorite(fingerprint)
129+
val isFav = dataManager.isFavorite(fingerprint)
130+
Log.d(TAG, "isFavorite check: peerID=$peerID, fingerprint=$fingerprint, result=$isFav")
131+
return isFav
132+
}
133+
134+
fun getPeerFingerprint(peerID: String): String? {
135+
return peerIDToPublicKeyFingerprint[peerID]
136+
}
137+
138+
fun getPeerFingerprints(): Map<String, String> {
139+
return peerIDToPublicKeyFingerprint.toMap()
113140
}
114141

115142
// MARK: - Block/Unblock Operations
@@ -262,10 +289,6 @@ class PrivateChatManager(
262289

263290
// MARK: - Public Getters
264291

265-
fun getPeerFingerprint(peerID: String): String? {
266-
return peerIDToPublicKeyFingerprint[peerID]
267-
}
268-
269292
fun getAllPeerFingerprints(): Map<String, String> {
270293
return peerIDToPublicKeyFingerprint.toMap()
271294
}

app/src/main/java/com/bitchat/android/ui/SidebarComponents.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.bitchat.android.ui
22

3+
import android.util.Log
34
import androidx.compose.animation.*
45
import androidx.compose.animation.core.*
56
import androidx.compose.foundation.*
@@ -275,16 +276,22 @@ fun PeopleSection(
275276
)
276277

277278
sortedPeers.forEach { peerID ->
279+
val fingerprint = viewModel.privateChatManager.getPeerFingerprint(peerID)
280+
val isFavorite = favoritePeers.contains(fingerprint)
281+
278282
PeerItem(
279283
peerID = peerID,
280284
displayName = if (peerID == nickname) "You" else (peerNicknames[peerID] ?: peerID),
281285
signalStrength = peerRSSI[peerID] ?: 0,
282286
isSelected = peerID == selectedPrivatePeer,
283-
isFavorite = favoritePeers.contains(viewModel.privateChatManager.getPeerFingerprint(peerID)),
287+
isFavorite = isFavorite,
284288
hasUnreadDM = hasUnreadPrivateMessages.contains(peerID),
285289
colorScheme = colorScheme,
286290
onItemClick = { onPrivateChatStart(peerID) },
287-
onToggleFavorite = { viewModel.toggleFavorite(peerID) }
291+
onToggleFavorite = {
292+
Log.d("SidebarComponents", "Sidebar toggle favorite: peerID=$peerID, fingerprint=$fingerprint, currentFavorite=$isFavorite")
293+
viewModel.toggleFavorite(peerID)
294+
}
288295
)
289296
}
290297
}

0 commit comments

Comments
 (0)