설정·공지·이벤트 문자열 리소스화

This commit is contained in:
2025-12-01 14:35:55 +09:00
parent 981859de1f
commit eb0aa9473f
24 changed files with 340 additions and 126 deletions

View File

@@ -29,7 +29,7 @@ class ContentSettingsActivity : BaseActivity<ActivityContentSettingsBinding>(
} }
override fun setupView() { override fun setupView() {
binding.toolbar.tvBack.text = "콘텐츠 보기 설정" binding.toolbar.tvBack.text = getString(R.string.screen_content_settings_title)
binding.toolbar.tvBack.setOnClickListener { handleFinish() } binding.toolbar.tvBack.setOnClickListener { handleFinish() }
// 본인 인증 체크 // 본인 인증 체크

View File

@@ -9,6 +9,7 @@ import android.widget.Toast
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.media3.common.util.UnstableApi import androidx.media3.common.util.UnstableApi
import com.google.android.gms.oss.licenses.OssLicensesMenuActivity import com.google.android.gms.oss.licenses.OssLicensesMenuActivity
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.BuildConfig import kr.co.vividnext.sodalive.BuildConfig
import kr.co.vividnext.sodalive.audio_content.AudioContentPlayService import kr.co.vividnext.sodalive.audio_content.AudioContentPlayService
import kr.co.vividnext.sodalive.audio_content.player.AudioContentPlayerService import kr.co.vividnext.sodalive.audio_content.player.AudioContentPlayerService
@@ -33,11 +34,11 @@ class SettingsActivity : BaseActivity<ActivitySettingsBinding>(ActivitySettingsB
SodaDialog( SodaDialog(
activity = this, activity = this,
layoutInflater = layoutInflater, layoutInflater = layoutInflater,
title = "알림", title = getString(R.string.dialog_alert_title),
desc = "로그아웃 하시겠어요?", desc = getString(R.string.dialog_logout_message),
confirmButtonTitle = "확인", confirmButtonTitle = getString(R.string.confirm),
confirmButtonClick = { logout() }, confirmButtonClick = { logout() },
cancelButtonTitle = "취소", cancelButtonTitle = getString(R.string.cancel),
cancelButtonClick = {} cancelButtonClick = {}
) )
} }
@@ -46,11 +47,11 @@ class SettingsActivity : BaseActivity<ActivitySettingsBinding>(ActivitySettingsB
SodaDialog( SodaDialog(
activity = this, activity = this,
layoutInflater = layoutInflater, layoutInflater = layoutInflater,
title = "알림", title = getString(R.string.dialog_alert_title),
desc = "모든 기기에서 로그아웃 하시겠어요?", desc = getString(R.string.dialog_logout_all_message),
confirmButtonTitle = "확인", confirmButtonTitle = getString(R.string.confirm),
confirmButtonClick = { logoutAllDevice() }, confirmButtonClick = { logoutAllDevice() },
cancelButtonTitle = "취소", cancelButtonTitle = getString(R.string.cancel),
cancelButtonClick = {} cancelButtonClick = {}
) )
} }
@@ -68,7 +69,7 @@ class SettingsActivity : BaseActivity<ActivitySettingsBinding>(ActivitySettingsB
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
override fun setupView() { override fun setupView() {
binding.toolbar.tvBack.text = "설정" binding.toolbar.tvBack.text = getString(R.string.screen_settings_title)
binding.toolbar.tvBack.setOnClickListener { finish() } binding.toolbar.tvBack.setOnClickListener { finish() }
loadingDialog = LoadingDialog(this, layoutInflater) loadingDialog = LoadingDialog(this, layoutInflater)
@@ -112,10 +113,15 @@ class SettingsActivity : BaseActivity<ActivitySettingsBinding>(ActivitySettingsB
binding.rlOssLicense.setOnClickListener { binding.rlOssLicense.setOnClickListener {
startActivity(Intent(applicationContext, OssLicensesMenuActivity::class.java)) startActivity(Intent(applicationContext, OssLicensesMenuActivity::class.java))
OssLicensesMenuActivity.setActivityTitle("오픈소스 라이선스") OssLicensesMenuActivity.setActivityTitle(
getString(R.string.screen_settings_oss_license)
)
} }
binding.tvVersion.text = "ver ${BuildConfig.VERSION_NAME}" binding.tvVersion.text = getString(
R.string.screen_settings_version_format,
BuildConfig.VERSION_NAME
)
binding.tvLogOut.setOnClickListener { binding.tvLogOut.setOnClickListener {
logoutDialog.show(screenWidth) logoutDialog.show(screenWidth)
@@ -141,7 +147,10 @@ class SettingsActivity : BaseActivity<ActivitySettingsBinding>(ActivitySettingsB
} }
viewModel.toastLiveData.observe(this) { viewModel.toastLiveData.observe(this) {
it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() } val text = it?.message ?: it?.resId?.let { resId -> getString(resId) }
text?.let { message ->
Toast.makeText(applicationContext, message, Toast.LENGTH_LONG).show()
}
} }
} }

View File

@@ -5,8 +5,10 @@ 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.chat.talk.room.ChatRepository import kr.co.vividnext.sodalive.chat.talk.room.ChatRepository
import kr.co.vividnext.sodalive.common.ToastMessage
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.user.UserRepository import kr.co.vividnext.sodalive.user.UserRepository
@@ -14,8 +16,8 @@ class SettingsViewModel(
private val userRepository: UserRepository, private val userRepository: UserRepository,
private val chatRepository: ChatRepository private val chatRepository: ChatRepository
) : BaseViewModel() { ) : BaseViewModel() {
private val _toastLiveData = MutableLiveData<String?>() private val _toastLiveData = MutableLiveData<ToastMessage?>()
val toastLiveData: LiveData<String?> val toastLiveData: LiveData<ToastMessage?>
get() = _toastLiveData get() = _toastLiveData
private var _isLoading = MutableLiveData(false) private var _isLoading = MutableLiveData(false)
@@ -44,17 +46,19 @@ class SettingsViewModel(
.let { disposable -> compositeDisposable.add(disposable) } .let { disposable -> compositeDisposable.add(disposable) }
} else { } else {
if (it.message != null) { if (it.message != null) {
_toastLiveData.postValue(it.message) _toastLiveData.postValue(ToastMessage(message = it.message))
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." ToastMessage(resId = R.string.common_error_unknown)
) )
} }
} }
}, },
{ {
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") _toastLiveData.postValue(
ToastMessage(resId = R.string.common_error_unknown)
)
} }
) )
) )
@@ -80,17 +84,19 @@ class SettingsViewModel(
.let { disposable -> compositeDisposable.add(disposable) } .let { disposable -> compositeDisposable.add(disposable) }
} else { } else {
if (it.message != null) { if (it.message != null) {
_toastLiveData.postValue(it.message) _toastLiveData.postValue(ToastMessage(message = it.message))
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." ToastMessage(resId = R.string.common_error_unknown)
) )
} }
} }
}, },
{ {
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") _toastLiveData.postValue(
ToastMessage(resId = R.string.common_error_unknown)
)
} }
) )
) )

View File

@@ -9,6 +9,7 @@ import android.view.View
import android.widget.Toast import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.base.BaseActivity import kr.co.vividnext.sodalive.base.BaseActivity
import kr.co.vividnext.sodalive.common.Constants import kr.co.vividnext.sodalive.common.Constants
import kr.co.vividnext.sodalive.common.LoadingDialog import kr.co.vividnext.sodalive.common.LoadingDialog
@@ -27,14 +28,17 @@ class EventActivity : BaseActivity<ActivityEventBinding>(ActivityEventBinding::i
viewModel.isLoading.observe(this) { viewModel.isLoading.observe(this) {
if (it) { if (it) {
loadingDialog.show(screenWidth, "이벤트를 불러오고 있습니다.") loadingDialog.show(screenWidth, getString(R.string.screen_event_loading))
} else { } else {
loadingDialog.dismiss() loadingDialog.dismiss()
} }
} }
viewModel.toastLiveData.observe(this) { viewModel.toastLiveData.observe(this) {
it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() } val text = it?.message ?: it?.resId?.let { resId -> getString(resId) }
text?.let { message ->
Toast.makeText(applicationContext, message, Toast.LENGTH_LONG).show()
}
} }
viewModel.getEvents() viewModel.getEvents()
@@ -42,7 +46,7 @@ class EventActivity : BaseActivity<ActivityEventBinding>(ActivityEventBinding::i
@SuppressLint("NotifyDataSetChanged") @SuppressLint("NotifyDataSetChanged")
override fun setupView() { override fun setupView() {
binding.toolbar.tvBack.text = "이벤트" binding.toolbar.tvBack.text = getString(R.string.screen_event_title)
binding.toolbar.tvBack.setOnClickListener { finish() } binding.toolbar.tvBack.setOnClickListener { finish() }
loadingDialog = LoadingDialog(this, layoutInflater) loadingDialog = LoadingDialog(this, layoutInflater)

View File

@@ -7,6 +7,7 @@ import android.widget.FrameLayout
import android.widget.RelativeLayout import android.widget.RelativeLayout
import androidx.core.content.IntentCompat import androidx.core.content.IntentCompat
import coil.load import coil.load
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.base.BaseActivity import kr.co.vividnext.sodalive.base.BaseActivity
import kr.co.vividnext.sodalive.common.Constants import kr.co.vividnext.sodalive.common.Constants
import kr.co.vividnext.sodalive.databinding.ActivityEventDetailBinding import kr.co.vividnext.sodalive.databinding.ActivityEventDetailBinding
@@ -23,7 +24,7 @@ class EventDetailActivity : BaseActivity<ActivityEventDetailBinding>(
EventItem::class.java EventItem::class.java
)!! )!!
binding.toolbar.tvBack.text = "이벤트 상세" binding.toolbar.tvBack.text = getString(R.string.screen_event_detail_title)
binding.toolbar.tvBack.setOnClickListener { finish() } binding.toolbar.tvBack.setOnClickListener { finish() }
if (!event.link.isNullOrBlank()) { if (!event.link.isNullOrBlank()) {

View File

@@ -5,7 +5,9 @@ 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.ToastMessage
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
class EventViewModel(private val repository: EventRepository) : BaseViewModel() { class EventViewModel(private val repository: EventRepository) : BaseViewModel() {
@@ -13,8 +15,8 @@ class EventViewModel(private val repository: EventRepository) : BaseViewModel()
val eventLiveData: LiveData<List<EventItem>> val eventLiveData: LiveData<List<EventItem>>
get() = _eventLiveData get() = _eventLiveData
private val _toastLiveData = MutableLiveData<String?>() private val _toastLiveData = MutableLiveData<ToastMessage?>()
val toastLiveData: LiveData<String?> val toastLiveData: LiveData<ToastMessage?>
get() = _toastLiveData get() = _toastLiveData
private var _isLoading = MutableLiveData(false) private var _isLoading = MutableLiveData(false)
@@ -45,10 +47,12 @@ class EventViewModel(private val repository: EventRepository) : BaseViewModel()
page += 1 page += 1
} else { } else {
if (it.message != null) { if (it.message != null) {
_toastLiveData.postValue(it.message) _toastLiveData.postValue(
ToastMessage(message = it.message)
)
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." ToastMessage(resId = R.string.common_error_unknown)
) )
} }
} }
@@ -57,7 +61,9 @@ class EventViewModel(private val repository: EventRepository) : BaseViewModel()
{ {
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") _toastLiveData.postValue(
ToastMessage(resId = R.string.common_error_unknown)
)
} }
) )
) )

View File

@@ -8,6 +8,7 @@ import android.view.View
import android.widget.Toast import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.base.BaseActivity import kr.co.vividnext.sodalive.base.BaseActivity
import kr.co.vividnext.sodalive.common.Constants import kr.co.vividnext.sodalive.common.Constants
import kr.co.vividnext.sodalive.common.LoadingDialog import kr.co.vividnext.sodalive.common.LoadingDialog
@@ -26,14 +27,17 @@ class NoticeActivity : BaseActivity<ActivityNoticeBinding>(ActivityNoticeBinding
viewModel.isLoading.observe(this) { viewModel.isLoading.observe(this) {
if (it) { if (it) {
loadingDialog.show(screenWidth, "공지사항을 불러오고 있습니다.") loadingDialog.show(screenWidth, getString(R.string.screen_notice_loading))
} else { } else {
loadingDialog.dismiss() loadingDialog.dismiss()
} }
} }
viewModel.toastLiveData.observe(this) { viewModel.toastLiveData.observe(this) {
it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() } val text = it?.message ?: it?.resId?.let { resId -> getString(resId) }
text?.let { message ->
Toast.makeText(applicationContext, message, Toast.LENGTH_LONG).show()
}
} }
viewModel.getNotices() viewModel.getNotices()
@@ -41,7 +45,7 @@ class NoticeActivity : BaseActivity<ActivityNoticeBinding>(ActivityNoticeBinding
@SuppressLint("NotifyDataSetChanged") @SuppressLint("NotifyDataSetChanged")
override fun setupView() { override fun setupView() {
binding.toolbar.tvBack.text = "공지사항" binding.toolbar.tvBack.text = getString(R.string.screen_notice_title)
binding.toolbar.tvBack.setOnClickListener { finish() } binding.toolbar.tvBack.setOnClickListener { finish() }
loadingDialog = LoadingDialog(this, layoutInflater) loadingDialog = LoadingDialog(this, layoutInflater)

View File

@@ -4,6 +4,7 @@ import android.annotation.SuppressLint
import androidx.core.content.IntentCompat import androidx.core.content.IntentCompat
import androidx.webkit.WebSettingsCompat import androidx.webkit.WebSettingsCompat
import androidx.webkit.WebViewFeature import androidx.webkit.WebViewFeature
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.base.BaseActivity import kr.co.vividnext.sodalive.base.BaseActivity
import kr.co.vividnext.sodalive.common.Constants import kr.co.vividnext.sodalive.common.Constants
import kr.co.vividnext.sodalive.databinding.ActivityNoticeDetailBinding import kr.co.vividnext.sodalive.databinding.ActivityNoticeDetailBinding
@@ -28,7 +29,7 @@ class NoticeDetailActivity : BaseActivity<ActivityNoticeDetailBinding>(
NoticeItem::class.java NoticeItem::class.java
)!! )!!
binding.toolbar.tvBack.text = "공지사항 상세" binding.toolbar.tvBack.text = getString(R.string.screen_notice_detail_title)
binding.toolbar.tvBack.setOnClickListener { finish() } binding.toolbar.tvBack.setOnClickListener { finish() }
binding.tvTitle.text = notice.title binding.tvTitle.text = notice.title

View File

@@ -5,7 +5,9 @@ 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.ToastMessage
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
class NoticeViewModel(private val repository: NoticeRepository) : BaseViewModel() { class NoticeViewModel(private val repository: NoticeRepository) : BaseViewModel() {
@@ -13,8 +15,8 @@ class NoticeViewModel(private val repository: NoticeRepository) : BaseViewModel(
val noticeLiveData: LiveData<List<NoticeItem>> val noticeLiveData: LiveData<List<NoticeItem>>
get() = _noticeLiveData get() = _noticeLiveData
private val _toastLiveData = MutableLiveData<String?>() private val _toastLiveData = MutableLiveData<ToastMessage?>()
val toastLiveData: LiveData<String?> val toastLiveData: LiveData<ToastMessage?>
get() = _toastLiveData get() = _toastLiveData
private var _isLoading = MutableLiveData(false) private var _isLoading = MutableLiveData(false)
@@ -45,10 +47,12 @@ class NoticeViewModel(private val repository: NoticeRepository) : BaseViewModel(
page += 1 page += 1
} else { } else {
if (it.message != null) { if (it.message != null) {
_toastLiveData.postValue(it.message) _toastLiveData.postValue(
ToastMessage(message = it.message)
)
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." ToastMessage(resId = R.string.common_error_unknown)
) )
} }
} }
@@ -57,7 +61,9 @@ class NoticeViewModel(private val repository: NoticeRepository) : BaseViewModel(
{ {
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") _toastLiveData.postValue(
ToastMessage(resId = R.string.common_error_unknown)
)
} }
) )
) )

View File

@@ -23,7 +23,7 @@ class NotificationSettingsActivity : BaseActivity<ActivityNotificationSettingsBi
} }
override fun setupView() { override fun setupView() {
binding.toolbar.tvBack.text = "알림 설정" binding.toolbar.tvBack.text = getString(R.string.screen_notification_settings_title)
binding.toolbar.tvBack.setOnClickListener { finish() } binding.toolbar.tvBack.setOnClickListener { finish() }
loadingDialog = LoadingDialog(this, layoutInflater) loadingDialog = LoadingDialog(this, layoutInflater)
@@ -75,7 +75,10 @@ class NotificationSettingsActivity : BaseActivity<ActivityNotificationSettingsBi
} }
viewModel.toastLiveData.observe(this) { viewModel.toastLiveData.observe(this) {
it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() } val text = it?.message ?: it?.resId?.let { resId -> getString(resId) }
text?.let { message ->
Toast.makeText(applicationContext, message, Toast.LENGTH_LONG).show()
}
} }
} }
} }

View File

@@ -5,15 +5,17 @@ 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
import kr.co.vividnext.sodalive.common.ToastMessage
import kr.co.vividnext.sodalive.user.UserRepository import kr.co.vividnext.sodalive.user.UserRepository
class NotificationSettingsViewModel( class NotificationSettingsViewModel(
private val userRepository: UserRepository private val userRepository: UserRepository
) : BaseViewModel() { ) : BaseViewModel() {
private val _toastLiveData = MutableLiveData<String?>() private val _toastLiveData = MutableLiveData<ToastMessage?>()
val toastLiveData: LiveData<String?> val toastLiveData: LiveData<ToastMessage?>
get() = _toastLiveData get() = _toastLiveData
private var _isLoading = MutableLiveData(false) private var _isLoading = MutableLiveData(false)
@@ -52,10 +54,10 @@ class NotificationSettingsViewModel(
data.followingChannelLiveNotice ?: false data.followingChannelLiveNotice ?: false
} else { } else {
if (it.message != null) { if (it.message != null) {
_toastLiveData.postValue(it.message) _toastLiveData.postValue(ToastMessage(message = it.message))
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." ToastMessage(resId = R.string.common_error_unknown)
) )
} }
} }
@@ -64,7 +66,7 @@ class NotificationSettingsViewModel(
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue( _toastLiveData.postValue(
"다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." ToastMessage(resId = R.string.retry)
) )
} }
) )

View File

@@ -7,6 +7,7 @@ import android.widget.Toast
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.base.BaseActivity import kr.co.vividnext.sodalive.base.BaseActivity
import kr.co.vividnext.sodalive.common.LoadingDialog import kr.co.vividnext.sodalive.common.LoadingDialog
import kr.co.vividnext.sodalive.databinding.ActivitySignOutBinding import kr.co.vividnext.sodalive.databinding.ActivitySignOutBinding
@@ -28,7 +29,10 @@ class SignOutActivity : BaseActivity<ActivitySignOutBinding>(ActivitySignOutBind
private fun bindData() { private fun bindData() {
viewModel.toastLiveData.observe(this) { viewModel.toastLiveData.observe(this) {
it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() } val text = it?.message ?: it?.resId?.let { resId -> getString(resId) }
text?.let { message ->
Toast.makeText(applicationContext, message, Toast.LENGTH_LONG).show()
}
} }
viewModel.isLoading.observe(this) { viewModel.isLoading.observe(this) {
@@ -74,15 +78,16 @@ class SignOutActivity : BaseActivity<ActivitySignOutBinding>(ActivitySignOutBind
reasonButtons.add(binding.tvReason10) reasonButtons.add(binding.tvReason10)
loadingDialog = LoadingDialog(this, layoutInflater) loadingDialog = LoadingDialog(this, layoutInflater)
binding.toolbar.tvBack.text = "회원탈퇴" binding.toolbar.tvBack.text = getString(R.string.screen_sign_out_title)
binding.toolbar.tvBack.setOnClickListener { finish() } binding.toolbar.tvBack.setOnClickListener { finish() }
val etcLabel = getString(R.string.screen_sign_out_reason_etc)
for (reasonButton in reasonButtons) { for (reasonButton in reasonButtons) {
val reason = reasonButton.text.toString()
reasonButton.setOnClickListener { reasonButton.setOnClickListener {
checkboxSelectedFalse() checkboxSelectedFalse()
reasonButton.isSelected = true reasonButton.isSelected = true
viewModel.reason = if (reason == "기타") { val reason = reasonButton.text.toString()
viewModel.reason = if (reason == etcLabel) {
binding.etReasonEtc.text.toString() binding.etReasonEtc.text.toString()
} else { } else {
reasonButton.text.toString() reasonButton.text.toString()

View File

@@ -5,14 +5,16 @@ 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.ToastMessage
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.user.UserRepository import kr.co.vividnext.sodalive.user.UserRepository
class SignOutViewModel(private val repository: UserRepository) : BaseViewModel() { class SignOutViewModel(private val repository: UserRepository) : BaseViewModel() {
private val _toastLiveData = MutableLiveData<String?>() private val _toastLiveData = MutableLiveData<ToastMessage?>()
val toastLiveData: LiveData<String?> val toastLiveData: LiveData<ToastMessage?>
get() = _toastLiveData get() = _toastLiveData
private var _isLoading = MutableLiveData(false) private var _isLoading = MutableLiveData(false)
@@ -25,7 +27,9 @@ class SignOutViewModel(private val repository: UserRepository) : BaseViewModel()
fun signOut(onSuccess: () -> Unit) { fun signOut(onSuccess: () -> Unit) {
if (!_isLoading.value!!) { if (!_isLoading.value!!) {
if (reason.isBlank()) { if (reason.isBlank()) {
_toastLiveData.postValue("계정을 삭제하려는 이유를 선택해 주세요.") _toastLiveData.postValue(
ToastMessage(resId = R.string.screen_sign_out_reason_required)
)
return return
} }
@@ -38,27 +42,29 @@ class SignOutViewModel(private val repository: UserRepository) : BaseViewModel()
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe( .subscribe(
{ {
_isLoading.value = false _isLoading.value = false
if (it.message != null) { if (it.message != null) {
_toastLiveData.postValue(it.message) _toastLiveData.postValue(ToastMessage(message = it.message))
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." ToastMessage(resId = R.string.common_error_unknown)
) )
} }
if (it.success) { if (it.success) {
SharedPreferenceManager.clear() SharedPreferenceManager.clear()
onSuccess() onSuccess()
} }
}, },
{ {
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") _toastLiveData.postValue(
} ToastMessage(resId = R.string.common_error_unknown)
) )
}
)
) )
} }
} }

View File

@@ -5,6 +5,7 @@ import android.os.Bundle
import android.widget.Toast import android.widget.Toast
import androidx.webkit.WebSettingsCompat import androidx.webkit.WebSettingsCompat
import androidx.webkit.WebViewFeature import androidx.webkit.WebViewFeature
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.base.BaseActivity import kr.co.vividnext.sodalive.base.BaseActivity
import kr.co.vividnext.sodalive.common.Constants import kr.co.vividnext.sodalive.common.Constants
import kr.co.vividnext.sodalive.common.LoadingDialog import kr.co.vividnext.sodalive.common.LoadingDialog
@@ -56,14 +57,17 @@ class TermsActivity : BaseActivity<ActivityTermsBinding>(ActivityTermsBinding::i
private fun bindData() { private fun bindData() {
viewModel.isLoading.observe(this) { viewModel.isLoading.observe(this) {
if (it) { if (it) {
loadingDialog.show(screenWidth, "공지사항을 불러오고 있습니다.") loadingDialog.show(screenWidth, getString(R.string.screen_terms_loading))
} else { } else {
loadingDialog.dismiss() loadingDialog.dismiss()
} }
} }
viewModel.toastLiveData.observe(this) { viewModel.toastLiveData.observe(this) {
it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() } val text = it?.message ?: it?.resId?.let { resId -> getString(resId) }
text?.let { message ->
Toast.makeText(applicationContext, message, Toast.LENGTH_LONG).show()
}
} }
viewModel.titleLiveData.observe(this) { viewModel.titleLiveData.observe(this) {

View File

@@ -5,7 +5,9 @@ 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.ToastMessage
class TermsViewModel(private val repository: TermsRepository) : BaseViewModel() { class TermsViewModel(private val repository: TermsRepository) : BaseViewModel() {
private val _titleLiveData = MutableLiveData<String>() private val _titleLiveData = MutableLiveData<String>()
@@ -16,8 +18,8 @@ class TermsViewModel(private val repository: TermsRepository) : BaseViewModel()
val termsLiveData: LiveData<String> val termsLiveData: LiveData<String>
get() = _termsLiveData get() = _termsLiveData
private val _toastLiveData = MutableLiveData<String?>() private val _toastLiveData = MutableLiveData<ToastMessage?>()
val toastLiveData: LiveData<String?> val toastLiveData: LiveData<ToastMessage?>
get() = _toastLiveData get() = _toastLiveData
private var _isLoading = MutableLiveData(false) private var _isLoading = MutableLiveData(false)
@@ -40,10 +42,10 @@ class TermsViewModel(private val repository: TermsRepository) : BaseViewModel()
_termsLiveData.postValue(it.data.description) _termsLiveData.postValue(it.data.description)
} else { } else {
if (it.message != null) { if (it.message != null) {
_toastLiveData.postValue(it.message) _toastLiveData.postValue(ToastMessage(message = it.message))
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." ToastMessage(resId = R.string.common_error_unknown)
) )
} }
} }
@@ -51,7 +53,9 @@ class TermsViewModel(private val repository: TermsRepository) : BaseViewModel()
{ {
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") _toastLiveData.postValue(
ToastMessage(resId = R.string.common_error_unknown)
)
} }
) )
) )
@@ -73,10 +77,10 @@ class TermsViewModel(private val repository: TermsRepository) : BaseViewModel()
_termsLiveData.postValue(it.data.description) _termsLiveData.postValue(it.data.description)
} else { } else {
if (it.message != null) { if (it.message != null) {
_toastLiveData.postValue(it.message) _toastLiveData.postValue(ToastMessage(message = it.message))
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." ToastMessage(resId = R.string.common_error_unknown)
) )
} }
} }
@@ -84,7 +88,9 @@ class TermsViewModel(private val repository: TermsRepository) : BaseViewModel()
{ {
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") _toastLiveData.postValue(
ToastMessage(resId = R.string.common_error_unknown)
)
} }
) )
) )

View File

@@ -32,7 +32,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="민감한 콘텐츠 보기" android:text="@string/screen_content_settings_adult_toggle"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
@@ -74,7 +74,7 @@
android:drawablePadding="13.3dp" android:drawablePadding="13.3dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center_vertical" android:gravity="center_vertical"
android:text="전체" android:text="@string/screen_content_settings_all"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" android:textSize="13.3sp"
app:drawableStartCompat="@drawable/ic_radio_button_select" /> app:drawableStartCompat="@drawable/ic_radio_button_select" />
@@ -89,7 +89,7 @@
android:drawablePadding="13.3dp" android:drawablePadding="13.3dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center_vertical" android:gravity="center_vertical"
android:text="남성향" android:text="@string/screen_content_settings_male"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" android:textSize="13.3sp"
app:drawableStartCompat="@drawable/ic_radio_button_select" /> app:drawableStartCompat="@drawable/ic_radio_button_select" />
@@ -103,7 +103,7 @@
android:drawablePadding="13.3dp" android:drawablePadding="13.3dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center_vertical" android:gravity="center_vertical"
android:text="여성향" android:text="@string/screen_content_settings_female"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" android:textSize="13.3sp"
app:drawableStartCompat="@drawable/ic_radio_button_select" /> app:drawableStartCompat="@drawable/ic_radio_button_select" />

View File

@@ -37,7 +37,7 @@
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center" android:gravity="center"
android:paddingVertical="16dp" android:paddingVertical="16dp"
android:text="이벤트 참여하기" android:text="@string/screen_event_participate"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="18.3sp" /> android:textSize="18.3sp" />
</FrameLayout> </FrameLayout>

View File

@@ -30,7 +30,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="라이브 알림" android:text="@string/notification_settings_live"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
@@ -62,7 +62,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="콘텐츠 업로드 알림" android:text="@string/notification_settings_upload"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
@@ -94,7 +94,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="메시지 알림" android:text="@string/notification_settings_message"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="14.7sp" /> android:textSize="14.7sp" />

View File

@@ -40,7 +40,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="알림 설정" android:text="@string/screen_settings_notification"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
@@ -74,7 +74,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="콘텐츠 보기 설정" android:text="@string/screen_settings_content"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
@@ -109,7 +109,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="이용약관" android:text="@string/screen_settings_terms"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
@@ -142,7 +142,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="개인정보처리방침" android:text="@string/screen_settings_privacy"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
@@ -175,7 +175,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="오픈소스 라이선스" android:text="@string/screen_settings_oss_license"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
@@ -204,7 +204,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="앱 버전 정보" android:text="@string/screen_settings_app_version"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
@@ -228,15 +228,7 @@
android:layout_marginHorizontal="13.3dp" android:layout_marginHorizontal="13.3dp"
android:layout_marginTop="16.7dp" android:layout_marginTop="16.7dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text=" android:text="@string/company_info"
- 회사명 : 주식회사 소다라이브\n\n
- 대표자 : 이재형\n\n
- 주소 : 경기도 성남시 분당구 황새울로335번길 10, 5층 563A호\n\n
- 사업자등록번호 : 870-81-03220\n\n
- 통신판매업신고 : 제2024-성남분당B-1012호\n\n
- 고객센터 : 02.2055.1477(이용시간 10:00~19:00)\n\n
- 대표 이메일 : sodalive.official@gmail.com
"
android:textColor="@color/color_777777" android:textColor="@color/color_777777"
android:textSize="11sp" /> android:textSize="11sp" />
@@ -250,7 +242,7 @@
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center" android:gravity="center"
android:paddingVertical="19.3dp" android:paddingVertical="19.3dp"
android:text="로그아웃" android:text="@string/screen_settings_logout"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
@@ -261,7 +253,7 @@
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginTop="26.7dp" android:layout_marginTop="26.7dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="모든 기기에서 로그아웃" android:text="@string/screen_settings_logout_all"
android:textColor="@color/color_777777" android:textColor="@color/color_777777"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
@@ -272,7 +264,7 @@
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginTop="26.7dp" android:layout_marginTop="26.7dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="회원탈퇴" android:text="@string/screen_settings_sign_out"
android:textColor="@color/color_777777" android:textColor="@color/color_777777"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
</LinearLayout> </LinearLayout>

View File

@@ -29,7 +29,7 @@
android:layout_marginHorizontal="13.3dp" android:layout_marginHorizontal="13.3dp"
android:layout_marginTop="13.3dp" android:layout_marginTop="13.3dp"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="정말로 탈퇴하실 거에요?\n한 번 더 생각해보지 않으실래요?" android:text="@string/screen_sign_out_question"
android:textColor="@color/color_3bb9f1" android:textColor="@color/color_3bb9f1"
android:textSize="20sp" /> android:textSize="20sp" />
@@ -40,7 +40,7 @@
android:layout_marginTop="6.7dp" android:layout_marginTop="6.7dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:letterSpacing="0" android:letterSpacing="0"
android:text="계정을 삭제하려는 이유를 선택해주세요.\n서비스 개선에 중요한 자료로 활용하겠습니다." android:text="@string/screen_sign_out_description"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" /> android:textSize="13.3sp" />
@@ -53,7 +53,7 @@
android:button="@null" android:button="@null"
android:drawablePadding="13.3dp" android:drawablePadding="13.3dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="닉네임을 변경하고 싶어서" android:text="@string/screen_sign_out_reason_change_nickname"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" android:textSize="13.3sp"
app:drawableStartCompat="@drawable/ic_radio_button_select" /> app:drawableStartCompat="@drawable/ic_radio_button_select" />
@@ -67,7 +67,7 @@
android:button="@null" android:button="@null"
android:drawablePadding="13.3dp" android:drawablePadding="13.3dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="다른 사용자와의 다툼이 있어서" android:text="@string/screen_sign_out_reason_conflict_user"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" android:textSize="13.3sp"
app:drawableStartCompat="@drawable/ic_radio_button_select" /> app:drawableStartCompat="@drawable/ic_radio_button_select" />
@@ -81,7 +81,7 @@
android:button="@null" android:button="@null"
android:drawablePadding="13.3dp" android:drawablePadding="13.3dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="이용이 불편하고 장애가 많아서" android:text="@string/screen_sign_out_reason_inconvenient"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" android:textSize="13.3sp"
app:drawableStartCompat="@drawable/ic_radio_button_select" /> app:drawableStartCompat="@drawable/ic_radio_button_select" />
@@ -95,7 +95,7 @@
android:button="@null" android:button="@null"
android:drawablePadding="13.3dp" android:drawablePadding="13.3dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="서비스 운영이 마음에 들지 않아서" android:text="@string/screen_sign_out_reason_unhappy_service"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" android:textSize="13.3sp"
app:drawableStartCompat="@drawable/ic_radio_button_select" /> app:drawableStartCompat="@drawable/ic_radio_button_select" />
@@ -109,7 +109,7 @@
android:button="@null" android:button="@null"
android:drawablePadding="13.3dp" android:drawablePadding="13.3dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="다른 서비스가 더 좋아서" android:text="@string/screen_sign_out_reason_other_service"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" android:textSize="13.3sp"
app:drawableStartCompat="@drawable/ic_radio_button_select" /> app:drawableStartCompat="@drawable/ic_radio_button_select" />
@@ -123,7 +123,7 @@
android:button="@null" android:button="@null"
android:drawablePadding="13.3dp" android:drawablePadding="13.3dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="삭제하고 싶은 내용이 있어서" android:text="@string/screen_sign_out_reason_remove_content"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" android:textSize="13.3sp"
app:drawableStartCompat="@drawable/ic_radio_button_select" /> app:drawableStartCompat="@drawable/ic_radio_button_select" />
@@ -137,7 +137,7 @@
android:button="@null" android:button="@null"
android:drawablePadding="13.3dp" android:drawablePadding="13.3dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="사용빈도가 낮아서" android:text="@string/screen_sign_out_reason_low_usage"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" android:textSize="13.3sp"
app:drawableStartCompat="@drawable/ic_radio_button_select" /> app:drawableStartCompat="@drawable/ic_radio_button_select" />
@@ -151,7 +151,7 @@
android:button="@null" android:button="@null"
android:drawablePadding="13.3dp" android:drawablePadding="13.3dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="원하는 콘텐츠나 크리에이터가 없어서" android:text="@string/screen_sign_out_reason_missing_content"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" android:textSize="13.3sp"
app:drawableStartCompat="@drawable/ic_radio_button_select" /> app:drawableStartCompat="@drawable/ic_radio_button_select" />
@@ -165,7 +165,7 @@
android:button="@null" android:button="@null"
android:drawablePadding="13.3dp" android:drawablePadding="13.3dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="이용요금이 비싸서" android:text="@string/screen_sign_out_reason_expensive"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" android:textSize="13.3sp"
app:drawableStartCompat="@drawable/ic_radio_button_select" /> app:drawableStartCompat="@drawable/ic_radio_button_select" />
@@ -184,7 +184,7 @@
android:button="@null" android:button="@null"
android:drawablePadding="13.3dp" android:drawablePadding="13.3dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="기타" android:text="@string/screen_sign_out_reason_etc"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" android:textSize="13.3sp"
app:drawableStartCompat="@drawable/ic_radio_button_select" /> app:drawableStartCompat="@drawable/ic_radio_button_select" />
@@ -202,7 +202,7 @@
android:background="@null" android:background="@null"
android:button="@null" android:button="@null"
android:fontFamily="@font/gmarket_sans_light" android:fontFamily="@font/gmarket_sans_light"
android:hint="입력해 주세요" android:hint="@string/screen_sign_out_reason_hint"
android:importantForAutofill="no" android:importantForAutofill="no"
android:inputType="textWebEditText" android:inputType="textWebEditText"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
@@ -230,7 +230,7 @@
android:layout_marginHorizontal="26.7dp" android:layout_marginHorizontal="26.7dp"
android:layout_marginTop="13.3dp" android:layout_marginTop="13.3dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="계정을 삭제하면 회원님의 모든 콘텐츠와 활동 길고, 캔충전 및 적립, 사용내역 등의 기록이 삭제됩니다. 삭제된 정보는 복구할 수 없으니 신중히 결정해주세요.\n캔 충전하기를 통해 적립한 캔은 계정 삭제시 환불이 불가합니다. 또한 환불 신청 후 환불처리가 되기 전에 계정을 삭제하는 경우 포인트 사용내역을 확인할 수 없어 환불이 불가합니다. " android:text="@string/screen_sign_out_warning"
android:textColor="@color/color_ff5c49" /> android:textColor="@color/color_ff5c49" />
<LinearLayout <LinearLayout
@@ -245,7 +245,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginHorizontal="6.7dp" android:layout_marginHorizontal="6.7dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="비밀번호 확인" android:text="@string/screen_sign_out_password_label"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="12sp" /> android:textSize="12sp" />
@@ -274,7 +274,7 @@
android:layout_marginHorizontal="26.7dp" android:layout_marginHorizontal="26.7dp"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="※ 소셜 로그인 이용자는 비밀번호를 입력하지 말고 '탈퇴하기'를 클릭하면 자동 탈퇴됩니다." android:text="@string/screen_sign_out_social_hint"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="12sp" /> android:textSize="12sp" />
@@ -289,7 +289,7 @@
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center" android:gravity="center"
android:paddingVertical="16dp" android:paddingVertical="16dp"
android:text="탈퇴하기" android:text="@string/screen_sign_out_submit"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="15sp" /> android:textSize="15sp" />
</LinearLayout> </LinearLayout>

View File

@@ -13,7 +13,7 @@
android:layout_marginBottom="13.3dp" android:layout_marginBottom="13.3dp"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center" android:gravity="center"
android:text="알림 설정" android:text="@string/screen_notification_settings_title"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="18sp" /> android:textSize="18sp" />
@@ -29,7 +29,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="라이브 알림" android:text="@string/notification_settings_live"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
@@ -62,7 +62,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="콘텐츠 업로드 알림" android:text="@string/notification_settings_upload"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
@@ -95,7 +95,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="메시지 알림" android:text="@string/notification_settings_message"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="14.7sp" /> android:textSize="14.7sp" />
@@ -120,7 +120,7 @@
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center" android:gravity="center"
android:paddingVertical="16dp" android:paddingVertical="16dp"
android:text="설정하기" android:text="@string/notification_settings_confirm"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="18.3sp" /> android:textSize="18.3sp" />

View File

@@ -177,4 +177,57 @@
<string name="screen_search_content_title">Contents</string> <string name="screen_search_content_title">Contents</string>
<string name="screen_search_series_title">Series</string> <string name="screen_search_series_title">Series</string>
<string name="screen_search_no_result">No results found.</string> <string name="screen_search_no_result">No results found.</string>
<!-- Settings / Notices / Events -->
<string name="screen_settings_title">Settings</string>
<string name="screen_settings_notification">Notification settings</string>
<string name="screen_settings_content">Content viewing settings</string>
<string name="screen_settings_terms">Terms of Service</string>
<string name="screen_settings_privacy">Privacy Policy</string>
<string name="screen_settings_oss_license">Open source licenses</string>
<string name="screen_settings_app_version">App version</string>
<string name="screen_settings_version_format">ver %1$s</string>
<string name="screen_settings_logout">Log out</string>
<string name="screen_settings_logout_all">Log out from all devices</string>
<string name="screen_settings_sign_out">Delete account</string>
<string name="dialog_alert_title">Notice</string>
<string name="dialog_logout_message">Do you want to log out?</string>
<string name="dialog_logout_all_message">Log out from all devices?</string>
<string name="screen_content_settings_title">Content viewing settings</string>
<string name="screen_content_settings_adult_toggle">Show sensitive content</string>
<string name="screen_content_settings_all">All</string>
<string name="screen_content_settings_male">Male-oriented</string>
<string name="screen_content_settings_female">Female-oriented</string>
<string name="screen_notification_settings_title">Notification settings</string>
<string name="notification_settings_live">Live notifications</string>
<string name="notification_settings_upload">Content upload notifications</string>
<string name="notification_settings_message">Message notifications</string>
<string name="notification_settings_confirm">Save</string>
<string name="screen_terms_loading">Loading terms…</string>
<string name="screen_notice_title">Notices</string>
<string name="screen_notice_loading">Loading notices…</string>
<string name="screen_notice_detail_title">Notice details</string>
<string name="screen_event_title">Events</string>
<string name="screen_event_loading">Loading events…</string>
<string name="screen_event_detail_title">Event details</string>
<string name="screen_event_participate">Join event</string>
<string name="screen_sign_out_title">Delete account</string>
<string name="screen_sign_out_question">Are you sure you want to leave?\nWould you like to reconsider?</string>
<string name="screen_sign_out_description">Please choose why you want to delete your account.\nWe use this to improve the service.</string>
<string name="screen_sign_out_reason_change_nickname">I want to change my nickname</string>
<string name="screen_sign_out_reason_conflict_user">Conflict with another user</string>
<string name="screen_sign_out_reason_inconvenient">Service is inconvenient or unstable</string>
<string name="screen_sign_out_reason_unhappy_service">Unhappy with service operation</string>
<string name="screen_sign_out_reason_other_service">Prefer another service</string>
<string name="screen_sign_out_reason_remove_content">I want to remove my content</string>
<string name="screen_sign_out_reason_low_usage">I rarely use it</string>
<string name="screen_sign_out_reason_missing_content">No content or creators I want</string>
<string name="screen_sign_out_reason_expensive">Too expensive</string>
<string name="screen_sign_out_reason_etc">Other</string>
<string name="screen_sign_out_reason_hint">Please enter</string>
<string name="screen_sign_out_warning">Deleting your account will remove all of your content, activity history, can top-ups, accruals, and usage history. Deleted information cannot be recovered, so please decide carefully.\nCans earned via Charge Cans cannot be refunded when deleting your account. If you delete your account before a refund request is processed, the refund cannot be made because we cannot check your point usage history.</string>
<string name="screen_sign_out_password_label">Password</string>
<string name="screen_sign_out_social_hint">※ Social login users can tap \'Delete account\' without entering a password to proceed automatically.</string>
<string name="screen_sign_out_submit">Delete account</string>
<string name="screen_sign_out_reason_required">Please select a reason for deleting your account.</string>
</resources> </resources>

View File

@@ -177,4 +177,57 @@
<string name="screen_search_content_title">コンテンツ</string> <string name="screen_search_content_title">コンテンツ</string>
<string name="screen_search_series_title">シリーズ</string> <string name="screen_search_series_title">シリーズ</string>
<string name="screen_search_no_result">検索結果がありません。</string> <string name="screen_search_no_result">検索結果がありません。</string>
<!-- Settings / Notices / Events -->
<string name="screen_settings_title">設定</string>
<string name="screen_settings_notification">通知設定</string>
<string name="screen_settings_content">コンテンツ表示設定</string>
<string name="screen_settings_terms">利用規約</string>
<string name="screen_settings_privacy">個人情報取扱方針</string>
<string name="screen_settings_oss_license">オープンソースライセンス</string>
<string name="screen_settings_app_version">アプリバージョン</string>
<string name="screen_settings_version_format">ver %1$s</string>
<string name="screen_settings_logout">ログアウト</string>
<string name="screen_settings_logout_all">すべての端末でログアウト</string>
<string name="screen_settings_sign_out">退会</string>
<string name="dialog_alert_title">お知らせ</string>
<string name="dialog_logout_message">ログアウトしますか?</string>
<string name="dialog_logout_all_message">すべての端末からログアウトしますか?</string>
<string name="screen_content_settings_title">コンテンツ表示設定</string>
<string name="screen_content_settings_adult_toggle">センシティブなコンテンツを表示</string>
<string name="screen_content_settings_all">すべて</string>
<string name="screen_content_settings_male">男性向け</string>
<string name="screen_content_settings_female">女性向け</string>
<string name="screen_notification_settings_title">通知設定</string>
<string name="notification_settings_live">ライブ通知</string>
<string name="notification_settings_upload">コンテンツアップロード通知</string>
<string name="notification_settings_message">メッセージ通知</string>
<string name="notification_settings_confirm">設定する</string>
<string name="screen_terms_loading">規約を読み込み中です。</string>
<string name="screen_notice_title">お知らせ</string>
<string name="screen_notice_loading">お知らせを読み込み中です。</string>
<string name="screen_notice_detail_title">お知らせ詳細</string>
<string name="screen_event_title">イベント</string>
<string name="screen_event_loading">イベントを読み込み中です。</string>
<string name="screen_event_detail_title">イベント詳細</string>
<string name="screen_event_participate">イベントに参加する</string>
<string name="screen_sign_out_title">退会</string>
<string name="screen_sign_out_question">本当に退会しますか?\nもう一度考えてみませんか</string>
<string name="screen_sign_out_description">退会理由を選択してください。\nサービス改善の参考にします。</string>
<string name="screen_sign_out_reason_change_nickname">ニックネームを変更したい</string>
<string name="screen_sign_out_reason_conflict_user">他のユーザーとのトラブルがある</string>
<string name="screen_sign_out_reason_inconvenient">使いにくい・障害が多い</string>
<string name="screen_sign_out_reason_unhappy_service">サービス運営に不満がある</string>
<string name="screen_sign_out_reason_other_service">他のサービスの方が良い</string>
<string name="screen_sign_out_reason_remove_content">削除したい内容がある</string>
<string name="screen_sign_out_reason_low_usage">利用頻度が低い</string>
<string name="screen_sign_out_reason_missing_content">求めるコンテンツやクリエイターがいない</string>
<string name="screen_sign_out_reason_expensive">利用料金が高い</string>
<string name="screen_sign_out_reason_etc">その他</string>
<string name="screen_sign_out_reason_hint">入力してください</string>
<string name="screen_sign_out_warning">アカウントを削除すると、すべてのコンテンツや活動履歴、CANチャージ・積立・利用履歴などが削除されます。削除された情報は復元できませんのでご注意ください。\nCANチャージで貯めたCANはアカウント削除時に返金できません。返金申請後に処理前の状態でアカウントを削除した場合、ポイント利用履歴を確認できないため返金できません。</string>
<string name="screen_sign_out_password_label">パスワード確認</string>
<string name="screen_sign_out_social_hint">※ ソーシャルログイン利用者はパスワードを入力せず「退会する」をタップすると自動で退会できます。</string>
<string name="screen_sign_out_submit">退会する</string>
<string name="screen_sign_out_reason_required">退会理由を選択してください。</string>
</resources> </resources>

View File

@@ -176,4 +176,57 @@
<string name="screen_search_content_title">콘텐츠</string> <string name="screen_search_content_title">콘텐츠</string>
<string name="screen_search_series_title">시리즈</string> <string name="screen_search_series_title">시리즈</string>
<string name="screen_search_no_result">검색 결과가 없습니다.</string> <string name="screen_search_no_result">검색 결과가 없습니다.</string>
<!-- Settings / Notices / Events -->
<string name="screen_settings_title">설정</string>
<string name="screen_settings_notification">알림 설정</string>
<string name="screen_settings_content">콘텐츠 보기 설정</string>
<string name="screen_settings_terms">이용약관</string>
<string name="screen_settings_privacy">개인정보처리방침</string>
<string name="screen_settings_oss_license">오픈소스 라이선스</string>
<string name="screen_settings_app_version">앱 버전 정보</string>
<string name="screen_settings_version_format">ver %1$s</string>
<string name="screen_settings_logout">로그아웃</string>
<string name="screen_settings_logout_all">모든 기기에서 로그아웃</string>
<string name="screen_settings_sign_out">회원탈퇴</string>
<string name="dialog_alert_title">알림</string>
<string name="dialog_logout_message">로그아웃 하시겠어요?</string>
<string name="dialog_logout_all_message">모든 기기에서 로그아웃 하시겠어요?</string>
<string name="screen_content_settings_title">콘텐츠 보기 설정</string>
<string name="screen_content_settings_adult_toggle">민감한 콘텐츠 보기</string>
<string name="screen_content_settings_all">전체</string>
<string name="screen_content_settings_male">남성향</string>
<string name="screen_content_settings_female">여성향</string>
<string name="screen_notification_settings_title">알림 설정</string>
<string name="notification_settings_live">라이브 알림</string>
<string name="notification_settings_upload">콘텐츠 업로드 알림</string>
<string name="notification_settings_message">메시지 알림</string>
<string name="notification_settings_confirm">설정하기</string>
<string name="screen_terms_loading">약관을 불러오고 있습니다.</string>
<string name="screen_notice_title">공지사항</string>
<string name="screen_notice_loading">공지사항을 불러오고 있습니다.</string>
<string name="screen_notice_detail_title">공지사항 상세</string>
<string name="screen_event_title">이벤트</string>
<string name="screen_event_loading">이벤트를 불러오고 있습니다.</string>
<string name="screen_event_detail_title">이벤트 상세</string>
<string name="screen_event_participate">이벤트 참여하기</string>
<string name="screen_sign_out_title">회원탈퇴</string>
<string name="screen_sign_out_question">정말로 탈퇴하실 거에요?\n한 번 더 생각해보지 않으실래요?</string>
<string name="screen_sign_out_description">계정을 삭제하려는 이유를 선택해주세요.\n서비스 개선에 중요한 자료로 활용하겠습니다.</string>
<string name="screen_sign_out_reason_change_nickname">닉네임을 변경하고 싶어서</string>
<string name="screen_sign_out_reason_conflict_user">다른 사용자와의 다툼이 있어서</string>
<string name="screen_sign_out_reason_inconvenient">이용이 불편하고 장애가 많아서</string>
<string name="screen_sign_out_reason_unhappy_service">서비스 운영이 마음에 들지 않아서</string>
<string name="screen_sign_out_reason_other_service">다른 서비스가 더 좋아서</string>
<string name="screen_sign_out_reason_remove_content">삭제하고 싶은 내용이 있어서</string>
<string name="screen_sign_out_reason_low_usage">사용빈도가 낮아서</string>
<string name="screen_sign_out_reason_missing_content">원하는 콘텐츠나 크리에이터가 없어서</string>
<string name="screen_sign_out_reason_expensive">이용요금이 비싸서</string>
<string name="screen_sign_out_reason_etc">기타</string>
<string name="screen_sign_out_reason_hint">입력해 주세요</string>
<string name="screen_sign_out_warning">계정을 삭제하면 회원님의 모든 콘텐츠와 활동 길고, 캔충전 및 적립, 사용내역 등의 기록이 삭제됩니다. 삭제된 정보는 복구할 수 없으니 신중히 결정해주세요.\n캔 충전하기를 통해 적립한 캔은 계정 삭제시 환불이 불가합니다. 또한 환불 신청 후 환불처리가 되기 전에 계정을 삭제하는 경우 포인트 사용내역을 확인할 수 없어 환불이 불가합니다.</string>
<string name="screen_sign_out_password_label">비밀번호 확인</string>
<string name="screen_sign_out_social_hint">※ 소셜 로그인 이용자는 비밀번호를 입력하지 말고 \'탈퇴하기\'를 클릭하면 자동 탈퇴됩니다.</string>
<string name="screen_sign_out_submit">탈퇴하기</string>
<string name="screen_sign_out_reason_required">계정을 삭제하려는 이유를 선택해 주세요.</string>
</resources> </resources>