feat: 콘텐츠 수정

- 태그 수정 기능 추가
- 포인트 사용여부 수정 기능 추가
This commit is contained in:
2025-06-04 20:03:42 +09:00
parent 19c39f636d
commit 3bda97b0a7
4 changed files with 206 additions and 0 deletions

View File

@@ -101,6 +101,9 @@ class AudioContentModifyActivity : BaseActivity<ActivityAudioContentModifyBindin
.createIntent { imageResult.launch(it) } .createIntent { imageResult.launch(it) }
} }
binding.llAvailablePoint.setOnClickListener { viewModel.setAvailablePoint(true) }
binding.llNotAvailablePoint.setOnClickListener { viewModel.setAvailablePoint(false) }
binding.llCommentNo.setOnClickListener { viewModel.setAvailableComment(false) } binding.llCommentNo.setOnClickListener { viewModel.setAvailableComment(false) }
binding.llCommentYes.setOnClickListener { viewModel.setAvailableComment(true) } binding.llCommentYes.setOnClickListener { viewModel.setAvailableComment(true) }
@@ -152,6 +155,15 @@ class AudioContentModifyActivity : BaseActivity<ActivityAudioContentModifyBindin
} }
) )
compositeDisposable.add(
binding.etTag.textChanges().skip(1)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
viewModel.tags = it.toString()
}
)
viewModel.toastLiveData.observe(this) { viewModel.toastLiveData.observe(this) {
it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() } it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() }
} }
@@ -164,6 +176,14 @@ class AudioContentModifyActivity : BaseActivity<ActivityAudioContentModifyBindin
} }
} }
viewModel.isAvailablePointLiveData.observe(this) {
if (it) {
checkAvailablePoint()
} else {
checkNotAvailablePoint()
}
}
viewModel.isAvailableCommentLiveData.observe(this) { viewModel.isAvailableCommentLiveData.observe(this) {
if (it) { if (it) {
binding.ivCommentYes.visibility = View.VISIBLE binding.ivCommentYes.visibility = View.VISIBLE
@@ -284,5 +304,53 @@ class AudioContentModifyActivity : BaseActivity<ActivityAudioContentModifyBindin
viewModel.detailLiveData.observe(this) { viewModel.detailLiveData.observe(this) {
binding.etDetail.setText(it) binding.etDetail.setText(it)
} }
viewModel.tagsLiveData.observe(this) {
binding.etTag.setText(it)
}
}
private fun checkAvailablePoint() {
binding.ivAvailablePoint.visibility = View.VISIBLE
binding.tvAvailablePoint.setTextColor(
ContextCompat.getColor(
applicationContext,
R.color.color_eeeeee
)
)
binding.llAvailablePoint.setBackgroundResource(R.drawable.bg_round_corner_6_7_3bb9f1)
binding.ivNotAvailablePoint.visibility = View.GONE
binding.tvNotAvailablePoint.setTextColor(
ContextCompat.getColor(
applicationContext,
R.color.color_3bb9f1
)
)
binding.llNotAvailablePoint.setBackgroundResource(
R.drawable.bg_round_corner_6_7_13181b
)
}
private fun checkNotAvailablePoint() {
binding.ivNotAvailablePoint.visibility = View.VISIBLE
binding.tvNotAvailablePoint.setTextColor(
ContextCompat.getColor(
applicationContext,
R.color.color_eeeeee
)
)
binding.llNotAvailablePoint.setBackgroundResource(R.drawable.bg_round_corner_6_7_3bb9f1)
binding.ivAvailablePoint.visibility = View.GONE
binding.tvAvailablePoint.setTextColor(
ContextCompat.getColor(
applicationContext,
R.color.color_3bb9f1
)
)
binding.llAvailablePoint.setBackgroundResource(
R.drawable.bg_round_corner_6_7_13181b
)
} }
} }

View File

@@ -46,6 +46,10 @@ class AudioContentModifyViewModel(
val detailLiveData: LiveData<String> val detailLiveData: LiveData<String>
get() = _detailLiveData get() = _detailLiveData
private val _tagsLiveData = MutableLiveData("")
val tagsLiveData: LiveData<String>
get() = _tagsLiveData
private val _coverImageLiveData = MutableLiveData("") private val _coverImageLiveData = MutableLiveData("")
val coverImageLiveData: LiveData<String> val coverImageLiveData: LiveData<String>
get() = _coverImageLiveData get() = _coverImageLiveData
@@ -54,12 +58,18 @@ class AudioContentModifyViewModel(
val isAdultShowUiLiveData: LiveData<Boolean> val isAdultShowUiLiveData: LiveData<Boolean>
get() = _isAdultShowUiLiveData get() = _isAdultShowUiLiveData
private val _isAvailablePointLiveData = MutableLiveData(false)
val isAvailablePointLiveData: LiveData<Boolean>
get() = _isAvailablePointLiveData
lateinit var getRealPathFromURI: (Uri) -> String? lateinit var getRealPathFromURI: (Uri) -> String?
var contentId: Long = 0 var contentId: Long = 0
var title: String? = null var title: String? = null
var detail: String? = null var detail: String? = null
var tags: String? = null
var coverImageUri: Uri? = null var coverImageUri: Uri? = null
var isPointAvailable: Boolean? = null
fun setAdult(isAdult: Boolean) { fun setAdult(isAdult: Boolean) {
_isAdultLiveData.postValue(isAdult) _isAdultLiveData.postValue(isAdult)
@@ -69,6 +79,11 @@ class AudioContentModifyViewModel(
_isAvailableCommentLiveData.postValue(isAvailableComment) _isAvailableCommentLiveData.postValue(isAvailableComment)
} }
fun setAvailablePoint(isAvailablePoint: Boolean) {
isPointAvailable = isAvailablePoint
_isAvailablePointLiveData.value = isAvailablePoint
}
fun getAudioContentDetail(audioContentId: Long, onFailure: (() -> Unit)? = null) { fun getAudioContentDetail(audioContentId: Long, onFailure: (() -> Unit)? = null) {
this.contentId = audioContentId this.contentId = audioContentId
_isLoading.value = true _isLoading.value = true
@@ -85,10 +100,12 @@ class AudioContentModifyViewModel(
if (it.success && it.data != null) { if (it.success && it.data != null) {
_titleLiveData.value = it.data.title _titleLiveData.value = it.data.title
_detailLiveData.value = it.data.detail _detailLiveData.value = it.data.detail
_tagsLiveData.value = it.data.tag
_coverImageLiveData.value = it.data.coverImageUrl _coverImageLiveData.value = it.data.coverImageUrl
_isAvailableCommentLiveData.value = it.data.isCommentAvailable _isAvailableCommentLiveData.value = it.data.isCommentAvailable
_isAdultLiveData.value = it.data.isAdult _isAdultLiveData.value = it.data.isAdult
_isAdultShowUiLiveData.value = !it.data.isAdult _isAdultShowUiLiveData.value = !it.data.isAdult
_isAvailablePointLiveData.value = it.data.isAvailableUsePoint
} else { } else {
if (it.message != null) { if (it.message != null) {
_toastLiveData.postValue(it.message) _toastLiveData.postValue(it.message)
@@ -125,7 +142,13 @@ class AudioContentModifyViewModel(
contentId = contentId, contentId = contentId,
title = title, title = title,
detail = detail, detail = detail,
tags = if (tags != _tagsLiveData.value!!) {
tags
} else {
null
},
isAdult = _isAdultLiveData.value!!, isAdult = _isAdultLiveData.value!!,
isPointAvailable = isPointAvailable,
isCommentAvailable = _isAvailableCommentLiveData.value!! isCommentAvailable = _isAvailableCommentLiveData.value!!
) )

View File

@@ -8,6 +8,8 @@ data class ModifyAudioContentRequest(
@SerializedName("contentId") val contentId: Long, @SerializedName("contentId") val contentId: Long,
@SerializedName("title") val title: String?, @SerializedName("title") val title: String?,
@SerializedName("detail") val detail: String?, @SerializedName("detail") val detail: String?,
@SerializedName("tags") val tags: String?,
@SerializedName("isAdult") val isAdult: Boolean, @SerializedName("isAdult") val isAdult: Boolean,
@SerializedName("isPointAvailable") val isPointAvailable: Boolean?,
@SerializedName("isCommentAvailable") val isCommentAvailable: Boolean @SerializedName("isCommentAvailable") val isCommentAvailable: Boolean
) )

View File

@@ -174,12 +174,125 @@
tools:ignore="LabelFor" /> tools:ignore="LabelFor" />
</LinearLayout> </LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13.3dp"
android:layout_marginTop="30dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold"
android:text="태그"
android:textColor="@color/color_eeeeee"
android:textSize="16.7sp" />
<EditText
android:id="@+id/et_tag"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="13.3dp"
android:background="@drawable/bg_round_corner_6_7_222222"
android:fontFamily="@font/gmarket_sans_medium"
android:hint="예 : #연애 #커버곡 #태그"
android:importantForAutofill="no"
android:inputType="textWebEditText"
android:paddingHorizontal="13.3dp"
android:paddingVertical="17dp"
android:textColor="@color/color_eeeeee"
android:textColorHint="@color/color_777777"
android:textCursorDrawable="@drawable/edit_text_cursor"
android:textSize="13.3sp"
android:theme="@style/EditTextStyle"
tools:ignore="LabelFor" />
</LinearLayout>
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="6.7dp" android:layout_height="6.7dp"
android:layout_marginVertical="26.7dp" android:layout_marginVertical="26.7dp"
android:background="@color/color_232323" /> android:background="@color/color_232323" />
<TextView
android:id="@+id/tv_config_point_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13.3dp"
android:layout_marginTop="30dp"
android:fontFamily="@font/gmarket_sans_bold"
android:lineSpacingExtra="5sp"
android:text="포인트 사용"
android:textColor="@color/color_eeeeee"
android:textSize="16.7sp" />
<LinearLayout
android:id="@+id/ll_config_point"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13.3dp"
android:layout_marginTop="13.3dp"
android:baselineAligned="false">
<LinearLayout
android:id="@+id/ll_available_point"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/bg_round_corner_6_7_13181b"
android:gravity="center"
android:paddingVertical="14.3dp">
<ImageView
android:id="@+id/iv_available_point"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="6.7dp"
android:contentDescription="@null"
android:src="@drawable/ic_select_check"
android:visibility="gone" />
<TextView
android:id="@+id/tv_available_point"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold"
android:text="가능"
android:textColor="@color/color_3bb9f1"
android:textSize="14.7sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_not_available_point"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="13.3dp"
android:layout_weight="1"
android:background="@drawable/bg_round_corner_6_7_13181b"
android:gravity="center"
android:paddingVertical="14.3dp">
<ImageView
android:id="@+id/iv_not_available_point"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="6.7dp"
android:contentDescription="@null"
android:src="@drawable/ic_select_check"
android:visibility="gone" />
<TextView
android:id="@+id/tv_not_available_point"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold"
android:text="불가능"
android:textColor="@color/color_3bb9f1"
android:textSize="14.7sp" />
</LinearLayout>
</LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/ll_set_adult" android:id="@+id/ll_set_adult"
android:layout_width="match_parent" android:layout_width="match_parent"