커뮤니티 신고하기 추가

This commit is contained in:
klaus 2023-12-25 05:42:27 +09:00
parent 6b2e59c09d
commit 6c96c4afe5
7 changed files with 267 additions and 14 deletions

View File

@ -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()) }
}

View File

@ -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<ActivityCreatorCommunityAllBinding>(
@ -82,8 +84,13 @@ class CreatorCommunityAllActivity : BaseActivity<ActivityCreatorCommunityAllBind
cancelButtonClick = {}
).show(screenWidth)
},
onClickReport = {
onClickReport = { postId ->
CreatorCommunityReportDialog(this@CreatorCommunityAllActivity, layoutInflater) {
viewModel.report(
communityPostId = postId,
reason = it
)
}.show(screenWidth)
}
)

View File

@ -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<String?>()
val toastLiveData: LiveData<String?>
@ -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("신고가 접수되었습니다.")
}
)
)
}
}

View File

@ -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<RadioButton>(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
}
}

View File

@ -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
}

View File

@ -0,0 +1,144 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_round_corner_10_222222"
android:orientation="vertical"
android:paddingHorizontal="16.7dp"
android:paddingTop="26.7dp"
android:paddingBottom="16.7dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:fontFamily="@font/gmarket_sans_bold"
android:text="게시물 신고"
android:textColor="@color/color_eeeeee"
android:textSize="18.3sp" />
<RadioGroup
android:id="@+id/radio_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="21.3dp"
android:background="@drawable/bg_round_corner_13_3_303030"
android:orientation="vertical"
android:padding="13.3dp">
<RadioButton
android:id="@+id/radio_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="@color/color_3bb9f1"
android:fontFamily="@font/gmarket_sans_medium"
android:text="원치 않는 상업성 콘텐츠 또는 스팸"
android:textColor="@color/color_eeeeee"
android:textSize="14sp" />
<RadioButton
android:id="@+id/radio_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="@color/color_3bb9f1"
android:fontFamily="@font/gmarket_sans_medium"
android:text="포르노 또는 음란물"
android:textColor="@color/color_eeeeee"
android:textSize="14sp" />
<RadioButton
android:id="@+id/radio_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="@color/color_3bb9f1"
android:fontFamily="@font/gmarket_sans_medium"
android:text="아동 학대"
android:textColor="@color/color_eeeeee"
android:textSize="14sp" />
<RadioButton
android:id="@+id/radio_4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="@color/color_3bb9f1"
android:fontFamily="@font/gmarket_sans_medium"
android:text="증오심 표현 또는 노골적인 폭력"
android:textColor="@color/color_eeeeee"
android:textSize="14sp" />
<RadioButton
android:id="@+id/radio_5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="@color/color_3bb9f1"
android:fontFamily="@font/gmarket_sans_medium"
android:text="테러 조장"
android:textColor="@color/color_eeeeee"
android:textSize="14sp" />
<RadioButton
android:id="@+id/radio_6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="@color/color_3bb9f1"
android:fontFamily="@font/gmarket_sans_medium"
android:text="괴롭힘 또는 폭력"
android:textColor="@color/color_eeeeee"
android:textSize="14sp" />
<RadioButton
android:id="@+id/radio_7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="@color/color_3bb9f1"
android:fontFamily="@font/gmarket_sans_medium"
android:text="자살 또는 자해"
android:textColor="@color/color_eeeeee"
android:textSize="14sp" />
<RadioButton
android:id="@+id/radio_8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="@color/color_3bb9f1"
android:fontFamily="@font/gmarket_sans_medium"
android:text="잘못된 정보"
android:textColor="@color/color_eeeeee"
android:textSize="14sp" />
</RadioGroup>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="21.3dp"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_cancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="6.7dp"
android:layout_weight="1"
android:background="@drawable/bg_round_corner_6_7_13181b_3bb9f1"
android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center"
android:paddingVertical="15.7dp"
android:text="취소"
android:textColor="@color/color_3bb9f1"
android:textSize="18.3sp" />
<TextView
android:id="@+id/tv_report"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="6.7dp"
android:layout_weight="1"
android:background="@drawable/bg_round_corner_6_7_3bb9f1"
android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center"
android:paddingVertical="15.7dp"
android:text="신고"
android:textColor="@color/white"
android:textSize="18.3sp" />
</LinearLayout>
</LinearLayout>

View File

@ -2,15 +2,15 @@
<!-- Base application theme. -->
<style name="Theme.SodaLive" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/color_9970ff</item>
<item name="colorPrimaryVariant">@color/color_9970ff</item>
<item name="colorPrimary">@color/color_80d8ff</item>
<item name="colorPrimaryVariant">@color/color_80d8ff</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/black</item>
<item name="colorSecondaryVariant">@color/black</item>
<item name="colorOnSecondary">@color/color_9970ff</item>
<item name="colorOnSecondary">@color/color_3bb9f1</item>
<item name="colorAccent">@color/color_9970ff</item>
<item name="colorAccent">@color/color_3bb9f1</item>
<!-- Customize your theme here. -->
<item name="android:windowLightNavigationBar" tools:targetApi="o_mr1">false</item>
@ -19,8 +19,8 @@
</style>
<style name="EditTextStyle" parent="Theme.AppCompat.Light">
<item name="colorControlNormal">@color/color_9970ff</item>
<item name="colorControlActivated">@color/color_9970ff</item>
<item name="colorControlNormal">@color/color_3bb9f1</item>
<item name="colorControlActivated">@color/color_3bb9f1</item>
</style>
<style name="tabText" parent="@android:style/TextAppearance.Widget.TabWidget">
@ -28,9 +28,9 @@
</style>
<style name="DatePickerStyle" parent="Theme.AppCompat.Light.Dialog">
<item name="colorAccent">@color/color_9970ff</item>
<item name="colorAccent">@color/color_3bb9f1</item>
<!--selected Item color-->
<item name="colorControlActivated">@color/color_9970ff</item>
<item name="colorControlActivated">@color/color_3bb9f1</item>
<item name="colorControlHighlight">@color/black</item>
<!-- Ok Cancel Color-->
<item name="android:textColor">@color/white</item>
@ -47,7 +47,7 @@
<style name="TimePickerStyle" parent="Theme.AppCompat.Dialog">
<item name="colorAccent">@color/white</item>
<item name="android:textColor">@color/white</item>
<item name="android:textColorPrimary">@color/color_9970ff</item>
<item name="android:textColorPrimary">@color/color_3bb9f1</item>
<item name="android:windowBackground">@color/black</item>
<item name="android:fontFamily">@font/gmarket_sans_medium</item>
</style>