룰렛 설정/프리뷰 문자열 리소스화
This commit is contained in:
@@ -212,7 +212,10 @@ class RoulettePreviewDialog(
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
private fun setRouletteData(roulettePreview: RoulettePreview) {
|
||||
dialogView.tvSpinRoulette.text = "${roulettePreview.can}캔으로 룰렛 돌리기"
|
||||
dialogView.tvSpinRoulette.text = activity.getString(
|
||||
R.string.screen_roulette_preview_spin_format,
|
||||
roulettePreview.can
|
||||
)
|
||||
dialogView.tvSpinRoulette.setOnClickListener {
|
||||
if (onClickSpin != null) {
|
||||
onClickSpin!!(roulettePreview.id)
|
||||
@@ -240,9 +243,9 @@ class RoulettePreviewDialog(
|
||||
|
||||
dialogView.tvTitle.text = title.ifBlank {
|
||||
when (selectedRouletteLiveData.value) {
|
||||
SelectedRoulette.ROULETTE_2 -> "룰렛 2"
|
||||
SelectedRoulette.ROULETTE_3 -> "룰렛 3"
|
||||
else -> "룰렛 1"
|
||||
SelectedRoulette.ROULETTE_2 -> activity.getString(R.string.screen_roulette_config_preset_2)
|
||||
SelectedRoulette.ROULETTE_3 -> activity.getString(R.string.screen_roulette_config_preset_3)
|
||||
else -> activity.getString(R.string.screen_roulette_config_preset_1)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -279,7 +282,11 @@ class RoulettePreviewDialog(
|
||||
val tvItemTitle = itemView.findViewById<TextView>(R.id.tv_roulette_item_title)
|
||||
val tvOrder = itemView.findViewById<TextView>(R.id.tv_order)
|
||||
|
||||
tvItemTitle.text = "${item.title} (${item.percent})"
|
||||
tvItemTitle.text = activity.getString(
|
||||
R.string.screen_roulette_preview_item_title_format,
|
||||
item.title,
|
||||
item.percent
|
||||
)
|
||||
tvOrder.text = "${index + 1}"
|
||||
|
||||
return itemView
|
||||
|
||||
@@ -59,7 +59,7 @@ class RouletteConfigActivity : BaseActivity<ActivityRouletteConfigBinding>(
|
||||
}
|
||||
|
||||
override fun setupView() {
|
||||
binding.tvBack.text = "룰렛 설정"
|
||||
binding.tvBack.setText(R.string.screen_roulette_config_title)
|
||||
binding.tvBack.setOnClickListener { finish() }
|
||||
|
||||
loadingDialog = LoadingDialog(this, layoutInflater)
|
||||
@@ -118,7 +118,6 @@ class RouletteConfigActivity : BaseActivity<ActivityRouletteConfigBinding>(
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
private fun bindData() {
|
||||
viewModel.selectedRouletteLiveData.observe(this) {
|
||||
deselectAllRoulette()
|
||||
@@ -151,11 +150,13 @@ class RouletteConfigActivity : BaseActivity<ActivityRouletteConfigBinding>(
|
||||
|
||||
viewModel.optionsLiveData.observe(this) { updateOptionUi(it) }
|
||||
|
||||
viewModel.toastLiveData.observe(this) { it?.let { showToast(it) } }
|
||||
viewModel.toastLiveData.observe(this) { uiText ->
|
||||
uiText?.let { showToast(it.asString(this)) }
|
||||
}
|
||||
|
||||
viewModel.canLiveData.observe(this) {
|
||||
if (it > 0) {
|
||||
binding.etSetPrice.setText("$it")
|
||||
binding.etSetPrice.setText(it.toString())
|
||||
} else {
|
||||
binding.etSetPrice.setText("")
|
||||
}
|
||||
@@ -173,19 +174,16 @@ class RouletteConfigActivity : BaseActivity<ActivityRouletteConfigBinding>(
|
||||
RoulettePreviewDialog(
|
||||
activity = this@RouletteConfigActivity,
|
||||
previewList = listOf(it),
|
||||
title = "룰렛 미리보기",
|
||||
title = getString(R.string.screen_roulette_config_preview_title),
|
||||
layoutInflater = layoutInflater
|
||||
).show()
|
||||
}
|
||||
|
||||
viewModel.totalPercentageLiveData.observe(this) {
|
||||
binding.tvTotalPercentage.text = "( ${
|
||||
String.format(
|
||||
Locale.KOREAN,
|
||||
"%.2f%%",
|
||||
it
|
||||
)
|
||||
} )"
|
||||
binding.tvTotalPercentage.text = getString(
|
||||
R.string.screen_roulette_config_option_total_format,
|
||||
String.format(Locale.getDefault(), "%.2f", it)
|
||||
)
|
||||
}
|
||||
|
||||
compositeDisposable.add(
|
||||
@@ -229,7 +227,10 @@ class RouletteConfigActivity : BaseActivity<ActivityRouletteConfigBinding>(
|
||||
val tvDelete = optionView.findViewById<TextView>(R.id.tv_delete)
|
||||
|
||||
etOption.setText(option.title)
|
||||
tvOptionTitle.text = "옵션 ${index + 1}"
|
||||
tvOptionTitle.text = getString(
|
||||
R.string.screen_roulette_config_option_title_format,
|
||||
index + 1
|
||||
)
|
||||
|
||||
try {
|
||||
if (option.percentage.toFloat() > 0f) {
|
||||
|
||||
@@ -6,12 +6,16 @@ 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.live.roulette.GetNewRouletteResponse
|
||||
import kr.co.vividnext.sodalive.live.roulette.RouletteItem
|
||||
import kr.co.vividnext.sodalive.live.roulette.RoulettePreview
|
||||
import kr.co.vividnext.sodalive.live.roulette.RoulettePreviewItem
|
||||
import kr.co.vividnext.sodalive.live.roulette.RouletteRepository
|
||||
import kr.co.vividnext.sodalive.R
|
||||
|
||||
class RouletteSettingsViewModel(private val repository: RouletteRepository) : BaseViewModel() {
|
||||
|
||||
@@ -23,8 +27,8 @@ class RouletteSettingsViewModel(private val repository: RouletteRepository) : Ba
|
||||
val isLoading: LiveData<Boolean>
|
||||
get() = _isLoading
|
||||
|
||||
private val _toastLiveData = MutableLiveData<String?>()
|
||||
val toastLiveData: LiveData<String?>
|
||||
private val _toastLiveData = MutableLiveData<UiText?>()
|
||||
val toastLiveData: LiveData<UiText?>
|
||||
get() = _toastLiveData
|
||||
|
||||
private val _optionsLiveData = MutableLiveData<List<RouletteOption>>(listOf())
|
||||
@@ -95,7 +99,8 @@ class RouletteSettingsViewModel(private val repository: RouletteRepository) : Ba
|
||||
if (validationOptions()) {
|
||||
for (option in options) {
|
||||
if (option.title.trim().isEmpty()) {
|
||||
_toastLiveData.value = "옵션은 빈칸을 할 수 없습니다."
|
||||
_toastLiveData.value =
|
||||
StringResource(R.string.msg_roulette_config_option_title_required)
|
||||
_isLoading.value = false
|
||||
return
|
||||
}
|
||||
@@ -127,19 +132,22 @@ class RouletteSettingsViewModel(private val repository: RouletteRepository) : Ba
|
||||
var totalPercentage = 0f
|
||||
for (option in options) {
|
||||
if (option.title.trim().isEmpty()) {
|
||||
_toastLiveData.value = "옵션은 빈칸을 할 수 없습니다."
|
||||
_toastLiveData.value =
|
||||
StringResource(R.string.msg_roulette_config_option_title_required)
|
||||
_isLoading.value = false
|
||||
return false
|
||||
}
|
||||
|
||||
if (option.percentage.isBlank()) {
|
||||
_toastLiveData.value = "옵션의 확률은 빈칸일 수 없습니다."
|
||||
_toastLiveData.value =
|
||||
StringResource(R.string.msg_roulette_config_option_percentage_required)
|
||||
_isLoading.value = false
|
||||
return false
|
||||
}
|
||||
|
||||
if (option.percentage.toFloat() <= 0f) {
|
||||
_toastLiveData.value = "옵션의 확률은 0%보다 커야합니다."
|
||||
_toastLiveData.value =
|
||||
StringResource(R.string.msg_roulette_config_option_percentage_min)
|
||||
_isLoading.value = false
|
||||
return false
|
||||
}
|
||||
@@ -148,7 +156,7 @@ class RouletteSettingsViewModel(private val repository: RouletteRepository) : Ba
|
||||
}
|
||||
|
||||
if (totalPercentage > 100.1f || totalPercentage <= 99.99f) {
|
||||
_toastLiveData.value = "확률이 100%가 아닙니다"
|
||||
_toastLiveData.value = StringResource(R.string.msg_roulette_config_percentage_invalid)
|
||||
_isLoading.value = false
|
||||
return false
|
||||
}
|
||||
@@ -168,7 +176,7 @@ class RouletteSettingsViewModel(private val repository: RouletteRepository) : Ba
|
||||
selectedRoulette.can == can &&
|
||||
selectedRoulette.items == items
|
||||
) {
|
||||
_toastLiveData.value = "변동사항이 없습니다."
|
||||
_toastLiveData.value = StringResource(R.string.msg_roulette_config_no_changes)
|
||||
_isLoading.value = false
|
||||
return
|
||||
}
|
||||
@@ -180,20 +188,16 @@ class RouletteSettingsViewModel(private val repository: RouletteRepository) : Ba
|
||||
items = items
|
||||
)
|
||||
|
||||
val selectedRouletteTitle = when (_selectedRouletteLiveData.value!!) {
|
||||
SelectedRoulette.ROULETTE_1 -> "룰렛 1"
|
||||
SelectedRoulette.ROULETTE_2 -> "룰렛 2"
|
||||
SelectedRoulette.ROULETTE_3 -> "룰렛 3"
|
||||
}
|
||||
val rouletteNumber = _selectedRouletteLiveData.value!!.ordinal + 1
|
||||
|
||||
val successMessage = if (availableActive) {
|
||||
if (isActive) {
|
||||
"${selectedRouletteTitle}을 활성화 했습니다."
|
||||
StringResource(R.string.msg_roulette_config_activate_success, rouletteNumber)
|
||||
} else {
|
||||
"${selectedRouletteTitle}을 비활성화 했습니다."
|
||||
StringResource(R.string.msg_roulette_config_deactivate_success, rouletteNumber)
|
||||
}
|
||||
} else {
|
||||
"${selectedRouletteTitle}을 변경했습니다."
|
||||
StringResource(R.string.msg_roulette_config_update_success, rouletteNumber)
|
||||
}
|
||||
|
||||
compositeDisposable.add(
|
||||
@@ -211,10 +215,10 @@ class RouletteSettingsViewModel(private val repository: RouletteRepository) : Ba
|
||||
onSuccess(it.data)
|
||||
} else {
|
||||
if (it.message != null) {
|
||||
_toastLiveData.postValue(it.message)
|
||||
_toastLiveData.postValue(DynamicString(it.message))
|
||||
} else {
|
||||
_toastLiveData.postValue(
|
||||
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
|
||||
StringResource(R.string.common_error_unknown)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -222,7 +226,7 @@ class RouletteSettingsViewModel(private val repository: RouletteRepository) : Ba
|
||||
{
|
||||
_isLoading.value = false
|
||||
it.message?.let { message -> Logger.e(message) }
|
||||
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
|
||||
_toastLiveData.postValue(StringResource(R.string.common_error_unknown))
|
||||
}
|
||||
)
|
||||
)
|
||||
@@ -240,20 +244,22 @@ class RouletteSettingsViewModel(private val repository: RouletteRepository) : Ba
|
||||
items = items
|
||||
)
|
||||
|
||||
val selectedRouletteTitle = when (_selectedRouletteLiveData.value!!) {
|
||||
SelectedRoulette.ROULETTE_1 -> "룰렛 1"
|
||||
SelectedRoulette.ROULETTE_2 -> "룰렛 2"
|
||||
SelectedRoulette.ROULETTE_3 -> "룰렛 3"
|
||||
}
|
||||
val rouletteNumber = _selectedRouletteLiveData.value!!.ordinal + 1
|
||||
|
||||
val successMessage = if (availableActive) {
|
||||
if (isActive) {
|
||||
"${selectedRouletteTitle}로 설정하였습니다."
|
||||
StringResource(
|
||||
R.string.msg_roulette_config_create_activate_success,
|
||||
rouletteNumber
|
||||
)
|
||||
} else {
|
||||
"${selectedRouletteTitle}을 설정했습니다."
|
||||
StringResource(
|
||||
R.string.msg_roulette_config_create_deactivate_success,
|
||||
rouletteNumber
|
||||
)
|
||||
}
|
||||
} else {
|
||||
"${selectedRouletteTitle}을 생성했습니다."
|
||||
StringResource(R.string.msg_roulette_config_create_success, rouletteNumber)
|
||||
}
|
||||
|
||||
compositeDisposable.add(
|
||||
@@ -271,10 +277,10 @@ class RouletteSettingsViewModel(private val repository: RouletteRepository) : Ba
|
||||
onSuccess(it.data)
|
||||
} else {
|
||||
if (it.message != null) {
|
||||
_toastLiveData.postValue(it.message)
|
||||
_toastLiveData.postValue(DynamicString(it.message))
|
||||
} else {
|
||||
_toastLiveData.postValue(
|
||||
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
|
||||
StringResource(R.string.common_error_unknown)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -282,7 +288,7 @@ class RouletteSettingsViewModel(private val repository: RouletteRepository) : Ba
|
||||
{
|
||||
_isLoading.value = false
|
||||
it.message?.let { message -> Logger.e(message) }
|
||||
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
|
||||
_toastLiveData.postValue(StringResource(R.string.common_error_unknown))
|
||||
}
|
||||
)
|
||||
)
|
||||
@@ -307,10 +313,10 @@ class RouletteSettingsViewModel(private val repository: RouletteRepository) : Ba
|
||||
selectRoulette(SelectedRoulette.ROULETTE_1)
|
||||
} else {
|
||||
if (it.message != null) {
|
||||
_toastLiveData.postValue(it.message)
|
||||
_toastLiveData.postValue(DynamicString(it.message))
|
||||
} else {
|
||||
_toastLiveData.postValue(
|
||||
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
|
||||
StringResource(R.string.common_error_unknown)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -319,7 +325,7 @@ class RouletteSettingsViewModel(private val repository: RouletteRepository) : Ba
|
||||
{
|
||||
_isLoading.value = false
|
||||
it.message?.let { message -> Logger.e(message) }
|
||||
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
|
||||
_toastLiveData.postValue(StringResource(R.string.common_error_unknown))
|
||||
}
|
||||
)
|
||||
)
|
||||
@@ -334,12 +340,14 @@ class RouletteSettingsViewModel(private val repository: RouletteRepository) : Ba
|
||||
selectedRoulette == SelectedRoulette.ROULETTE_3
|
||||
)
|
||||
) {
|
||||
_toastLiveData.value = "룰렛 1을 먼저 설정하세요"
|
||||
_toastLiveData.value =
|
||||
StringResource(R.string.msg_roulette_config_first_required)
|
||||
return
|
||||
}
|
||||
|
||||
if (rouletteList.size == 1 && selectedRoulette == SelectedRoulette.ROULETTE_3) {
|
||||
_toastLiveData.value = "룰렛 1과 룰렛 2를 먼저 설정하세요"
|
||||
_toastLiveData.value =
|
||||
StringResource(R.string.msg_roulette_config_first_second_required)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user