diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/AudioContentApi.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/AudioContentApi.kt index 2f8fe0e..4f2dc71 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/AudioContentApi.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/AudioContentApi.kt @@ -2,6 +2,7 @@ package kr.co.vividnext.sodalive.audio_content import io.reactivex.rxjava3.core.Single import kr.co.vividnext.sodalive.audio_content.comment.GetAudioContentCommentListResponse +import kr.co.vividnext.sodalive.audio_content.comment.ModifyCommentRequest import kr.co.vividnext.sodalive.audio_content.comment.RegisterAudioContentCommentRequest import kr.co.vividnext.sodalive.audio_content.detail.GetAudioContentDetailResponse import kr.co.vividnext.sodalive.audio_content.detail.PutAudioContentLikeRequest @@ -137,4 +138,10 @@ interface AudioContentApi { @Body request: AudioContentDonationRequest, @Header("Authorization") authHeader: String ): Single> + + @PUT("/audio-content/comment") + fun modifyComment( + @Body request: ModifyCommentRequest, + @Header("Authorization") authHeader: String + ): Single> } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/comment/AudioContentCommentAdapter.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/comment/AudioContentCommentAdapter.kt index 69a336a..a0e1bd6 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/comment/AudioContentCommentAdapter.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/comment/AudioContentCommentAdapter.kt @@ -1,24 +1,30 @@ package kr.co.vividnext.sodalive.audio_content.comment +import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.LinearLayout +import androidx.appcompat.widget.PopupMenu import androidx.recyclerview.widget.RecyclerView import coil.load import coil.transform.CircleCropTransformation import kr.co.vividnext.sodalive.R +import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.databinding.ItemAudioContentCommentBinding import kr.co.vividnext.sodalive.extensions.dpToPx import kr.co.vividnext.sodalive.extensions.moneyFormat class AudioContentCommentAdapter( + private val creatorId: Long, + private val onClickDelete: (Long) -> Unit, private val onItemClick: (GetAudioContentCommentListItem) -> Unit ) : RecyclerView.Adapter() { var items = mutableSetOf() inner class ViewHolder( + private val context: Context, private val binding: ItemAudioContentCommentBinding ) : RecyclerView.ViewHolder(binding.root) { @@ -82,12 +88,31 @@ class AudioContentCommentAdapter( "답글 쓰기" } + if ( + item.writerId == SharedPreferenceManager.userId || + creatorId == SharedPreferenceManager.userId + ) { + binding.ivMenu.visibility = View.VISIBLE + binding.ivMenu.setOnClickListener { + showOptionMenu( + context, + binding.ivMenu, + commentId = item.id, + writerId = item.writerId, + creatorId = creatorId + ) + } + } else { + binding.ivMenu.visibility = View.GONE + } + binding.tvWriteReply.setOnClickListener { onItemClick(item) } binding.root.setOnClickListener { onItemClick(item) } } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder( + parent.context, ItemAudioContentCommentBinding.inflate( LayoutInflater.from(parent.context), parent, @@ -100,4 +125,34 @@ class AudioContentCommentAdapter( } override fun getItemCount() = items.size + + private fun showOptionMenu( + context: Context, + v: View, + commentId: Long, + writerId: Long, + creatorId: Long + ) { + val popup = PopupMenu(context, v) + val inflater = popup.menuInflater + + if ( + writerId == SharedPreferenceManager.userId || + creatorId == SharedPreferenceManager.userId + ) { + inflater.inflate(R.menu.content_comment_option_menu, popup.menu) + } + + popup.setOnMenuItemClickListener { + when (it.itemId) { + R.id.menu_review_delete -> { + onClickDelete(commentId) + } + } + + true + } + + popup.show() + } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/comment/AudioContentCommentListFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/comment/AudioContentCommentListFragment.kt index fbcaf2d..05ce876 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/comment/AudioContentCommentListFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/comment/AudioContentCommentListFragment.kt @@ -15,6 +15,7 @@ import coil.load import coil.transform.CircleCropTransformation import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.base.BaseFragment +import kr.co.vividnext.sodalive.base.SodaDialog import kr.co.vividnext.sodalive.common.Constants import kr.co.vividnext.sodalive.common.LoadingDialog import kr.co.vividnext.sodalive.common.SharedPreferenceManager @@ -74,9 +75,30 @@ class AudioContentCommentListFragment : BaseFragment Logger.e(message) } + _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + } + ) + ) + } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/comment/AudioContentCommentRepository.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/comment/AudioContentCommentRepository.kt index ad010c7..e6ea569 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/comment/AudioContentCommentRepository.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/comment/AudioContentCommentRepository.kt @@ -43,4 +43,9 @@ class AudioContentCommentRepository(private val api: AudioContentApi) { timezone = TimeZone.getDefault().id, authHeader = token ) + + fun modifyComment(request: ModifyCommentRequest, token: String) = api.modifyComment( + request = request, + authHeader = token + ) } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/comment/GetAudioContentCommentListResponse.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/comment/GetAudioContentCommentListResponse.kt index b3f0097..e946d6c 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/comment/GetAudioContentCommentListResponse.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/comment/GetAudioContentCommentListResponse.kt @@ -12,6 +12,7 @@ data class GetAudioContentCommentListResponse( @Parcelize data class GetAudioContentCommentListItem( @SerializedName("id") val id: Long, + @SerializedName("writerId") val writerId: Long, @SerializedName("nickname") val nickname: String, @SerializedName("profileUrl") val profileUrl: String, @SerializedName("comment") val comment: String, diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/comment/ModifyCommentRequest.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/comment/ModifyCommentRequest.kt new file mode 100644 index 0000000..6a277c6 --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/comment/ModifyCommentRequest.kt @@ -0,0 +1,7 @@ +package kr.co.vividnext.sodalive.audio_content.comment + +data class ModifyCommentRequest( + val commentId: Long, + var comment: String? = null, + var isActive: Boolean? = null +) diff --git a/app/src/main/res/layout/item_audio_content_comment.xml b/app/src/main/res/layout/item_audio_content_comment.xml index 570d0ca..b3aec0a 100644 --- a/app/src/main/res/layout/item_audio_content_comment.xml +++ b/app/src/main/res/layout/item_audio_content_comment.xml @@ -21,11 +21,20 @@ android:fontFamily="@font/gmarket_sans_medium" android:textColor="@color/color_eeeeee" android:textSize="13.3sp" - app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintEnd_toStartOf="@+id/iv_menu" app:layout_constraintStart_toEndOf="@+id/iv_comment_profile" app:layout_constraintTop_toTopOf="@+id/iv_comment_profile" tools:text="alkfje203" /> + + + + +