diff --git a/app/src/main/java/umc/onairmate/ui/chat_room/drawer/participants/ChatRoomParticipantRVAdapter.kt b/app/src/main/java/umc/onairmate/ui/chat_room/drawer/participants/ChatRoomParticipantRVAdapter.kt index 517a24a1..18c4c429 100644 --- a/app/src/main/java/umc/onairmate/ui/chat_room/drawer/participants/ChatRoomParticipantRVAdapter.kt +++ b/app/src/main/java/umc/onairmate/ui/chat_room/drawer/participants/ChatRoomParticipantRVAdapter.kt @@ -6,6 +6,7 @@ import android.view.ViewGroup import android.widget.LinearLayout import android.widget.PopupWindow import androidx.recyclerview.widget.RecyclerView +import umc.onairmate.R import umc.onairmate.data.model.entity.ParticipantData import umc.onairmate.databinding.PopupParticipantOptionsBinding import umc.onairmate.databinding.RvItemChatRoomUserBinding @@ -72,8 +73,18 @@ class ChatRoomParticipantRVAdapter( popupWindow.dismiss() } popupBinding.tvBlock.setOnClickListener { - itemClick.clickBlock(data) + //itemClick.clickBlock(data) popupWindow.dismiss() + + // 다이얼로그 뷰 inflate + val dialogView = LayoutInflater.from(anchorView.context) + .inflate(R.layout.dialog_block, null) + + val dialog = android.app.AlertDialog.Builder(anchorView.context) + .setView(dialogView) + .create() + + dialog.show() } popupWindow.showAsDropDown(anchorView, offsetX, offsetY) diff --git a/app/src/main/java/umc/onairmate/ui/friend/list/FriendListTabFragment.kt b/app/src/main/java/umc/onairmate/ui/friend/list/FriendListTabFragment.kt index 4870a3d4..db2c4346 100644 --- a/app/src/main/java/umc/onairmate/ui/friend/list/FriendListTabFragment.kt +++ b/app/src/main/java/umc/onairmate/ui/friend/list/FriendListTabFragment.kt @@ -1,14 +1,12 @@ package umc.onairmate.ui.friend.list import android.content.Context -import android.content.Intent -import androidx.fragment.app.Fragment import android.os.Bundle -import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast +import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager @@ -18,26 +16,24 @@ import umc.onairmate.data.model.entity.RequestedFriendData import umc.onairmate.data.model.entity.UserData import umc.onairmate.databinding.FragmentFriendListTabBinding import umc.onairmate.ui.friend.FriendViewModel -import umc.onairmate.ui.friend.chat.FriendChatActivity import umc.onairmate.ui.friend.chat.FriendChatViewModel import umc.onairmate.ui.pop_up.PopupClick import umc.onairmate.ui.pop_up.TwoButtonPopup import umc.onairmate.ui.util.SharedPrefUtil -import kotlin.getValue @AndroidEntryPoint class FriendListTabFragment() : Fragment() { - private val TAG = this.javaClass.simpleName + private var _binding: FragmentFriendListTabBinding? = null private val binding get() = _binding!! - private lateinit var adapter : FriendListRVAdapter + private lateinit var adapter: FriendListRVAdapter private val viewModel: FriendViewModel by viewModels() private val friendChatViewModel: FriendChatViewModel by viewModels() - private var user : UserData = UserData() - private var friendId : Int = 0 - private var type : Int = 0 + private var user: UserData = UserData() + private var friendId: Int = 0 + private var type: Int = 0 companion object { private const val ARG_POSITION = "arg_position" @@ -52,7 +48,6 @@ class FriendListTabFragment() : Fragment() { const val LIST_TYPE = 0 const val REQUEST_TYPE = 1 - } override fun onCreateView( @@ -61,13 +56,13 @@ class FriendListTabFragment() : Fragment() { savedInstanceState: Bundle? ): View { _binding = FragmentFriendListTabBinding.inflate(inflater, container, false) - val root: View = binding.root type = arguments?.getInt(ARG_POSITION) ?: 0 setAdapter() setObservers() + setBindings() - return root + return binding.root } override fun onResume() { @@ -80,92 +75,95 @@ class FriendListTabFragment() : Fragment() { _binding = null } - private fun initData(){ + private fun initData() { if (type == LIST_TYPE) viewModel.getFriendList() if (type == REQUEST_TYPE) viewModel.getRequestedFriendList() - user = SharedPrefUtil.getData("user_info")?: UserData() + user = SharedPrefUtil.getData("user_info") ?: UserData() } private fun setObservers() { viewModel.friendList.observe(viewLifecycleOwner, Observer { list -> - if (list == null) return@Observer binding.tvEmptyMessage.text = "아직 친구가 없습니다.\n함께할 친구를 초대해보세요!" - binding.layoutEmpty.visibility = if (list.isEmpty()) View.VISIBLE else View.GONE - adapter.initFriendList(list) + binding.layoutEmpty.visibility = if (list.isNullOrEmpty()) View.VISIBLE else View.GONE + adapter.initFriendList(list ?: emptyList()) }) viewModel.requestedFriendList.observe(viewLifecycleOwner, Observer { list -> - if (list == null) return@Observer binding.tvEmptyMessage.text = "받은 친구 요청이 아직 없어요." - binding.layoutEmpty.visibility = if (list.isEmpty()) View.VISIBLE else View.GONE - adapter.initRequestList(list) + binding.layoutEmpty.visibility = if (list.isNullOrEmpty()) View.VISIBLE else View.GONE + adapter.initRequestList(list ?: emptyList()) }) viewModel.result.observe(viewLifecycleOwner, Observer { message -> - if (message == null) return@Observer - if (message == "친구가 삭제되었습니다.") friendChatViewModel.deleteFriend(friendId,user.userId) + message ?: return@Observer + if (message == "친구가 삭제되었습니다.") friendChatViewModel.deleteFriend(friendId, user.userId) initData() - Toast.makeText(requireContext(),message, Toast.LENGTH_SHORT).show() + Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show() viewModel.clearResult() }) } - private fun setAdapter(){ + private fun setAdapter() { adapter = FriendListRVAdapter(requireContext()) - adapter.setItemClickListener(object: FriendItemClickListener{ + adapter.setItemClickListener(object : FriendItemClickListener { override fun clickMessage(data: FriendData) { - val bundle = Bundle().apply { - putParcelable("friendData", data) - } + val bundle = Bundle().apply { putParcelable("friendData", data) } parentFragmentManager.setFragmentResult("open_friend_chat_activity", bundle) } override fun acceptRequest(data: RequestedFriendData) { - val text = data.nickname+"님의 친구요청을 수락하시겠습니까?" - val textList = listOf(text,"수락","거절") - showPopup( - text =textList, - left = { viewModel.acceptFriend(data.userId, "REJECT") }, - right = { viewModel.acceptFriend(data.userId, "ACCEPT")} ) + val textList = listOf("${data.nickname}님의 친구요청을 수락하시겠습니까?", "수락", "거절") + showPopup(textList, + left = { viewModel.acceptFriend(data.userId, "REJECT") }, + right = { viewModel.acceptFriend(data.userId, "ACCEPT") }) } - override fun clickCollection(data: FriendData) { - // 인탠트 필요 - } + override fun clickCollection(data: FriendData) {} override fun clickDelete(data: FriendData) { - val text = data.nickname+"님을 친구 목록에서 삭제하시겠습니까?" - val textList = listOf(text,"예","아니오") friendId = data.userId - showPopup(text =textList, left = { - viewModel.deleteFriend(data.userId) }, right = {} ) + val textList = listOf("${data.nickname}님을 친구 목록에서 삭제하시겠습니까?", "예", "아니오") + showPopup(textList, left = { viewModel.deleteFriend(data.userId) }, right = {}) } override fun clickBlock(data: FriendData) { - val text = data.nickname+"님을 차단하시겠습니까?" - val textList = listOf(text,"예","아니오") - showPopup(text =textList, left = { }, right = {} ) + val textList = listOf("${data.nickname}님을 차단하시겠습니까?", "예", "아니오") + showPopup(textList, left = { /* 차단 로직 */ }, right = { /* 취소 */ }) } override fun clickReport(data: FriendData) { - val text = data.nickname+"님을 신고하시겠습니까?" - val textList = listOf(text,"예","아니오") - showPopup(text =textList, left = { }, right = {} ) + val textList = listOf("${data.nickname}님을 신고하시겠습니까?", "예", "아니오") + showPopup(textList, left = { /* 신고 로직 */ }, right = { /* 취소 */ }) } - }) binding.rvFriendList.adapter = adapter binding.rvFriendList.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) } - - private fun showPopup(text : List, right : ()-> Unit?, left: () -> Unit?) { - val dialog = TwoButtonPopup(text,object : PopupClick{ + private fun showPopup(text: List, right: () -> Unit?, left: () -> Unit?) { + val dialog = TwoButtonPopup(text, object : PopupClick { override fun rightClickFunction() { right() } - override fun leftClickFunction() { - left() - } - }, false) // 뒤로 가기 막고 싶으면 false 넣어주세요, 아니면 생략가능합니다. + override fun leftClickFunction() { left() } + }, false) dialog.show(activity?.supportFragmentManager!!, "FriendPopup") } + // btn_block 클릭 시 popup 생성 + private fun setBindings() { + // 빈 화면 버튼이 보일 때만 작동 + binding.btnBlock.setOnClickListener { + val nickname = "친구" // 빈 화면 상태용 닉네임 + val textList = listOf("$nickname 님을 차단하시겠습니까?", "예", "아니오") + showPopup(textList, + left = { + Toast.makeText( + requireContext(), + "$nickname 님을 차단했습니다.", + Toast.LENGTH_SHORT + ).show() + }, + right = { + Toast.makeText(requireContext(), "차단 취소", Toast.LENGTH_SHORT).show() + }) + } + } } \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_block.xml b/app/src/main/res/layout/dialog_block.xml new file mode 100644 index 00000000..4c1b2bbf --- /dev/null +++ b/app/src/main/res/layout/dialog_block.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + +