From e1dfbcac43fddb9930f812f79fbb097903a06727 Mon Sep 17 00:00:00 2001 From: SsongSik Date: Sat, 24 Jun 2023 03:25:28 +0900 Subject: [PATCH] [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 0000000..48ddaa6 --- /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 0000000..67b5e51 --- /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 c58a2c8..a564074 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 ef40623..8cc5d37 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 5182bc0..b753db4 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">