검색 화면 문자열 리소스화
This commit is contained in:
@@ -18,6 +18,7 @@ import com.google.android.material.tabs.TabLayout
|
|||||||
import com.jakewharton.rxbinding4.widget.textChanges
|
import com.jakewharton.rxbinding4.widget.textChanges
|
||||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
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.detail.AudioContentDetailActivity
|
||||||
import kr.co.vividnext.sodalive.audio_content.series.detail.SeriesDetailActivity
|
import kr.co.vividnext.sodalive.audio_content.series.detail.SeriesDetailActivity
|
||||||
import kr.co.vividnext.sodalive.base.BaseActivity
|
import kr.co.vividnext.sodalive.base.BaseActivity
|
||||||
@@ -319,7 +320,12 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>(ActivitySearchBinding
|
|||||||
|
|
||||||
private fun setupTabs() {
|
private fun setupTabs() {
|
||||||
val tabs = binding.tabs
|
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) {
|
for (title in tabTitles) {
|
||||||
tabs.addTab(tabs.newTab().setText(title))
|
tabs.addTab(tabs.newTab().setText(title))
|
||||||
}
|
}
|
||||||
@@ -375,7 +381,10 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>(ActivitySearchBinding
|
|||||||
)
|
)
|
||||||
|
|
||||||
viewModel.toastLiveData.observe(this) {
|
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) {
|
viewModel.isLoading.observe(this) {
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
package kr.co.vividnext.sodalive.search
|
package kr.co.vividnext.sodalive.search
|
||||||
|
|
||||||
|
import androidx.annotation.StringRes
|
||||||
import androidx.lifecycle.LiveData
|
import androidx.lifecycle.LiveData
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import com.orhanobut.logger.Logger
|
import com.orhanobut.logger.Logger
|
||||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||||
|
import kr.co.vividnext.sodalive.R
|
||||||
import kr.co.vividnext.sodalive.base.BaseViewModel
|
import kr.co.vividnext.sodalive.base.BaseViewModel
|
||||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||||
|
|
||||||
@@ -16,7 +18,7 @@ class SearchViewModel(
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun fromOrdinal(ordinal: Int): SearchPageTab? {
|
fun fromOrdinal(ordinal: Int): SearchPageTab? {
|
||||||
return SearchPageTab.values().getOrNull(ordinal)
|
return entries.getOrNull(ordinal)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -27,8 +29,8 @@ class SearchViewModel(
|
|||||||
val currentTabLiveData: LiveData<SearchPageTab>
|
val currentTabLiveData: LiveData<SearchPageTab>
|
||||||
get() = _currentTabLiveData
|
get() = _currentTabLiveData
|
||||||
|
|
||||||
private val _toastLiveData = MutableLiveData<String?>()
|
private val _toastLiveData = MutableLiveData<SearchToastMessage?>()
|
||||||
val toastLiveData: LiveData<String?>
|
val toastLiveData: LiveData<SearchToastMessage?>
|
||||||
get() = _toastLiveData
|
get() = _toastLiveData
|
||||||
|
|
||||||
private var _isLoading = MutableLiveData(false)
|
private var _isLoading = MutableLiveData(false)
|
||||||
@@ -91,11 +93,10 @@ class SearchViewModel(
|
|||||||
if (it.success && it.data != null) {
|
if (it.success && it.data != null) {
|
||||||
_searchUnifiedLiveData.value = it.data!!
|
_searchUnifiedLiveData.value = it.data!!
|
||||||
} else {
|
} else {
|
||||||
if (it.message != null) {
|
_toastLiveData.value = if (it.message != null) {
|
||||||
_toastLiveData.value = it.message
|
SearchToastMessage(message = it.message)
|
||||||
} else {
|
} else {
|
||||||
_toastLiveData
|
SearchToastMessage(resId = R.string.screen_search_error_unknown)
|
||||||
.value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -103,7 +104,9 @@ class SearchViewModel(
|
|||||||
_isLoading.value = false
|
_isLoading.value = false
|
||||||
it.message?.let { message -> Logger.e(message) }
|
it.message?.let { message -> Logger.e(message) }
|
||||||
_toastLiveData
|
_toastLiveData
|
||||||
.value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
|
.value = SearchToastMessage(
|
||||||
|
resId = R.string.screen_search_error_unknown
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -135,11 +138,10 @@ class SearchViewModel(
|
|||||||
isSearchCreatorLast = true
|
isSearchCreatorLast = true
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (it.message != null) {
|
_toastLiveData.value = if (it.message != null) {
|
||||||
_toastLiveData.value = it.message
|
SearchToastMessage(message = it.message)
|
||||||
} else {
|
} else {
|
||||||
_toastLiveData
|
SearchToastMessage(resId = R.string.screen_search_error_unknown)
|
||||||
.value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -147,7 +149,9 @@ class SearchViewModel(
|
|||||||
_isLoading.value = false
|
_isLoading.value = false
|
||||||
it.message?.let { message -> Logger.e(message) }
|
it.message?.let { message -> Logger.e(message) }
|
||||||
_toastLiveData
|
_toastLiveData
|
||||||
.value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
|
.value = SearchToastMessage(
|
||||||
|
resId = R.string.screen_search_error_unknown
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -181,11 +185,10 @@ class SearchViewModel(
|
|||||||
isSearchContentLast = true
|
isSearchContentLast = true
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (it.message != null) {
|
_toastLiveData.value = if (it.message != null) {
|
||||||
_toastLiveData.value = it.message
|
SearchToastMessage(message = it.message)
|
||||||
} else {
|
} else {
|
||||||
_toastLiveData
|
SearchToastMessage(resId = R.string.screen_search_error_unknown)
|
||||||
.value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -193,7 +196,9 @@ class SearchViewModel(
|
|||||||
_isLoading.value = false
|
_isLoading.value = false
|
||||||
it.message?.let { message -> Logger.e(message) }
|
it.message?.let { message -> Logger.e(message) }
|
||||||
_toastLiveData
|
_toastLiveData
|
||||||
.value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
|
.value = SearchToastMessage(
|
||||||
|
resId = R.string.screen_search_error_unknown
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -227,11 +232,10 @@ class SearchViewModel(
|
|||||||
isSearchSeriesLast = true
|
isSearchSeriesLast = true
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (it.message != null) {
|
_toastLiveData.value = if (it.message != null) {
|
||||||
_toastLiveData.value = it.message
|
SearchToastMessage(message = it.message)
|
||||||
} else {
|
} else {
|
||||||
_toastLiveData
|
SearchToastMessage(resId = R.string.screen_search_error_unknown)
|
||||||
.value = "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -239,7 +243,9 @@ class SearchViewModel(
|
|||||||
_isLoading.value = false
|
_isLoading.value = false
|
||||||
it.message?.let { message -> Logger.e(message) }
|
it.message?.let { message -> Logger.e(message) }
|
||||||
_toastLiveData
|
_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:background="@null"
|
||||||
android:fontFamily="@font/gmarket_sans_medium"
|
android:fontFamily="@font/gmarket_sans_medium"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:hint="검색"
|
android:hint="@string/screen_search_hint"
|
||||||
android:importantForAutofill="no"
|
android:importantForAutofill="no"
|
||||||
android:inputType="textWebEditText"
|
android:inputType="textWebEditText"
|
||||||
android:paddingHorizontal="54.67dp"
|
android:paddingHorizontal="54.67dp"
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginHorizontal="13.3dp"
|
android:layout_marginHorizontal="13.3dp"
|
||||||
android:fontFamily="@font/gmarket_sans_bold"
|
android:fontFamily="@font/gmarket_sans_bold"
|
||||||
android:text="채널"
|
android:text="@string/screen_search_creator_title"
|
||||||
android:textColor="@color/color_eeeeee"
|
android:textColor="@color/color_eeeeee"
|
||||||
android:textSize="16sp" />
|
android:textSize="16sp" />
|
||||||
|
|
||||||
@@ -113,7 +113,7 @@
|
|||||||
android:fontFamily="@font/gmarket_sans_medium"
|
android:fontFamily="@font/gmarket_sans_medium"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:paddingVertical="10dp"
|
android:paddingVertical="10dp"
|
||||||
android:text="더보기 >"
|
android:text="@string/screen_search_more"
|
||||||
android:textColor="@color/color_777777"
|
android:textColor="@color/color_777777"
|
||||||
android:textSize="13.3sp" />
|
android:textSize="13.3sp" />
|
||||||
|
|
||||||
@@ -123,7 +123,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginHorizontal="13.3dp"
|
android:layout_marginHorizontal="13.3dp"
|
||||||
android:fontFamily="@font/gmarket_sans_bold"
|
android:fontFamily="@font/gmarket_sans_bold"
|
||||||
android:text="콘텐츠"
|
android:text="@string/screen_search_content_title"
|
||||||
android:textColor="@color/color_eeeeee"
|
android:textColor="@color/color_eeeeee"
|
||||||
android:textSize="16sp" />
|
android:textSize="16sp" />
|
||||||
|
|
||||||
@@ -144,7 +144,7 @@
|
|||||||
android:fontFamily="@font/gmarket_sans_medium"
|
android:fontFamily="@font/gmarket_sans_medium"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:paddingVertical="10dp"
|
android:paddingVertical="10dp"
|
||||||
android:text="더보기 >"
|
android:text="@string/screen_search_more"
|
||||||
android:textColor="@color/color_777777"
|
android:textColor="@color/color_777777"
|
||||||
android:textSize="13.3sp" />
|
android:textSize="13.3sp" />
|
||||||
|
|
||||||
@@ -154,7 +154,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginHorizontal="13.3dp"
|
android:layout_marginHorizontal="13.3dp"
|
||||||
android:fontFamily="@font/gmarket_sans_bold"
|
android:fontFamily="@font/gmarket_sans_bold"
|
||||||
android:text="시리즈"
|
android:text="@string/screen_search_series_title"
|
||||||
android:textColor="@color/color_eeeeee"
|
android:textColor="@color/color_eeeeee"
|
||||||
android:textSize="16sp" />
|
android:textSize="16sp" />
|
||||||
|
|
||||||
@@ -175,7 +175,7 @@
|
|||||||
android:fontFamily="@font/gmarket_sans_medium"
|
android:fontFamily="@font/gmarket_sans_medium"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:paddingVertical="10dp"
|
android:paddingVertical="10dp"
|
||||||
android:text="더보기 >"
|
android:text="@string/screen_search_more"
|
||||||
android:textColor="@color/color_777777"
|
android:textColor="@color/color_777777"
|
||||||
android:textSize="13.3sp" />
|
android:textSize="13.3sp" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@@ -212,7 +212,7 @@
|
|||||||
android:layout_marginVertical="40dp"
|
android:layout_marginVertical="40dp"
|
||||||
android:fontFamily="@font/gmarket_sans_medium"
|
android:fontFamily="@font/gmarket_sans_medium"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:text="검색 결과가 없습니다."
|
android:text="@string/screen_search_no_result"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
android:textSize="18.3sp"
|
android:textSize="18.3sp"
|
||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|||||||
@@ -154,4 +154,15 @@
|
|||||||
<string name="screen_my_coupon_register">Register coupon</string>
|
<string name="screen_my_coupon_register">Register coupon</string>
|
||||||
<string name="screen_my_auth_required">Available after identity verification.</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_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>
|
</resources>
|
||||||
|
|||||||
@@ -154,4 +154,15 @@
|
|||||||
<string name="screen_my_coupon_register">クーポン登録</string>
|
<string name="screen_my_coupon_register">クーポン登録</string>
|
||||||
<string name="screen_my_auth_required">本人認証後に利用できます。</string>
|
<string name="screen_my_auth_required">本人認証後に利用できます。</string>
|
||||||
<string name="screen_my_error_unknown">不明なエラーが発生しました。もう一度お試しください。</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>
|
</resources>
|
||||||
|
|||||||
@@ -153,4 +153,15 @@
|
|||||||
<string name="screen_my_coupon_register">쿠폰등록</string>
|
<string name="screen_my_coupon_register">쿠폰등록</string>
|
||||||
<string name="screen_my_auth_required">본인인증 후 사용가능합니다.</string>
|
<string name="screen_my_auth_required">본인인증 후 사용가능합니다.</string>
|
||||||
<string name="screen_my_error_unknown">알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.</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>
|
</resources>
|
||||||
|
|||||||
Reference in New Issue
Block a user