From 8a4ad4121257fe6c9266ffa23eda89d21498c916 Mon Sep 17 00:00:00 2001 From: klaus Date: Tue, 5 Sep 2023 12:46:53 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9D=91=EC=9B=90=EA=B8=80=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=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 --- .../sodalive/explorer/ExplorerRepository.kt | 8 ++--- .../explorer/profile/GetCheersResponse.kt | 1 + .../explorer/profile/UserProfileActivity.kt | 26 +++++++++++++-- .../explorer/profile/UserProfileViewModel.kt | 28 +++++++++++++--- .../profile/cheers/PutModifyCheersRequest.kt | 3 +- .../cheers/UserProfileCheersAdapter.kt | 33 +++++++++++++++---- .../UserProfileFantalkAllViewActivity.kt | 26 +++++++++++++-- .../fantalk/UserProfileFantalkAllViewModel.kt | 28 +++++++++++++--- .../res/layout/item_user_profile_cheers.xml | 1 - app/src/main/res/menu/review_option_menu2.xml | 13 ++++++++ 10 files changed, 139 insertions(+), 28 deletions(-) create mode 100644 app/src/main/res/menu/review_option_menu2.xml diff --git a/app/src/main/java/kr/co/vividnext/sodalive/explorer/ExplorerRepository.kt b/app/src/main/java/kr/co/vividnext/sodalive/explorer/ExplorerRepository.kt index e06501c..cf63c00 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/explorer/ExplorerRepository.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/explorer/ExplorerRepository.kt @@ -56,14 +56,10 @@ class ExplorerRepository( ) fun modifyCheers( - cheersId: Long, - content: String, + request: PutModifyCheersRequest, token: String ) = api.modifyCheers( - request = PutModifyCheersRequest( - cheersId = cheersId, - content = content - ), + request = request, authHeader = token ) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/GetCheersResponse.kt b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/GetCheersResponse.kt index 02d4b34..8696cca 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/GetCheersResponse.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/GetCheersResponse.kt @@ -9,6 +9,7 @@ data class GetCheersResponse( data class GetCheersResponseItem( @SerializedName("cheersId") val cheersId: Long, + @SerializedName("memberId") val memberId: Long, @SerializedName("nickname") val nickname: String, @SerializedName("profileUrl") val profileUrl: String, @SerializedName("content") val content: String, diff --git a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/UserProfileActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/UserProfileActivity.kt index 33f6221..d5bab1b 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/UserProfileActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/UserProfileActivity.kt @@ -28,6 +28,7 @@ import kr.co.vividnext.sodalive.audio_content.AudioContentAdapter import kr.co.vividnext.sodalive.audio_content.detail.AudioContentDetailActivity import kr.co.vividnext.sodalive.audio_content.upload.AudioContentUploadActivity import kr.co.vividnext.sodalive.base.BaseActivity +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 @@ -389,16 +390,35 @@ class UserProfileActivity : BaseActivity( ) } }, - modifyReply = { cheersId, content -> + modifyReply = { cheersId, content, isActive -> hideKeyboard { viewModel.modifyCheers( cheersId = cheersId, creatorId = userId, - cheersContent = content + cheersContent = content, + isActive = isActive ) } }, - onClickReport = { showCheersReportPopup(it) } + onClickReport = { showCheersReportPopup(it) }, + onClickDelete = { + SodaDialog( + activity = this@UserProfileActivity, + layoutInflater = layoutInflater, + title = "응원글 삭제", + desc = "삭제하시겠습니까?", + confirmButtonTitle = "삭제", + confirmButtonClick = { + viewModel.modifyCheers( + cheersId = it, + creatorId = userId, + isActive = false + ) + }, + cancelButtonTitle = "취소", + cancelButtonClick = {} + ).show(screenWidth) + } ) rvCheers.layoutManager = LinearLayoutManager( diff --git a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/UserProfileViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/UserProfileViewModel.kt index dc8ac75..76085a5 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/UserProfileViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/UserProfileViewModel.kt @@ -15,6 +15,7 @@ import io.reactivex.rxjava3.schedulers.Schedulers import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.explorer.ExplorerRepository +import kr.co.vividnext.sodalive.explorer.profile.cheers.PutModifyCheersRequest import kr.co.vividnext.sodalive.report.ReportRepository import kr.co.vividnext.sodalive.report.ReportRequest import kr.co.vividnext.sodalive.report.ReportType @@ -256,18 +257,37 @@ class UserProfileViewModel( ) } - fun modifyCheers(cheersId: Long, creatorId: Long, cheersContent: String) { - if (cheersContent.isBlank()) { + fun modifyCheers( + cheersId: Long, + creatorId: Long, + cheersContent: String? = null, + isActive: Boolean? = null + ) { + if (cheersContent == null && isActive == null) { + _toastLiveData.postValue("변경사항이 없습니다.") + return + } + + if (cheersContent != null && cheersContent.isBlank()) { _toastLiveData.postValue("내용을 입력하세요") return } _isLoading.value = true + val request = PutModifyCheersRequest(cheersId = cheersId) + + if (cheersContent != null) { + request.content = cheersContent + } + + if (isActive != null) { + request.isActive = isActive + } + compositeDisposable.add( repository.modifyCheers( - cheersId = cheersId, - content = cheersContent, + request = request, token = "Bearer ${SharedPreferenceManager.token}" ) .subscribeOn(Schedulers.io()) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/cheers/PutModifyCheersRequest.kt b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/cheers/PutModifyCheersRequest.kt index ec5e11d..0c49746 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/cheers/PutModifyCheersRequest.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/cheers/PutModifyCheersRequest.kt @@ -4,5 +4,6 @@ import com.google.gson.annotations.SerializedName data class PutModifyCheersRequest( @SerializedName("cheersId") val cheersId: Long, - @SerializedName("content") val content: String + @SerializedName("content") var content: String? = null, + @SerializedName("isActive") var isActive: Boolean? = null, ) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/cheers/UserProfileCheersAdapter.kt b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/cheers/UserProfileCheersAdapter.kt index 00f3970..ab9c652 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/cheers/UserProfileCheersAdapter.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/cheers/UserProfileCheersAdapter.kt @@ -17,8 +17,9 @@ import kr.co.vividnext.sodalive.extensions.dpToPx class UserProfileCheersAdapter( private val userId: Long, private val enterReply: (Long, String) -> Unit, - private val modifyReply: (Long, String) -> Unit, - private val onClickReport: (Long) -> Unit + private val modifyReply: (Long, String?, Boolean?) -> Unit, + private val onClickReport: (Long) -> Unit, + private val onClickDelete: (Long) -> Unit ) : RecyclerView.Adapter() { val items = mutableListOf() @@ -46,7 +47,9 @@ class UserProfileCheersAdapter( showOptionMenu( context, binding.ivMenu, - cheersId = cheers.cheersId + cheersId = cheers.cheersId, + memberId = cheers.memberId, + creatorId = userId ) } @@ -63,7 +66,7 @@ class UserProfileCheersAdapter( binding.rlCheerReply.visibility = View.VISIBLE binding.tvSend.setOnClickListener { val content = binding.etCheerReply.text.toString() - modifyReply(reply.cheersId, content) + modifyReply(reply.cheersId, content, null) } } } else { @@ -106,16 +109,34 @@ class UserProfileCheersAdapter( override fun getItemCount() = items.count() - private fun showOptionMenu(context: Context, v: View, cheersId: Long) { + private fun showOptionMenu( + context: Context, + v: View, + cheersId: Long, + memberId: Long, + creatorId: Long + ) { val popup = PopupMenu(context, v) val inflater = popup.menuInflater - inflater.inflate(R.menu.review_option_menu, popup.menu) + + if ( + memberId == SharedPreferenceManager.userId || + creatorId == SharedPreferenceManager.userId + ) { + inflater.inflate(R.menu.review_option_menu2, popup.menu) + } else { + inflater.inflate(R.menu.review_option_menu, popup.menu) + } popup.setOnMenuItemClickListener { when (it.itemId) { R.id.menu_review_report -> { onClickReport(cheersId) } + + R.id.menu_review_delete -> { + onClickDelete(cheersId) + } } true diff --git a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/fantalk/UserProfileFantalkAllViewActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/fantalk/UserProfileFantalkAllViewActivity.kt index 533e7ab..c95ea8a 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/fantalk/UserProfileFantalkAllViewActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/fantalk/UserProfileFantalkAllViewActivity.kt @@ -12,6 +12,7 @@ import android.widget.Toast import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import kr.co.vividnext.sodalive.base.BaseActivity +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.databinding.ActivityUserProfileFantalkAllBinding @@ -79,16 +80,35 @@ class UserProfileFantalkAllViewActivity : BaseActivity + modifyReply = { cheersId, content, isActive -> hideKeyboard { viewModel.modifyCheers( cheersId = cheersId, creatorId = userId, - cheersContent = content + cheersContent = content, + isActive = isActive ) } }, - onClickReport = { showCheersReportPopup(it) } + onClickReport = { showCheersReportPopup(it) }, + onClickDelete = { + SodaDialog( + activity = this@UserProfileFantalkAllViewActivity, + layoutInflater = layoutInflater, + title = "응원글 삭제", + desc = "삭제하시겠습니까?", + confirmButtonTitle = "삭제", + confirmButtonClick = { + viewModel.modifyCheers( + cheersId = it, + creatorId = userId, + isActive = false + ) + }, + cancelButtonTitle = "취소", + cancelButtonClick = {} + ).show(screenWidth) + } ) rvCheers.layoutManager = LinearLayoutManager( diff --git a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/fantalk/UserProfileFantalkAllViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/fantalk/UserProfileFantalkAllViewModel.kt index 4477293..7a8fbb3 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/fantalk/UserProfileFantalkAllViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/fantalk/UserProfileFantalkAllViewModel.kt @@ -9,6 +9,7 @@ import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.explorer.ExplorerRepository import kr.co.vividnext.sodalive.explorer.profile.GetCheersResponse +import kr.co.vividnext.sodalive.explorer.profile.cheers.PutModifyCheersRequest import kr.co.vividnext.sodalive.report.ReportRepository import kr.co.vividnext.sodalive.report.ReportRequest import kr.co.vividnext.sodalive.report.ReportType @@ -146,18 +147,37 @@ class UserProfileFantalkAllViewModel( ) } - fun modifyCheers(cheersId: Long, creatorId: Long, cheersContent: String) { - if (cheersContent.isBlank()) { + fun modifyCheers( + cheersId: Long, + creatorId: Long, + cheersContent: String? = null, + isActive: Boolean? = null + ) { + if (cheersContent == null && isActive == null) { + _toastLiveData.postValue("변경사항이 없습니다.") + return + } + + if (cheersContent != null && cheersContent.isBlank()) { _toastLiveData.postValue("내용을 입력하세요") return } _isLoading.value = true + val request = PutModifyCheersRequest(cheersId = cheersId) + + if (cheersContent != null) { + request.content = cheersContent + } + + if (isActive != null) { + request.isActive = isActive + } + compositeDisposable.add( repository.modifyCheers( - cheersId = cheersId, - content = cheersContent, + request = request, token = "Bearer ${SharedPreferenceManager.token}" ) .subscribeOn(Schedulers.io()) diff --git a/app/src/main/res/layout/item_user_profile_cheers.xml b/app/src/main/res/layout/item_user_profile_cheers.xml index 721c5ed..9bcd8ca 100644 --- a/app/src/main/res/layout/item_user_profile_cheers.xml +++ b/app/src/main/res/layout/item_user_profile_cheers.xml @@ -119,7 +119,6 @@ android:visibility="gone" tools:ignore="SmallSp" /> - + + + + +