//상대가 나를 차단했는지 알아보는 메소드
private fun loadOponentBlockFriends(userID: String) {
oponentBlockList.clear()
friendBlockDB
.child(userID) // friendDb 아래 userID 를 키로 갖는 하위 노드 찾음.
.addListenerForSingleValueEvent(object : ValueEventListener { // 함수는 데이터 변경을 단 한번만 기다림.
override fun onDataChange(dataSnapshot: DataSnapshot) { // RDB 에서 데이터 검색 성공 시 실행되는 콜백 함수.
Log.d("FirebaseDatabase", "#dudu loadOponentBlockFriends ")
// userDB 에 차단친구가 존재하는지 확인
if (dataSnapshot.exists()) {
val size = dataSnapshot.children.count()
Log.d(
"FirebaseDatabase",
"#dudu userBlockList dataSnapshot.exists() size = $size"
)
for (badfriendUidSnapshot in dataSnapshot.children) {
val badfriendUid = badfriendUidSnapshot.key
if (badfriendUid != null) {
oponentBlockList.add(badfriendUid)
}
}
Log.d(
"FirebaseDatabase",
"#dudu oponentBlockList.size = ${oponentBlockList.size}"
)
if(myId = oponentBlockList){
binding.DetailBtnChat.gone()
}
} else {
Log.d("FirebaseDatabase", "#dudu bad friends found for UID: $userID")
}
}
override fun onCancelled(databaseError: DatabaseError) { // DB 오류 처리하고 메시지 로깅
Log.d("FirebaseDatabase", "#dudu onCancelled", databaseError.toException())
}
})
}
loadOponentBlockFriends 메서드에서 상대방이 차단한 사용자 목록을 불러오지만, 이 목록을 활용하는 로직이 구현되어 있지 않았다. oponentBlockList는 데이터를 추가하는 부분이 없이, 비어 있다.
loadOponentBlockFriends 메서드의 결과가 DetailActivity의 나머지 부분과 연결되거나 활용되지 않고 있습니다.
// Firebase DB 참조
friendBlockDB = Firebase.database.reference.child("Friends_block")
// selectedUserId는 intent.getStringExtra("userId")를 통해 DetailActivity로 전달된 선택된 사용자의 UID를 받아오기 위해 사용됩니다.
//이는 DetailActivity가 시작될 때 전달되는 인텐트에서 추출된 데이터로, 다른 사용자의 상세 정보를 표시하기 위해 필요합니다.
// 현재 사용자의 UID = myId, 선택한 사용자의 UID = userID
// A가 B를 차단했는지 확인
userID?.let { selectedUserId -> // "userId" 를 통해 DetailActivity 로 전달된 userId UID 받기 위해 사용
// 선택된 사용자('selectedUserId') 가 현재 사용자('myId') 를 차단했는지 확인
friendBlockDB.child(selectedUserId).child(myId.toString())
.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
// 데이터를 성공적으로 가져온 경우
if (snapshot.exists()) { // 해당 경로에 데이터 존재하는지 확인하여 차단 여부 판단
// A가 B를 차단한 경우 차단 안내 토스트 메시지 표시
Toast.makeText(
this@DetailActivity,
"해당 사용자가 당신을 차단했습니다.\n채팅신청이 불가능합니다.",
Toast.LENGTH_SHORT
).show()
// 채팅하기 UI 숨기기
hideFriendInteractionUI()
}
}
override fun onCancelled(error: DatabaseError) {
// 처리 중 오류 발생한 경우
Toast.makeText(
this@DetailActivity,
"데이터 처리에 실패했습니다.\n다시 시도해주세요.",
Toast.LENGTH_SHORT
).show()
}
})
}
}
private fun hideFriendInteractionUI() {
// 채팅하기 버튼 숨기기
binding.DetailBtnChat.visibility = View.GONE
binding.DetailTxtChat.visibility = View.GONE
}
DetailActivity 내에서 상대방이 현재 사용자를 차단했는지를 직접 확인하는 로직을 추가했다. friendBlockDB.child(selectedUserId).child(myId.toString())를 통해 현재 사용자(myId)가 상대방(selectedUserId)에 의해 차단되었는지 확인한다.
차단된 경우, 토스트 메시지를 표시하고 채팅 관련 UI를 숨기는 hideFriendInteractionUI 함수를 호출한다.
userID?.let { selectedUserId -> ... } 구문을 사용하여 선택된 사용자의 UID(selectedUserId)를 활용한다. 이를 통해 현재 사용자가 선택한 사용자에 의해 차단되었는지 직접 확인하고, 그에 따른 적절한 UI 조정을 수행한다.
상대방이 현재 사용자를 차단했는지 확인하는 로직이 누락되어
차단된 사용자가 상세 페이지에 접근했을 때 그에 따른 UI 조정이 이루어지지 않았다.
감사합니다. 이런 정보를 나눠주셔서 좋아요.