From 7988b8c63e7ba1860a81f8a6c5e46c8516f016d1 Mon Sep 17 00:00:00 2001 From: klaus Date: Wed, 3 Dec 2025 15:54:47 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9E=AC=EC=83=9D=EB=AA=A9=EB=A1=9D=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=ED=99=94=EB=A9=B4=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 --- .../AudioContentPlaylistCreateActivity.kt | 32 +++++++++++++------ .../AudioContentPlaylistCreateViewModel.kt | 25 ++++++++++++--- .../PlaylistAddContentDialogFragment.kt | 8 +++-- ...activity_audio_content_playlist_create.xml | 17 +++++----- .../layout/fragment_playlist_add_content.xml | 6 ++-- app/src/main/res/values-en/strings.xml | 10 ++++++ app/src/main/res/values-ja/strings.xml | 10 ++++++ app/src/main/res/values/strings.xml | 10 ++++++ 8 files changed, 90 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/playlist/create/AudioContentPlaylistCreateActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/playlist/create/AudioContentPlaylistCreateActivity.kt index dbdc9a31..b12edad2 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/playlist/create/AudioContentPlaylistCreateActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/playlist/create/AudioContentPlaylistCreateActivity.kt @@ -1,6 +1,5 @@ package kr.co.vividnext.sodalive.audio_content.playlist.create -import android.annotation.SuppressLint import android.app.Service import android.graphics.Rect import android.os.Bundle @@ -11,6 +10,7 @@ import androidx.recyclerview.widget.RecyclerView import com.jakewharton.rxbinding4.widget.textChanges import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.schedulers.Schedulers +import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.audio_content.playlist.create.add_content.PlaylistAddContentDialogFragment import kr.co.vividnext.sodalive.audio_content.playlist.detail.AudioContentPlaylistContent import kr.co.vividnext.sodalive.base.BaseActivity @@ -70,7 +70,8 @@ class AudioContentPlaylistCreateActivity : BaseActivity 30) { - val truncated = it.take(30) + if (it.length > PLAYLIST_TITLE_MAX_LENGTH) { + val truncated = it.take(PLAYLIST_TITLE_MAX_LENGTH) binding.etTitle.setText(truncated) binding.etTitle.setSelection(truncated.length) setTitle(truncated) @@ -171,8 +172,8 @@ class AudioContentPlaylistCreateActivity : BaseActivity 40) { - val truncated = it.take(40) + if (it.length > PLAYLIST_DESC_MAX_LENGTH) { + val truncated = it.take(PLAYLIST_DESC_MAX_LENGTH) binding.etDesc.setText(truncated) binding.etDesc.setSelection(truncated.length) setDesc(truncated) @@ -183,15 +184,26 @@ class AudioContentPlaylistCreateActivity : BaseActivity Unit) { if (validate()) { + val unknownError = + SodaLiveApplicationHolder.get().getString(R.string.common_error_unknown) _isLoading.value = true val contentIdAndOrderList = contentList.mapIndexed { index, item -> PlaylistContentIdAndOrder(item.id, index + 1) @@ -66,7 +70,7 @@ class AudioContentPlaylistCreateViewModel( if (it.message != null) { _toastLiveData.value = it.message } else { - _toastLiveData.value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + _toastLiveData.value = unknownError } } }, @@ -75,7 +79,7 @@ class AudioContentPlaylistCreateViewModel( if (it.message != null) { _toastLiveData.value = it.message } else { - _toastLiveData.value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + _toastLiveData.value = unknownError } } ) @@ -84,16 +88,27 @@ class AudioContentPlaylistCreateViewModel( } private fun validate(): Boolean { - if (title.isBlank() || title.length < 3) { - _toastLiveData.value = "제목을 3자 이상 입력하세요" + if (title.isBlank() || title.length < MIN_TITLE_LENGTH) { + _toastLiveData.value = SodaLiveApplicationHolder.get().getString( + R.string.audio_content_playlist_create_title_min_length_error, + MIN_TITLE_LENGTH + ) return false } if (contentList.isEmpty()) { - _toastLiveData.value = "콘텐츠를 1개 이상 추가하세요" + _toastLiveData.value = SodaLiveApplicationHolder.get().getString( + R.string.audio_content_playlist_create_content_min_count_error, + MIN_CONTENT_COUNT + ) return false } return true } + + private companion object { + private const val MIN_TITLE_LENGTH = 3 + private const val MIN_CONTENT_COUNT = 1 + } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/playlist/create/add_content/PlaylistAddContentDialogFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/playlist/create/add_content/PlaylistAddContentDialogFragment.kt index 9728b1e6..92cd4ce7 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/playlist/create/add_content/PlaylistAddContentDialogFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/playlist/create/add_content/PlaylistAddContentDialogFragment.kt @@ -15,6 +15,7 @@ import androidx.recyclerview.widget.RecyclerView import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.audio_content.order.AudioContentOrderListViewModel import kr.co.vividnext.sodalive.audio_content.order.GetAudioContentOrderListItem import kr.co.vividnext.sodalive.audio_content.playlist.detail.AudioContentPlaylistContent @@ -148,7 +149,7 @@ class PlaylistAddContentDialogFragment( recyclerView.adapter = adapter } - @SuppressLint("SetTextI18n", "NotifyDataSetChanged") + @SuppressLint("NotifyDataSetChanged") private fun bindData() { viewModel.toastLiveData.observe(viewLifecycleOwner) { Toast.makeText(requireActivity(), it, Toast.LENGTH_LONG).show() @@ -175,7 +176,10 @@ class PlaylistAddContentDialogFragment( } viewModel.totalCount.observe(viewLifecycleOwner) { - binding.tvContentCount.text = "${it}개" + binding.tvContentCount.text = getString( + R.string.audio_content_playlist_total_count, + it + ) } } } diff --git a/app/src/main/res/layout/activity_audio_content_playlist_create.xml b/app/src/main/res/layout/activity_audio_content_playlist_create.xml index 1329006e..169d019d 100644 --- a/app/src/main/res/layout/activity_audio_content_playlist_create.xml +++ b/app/src/main/res/layout/activity_audio_content_playlist_create.xml @@ -27,7 +27,7 @@ android:gravity="center_vertical" android:minHeight="48dp" android:paddingHorizontal="13.3dp" - android:text="새 재생목록 만들기" + android:text="@string/audio_content_playlist_create_title" android:textColor="@color/color_eeeeee" android:textSize="18.3sp" app:drawableStartCompat="@drawable/ic_back" @@ -43,7 +43,7 @@ android:gravity="center" android:minHeight="48dp" android:paddingHorizontal="13.3dp" - android:text="저장" + android:text="@string/audio_content_playlist_create_save" android:textColor="@color/color_eeeeee" android:textSize="14.7sp" /> @@ -55,7 +55,7 @@ android:layout_marginStart="13.3dp" android:layout_marginTop="26.7dp" android:fontFamily="@font/gmarket_sans_bold" - android:text="재생목록 제목" + android:text="@string/audio_content_playlist_create_title_label" android:textColor="@color/color_eeeeee" android:textSize="16.7sp" app:layout_constraintStart_toStartOf="parent" @@ -67,7 +67,7 @@ android:layout_height="wrap_content" android:layout_marginEnd="13.3dp" android:fontFamily="@font/gmarket_sans_medium" - android:text="0/30" + android:text="@string/audio_content_playlist_create_title_length_initial" android:textColor="@color/color_777777" android:textSize="13.3sp" app:layout_constraintBottom_toBottomOf="@+id/tv_title" @@ -92,7 +92,8 @@ app:layout_constraintEnd_toEndOf="@+id/tv_title_length" app:layout_constraintStart_toStartOf="@+id/tv_title" app:layout_constraintTop_toBottomOf="@+id/tv_title" - tools:text="사랑하는게 어때서?" /> + tools:text="사랑하는게 어때서?" + tools:ignore="LabelFor" /> @@ -48,7 +48,7 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:fontFamily="@font/gmarket_sans_medium" - android:text="전체" + android:text="@string/audio_content_label_all" android:textColor="@color/white" android:textSize="14.7sp" /> diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 7164a416..f76ba069 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -865,6 +865,16 @@ Rented Sold Out + Create new playlist + Create new playlist + Save + Title + 0/30 + Description. + 0/40 + Add/Remove content + %1$d/%2$d + Enter at least %1$d characters for the title. + Add at least %1$d content item. %1$d items Total %1$d items No playlists yet. diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 1252d7f2..f04cfc86 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -865,6 +865,16 @@ レンタル中 売り切れ + 新しいプレイリストを作成 + 新しいプレイリストを作成 + 保存 + タイトル + 0/30 + 説明を入力してください。 + 0/40 + コンテンツを追加/削除 + %1$d/%2$d + タイトルを%1$d文字以上入力してください + コンテンツを%1$d件以上追加してください %1$d件 合計 %1$d件 プレイリストが空です。 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dcb99844..57f04004 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -864,6 +864,16 @@ 대여중 Sold Out + 새 재생목록 만들기 + 새 재생목록 만들기 + 저장 + 제목 + 0/30 + 설명을 입력해주세요. + 0/40 + 새로운 콘텐츠 추가/제거 + %1$d/%2$d + 제목을 %1$d자 이상 입력하세요 + 콘텐츠를 %1$d개 이상 추가하세요 %1$d개 총 %1$d개 재생목록이 비어있습니다.