From 6c96c4afe5bdd1d020aa7a83c30f441b2a04875e Mon Sep 17 00:00:00 2001 From: klaus Date: Mon, 25 Dec 2023 05:42:27 +0900 Subject: [PATCH] =?UTF-8?q?=EC=BB=A4=EB=AE=A4=EB=8B=88=ED=8B=B0=20?= =?UTF-8?q?=EC=8B=A0=EA=B3=A0=ED=95=98=EA=B8=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/kr/co/vividnext/sodalive/di/AppDI.kt | 2 +- .../all/CreatorCommunityAllActivity.kt | 11 +- .../all/CreatorCommunityAllViewModel.kt | 42 ++++- .../all/CreatorCommunityReportDialog.kt | 60 ++++++++ .../sodalive/report/ReportRequest.kt | 4 +- .../layout/dialog_community_post_report.xml | 144 ++++++++++++++++++ app/src/main/res/values/themes.xml | 18 +-- 7 files changed, 267 insertions(+), 14 deletions(-) create mode 100644 app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/CreatorCommunityReportDialog.kt create mode 100644 app/src/main/res/layout/dialog_community_post_report.xml diff --git a/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt b/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt index 1ab76d6..a6218bb 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt @@ -218,7 +218,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) { viewModel { AudioContentNewAllViewModel(get()) } viewModel { AudioContentRankingAllViewModel(get()) } viewModel { RouletteSettingsViewModel(get()) } - viewModel { CreatorCommunityAllViewModel(get()) } + viewModel { CreatorCommunityAllViewModel(get(), get()) } viewModel { CreatorCommunityCommentListViewModel(get()) } viewModel { CreatorCommunityWriteViewModel(get()) } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/CreatorCommunityAllActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/CreatorCommunityAllActivity.kt index c319983..e872815 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/CreatorCommunityAllActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/CreatorCommunityAllActivity.kt @@ -7,6 +7,7 @@ import android.view.View import android.widget.Toast import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import kr.co.vividnext.sodalive.audio_content.detail.AudioContentReportDialog import kr.co.vividnext.sodalive.base.BaseActivity import kr.co.vividnext.sodalive.base.SodaDialog import kr.co.vividnext.sodalive.common.Constants @@ -14,6 +15,7 @@ import kr.co.vividnext.sodalive.common.LoadingDialog import kr.co.vividnext.sodalive.databinding.ActivityCreatorCommunityAllBinding import kr.co.vividnext.sodalive.explorer.profile.creator_community.all.comment.CreatorCommunityCommentFragment import kr.co.vividnext.sodalive.extensions.dpToPx +import kr.co.vividnext.sodalive.report.ReportType import org.koin.android.ext.android.inject class CreatorCommunityAllActivity : BaseActivity( @@ -82,8 +84,13 @@ class CreatorCommunityAllActivity : BaseActivity + CreatorCommunityReportDialog(this@CreatorCommunityAllActivity, layoutInflater) { + viewModel.report( + communityPostId = postId, + reason = it + ) + }.show(screenWidth) } ) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/CreatorCommunityAllViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/CreatorCommunityAllViewModel.kt index 823a351..e29decd 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/CreatorCommunityAllViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/CreatorCommunityAllViewModel.kt @@ -10,11 +10,15 @@ import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.explorer.profile.creator_community.CreatorCommunityRepository import kr.co.vividnext.sodalive.explorer.profile.creator_community.GetCommunityPostListResponse +import kr.co.vividnext.sodalive.report.ReportRepository +import kr.co.vividnext.sodalive.report.ReportRequest +import kr.co.vividnext.sodalive.report.ReportType import okhttp3.MediaType.Companion.toMediaType import okhttp3.RequestBody.Companion.toRequestBody class CreatorCommunityAllViewModel( - private val repository: CreatorCommunityRepository + private val repository: CreatorCommunityRepository, + private val reportRepository: ReportRepository ) : BaseViewModel() { private val _toastLiveData = MutableLiveData() val toastLiveData: LiveData @@ -179,4 +183,40 @@ class CreatorCommunityAllViewModel( ) ) } + + fun report(communityPostId: Long, reason: String) { + _isLoading.value = true + val request = ReportRequest( + type = ReportType.COMMUNITY_POST, + reason = reason, + communityPostId = communityPostId + ) + + compositeDisposable.add( + reportRepository.report( + request = request, + token = "Bearer ${SharedPreferenceManager.token}" + ) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe( + { + if (it.message != null) { + _toastLiveData.postValue(it.message) + } else { + _toastLiveData.postValue( + "신고가 접수되었습니다." + ) + } + + _isLoading.value = false + }, + { + _isLoading.value = false + it.message?.let { message -> Logger.e(message) } + _toastLiveData.postValue("신고가 접수되었습니다.") + } + ) + ) + } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/CreatorCommunityReportDialog.kt b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/CreatorCommunityReportDialog.kt new file mode 100644 index 0000000..80585e1 --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/CreatorCommunityReportDialog.kt @@ -0,0 +1,60 @@ +package kr.co.vividnext.sodalive.explorer.profile.creator_community.all + +import android.app.Activity +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.LayoutInflater +import android.view.WindowManager +import android.widget.RadioButton +import android.widget.Toast +import androidx.appcompat.app.AlertDialog +import kr.co.vividnext.sodalive.databinding.DialogCommunityPostReportBinding +import kr.co.vividnext.sodalive.extensions.dpToPx + +class CreatorCommunityReportDialog( + activity: Activity, + layoutInflater: LayoutInflater, + confirmButtonClick: (String) -> Unit +) { + private val alertDialog: AlertDialog + val dialogView = DialogCommunityPostReportBinding.inflate(layoutInflater) + var reason = "" + + init { + val dialogBuilder = AlertDialog.Builder(activity) + dialogBuilder.setView(dialogView.root) + + alertDialog = dialogBuilder.create() + alertDialog.setCancelable(false) + alertDialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + + dialogView.tvCancel.setOnClickListener { + alertDialog.dismiss() + } + + dialogView.tvReport.setOnClickListener { + if (reason.isNotBlank()) { + alertDialog.dismiss() + confirmButtonClick(reason) + } else { + Toast.makeText(activity, "신고 이유를 선택하세요.", Toast.LENGTH_LONG).show() + } + } + + dialogView.radioGroup.setOnCheckedChangeListener { radioGroup, checkedId -> + val radioButton = radioGroup.findViewById(checkedId) + reason = radioButton.text.toString() + } + } + + fun show(width: Int) { + alertDialog.show() + + val lp = WindowManager.LayoutParams() + lp.copyFrom(alertDialog.window?.attributes) + lp.width = width - (26.7f.dpToPx()).toInt() + lp.height = WindowManager.LayoutParams.WRAP_CONTENT + + alertDialog.window?.attributes = lp + } +} diff --git a/app/src/main/java/kr/co/vividnext/sodalive/report/ReportRequest.kt b/app/src/main/java/kr/co/vividnext/sodalive/report/ReportRequest.kt index be8b350..af37e8e 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/report/ReportRequest.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/report/ReportRequest.kt @@ -8,11 +8,13 @@ data class ReportRequest( @SerializedName("reportedMemberId") val reportedMemberId: Long? = null, @SerializedName("cheersId") val cheersId: Long? = null, @SerializedName("audioContentId") val contentId: Long? = null, + @SerializedName("communityPostId") val communityPostId: Long? = null, ) enum class ReportType { @SerializedName("PROFILE") PROFILE, @SerializedName("USER") USER, @SerializedName("CHEERS") CHEERS, - @SerializedName("AUDIO_CONTENT") AUDIO_CONTENT + @SerializedName("AUDIO_CONTENT") AUDIO_CONTENT, + @SerializedName("COMMUNITY_POST") COMMUNITY_POST } diff --git a/app/src/main/res/layout/dialog_community_post_report.xml b/app/src/main/res/layout/dialog_community_post_report.xml new file mode 100644 index 0000000..d0089c8 --- /dev/null +++ b/app/src/main/res/layout/dialog_community_post_report.xml @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 6785574..1360d88 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -2,15 +2,15 @@