mirror of
https://github.com/permissionlesstech/bitchat-android.git
synced 2026-07-25 12:45:20 +00:00
fix favorites
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package com.bitchat.android.ui
|
||||
|
||||
import android.util.Log
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.text.BasicTextField
|
||||
@@ -253,7 +254,10 @@ private fun PrivateChatHeader(
|
||||
|
||||
// Favorite button - positioned on the right
|
||||
IconButton(
|
||||
onClick = onToggleFavorite,
|
||||
onClick = {
|
||||
Log.d("ChatHeader", "Header toggle favorite: peerID=$peerID, currentFavorite=$isFavorite")
|
||||
onToggleFavorite()
|
||||
},
|
||||
modifier = Modifier.align(Alignment.CenterEnd)
|
||||
) {
|
||||
Icon(
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.bitchat.android.ui
|
||||
|
||||
import android.util.Log
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MediatorLiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
@@ -188,6 +189,7 @@ class ChatState {
|
||||
}
|
||||
|
||||
fun setFavoritePeers(favorites: Set<String>) {
|
||||
Log.d("ChatState", "setFavoritePeers called with ${favorites.size} favorites: $favorites")
|
||||
_favoritePeers.value = favorites
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.bitchat.android.ui
|
||||
|
||||
import android.app.Application
|
||||
import android.content.Context
|
||||
import android.util.Log
|
||||
import androidx.lifecycle.AndroidViewModel
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.viewModelScope
|
||||
@@ -100,6 +101,10 @@ class ChatViewModel(
|
||||
state.setFavoritePeers(dataManager.favoritePeers)
|
||||
dataManager.loadBlockedUsers()
|
||||
|
||||
// Log all favorites at startup
|
||||
dataManager.logAllFavorites()
|
||||
logCurrentFavoriteState()
|
||||
|
||||
// Note: Mesh service is now started by MainActivity
|
||||
|
||||
// Show welcome message if no peers after delay
|
||||
@@ -249,7 +254,19 @@ class ChatViewModel(
|
||||
}
|
||||
|
||||
fun toggleFavorite(peerID: String) {
|
||||
Log.d("ChatViewModel", "toggleFavorite called for peerID: $peerID")
|
||||
privateChatManager.toggleFavorite(peerID)
|
||||
|
||||
// Log current state after toggle
|
||||
logCurrentFavoriteState()
|
||||
}
|
||||
|
||||
private fun logCurrentFavoriteState() {
|
||||
Log.i("ChatViewModel", "=== CURRENT FAVORITE STATE ===")
|
||||
Log.i("ChatViewModel", "LiveData favorite peers: ${favoritePeers.value}")
|
||||
Log.i("ChatViewModel", "DataManager favorite peers: ${dataManager.favoritePeers}")
|
||||
Log.i("ChatViewModel", "Peer fingerprints: ${privateChatManager.getAllPeerFingerprints()}")
|
||||
Log.i("ChatViewModel", "==============================")
|
||||
}
|
||||
|
||||
// MARK: - Debug and Troubleshooting
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.bitchat.android.ui
|
||||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.util.Log
|
||||
import com.google.gson.Gson
|
||||
import kotlin.random.Random
|
||||
|
||||
@@ -10,6 +11,10 @@ import kotlin.random.Random
|
||||
*/
|
||||
class DataManager(private val context: Context) {
|
||||
|
||||
companion object {
|
||||
private const val TAG = "DataManager"
|
||||
}
|
||||
|
||||
private val prefs: SharedPreferences = context.getSharedPreferences("bitchat_prefs", Context.MODE_PRIVATE)
|
||||
private val gson = Gson()
|
||||
|
||||
@@ -126,24 +131,41 @@ class DataManager(private val context: Context) {
|
||||
fun loadFavorites() {
|
||||
val savedFavorites = prefs.getStringSet("favorites", emptySet()) ?: emptySet()
|
||||
_favoritePeers.addAll(savedFavorites)
|
||||
Log.d(TAG, "Loaded ${savedFavorites.size} favorite users from storage: $savedFavorites")
|
||||
}
|
||||
|
||||
fun saveFavorites() {
|
||||
prefs.edit().putStringSet("favorites", _favoritePeers).apply()
|
||||
Log.d(TAG, "Saved ${_favoritePeers.size} favorite users to storage: $_favoritePeers")
|
||||
}
|
||||
|
||||
fun addFavorite(fingerprint: String) {
|
||||
_favoritePeers.add(fingerprint)
|
||||
val wasAdded = _favoritePeers.add(fingerprint)
|
||||
Log.d(TAG, "addFavorite: fingerprint=$fingerprint, wasAdded=$wasAdded")
|
||||
saveFavorites()
|
||||
logAllFavorites()
|
||||
}
|
||||
|
||||
fun removeFavorite(fingerprint: String) {
|
||||
_favoritePeers.remove(fingerprint)
|
||||
val wasRemoved = _favoritePeers.remove(fingerprint)
|
||||
Log.d(TAG, "removeFavorite: fingerprint=$fingerprint, wasRemoved=$wasRemoved")
|
||||
saveFavorites()
|
||||
logAllFavorites()
|
||||
}
|
||||
|
||||
fun isFavorite(fingerprint: String): Boolean {
|
||||
return _favoritePeers.contains(fingerprint)
|
||||
val result = _favoritePeers.contains(fingerprint)
|
||||
Log.d(TAG, "isFavorite check: fingerprint=$fingerprint, result=$result")
|
||||
return result
|
||||
}
|
||||
|
||||
fun logAllFavorites() {
|
||||
Log.i(TAG, "=== ALL FAVORITE USERS ===")
|
||||
Log.i(TAG, "Total favorites: ${_favoritePeers.size}")
|
||||
_favoritePeers.forEach { fingerprint ->
|
||||
Log.i(TAG, "Favorite fingerprint: $fingerprint")
|
||||
}
|
||||
Log.i(TAG, "========================")
|
||||
}
|
||||
|
||||
// MARK: - Blocked Users Management
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.bitchat.android.ui
|
||||
import com.bitchat.android.model.BitchatMessage
|
||||
import com.bitchat.android.model.DeliveryStatus
|
||||
import java.util.*
|
||||
import android.util.Log
|
||||
|
||||
/**
|
||||
* Handles private chat functionality including peer management and blocking
|
||||
@@ -13,6 +14,10 @@ class PrivateChatManager(
|
||||
private val dataManager: DataManager
|
||||
) {
|
||||
|
||||
companion object {
|
||||
private const val TAG = "PrivateChatManager"
|
||||
}
|
||||
|
||||
// Peer identification mapping
|
||||
private val peerIDToPublicKeyFingerprint = mutableMapOf<String, String>()
|
||||
|
||||
@@ -99,17 +104,39 @@ class PrivateChatManager(
|
||||
fun toggleFavorite(peerID: String) {
|
||||
val fingerprint = peerIDToPublicKeyFingerprint[peerID] ?: return
|
||||
|
||||
if (dataManager.isFavorite(fingerprint)) {
|
||||
Log.d(TAG, "toggleFavorite called for peerID: $peerID, fingerprint: $fingerprint")
|
||||
|
||||
val wasFavorite = dataManager.isFavorite(fingerprint)
|
||||
Log.d(TAG, "Current favorite status: $wasFavorite")
|
||||
|
||||
if (wasFavorite) {
|
||||
dataManager.removeFavorite(fingerprint)
|
||||
Log.d(TAG, "Removed from favorites: $fingerprint")
|
||||
} else {
|
||||
dataManager.addFavorite(fingerprint)
|
||||
Log.d(TAG, "Added to favorites: $fingerprint")
|
||||
}
|
||||
|
||||
// Update state to trigger UI refresh
|
||||
state.setFavoritePeers(dataManager.favoritePeers)
|
||||
|
||||
Log.d(TAG, "Updated favorite peers state. New favorites: ${dataManager.favoritePeers}")
|
||||
Log.d(TAG, "All peer fingerprints: $peerIDToPublicKeyFingerprint")
|
||||
}
|
||||
|
||||
fun isFavorite(peerID: String): Boolean {
|
||||
val fingerprint = peerIDToPublicKeyFingerprint[peerID] ?: return false
|
||||
return dataManager.isFavorite(fingerprint)
|
||||
val isFav = dataManager.isFavorite(fingerprint)
|
||||
Log.d(TAG, "isFavorite check: peerID=$peerID, fingerprint=$fingerprint, result=$isFav")
|
||||
return isFav
|
||||
}
|
||||
|
||||
fun getPeerFingerprint(peerID: String): String? {
|
||||
return peerIDToPublicKeyFingerprint[peerID]
|
||||
}
|
||||
|
||||
fun getPeerFingerprints(): Map<String, String> {
|
||||
return peerIDToPublicKeyFingerprint.toMap()
|
||||
}
|
||||
|
||||
// MARK: - Block/Unblock Operations
|
||||
@@ -262,10 +289,6 @@ class PrivateChatManager(
|
||||
|
||||
// MARK: - Public Getters
|
||||
|
||||
fun getPeerFingerprint(peerID: String): String? {
|
||||
return peerIDToPublicKeyFingerprint[peerID]
|
||||
}
|
||||
|
||||
fun getAllPeerFingerprints(): Map<String, String> {
|
||||
return peerIDToPublicKeyFingerprint.toMap()
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.bitchat.android.ui
|
||||
|
||||
import android.util.Log
|
||||
import androidx.compose.animation.*
|
||||
import androidx.compose.animation.core.*
|
||||
import androidx.compose.foundation.*
|
||||
@@ -275,16 +276,22 @@ fun PeopleSection(
|
||||
)
|
||||
|
||||
sortedPeers.forEach { peerID ->
|
||||
val fingerprint = viewModel.privateChatManager.getPeerFingerprint(peerID)
|
||||
val isFavorite = favoritePeers.contains(fingerprint)
|
||||
|
||||
PeerItem(
|
||||
peerID = peerID,
|
||||
displayName = if (peerID == nickname) "You" else (peerNicknames[peerID] ?: peerID),
|
||||
signalStrength = peerRSSI[peerID] ?: 0,
|
||||
isSelected = peerID == selectedPrivatePeer,
|
||||
isFavorite = favoritePeers.contains(viewModel.privateChatManager.getPeerFingerprint(peerID)),
|
||||
isFavorite = isFavorite,
|
||||
hasUnreadDM = hasUnreadPrivateMessages.contains(peerID),
|
||||
colorScheme = colorScheme,
|
||||
onItemClick = { onPrivateChatStart(peerID) },
|
||||
onToggleFavorite = { viewModel.toggleFavorite(peerID) }
|
||||
onToggleFavorite = {
|
||||
Log.d("SidebarComponents", "Sidebar toggle favorite: peerID=$peerID, fingerprint=$fingerprint, currentFavorite=$isFavorite")
|
||||
viewModel.toggleFavorite(peerID)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user