diff --git a/app/src/main/java/kr/co/vividnext/sodalive/search/SearchActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/search/SearchActivity.kt index d6369b24..9cb31b79 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/search/SearchActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/search/SearchActivity.kt @@ -18,6 +18,7 @@ import com.google.android.material.tabs.TabLayout 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.detail.AudioContentDetailActivity import kr.co.vividnext.sodalive.audio_content.series.detail.SeriesDetailActivity import kr.co.vividnext.sodalive.base.BaseActivity @@ -319,7 +320,12 @@ class SearchActivity : BaseActivity(ActivitySearchBinding private fun setupTabs() { val tabs = binding.tabs - val tabTitles = listOf("통합", "채널", "콘텐츠", "시리즈") + val tabTitles = listOf( + getString(R.string.screen_search_tab_unified), + getString(R.string.screen_search_tab_creator), + getString(R.string.screen_search_tab_content), + getString(R.string.screen_search_tab_series) + ) for (title in tabTitles) { tabs.addTab(tabs.newTab().setText(title)) } @@ -375,7 +381,10 @@ class SearchActivity : BaseActivity(ActivitySearchBinding ) viewModel.toastLiveData.observe(this) { - it?.let { Toast.makeText(this@SearchActivity, it, Toast.LENGTH_LONG).show() } + val text = it?.message ?: it?.resId?.let { resId -> getString(resId) } + if (!text.isNullOrBlank()) { + Toast.makeText(this@SearchActivity, text, Toast.LENGTH_LONG).show() + } } viewModel.isLoading.observe(this) { diff --git a/app/src/main/java/kr/co/vividnext/sodalive/search/SearchViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/search/SearchViewModel.kt index 781516d4..52e66cdf 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/search/SearchViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/search/SearchViewModel.kt @@ -1,10 +1,12 @@ package kr.co.vividnext.sodalive.search +import androidx.annotation.StringRes import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData 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 @@ -16,7 +18,7 @@ class SearchViewModel( companion object { fun fromOrdinal(ordinal: Int): SearchPageTab? { - return SearchPageTab.values().getOrNull(ordinal) + return entries.getOrNull(ordinal) } } } @@ -27,8 +29,8 @@ class SearchViewModel( val currentTabLiveData: LiveData get() = _currentTabLiveData - private val _toastLiveData = MutableLiveData() - val toastLiveData: LiveData + private val _toastLiveData = MutableLiveData() + val toastLiveData: LiveData get() = _toastLiveData private var _isLoading = MutableLiveData(false) @@ -91,11 +93,10 @@ class SearchViewModel( if (it.success && it.data != null) { _searchUnifiedLiveData.value = it.data!! } else { - if (it.message != null) { - _toastLiveData.value = it.message + _toastLiveData.value = if (it.message != null) { + SearchToastMessage(message = it.message) } else { - _toastLiveData - .value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + SearchToastMessage(resId = R.string.screen_search_error_unknown) } } }, @@ -103,7 +104,9 @@ class SearchViewModel( _isLoading.value = false it.message?.let { message -> Logger.e(message) } _toastLiveData - .value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + .value = SearchToastMessage( + resId = R.string.screen_search_error_unknown + ) } ) ) @@ -135,11 +138,10 @@ class SearchViewModel( isSearchCreatorLast = true } } else { - if (it.message != null) { - _toastLiveData.value = it.message + _toastLiveData.value = if (it.message != null) { + SearchToastMessage(message = it.message) } else { - _toastLiveData - .value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + SearchToastMessage(resId = R.string.screen_search_error_unknown) } } }, @@ -147,7 +149,9 @@ class SearchViewModel( _isLoading.value = false it.message?.let { message -> Logger.e(message) } _toastLiveData - .value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + .value = SearchToastMessage( + resId = R.string.screen_search_error_unknown + ) } ) ) @@ -181,11 +185,10 @@ class SearchViewModel( isSearchContentLast = true } } else { - if (it.message != null) { - _toastLiveData.value = it.message + _toastLiveData.value = if (it.message != null) { + SearchToastMessage(message = it.message) } else { - _toastLiveData - .value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + SearchToastMessage(resId = R.string.screen_search_error_unknown) } } }, @@ -193,7 +196,9 @@ class SearchViewModel( _isLoading.value = false it.message?.let { message -> Logger.e(message) } _toastLiveData - .value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + .value = SearchToastMessage( + resId = R.string.screen_search_error_unknown + ) } ) ) @@ -227,11 +232,10 @@ class SearchViewModel( isSearchSeriesLast = true } } else { - if (it.message != null) { - _toastLiveData.value = it.message + _toastLiveData.value = if (it.message != null) { + SearchToastMessage(message = it.message) } else { - _toastLiveData - .value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + SearchToastMessage(resId = R.string.screen_search_error_unknown) } } }, @@ -239,7 +243,9 @@ class SearchViewModel( _isLoading.value = false it.message?.let { message -> Logger.e(message) } _toastLiveData - .value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + .value = SearchToastMessage( + resId = R.string.screen_search_error_unknown + ) } ) ) @@ -248,3 +254,8 @@ class SearchViewModel( } } } + +data class SearchToastMessage( + @StringRes val resId: Int? = null, + val message: String? = null +) diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml index bf6b0a73..a4629ccd 100644 --- a/app/src/main/res/layout/activity_search.xml +++ b/app/src/main/res/layout/activity_search.xml @@ -43,7 +43,7 @@ android:background="@null" android:fontFamily="@font/gmarket_sans_medium" android:gravity="center_vertical" - android:hint="검색" + android:hint="@string/screen_search_hint" android:importantForAutofill="no" android:inputType="textWebEditText" android:paddingHorizontal="54.67dp" @@ -92,7 +92,7 @@ android:layout_height="wrap_content" android:layout_marginHorizontal="13.3dp" android:fontFamily="@font/gmarket_sans_bold" - android:text="채널" + android:text="@string/screen_search_creator_title" android:textColor="@color/color_eeeeee" android:textSize="16sp" /> @@ -113,7 +113,7 @@ android:fontFamily="@font/gmarket_sans_medium" android:gravity="center" android:paddingVertical="10dp" - android:text="더보기 >" + android:text="@string/screen_search_more" android:textColor="@color/color_777777" android:textSize="13.3sp" /> @@ -123,7 +123,7 @@ android:layout_height="wrap_content" android:layout_marginHorizontal="13.3dp" android:fontFamily="@font/gmarket_sans_bold" - android:text="콘텐츠" + android:text="@string/screen_search_content_title" android:textColor="@color/color_eeeeee" android:textSize="16sp" /> @@ -144,7 +144,7 @@ android:fontFamily="@font/gmarket_sans_medium" android:gravity="center" android:paddingVertical="10dp" - android:text="더보기 >" + android:text="@string/screen_search_more" android:textColor="@color/color_777777" android:textSize="13.3sp" /> @@ -154,7 +154,7 @@ android:layout_height="wrap_content" android:layout_marginHorizontal="13.3dp" android:fontFamily="@font/gmarket_sans_bold" - android:text="시리즈" + android:text="@string/screen_search_series_title" android:textColor="@color/color_eeeeee" android:textSize="16sp" /> @@ -175,7 +175,7 @@ android:fontFamily="@font/gmarket_sans_medium" android:gravity="center" android:paddingVertical="10dp" - android:text="더보기 >" + android:text="@string/screen_search_more" android:textColor="@color/color_777777" android:textSize="13.3sp" /> @@ -212,7 +212,7 @@ android:layout_marginVertical="40dp" android:fontFamily="@font/gmarket_sans_medium" android:gravity="center" - android:text="검색 결과가 없습니다." + android:text="@string/screen_search_no_result" android:textColor="@color/white" android:textSize="18.3sp" android:visibility="gone" /> diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index b363858c..2c2b925e 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -154,4 +154,15 @@ Register coupon Available after identity verification. An unknown error occurred. Please try again. + Search + All + Channels + Contents + Series + See more > + Channels + Contents + Series + No results found. + An unknown error occurred. Please try again. diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 80a0aab1..ed64d550 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -154,4 +154,15 @@ クーポン登録 本人認証後に利用できます。 不明なエラーが発生しました。もう一度お試しください。 + 検索 + 総合 + チャンネル + コンテンツ + シリーズ + もっと見る > + チャンネル + コンテンツ + シリーズ + 検索結果がありません。 + 不明なエラーが発生しました。もう一度お試しください。 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 01945eec..bd0b3938 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -153,4 +153,15 @@ 쿠폰등록 본인인증 후 사용가능합니다. 알 수 없는 오류가 발생했습니다. 다시 시도해 주세요. + 검색 + 통합 + 채널 + 콘텐츠 + 시리즈 + 더보기 > + 채널 + 콘텐츠 + 시리즈 + 검색 결과가 없습니다. + 알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.