검색 화면 문자열 리소스화

This commit is contained in:
2025-12-01 13:15:44 +09:00
parent bca527eca0
commit 492077ddb2
6 changed files with 86 additions and 33 deletions

View File

@@ -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>(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>(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) {

View File

@@ -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<SearchPageTab>
get() = _currentTabLiveData
private val _toastLiveData = MutableLiveData<String?>()
val toastLiveData: LiveData<String?>
private val _toastLiveData = MutableLiveData<SearchToastMessage?>()
val toastLiveData: LiveData<SearchToastMessage?>
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
)

View File

@@ -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" />
</LinearLayout>
@@ -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" />

View File

@@ -154,4 +154,15 @@
<string name="screen_my_coupon_register">Register coupon</string>
<string name="screen_my_auth_required">Available after identity verification.</string>
<string name="screen_my_error_unknown">An unknown error occurred. Please try again.</string>
<string name="screen_search_hint">Search</string>
<string name="screen_search_tab_unified">All</string>
<string name="screen_search_tab_creator">Channels</string>
<string name="screen_search_tab_content">Contents</string>
<string name="screen_search_tab_series">Series</string>
<string name="screen_search_more">See more &gt;</string>
<string name="screen_search_creator_title">Channels</string>
<string name="screen_search_content_title">Contents</string>
<string name="screen_search_series_title">Series</string>
<string name="screen_search_no_result">No results found.</string>
<string name="screen_search_error_unknown">An unknown error occurred. Please try again.</string>
</resources>

View File

@@ -154,4 +154,15 @@
<string name="screen_my_coupon_register">クーポン登録</string>
<string name="screen_my_auth_required">本人認証後に利用できます。</string>
<string name="screen_my_error_unknown">不明なエラーが発生しました。もう一度お試しください。</string>
<string name="screen_search_hint">検索</string>
<string name="screen_search_tab_unified">総合</string>
<string name="screen_search_tab_creator">チャンネル</string>
<string name="screen_search_tab_content">コンテンツ</string>
<string name="screen_search_tab_series">シリーズ</string>
<string name="screen_search_more">もっと見る &gt;</string>
<string name="screen_search_creator_title">チャンネル</string>
<string name="screen_search_content_title">コンテンツ</string>
<string name="screen_search_series_title">シリーズ</string>
<string name="screen_search_no_result">検索結果がありません。</string>
<string name="screen_search_error_unknown">不明なエラーが発生しました。もう一度お試しください。</string>
</resources>

View File

@@ -153,4 +153,15 @@
<string name="screen_my_coupon_register">쿠폰등록</string>
<string name="screen_my_auth_required">본인인증 후 사용가능합니다.</string>
<string name="screen_my_error_unknown">알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.</string>
<string name="screen_search_hint">검색</string>
<string name="screen_search_tab_unified">통합</string>
<string name="screen_search_tab_creator">채널</string>
<string name="screen_search_tab_content">콘텐츠</string>
<string name="screen_search_tab_series">시리즈</string>
<string name="screen_search_more">더보기 &gt;</string>
<string name="screen_search_creator_title">채널</string>
<string name="screen_search_content_title">콘텐츠</string>
<string name="screen_search_series_title">시리즈</string>
<string name="screen_search_no_result">검색 결과가 없습니다.</string>
<string name="screen_search_error_unknown">알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.</string>
</resources>