- 19금 콘텐츠 보기 설정 UI depth 추가
- 콘텐츠 보기 설정으로 제목 변경
This commit is contained in:
klaus 2024-10-10 15:37:12 +09:00
parent f3553c3c59
commit f2cca1e14b
8 changed files with 310 additions and 200 deletions

View File

@ -123,6 +123,7 @@
<activity android:name=".settings.event.EventActivity" />
<activity android:name=".settings.event.EventDetailActivity" />
<activity android:name=".settings.notification.NotificationSettingsActivity" />
<activity android:name=".settings.ContentSettingsActivity" />
<activity android:name=".live.reservation_status.LiveReservationStatusActivity" />
<activity android:name=".live.reservation_status.LiveReservationCancelActivity" />
<activity android:name=".audio_content.AudioContentActivity" />

View File

@ -104,6 +104,7 @@ import kr.co.vividnext.sodalive.mypage.service_center.ServiceCenterViewModel
import kr.co.vividnext.sodalive.network.TokenAuthenticator
import kr.co.vividnext.sodalive.report.ReportApi
import kr.co.vividnext.sodalive.report.ReportRepository
import kr.co.vividnext.sodalive.settings.ContentSettingsViewModel
import kr.co.vividnext.sodalive.settings.SettingsViewModel
import kr.co.vividnext.sodalive.settings.event.EventApi
import kr.co.vividnext.sodalive.settings.event.EventRepository
@ -221,6 +222,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) {
viewModel { NoticeViewModel(get()) }
viewModel { EventViewModel(get()) }
viewModel { NotificationSettingsViewModel(get()) }
viewModel { ContentSettingsViewModel() }
viewModel { SettingsViewModel(get()) }
viewModel { SeriesDetailViewModel(get(), get()) }
viewModel { SeriesListAllViewModel(get()) }

View File

@ -0,0 +1,111 @@
package kr.co.vividnext.sodalive.settings
import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.activity.OnBackPressedCallback
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.base.BaseActivity
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.databinding.ActivityContentSettingsBinding
import kr.co.vividnext.sodalive.splash.SplashActivity
import org.koin.android.ext.android.inject
class ContentSettingsActivity : BaseActivity<ActivityContentSettingsBinding>(
ActivityContentSettingsBinding::inflate
) {
private val viewModel: ContentSettingsViewModel by inject()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
bindData()
onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
handleFinish()
}
})
}
override fun setupView() {
binding.toolbar.tvBack.text = "콘텐츠 보기 설정"
binding.toolbar.tvBack.setOnClickListener { handleFinish() }
// 본인 인증 체크
if (SharedPreferenceManager.isAuth) {
binding.llAdultContentVisible.visibility = View.VISIBLE
// 19금 콘텐츠 보기 체크
if (SharedPreferenceManager.isAdultContentVisible) {
binding.llAdultContentPreference.visibility = View.VISIBLE
} else {
binding.llAdultContentPreference.visibility = View.GONE
}
// 19금 콘텐츠 보기 스위치 액션
binding.ivAdultContentVisible.setOnClickListener {
viewModel.toggleAdultContentVisible()
}
binding.tvContentAll.setOnClickListener {
viewModel.setAdultContentPreference(ContentType.ALL)
}
binding.tvContentMale.setOnClickListener {
viewModel.setAdultContentPreference(ContentType.MALE)
}
binding.tvContentFemale.setOnClickListener {
viewModel.setAdultContentPreference(ContentType.FEMALE)
}
} else {
binding.llAdultContentVisible.visibility = View.GONE
}
}
private fun bindData() {
viewModel.isAdultContentVisible.observe(this) {
if (it) {
binding.ivAdultContentVisible.setImageResource(R.drawable.btn_toggle_on_big)
binding.llAdultContentPreference.visibility = View.VISIBLE
} else {
binding.ivAdultContentVisible.setImageResource(R.drawable.btn_toggle_off_big)
binding.llAdultContentPreference.visibility = View.GONE
}
}
viewModel.adultContentPreference.observe(this) {
binding.tvContentAll.isSelected = false
binding.tvContentMale.isSelected = false
binding.tvContentFemale.isSelected = false
when (it) {
ContentType.ALL -> binding.tvContentAll.isSelected = true
ContentType.MALE -> binding.tvContentMale.isSelected = true
ContentType.FEMALE -> binding.tvContentFemale.isSelected = true
else -> {}
}
}
}
private fun handleFinish() {
if (viewModel.isChangedAdultContentVisible) {
startActivity(
Intent(
this@ContentSettingsActivity,
SplashActivity::class.java
).apply {
addFlags(
Intent.FLAG_ACTIVITY_CLEAR_TASK or
Intent.FLAG_ACTIVITY_NEW_TASK
)
}
)
finish()
} else {
finish()
}
}
}

View File

@ -0,0 +1,39 @@
package kr.co.vividnext.sodalive.settings
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import kr.co.vividnext.sodalive.base.BaseViewModel
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
class ContentSettingsViewModel : BaseViewModel() {
private var _isAdultContentVisible = MutableLiveData(
SharedPreferenceManager.isAdultContentVisible
)
val isAdultContentVisible: LiveData<Boolean>
get() = _isAdultContentVisible
private var _adultContentPreference = MutableLiveData(
ContentType.values()[SharedPreferenceManager.contentPreference]
)
val adultContentPreference: LiveData<ContentType>
get() = _adultContentPreference
var isChangedAdultContentVisible = false
fun toggleAdultContentVisible() {
val adultContentVisible = SharedPreferenceManager.isAdultContentVisible
_isAdultContentVisible.value = !adultContentVisible
SharedPreferenceManager.isAdultContentVisible = !adultContentVisible
isChangedAdultContentVisible = true
if (adultContentVisible) {
SharedPreferenceManager.contentPreference = ContentType.ALL.ordinal
}
}
fun setAdultContentPreference(adultContentPreference: ContentType) {
_adultContentPreference.value = adultContentPreference
SharedPreferenceManager.contentPreference = adultContentPreference.ordinal
isChangedAdultContentVisible = true
}
}

View File

@ -9,7 +9,6 @@ import android.widget.Toast
import androidx.activity.viewModels
import com.google.android.gms.oss.licenses.OssLicensesMenuActivity
import kr.co.vividnext.sodalive.BuildConfig
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.audio_content.AudioContentPlayService
import kr.co.vividnext.sodalive.base.BaseActivity
import kr.co.vividnext.sodalive.base.SodaDialog
@ -97,6 +96,20 @@ class SettingsActivity : BaseActivity<ActivitySettingsBinding>(ActivitySettingsB
)
}
if (SharedPreferenceManager.isAuth) {
binding.rlContentSettings.visibility = View.VISIBLE
binding.rlContentSettings.setOnClickListener {
startActivity(
Intent(
applicationContext,
ContentSettingsActivity::class.java
)
)
}
} else {
binding.rlContentSettings.visibility = View.GONE
}
binding.rlTerms.setOnClickListener {
val intent = Intent(applicationContext, TermsActivity::class.java)
intent.putExtra(Constants.EXTRA_TERMS, Constants.EXTRA_TERMS)
@ -128,42 +141,6 @@ class SettingsActivity : BaseActivity<ActivitySettingsBinding>(ActivitySettingsB
binding.tvSignOut.setOnClickListener {
startActivity(Intent(applicationContext, SignOutActivity::class.java))
}
setupAdultContentVisibleView()
}
private fun setupAdultContentVisibleView() {
// 본인 인증 체크
if (SharedPreferenceManager.isAuth) {
binding.llAdultContentVisible.visibility = View.VISIBLE
// 19금 콘텐츠 보기 체크
if (SharedPreferenceManager.isAdultContentVisible) {
binding.llAdultContentPreference.visibility = View.VISIBLE
} else {
binding.llAdultContentPreference.visibility = View.GONE
}
// 19금 콘텐츠 보기 스위치 액션
binding.ivAdultContentVisible.setOnClickListener {
viewModel.toggleAdultContentVisible()
}
binding.tvContentAll.setOnClickListener {
viewModel.setAdultContentPreference(ContentType.ALL)
}
binding.tvContentMale.setOnClickListener {
viewModel.setAdultContentPreference(ContentType.MALE)
}
binding.tvContentFemale.setOnClickListener {
viewModel.setAdultContentPreference(ContentType.FEMALE)
}
} else {
binding.llAdultContentVisible.visibility = View.GONE
}
}
private fun bindData() {
@ -178,29 +155,6 @@ class SettingsActivity : BaseActivity<ActivitySettingsBinding>(ActivitySettingsB
viewModel.toastLiveData.observe(this) {
it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() }
}
viewModel.isAdultContentVisible.observe(this) {
if (it) {
binding.ivAdultContentVisible.setImageResource(R.drawable.btn_toggle_on_big)
binding.llAdultContentPreference.visibility = View.VISIBLE
} else {
binding.ivAdultContentVisible.setImageResource(R.drawable.btn_toggle_off_big)
binding.llAdultContentPreference.visibility = View.GONE
}
}
viewModel.adultContentPreference.observe(this) {
binding.tvContentAll.isSelected = false
binding.tvContentMale.isSelected = false
binding.tvContentFemale.isSelected = false
when (it) {
ContentType.ALL -> binding.tvContentAll.isSelected = true
ContentType.MALE -> binding.tvContentMale.isSelected = true
ContentType.FEMALE -> binding.tvContentFemale.isSelected = true
else -> {}
}
}
}
private fun logout() {

View File

@ -18,20 +18,6 @@ class SettingsViewModel(private val userRepository: UserRepository) : BaseViewMo
val isLoading: LiveData<Boolean>
get() = _isLoading
private var _isAdultContentVisible = MutableLiveData(
SharedPreferenceManager.isAdultContentVisible
)
val isAdultContentVisible: LiveData<Boolean>
get() = _isAdultContentVisible
private var _adultContentPreference = MutableLiveData(
ContentType.values()[SharedPreferenceManager.contentPreference]
)
val adultContentPreference: LiveData<ContentType>
get() = _adultContentPreference
var isChangedAdultContentVisible = false
fun logout(onSuccess: () -> Unit) {
compositeDisposable.add(
userRepository.logout(token = "Bearer ${SharedPreferenceManager.token}")
@ -85,17 +71,4 @@ class SettingsViewModel(private val userRepository: UserRepository) : BaseViewMo
)
)
}
fun toggleAdultContentVisible() {
val adultContentVisible = SharedPreferenceManager.isAdultContentVisible
_isAdultContentVisible.value = !adultContentVisible
SharedPreferenceManager.isAdultContentVisible = !adultContentVisible
isChangedAdultContentVisible = true
}
fun setAdultContentPreference(adultContentPreference: ContentType) {
_adultContentPreference.value = adultContentPreference
SharedPreferenceManager.contentPreference = adultContentPreference.ordinal
isChangedAdultContentVisible = true
}
}

View File

@ -0,0 +1,113 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"
android:orientation="vertical">
<include
android:id="@+id/toolbar"
layout="@layout/detail_toolbar" />
<LinearLayout
android:id="@+id/ll_adult_content_visible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13.3dp"
android:layout_marginTop="13.3dp"
android:background="@drawable/bg_round_corner_6_7_222222"
android:orientation="vertical"
android:visibility="gone">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingVertical="16.7dp"
android:paddingStart="16.7dp"
android:paddingEnd="13.3dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_bold"
android:text="민감한 콘텐츠 보기"
android:textColor="@color/color_eeeeee"
android:textSize="14.7sp" />
<ImageView
android:id="@+id/iv_adult_content_visible"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:contentDescription="@null"
android:src="@drawable/btn_toggle_on_big" />
</RelativeLayout>
<LinearLayout
android:id="@+id/ll_adult_content_preference"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginHorizontal="13.3dp"
android:background="@color/color_88909090" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingHorizontal="16.7dp"
android:paddingVertical="13.3dp">
<TextView
android:id="@+id/tv_content_all"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:drawablePadding="13.3dp"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center_vertical"
android:text="전체"
android:textColor="@color/color_eeeeee"
android:textSize="13.3sp"
app:drawableStartCompat="@drawable/ic_radio_button_select" />
<TextView
android:id="@+id/tv_content_male"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="8dp"
android:layout_weight="1"
android:button="@null"
android:drawablePadding="13.3dp"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center_vertical"
android:text="남성향"
android:textColor="@color/color_eeeeee"
android:textSize="13.3sp"
app:drawableStartCompat="@drawable/ic_radio_button_select" />
<TextView
android:id="@+id/tv_content_female"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:drawablePadding="13.3dp"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center_vertical"
android:text="여성향"
android:textColor="@color/color_eeeeee"
android:textSize="13.3sp"
app:drawableStartCompat="@drawable/ic_radio_button_select" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -122,11 +121,40 @@
</RelativeLayout>
</LinearLayout>
<RelativeLayout
android:id="@+id/rl_content_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13.3dp"
android:layout_marginTop="13.3dp"
android:background="@drawable/bg_round_corner_6_7_222222"
android:paddingVertical="16.7dp"
android:paddingStart="16.7dp"
android:paddingEnd="13.3dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_bold"
android:text="콘텐츠 보기 설정"
android:textColor="@color/color_eeeeee"
android:textSize="14.7sp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:contentDescription="@null"
android:src="@drawable/ic_forward" />
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13.3dp"
android:layout_marginTop="26.7dp"
android:layout_marginTop="13.3dp"
android:background="@drawable/bg_round_corner_6_7_222222"
android:orientation="vertical">
@ -223,117 +251,6 @@
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_adult_content_visible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13.3dp"
android:layout_marginTop="26.7dp"
android:background="@drawable/bg_round_corner_6_7_222222"
android:orientation="vertical"
android:visibility="gone">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingVertical="16.7dp"
android:paddingStart="16.7dp"
android:paddingEnd="13.3dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_bold"
android:text="19금 콘텐츠 보기"
android:textColor="@color/color_eeeeee"
android:textSize="14.7sp" />
<ImageView
android:id="@+id/iv_adult_content_visible"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:contentDescription="@null"
android:src="@drawable/btn_toggle_on_big" />
</RelativeLayout>
<LinearLayout
android:id="@+id/ll_adult_content_preference"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginHorizontal="13.3dp"
android:background="@color/color_88909090" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold"
android:paddingHorizontal="16.7dp"
android:paddingTop="16.7dp"
android:text="콘텐츠 유형"
android:textColor="@color/color_eeeeee"
android:textSize="14.7sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingHorizontal="16.7dp"
android:paddingVertical="13.3dp">
<TextView
android:id="@+id/tv_content_all"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:drawablePadding="13.3dp"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center_vertical"
android:text="전체"
android:textColor="@color/color_eeeeee"
android:textSize="13.3sp"
app:drawableStartCompat="@drawable/ic_radio_button_select" />
<TextView
android:id="@+id/tv_content_male"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="8dp"
android:layout_weight="1"
android:button="@null"
android:drawablePadding="13.3dp"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center_vertical"
android:text="남성향"
android:textColor="@color/color_eeeeee"
android:textSize="13.3sp"
app:drawableStartCompat="@drawable/ic_radio_button_select" />
<TextView
android:id="@+id/tv_content_female"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:drawablePadding="13.3dp"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center_vertical"
android:text="여성향"
android:textColor="@color/color_eeeeee"
android:textSize="13.3sp"
app:drawableStartCompat="@drawable/ic_radio_button_select" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"