커뮤니티 신고하기 추가
This commit is contained in:
parent
6b2e59c09d
commit
6c96c4afe5
|
@ -218,7 +218,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) {
|
||||||
viewModel { AudioContentNewAllViewModel(get()) }
|
viewModel { AudioContentNewAllViewModel(get()) }
|
||||||
viewModel { AudioContentRankingAllViewModel(get()) }
|
viewModel { AudioContentRankingAllViewModel(get()) }
|
||||||
viewModel { RouletteSettingsViewModel(get()) }
|
viewModel { RouletteSettingsViewModel(get()) }
|
||||||
viewModel { CreatorCommunityAllViewModel(get()) }
|
viewModel { CreatorCommunityAllViewModel(get(), get()) }
|
||||||
viewModel { CreatorCommunityCommentListViewModel(get()) }
|
viewModel { CreatorCommunityCommentListViewModel(get()) }
|
||||||
viewModel { CreatorCommunityWriteViewModel(get()) }
|
viewModel { CreatorCommunityWriteViewModel(get()) }
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import android.view.View
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
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.BaseActivity
|
||||||
import kr.co.vividnext.sodalive.base.SodaDialog
|
import kr.co.vividnext.sodalive.base.SodaDialog
|
||||||
import kr.co.vividnext.sodalive.common.Constants
|
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.databinding.ActivityCreatorCommunityAllBinding
|
||||||
import kr.co.vividnext.sodalive.explorer.profile.creator_community.all.comment.CreatorCommunityCommentFragment
|
import kr.co.vividnext.sodalive.explorer.profile.creator_community.all.comment.CreatorCommunityCommentFragment
|
||||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||||
|
import kr.co.vividnext.sodalive.report.ReportType
|
||||||
import org.koin.android.ext.android.inject
|
import org.koin.android.ext.android.inject
|
||||||
|
|
||||||
class CreatorCommunityAllActivity : BaseActivity<ActivityCreatorCommunityAllBinding>(
|
class CreatorCommunityAllActivity : BaseActivity<ActivityCreatorCommunityAllBinding>(
|
||||||
|
@ -82,8 +84,13 @@ class CreatorCommunityAllActivity : BaseActivity<ActivityCreatorCommunityAllBind
|
||||||
cancelButtonClick = {}
|
cancelButtonClick = {}
|
||||||
).show(screenWidth)
|
).show(screenWidth)
|
||||||
},
|
},
|
||||||
onClickReport = {
|
onClickReport = { postId ->
|
||||||
|
CreatorCommunityReportDialog(this@CreatorCommunityAllActivity, layoutInflater) {
|
||||||
|
viewModel.report(
|
||||||
|
communityPostId = postId,
|
||||||
|
reason = it
|
||||||
|
)
|
||||||
|
}.show(screenWidth)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -10,11 +10,15 @@ import kr.co.vividnext.sodalive.base.BaseViewModel
|
||||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
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.CreatorCommunityRepository
|
||||||
import kr.co.vividnext.sodalive.explorer.profile.creator_community.GetCommunityPostListResponse
|
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.MediaType.Companion.toMediaType
|
||||||
import okhttp3.RequestBody.Companion.toRequestBody
|
import okhttp3.RequestBody.Companion.toRequestBody
|
||||||
|
|
||||||
class CreatorCommunityAllViewModel(
|
class CreatorCommunityAllViewModel(
|
||||||
private val repository: CreatorCommunityRepository
|
private val repository: CreatorCommunityRepository,
|
||||||
|
private val reportRepository: ReportRepository
|
||||||
) : BaseViewModel() {
|
) : BaseViewModel() {
|
||||||
private val _toastLiveData = MutableLiveData<String?>()
|
private val _toastLiveData = MutableLiveData<String?>()
|
||||||
val toastLiveData: LiveData<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("신고가 접수되었습니다.")
|
||||||
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,11 +8,13 @@ data class ReportRequest(
|
||||||
@SerializedName("reportedMemberId") val reportedMemberId: Long? = null,
|
@SerializedName("reportedMemberId") val reportedMemberId: Long? = null,
|
||||||
@SerializedName("cheersId") val cheersId: Long? = null,
|
@SerializedName("cheersId") val cheersId: Long? = null,
|
||||||
@SerializedName("audioContentId") val contentId: Long? = null,
|
@SerializedName("audioContentId") val contentId: Long? = null,
|
||||||
|
@SerializedName("communityPostId") val communityPostId: Long? = null,
|
||||||
)
|
)
|
||||||
|
|
||||||
enum class ReportType {
|
enum class ReportType {
|
||||||
@SerializedName("PROFILE") PROFILE,
|
@SerializedName("PROFILE") PROFILE,
|
||||||
@SerializedName("USER") USER,
|
@SerializedName("USER") USER,
|
||||||
@SerializedName("CHEERS") CHEERS,
|
@SerializedName("CHEERS") CHEERS,
|
||||||
@SerializedName("AUDIO_CONTENT") AUDIO_CONTENT
|
@SerializedName("AUDIO_CONTENT") AUDIO_CONTENT,
|
||||||
|
@SerializedName("COMMUNITY_POST") COMMUNITY_POST
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
|
@ -2,15 +2,15 @@
|
||||||
<!-- Base application theme. -->
|
<!-- Base application theme. -->
|
||||||
<style name="Theme.SodaLive" parent="Theme.Material3.DayNight.NoActionBar">
|
<style name="Theme.SodaLive" parent="Theme.Material3.DayNight.NoActionBar">
|
||||||
<!-- Primary brand color. -->
|
<!-- Primary brand color. -->
|
||||||
<item name="colorPrimary">@color/color_9970ff</item>
|
<item name="colorPrimary">@color/color_80d8ff</item>
|
||||||
<item name="colorPrimaryVariant">@color/color_9970ff</item>
|
<item name="colorPrimaryVariant">@color/color_80d8ff</item>
|
||||||
<item name="colorOnPrimary">@color/white</item>
|
<item name="colorOnPrimary">@color/white</item>
|
||||||
<!-- Secondary brand color. -->
|
<!-- Secondary brand color. -->
|
||||||
<item name="colorSecondary">@color/black</item>
|
<item name="colorSecondary">@color/black</item>
|
||||||
<item name="colorSecondaryVariant">@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. -->
|
<!-- Customize your theme here. -->
|
||||||
<item name="android:windowLightNavigationBar" tools:targetApi="o_mr1">false</item>
|
<item name="android:windowLightNavigationBar" tools:targetApi="o_mr1">false</item>
|
||||||
|
@ -19,8 +19,8 @@
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="EditTextStyle" parent="Theme.AppCompat.Light">
|
<style name="EditTextStyle" parent="Theme.AppCompat.Light">
|
||||||
<item name="colorControlNormal">@color/color_9970ff</item>
|
<item name="colorControlNormal">@color/color_3bb9f1</item>
|
||||||
<item name="colorControlActivated">@color/color_9970ff</item>
|
<item name="colorControlActivated">@color/color_3bb9f1</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="tabText" parent="@android:style/TextAppearance.Widget.TabWidget">
|
<style name="tabText" parent="@android:style/TextAppearance.Widget.TabWidget">
|
||||||
|
@ -28,9 +28,9 @@
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="DatePickerStyle" parent="Theme.AppCompat.Light.Dialog">
|
<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-->
|
<!--selected Item color-->
|
||||||
<item name="colorControlActivated">@color/color_9970ff</item>
|
<item name="colorControlActivated">@color/color_3bb9f1</item>
|
||||||
<item name="colorControlHighlight">@color/black</item>
|
<item name="colorControlHighlight">@color/black</item>
|
||||||
<!-- Ok Cancel Color-->
|
<!-- Ok Cancel Color-->
|
||||||
<item name="android:textColor">@color/white</item>
|
<item name="android:textColor">@color/white</item>
|
||||||
|
@ -47,7 +47,7 @@
|
||||||
<style name="TimePickerStyle" parent="Theme.AppCompat.Dialog">
|
<style name="TimePickerStyle" parent="Theme.AppCompat.Dialog">
|
||||||
<item name="colorAccent">@color/white</item>
|
<item name="colorAccent">@color/white</item>
|
||||||
<item name="android:textColor">@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:windowBackground">@color/black</item>
|
||||||
<item name="android:fontFamily">@font/gmarket_sans_medium</item>
|
<item name="android:fontFamily">@font/gmarket_sans_medium</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
Loading…
Reference in New Issue