From 30b682bbf72be8431432018ed83316d62d6aceb9 Mon Sep 17 00:00:00 2001 From: tama Date: Fri, 15 Aug 2025 01:53:57 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=ED=8C=9D=EC=97=85=EC=B0=BD=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fragment_friend_list.xml 에서 button 생성 후 팝업창 뜨는 것 확인 목적으로 리사이클러뷰 재배치함 필요시 돌려놓으면 됩니다) --- .../ui/friend/list/FriendListTabFragment.kt | 110 +++++++++--------- .../res/layout/fragment_friend_list_tab.xml | 57 ++++++++- 2 files changed, 108 insertions(+), 59 deletions(-) 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/fragment_friend_list_tab.xml b/app/src/main/res/layout/fragment_friend_list_tab.xml index fbf47c8e..91eb23a6 100644 --- a/app/src/main/res/layout/fragment_friend_list_tab.xml +++ b/app/src/main/res/layout/fragment_friend_list_tab.xml @@ -3,14 +3,15 @@ android:layout_width="match_parent" android:layout_height="wrap_content" xmlns:app="http://schemas.android.com/apk/res-auto"> + + - \ No newline at end of file + + + + + + + + +