From f4fca8298611ba6e58d04141f396f745f6d4864d Mon Sep 17 00:00:00 2001 From: SsongSik Date: Wed, 17 May 2023 22:13:07 +0900 Subject: [PATCH 01/26] =?UTF-8?q?[feat]=20:=20#15=20=EC=B9=9C=EA=B5=AC=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20view=20code=20?= =?UTF-8?q?=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/fragment_friend.xml | 59 +++++++++++---------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/app/src/main/res/layout/fragment_friend.xml b/app/src/main/res/layout/fragment_friend.xml index 033e8cdd..42e9771a 100644 --- a/app/src/main/res/layout/fragment_friend.xml +++ b/app/src/main/res/layout/fragment_friend.xml @@ -4,6 +4,7 @@ xmlns:tools="http://schemas.android.com/tools"> + @@ -18,63 +19,68 @@ android:id="@+id/friend_add_iv" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:layout_marginRight="20dp" android:src="@drawable/ic_friend_add" - app:layout_constraintTop_toTopOf="parent" app:layout_constraintRight_toRightOf="parent" - android:layout_marginTop="16dp" - android:layout_marginRight="20dp"/> + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toBottomOf="@id/friend_add_iv" /> + app:layout_constraintTop_toBottomOf="@id/friend_all_iv" /> + app:layout_constraintTop_toBottomOf="@id/friend_add_iv" + tools:listitem="@layout/item_friends_list" /> + + + app:layout_constraintTop_toBottomOf="@id/friend_all_tv" + tools:listitem="@layout/item_friend_detail_card" /> + app:layout_constraintTop_toTopOf="@id/friend_list_rv" /> - + app:layout_constraintTop_toBottomOf="@id/friend_not_iv" /> \ No newline at end of file From 987a4d702f6980e14668b63b84fdf258042a6087 Mon Sep 17 00:00:00 2001 From: SsongSik Date: Wed, 17 May 2023 22:30:40 +0900 Subject: [PATCH 02/26] =?UTF-8?q?[feat]=20:=20#15=20=EC=A0=84=EC=B2=B4=20?= =?UTF-8?q?=EC=B9=9C=EA=B5=AC=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pome/network/AddFriendsService.kt | 6 ++++ .../presentation/friend/FriendFragment.kt | 33 +++++++++++++++++++ .../repository/friend/AddFriendsDataSource.kt | 4 +++ .../friend/AddFriendsRemoteDataSource.kt | 4 +++ .../repository/friend/AddFriendsRepository.kt | 2 ++ .../pome/viewmodel/AddFriendsViewModel.kt | 12 +++++++ 6 files changed, 61 insertions(+) diff --git a/app/src/main/java/com/teampome/pome/network/AddFriendsService.kt b/app/src/main/java/com/teampome/pome/network/AddFriendsService.kt index 581ffa2e..95f5f96c 100644 --- a/app/src/main/java/com/teampome/pome/network/AddFriendsService.kt +++ b/app/src/main/java/com/teampome/pome/network/AddFriendsService.kt @@ -37,8 +37,14 @@ interface AddFriendsService { @Path("userId") userId: String ) : Response>> + //친구 삭제 @DELETE("api/v1/users/friend/{friendId}") suspend fun deleteFriend( @Path("friendId") friendId: String ) : Response> + + //모든 친구 기록 조회 + @GET("api/v1/records/friends") + suspend fun getAllFriendRecord() : + Response>> } \ No newline at end of file diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt index 9758e1e4..0067ab81 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt @@ -24,6 +24,7 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri override fun initView() { setUpRecyclerView() friendRecordSetUpRecyclerView() + getAllFriendRecord() //친구 조회 viewModel.getFriend(object : CoroutineErrorHandler{ @@ -65,13 +66,36 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri } } is ApiResponse.Failure -> { + hideLoading() + } + is ApiResponse.Loading -> { + showLoading() + } + } + } + viewModel.getAllFriendRecordResponse.observe(viewLifecycleOwner){ + when(it) { + is ApiResponse.Success -> { + hideLoading() + it.data.data?.content?.let { list -> + (binding.friendDetailRv.adapter as FriendRecordGetAdapter).submitList( + list + ) + } + } + is ApiResponse.Failure -> { + hideLoading() } is ApiResponse.Loading -> { showLoading() } } } + + binding.friendAllIv.setOnClickListener { + getAllFriendRecord() + } } //친구 목록 조회 RV @@ -113,4 +137,13 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri Toast.makeText(requireContext(), "${it.nickname}", Toast.LENGTH_SHORT).show() } } + + private fun getAllFriendRecord() { + viewModel.getAllRecordFriend(object : CoroutineErrorHandler{ + override fun onError(message: String) { + Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show() + hideLoading() + } + }) + } } \ No newline at end of file diff --git a/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsDataSource.kt b/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsDataSource.kt index 58cf82cc..558404ea 100644 --- a/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsDataSource.kt +++ b/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsDataSource.kt @@ -21,7 +21,11 @@ interface AddFriendsDataSource { userId : String ) : Flow>>> + //친구 삭제 fun deleteFriend( friendId: String ) : Flow>> + + //모든 친구 기록 조회 + fun getAllFriendRecord() : Flow>>> } \ No newline at end of file diff --git a/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsRemoteDataSource.kt b/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsRemoteDataSource.kt index 2c2fe781..df807c9a 100644 --- a/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsRemoteDataSource.kt +++ b/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsRemoteDataSource.kt @@ -34,4 +34,8 @@ class AddFriendsRemoteDataSource @Inject constructor( override fun deleteFriend(friendId: String): Flow>> = apiRequestFlow{ service.deleteFriend(friendId) } + + override fun getAllFriendRecord(): Flow>>> = apiRequestFlow { + service.getAllFriendRecord() + } } \ No newline at end of file diff --git a/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsRepository.kt b/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsRepository.kt index dd1b7cf8..c26a87f3 100644 --- a/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsRepository.kt +++ b/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsRepository.kt @@ -13,4 +13,6 @@ class AddFriendsRepository @Inject constructor( fun getFriendRecord(userId : String) = dataSource.getFriendRecord(userId) fun deleteFriend(friendId: String) = dataSource.deleteFriend(friendId) + + fun getAllFriendRecord() = dataSource.getAllFriendRecord() } \ No newline at end of file diff --git a/app/src/main/java/com/teampome/pome/viewmodel/AddFriendsViewModel.kt b/app/src/main/java/com/teampome/pome/viewmodel/AddFriendsViewModel.kt index 311cefe1..a0b93cdd 100644 --- a/app/src/main/java/com/teampome/pome/viewmodel/AddFriendsViewModel.kt +++ b/app/src/main/java/com/teampome/pome/viewmodel/AddFriendsViewModel.kt @@ -45,6 +45,10 @@ class AddFriendsViewModel @Inject constructor( private val _deleteFriendResponse = MutableLiveData>>() val deleteFriendResponse : LiveData>> = _deleteFriendResponse + //모든 친구 기록 조회 + private val _getAllFriendRecordResponse = MutableLiveData>>>() + val getAllFriendRecordResponse : LiveData>>> = _getAllFriendRecordResponse + fun findFriendsData(nickName: String, coroutineErrorHandler: CoroutineErrorHandler) = baseRequest( _findFriendsDataResponse, @@ -80,6 +84,7 @@ class AddFriendsViewModel @Inject constructor( repository.getFriendRecord(userId) } + //친구 삭제 fun deleteFriend(friendId : String, coroutineErrorHandler: CoroutineErrorHandler) = baseRequest( _deleteFriendResponse, coroutineErrorHandler @@ -87,6 +92,13 @@ class AddFriendsViewModel @Inject constructor( repository.deleteFriend(friendId) } + fun getAllRecordFriend(coroutineErrorHandler: CoroutineErrorHandler) = baseRequest( + _getAllFriendRecordResponse, + coroutineErrorHandler + ){ + repository.getAllFriendRecord() + } + //친구 조회 val friendGet: LiveData> = Transformations.map(_getFriendResponse) { when(it) { From 40cf3ca1fdb435023967d861860e852e4f92b633 Mon Sep 17 00:00:00 2001 From: SsongSik Date: Wed, 17 May 2023 23:43:13 +0900 Subject: [PATCH 03/26] =?UTF-8?q?[feat]=20:=20#15=20=EC=B9=9C=EA=B5=AC=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EB=B6=84=EA=B8=B0=EC=B2=98?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/friend/FriendFragment.kt | 19 +++++++++++-------- .../res/layout/item_friend_detail_card.xml | 9 +++++++++ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt index 0067ab81..f943a307 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt @@ -1,6 +1,7 @@ package com.teampome.pome.presentation.friend import android.util.Log +import android.view.View import android.widget.Toast import androidx.fragment.app.viewModels import androidx.recyclerview.widget.DividerItemDecoration @@ -42,9 +43,16 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri when(it) { is ApiResponse.Success -> { it.data.data?.let { list -> - (binding.friendListRv.adapter as FriendGetAdapter).submitList( - list - ) + if(list.isEmpty()) { + binding.friendNotIv.visibility = View.VISIBLE + binding.friendNotTv.visibility = View.VISIBLE + } else { + binding.friendNotIv.visibility = View.GONE + binding.friendNotTv.visibility = View.GONE + (binding.friendListRv.adapter as FriendGetAdapter).submitList( + list + ) + } } } is ApiResponse.Failure -> { @@ -125,11 +133,6 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri // setHasFixedSize(true) layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false) adapter = friendRecordGetAdapter - addItemDecoration( - DividerItemDecoration( - requireContext(), DividerItemDecoration.VERTICAL - ) - ) } // 클릭 리스너 diff --git a/app/src/main/res/layout/item_friend_detail_card.xml b/app/src/main/res/layout/item_friend_detail_card.xml index 5bc9071c..497b51ec 100644 --- a/app/src/main/res/layout/item_friend_detail_card.xml +++ b/app/src/main/res/layout/item_friend_detail_card.xml @@ -231,6 +231,15 @@ android:layout_marginRight="24dp" app:layout_constraintTop_toTopOf="@+id/friend_detail_friends_emotion_container_cl"/> + + \ No newline at end of file From b32417df981fa2c6ddbbf117f5f56e762bb50b88 Mon Sep 17 00:00:00 2001 From: SsongSik Date: Fri, 19 May 2023 17:01:20 +0900 Subject: [PATCH 04/26] =?UTF-8?q?[feat]=20:=20#15=20=EB=8D=94=EB=B3=B4?= =?UTF-8?q?=EA=B8=B0=20=EB=B0=94=ED=85=80=EB=8B=A4=EC=9D=B4=EC=96=BC?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=20=EC=85=8B=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../friend/FriendDetailRecordClickListener.kt | 7 ++++ .../presentation/friend/FriendFragment.kt | 42 +++++++++++++++++-- .../friend/FriendRecordGetAdapter.kt | 14 ++++++- .../res/layout/item_friend_detail_card.xml | 2 +- 4 files changed, 58 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/com/teampome/pome/presentation/friend/FriendDetailRecordClickListener.kt diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendDetailRecordClickListener.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendDetailRecordClickListener.kt new file mode 100644 index 00000000..4075d246 --- /dev/null +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendDetailRecordClickListener.kt @@ -0,0 +1,7 @@ +package com.teampome.pome.presentation.friend + +//친구 기록 클릭 리스너 +interface FriendDetailRecordClickListener { + + fun onFriendDetailMoreClick() +} \ No newline at end of file diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt index f943a307..d22185cf 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt @@ -6,8 +6,12 @@ import android.widget.Toast import androidx.fragment.app.viewModels import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager +import com.google.android.material.bottomsheet.BottomSheetDialog import com.teampome.pome.R import com.teampome.pome.databinding.FragmentFriendBinding +import com.teampome.pome.databinding.PomeCalendarBottomSheetDialogBinding +import com.teampome.pome.databinding.PomeFriendSettingBottomSheetDialogBinding +import com.teampome.pome.databinding.PomeRecordMoreGoalBottomSheetDialogBinding import com.teampome.pome.util.base.ApiResponse import com.teampome.pome.util.base.BaseFragment import com.teampome.pome.util.base.CoroutineErrorHandler @@ -15,17 +19,21 @@ import com.teampome.pome.viewmodel.AddFriendsViewModel import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint -class FriendFragment : BaseFragment(R.layout.fragment_friend) { +class FriendFragment : BaseFragment(R.layout.fragment_friend), FriendDetailRecordClickListener { private val viewModel: AddFriendsViewModel by viewModels() private lateinit var friendGetAdapter: FriendGetAdapter private lateinit var friendRecordGetAdapter: FriendRecordGetAdapter + private lateinit var pomeFriendSettingBottomSheetDialogBinding : PomeFriendSettingBottomSheetDialogBinding + private lateinit var friendSettingBottomSheetDialog: BottomSheetDialog + override fun initView() { setUpRecyclerView() friendRecordSetUpRecyclerView() getAllFriendRecord() + makeFriendSettingBottomDialog() //친구 조회 viewModel.getFriend(object : CoroutineErrorHandler{ @@ -42,6 +50,7 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri viewModel.getFriendsResponse.observe(viewLifecycleOwner) { when(it) { is ApiResponse.Success -> { + hideLoading() it.data.data?.let { list -> if(list.isEmpty()) { binding.friendNotIv.visibility = View.VISIBLE @@ -56,9 +65,11 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri } } is ApiResponse.Failure -> { - + hideLoading() + } + is ApiResponse.Loading -> { + showLoading() } - is ApiResponse.Loading -> {} } } @@ -128,7 +139,7 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri //친구 기록 조회 RV private fun friendRecordSetUpRecyclerView(){ - friendRecordGetAdapter = FriendRecordGetAdapter() + friendRecordGetAdapter = FriendRecordGetAdapter(this) binding.friendDetailRv.apply { // setHasFixedSize(true) layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false) @@ -149,4 +160,27 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri } }) } + + private fun makeFriendSettingBottomDialog() { + friendSettingBottomSheetDialog = BottomSheetDialog(requireContext()) + pomeFriendSettingBottomSheetDialogBinding = PomeFriendSettingBottomSheetDialogBinding.inflate(layoutInflater, null, false) + + friendSettingBottomSheetDialog.setContentView(pomeFriendSettingBottomSheetDialogBinding.root) + + pomeFriendSettingBottomSheetDialogBinding.apply{ + //숨기기 + pomeFriendBottomSheetDialogHideTv.setOnClickListener { + friendSettingBottomSheetDialog.dismiss() + } + + //신고 + pomeFriendBottomSheetDialogReportTv.setOnClickListener { + friendSettingBottomSheetDialog.dismiss() + } + } + } + + override fun onFriendDetailMoreClick() { + friendSettingBottomSheetDialog.show() + } } \ No newline at end of file diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt index 1d9b6772..4c5aadc0 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt @@ -11,10 +11,13 @@ import com.teampome.pome.model.response.GetFriendRecord import com.teampome.pome.model.response.GetFriends //친구 기록 조회 -class FriendRecordGetAdapter : ListAdapter(BookDiffCallback) { +class FriendRecordGetAdapter( + private val clickListener: FriendDetailRecordClickListener +) : ListAdapter(BookDiffCallback) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FriendGetRecordViewHolder { return FriendGetRecordViewHolder( + clickListener, ItemFriendDetailCardBinding.inflate(LayoutInflater.from(parent.context), parent, false), ) } @@ -33,11 +36,18 @@ class FriendRecordGetAdapter : ListAdapter Date: Sat, 20 May 2023 20:01:12 +0900 Subject: [PATCH 05/26] =?UTF-8?q?[feat]=20:=20#15=20=EA=B2=8C=EC=8B=9C?= =?UTF-8?q?=EB=AC=BC=20=EC=88=A8=EA=B8=B0=EA=B8=B0=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pome/model/response/DeleteFriendRecord.kt | 6 +++++ .../pome/network/AddFriendsService.kt | 7 +++++ .../friend/FriendDetailRecordClickListener.kt | 2 +- .../presentation/friend/FriendFragment.kt | 27 ++++++++++++++++--- .../friend/FriendRecordGetAdapter.kt | 2 +- .../repository/friend/AddFriendsDataSource.kt | 3 +++ .../friend/AddFriendsRemoteDataSource.kt | 5 ++++ .../repository/friend/AddFriendsRepository.kt | 2 ++ .../pome/viewmodel/AddFriendsViewModel.kt | 10 +++++++ 9 files changed, 59 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/com/teampome/pome/model/response/DeleteFriendRecord.kt diff --git a/app/src/main/java/com/teampome/pome/model/response/DeleteFriendRecord.kt b/app/src/main/java/com/teampome/pome/model/response/DeleteFriendRecord.kt new file mode 100644 index 00000000..f05b0f7b --- /dev/null +++ b/app/src/main/java/com/teampome/pome/model/response/DeleteFriendRecord.kt @@ -0,0 +1,6 @@ +package com.teampome.pome.model.response + +//친구 삭제 Response +data class DeleteFriendRecord( + val data : Boolean +) diff --git a/app/src/main/java/com/teampome/pome/network/AddFriendsService.kt b/app/src/main/java/com/teampome/pome/network/AddFriendsService.kt index 95f5f96c..b11c3176 100644 --- a/app/src/main/java/com/teampome/pome/network/AddFriendsService.kt +++ b/app/src/main/java/com/teampome/pome/network/AddFriendsService.kt @@ -4,6 +4,7 @@ import com.teampome.pome.model.base.BaseAllData import com.teampome.pome.model.base.BasePomeResponse import com.teampome.pome.model.friend.FriendData import com.teampome.pome.model.response.DeleteFriend +import com.teampome.pome.model.response.DeleteFriendRecord import com.teampome.pome.model.response.GetFriendRecord import com.teampome.pome.model.response.GetFriends import retrofit2.Response @@ -47,4 +48,10 @@ interface AddFriendsService { @GET("api/v1/records/friends") suspend fun getAllFriendRecord() : Response>> + + //기록 숨기기 + @DELETE("api/v1/records/{recordId}") + suspend fun deleteFriendRecord( + @Path("recordId") recordId: Int + ) : Response> } \ No newline at end of file diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendDetailRecordClickListener.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendDetailRecordClickListener.kt index 4075d246..65a0a601 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendDetailRecordClickListener.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendDetailRecordClickListener.kt @@ -3,5 +3,5 @@ package com.teampome.pome.presentation.friend //친구 기록 클릭 리스너 interface FriendDetailRecordClickListener { - fun onFriendDetailMoreClick() + fun onFriendDetailMoreClick(recordId : Int) } \ No newline at end of file diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt index d22185cf..53db5195 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt @@ -33,7 +33,6 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri setUpRecyclerView() friendRecordSetUpRecyclerView() getAllFriendRecord() - makeFriendSettingBottomDialog() //친구 조회 viewModel.getFriend(object : CoroutineErrorHandler{ @@ -112,6 +111,21 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri } } + viewModel.deleteFriendRecord.observe(viewLifecycleOwner) { + when(it) { + is ApiResponse.Success -> { + hideLoading() + Toast.makeText(requireContext(), "해당 게시글을 숨겼어요", Toast.LENGTH_SHORT).show() + } + is ApiResponse.Failure -> { + hideLoading() + } + is ApiResponse.Loading -> { + showLoading() + } + } + } + binding.friendAllIv.setOnClickListener { getAllFriendRecord() } @@ -161,7 +175,7 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri }) } - private fun makeFriendSettingBottomDialog() { + private fun makeFriendSettingBottomDialog(recordId: Int) { friendSettingBottomSheetDialog = BottomSheetDialog(requireContext()) pomeFriendSettingBottomSheetDialogBinding = PomeFriendSettingBottomSheetDialogBinding.inflate(layoutInflater, null, false) @@ -170,6 +184,12 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri pomeFriendSettingBottomSheetDialogBinding.apply{ //숨기기 pomeFriendBottomSheetDialogHideTv.setOnClickListener { + viewModel.deleteFriendRecord(recordId, object : CoroutineErrorHandler{ + override fun onError(message: String) { + Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show() + hideLoading() + } + }) friendSettingBottomSheetDialog.dismiss() } @@ -180,7 +200,8 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri } } - override fun onFriendDetailMoreClick() { + override fun onFriendDetailMoreClick(recordId : Int) { + makeFriendSettingBottomDialog(recordId) friendSettingBottomSheetDialog.show() } } \ No newline at end of file diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt index 4c5aadc0..f5f73c5f 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt @@ -45,7 +45,7 @@ class FriendRecordGetAdapter( getFriendRecord = getFriedRecord friendDetailMoreSettingIv.setOnClickListener { - friendDetailRecordClickListener.onFriendDetailMoreClick() + friendDetailRecordClickListener.onFriendDetailMoreClick(getFriedRecord.id) } } } diff --git a/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsDataSource.kt b/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsDataSource.kt index 558404ea..fa649971 100644 --- a/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsDataSource.kt +++ b/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsDataSource.kt @@ -4,6 +4,7 @@ import com.teampome.pome.model.base.BaseAllData import com.teampome.pome.model.base.BasePomeResponse import com.teampome.pome.model.friend.FriendData import com.teampome.pome.model.response.DeleteFriend +import com.teampome.pome.model.response.DeleteFriendRecord import com.teampome.pome.model.response.GetFriendRecord import com.teampome.pome.model.response.GetFriends import com.teampome.pome.util.base.ApiResponse @@ -28,4 +29,6 @@ interface AddFriendsDataSource { //모든 친구 기록 조회 fun getAllFriendRecord() : Flow>>> + + fun deleteFriendRecord(recordId : Int) : Flow>> } \ No newline at end of file diff --git a/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsRemoteDataSource.kt b/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsRemoteDataSource.kt index df807c9a..d82ddce4 100644 --- a/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsRemoteDataSource.kt +++ b/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsRemoteDataSource.kt @@ -4,6 +4,7 @@ import com.teampome.pome.model.base.BaseAllData import com.teampome.pome.model.base.BasePomeResponse import com.teampome.pome.model.friend.FriendData import com.teampome.pome.model.response.DeleteFriend +import com.teampome.pome.model.response.DeleteFriendRecord import com.teampome.pome.model.response.GetFriendRecord import com.teampome.pome.model.response.GetFriends import com.teampome.pome.network.AddFriendsService @@ -38,4 +39,8 @@ class AddFriendsRemoteDataSource @Inject constructor( override fun getAllFriendRecord(): Flow>>> = apiRequestFlow { service.getAllFriendRecord() } + + override fun deleteFriendRecord(recordId : Int): Flow>> = apiRequestFlow { + service.deleteFriendRecord(recordId) + } } \ No newline at end of file diff --git a/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsRepository.kt b/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsRepository.kt index c26a87f3..d22a5859 100644 --- a/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsRepository.kt +++ b/app/src/main/java/com/teampome/pome/repository/friend/AddFriendsRepository.kt @@ -15,4 +15,6 @@ class AddFriendsRepository @Inject constructor( fun deleteFriend(friendId: String) = dataSource.deleteFriend(friendId) fun getAllFriendRecord() = dataSource.getAllFriendRecord() + + fun deleteFriendRecord(recordId : Int) = dataSource.deleteFriendRecord(recordId) } \ No newline at end of file diff --git a/app/src/main/java/com/teampome/pome/viewmodel/AddFriendsViewModel.kt b/app/src/main/java/com/teampome/pome/viewmodel/AddFriendsViewModel.kt index a0b93cdd..61ef1966 100644 --- a/app/src/main/java/com/teampome/pome/viewmodel/AddFriendsViewModel.kt +++ b/app/src/main/java/com/teampome/pome/viewmodel/AddFriendsViewModel.kt @@ -8,6 +8,7 @@ import com.teampome.pome.model.base.BasePomeResponse import com.teampome.pome.model.friend.FriendData import com.teampome.pome.model.goal.GoalData import com.teampome.pome.model.response.DeleteFriend +import com.teampome.pome.model.response.DeleteFriendRecord import com.teampome.pome.model.response.GetFriendRecord import com.teampome.pome.model.response.GetFriends import com.teampome.pome.repository.friend.AddFriendsRepository @@ -49,6 +50,8 @@ class AddFriendsViewModel @Inject constructor( private val _getAllFriendRecordResponse = MutableLiveData>>>() val getAllFriendRecordResponse : LiveData>>> = _getAllFriendRecordResponse + private val _deleteFriendRecord = MutableLiveData>>() + val deleteFriendRecord : LiveData>> = _deleteFriendRecord fun findFriendsData(nickName: String, coroutineErrorHandler: CoroutineErrorHandler) = baseRequest( _findFriendsDataResponse, @@ -99,6 +102,13 @@ class AddFriendsViewModel @Inject constructor( repository.getAllFriendRecord() } + fun deleteFriendRecord(recordId : Int, coroutineErrorHandler: CoroutineErrorHandler) = baseRequest( + _deleteFriendRecord, + coroutineErrorHandler + ){ + repository.deleteFriendRecord(recordId) + } + //친구 조회 val friendGet: LiveData> = Transformations.map(_getFriendResponse) { when(it) { From e1e6797f8a711c253800d51e00c212eeeb69999b Mon Sep 17 00:00:00 2001 From: SsongSik Date: Sun, 28 May 2023 02:42:14 +0900 Subject: [PATCH 06/26] =?UTF-8?q?[feat]=20:=20#15=20=EC=B9=9C=EA=B5=AC=20?= =?UTF-8?q?=EA=B8=B0=EB=A1=9D=20=EB=B7=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/item_friend_detail_card.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/layout/item_friend_detail_card.xml b/app/src/main/res/layout/item_friend_detail_card.xml index bf7a5fa3..38c8738a 100644 --- a/app/src/main/res/layout/item_friend_detail_card.xml +++ b/app/src/main/res/layout/item_friend_detail_card.xml @@ -238,7 +238,7 @@ android:background="@color/grey_2" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/iv" /> + app:layout_constraintTop_toBottomOf="@+id/friend_detail_more_setting_iv" /> From 21ffecbeef3b383c9de17d44902e5a16654e2afa Mon Sep 17 00:00:00 2001 From: SsongSik Date: Sun, 28 May 2023 03:10:41 +0900 Subject: [PATCH 07/26] =?UTF-8?q?[feat]=20:=20#15=20=EC=B9=9C=EA=B5=AC=20?= =?UTF-8?q?=EA=B8=B0=EB=A1=9D=20=EC=9D=B4=EB=AA=A8=EC=A7=80=20=EC=B9=B4?= =?UTF-8?q?=EC=9A=B4=ED=8A=B8=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pome/model/response/GetFriendRecord.kt | 22 +++++++++++++--- .../presentation/friend/FriendFragment.kt | 2 +- .../friend/FriendRecordGetAdapter.kt | 24 +++++++++++++++++- app/src/main/res/drawable/emoji_mint_28.png | Bin 0 -> 645 bytes .../res/layout/item_friend_detail_card.xml | 2 +- 5 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 app/src/main/res/drawable/emoji_mint_28.png diff --git a/app/src/main/java/com/teampome/pome/model/response/GetFriendRecord.kt b/app/src/main/java/com/teampome/pome/model/response/GetFriendRecord.kt index 23b79df5..59742627 100644 --- a/app/src/main/java/com/teampome/pome/model/response/GetFriendRecord.kt +++ b/app/src/main/java/com/teampome/pome/model/response/GetFriendRecord.kt @@ -13,17 +13,31 @@ data class GetFriendRecord( val useComment: String, val oneLineMind: String, val createdAt: String, - val emotionResponse: FriendEmotion + val emotionResponse: EmotionResponse ) : Parcelable @Parcelize -data class FriendEmotion( +data class EmotionResponse( val firstEmotion : Int, val secondEmotion : Int, - val myEmotion : Int, - val friendEmotion : List + val myEmotion : Int?, + val friendEmotions : List ) : Parcelable +@Parcelize +data class FriendEmotionResponse( + val nickname : String, + val emotionId : Int, +) : Parcelable + +//@Parcelize +//data class FriendEmotion( +// val firstEmotion : Int, +// val secondEmotion : Int, +// val myEmotion : Int?, +// val friendEmotions : List? +//) : Parcelable + /* "id": 3, "nickname": "찬영짱121", diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt index 53db5195..b9fea4af 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt @@ -153,7 +153,7 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri //친구 기록 조회 RV private fun friendRecordSetUpRecyclerView(){ - friendRecordGetAdapter = FriendRecordGetAdapter(this) + friendRecordGetAdapter = FriendRecordGetAdapter(this, context) binding.friendDetailRv.apply { // setHasFixedSize(true) layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false) diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt index f5f73c5f..c872621f 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt @@ -1,10 +1,14 @@ package com.teampome.pome.presentation.friend +import android.content.Context import android.view.LayoutInflater +import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.teampome.pome.R import com.teampome.pome.databinding.ItemFriendDetailCardBinding import com.teampome.pome.databinding.ItemFriendsListBinding import com.teampome.pome.model.response.GetFriendRecord @@ -12,7 +16,8 @@ import com.teampome.pome.model.response.GetFriends //친구 기록 조회 class FriendRecordGetAdapter( - private val clickListener: FriendDetailRecordClickListener + private val clickListener: FriendDetailRecordClickListener, + private val context : Context? ) : ListAdapter(BookDiffCallback) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FriendGetRecordViewHolder { @@ -47,6 +52,23 @@ class FriendRecordGetAdapter( friendDetailMoreSettingIv.setOnClickListener { friendDetailRecordClickListener.onFriendDetailMoreClick(getFriedRecord.id) } + + if(getFriedRecord.emotionResponse.friendEmotions.isEmpty()) { + friendDetailCardLastFriendEmotionCountTv.visibility = View.INVISIBLE + } else { + val count = getFriedRecord.emotionResponse.friendEmotions.size + if(count >= 10) { + friendDetailCardLastFriendEmotionCountTv.text = "9+" + } else { + friendDetailCardLastFriendEmotionCountTv.text = "+$count" + } + } + + if(getFriedRecord.emotionResponse.myEmotion == null) { + context?.let{ context -> + Glide.with(context).load(R.drawable.emoji_mint_28).into(friendDetailCardFirstFriendEmotionAiv) + } + } } } diff --git a/app/src/main/res/drawable/emoji_mint_28.png b/app/src/main/res/drawable/emoji_mint_28.png new file mode 100644 index 0000000000000000000000000000000000000000..f769b2af933dc2d40a22dfcf9e21a74128a0fd82 GIT binary patch literal 645 zcmV;00($+4P)TF z%}hUfJ|3-64T_=|u{q%e>nrzEwHswU)s8mwyU;Z4yc%1p5Mj_+lBT2OGNxr5(`uE= zca~|AX$o>2n+(H{zC6zfZ{H~_44iU#r zl5~X4hz!U41=KgNu^1;HJj{BS%6EiINhmW6(riV2W0lKej&?_9juTVJ8kHt;|gt~7E=n<@=-v7lyHD~+HQh`#V=X{9u6@S{re?>h)xcNgYD=Q?9z+t#G5`fmd$ zmEZ~vW#jtybn5O6LzH)218e7U<;J(icz#nRK5>~ie~7$~G_eVg8OZc%nOGwA*fu&;CX>B1~As(|qJLDE9HwGcV6} From e12e0a04aa3bb725965dcadfcac612257240fd04 Mon Sep 17 00:00:00 2001 From: SsongSik Date: Sun, 28 May 2023 03:59:08 +0900 Subject: [PATCH 08/26] =?UTF-8?q?[feat]=20:=20#15=20=EC=B9=9C=EA=B5=AC=20?= =?UTF-8?q?=EA=B8=B0=EB=A1=9D=EC=97=90=20=EA=B0=90=EC=A0=95=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EB=B7=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/debug/res/drawable/rect27_white.xml | 5 + .../friend/FriendRecordGetAdapter.kt | 10 +- app/src/main/res/drawable/emoji_mint_38.png | Bin 0 -> 3193 bytes app/src/main/res/drawable/emoji_mint_38_2.png | Bin 0 -> 1809 bytes app/src/main/res/drawable/emoji_mint_38_3.png | Bin 0 -> 1969 bytes app/src/main/res/drawable/emoji_mint_38_4.png | Bin 0 -> 2699 bytes app/src/main/res/drawable/emoji_mint_38_5.png | Bin 0 -> 1848 bytes app/src/main/res/drawable/emoji_mint_38_6.png | Bin 0 -> 1989 bytes app/src/main/res/drawable/emoji_mint_38_7.png | Bin 0 -> 3193 bytes .../res/layout/item_friend_detail_card.xml | 145 ++++++++++++++---- 10 files changed, 125 insertions(+), 35 deletions(-) create mode 100644 app/src/debug/res/drawable/rect27_white.xml create mode 100644 app/src/main/res/drawable/emoji_mint_38.png create mode 100644 app/src/main/res/drawable/emoji_mint_38_2.png create mode 100644 app/src/main/res/drawable/emoji_mint_38_3.png create mode 100644 app/src/main/res/drawable/emoji_mint_38_4.png create mode 100644 app/src/main/res/drawable/emoji_mint_38_5.png create mode 100644 app/src/main/res/drawable/emoji_mint_38_6.png create mode 100644 app/src/main/res/drawable/emoji_mint_38_7.png diff --git a/app/src/debug/res/drawable/rect27_white.xml b/app/src/debug/res/drawable/rect27_white.xml new file mode 100644 index 00000000..2d7cdba8 --- /dev/null +++ b/app/src/debug/res/drawable/rect27_white.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt index c872621f..b27dc614 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt @@ -10,9 +10,7 @@ import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.teampome.pome.R import com.teampome.pome.databinding.ItemFriendDetailCardBinding -import com.teampome.pome.databinding.ItemFriendsListBinding import com.teampome.pome.model.response.GetFriendRecord -import com.teampome.pome.model.response.GetFriends //친구 기록 조회 class FriendRecordGetAdapter( @@ -69,6 +67,14 @@ class FriendRecordGetAdapter( Glide.with(context).load(R.drawable.emoji_mint_28).into(friendDetailCardFirstFriendEmotionAiv) } } + + friendDetailCardFirstFriendEmotionAiv.setOnClickListener { + if(friendEmojiRegisterCl.visibility == View.VISIBLE) { + friendEmojiRegisterCl.visibility = View.GONE + } else { + friendEmojiRegisterCl.visibility = View.VISIBLE + } + } } } diff --git a/app/src/main/res/drawable/emoji_mint_38.png b/app/src/main/res/drawable/emoji_mint_38.png new file mode 100644 index 0000000000000000000000000000000000000000..91cce585bd06e2271638a79a240a9436b22d81db GIT binary patch literal 3193 zcmV-<42JWGP)?3qoy5p(ubFmTrWG(4;^>0n)Gp$YK*a_Ve=WJim43-rI9$?kvx1>{tS%+-N-a z&D^<;1T;i>TWedC2GedG{ zcGAkUKwupVV}lgDk;I)%f(Rjb8w2aGxb^5jqVJg%b60c*-zOCs#@s%1Urq}s1*VL% zUvkNB>J@_}on{ssYH>RN+i@c;NK=ZO!Xeuj?ltlUuiL zwM|cxhMW|r?tK66KM?U-U(dd06Ty@L!A9gPvmPsiV|GO%gdcRR0L$k*$t2M#qx*I< z7~X2BMNuU7o93AdwrEYcj98$q@I-*xQ$6+cf?JQ}+s_-24xuzw+N5EFvVjp}auOxc z3z(*UGp)Y2=C-BbP**!XJ8$i`pW64-j$QZeN-SNv)Fp`mW}MKc!bP~c!|Fkbr_Udd zlv+GT0`3B%egbI>=2O5xzdjNLeJhp1ajP4rv)v`lE0=wp7!b+?HPsii2|>|n-59s} zrwNeb->%u&Os5ZZZEs~StYi`x9B_`a173emRX_S!2JffZi5=MGdR-JSF=@)$g(+0=n?D?F&3-aZ<44!PXkk3-=%Vr@mbkKQUjfv;#2JIQTbA6PE$Ylh^O@2o( z;KZOH8q<^kObZ~-hXN#F$0Xt1JFt-Bi6&yZOa^%Z_4FK$#}-?TEOh^@l~S2TtpeqW zIBBAwd5mcTBs8%tGhzNp#8Psk%CHVq#Hc-iq5cwk%4?ppm=8KsDRWn4j|!OQ{&1TXTlHB z!F`33Fh*DrnN|qn0a9&3qM%I~&q9w63NHh6E`^^e zInzlmoeKVT5pp3W5_w`u|K^?FtL4-Yt-Ni))IWmm}jr@@^BNb;mfc*G`}FQ zsx#+2@LL2j37^_sK*3Pq0YV`l)z9%f(pCnC;&0BL6sQ32+vlp9vL%Do5SH>fd@a5J z%X^}@rknbF4X*8;jTL<*_W5GjWV4zFf+X4Z!zYnTW=3ep%$Yc_?HQO^(=ju(_}&<; zArSjy;=pGZ=C=!-i^W}*)ZPSUxr$N5cJbaNu= zr##&8w@iNuM;?CJH#O~F?>_N5QfCHXL_$7TH+XB4v_a~_Ge0`oGo6r}wT=fWJX}j| z9;G6-6SY}uTqH0rMfekz!>@7_Hl;m^D3dbsjo} zWXAwne|&8~d+_KR8WeMbl;>Q|n4W9`JZ4=*7k_k4py2MtG$>WMp+7z}U%99?I=nRIw$a$Hz_zGh znPWOe?ODxmJSOeEj(eO6bNq2t-pd#Y03n#n>iDCJEY1QrrYyK-Jps@BJl~SqzW^PS ziCIZiY%D|=pVDoaEY9O08m8vR6-hj{z68%T8Azuyc%z)-!OusKEDmTS==4F>gZ_;` z3ZxU=d661yimk!g*dmm$DCS10adSm0)|R&rDfq;pf>{|=dvn5S$2e)ysKHm4oRnWN z(=v~ihN4aBaMqqBO;7A!Q-(KZ8|bPp)-lK57YQ$CE7X|Ba6;3za8j-6PzAQ&62!7< z;b&ucc>@+_V)Q$VOHqx685MYR;6=|TVn#95X7U{vR&1G2Q?6!JVM7S>xiT|mKdyvu zNvV5oNkK}3fChp-%b{3CFo#!L`E+jcZCBrRDo~XjwN2_%&TscUaEoPF_a!P);Z)QNY$4o0 zDz&S~F}DwX{BdFy0x{{b;|!a~+BzZ<_pA~aj7n7SQq;?8Drw1EzyHNM9z>yreBw!Ue+G3RV7UdbjW(d)& z0s0I?pqy7J2xf>QAF@bz3$*>T7e*~a$f9Q~12Hp#C@)GgE`OIX&AWef)3zWzjtgkY zpxk!XKX%NKX?C?_;zoK!18Jg3*MPd{(+ho+4*e?xen1%IZ{Pi;@7W)+ckJ0wm&#%Z zp}dSUTt+6S>SFW(9O}bwoX$sSv+(cq$@s3FckN8r(!2HLF-l_73Ti6NmCyd8KbX0D zxG}1((#>$(ALFEb@FxEd8q1$o&wIR1^@fb fg?6ERT-*Nv$oQRFmR_ zrSgFK(1(^j&Sr?&LC3GF!AC^ORL9*qC@GXU|BzZpT%(??Pq%4aA)8uk2+9LCeUv=O=?wRt%I}$ z(uiVT`L%l0a&0=*D=BJ2?UY6*i(-51c5I1mN>e}MBhjIw4Z#*<{s*2CPrl+#1qxLM zmetNyg{r2PAxu5214^sfgHrz1$Ov{Mw#yD4ePkp$_?K(I=5=mYS^7s#lqc;aSzH-- zZKdiUKAv9(R1i~H(oSHke-FY|*vy>$Lw~>ci=~c~I3@W4dr2Q-ztHe5v?&FqL!VxfJZs`RB{8q9{u(LAA4{ zR)Y%KQ$A`%v47*Y%9bxTaAw(iX2n9wQ2IJUnS8-3Vz!)#s!(Vjr?S0SvQw=prLQxT zuH~l-X|p5mvFU$9PA;th^-+^>Ba~W(Qq=xZC2L0hoGrCV6;*jn<9Vaj)JLIA43vcn zEp@+5IXcAT4KbdrC}p}gX{n^?)8X`&ap>$@OR4oupZWw!)yAL@wIb$z)~2EhF%}&y zpx9KY%2FAp{&ozD?_{y-(fg4YN!BT)uYtP!b{4Py>lB=>2=3Uw13bhVDph?@An7D% z+3UACJ?Wudt7~0Ko&NVp%)W6E@1C5&;om;nboyTT)BkaGHivf(p21tso?cU_>MQ`M z$Of8Debn})I+H|VeQS#L@%-sawL`Y~nv$-M{JFqQgA2ceu$dgXk zUe}u1_T9T6Dn1IAui^{iJDaYlJAZLMUVr*!MEhbG*}b_AO0NpV>2bU5E_l9oF7Pg< z^E3Kj<;B2cw7dI+kb$Djci-wzCLgmp@coSs;Pd^TWwyCj+oEkj`JRtc&m6bfMQnnOKop1yMvr z_+R2edOP##YGWwXc=s*LWCGh{IaUA{08*OKOT*mM#fBzfH7L~Ty<3_i)zlqi$K>t> zm20e&Zfp{ylmS=(XP^Q&lV@O@uUjdsz>_(0$~ip|h_Gj6fK( zf`wnbC{Obj8%(qeWzw0-B1Bw`a^ZUeF8sC*+fzE z$|QvpW@ip^+KnCy?zQJ7eDT5E=xD?{~PA_s@oV<3YuRfjRT?8f$aOszy3RmnB&173jwQ8rtHXS3 z+gM(B;_1FZ>{C_Bgi$^KPxyb{d)HVxcoX+6>*tZ8lOyFm6{Sq*W8LUMJk8w7@2b|2 zu5nV$Q|`BuS2|&N{H7}v)nN?Eq;Ng&d*gSHr&qwt^~jg^9g#xrPcBCMNXbGw{#5Hw zvJ+VV+>mQ}4pIYj2A-HM^WsD+IEGU;jp=t_c zD+@_4hPaI6NSz0N^^KoASI@EPr_PE0K9OQl{E|9<*zJ(qjgW_GQLuH;f(h!_W3YXW zNQDk=$-s5BE3^K5O9sJp1O!nFE(3Ur>V*VH)N>FPcFE%QAEE5WCdMAkf1F`eu;uG# z|CtyJd(PLTQr{s#hH2q#GG}z{<8Yc74pVrk?C_~SJn);WY4g*6PW0Jf`*uq1qWbsJ z!`((yLo^V5wZRqAmt0-E&{0rNO^i?E8;$(|hEI#Xl`lw700000NkvXXu0mjf2K|AS literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/emoji_mint_38_3.png b/app/src/main/res/drawable/emoji_mint_38_3.png new file mode 100644 index 0000000000000000000000000000000000000000..3a225f2bf8cdae2925c677ff15c5bf234278284f GIT binary patch literal 1969 zcmV;i2Tu5jP)}$(BNgd|Qh3%>^2wff&qz(M$zXaXjq$4yo^Ctq4a1in4IpW{6zMAEY4*ib zg*ljX>6|YE8l_aPFAA!hqdwG{WS21F*qq#e55?DvNK@`xW%s7<6{b|zZnffp&Yg%T^Zx#1?~A%U)3?iNDg|a7I_}E(7)MO+vj;QkyJ)3X0)&ODLI|6YesSY7~l|mmnH~(kU<XSDDrI0ioEwL*WRgX3q@%|k0H6@jw%HhN_&m((z2A}-) zE_8gLb7@IYdg;_C&iwLqIGs({{K$5gjXOu7pZgPL zGBddH<~WW&b)@D(|NEgo!=1@vc<4MXzHnv{NvSF*ed~|)=t;h035b&&XsK&WMUqiu z{xKe^&rU=aLdj}4gPgC~(Q9G*Xmfm7NnyU+LFcAo;)Lb9xL`-Ey4KX4d$+=NY|Q-U z8aD2^d!eLM^_sftv7LD9cYi~yJ%Rom>nottqEIH;u6DZ#1#9kn=v`cxen&lDI0*sy zf45UhL6sK%-oDRcW9O|#c!&!bTCtl773QhEX3@bqo&IO1c7@5%)`YtH`bBD29K0#! zTz|QKE>-pBna|JU=gR9Txv76?C`w)7!52QxO`Pktq#10;%3Mt-!6i<7^Jn3#qPC5% zZu<->gA$^cG0iHs_}Q0^6gNwYgDuZ}eMu;t3dNBPXd*H;U`g)ZJ7Z**hLR-}la#it zNBZ;#Sd{$rO`9sH2z+LSoG1fka}%Yk{3w4abV$*4*P3OaFfZjXH;sYBnynVe>7I(ek69ITA`a^@S}pp>#e|n8f;c z|NT}V#JViY)wR$&Z|%cv4}KhDL+8+uNK{FTdxcP9Rx%N$r66J!)_r;-l09uTp>%%A zp9LBH)fNx@E-%XK+kKSY@wtzo#c^OuQ30mEYII)$)Abc#8+LEOnyt6h1*NljUI3S( zi!8tN$-U4jT^_2!B&^$hJMd6v7gMPgs(r1QT`JDXvE; zc&G|NPz2H{tsrXzO2;UD<&!E$twP|Rb*xy*HT=4br^_VrbiW5y)S3!S4)9C+xX4_&sxjl_({ow>*t zBc|1sx4gRD;mH_qaI=Zu4ls0PC4F`&jJ7ejR%7Z5RcN%L4apJZ6`n%n_W9|nhwcl6 zJbI~pnm~iPee`;cnOcBx6~zb9$73q8;~V$wKdFZ-A8L=>y?4m>{D<2zF&=eIEbY47 zC=?cf0-9w4t9cg`SC5vUsw7qlPY(Tf8=179=ba#xZSugGL~VbHW+;ng?QGT~DROJj z?kCYCVpDX+e(AfrzIC*cW6@uogD*Ujf)G#801p?)SotvtZc?<1#};WCRzSy(&k*(K zU!pL`R1}BOst!znfX00000NkvXXu0mjf DIbpn5 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/emoji_mint_38_4.png b/app/src/main/res/drawable/emoji_mint_38_4.png new file mode 100644 index 0000000000000000000000000000000000000000..c8b678999a65680f883c0e15004923e4eaaeed73 GIT binary patch literal 2699 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 FV1kbm7!&{i literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/emoji_mint_38_5.png b/app/src/main/res/drawable/emoji_mint_38_5.png new file mode 100644 index 0000000000000000000000000000000000000000..07c276d84b288a397dd04e7fb10e580b4d6aa3d0 GIT binary patch literal 1848 zcmV-82gmq{P)n3scv^%qN^YYvOJUh=b%dpCENoSKy0(%+99>#Ew(&z%T1C2BT&MWBGH1zQ%+c}$H ziHvEJS?*+%fB#zxbh{ zR@|=vN|p0TyBS~Y9D<|mhx+5aM@)TgE-9TI(3~ASTfA`Fp-ejGW${wx1ktcV6MCYx z3dV*0$)rdRTp=UB-B6|fG%n?*adz>1tIqRZ22+_Tqz1U{Tsm4fgJnOzAyB5CNzI%6 zMBgKYu+%-AS@uv$&TTl9DJw`96Zz?=3WfG^4ffcKoZna|MSYdaE-X(`2Wk(eg5IlT zgWo8nbR|#iC-W&|`S;j#duLu1HcqK3lu3cS??U^!)218#aZt)YnY?j%zE)wfF+Xi- zwqZ7A1z3y;@T>U!UI?#L*nMkjIk%}aRsr+;mz)PG($ zhJ`CRT=>Tr{`a@HN@LVfsx%A0mS~TubKLg1^>&9&Vl56?6pF~4oh~_9&KpjjIkNB0 z25C6qTnDvMDU|Qq?Ig9wzinF=PlqYKLe-X5Dpj$m!N)&`qAN&+EbiO8v!P9GfBHd; z{pAffEfMs6{;unwbWJF8-x7+$vc<(9x;U4+sE>HBQ;=6&SLkvhRK>_kZ@P)qEC^pT zgfcGa$^J*Mt@CacIB{S3)!+^{;q9v$w@ImNN9!Qsc5GFsO5U)T!yZka-(sRpkIwZj z35DD;=8Y|JhImg4BJHs%R1<~W_qW|^!f3pjIkhTOkr?viFHg^oZL%fgmL;{cE-2|q zyz#r^c<<#gL|USym3wXxpM3bU*!HcRL4W@FchUrVhQam zwB1%(?!IQg)}hpy11FGvdkPOe|1~7Hb_8`6Qwuoxv%`4vH^(vfo!w|=O&DLe3|AEq z;SSkazAlu>PZiQ=w&L4p@@ ztKKzCEv9K(H&0M|OvrRY zrAm3gqwOLowu#flGfVBwamZNHl28w-Qit56;=V6ux#l&X)H*_!j|!y`OG77&{?*# z(SlRoA>Tr!%$Z~fv>`DLukdrzT>!R^RHKmR(PTCPyU1@)O5Jj$9Qqd6tL_j*h;Qus z!oKk;m^r?^Yg#_d&G2$?Mby*Q|t!VYBR_t(t!7ySw+FtnjS(aQBN> ze|^6a`o(-q3@j!*NUqiZMNg<$Q0@nXsv(p`YiCY04RF!Qr?RpAu96h9Jy@pt^$GoEN5`ijm*s zK7D!xEPC^8$q^M{IKs-?JoH;A`?->-V|l0@CqhT literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/emoji_mint_38_6.png b/app/src/main/res/drawable/emoji_mint_38_6.png new file mode 100644 index 0000000000000000000000000000000000000000..66d7872d367769bc1ef999efe0a1223952b985d0 GIT binary patch literal 1989 zcmV;$2RitPP)Cvof~b%|q4O4IVEGz8Kns%W5Ap&~p$O}3Q5miA^mX@OEr0Fk=y5Fv6z!Frk7c&&x3zglc=Qm8Va61Bd-vjXBP zF_Caa{TRl194VECP#gi+sHT;O+I5InVbtg{BMeZ0r>}9PixGbuED1K|C-zyC93JLlwSC@Yq=csjkdP+n-&|R%mCg0& zhR6cV^iNA)UnMg2*`I07mvkT9PbyRr2X|C$$A_FPgL<5vO-|FBMZvT>kNc88cQ)OR zQGX&gvB(Zq1WG~9Lo7Wn0;QzPmh~8$gUz@nvP*<%=*dk^^mog^##MZGTJXR8!+n=c zi5cBVlvL{Gq2|F%U4&KR;f8$(S{3_SDjJWO>ofX~s(33Td7;m{q@kv7DU``4yf}`= z-qII}!^XbzVANMX8urIpNAkL&*_G+V-PV4|8yg zPp+L(viS1lq4YH>S9fW4SU-_+FNGq_*E0rxYYe@RQfjWO`~N#RYDVg0LW+Kb2e_tD#jzl|t_P^=Dqe<-cD*XZJ4bIPg)t^M|+b z=O4dXP^lXl>c~?sWgOm)gLh;7_9mS9)d^huo{>FSI&()L2ipzIn zG>(z8L-^XOPs6DVWtMOAC%55+?q47|IgMb%S!7cKZ~hDG+8eR!sn6ynm#}Lbd~oU# z+8*dAs1$PNbu0qk7bnU2@qs9Ah@z&Ho2mLf*JdE*Bblaj3Zp!(tA0A#tJ2<32o@E(tZ< zH<+1dPKAXAybMUGydA0B=2?GxQ&A{WHqmdAyEs37KFT~!woK`*q8z1OKlBRHu9t}~ z$->xoX@IU46mt}mS$OC-j}?W=H0XSWC&4897~>*+@06M@Yxy>OWHW~Tc?pJ!EJ%fp zMa!mBL&wIFP^N5rWw#MR)sGIh1 z=IRxk8t%vNR9ufK(Y|jd>b5qOgfiucR05py7RI^X=mmJ$QNo80+@;+RuxBuU&u{6} zFA!|;8U{kRtNl)VQ>Q--zK7SM(`ebVqbw*>^z`eZkTS}IlAfNGDN=su(y{+eB$E=C z-%nxFRS%UZm46t_C_W?T-(X|x!4|Ysp=_w!AGi>b3Bh9)qm@2cT|6~a0UXxRRwpQFc%YibP z`Sg(H=@BY8|7(@!l=X^LD#-h9q0C<$t%2hFWh#94c{^n#EkRcO;!rGfxml>5qBRK`U? zPKP~kD$9V*ooj_)1mjRwI~@k#FE@E{a@L#uPj z4bb<0{)K18OrP(*)LYMjtV0)fYi0K8o7<`-G7+Ln6q(ewbxu>B2+hdndwY5l#peDG XG2A=Z+mIAz00000NkvXXu0mjf>Fmfl literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/emoji_mint_38_7.png b/app/src/main/res/drawable/emoji_mint_38_7.png new file mode 100644 index 0000000000000000000000000000000000000000..91cce585bd06e2271638a79a240a9436b22d81db GIT binary patch literal 3193 zcmV-<42JWGP)?3qoy5p(ubFmTrWG(4;^>0n)Gp$YK*a_Ve=WJim43-rI9$?kvx1>{tS%+-N-a z&D^<;1T;i>TWedC2GedG{ zcGAkUKwupVV}lgDk;I)%f(Rjb8w2aGxb^5jqVJg%b60c*-zOCs#@s%1Urq}s1*VL% zUvkNB>J@_}on{ssYH>RN+i@c;NK=ZO!Xeuj?ltlUuiL zwM|cxhMW|r?tK66KM?U-U(dd06Ty@L!A9gPvmPsiV|GO%gdcRR0L$k*$t2M#qx*I< z7~X2BMNuU7o93AdwrEYcj98$q@I-*xQ$6+cf?JQ}+s_-24xuzw+N5EFvVjp}auOxc z3z(*UGp)Y2=C-BbP**!XJ8$i`pW64-j$QZeN-SNv)Fp`mW}MKc!bP~c!|Fkbr_Udd zlv+GT0`3B%egbI>=2O5xzdjNLeJhp1ajP4rv)v`lE0=wp7!b+?HPsii2|>|n-59s} zrwNeb->%u&Os5ZZZEs~StYi`x9B_`a173emRX_S!2JffZi5=MGdR-JSF=@)$g(+0=n?D?F&3-aZ<44!PXkk3-=%Vr@mbkKQUjfv;#2JIQTbA6PE$Ylh^O@2o( z;KZOH8q<^kObZ~-hXN#F$0Xt1JFt-Bi6&yZOa^%Z_4FK$#}-?TEOh^@l~S2TtpeqW zIBBAwd5mcTBs8%tGhzNp#8Psk%CHVq#Hc-iq5cwk%4?ppm=8KsDRWn4j|!OQ{&1TXTlHB z!F`33Fh*DrnN|qn0a9&3qM%I~&q9w63NHh6E`^^e zInzlmoeKVT5pp3W5_w`u|K^?FtL4-Yt-Ni))IWmm}jr@@^BNb;mfc*G`}FQ zsx#+2@LL2j37^_sK*3Pq0YV`l)z9%f(pCnC;&0BL6sQ32+vlp9vL%Do5SH>fd@a5J z%X^}@rknbF4X*8;jTL<*_W5GjWV4zFf+X4Z!zYnTW=3ep%$Yc_?HQO^(=ju(_}&<; zArSjy;=pGZ=C=!-i^W}*)ZPSUxr$N5cJbaNu= zr##&8w@iNuM;?CJH#O~F?>_N5QfCHXL_$7TH+XB4v_a~_Ge0`oGo6r}wT=fWJX}j| z9;G6-6SY}uTqH0rMfekz!>@7_Hl;m^D3dbsjo} zWXAwne|&8~d+_KR8WeMbl;>Q|n4W9`JZ4=*7k_k4py2MtG$>WMp+7z}U%99?I=nRIw$a$Hz_zGh znPWOe?ODxmJSOeEj(eO6bNq2t-pd#Y03n#n>iDCJEY1QrrYyK-Jps@BJl~SqzW^PS ziCIZiY%D|=pVDoaEY9O08m8vR6-hj{z68%T8Azuyc%z)-!OusKEDmTS==4F>gZ_;` z3ZxU=d661yimk!g*dmm$DCS10adSm0)|R&rDfq;pf>{|=dvn5S$2e)ysKHm4oRnWN z(=v~ihN4aBaMqqBO;7A!Q-(KZ8|bPp)-lK57YQ$CE7X|Ba6;3za8j-6PzAQ&62!7< z;b&ucc>@+_V)Q$VOHqx685MYR;6=|TVn#95X7U{vR&1G2Q?6!JVM7S>xiT|mKdyvu zNvV5oNkK}3fChp-%b{3CFo#!L`E+jcZCBrRDo~XjwN2_%&TscUaEoPF_a!P);Z)QNY$4o0 zDz&S~F}DwX{BdFy0x{{b;|!a~+BzZ<_pA~aj7n7SQq;?8Drw1EzyHNM9z>yreBw!Ue+G3RV7UdbjW(d)& z0s0I?pqy7J2xf>QAF@bz3$*>T7e*~a$f9Q~12Hp#C@)GgE`OIX&AWef)3zWzjtgkY zpxk!XKX%NKX?C?_;zoK!18Jg3*MPd{(+ho+4*e?xen1%IZ{Pi;@7W)+ckJ0wm&#%Z zp}dSUTt+6S>SFW(9O}bwoX$sSv+(cq$@s3FckN8r(!2HLF-l_73Ti6NmCyd8KbX0D zxG}1((#>$(ALFEb@FxEd8q1$o&wIR1^@fb fg?6ERT-*Nv$oQRFmR + xmlns:bind="http://schemas.android.com/tools" + xmlns:tools="http://schemas.android.com/tools"> + + @@ -17,35 +19,32 @@ android:layout_width="match_parent" android:layout_height="wrap_content" app:cardBackgroundColor="@color/white" - app:cardPreventCornerOverlap="true" - > + app:cardPreventCornerOverlap="true"> + android:layout_height="wrap_content"> + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="@id/friend_detail_profile_iv" + tools:text="성식" /> + app:layout_constraintTop_toTopOf="parent" + bind:remindFirstEmotionDrawable="@{CommonUtil.INSTANCE.numToEmotion(getFriendRecord.emotionResponse.firstEmotion)}" + tools:src="@drawable/emoji_mint_fiter_sad" /> + app:layout_constraintTop_toTopOf="@id/friend_detail_content_first_emotion_aiv" + tools:text="후회해요" /> + app:layout_constraintTop_toTopOf="parent" + bind:remindFirstEmotionDrawable="@{CommonUtil.INSTANCE.numToEmotion(getFriendRecord.emotionResponse.secondEmotion)}" + tools:src="@drawable/emoji_pink_fiter_happy" /> + app:layout_constraintTop_toTopOf="@id/friend_detail_card_last_emotion_aiv" + tools:text="행복해요" /> @@ -146,13 +145,13 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="12dp" - tools:text="16,000원" + android:layout_marginRight="24dp" android:text="@{@string/use_price_text(CommonUtil.INSTANCE.makePriceStyle(String.valueOf(getFriendRecord.usePrice)))}" android:textColor="@color/grey_8" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="@id/friend_detail_content_first_emotion_cl" app:layout_constraintTop_toBottomOf="@id/friend_detail_content_first_emotion_cl" - android:layout_marginRight="24dp"/> + tools:text="16,000원" /> + app:layout_constraintTop_toBottomOf="@id/friend_detail_card_title_tv" + tools:text="아휴 힘빠져 이젠 진짜 포기다 포기 도대체 뭐가 문제일까 현실을 되돌아볼 필요를 느낀다ㅠ 이정도 노력했으면 된거 아닌가 진짜 개 힘빠지네 그래서 오늘은 물 대신 라떼 한잔을 마셨습니다 ㅋ 라뗴 존맛탱~~ 다들 나흐바 시그니쳐 커피를 마셔주세요 설탕 솔솔 뿌려서 개맛있음" /> + app:layout_constraintTop_toBottomOf="@id/friend_detail_card_content_tv"> + app:layout_constraintTop_toTopOf="@+id/friend_detail_friends_emotion_container_cl" /> + + + + + + + + + + + + + + + + \ No newline at end of file From 9bdfe1e1060ee944f8f16f81e459711e1f0795f7 Mon Sep 17 00:00:00 2001 From: SsongSik Date: Tue, 13 Jun 2023 00:08:16 +0900 Subject: [PATCH 09/26] =?UTF-8?q?[feat]=20:=20#15=20=EC=B9=9C=EA=B5=AC=20?= =?UTF-8?q?=EA=B8=B0=EB=A1=9D=20=EC=9D=B4=EB=AA=A8=EC=A7=80=20=EB=B7=B0=20?= =?UTF-8?q?=EC=9C=84=EC=B9=98=20=EC=A1=B0=EC=A0=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pome/presentation/friend/FriendRecordGetAdapter.kt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt index b27dc614..72a562ba 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt @@ -51,10 +51,14 @@ class FriendRecordGetAdapter( friendDetailRecordClickListener.onFriendDetailMoreClick(getFriedRecord.id) } + //Todo 시간 표시 필요 + friendDetailContentNameTimeTv.text = " · ${getFriedRecord.oneLineMind}" + if(getFriedRecord.emotionResponse.friendEmotions.isEmpty()) { friendDetailCardLastFriendEmotionCountTv.visibility = View.INVISIBLE } else { val count = getFriedRecord.emotionResponse.friendEmotions.size + if(count >= 10) { friendDetailCardLastFriendEmotionCountTv.text = "9+" } else { @@ -69,11 +73,15 @@ class FriendRecordGetAdapter( } friendDetailCardFirstFriendEmotionAiv.setOnClickListener { + val params = friendEmojiRegisterCl.layoutParams if(friendEmojiRegisterCl.visibility == View.VISIBLE) { friendEmojiRegisterCl.visibility = View.GONE + params.height = 0 } else { friendEmojiRegisterCl.visibility = View.VISIBLE + params.height = ViewGroup.LayoutParams.WRAP_CONTENT } + friendEmojiRegisterCl.layoutParams = params } } } From 5b03eaf86f8b02061e085d55d20539a07307365f Mon Sep 17 00:00:00 2001 From: SsongSik Date: Tue, 13 Jun 2023 00:22:14 +0900 Subject: [PATCH 10/26] =?UTF-8?q?[feat]=20:=20#15=20=EC=B9=9C=EA=B5=AC=20?= =?UTF-8?q?=EA=B8=B0=EB=A1=9D=20my=20=EC=97=AC=EB=B6=80=20=EC=98=88?= =?UTF-8?q?=EC=99=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pome/presentation/friend/FriendRecordGetAdapter.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt index 72a562ba..35495c15 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt @@ -56,7 +56,11 @@ class FriendRecordGetAdapter( if(getFriedRecord.emotionResponse.friendEmotions.isEmpty()) { friendDetailCardLastFriendEmotionCountTv.visibility = View.INVISIBLE + friendDetailCardLastFriendEmotionAiv.visibility = View.INVISIBLE } else { + friendDetailCardLastFriendEmotionCountTv.visibility = View.VISIBLE + friendDetailCardLastFriendEmotionAiv.visibility = View.VISIBLE + val count = getFriedRecord.emotionResponse.friendEmotions.size if(count >= 10) { From ac88178051f12655ed37b1cacc1029f365ae7beb Mon Sep 17 00:00:00 2001 From: SsongSik Date: Wed, 14 Jun 2023 00:30:18 +0900 Subject: [PATCH 11/26] [feat] : #15 Find Friend Fragment Connect --- .../com/teampome/pome/presentation/friend/FriendFragment.kt | 6 ++++++ app/src/main/res/navigation/pome_navigation.xml | 3 +++ 2 files changed, 9 insertions(+) diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt index b9fea4af..c70f632d 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt @@ -4,6 +4,7 @@ import android.util.Log import android.view.View import android.widget.Toast import androidx.fragment.app.viewModels +import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.bottomsheet.BottomSheetDialog @@ -129,6 +130,11 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri binding.friendAllIv.setOnClickListener { getAllFriendRecord() } + + binding.friendAddIv.setOnClickListener { + val action = FriendFragmentDirections.actionFriendFragmentToAddFriendsFragment() + findNavController().navigate(action) + } } //친구 목록 조회 RV diff --git a/app/src/main/res/navigation/pome_navigation.xml b/app/src/main/res/navigation/pome_navigation.xml index 2993baec..b52e4717 100644 --- a/app/src/main/res/navigation/pome_navigation.xml +++ b/app/src/main/res/navigation/pome_navigation.xml @@ -78,6 +78,9 @@ + Date: Wed, 14 Jun 2023 00:51:50 +0900 Subject: [PATCH 12/26] [feat] : #15 Find Friend Fragment Back Button Add --- .../addfriends/AddFriendsFragment.kt | 16 ++++++++++++++++ .../pome/presentation/friend/FriendFragment.kt | 2 +- app/src/main/res/layout/fragment_add_friends.xml | 10 ++++++++++ app/src/main/res/navigation/pome_navigation.xml | 4 ++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/teampome/pome/presentation/addfriends/AddFriendsFragment.kt b/app/src/main/java/com/teampome/pome/presentation/addfriends/AddFriendsFragment.kt index 418603f5..0cac7fe4 100644 --- a/app/src/main/java/com/teampome/pome/presentation/addfriends/AddFriendsFragment.kt +++ b/app/src/main/java/com/teampome/pome/presentation/addfriends/AddFriendsFragment.kt @@ -9,11 +9,14 @@ import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.fragment.app.viewModels +import androidx.navigation.NavArgs import androidx.navigation.fragment.findNavController +import androidx.navigation.fragment.navArgs import com.teampome.pome.R import com.teampome.pome.databinding.FragmentAddFriendsBinding import com.teampome.pome.presentation.addfriends.recyclerview.AddFriendsListAdapter import com.teampome.pome.presentation.addfriends.recyclerview.OnAddFriendClickListener +import com.teampome.pome.presentation.record.add.AddGoalContentsFragmentArgs import com.teampome.pome.util.common.CommonUtil import com.teampome.pome.util.base.ApiResponse import com.teampome.pome.util.base.BaseFragment @@ -23,6 +26,9 @@ import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class AddFriendsFragment : BaseFragment(R.layout.fragment_add_friends) { + + private val args: AddFriendsFragmentArgs by navArgs() + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -42,6 +48,12 @@ class AddFriendsFragment : BaseFragment(R.layout.frag } override fun initView() { + if(args.addFriendType) { + binding.addFriendsBackIv.visibility = View.VISIBLE + } else { + binding.addFriendsBackIv.visibility = View.GONE + } + binding.addFriendsListRv.adapter = AddFriendsListAdapter().apply { setOnAddFriendClickListener(object : OnAddFriendClickListener { override fun onAddFriendClick(friendId: String, position: Int) { @@ -170,6 +182,10 @@ class AddFriendsFragment : BaseFragment(R.layout.frag binding.addFriendsFindDeleteAtv.setOnClickListener { binding.addFriendsNameEt.setText("") } + + binding.addFriendsBackIv.setOnClickListener { + findNavController().popBackStack() + } } private fun bindEmptyFriendData() { diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt index c70f632d..fb5b2ef1 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt @@ -132,7 +132,7 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri } binding.friendAddIv.setOnClickListener { - val action = FriendFragmentDirections.actionFriendFragmentToAddFriendsFragment() + val action = FriendFragmentDirections.actionFriendFragmentToAddFriendsFragment(true) findNavController().navigate(action) } } diff --git a/app/src/main/res/layout/fragment_add_friends.xml b/app/src/main/res/layout/fragment_add_friends.xml index baea09d8..ce3a1a90 100644 --- a/app/src/main/res/layout/fragment_add_friends.xml +++ b/app/src/main/res/layout/fragment_add_friends.xml @@ -18,6 +18,16 @@ android:layout_height="match_parent" android:background="@color/white"> + + + Date: Thu, 15 Jun 2023 23:59:32 +0900 Subject: [PATCH 13/26] [feat] : #15 Friend List Profile Image add --- .../pome/presentation/friend/FriendFragment.kt | 2 +- .../presentation/friend/FriendGetAdapter.kt | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt index fb5b2ef1..cdaa6fed 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt @@ -139,7 +139,7 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri //친구 목록 조회 RV private fun setUpRecyclerView(){ - friendGetAdapter = FriendGetAdapter() + friendGetAdapter = FriendGetAdapter(context) binding.friendListRv.apply { // setHasFixedSize(true) layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false) diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendGetAdapter.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendGetAdapter.kt index 74fe38da..cfa414e0 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendGetAdapter.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendGetAdapter.kt @@ -1,15 +1,19 @@ package com.teampome.pome.presentation.friend +import android.content.Context import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide import com.teampome.pome.databinding.ItemFriendsListBinding import com.teampome.pome.model.response.GetFriends // 친구 탭에서 친구 조회하는 친구 리스트 어댑터 -class FriendGetAdapter : ListAdapter(BookDiffCallback) { +class FriendGetAdapter( + private val context : Context? +) : ListAdapter(BookDiffCallback) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FriendGetViewHolder { return FriendGetViewHolder( @@ -34,12 +38,20 @@ class FriendGetAdapter : ListAdapter= 3) { + fun bind(getFriends: GetFriends) = with(binding){ + friendAllTv.text = if (getFriends.friendNickName.length >= 3) { "${getFriends.friendNickName.substring(0, 3)}..." } else { getFriends.friendNickName } + friendListProfileIv.clipToOutline = true + + context?.let { context -> + Glide.with(context) + .load(getFriends.imageKey) + .circleCrop() + .into(friendListProfileIv) + } } } From ccfa2f96beac4dac4b8c96d084a65eedf1928b71 Mon Sep 17 00:00:00 2001 From: SsongSik Date: Fri, 16 Jun 2023 00:51:25 +0900 Subject: [PATCH 14/26] [feat] : #15 Friend List Selected Text Color Change --- .../presentation/friend/FriendGetAdapter.kt | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendGetAdapter.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendGetAdapter.kt index cfa414e0..4d372f40 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendGetAdapter.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendGetAdapter.kt @@ -1,6 +1,8 @@ package com.teampome.pome.presentation.friend import android.content.Context +import android.graphics.Color +import android.util.Log import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil @@ -15,6 +17,8 @@ class FriendGetAdapter( private val context : Context? ) : ListAdapter(BookDiffCallback) { + private var selectedPosition = -1 + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FriendGetViewHolder { return FriendGetViewHolder( ItemFriendsListBinding.inflate(LayoutInflater.from(parent.context), parent, false), @@ -24,9 +28,7 @@ class FriendGetAdapter( override fun onBindViewHolder(holder: FriendGetViewHolder, position: Int) { val friends = currentList[position] holder.bind(friends) - holder.itemView.setOnClickListener { - onItemClickListener?.let{ it(friends) } - } + } private var onItemClickListener : ((GetFriends) -> Unit)? = null @@ -44,7 +46,6 @@ class FriendGetAdapter( } else { getFriends.friendNickName } - friendListProfileIv.clipToOutline = true context?.let { context -> Glide.with(context) @@ -52,6 +53,16 @@ class FriendGetAdapter( .circleCrop() .into(friendListProfileIv) } + + friendAllTv.setTextColor( + if (adapterPosition == selectedPosition) Color.BLACK else Color.GRAY + ) + + itemView.setOnClickListener { + selectedPosition = adapterPosition + notifyDataSetChanged() + onItemClickListener?.invoke(getFriends) + } } } From 70cd6228c2f84d39d1437ea712a8fbeef37428a8 Mon Sep 17 00:00:00 2001 From: SsongSik Date: Fri, 16 Jun 2023 00:53:01 +0900 Subject: [PATCH 15/26] [feat] : #15 adapterPosition Deprecated -> bindingAdapterPosition Change --- .../pome/presentation/friend/FriendGetAdapter.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendGetAdapter.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendGetAdapter.kt index 4d372f40..faa08f77 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendGetAdapter.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendGetAdapter.kt @@ -54,15 +54,15 @@ class FriendGetAdapter( .into(friendListProfileIv) } - friendAllTv.setTextColor( - if (adapterPosition == selectedPosition) Color.BLACK else Color.GRAY - ) - itemView.setOnClickListener { - selectedPosition = adapterPosition + selectedPosition = bindingAdapterPosition notifyDataSetChanged() onItemClickListener?.invoke(getFriends) } + + friendAllTv.setTextColor( + if (bindingAdapterPosition == selectedPosition) Color.BLACK else Color.GRAY + ) } } From 1597df505683941e8e3ae87b16f1330696a5045d Mon Sep 17 00:00:00 2001 From: SsongSik Date: Fri, 16 Jun 2023 00:54:10 +0900 Subject: [PATCH 16/26] [feat] : #15 Friend Record ItemClick Remove --- .../teampome/pome/presentation/friend/FriendFragment.kt | 5 ----- .../pome/presentation/friend/FriendRecordGetAdapter.kt | 8 -------- 2 files changed, 13 deletions(-) diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt index cdaa6fed..0e5d3481 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt @@ -165,11 +165,6 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false) adapter = friendRecordGetAdapter } - - // 클릭 리스너 - friendRecordGetAdapter.setOnItemClickListener { - Toast.makeText(requireContext(), "${it.nickname}", Toast.LENGTH_SHORT).show() - } } private fun getAllFriendRecord() { diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt index 35495c15..76ceec2c 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt @@ -28,14 +28,6 @@ class FriendRecordGetAdapter( override fun onBindViewHolder(holder: FriendGetRecordViewHolder, position: Int) { val friends = currentList[position] holder.bind(friends) - holder.itemView.setOnClickListener { - onItemClickListener?.let{ it(friends) } - } - } - - private var onItemClickListener : ((GetFriendRecord) -> Unit)? = null - fun setOnItemClickListener(listener : (GetFriendRecord) -> Unit){ - onItemClickListener = listener } inner class FriendGetRecordViewHolder( From 69a46085679893327ef955eb44fc5b1e1700ffc5 Mon Sep 17 00:00:00 2001 From: SsongSik Date: Sun, 18 Jun 2023 18:30:32 +0900 Subject: [PATCH 17/26] [feat] : #15 Friend's record hide --- .../java/com/teampome/pome/network/AddFriendsService.kt | 2 +- .../com/teampome/pome/presentation/friend/FriendFragment.kt | 6 ++++++ .../java/com/teampome/pome/viewmodel/AddFriendsViewModel.kt | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/teampome/pome/network/AddFriendsService.kt b/app/src/main/java/com/teampome/pome/network/AddFriendsService.kt index b11c3176..fec896c2 100644 --- a/app/src/main/java/com/teampome/pome/network/AddFriendsService.kt +++ b/app/src/main/java/com/teampome/pome/network/AddFriendsService.kt @@ -50,7 +50,7 @@ interface AddFriendsService { Response>> //기록 숨기기 - @DELETE("api/v1/records/{recordId}") + @DELETE("api/v1/records/hide/{recordId}") suspend fun deleteFriendRecord( @Path("recordId") recordId: Int ) : Response> diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt index 0e5d3481..ea44d25f 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt @@ -117,6 +117,12 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri is ApiResponse.Success -> { hideLoading() Toast.makeText(requireContext(), "해당 게시글을 숨겼어요", Toast.LENGTH_SHORT).show() + viewModel.getAllRecordFriend(object : CoroutineErrorHandler{ + override fun onError(message: String) { + Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show() + hideLoading() + } + }) } is ApiResponse.Failure -> { hideLoading() diff --git a/app/src/main/java/com/teampome/pome/viewmodel/AddFriendsViewModel.kt b/app/src/main/java/com/teampome/pome/viewmodel/AddFriendsViewModel.kt index 61ef1966..7140b0c5 100644 --- a/app/src/main/java/com/teampome/pome/viewmodel/AddFriendsViewModel.kt +++ b/app/src/main/java/com/teampome/pome/viewmodel/AddFriendsViewModel.kt @@ -50,6 +50,7 @@ class AddFriendsViewModel @Inject constructor( private val _getAllFriendRecordResponse = MutableLiveData>>>() val getAllFriendRecordResponse : LiveData>>> = _getAllFriendRecordResponse + //친구 기록 숨기기 private val _deleteFriendRecord = MutableLiveData>>() val deleteFriendRecord : LiveData>> = _deleteFriendRecord From b9809d74cbf0b307241b8024d50d91f23fa898ed Mon Sep 17 00:00:00 2001 From: SsongSik Date: Sun, 18 Jun 2023 19:53:55 +0900 Subject: [PATCH 18/26] [feat] : #15 Friend Record Profile Image HashMap Connect --- .../presentation/friend/FriendFragment.kt | 1 + .../friend/FriendRecordGetAdapter.kt | 21 +++++++++++++++++++ .../pome/viewmodel/AddFriendsViewModel.kt | 2 -- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt index ea44d25f..9856efe3 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt @@ -61,6 +61,7 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri (binding.friendListRv.adapter as FriendGetAdapter).submitList( list ) + friendRecordGetAdapter.updateFriendsMap(list) } } } diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt index 76ceec2c..18ab9a01 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt @@ -1,6 +1,7 @@ package com.teampome.pome.presentation.friend import android.content.Context +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -11,6 +12,7 @@ import com.bumptech.glide.Glide import com.teampome.pome.R import com.teampome.pome.databinding.ItemFriendDetailCardBinding import com.teampome.pome.model.response.GetFriendRecord +import com.teampome.pome.model.response.GetFriends //친구 기록 조회 class FriendRecordGetAdapter( @@ -18,6 +20,14 @@ class FriendRecordGetAdapter( private val context : Context? ) : ListAdapter(BookDiffCallback) { + private val friendsMap: HashMap = HashMap() + + fun updateFriendsMap(friends: List) { + for (friend in friends) { + friendsMap[friend.friendNickName] = friend + } + } + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FriendGetRecordViewHolder { return FriendGetRecordViewHolder( clickListener, @@ -79,6 +89,17 @@ class FriendRecordGetAdapter( } friendEmojiRegisterCl.layoutParams = params } + + val friend = friendsMap[getFriedRecord.nickname] + Log.d("gg1234", getFriedRecord.id.toString()) + Log.d("gg1234", friend?.imageKey.toString()) + + friend?.let { + Glide.with(itemView.context) + .load(it.imageKey) + .circleCrop() + .into(friendDetailProfileIv) + } } } diff --git a/app/src/main/java/com/teampome/pome/viewmodel/AddFriendsViewModel.kt b/app/src/main/java/com/teampome/pome/viewmodel/AddFriendsViewModel.kt index 7140b0c5..72b5340e 100644 --- a/app/src/main/java/com/teampome/pome/viewmodel/AddFriendsViewModel.kt +++ b/app/src/main/java/com/teampome/pome/viewmodel/AddFriendsViewModel.kt @@ -120,6 +120,4 @@ class AddFriendsViewModel @Inject constructor( is ApiResponse.Failure -> { null } } } - - } \ No newline at end of file From 749a1326786d504529034aec4f4ff0fe5fa10774 Mon Sep 17 00:00:00 2001 From: SsongSik Date: Sun, 18 Jun 2023 19:54:25 +0900 Subject: [PATCH 19/26] [feat] : #15 Test Log Remove --- .../teampome/pome/presentation/friend/FriendRecordGetAdapter.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt index 18ab9a01..de27f20f 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt @@ -91,8 +91,6 @@ class FriendRecordGetAdapter( } val friend = friendsMap[getFriedRecord.nickname] - Log.d("gg1234", getFriedRecord.id.toString()) - Log.d("gg1234", friend?.imageKey.toString()) friend?.let { Glide.with(itemView.context) From 44c7018534bbf77d678bc5c977627ba7ebba1171 Mon Sep 17 00:00:00 2001 From: SsongSik Date: Sun, 18 Jun 2023 20:04:04 +0900 Subject: [PATCH 20/26] [feat] : #15 ViewHolder Context -> itemView.context Modify --- .../teampome/pome/presentation/friend/FriendFragment.kt | 2 +- .../pome/presentation/friend/FriendRecordGetAdapter.kt | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt index 9856efe3..edbc3d86 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt @@ -166,7 +166,7 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri //친구 기록 조회 RV private fun friendRecordSetUpRecyclerView(){ - friendRecordGetAdapter = FriendRecordGetAdapter(this, context) + friendRecordGetAdapter = FriendRecordGetAdapter(this) binding.friendDetailRv.apply { // setHasFixedSize(true) layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false) diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt index de27f20f..8daa228e 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt @@ -17,7 +17,6 @@ import com.teampome.pome.model.response.GetFriends //친구 기록 조회 class FriendRecordGetAdapter( private val clickListener: FriendDetailRecordClickListener, - private val context : Context? ) : ListAdapter(BookDiffCallback) { private val friendsMap: HashMap = HashMap() @@ -73,7 +72,7 @@ class FriendRecordGetAdapter( } if(getFriedRecord.emotionResponse.myEmotion == null) { - context?.let{ context -> + itemView.context?.let{ context -> Glide.with(context).load(R.drawable.emoji_mint_28).into(friendDetailCardFirstFriendEmotionAiv) } } @@ -90,11 +89,11 @@ class FriendRecordGetAdapter( friendEmojiRegisterCl.layoutParams = params } - val friend = friendsMap[getFriedRecord.nickname] + val friends = friendsMap[getFriedRecord.nickname] - friend?.let { + friends?.let { friend -> Glide.with(itemView.context) - .load(it.imageKey) + .load(friend.imageKey) .circleCrop() .into(friendDetailProfileIv) } From 787e40809de934ac94980cc605cf49d7e16ee684 Mon Sep 17 00:00:00 2001 From: SsongSik Date: Sun, 18 Jun 2023 20:22:55 +0900 Subject: [PATCH 21/26] [feat] : #15 Friend Record Time implement --- .../friend/FriendRecordGetAdapter.kt | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt index 8daa228e..9c312ccb 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt @@ -1,10 +1,12 @@ package com.teampome.pome.presentation.friend import android.content.Context +import android.os.Build import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.annotation.RequiresApi import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView @@ -13,6 +15,10 @@ import com.teampome.pome.R import com.teampome.pome.databinding.ItemFriendDetailCardBinding import com.teampome.pome.model.response.GetFriendRecord import com.teampome.pome.model.response.GetFriends +import java.time.Duration +import java.time.Instant +import java.time.ZonedDateTime +import java.time.format.DateTimeFormatter //친구 기록 조회 class FriendRecordGetAdapter( @@ -34,6 +40,7 @@ class FriendRecordGetAdapter( ) } + @RequiresApi(Build.VERSION_CODES.O) override fun onBindViewHolder(holder: FriendGetRecordViewHolder, position: Int) { val friends = currentList[position] holder.bind(friends) @@ -44,6 +51,7 @@ class FriendRecordGetAdapter( private val binding : ItemFriendDetailCardBinding, ) : RecyclerView.ViewHolder(binding.root){ + @RequiresApi(Build.VERSION_CODES.O) fun bind(getFriedRecord: GetFriendRecord){ with(binding) { getFriendRecord = getFriedRecord @@ -52,8 +60,8 @@ class FriendRecordGetAdapter( friendDetailRecordClickListener.onFriendDetailMoreClick(getFriedRecord.id) } - //Todo 시간 표시 필요 - friendDetailContentNameTimeTv.text = " · ${getFriedRecord.oneLineMind}" + val timeString = getTimeAgo(getFriedRecord.createdAt) + friendDetailContentNameTimeTv.text = " · ${getFriedRecord.oneLineMind} · $timeString" if(getFriedRecord.emotionResponse.friendEmotions.isEmpty()) { friendDetailCardLastFriendEmotionCountTv.visibility = View.INVISIBLE @@ -100,7 +108,24 @@ class FriendRecordGetAdapter( } } + @RequiresApi(Build.VERSION_CODES.O) + private fun getTimeAgo(isoTime: String): String { + // 마이크로 초 부분을 잘라냅니다. + val modifiedIsoTime = isoTime.substring(0, isoTime.lastIndexOf(".") + 4) + "Z" + val time = Instant.parse(modifiedIsoTime) + val now = Instant.now() + val duration = Duration.between(time, now) + + return when { + duration.toMinutes() < 1 -> "방금 전" + duration.toMinutes() < 60 -> "${duration.toMinutes()}분 전" + duration.toHours() < 24 -> "${duration.toHours()}시간 전" + duration.toDays() < 2 -> "어제" + else -> ZonedDateTime.parse(modifiedIsoTime).format(DateTimeFormatter.ofPattern("M월 d일")) + } + } } + companion object{ private val BookDiffCallback = object : DiffUtil.ItemCallback(){ override fun areItemsTheSame(oldItem: GetFriendRecord, newItem: GetFriendRecord): Boolean { From e71355a2341d7561b8167b4f61e06ed5a4c75db3 Mon Sep 17 00:00:00 2001 From: SsongSik Date: Sat, 24 Jun 2023 01:14:25 +0900 Subject: [PATCH 22/26] [feat] : #15 FriendRecordGetAdapter inner class seperate --- .../friend/FriendGetRecordViewHolder.kt | 92 +++++++++++++++++++ .../friend/FriendRecordGetAdapter.kt | 84 +---------------- 2 files changed, 94 insertions(+), 82 deletions(-) create mode 100644 app/src/main/java/com/teampome/pome/presentation/friend/FriendGetRecordViewHolder.kt diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendGetRecordViewHolder.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendGetRecordViewHolder.kt new file mode 100644 index 00000000..f08a5018 --- /dev/null +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendGetRecordViewHolder.kt @@ -0,0 +1,92 @@ +package com.teampome.pome.presentation.friend + +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.teampome.pome.R +import com.teampome.pome.databinding.ItemFriendDetailCardBinding +import com.teampome.pome.model.response.GetFriendRecord +import com.teampome.pome.model.response.GetFriends +import java.time.Duration +import java.time.Instant +import java.time.ZonedDateTime +import java.time.format.DateTimeFormatter + +class FriendGetRecordViewHolder( + private val friendDetailRecordClickListener: FriendDetailRecordClickListener, + private val binding : ItemFriendDetailCardBinding, + private val friendsMap: HashMap +) : RecyclerView.ViewHolder(binding.root){ + + fun bind(getFriedRecord: GetFriendRecord){ + with(binding) { + getFriendRecord = getFriedRecord + + friendDetailMoreSettingIv.setOnClickListener { + friendDetailRecordClickListener.onFriendDetailMoreClick(getFriedRecord.id) + } + + val timeString = getTimeAgo(getFriedRecord.createdAt) + friendDetailContentNameTimeTv.text = " · ${getFriedRecord.oneLineMind} · $timeString" + + if(getFriedRecord.emotionResponse.friendEmotions.isEmpty()) { + friendDetailCardLastFriendEmotionCountTv.visibility = View.INVISIBLE + friendDetailCardLastFriendEmotionAiv.visibility = View.INVISIBLE + } else { + friendDetailCardLastFriendEmotionCountTv.visibility = View.VISIBLE + friendDetailCardLastFriendEmotionAiv.visibility = View.VISIBLE + + val count = getFriedRecord.emotionResponse.friendEmotions.size + + if(count >= 10) { + friendDetailCardLastFriendEmotionCountTv.text = "9+" + } else { + friendDetailCardLastFriendEmotionCountTv.text = "+$count" + } + } + + if(getFriedRecord.emotionResponse.myEmotion == null) { + itemView.context?.let{ context -> + Glide.with(context).load(R.drawable.emoji_mint_28).into(friendDetailCardFirstFriendEmotionAiv) + } + } + + friendDetailCardFirstFriendEmotionAiv.setOnClickListener { + val params = friendEmojiRegisterCl.layoutParams + if(friendEmojiRegisterCl.visibility == View.VISIBLE) { + friendEmojiRegisterCl.visibility = View.GONE + params.height = 0 + } else { + friendEmojiRegisterCl.visibility = View.VISIBLE + params.height = ViewGroup.LayoutParams.WRAP_CONTENT + } + friendEmojiRegisterCl.layoutParams = params + } + + val friends = friendsMap[getFriedRecord.nickname] + + friends?.let { friend -> + Glide.with(itemView.context) + .load(friend.imageKey) + .circleCrop() + .into(friendDetailProfileIv) + } + } + } + + private fun getTimeAgo(isoTime: String): String { + val modifiedIsoTime = isoTime.substring(0, isoTime.lastIndexOf(".") + 4) + "Z" + val time = Instant.parse(modifiedIsoTime) + val now = Instant.now() + val duration = Duration.between(time, now) + + return when { + duration.toMinutes() < 1 -> "방금 전" + duration.toMinutes() < 60 -> "${duration.toMinutes()}분 전" + duration.toHours() < 24 -> "${duration.toHours()}시간 전" + duration.toDays() < 2 -> "어제" + else -> ZonedDateTime.parse(modifiedIsoTime).format(DateTimeFormatter.ofPattern("M월 d일")) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt index 9c312ccb..67c50006 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendRecordGetAdapter.kt @@ -23,7 +23,7 @@ import java.time.format.DateTimeFormatter //친구 기록 조회 class FriendRecordGetAdapter( private val clickListener: FriendDetailRecordClickListener, -) : ListAdapter(BookDiffCallback) { +) : ListAdapter(BookDiffCallback) { private val friendsMap: HashMap = HashMap() @@ -37,95 +37,15 @@ class FriendRecordGetAdapter( return FriendGetRecordViewHolder( clickListener, ItemFriendDetailCardBinding.inflate(LayoutInflater.from(parent.context), parent, false), + friendsMap ) } - @RequiresApi(Build.VERSION_CODES.O) override fun onBindViewHolder(holder: FriendGetRecordViewHolder, position: Int) { val friends = currentList[position] holder.bind(friends) } - inner class FriendGetRecordViewHolder( - private val friendDetailRecordClickListener: FriendDetailRecordClickListener, - private val binding : ItemFriendDetailCardBinding, - ) : RecyclerView.ViewHolder(binding.root){ - - @RequiresApi(Build.VERSION_CODES.O) - fun bind(getFriedRecord: GetFriendRecord){ - with(binding) { - getFriendRecord = getFriedRecord - - friendDetailMoreSettingIv.setOnClickListener { - friendDetailRecordClickListener.onFriendDetailMoreClick(getFriedRecord.id) - } - - val timeString = getTimeAgo(getFriedRecord.createdAt) - friendDetailContentNameTimeTv.text = " · ${getFriedRecord.oneLineMind} · $timeString" - - if(getFriedRecord.emotionResponse.friendEmotions.isEmpty()) { - friendDetailCardLastFriendEmotionCountTv.visibility = View.INVISIBLE - friendDetailCardLastFriendEmotionAiv.visibility = View.INVISIBLE - } else { - friendDetailCardLastFriendEmotionCountTv.visibility = View.VISIBLE - friendDetailCardLastFriendEmotionAiv.visibility = View.VISIBLE - - val count = getFriedRecord.emotionResponse.friendEmotions.size - - if(count >= 10) { - friendDetailCardLastFriendEmotionCountTv.text = "9+" - } else { - friendDetailCardLastFriendEmotionCountTv.text = "+$count" - } - } - - if(getFriedRecord.emotionResponse.myEmotion == null) { - itemView.context?.let{ context -> - Glide.with(context).load(R.drawable.emoji_mint_28).into(friendDetailCardFirstFriendEmotionAiv) - } - } - - friendDetailCardFirstFriendEmotionAiv.setOnClickListener { - val params = friendEmojiRegisterCl.layoutParams - if(friendEmojiRegisterCl.visibility == View.VISIBLE) { - friendEmojiRegisterCl.visibility = View.GONE - params.height = 0 - } else { - friendEmojiRegisterCl.visibility = View.VISIBLE - params.height = ViewGroup.LayoutParams.WRAP_CONTENT - } - friendEmojiRegisterCl.layoutParams = params - } - - val friends = friendsMap[getFriedRecord.nickname] - - friends?.let { friend -> - Glide.with(itemView.context) - .load(friend.imageKey) - .circleCrop() - .into(friendDetailProfileIv) - } - } - } - - @RequiresApi(Build.VERSION_CODES.O) - private fun getTimeAgo(isoTime: String): String { - // 마이크로 초 부분을 잘라냅니다. - val modifiedIsoTime = isoTime.substring(0, isoTime.lastIndexOf(".") + 4) + "Z" - val time = Instant.parse(modifiedIsoTime) - val now = Instant.now() - val duration = Duration.between(time, now) - - return when { - duration.toMinutes() < 1 -> "방금 전" - duration.toMinutes() < 60 -> "${duration.toMinutes()}분 전" - duration.toHours() < 24 -> "${duration.toHours()}시간 전" - duration.toDays() < 2 -> "어제" - else -> ZonedDateTime.parse(modifiedIsoTime).format(DateTimeFormatter.ofPattern("M월 d일")) - } - } - } - companion object{ private val BookDiffCallback = object : DiffUtil.ItemCallback(){ override fun areItemsTheSame(oldItem: GetFriendRecord, newItem: GetFriendRecord): Boolean { From 6e658acee9297dcd9dd5e8cbcd5ffab8299509e0 Mon Sep 17 00:00:00 2001 From: SsongSik Date: Sat, 24 Jun 2023 02:21:56 +0900 Subject: [PATCH 23/26] [feat] : #15 FriendRecord Emoji Bottom Sheet Design Modify --- .../friend/FriendDetailRecordClickListener.kt | 5 ++++ .../presentation/friend/FriendFragment.kt | 5 ++++ .../friend/FriendGetRecordViewHolder.kt | 4 +++ ...ome_friend_emotion_bottom_sheet_dialog.xml | 30 ++++++++++--------- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendDetailRecordClickListener.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendDetailRecordClickListener.kt index 65a0a601..b2c0b06c 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendDetailRecordClickListener.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendDetailRecordClickListener.kt @@ -1,7 +1,12 @@ package com.teampome.pome.presentation.friend +import com.teampome.pome.model.response.FriendEmotionResponse + //친구 기록 클릭 리스너 interface FriendDetailRecordClickListener { fun onFriendDetailMoreClick(recordId : Int) + + fun onFriendDetailEmojiClick(emojiList : List) + } \ No newline at end of file diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt index edbc3d86..c58a2c84 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt @@ -13,6 +13,7 @@ import com.teampome.pome.databinding.FragmentFriendBinding import com.teampome.pome.databinding.PomeCalendarBottomSheetDialogBinding import com.teampome.pome.databinding.PomeFriendSettingBottomSheetDialogBinding import com.teampome.pome.databinding.PomeRecordMoreGoalBottomSheetDialogBinding +import com.teampome.pome.model.response.FriendEmotionResponse import com.teampome.pome.util.base.ApiResponse import com.teampome.pome.util.base.BaseFragment import com.teampome.pome.util.base.CoroutineErrorHandler @@ -212,4 +213,8 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri makeFriendSettingBottomDialog(recordId) friendSettingBottomSheetDialog.show() } + + override fun onFriendDetailEmojiClick(emojiList: List) { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendGetRecordViewHolder.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendGetRecordViewHolder.kt index f08a5018..c8072350 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendGetRecordViewHolder.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendGetRecordViewHolder.kt @@ -72,6 +72,10 @@ class FriendGetRecordViewHolder( .circleCrop() .into(friendDetailProfileIv) } + + friendDetailCardLastFriendEmotionAiv.setOnClickListener { + friendDetailRecordClickListener.onFriendDetailEmojiClick(getFriedRecord.emotionResponse.friendEmotions) + } } } diff --git a/app/src/main/res/layout/pome_friend_emotion_bottom_sheet_dialog.xml b/app/src/main/res/layout/pome_friend_emotion_bottom_sheet_dialog.xml index 8ec20185..5f359e39 100644 --- a/app/src/main/res/layout/pome_friend_emotion_bottom_sheet_dialog.xml +++ b/app/src/main/res/layout/pome_friend_emotion_bottom_sheet_dialog.xml @@ -19,71 +19,73 @@ android:id="@+id/friend_detail_profile_iv" android:layout_width="34dp" android:layout_height="34dp" - android:layout_marginLeft="19dp" + android:layout_marginStart="19dp" android:layout_marginBottom="20dp" android:src="@drawable/ic_friend_all_on" app:layout_constraintBottom_toTopOf="@+id/friend_detail_all_emotion_tv" - app:layout_constraintLeft_toLeftOf="parent" /> + app:layout_constraintStart_toStartOf="parent" /> + app:layout_constraintStart_toEndOf="@+id/friend_detail_profile_iv" + app:layout_constraintEnd_toStartOf="@+id/friend_detail_emoji_what_iv"/> + app:layout_constraintStart_toEndOf="@+id/friend_detail_emoji_love_iv" + app:layout_constraintEnd_toStartOf="@+id/friend_detail_emoji_merong_iv"/> + app:layout_constraintStart_toEndOf="@+id/friend_detail_emoji_what_iv" + app:layout_constraintEnd_toStartOf="@+id/friend_detail_emoji_glass_iv"/> + app:layout_constraintStart_toEndOf="@+id/friend_detail_emoji_merong_iv" + app:layout_constraintEnd_toStartOf="@+id/friend_detail_emoji_sad_iv"/> + app:layout_constraintStart_toEndOf="@+id/friend_detail_emoji_glass_iv" + app:layout_constraintEnd_toStartOf="@+id/friend_detail_emoji_happy_iv" + /> + app:layout_constraintLeft_toRightOf="@id/friend_detail_emoji_sad_iv" + app:layout_constraintEnd_toEndOf="parent"/> Date: Sat, 24 Jun 2023 02:38:00 +0900 Subject: [PATCH 24/26] [feat] : #15 FriendRecord Emoji Bottom Sheet RV Add --- app/src/main/res/layout/item_bottom_emoji.xml | 29 ++++ ...ome_friend_emotion_bottom_sheet_dialog.xml | 133 ++++-------------- 2 files changed, 53 insertions(+), 109 deletions(-) create mode 100644 app/src/main/res/layout/item_bottom_emoji.xml diff --git a/app/src/main/res/layout/item_bottom_emoji.xml b/app/src/main/res/layout/item_bottom_emoji.xml new file mode 100644 index 00000000..ef406235 --- /dev/null +++ b/app/src/main/res/layout/item_bottom_emoji.xml @@ -0,0 +1,29 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/pome_friend_emotion_bottom_sheet_dialog.xml b/app/src/main/res/layout/pome_friend_emotion_bottom_sheet_dialog.xml index 5f359e39..5182bc0b 100644 --- a/app/src/main/res/layout/pome_friend_emotion_bottom_sheet_dialog.xml +++ b/app/src/main/res/layout/pome_friend_emotion_bottom_sheet_dialog.xml @@ -32,8 +32,8 @@ android:layout_marginBottom="20dp" android:src="@drawable/emoji_love" app:layout_constraintBottom_toTopOf="@+id/friend_detail_all_emotion_tv" - app:layout_constraintStart_toEndOf="@+id/friend_detail_profile_iv" - app:layout_constraintEnd_toStartOf="@+id/friend_detail_emoji_what_iv"/> + app:layout_constraintEnd_toStartOf="@+id/friend_detail_emoji_what_iv" + app:layout_constraintStart_toEndOf="@+id/friend_detail_profile_iv" /> + app:layout_constraintEnd_toStartOf="@+id/friend_detail_emoji_merong_iv" + app:layout_constraintStart_toEndOf="@+id/friend_detail_emoji_love_iv" /> + app:layout_constraintEnd_toStartOf="@+id/friend_detail_emoji_glass_iv" + app:layout_constraintStart_toEndOf="@+id/friend_detail_emoji_what_iv" /> + app:layout_constraintEnd_toStartOf="@+id/friend_detail_emoji_sad_iv" + app:layout_constraintStart_toEndOf="@+id/friend_detail_emoji_merong_iv" /> + app:layout_constraintStart_toEndOf="@+id/friend_detail_emoji_glass_iv" /> + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintLeft_toRightOf="@id/friend_detail_emoji_sad_iv" /> - - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintHorizontal_bias="1.0" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/friend_detail_all_emotion_tv" + tools:listitem="@layout/item_bottom_emoji" /> \ No newline at end of file From e1dfbcac43fddb9930f812f79fbb097903a06727 Mon Sep 17 00:00:00 2001 From: SsongSik Date: Sat, 24 Jun 2023 03:25:28 +0900 Subject: [PATCH 25/26] [feat] : #15 FriendRecord Emoji Bottom Sheet EmojiList Implement --- .../BottomEmojiGridSpaceItemDecoration.kt | 32 +++++++++++ .../friend/FriendEmotionAdapter.kt | 36 +++++++++++++ .../presentation/friend/FriendFragment.kt | 29 +++++++++- app/src/main/res/layout/item_bottom_emoji.xml | 54 +++++++++++-------- ...ome_friend_emotion_bottom_sheet_dialog.xml | 1 + 5 files changed, 128 insertions(+), 24 deletions(-) create mode 100644 app/src/main/java/com/teampome/pome/presentation/friend/BottomEmojiGridSpaceItemDecoration.kt create mode 100644 app/src/main/java/com/teampome/pome/presentation/friend/FriendEmotionAdapter.kt diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/BottomEmojiGridSpaceItemDecoration.kt b/app/src/main/java/com/teampome/pome/presentation/friend/BottomEmojiGridSpaceItemDecoration.kt new file mode 100644 index 00000000..48ddaa63 --- /dev/null +++ b/app/src/main/java/com/teampome/pome/presentation/friend/BottomEmojiGridSpaceItemDecoration.kt @@ -0,0 +1,32 @@ +package com.teampome.pome.presentation.friend + +import android.graphics.Rect +import android.view.View +import androidx.recyclerview.widget.RecyclerView +import com.teampome.pome.util.common.CommonUtil + +class BottomEmojiGridSpaceItemDecoration(private val spanCount: Int): RecyclerView.ItemDecoration() { + // 3, 20 + override fun getItemOffsets( + outRect: Rect, + view: View, + parent: RecyclerView, + state: RecyclerView.State + ) { + val position = parent.getChildAdapterPosition(view) + + val column = position % spanCount + + val spaceInPx = CommonUtil.dpToPx(parent.context, 10) + + outRect.top = spaceInPx + + if (column == 0) { + outRect.left = spaceInPx + } else if (column == 1) { + outRect.left = spaceInPx + } else if (column == 2) { + outRect.left = spaceInPx + } + } +} diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendEmotionAdapter.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendEmotionAdapter.kt new file mode 100644 index 00000000..67b5e51f --- /dev/null +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendEmotionAdapter.kt @@ -0,0 +1,36 @@ +package com.teampome.pome.presentation.friend + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.teampome.pome.databinding.ItemBottomEmojiBinding +import com.teampome.pome.model.response.FriendEmotionResponse + +class FriendEmotionAdapter( + private var friendEmotionList: List +) : RecyclerView.Adapter() { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FriendEmotionViewHolder { + val binding = ItemBottomEmojiBinding.inflate(LayoutInflater.from(parent.context), parent, false) + return FriendEmotionViewHolder(binding) + } + + override fun onBindViewHolder(holder: FriendEmotionViewHolder, position: Int) { + holder.bind(friendEmotionList[position]) + } + + override fun getItemCount(): Int = friendEmotionList.size + + fun updateData(newData: List) { + this.friendEmotionList = newData + notifyDataSetChanged() + } + + inner class FriendEmotionViewHolder( + private val binding: ItemBottomEmojiBinding + ) : RecyclerView.ViewHolder(binding.root) { + fun bind(friendEmotion: FriendEmotionResponse) { + binding.friendEmotionHappyTv.text = friendEmotion.nickname + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt index c58a2c84..a5640741 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt @@ -6,11 +6,13 @@ import android.widget.Toast import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.bottomsheet.BottomSheetDialog import com.teampome.pome.R import com.teampome.pome.databinding.FragmentFriendBinding import com.teampome.pome.databinding.PomeCalendarBottomSheetDialogBinding +import com.teampome.pome.databinding.PomeFriendEmotionBottomSheetDialogBinding import com.teampome.pome.databinding.PomeFriendSettingBottomSheetDialogBinding import com.teampome.pome.databinding.PomeRecordMoreGoalBottomSheetDialogBinding import com.teampome.pome.model.response.FriendEmotionResponse @@ -31,6 +33,9 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri private lateinit var pomeFriendSettingBottomSheetDialogBinding : PomeFriendSettingBottomSheetDialogBinding private lateinit var friendSettingBottomSheetDialog: BottomSheetDialog + private lateinit var pomeFriendEmojiBottomSheetDialogBinding : PomeFriendEmotionBottomSheetDialogBinding + private lateinit var pomeFriendEmojiBottomSheetDialog: BottomSheetDialog + override fun initView() { setUpRecyclerView() friendRecordSetUpRecyclerView() @@ -209,12 +214,34 @@ class FriendFragment : BaseFragment(R.layout.fragment_fri } } + private fun makeFriendEmojiBottomDialog(emojiList : List) { + pomeFriendEmojiBottomSheetDialog = BottomSheetDialog(requireContext()) + pomeFriendEmojiBottomSheetDialogBinding = PomeFriendEmotionBottomSheetDialogBinding.inflate(layoutInflater, null, false) + + pomeFriendEmojiBottomSheetDialog.setContentView(pomeFriendEmojiBottomSheetDialogBinding.root) + + with(pomeFriendEmojiBottomSheetDialogBinding) { + val emojiListSize = emojiList.size + friendDetailAllEmotionTv.text = "전체 ${emojiListSize}개" + + val gridLayoutManager = GridLayoutManager(context, 3) + val adapter = FriendEmotionAdapter(emojiList) + val decoration = BottomEmojiGridSpaceItemDecoration(3) + friendBottomEmojiRv.apply { + layoutManager = gridLayoutManager + this.adapter = adapter + addItemDecoration(decoration) + } + } + } + override fun onFriendDetailMoreClick(recordId : Int) { makeFriendSettingBottomDialog(recordId) friendSettingBottomSheetDialog.show() } override fun onFriendDetailEmojiClick(emojiList: List) { - + makeFriendEmojiBottomDialog(emojiList) + pomeFriendEmojiBottomSheetDialog.show() } } \ No newline at end of file diff --git a/app/src/main/res/layout/item_bottom_emoji.xml b/app/src/main/res/layout/item_bottom_emoji.xml index ef406235..8cc5d374 100644 --- a/app/src/main/res/layout/item_bottom_emoji.xml +++ b/app/src/main/res/layout/item_bottom_emoji.xml @@ -1,29 +1,37 @@ - - + - + - \ No newline at end of file + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/pome_friend_emotion_bottom_sheet_dialog.xml b/app/src/main/res/layout/pome_friend_emotion_bottom_sheet_dialog.xml index 5182bc0b..b753db43 100644 --- a/app/src/main/res/layout/pome_friend_emotion_bottom_sheet_dialog.xml +++ b/app/src/main/res/layout/pome_friend_emotion_bottom_sheet_dialog.xml @@ -11,6 +11,7 @@ android:id="@+id/pome_friend_emotion_bottom_sheet_dialog_cl" android:layout_width="match_parent" android:layout_height="match_parent" + android:paddingTop="20dp" app:behavior_draggable="true" app:behavior_hideable="true" app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"> From 02a5c581958376c123c80af189d3fdc6cbf48a56 Mon Sep 17 00:00:00 2001 From: SsongSik Date: Sun, 9 Jul 2023 02:35:41 +0900 Subject: [PATCH 26/26] [feat] : #15 Friend Emotion Image Add, Bottom Connect --- .../BottomEmojiGridSpaceItemDecoration.kt | 7 ++++++- .../presentation/friend/FriendEmotionAdapter.kt | 16 +++++++++++++++- .../pome/presentation/friend/FriendFragment.kt | 3 --- app/src/main/res/drawable/emotion_flex_54.png | Bin 0 -> 5395 bytes app/src/main/res/drawable/emotion_funny_54.png | Bin 0 -> 4300 bytes app/src/main/res/drawable/emotion_happy_54.png | Bin 0 -> 4916 bytes app/src/main/res/drawable/emotion_sad_54.png | Bin 0 -> 4242 bytes app/src/main/res/drawable/emotion_smile_54.png | Bin 0 -> 4306 bytes app/src/main/res/drawable/emotion_what_54.png | Bin 0 -> 4187 bytes .../pome_friend_emotion_bottom_sheet_dialog.xml | 2 +- 10 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 app/src/main/res/drawable/emotion_flex_54.png create mode 100644 app/src/main/res/drawable/emotion_funny_54.png create mode 100644 app/src/main/res/drawable/emotion_happy_54.png create mode 100644 app/src/main/res/drawable/emotion_sad_54.png create mode 100644 app/src/main/res/drawable/emotion_smile_54.png create mode 100644 app/src/main/res/drawable/emotion_what_54.png diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/BottomEmojiGridSpaceItemDecoration.kt b/app/src/main/java/com/teampome/pome/presentation/friend/BottomEmojiGridSpaceItemDecoration.kt index 48ddaa63..fb9b3ff5 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/BottomEmojiGridSpaceItemDecoration.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/BottomEmojiGridSpaceItemDecoration.kt @@ -5,7 +5,8 @@ import android.view.View import androidx.recyclerview.widget.RecyclerView import com.teampome.pome.util.common.CommonUtil -class BottomEmojiGridSpaceItemDecoration(private val spanCount: Int): RecyclerView.ItemDecoration() { +class BottomEmojiGridSpaceItemDecoration(private val spanCount: Int) : + RecyclerView.ItemDecoration() { // 3, 20 override fun getItemOffsets( outRect: Rect, @@ -28,5 +29,9 @@ class BottomEmojiGridSpaceItemDecoration(private val spanCount: Int): RecyclerVi } else if (column == 2) { outRect.left = spaceInPx } + + if (position >= 3) { + outRect.top = CommonUtil.dpToPx(parent.context, 30) + } } } diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendEmotionAdapter.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendEmotionAdapter.kt index 67b5e51f..7e87cce0 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendEmotionAdapter.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendEmotionAdapter.kt @@ -3,6 +3,7 @@ package com.teampome.pome.presentation.friend import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView +import com.teampome.pome.R import com.teampome.pome.databinding.ItemBottomEmojiBinding import com.teampome.pome.model.response.FriendEmotionResponse @@ -30,7 +31,20 @@ class FriendEmotionAdapter( private val binding: ItemBottomEmojiBinding ) : RecyclerView.ViewHolder(binding.root) { fun bind(friendEmotion: FriendEmotionResponse) { - binding.friendEmotionHappyTv.text = friendEmotion.nickname + with(binding) { + friendEmotionHappyTv.text = friendEmotion.nickname + + val imageResource = when(friendEmotion.emotionId) { + 0 -> R.drawable.emotion_happy_54 + 1 -> R.drawable.emotion_what_54 + 2 -> R.drawable.emotion_sad_54 + 3 -> R.drawable.emotion_funny_54 + 4 -> R.drawable.emotion_smile_54 + else -> R.drawable.emotion_flex_54 + } + + friendEmotionHappyAiv.setImageResource(imageResource) + } } } } \ No newline at end of file diff --git a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt index a5640741..5d69cb79 100644 --- a/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt +++ b/app/src/main/java/com/teampome/pome/presentation/friend/FriendFragment.kt @@ -5,16 +5,13 @@ import android.view.View import android.widget.Toast import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController -import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.bottomsheet.BottomSheetDialog import com.teampome.pome.R import com.teampome.pome.databinding.FragmentFriendBinding -import com.teampome.pome.databinding.PomeCalendarBottomSheetDialogBinding import com.teampome.pome.databinding.PomeFriendEmotionBottomSheetDialogBinding import com.teampome.pome.databinding.PomeFriendSettingBottomSheetDialogBinding -import com.teampome.pome.databinding.PomeRecordMoreGoalBottomSheetDialogBinding import com.teampome.pome.model.response.FriendEmotionResponse import com.teampome.pome.util.base.ApiResponse import com.teampome.pome.util.base.BaseFragment diff --git a/app/src/main/res/drawable/emotion_flex_54.png b/app/src/main/res/drawable/emotion_flex_54.png new file mode 100644 index 0000000000000000000000000000000000000000..be38daa106504e7b7efb08d7c2706955a3eb097d GIT binary patch literal 5395 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/emotion_funny_54.png b/app/src/main/res/drawable/emotion_funny_54.png new file mode 100644 index 0000000000000000000000000000000000000000..e85f994c781b89599daa66dc54a7a3c699104d11 GIT binary patch literal 4300 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/emotion_smile_54.png b/app/src/main/res/drawable/emotion_smile_54.png new file mode 100644 index 0000000000000000000000000000000000000000..21285a93cd6414c2b2dea6aa08914351695aff3a GIT binary patch literal 4306 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 A1^@s6 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/emotion_what_54.png b/app/src/main/res/drawable/emotion_what_54.png new file mode 100644 index 0000000000000000000000000000000000000000..246e93aeea322ae40b493ba4b638c1bbcafb16b0 GIT binary patch literal 4187 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/pome_friend_emotion_bottom_sheet_dialog.xml b/app/src/main/res/layout/pome_friend_emotion_bottom_sheet_dialog.xml index b753db43..6ad9d22b 100644 --- a/app/src/main/res/layout/pome_friend_emotion_bottom_sheet_dialog.xml +++ b/app/src/main/res/layout/pome_friend_emotion_bottom_sheet_dialog.xml @@ -101,7 +101,7 @@