검색 화면 문자열 리소스화
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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 ></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>
|
||||
|
||||
@@ -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">もっと見る ></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>
|
||||
|
||||
@@ -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">더보기 ></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>
|
||||
|
||||
Reference in New Issue
Block a user