Original 작품 상세 문자열 리소스화
This commit is contained in:
@@ -65,11 +65,4 @@ class OriginalWorkViewModel(
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
fun refresh() {
|
||||
page = 0
|
||||
isLast = false
|
||||
_items.value = emptyList()
|
||||
loadMore()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,8 +33,13 @@ class OriginalWorkDetailActivity : BaseActivity<ActivityOriginalWorkDetailBindin
|
||||
|
||||
val originalId = intent.getLongExtra(EXTRA_ORIGINAL_ID, -1)
|
||||
if (originalId <= 0) {
|
||||
Toast.makeText(applicationContext, "잘못된 요청입니다.", Toast.LENGTH_LONG).show()
|
||||
Toast.makeText(
|
||||
applicationContext,
|
||||
getString(R.string.original_detail_error_invalid_request),
|
||||
Toast.LENGTH_LONG
|
||||
).show()
|
||||
finish()
|
||||
return
|
||||
}
|
||||
bind()
|
||||
|
||||
@@ -62,8 +67,12 @@ class OriginalWorkDetailActivity : BaseActivity<ActivityOriginalWorkDetailBindin
|
||||
|
||||
private fun setupTabs() {
|
||||
val tabs = binding.tabs
|
||||
tabs.addTab(tabs.newTab().setText("캐릭터").setTag("character"))
|
||||
tabs.addTab(tabs.newTab().setText("작품정보").setTag("info"))
|
||||
tabs.addTab(
|
||||
tabs.newTab().setText(R.string.screen_original_detail_tab_character).setTag("character")
|
||||
)
|
||||
tabs.addTab(
|
||||
tabs.newTab().setText(R.string.screen_original_detail_tab_info).setTag("info")
|
||||
)
|
||||
|
||||
tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
|
||||
override fun onTabSelected(tab: TabLayout.Tab) {
|
||||
@@ -101,7 +110,13 @@ class OriginalWorkDetailActivity : BaseActivity<ActivityOriginalWorkDetailBindin
|
||||
|
||||
private fun bind() {
|
||||
viewModel.toast.observe(this) {
|
||||
it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() }
|
||||
it?.let { uiText ->
|
||||
Toast.makeText(
|
||||
applicationContext,
|
||||
uiText.asString(this),
|
||||
Toast.LENGTH_LONG
|
||||
).show()
|
||||
}
|
||||
}
|
||||
|
||||
viewModel.isLoading.observe(this) {
|
||||
|
||||
@@ -4,11 +4,12 @@ import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.base.BaseViewModel
|
||||
import kr.co.vividnext.sodalive.chat.character.Character
|
||||
import kr.co.vividnext.sodalive.chat.original.OriginalWorkDetailResponse
|
||||
import kr.co.vividnext.sodalive.chat.original.OriginalWorkRepository
|
||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||
import kr.co.vividnext.sodalive.common.UiText
|
||||
|
||||
class OriginalWorkDetailViewModel(
|
||||
private val repository: OriginalWorkRepository
|
||||
@@ -17,8 +18,8 @@ class OriginalWorkDetailViewModel(
|
||||
private val _isLoading = MutableLiveData(false)
|
||||
val isLoading: LiveData<Boolean> get() = _isLoading
|
||||
|
||||
private val _toast = MutableLiveData<String?>(null)
|
||||
val toast: LiveData<String?> get() = _toast
|
||||
private val _toast = MutableLiveData<UiText?>(null)
|
||||
val toast: LiveData<UiText?> get() = _toast
|
||||
|
||||
private val _detail = MutableLiveData<OriginalWorkDetailResponse?>(null)
|
||||
val detail: LiveData<OriginalWorkDetailResponse?> get() = _detail
|
||||
@@ -41,12 +42,14 @@ class OriginalWorkDetailViewModel(
|
||||
detailResponse = data
|
||||
_detail.value = detailResponse
|
||||
} else {
|
||||
_toast.value = response.message ?: "알 수 없는 오류가 발생했습니다."
|
||||
_toast.value = response.message?.let { UiText.DynamicString(it) }
|
||||
?: UiText.StringResource(R.string.common_error_unknown)
|
||||
}
|
||||
_isLoading.value = false
|
||||
}, { e ->
|
||||
_isLoading.value = false
|
||||
_toast.value = e.message ?: "알 수 없는 오류가 발생했습니다."
|
||||
_toast.value = e.message?.let { UiText.DynamicString(it) }
|
||||
?: UiText.StringResource(R.string.common_error_unknown)
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import androidx.core.view.isVisible
|
||||
import kr.co.vividnext.sodalive.base.BaseFragment
|
||||
import kr.co.vividnext.sodalive.chat.original.OriginalWorkDetailResponse
|
||||
import kr.co.vividnext.sodalive.databinding.FragmentOriginalWorkInfoBinding
|
||||
import kr.co.vividnext.sodalive.R
|
||||
|
||||
class OriginalWorkInfoFragment : BaseFragment<FragmentOriginalWorkInfoBinding>(
|
||||
FragmentOriginalWorkInfoBinding::inflate
|
||||
@@ -106,7 +107,10 @@ class OriginalWorkInfoFragment : BaseFragment<FragmentOriginalWorkInfoBinding>(
|
||||
binding.tvOriginalWork.setBackgroundResource(outValue.resourceId)
|
||||
}
|
||||
// 접근성 설명
|
||||
binding.tvOriginalWork.contentDescription = "원작 $originalWork 링크 열기"
|
||||
binding.tvOriginalWork.contentDescription = getString(
|
||||
R.string.original_detail_link_content_description,
|
||||
originalWork
|
||||
)
|
||||
|
||||
binding.tvOriginalWork.setOnClickListener {
|
||||
openUrl(originalLink)
|
||||
@@ -156,7 +160,7 @@ class OriginalWorkInfoFragment : BaseFragment<FragmentOriginalWorkInfoBinding>(
|
||||
if (!host.isNullOrBlank()) host else url
|
||||
} catch (_: Exception) {
|
||||
// 파싱 실패 시 간단한 레이블 제공
|
||||
"링크 ${index + 1}"
|
||||
getString(R.string.original_detail_link_fallback, index + 1)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user