라이브 수정 화면 문자열 리소스로 정리

LiveRoomEdit 화면의 타이틀과 안내 문구를 리소스 키로 치환해 다국어를 적용함

유효성 검증 및 토스트 메시지를 UiText 기반 문자열 리소스로 교체함
This commit is contained in:
2025-12-03 11:10:45 +09:00
parent 99bc5f14f7
commit fd6a025de9
6 changed files with 82 additions and 41 deletions

View File

@@ -64,7 +64,11 @@ class LiveRoomEditActivity : BaseActivity<ActivityLiveRoomEditBinding>(
super.onCreate(savedInstanceState)
if (roomDetail == null) {
Toast.makeText(applicationContext, "잘못된 요청입니다.", Toast.LENGTH_LONG).show()
Toast.makeText(
applicationContext,
getString(R.string.msg_live_room_edit_invalid_request),
Toast.LENGTH_LONG
).show()
finish()
}
@@ -73,13 +77,17 @@ class LiveRoomEditActivity : BaseActivity<ActivityLiveRoomEditBinding>(
binding.etContent.setText(roomDetail.notice)
binding.etNumberOfPeople.setText(roomDetail.numberOfParticipantsTotal.toString())
viewModel.setRoomDetail(roomDetail = roomDetail)
binding.tvNumberOfCharacters.text = getString(
R.string.screen_live_room_create_notice_char_count_format,
binding.etContent.length()
)
}
@SuppressLint("ClickableViewAccessibility")
override fun setupView() {
loadingDialog = LoadingDialog(this, layoutInflater)
binding.toolbar.tvBack.text = "라이브 수정"
binding.toolbar.tvBack.setText(R.string.screen_live_room_profile_edit_title)
binding.toolbar.tvBack.setOnClickListener { finish() }
binding.tvReservationDate.setOnClickListener {
@@ -164,7 +172,6 @@ class LiveRoomEditActivity : BaseActivity<ActivityLiveRoomEditBinding>(
}
}
@SuppressLint("SetTextI18n")
private fun bindData() {
compositeDisposable.add(
binding.etTitle.textChanges().skip(1)
@@ -180,7 +187,10 @@ class LiveRoomEditActivity : BaseActivity<ActivityLiveRoomEditBinding>(
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
binding.tvNumberOfCharacters.text = "${it.length}"
binding.tvNumberOfCharacters.text = getString(
R.string.screen_live_room_create_notice_char_count_format,
it.length
)
viewModel.content = it.toString()
}
)
@@ -198,8 +208,14 @@ class LiveRoomEditActivity : BaseActivity<ActivityLiveRoomEditBinding>(
}
)
viewModel.toastLiveData.observe(this) {
it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() }
viewModel.toastLiveData.observe(this) { uiText ->
uiText?.let {
Toast.makeText(
applicationContext,
it.asString(this),
Toast.LENGTH_LONG
).show()
}
}
viewModel.isLoading.observe(this) {

View File

@@ -7,10 +7,14 @@ import com.orhanobut.logger.Logger
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers
import kr.co.vividnext.sodalive.base.BaseViewModel
import kr.co.vividnext.sodalive.common.UiText
import kr.co.vividnext.sodalive.common.UiText.DynamicString
import kr.co.vividnext.sodalive.common.UiText.StringResource
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.extensions.convertDateFormat
import kr.co.vividnext.sodalive.live.LiveRepository
import kr.co.vividnext.sodalive.live.room.detail.GetRoomDetailResponse
import kr.co.vividnext.sodalive.R
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.RequestBody.Companion.toRequestBody
import java.util.Locale
@@ -20,16 +24,16 @@ class LiveRoomEditViewModel(
private val repository: LiveRepository
) : BaseViewModel() {
private val _reservationDateLiveData = MutableLiveData("날짜를 선택해주세요")
private val _reservationDateLiveData = MutableLiveData("")
val reservationDateLiveData: LiveData<String>
get() = _reservationDateLiveData
private val _reservationTimeLiveData = MutableLiveData("시간을 설정해주세요")
private val _reservationTimeLiveData = MutableLiveData("")
val reservationTimeLiveData: LiveData<String>
get() = _reservationTimeLiveData
private val _toastLiveData = MutableLiveData<String?>()
val toastLiveData: LiveData<String?>
private val _toastLiveData = MutableLiveData<UiText?>()
val toastLiveData: LiveData<UiText?>
get() = _toastLiveData
private var _isLoading = MutableLiveData(false)
@@ -86,7 +90,7 @@ class LiveRoomEditViewModel(
request.numberOfPeople == null &&
request.beginDateTimeString == null
) {
_toastLiveData.value = "변경사항이 없습니다."
_toastLiveData.value = StringResource(R.string.msg_live_room_edit_no_changes)
_isLoading.value = false
return
}
@@ -104,14 +108,15 @@ class LiveRoomEditViewModel(
.subscribe(
{
if (it.success && it.data != null) {
_toastLiveData.value = "라이브 정보가 수정 되었습니다."
_toastLiveData.value =
StringResource(R.string.screen_live_room_info_updated)
onSuccess()
} else {
if (it.message != null) {
_toastLiveData.postValue(it.message)
_toastLiveData.postValue(DynamicString(it.message))
} else {
_toastLiveData.postValue(
"라이브 정보를 수정 하지 못했습니다.\n다시 시도해 주세요."
StringResource(R.string.msg_live_room_edit_update_failed)
)
}
}
@@ -121,7 +126,7 @@ class LiveRoomEditViewModel(
_isLoading.postValue(false)
it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue(
"라이브 정보를 수정 하지 못했습니다.\n다시 시도해 주세요."
StringResource(R.string.msg_live_room_edit_update_failed)
)
}
)
@@ -161,17 +166,23 @@ class LiveRoomEditViewModel(
private fun validateData(): Boolean {
if (title.isBlank()) {
_toastLiveData.postValue("제목을 입력해주세요.")
_toastLiveData.postValue(
StringResource(R.string.msg_live_room_create_title_required)
)
return false
}
if (content.isBlank() || content.length < 5) {
_toastLiveData.postValue("내용을 5자 이상 입력해주세요.")
_toastLiveData.postValue(
StringResource(R.string.msg_live_room_create_notice_required)
)
return false
}
if (numberOfPeople < 3 || numberOfPeople > 999) {
_toastLiveData.postValue("인원을 3~999명 사이로 입력해주세요.")
if (numberOfPeople !in 3..999) {
_toastLiveData.postValue(
StringResource(R.string.msg_live_room_create_participants_invalid)
)
return false
}

View File

@@ -35,7 +35,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold"
android:text="제목"
android:text="@string/screen_live_room_title_label"
android:textColor="@color/color_eeeeee"
android:textSize="16.7sp" />
@@ -45,7 +45,7 @@
android:layout_height="wrap_content"
android:background="@drawable/edittext_underline"
android:fontFamily="@font/gmarket_sans_medium"
android:hint="라이브 제목을 입력해주세요."
android:hint="@string/screen_live_room_title_hint"
android:importantForAutofill="no"
android:inputType="textWebEditText"
android:paddingHorizontal="6.7dp"
@@ -75,7 +75,7 @@
android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_bold"
android:lineSpacingExtra="5sp"
android:text="공지"
android:text="@string/screen_live_room_notice"
android:textColor="@color/color_eeeeee"
android:textSize="16.7sp" />
@@ -89,7 +89,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium"
android:text="0자"
android:text="@string/screen_live_room_create_notice_char_count_placeholder"
android:textColor="@color/color_ff5c49"
android:textSize="13.3sp" />
@@ -97,7 +97,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium"
android:text=" / 최대 1000자"
android:text="@string/screen_live_room_create_notice_char_limit"
android:textColor="@color/color_777777"
android:textSize="13.3sp" />
</LinearLayout>
@@ -110,7 +110,7 @@
android:background="@drawable/bg_round_corner_6_7_222222"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="top"
android:hint="라이브 공지를 입력해 주세요"
android:hint="@string/screen_live_room_notice_hint"
android:importantForAutofill="no"
android:inputType="textMultiLine"
android:overScrollMode="always"
@@ -132,7 +132,7 @@
android:layout_marginTop="33.3dp"
android:fontFamily="@font/gmarket_sans_bold"
android:lineSpacingExtra="5sp"
android:text="시간 설정"
android:text="@string/screen_live_room_create_time_label"
android:textColor="@color/color_eeeeee"
android:textSize="16.7sp" />
@@ -152,12 +152,12 @@
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium"
android:text="예약 날짜"
android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" />
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium"
android:text="@string/screen_live_room_create_reservation_date_label"
android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" />
<TextView
android:id="@+id/tv_reservation_date"
@@ -168,6 +168,7 @@
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center"
android:paddingVertical="15.3dp"
android:text="@string/screen_live_room_create_reservation_date_placeholder"
android:textColor="@color/color_eeeeee"
android:textSize="14.7sp"
tools:text="2021.08.04" />
@@ -182,12 +183,12 @@
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium"
android:text="예약 시간"
android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" />
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium"
android:text="@string/screen_live_room_create_reservation_time_label"
android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" />
<TextView
android:id="@+id/tv_reservation_time"
@@ -198,6 +199,7 @@
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center"
android:paddingVertical="15.3dp"
android:text="@string/screen_live_room_create_reservation_time_placeholder"
android:textColor="@color/color_eeeeee"
android:textSize="14.7sp"
tools:text="오후 08 : 30" />
@@ -211,7 +213,7 @@
android:layout_marginTop="33.3dp"
android:fontFamily="@font/gmarket_sans_bold"
android:lineSpacingExtra="5sp"
android:text="참여인원 설정"
android:text="@string/screen_live_room_create_capacity_label"
android:textColor="@color/color_eeeeee"
android:textSize="16.7sp" />
@@ -223,7 +225,7 @@
android:background="@drawable/bg_round_corner_6_7_222222"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center"
android:hint="최대 인원 999명"
android:hint="@string/screen_live_room_create_capacity_hint"
android:importantForAutofill="no"
android:inputType="number"
android:maxLength="3"
@@ -253,7 +255,7 @@
android:background="@drawable/bg_round_corner_10_3bb9f1"
android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center"
android:text="라이브 수정"
android:text="@string/screen_live_room_profile_edit_title"
android:textColor="@color/white"
android:textSize="18.3sp" />
</FrameLayout>

View File

@@ -483,6 +483,10 @@
<string name="screen_live_room_menu_first_required">Set menu 1 first.</string>
<string name="screen_live_room_menu_first_second_required">Set menu 1 and menu 2 first.</string>
<string name="screen_live_room_cancel_reason_required">Please enter a cancellation reason.</string>
<!-- Live Room Edit -->
<string name="msg_live_room_edit_invalid_request">Invalid request.</string>
<string name="msg_live_room_edit_no_changes">No changes to update.</string>
<string name="msg_live_room_edit_update_failed">Could not update the live info.\nPlease try again.</string>
<!-- Live Room Create -->
<string name="screen_live_room_create_title">Create live</string>
<string name="screen_live_room_create_get_recent_info">Load recent data</string>

View File

@@ -483,6 +483,10 @@
<string name="screen_live_room_menu_first_required">メニュー1を先に設定してください</string>
<string name="screen_live_room_menu_first_second_required">メニュー1とメニュー2を先に設定してください</string>
<string name="screen_live_room_cancel_reason_required">キャンセル理由を入力してください。</string>
<!-- Live Room Edit -->
<string name="msg_live_room_edit_invalid_request">不正なリクエストです。</string>
<string name="msg_live_room_edit_no_changes">変更内容がありません。</string>
<string name="msg_live_room_edit_update_failed">ライブ情報を修正できませんでした。\nもう一度お試しください。</string>
<!-- Live Room Create -->
<string name="screen_live_room_create_title">ライブを作成</string>
<string name="screen_live_room_create_get_recent_info">最近のデータを読み込む</string>

View File

@@ -482,6 +482,10 @@
<string name="screen_live_room_menu_first_required">메뉴 1을 먼저 설정하세요</string>
<string name="screen_live_room_menu_first_second_required">메뉴 1과 메뉴 2를 먼저 설정하세요</string>
<string name="screen_live_room_cancel_reason_required">취소사유를 입력하세요.</string>
<!-- Live Room Edit -->
<string name="msg_live_room_edit_invalid_request">잘못된 요청입니다.</string>
<string name="msg_live_room_edit_no_changes">변경사항이 없습니다.</string>
<string name="msg_live_room_edit_update_failed">라이브 정보를 수정하지 못했습니다.\n다시 시도해 주세요.</string>
<!-- Live Room Create -->
<string name="screen_live_room_create_title">라이브 만들기</string>
<string name="screen_live_room_create_get_recent_info">최근 데이터 가져오기</string>