ChatRoom 문자열 리소스화
This commit is contained in:
@@ -76,7 +76,7 @@ class ChatBackgroundPickerDialogFragment : DialogFragment() {
|
||||
|
||||
private fun setupUi() {
|
||||
binding.ivClose.setOnClickListener { dismiss() }
|
||||
binding.tvTitle.text = "배경 사진 선택"
|
||||
binding.tvTitle.setText(R.string.chat_background_picker_title)
|
||||
|
||||
binding.rvGrid.layoutManager = GridLayoutManager(requireContext(), 3)
|
||||
adapter = BgAdapter { item ->
|
||||
|
||||
@@ -583,7 +583,8 @@ class ChatMessageAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
||||
// 접근성: 다국어 대응
|
||||
val ctx = itemView.context
|
||||
val messageWord = ctx.getString(R.string.a11y_message_word)
|
||||
val spokenMain = if (isImageMsg) "이미지" else binding.tvMessage.text
|
||||
val imageWord = ctx.getString(R.string.a11y_image)
|
||||
val spokenMain = if (isImageMsg) imageWord else binding.tvMessage.text
|
||||
itemView.contentDescription = buildString {
|
||||
if (!isGrouped && !binding.tvName.text.isNullOrEmpty()) {
|
||||
append(binding.tvName.text)
|
||||
|
||||
@@ -104,8 +104,11 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
||||
binding.ivBackgroundProfile.setImageResource(R.drawable.ic_placeholder_profile)
|
||||
// 배경은 서버 응답 수신 시 적용 (기본은 플레이스홀더 유지)
|
||||
// 배지는 기본 Clone으로 둔다가 실제 값으로 갱신 (디자인 기본 배경도 clone)
|
||||
binding.tvCharacterTypeBadge.text = "Clone"
|
||||
val badge = getString(R.string.chat_character_type_clone)
|
||||
binding.tvCharacterTypeBadge.text = badge
|
||||
binding.tvCharacterTypeBadge.setBackgroundResource(R.drawable.bg_character_status_clone)
|
||||
binding.ivProfile.contentDescription =
|
||||
getString(R.string.chat_profile_image_content_description, badge)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,14 +133,15 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
||||
|
||||
// 타입 배지 텍스트 및 배경
|
||||
val (badgeText, badgeBg) = when (info.characterType) {
|
||||
CharacterType.CLONE -> "Clone" to R.drawable.bg_character_status_clone
|
||||
CharacterType.CHARACTER -> "Character" to R.drawable.bg_character_status_character
|
||||
CharacterType.CLONE -> getString(R.string.chat_character_type_clone) to R.drawable.bg_character_status_clone
|
||||
CharacterType.CHARACTER -> getString(R.string.chat_character_type_character) to R.drawable.bg_character_status_character
|
||||
}
|
||||
binding.tvCharacterTypeBadge.text = badgeText
|
||||
binding.tvCharacterTypeBadge.setBackgroundResource(badgeBg)
|
||||
|
||||
// 접근성
|
||||
binding.ivProfile.contentDescription = "$badgeText 프로필 이미지"
|
||||
binding.ivProfile.contentDescription =
|
||||
getString(R.string.chat_profile_image_content_description, badgeText)
|
||||
|
||||
// 5.4: 캐릭터 타입에 맞춰 안내 메시지 텍스트 갱신
|
||||
updateNoticeText()
|
||||
@@ -384,7 +388,7 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
||||
// 실패: 타이핑 인디케이터 제거 및 FAILED로 업데이트
|
||||
chatAdapter.hideTypingIndicator()
|
||||
updateUserMessageStatus(localId, MessageStatus.FAILED)
|
||||
showToast(error.message ?: "메시지 전송에 실패했습니다.")
|
||||
showToast(error.message ?: getString(R.string.chat_send_failed))
|
||||
})
|
||||
compositeDisposable.add(disposable)
|
||||
}
|
||||
@@ -445,7 +449,7 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
||||
chatAdapter.hideTypingIndicator()
|
||||
|
||||
val now = System.currentTimeMillis()
|
||||
val replyText = "안녕하세요! \"$userContent\"에 대한 답변입니다."
|
||||
val replyText = getString(R.string.chat_mock_ai_reply, userContent)
|
||||
val aiMsg = ChatMessage(
|
||||
messageId = now,
|
||||
message = replyText,
|
||||
@@ -473,7 +477,7 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
||||
SharedPreferenceManager.can = newCan
|
||||
binding.tvCanBadge.text = newCan.moneyFormat()
|
||||
}, { err ->
|
||||
showToast(err.message ?: "결제에 실패했습니다.")
|
||||
showToast(err.message ?: getString(R.string.chat_quota_purchase_failed))
|
||||
})
|
||||
)
|
||||
}
|
||||
@@ -665,7 +669,7 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
||||
}, { error ->
|
||||
isLoading = false
|
||||
// 오프라인/실패 시: 로컬 데이터가 이미 표시되어 있으면 그대로 유지
|
||||
showToast(error.message ?: "채팅방 데이터를 불러오지 못했습니다.")
|
||||
showToast(error.message ?: getString(R.string.chat_room_load_failed))
|
||||
})
|
||||
compositeDisposable.add(networkDisposable)
|
||||
}
|
||||
@@ -776,7 +780,7 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
||||
)
|
||||
}, { error ->
|
||||
isLoading = false
|
||||
showToast(error.message ?: "이전 메시지를 불러오지 못했습니다.")
|
||||
showToast(error.message ?: getString(R.string.chat_previous_messages_load_failed))
|
||||
})
|
||||
|
||||
compositeDisposable.add(disposable)
|
||||
@@ -793,15 +797,15 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
||||
if (message.mine || !isLock) return
|
||||
|
||||
val priceText = message.price?.toString() ?: "0"
|
||||
val title = "잠금된 메시지"
|
||||
val desc = "이 메시지를 ${priceText}캔으로 잠금해제 하시겠습니까?"
|
||||
val title = getString(R.string.chat_locked_message_title)
|
||||
val desc = getString(R.string.chat_locked_message_desc, priceText)
|
||||
|
||||
SodaDialog(
|
||||
activity = this,
|
||||
layoutInflater = this.layoutInflater,
|
||||
title = title,
|
||||
desc = desc,
|
||||
confirmButtonTitle = "잠금해제",
|
||||
confirmButtonTitle = getString(R.string.chat_locked_message_confirm),
|
||||
confirmButtonClick = {
|
||||
val token = "Bearer ${SharedPreferenceManager.token}"
|
||||
val disposable = chatRepository.purchaseMessage(
|
||||
@@ -820,11 +824,11 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
||||
chatAdapter.setItems(items)
|
||||
}
|
||||
}, { error ->
|
||||
showToast(error.message ?: "구매에 실패했습니다.")
|
||||
showToast(error.message ?: getString(R.string.chat_purchase_message_failed))
|
||||
})
|
||||
compositeDisposable.add(disposable)
|
||||
},
|
||||
cancelButtonTitle = "취소",
|
||||
cancelButtonTitle = getString(R.string.cancel),
|
||||
cancelButtonClick = { /* no-op */ }
|
||||
).show(resources.displayMetrics.widthPixels)
|
||||
}
|
||||
@@ -903,19 +907,22 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
||||
}
|
||||
|
||||
fun onResetChatRequested() {
|
||||
val title = "대화 초기화"
|
||||
val desc = "지금까지의 대화가 모두 초기화 되고 새롭게 대화를 시작합니다."
|
||||
val title = getString(R.string.chat_reset_title)
|
||||
val desc = getString(R.string.chat_reset_desc)
|
||||
SodaDialog(
|
||||
activity = this,
|
||||
layoutInflater = this.layoutInflater,
|
||||
title = title,
|
||||
desc = desc,
|
||||
confirmButtonTitle = "30캔으로 초기화",
|
||||
confirmButtonTitle = getString(
|
||||
R.string.chat_reset_confirm,
|
||||
getString(R.string.chat_reset_can_price)
|
||||
),
|
||||
confirmButtonClick = {
|
||||
val loadingDialog = LoadingDialog(this, layoutInflater)
|
||||
loadingDialog.show(
|
||||
screenWidth,
|
||||
"대화 초기화 중..."
|
||||
getString(R.string.chat_reset_loading)
|
||||
)
|
||||
|
||||
val token = "Bearer ${SharedPreferenceManager.token}"
|
||||
@@ -933,11 +940,11 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
||||
startActivity(intent)
|
||||
finish()
|
||||
}, { error ->
|
||||
showToast(error.message ?: "대화 초기화에 실패했어요.")
|
||||
showToast(error.message ?: getString(R.string.chat_reset_failed))
|
||||
})
|
||||
compositeDisposable.add(disposable)
|
||||
},
|
||||
cancelButtonTitle = "취소",
|
||||
cancelButtonTitle = getString(R.string.cancel),
|
||||
cancelButtonClick = { /* no-op */ }
|
||||
).show(resources.displayMetrics.widthPixels)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user