메뉴 설정 화면 문자열 리소스화

메뉴 선택/저장 UI 텍스트를 문자열 리소스와 다국어 번역으로 교체함

메뉴 프리셋 선택/저장 토스트를 UiText 기반으로 공통 오류 메시지 사용
This commit is contained in:
2025-12-03 11:17:50 +09:00
parent fd6a025de9
commit 82b09f2c63
6 changed files with 45 additions and 19 deletions

View File

@@ -40,7 +40,7 @@ class MenuConfigActivity : BaseActivity<ActivityMenuConfigBinding>(
} }
override fun setupView() { override fun setupView() {
binding.toolbar.tvBack.text = "메뉴 설정" binding.toolbar.tvBack.setText(R.string.screen_menu_config_title)
binding.toolbar.tvBack.setOnClickListener { finish() } binding.toolbar.tvBack.setOnClickListener { finish() }
loadingDialog = LoadingDialog(this, layoutInflater) loadingDialog = LoadingDialog(this, layoutInflater)
@@ -71,7 +71,9 @@ class MenuConfigActivity : BaseActivity<ActivityMenuConfigBinding>(
} }
private fun bindData() { private fun bindData() {
viewModel.toastLiveData.observe(this) { it?.let { showToast(it) } } viewModel.toastLiveData.observe(this) { uiText ->
uiText?.let { showToast(it.asString(this)) }
}
viewModel.isLoading.observe(this) { viewModel.isLoading.observe(this) {
if (it) { if (it) {
loadingDialog.show(screenWidth) loadingDialog.show(screenWidth)

View File

@@ -6,8 +6,12 @@ import com.orhanobut.logger.Logger
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers import io.reactivex.rxjava3.schedulers.Schedulers
import kr.co.vividnext.sodalive.base.BaseViewModel 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.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.live.room.create.LiveRoomCreateViewModel import kr.co.vividnext.sodalive.live.room.create.LiveRoomCreateViewModel
import kr.co.vividnext.sodalive.R
class MenuConfigViewModel(private val repository: MenuConfigRepository) : BaseViewModel() { class MenuConfigViewModel(private val repository: MenuConfigRepository) : BaseViewModel() {
@@ -15,8 +19,8 @@ class MenuConfigViewModel(private val repository: MenuConfigRepository) : BaseVi
val isLoading: LiveData<Boolean> val isLoading: LiveData<Boolean>
get() = _isLoading get() = _isLoading
private val _toastLiveData = MutableLiveData<String?>() private val _toastLiveData = MutableLiveData<UiText?>()
val toastLiveData: LiveData<String?> val toastLiveData: LiveData<UiText?>
get() = _toastLiveData get() = _toastLiveData
private val _selectedMenuLiveData = MutableLiveData<LiveRoomCreateViewModel.SelectedMenu>() private val _selectedMenuLiveData = MutableLiveData<LiveRoomCreateViewModel.SelectedMenu>()
@@ -51,10 +55,10 @@ class MenuConfigViewModel(private val repository: MenuConfigRepository) : BaseVi
selectMenuPreset(selectedMenu) selectMenuPreset(selectedMenu)
} else { } else {
if (it.message != null) { if (it.message != null) {
_toastLiveData.postValue(it.message) _toastLiveData.postValue(DynamicString(it.message))
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." StringResource(R.string.common_error_unknown)
) )
} }
} }
@@ -63,7 +67,9 @@ class MenuConfigViewModel(private val repository: MenuConfigRepository) : BaseVi
{ {
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") _toastLiveData.postValue(
StringResource(R.string.common_error_unknown)
)
} }
) )
) )
@@ -77,12 +83,14 @@ class MenuConfigViewModel(private val repository: MenuConfigRepository) : BaseVi
selectedMenuPreset == LiveRoomCreateViewModel.SelectedMenu.MENU_3 selectedMenuPreset == LiveRoomCreateViewModel.SelectedMenu.MENU_3
) )
) { ) {
_toastLiveData.value = "메뉴 1을 먼저 설정하세요" _toastLiveData.value =
StringResource(R.string.screen_live_room_menu_first_required)
return return
} }
if (menuList.size == 1 && selectedMenuPreset == LiveRoomCreateViewModel.SelectedMenu.MENU_3) { if (menuList.size == 1 && selectedMenuPreset == LiveRoomCreateViewModel.SelectedMenu.MENU_3) {
_toastLiveData.value = "메뉴 1과 메뉴 2를 먼저 설정하세요" _toastLiveData.value =
StringResource(R.string.screen_live_room_menu_first_second_required)
return return
} }
@@ -105,7 +113,7 @@ class MenuConfigViewModel(private val repository: MenuConfigRepository) : BaseVi
fun saveMenu() { fun saveMenu() {
if (menuText == _selectedMenuTextLiveData.value) { if (menuText == _selectedMenuTextLiveData.value) {
_toastLiveData.postValue("저장되었습니다.") _toastLiveData.postValue(StringResource(R.string.msg_menu_config_saved))
return return
} }
@@ -121,14 +129,16 @@ class MenuConfigViewModel(private val repository: MenuConfigRepository) : BaseVi
.subscribe( .subscribe(
{ {
if (it.success) { if (it.success) {
_toastLiveData.postValue("저장되었습니다.") _toastLiveData.postValue(
StringResource(R.string.msg_menu_config_saved)
)
getAllMenuPreset(selectedMenu = _selectedMenuLiveData.value!!) getAllMenuPreset(selectedMenu = _selectedMenuLiveData.value!!)
} else { } else {
if (it.message != null) { if (it.message != null) {
_toastLiveData.postValue(it.message) _toastLiveData.postValue(DynamicString(it.message))
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." StringResource(R.string.common_error_unknown)
) )
} }
} }
@@ -137,7 +147,9 @@ class MenuConfigViewModel(private val repository: MenuConfigRepository) : BaseVi
{ {
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") _toastLiveData.postValue(
StringResource(R.string.common_error_unknown)
)
} }
) )
) )

View File

@@ -49,7 +49,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="메뉴 1" android:text="@string/screen_live_room_menu_preset_1"
android:textColor="@color/color_3bb9f1" android:textColor="@color/color_3bb9f1"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
</LinearLayout> </LinearLayout>
@@ -78,7 +78,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="메뉴 2" android:text="@string/screen_live_room_menu_preset_2"
android:textColor="@color/color_555555" android:textColor="@color/color_555555"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
</LinearLayout> </LinearLayout>
@@ -107,7 +107,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="메뉴 3" android:text="@string/screen_live_room_menu_preset_3"
android:textColor="@color/color_555555" android:textColor="@color/color_555555"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
</LinearLayout> </LinearLayout>
@@ -121,7 +121,7 @@
android:background="@drawable/bg_round_corner_6_7_222222" android:background="@drawable/bg_round_corner_6_7_222222"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:gravity="top" android:gravity="top"
android:hint="메뉴판을 작성해주세요." android:hint="@string/screen_live_room_menu_hint"
android:importantForAutofill="no" android:importantForAutofill="no"
android:inputType="textMultiLine" android:inputType="textMultiLine"
android:overScrollMode="always" android:overScrollMode="always"
@@ -143,7 +143,7 @@
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center" android:gravity="center"
android:paddingVertical="16dp" android:paddingVertical="16dp"
android:text="메뉴 저장" android:text="@string/screen_menu_config_save"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="18.3sp" /> android:textSize="18.3sp" />
</LinearLayout> </LinearLayout>

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_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_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> <string name="screen_live_room_cancel_reason_required">Please enter a cancellation reason.</string>
<!-- Menu Config -->
<string name="screen_menu_config_title">Menu settings</string>
<string name="screen_menu_config_save">Save menu</string>
<string name="msg_menu_config_saved">Saved.</string>
<!-- Live Room Edit --> <!-- Live Room Edit -->
<string name="msg_live_room_edit_invalid_request">Invalid request.</string> <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_no_changes">No changes to update.</string>

View File

@@ -483,6 +483,10 @@
<string name="screen_live_room_menu_first_required">メニュー1を先に設定してください</string> <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_menu_first_second_required">メニュー1とメニュー2を先に設定してください</string>
<string name="screen_live_room_cancel_reason_required">キャンセル理由を入力してください。</string> <string name="screen_live_room_cancel_reason_required">キャンセル理由を入力してください。</string>
<!-- Menu Config -->
<string name="screen_menu_config_title">メニュー設定</string>
<string name="screen_menu_config_save">メニュー保存</string>
<string name="msg_menu_config_saved">保存しました。</string>
<!-- Live Room Edit --> <!-- Live Room Edit -->
<string name="msg_live_room_edit_invalid_request">不正なリクエストです。</string> <string name="msg_live_room_edit_invalid_request">不正なリクエストです。</string>
<string name="msg_live_room_edit_no_changes">変更内容がありません。</string> <string name="msg_live_room_edit_no_changes">変更内容がありません。</string>

View File

@@ -482,6 +482,10 @@
<string name="screen_live_room_menu_first_required">메뉴 1을 먼저 설정하세요</string> <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_menu_first_second_required">메뉴 1과 메뉴 2를 먼저 설정하세요</string>
<string name="screen_live_room_cancel_reason_required">취소사유를 입력하세요.</string> <string name="screen_live_room_cancel_reason_required">취소사유를 입력하세요.</string>
<!-- Menu Config -->
<string name="screen_menu_config_title">메뉴 설정</string>
<string name="screen_menu_config_save">메뉴 저장</string>
<string name="msg_menu_config_saved">저장되었습니다.</string>
<!-- Live Room Edit --> <!-- Live Room Edit -->
<string name="msg_live_room_edit_invalid_request">잘못된 요청입니다.</string> <string name="msg_live_room_edit_invalid_request">잘못된 요청입니다.</string>
<string name="msg_live_room_edit_no_changes">변경사항이 없습니다.</string> <string name="msg_live_room_edit_no_changes">변경사항이 없습니다.</string>