From 61fa6d5f742831bb93c6e6585882fc78553d6efd Mon Sep 17 00:00:00 2001 From: klaus Date: Mon, 1 Dec 2025 18:44:52 +0900 Subject: [PATCH] =?UTF-8?q?VoiceMessageWriteFragment=20=EB=AC=B8=EC=9E=90?= =?UTF-8?q?=EC=97=B4=20=EB=A6=AC=EC=86=8C=EC=8A=A4=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../voice/VoiceMessageWriteFragment.kt | 15 ++++++++++--- .../voice/VoiceMessageWriteViewModel.kt | 22 +++++++++++++------ .../layout/fragment_voice_message_write.xml | 12 +++++----- app/src/main/res/values-en/strings.xml | 5 +++++ app/src/main/res/values-ja/strings.xml | 5 +++++ app/src/main/res/values/strings.xml | 5 +++++ 6 files changed, 48 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/message/voice/VoiceMessageWriteFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/message/voice/VoiceMessageWriteFragment.kt index 8315c71e..393d970f 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/message/voice/VoiceMessageWriteFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/message/voice/VoiceMessageWriteFragment.kt @@ -96,7 +96,7 @@ class VoiceMessageWriteFragment( dismiss() } }) - .setDeniedMessage("오디오 녹음 권한을 거부하시면 음성 메시지를 이용하실 수 없습니다.") + .setDeniedMessage(getString(R.string.screen_voice_message_write_permission_denied)) .setPermissions(Manifest.permission.RECORD_AUDIO) .check() } @@ -173,7 +173,7 @@ class VoiceMessageWriteFragment( if (viewModel.recipientId <= 0) { Toast.makeText( requireContext(), - "받는 사람을 선택해 주세요.", + R.string.screen_message_write_toast_select_recipient, Toast.LENGTH_LONG ).show() @@ -246,7 +246,16 @@ class VoiceMessageWriteFragment( private fun bindData() { viewModel.toastLiveData.observe(viewLifecycleOwner) { - it?.let { Toast.makeText(requireActivity(), it, Toast.LENGTH_LONG).show() } + it?.let { toast -> + val message = toast.message + val text = if (message != null) { + message + } else { + toast.resId?.let { resId -> getString(resId) } + } + + text?.let { Toast.makeText(requireActivity(), it, Toast.LENGTH_LONG).show() } + } } viewModel.isLoading.observe(this) { diff --git a/app/src/main/java/kr/co/vividnext/sodalive/message/voice/VoiceMessageWriteViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/message/voice/VoiceMessageWriteViewModel.kt index 47a2346b..1bb8e5a2 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/message/voice/VoiceMessageWriteViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/message/voice/VoiceMessageWriteViewModel.kt @@ -6,8 +6,10 @@ import com.google.gson.Gson import com.orhanobut.logger.Logger 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.common.SharedPreferenceManager +import kr.co.vividnext.sodalive.common.ToastMessage import kr.co.vividnext.sodalive.message.MessageRepository import kr.co.vividnext.sodalive.message.SendVoiceMessageRequest import okhttp3.MediaType.Companion.toMediaType @@ -19,8 +21,8 @@ import java.io.File class VoiceMessageWriteViewModel(private val repository: MessageRepository) : BaseViewModel() { var recipientId: Long = 0 - private val _toastLiveData = MutableLiveData() - val toastLiveData: LiveData + private val _toastLiveData = MutableLiveData() + val toastLiveData: LiveData get() = _toastLiveData private var _isLoading = MutableLiveData(false) @@ -29,7 +31,9 @@ class VoiceMessageWriteViewModel(private val repository: MessageRepository) : Ba fun write(file: File, onSuccess: () -> Unit) { if (recipientId <= 0) { - _toastLiveData.postValue("받는 사람을 선택해 주세요.") + _toastLiveData.postValue( + ToastMessage(resId = R.string.screen_message_write_toast_select_recipient) + ) return } @@ -54,21 +58,25 @@ class VoiceMessageWriteViewModel(private val repository: MessageRepository) : Ba { _isLoading.value = false if (it.success) { - _toastLiveData.postValue("메시지 전송이 완료되었습니다.") + _toastLiveData.postValue( + ToastMessage(resId = R.string.screen_message_write_toast_send_success) + ) onSuccess() } else { if (it.message != null) { - _toastLiveData.postValue(it.message) + _toastLiveData.postValue(ToastMessage(message = it.message)) } else { _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + ToastMessage(resId = R.string.common_error_unknown) ) } } }, { it.message?.let { message -> Logger.e(message) } - _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + _toastLiveData.postValue( + ToastMessage(resId = R.string.common_error_unknown) + ) _isLoading.postValue(false) } ) diff --git a/app/src/main/res/layout/fragment_voice_message_write.xml b/app/src/main/res/layout/fragment_voice_message_write.xml index 04a595b8..cce65ceb 100644 --- a/app/src/main/res/layout/fragment_voice_message_write.xml +++ b/app/src/main/res/layout/fragment_voice_message_write.xml @@ -16,7 +16,7 @@ android:fontFamily="@font/gmarket_sans_bold" android:paddingHorizontal="26.7dp" android:paddingTop="26.7dp" - android:text="음성메시지" + android:text="@string/screen_voice_message_write_title" android:textColor="@color/white" android:textSize="18.3sp" app:layout_constraintStart_toStartOf="parent" @@ -66,7 +66,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_medium" - android:text="TO." + android:text="@string/screen_voice_message_write_recipient_prefix" android:textColor="@color/color_eeeeee" android:textSize="13.3sp" /> @@ -76,7 +76,7 @@ android:layout_height="wrap_content" android:layout_marginTop="10dp" android:fontFamily="@font/gmarket_sans_light" - android:text="받는 사람" + android:text="@string/screen_voice_message_write_recipient_placeholder" android:textColor="@color/color_bbbbbb" android:textSize="16.7sp" /> @@ -160,7 +160,7 @@ android:layout_marginStart="60dp" android:layout_toEndOf="@+id/iv_record_play" android:fontFamily="@font/gmarket_sans_medium" - android:text="삭제" + android:text="@string/screen_message_detail_action_delete" android:textColor="@color/color_bbbbbb" android:textSize="15.3sp" /> @@ -184,7 +184,7 @@ android:background="@drawable/bg_round_corner_10_13181b_3bb9f1" android:fontFamily="@font/gmarket_sans_bold" android:gravity="center" - android:text="다시 녹음" + android:text="@string/screen_voice_message_write_retry" android:textColor="@color/color_3bb9f1" android:textSize="18.3sp" /> @@ -197,7 +197,7 @@ android:background="@drawable/bg_round_corner_10_3bb9f1" android:fontFamily="@font/gmarket_sans_bold" android:gravity="center" - android:text="메시지 보내기" + android:text="@string/screen_message_write_button_send" android:textColor="@color/white" android:textSize="18.3sp" /> diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 6ab5ab2c..dae4095a 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -279,6 +279,11 @@ Please select a recipient. Please enter a message. Message sent. + Voice message + To. + Recipient + Record again + Audio recording permission is required to use voice messages. Loading live rooms… Cancel reservation Enter a reason for cancellation. diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 1f97f42a..eab22305 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -279,6 +279,11 @@ 受信者を選択してください。 メッセージを入力してください。 メッセージを送信しました。 + ボイスメッセージ + 宛先 + 受信者 + 録音をやり直す + 音声メッセージを利用するには録音権限が必要です。 ライブを読み込み中です。 予約キャンセル キャンセル理由を入力してください。 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 74b32ee8..b95ac0a2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -278,6 +278,11 @@ 받는 사람을 선택해 주세요. 메시지를 입력하세요. 메시지 전송이 완료되었습니다. + 음성메시지 + TO. + 받는 사람 + 다시 녹음 + 오디오 녹음 권한을 거부하시면 음성 메시지를 이용하실 수 없습니다. 라이브를 불러오고 있습니다. 예약취소 취소사유를 입력하세요.