diff --git a/app/src/main/java/kr/co/vividnext/sodalive/common/Constants.kt b/app/src/main/java/kr/co/vividnext/sodalive/common/Constants.kt index 0878264..40cff7b 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/common/Constants.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/common/Constants.kt @@ -11,7 +11,9 @@ object Constants { const val PREF_NO_CHAT_ROOM = "pref_no_chat" const val PREF_PUSH_TOKEN = "pref_push_token" const val PREF_PROFILE_IMAGE = "pref_profile_image" + const val PREF_CONTENT_PREFERENCE = "pref_content_preference" const val PREF_IS_CONTENT_PLAY_LOOP = "pref_is_content_play_loop" + const val PREF_IS_ADULT_CONTENT_VISIBLE = "pref_is_adult_content_visible" const val PREF_IS_FOLLOWED_CREATOR_LIVE = "pref_is_followed_creator_live" const val PREF_NOT_SHOWING_EVENT_POPUP_ID = "pref_not_showing_event_popup_id" const val PREF_IS_VIEWED_ON_BOARDING_TUTORIAL = "pref_is_viewed_on_boarding_tutorial" diff --git a/app/src/main/java/kr/co/vividnext/sodalive/common/SharedPreferenceManager.kt b/app/src/main/java/kr/co/vividnext/sodalive/common/SharedPreferenceManager.kt index 02ddf57..e794898 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/common/SharedPreferenceManager.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/common/SharedPreferenceManager.kt @@ -95,6 +95,18 @@ object SharedPreferenceManager { sharedPreferences[Constants.PREF_IS_ADULT] = value } + var isAdultContentVisible: Boolean + get() = sharedPreferences[Constants.PREF_IS_ADULT_CONTENT_VISIBLE, true] + set(value) { + sharedPreferences[Constants.PREF_IS_ADULT_CONTENT_VISIBLE] = value + } + + var contentPreference: Int + get() = sharedPreferences[Constants.PREF_CONTENT_PREFERENCE, 0] + set(value) { + sharedPreferences[Constants.PREF_CONTENT_PREFERENCE] = value + } + var pushToken: String get() = sharedPreferences[Constants.PREF_PUSH_TOKEN, ""] set(value) { diff --git a/app/src/main/java/kr/co/vividnext/sodalive/settings/ContentType.kt b/app/src/main/java/kr/co/vividnext/sodalive/settings/ContentType.kt new file mode 100644 index 0000000..1012ac6 --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/settings/ContentType.kt @@ -0,0 +1,12 @@ +package kr.co.vividnext.sodalive.settings + +enum class ContentType { + // 전체 + ALL, + + // 남성향 + MALE, + + // 여성향 + FEMALE +} diff --git a/app/src/main/java/kr/co/vividnext/sodalive/settings/SettingsActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/settings/SettingsActivity.kt index 556dad2..184a417 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/settings/SettingsActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/settings/SettingsActivity.kt @@ -4,10 +4,12 @@ import android.annotation.SuppressLint import android.content.Intent import android.graphics.Paint import android.os.Bundle +import android.view.View 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 @@ -126,6 +128,42 @@ 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() { @@ -140,6 +178,29 @@ 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() { diff --git a/app/src/main/java/kr/co/vividnext/sodalive/settings/SettingsViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/settings/SettingsViewModel.kt index f98a3b6..cdedf91 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/settings/SettingsViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/settings/SettingsViewModel.kt @@ -18,6 +18,20 @@ 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}") @@ -71,4 +85,17 @@ 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 + } } diff --git a/app/src/main/res/drawable-xxhdpi/btn_radio_select_normal.png b/app/src/main/res/drawable-xxhdpi/btn_radio_select_normal.png index 40f508a..c27ca43 100644 Binary files a/app/src/main/res/drawable-xxhdpi/btn_radio_select_normal.png and b/app/src/main/res/drawable-xxhdpi/btn_radio_select_normal.png differ diff --git a/app/src/main/res/drawable-xxhdpi/btn_radio_select_selected.png b/app/src/main/res/drawable-xxhdpi/btn_radio_select_selected.png index 57f23d1..6f39bbc 100644 Binary files a/app/src/main/res/drawable-xxhdpi/btn_radio_select_selected.png and b/app/src/main/res/drawable-xxhdpi/btn_radio_select_selected.png differ diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index f759fc2..18cd24e 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -1,5 +1,6 @@ <?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" @@ -219,9 +220,118 @@ android:layout_centerVertical="true" android:contentDescription="@null" android:src="@drawable/ic_forward" /> + </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