TextMessageDetailActivity 문자열 리소스화

This commit is contained in:
2025-12-01 18:11:41 +09:00
parent 7e4202db1b
commit 2e528f8c7d
7 changed files with 72 additions and 23 deletions

View File

@@ -12,8 +12,8 @@ import java.util.TimeZone
fun String.convertDateFormat( fun String.convertDateFormat(
from: String, from: String,
to: String, to: String,
inputLocale: Locale = Locale.KOREAN, inputLocale: Locale = Locale.getDefault(),
outputLocale: Locale = Locale.KOREAN outputLocale: Locale = Locale.getDefault()
): String { ): String {
val fromDateFormat = SimpleDateFormat(from, inputLocale) val fromDateFormat = SimpleDateFormat(from, inputLocale)
val toDateFormat = SimpleDateFormat(to, outputLocale) val toDateFormat = SimpleDateFormat(to, outputLocale)

View File

@@ -53,21 +53,24 @@ class TextMessageDetailActivity : BaseActivity<ActivityTextMessageDetailBinding>
when { when {
messageBox!! == MessageBox.RECEIVE.name -> { messageBox!! == MessageBox.RECEIVE.name -> {
binding.toolbar.tvBack.text = "받은 메시지 상세" binding.toolbar.tvBack.text =
getString(R.string.screen_message_detail_title_receive)
binding.tvKeep.visibility = View.VISIBLE binding.tvKeep.visibility = View.VISIBLE
binding.tvReply.visibility = View.VISIBLE binding.tvReply.visibility = View.VISIBLE
binding.tvDelete.visibility = View.VISIBLE binding.tvDelete.visibility = View.VISIBLE
} }
messageBox == MessageBox.KEEP.name -> { messageBox == MessageBox.KEEP.name -> {
binding.toolbar.tvBack.text = "저장한 메시지 상세" binding.toolbar.tvBack.text =
getString(R.string.screen_message_detail_title_keep)
binding.tvKeep.visibility = View.GONE binding.tvKeep.visibility = View.GONE
binding.tvReply.visibility = View.GONE binding.tvReply.visibility = View.GONE
binding.tvDelete.visibility = View.VISIBLE binding.tvDelete.visibility = View.VISIBLE
} }
else -> { else -> {
binding.toolbar.tvBack.text = "보낸 메시지 상세" binding.toolbar.tvBack.text =
getString(R.string.screen_message_detail_title_sent)
binding.tvKeep.visibility = View.GONE binding.tvKeep.visibility = View.GONE
binding.tvReply.visibility = View.GONE binding.tvReply.visibility = View.GONE
binding.tvDelete.visibility = View.VISIBLE binding.tvDelete.visibility = View.VISIBLE
@@ -86,7 +89,7 @@ class TextMessageDetailActivity : BaseActivity<ActivityTextMessageDetailBinding>
if (messageItem!!.isKept) { if (messageItem!!.isKept) {
Toast.makeText( Toast.makeText(
applicationContext, applicationContext,
"이미 보관된 메시지 입니다.", R.string.screen_message_detail_keep_already,
Toast.LENGTH_LONG Toast.LENGTH_LONG
).show() ).show()
return@setOnClickListener return@setOnClickListener
@@ -98,7 +101,7 @@ class TextMessageDetailActivity : BaseActivity<ActivityTextMessageDetailBinding>
viewModel.deleteMessage { viewModel.deleteMessage {
Toast.makeText( Toast.makeText(
applicationContext, applicationContext,
"메시지가 삭제되었습니다.", R.string.screen_message_detail_delete_success,
Toast.LENGTH_LONG Toast.LENGTH_LONG
).show() ).show()
@@ -132,13 +135,23 @@ class TextMessageDetailActivity : BaseActivity<ActivityTextMessageDetailBinding>
binding.tvMessage.text = messageItem?.textMessage binding.tvMessage.text = messageItem?.textMessage
binding.tvDate.text = messageItem?.date!!.convertDateFormat( binding.tvDate.text = messageItem?.date!!.convertDateFormat(
from = "yyyy-MM-dd hh:mm:ss", from = "yyyy-MM-dd hh:mm:ss",
to = "yyyy년 MM월 dd일 E요일 HH:mm" to = getString(R.string.screen_message_detail_date_format)
) )
} }
private fun bindData() { private fun bindData() {
viewModel.toastLiveData.observe(this) { viewModel.toastLiveData.observe(this) {
it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() } it?.let { toast ->
val message = toast.message
val text = message ?: toast.resId?.let { resId -> getString(resId) }
text?.let { textMessage ->
Toast.makeText(
applicationContext,
textMessage,
Toast.LENGTH_LONG
).show()
}
}
} }
viewModel.isLoading.observe(this) { viewModel.isLoading.observe(this) {

View File

@@ -5,15 +5,17 @@ import androidx.lifecycle.MutableLiveData
import com.orhanobut.logger.Logger 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.R
import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.base.BaseViewModel
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.common.ToastMessage
import kr.co.vividnext.sodalive.message.MessageRepository import kr.co.vividnext.sodalive.message.MessageRepository
class TextMessageDetailViewModel(private val repository: MessageRepository) : BaseViewModel() { class TextMessageDetailViewModel(private val repository: MessageRepository) : BaseViewModel() {
var messageId: Long = 0 var messageId: Long = 0
private val _toastLiveData = MutableLiveData<String?>() private val _toastLiveData = MutableLiveData<ToastMessage?>()
val toastLiveData: LiveData<String?> val toastLiveData: LiveData<ToastMessage?>
get() = _toastLiveData get() = _toastLiveData
private var _isLoading = MutableLiveData(false) private var _isLoading = MutableLiveData(false)
@@ -22,7 +24,7 @@ class TextMessageDetailViewModel(private val repository: MessageRepository) : Ba
fun keepTextMessage() { fun keepTextMessage() {
if (messageId <= 0) { if (messageId <= 0) {
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") _toastLiveData.postValue(ToastMessage(resId = R.string.common_error_unknown))
return return
} }
@@ -39,21 +41,23 @@ class TextMessageDetailViewModel(private val repository: MessageRepository) : Ba
_isLoading.value = false _isLoading.value = false
if (it.success) { if (it.success) {
_toastLiveData.postValue( _toastLiveData.postValue(
"보관되었습니다." ToastMessage(resId = R.string.screen_message_detail_keep_success)
) )
} else { } else {
if (it.message != null) { if (it.message != null) {
_toastLiveData.postValue(it.message) _toastLiveData.postValue(ToastMessage(message = it.message))
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." ToastMessage(resId = R.string.common_error_unknown)
) )
} }
} }
}, },
{ {
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") _toastLiveData.postValue(
ToastMessage(resId = R.string.common_error_unknown)
)
_isLoading.value = false _isLoading.value = false
} }
) )
@@ -62,7 +66,7 @@ class TextMessageDetailViewModel(private val repository: MessageRepository) : Ba
fun deleteMessage(onSuccess: () -> Unit) { fun deleteMessage(onSuccess: () -> Unit) {
if (messageId <= 0) { if (messageId <= 0) {
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") _toastLiveData.postValue(ToastMessage(resId = R.string.common_error_unknown))
return return
} }
@@ -81,17 +85,19 @@ class TextMessageDetailViewModel(private val repository: MessageRepository) : Ba
onSuccess() onSuccess()
} else { } else {
if (it.message != null) { if (it.message != null) {
_toastLiveData.postValue(it.message) _toastLiveData.postValue(ToastMessage(message = it.message))
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." ToastMessage(resId = R.string.common_error_unknown)
) )
} }
} }
}, },
{ {
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") _toastLiveData.postValue(
ToastMessage(resId = R.string.common_error_unknown)
)
_isLoading.value = false _isLoading.value = false
} }
) )

View File

@@ -93,7 +93,7 @@
android:background="@drawable/bg_round_corner_6_7_3bb9f1" android:background="@drawable/bg_round_corner_6_7_3bb9f1"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center" android:gravity="center"
android:text="답장" android:text="@string/screen_message_detail_action_reply"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
@@ -106,7 +106,7 @@
android:background="@drawable/bg_round_corner_6_7_13181b" android:background="@drawable/bg_round_corner_6_7_13181b"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center" android:gravity="center"
android:text="보관" android:text="@string/screen_message_detail_action_keep"
android:textColor="@color/color_3bb9f1" android:textColor="@color/color_3bb9f1"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
@@ -118,7 +118,7 @@
android:background="@drawable/bg_round_corner_6_7_13181b" android:background="@drawable/bg_round_corner_6_7_13181b"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center" android:gravity="center"
android:text="삭제" android:text="@string/screen_message_detail_action_delete"
android:textColor="@color/color_3bb9f1" android:textColor="@color/color_3bb9f1"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
</LinearLayout> </LinearLayout>

View File

@@ -260,6 +260,16 @@
<string name="screen_message_empty">No messages.\nTry connecting with friends!</string> <string name="screen_message_empty">No messages.\nTry connecting with friends!</string>
<string name="screen_message_loading_text">Loading text messages…</string> <string name="screen_message_loading_text">Loading text messages…</string>
<string name="screen_message_loading_voice">Loading voice messages…</string> <string name="screen_message_loading_voice">Loading voice messages…</string>
<string name="screen_message_detail_title_receive">Received message</string>
<string name="screen_message_detail_title_keep">Saved message</string>
<string name="screen_message_detail_title_sent">Sent message</string>
<string name="screen_message_detail_action_reply">Reply</string>
<string name="screen_message_detail_action_keep">Save</string>
<string name="screen_message_detail_action_delete">Delete</string>
<string name="screen_message_detail_keep_success">Saved.</string>
<string name="screen_message_detail_keep_already">Already saved.</string>
<string name="screen_message_detail_delete_success">Message deleted.</string>
<string name="screen_message_detail_date_format">MMM d, yyyy (EEE) HH:mm</string>
<string name="screen_live_loading">Loading live rooms…</string> <string name="screen_live_loading">Loading live rooms…</string>
<string name="screen_live_cancel_title">Cancel reservation</string> <string name="screen_live_cancel_title">Cancel reservation</string>
<string name="screen_live_cancel_hint">Enter a reason for cancellation.</string> <string name="screen_live_cancel_hint">Enter a reason for cancellation.</string>

View File

@@ -260,6 +260,16 @@
<string name="screen_message_empty">メッセージがありません。\n友達と交流してみましょう</string> <string name="screen_message_empty">メッセージがありません。\n友達と交流してみましょう</string>
<string name="screen_message_loading_text">テキストメッセージを読み込み中です。</string> <string name="screen_message_loading_text">テキストメッセージを読み込み中です。</string>
<string name="screen_message_loading_voice">ボイスメッセージを読み込み中です。</string> <string name="screen_message_loading_voice">ボイスメッセージを読み込み中です。</string>
<string name="screen_message_detail_title_receive">受信メッセージ詳細</string>
<string name="screen_message_detail_title_keep">保存メッセージ詳細</string>
<string name="screen_message_detail_title_sent">送信メッセージ詳細</string>
<string name="screen_message_detail_action_reply">返信</string>
<string name="screen_message_detail_action_keep">保存</string>
<string name="screen_message_detail_action_delete">削除</string>
<string name="screen_message_detail_keep_success">保存しました。</string>
<string name="screen_message_detail_keep_already">既に保存されたメッセージです。</string>
<string name="screen_message_detail_delete_success">メッセージを削除しました。</string>
<string name="screen_message_detail_date_format">yyyy年 MM月 dd日 E曜日 HH:mm</string>
<string name="screen_live_loading">ライブを読み込み中です。</string> <string name="screen_live_loading">ライブを読み込み中です。</string>
<string name="screen_live_cancel_title">予約キャンセル</string> <string name="screen_live_cancel_title">予約キャンセル</string>
<string name="screen_live_cancel_hint">キャンセル理由を入力してください。</string> <string name="screen_live_cancel_hint">キャンセル理由を入力してください。</string>

View File

@@ -259,6 +259,16 @@
<string name="screen_message_empty">메시지가 없습니다.\n친구들과 소통해보세요!</string> <string name="screen_message_empty">메시지가 없습니다.\n친구들과 소통해보세요!</string>
<string name="screen_message_loading_text">문자 메시지를 불러오고 있습니다.</string> <string name="screen_message_loading_text">문자 메시지를 불러오고 있습니다.</string>
<string name="screen_message_loading_voice">음성 메시지를 불러오고 있습니다.</string> <string name="screen_message_loading_voice">음성 메시지를 불러오고 있습니다.</string>
<string name="screen_message_detail_title_receive">받은 메시지 상세</string>
<string name="screen_message_detail_title_keep">저장한 메시지 상세</string>
<string name="screen_message_detail_title_sent">보낸 메시지 상세</string>
<string name="screen_message_detail_action_reply">답장</string>
<string name="screen_message_detail_action_keep">보관</string>
<string name="screen_message_detail_action_delete">삭제</string>
<string name="screen_message_detail_keep_success">보관되었습니다.</string>
<string name="screen_message_detail_keep_already">이미 보관된 메시지 입니다.</string>
<string name="screen_message_detail_delete_success">메시지가 삭제되었습니다.</string>
<string name="screen_message_detail_date_format">yyyy년 MM월 dd일 E요일 HH:mm</string>
<string name="screen_live_loading">라이브를 불러오고 있습니다.</string> <string name="screen_live_loading">라이브를 불러오고 있습니다.</string>
<string name="screen_live_cancel_title">예약취소</string> <string name="screen_live_cancel_title">예약취소</string>
<string name="screen_live_cancel_hint">취소사유를 입력하세요.</string> <string name="screen_live_cancel_hint">취소사유를 입력하세요.</string>