普通签到逻辑
This commit is contained in:
parent
2ef5e5deab
commit
4843f71574
|
|
@ -10,13 +10,15 @@ import com.gamedog.vididin.widget.DailySignItemView
|
||||||
|
|
||||||
class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(context, DialogDailySignBinding::inflate) {
|
class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(context, DialogDailySignBinding::inflate) {
|
||||||
private var mCurDayIndex: Int = 0
|
private var mCurDayIndex: Int = 0
|
||||||
private var mDataList: List<RewardDetail>? = emptyList()
|
private var mSelectedDayIndex: Int = 0
|
||||||
private var mSignItemList: MutableList<DailySignItemView> = mutableListOf()
|
private var mRewardDetailList: List<RewardDetail>? = emptyList()
|
||||||
|
private var mSignItemViewList: MutableList<DailySignItemView> = mutableListOf()
|
||||||
|
private var mSignStateList: MutableList<DailySignItemView> = mutableListOf()
|
||||||
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
build()
|
build()
|
||||||
mDataList = TaskManager.instance().getDailyCheckInTask()?.reward_details
|
mRewardDetailList = TaskManager.instance().getDailyCheckInTask()?.reward_details
|
||||||
initSignItemViews()
|
initSignItemViews()
|
||||||
initSignState()
|
initSignState()
|
||||||
}
|
}
|
||||||
|
|
@ -30,13 +32,16 @@ class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(
|
||||||
|
|
||||||
|
|
||||||
mBinding.run {
|
mBinding.run {
|
||||||
setOnClickBatch(butLeft, butRight, ivClose) {
|
setOnClickBatch(butSign, butWatchAd, ivClose) {
|
||||||
when (this) {
|
when (this) {
|
||||||
butLeft, ivClose -> {
|
ivClose -> {
|
||||||
dismiss()
|
dismiss()
|
||||||
}
|
}
|
||||||
butRight -> {
|
butSign -> {
|
||||||
handleRightButClicked()
|
handleNormalSignClicked()
|
||||||
|
}
|
||||||
|
butWatchAd -> {
|
||||||
|
gotoWatchAdPage()
|
||||||
dismiss()
|
dismiss()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -44,22 +49,29 @@ class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun handleNormalSignClicked() {
|
||||||
|
val rewardConfig = mRewardDetailList?.get(mSelectedDayIndex)
|
||||||
|
if (TaskManager.instance().executeDailySign(mSelectedDayIndex, rewardConfig?.value ?: 0)) {
|
||||||
|
DailySignSuccessDialog(context).setRewardNum(mRewardDetailList?.get(mCurDayIndex)?.value).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun initSignItemViews() {
|
private fun initSignItemViews() {
|
||||||
with(mBinding) {
|
with(mBinding) {
|
||||||
signItem7.setLargeWidthMode()
|
signItem7.setLargeWidthMode()
|
||||||
|
|
||||||
mSignItemList.add(signItem1)
|
mSignItemViewList.add(signItem1)
|
||||||
mSignItemList.add(signItem2)
|
mSignItemViewList.add(signItem2)
|
||||||
mSignItemList.add(signItem3)
|
mSignItemViewList.add(signItem3)
|
||||||
mSignItemList.add(signItem4)
|
mSignItemViewList.add(signItem4)
|
||||||
mSignItemList.add(signItem5)
|
mSignItemViewList.add(signItem5)
|
||||||
mSignItemList.add(signItem6)
|
mSignItemViewList.add(signItem6)
|
||||||
mSignItemList.add(signItem7)
|
mSignItemViewList.add(signItem7)
|
||||||
|
|
||||||
mDataList?.let {
|
mRewardDetailList?.let {
|
||||||
mSignItemList.forEachIndexed { index, itemView->
|
mSignItemViewList.forEachIndexed { index, itemView->
|
||||||
itemView.setData(mDataList!![index], { isSelected ->
|
itemView.setData(mRewardDetailList!![index], { isSelected ->
|
||||||
handleItemSelectStateChanged(index, isSelected)
|
handleItemSelectStateChanged(index, isSelected)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -69,11 +81,13 @@ class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(
|
||||||
|
|
||||||
private fun initSignState() {
|
private fun initSignState() {
|
||||||
mCurDayIndex = TaskManager.instance().getCurDayIndexOfDailyCheckIn()
|
mCurDayIndex = TaskManager.instance().getCurDayIndexOfDailyCheckIn()
|
||||||
mSignItemList[mCurDayIndex].setSelectState(true)
|
mSelectedDayIndex = mCurDayIndex
|
||||||
|
mSignItemViewList[mCurDayIndex].setSelectState(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleItemSelectStateChanged(itemIndex: Int, selected: Boolean) {
|
private fun handleItemSelectStateChanged(itemIndex: Int, selected: Boolean) {
|
||||||
mSignItemList.forEachIndexed { index, itemView ->
|
mSelectedDayIndex = itemIndex
|
||||||
|
mSignItemViewList.forEachIndexed { index, itemView ->
|
||||||
if (itemIndex != index) {
|
if (itemIndex != index) {
|
||||||
itemView.setSelectState(false)
|
itemView.setSelectState(false)
|
||||||
}
|
}
|
||||||
|
|
@ -81,7 +95,7 @@ class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun handleRightButClicked() {
|
private fun gotoWatchAdPage() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
package com.gamedog.vididin.main.fragments.task
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import com.ama.core.architecture.util.setOnClickBatch
|
||||||
|
import com.ama.core.architecture.widget.BindingDialog
|
||||||
|
import com.gamedog.vididin.databinding.DialogDailySignSuccessBinding as ViewBinding
|
||||||
|
|
||||||
|
|
||||||
|
class DailySignSuccessDialog(context: Context) : BindingDialog<ViewBinding>(context, ViewBinding::inflate) {
|
||||||
|
|
||||||
|
init {
|
||||||
|
build()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun build() {
|
||||||
|
with()
|
||||||
|
setCenter()
|
||||||
|
setCanCancel(false)
|
||||||
|
setMaskValue(0.9f)
|
||||||
|
setWidthRatio(0.93)
|
||||||
|
|
||||||
|
|
||||||
|
mBinding.run {
|
||||||
|
setOnClickBatch(flAction, ivClose) {
|
||||||
|
when (this) {
|
||||||
|
ivClose -> {
|
||||||
|
dismiss()
|
||||||
|
}
|
||||||
|
flAction -> {
|
||||||
|
dismiss()
|
||||||
|
gotoWatchAdPage()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun gotoWatchAdPage() {
|
||||||
|
//TODO("Not yet implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setRewardNum(goldNum: Int?) : DailySignSuccessDialog {
|
||||||
|
mBinding.tvGoldNum.text = "+$goldNum"
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -41,12 +41,13 @@ class TaskManager private constructor() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private var mCurDayIndexDailySign: Int = 0
|
||||||
private val mutex = Mutex()
|
private val mutex = Mutex()
|
||||||
|
|
||||||
@Volatile
|
@Volatile
|
||||||
private var initialized = false
|
private var initialized = false
|
||||||
private var mTaskConfig: TaskBean? = null
|
private var mTaskConfig: TaskBean? = null
|
||||||
private var mTaskBean: TaskStateBean = TaskStateBean(DailySignBean())
|
private var mDailySignData: DailySignBean = DailySignBean()
|
||||||
private val mGson = GsonBuilder().create()
|
private val mGson = GsonBuilder().create()
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -67,7 +68,7 @@ class TaskManager private constructor() {
|
||||||
mutex.withLock {
|
mutex.withLock {
|
||||||
if (!initialized) {
|
if (!initialized) {
|
||||||
loadTaskConfigFromAsset()
|
loadTaskConfigFromAsset()
|
||||||
loadTaskStateFromSp()
|
loadTaskStatesFromSp()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -82,13 +83,13 @@ class TaskManager private constructor() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private suspend fun loadTaskStateFromSp() {
|
private suspend fun loadTaskStatesFromSp() {
|
||||||
return withContext(Dispatchers.IO) {
|
return withContext(Dispatchers.IO) {
|
||||||
val taskStateBeanInSp = SpUtil.instance().getObject<TaskStateBean>(SpUtil.KEY_TASK_BEAN)
|
val taskStateBeanInSp = SpUtil.instance().getObject<DailySignBean>(SpUtil.KEY_TASK_BEAN)
|
||||||
if (taskStateBeanInSp == null) {
|
if (taskStateBeanInSp == null) {
|
||||||
SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mTaskBean)
|
SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mDailySignData)
|
||||||
} else {
|
} else {
|
||||||
mTaskBean = taskStateBeanInSp
|
mDailySignData = taskStateBeanInSp
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -138,22 +139,39 @@ class TaskManager private constructor() {
|
||||||
|
|
||||||
|
|
||||||
fun getCurDayIndexOfDailyCheckIn() : Int {
|
fun getCurDayIndexOfDailyCheckIn() : Int {
|
||||||
val periodStartMs = mTaskBean.dailySignBean.startMs
|
var dayIndexOfPeriod = 0
|
||||||
|
|
||||||
|
val periodStartMs = mDailySignData.startMs
|
||||||
if (periodStartMs > 0) {
|
if (periodStartMs > 0) {
|
||||||
val dayIndexOfPeriod = DateUtil.getPassedDayNum(periodStartMs, DateUtil.getCurTimeMs())
|
dayIndexOfPeriod = DateUtil.getPassedDayNum(periodStartMs, DateUtil.getCurTimeMs())
|
||||||
if (dayIndexOfPeriod > 6) {
|
if (dayIndexOfPeriod > 6) {
|
||||||
mTaskBean.dailySignBean.startMs = DateUtil.getCurTimeMs()
|
mDailySignData.startMs = DateUtil.getCurTimeMs()
|
||||||
SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mTaskBean)
|
SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mDailySignData)
|
||||||
}
|
}
|
||||||
return dayIndexOfPeriod
|
|
||||||
} else {
|
} else {
|
||||||
mTaskBean.dailySignBean.startMs = DateUtil.getCurTimeMs()
|
mDailySignData.startMs = DateUtil.getCurTimeMs()
|
||||||
SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mTaskBean)
|
SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mDailySignData)
|
||||||
return 0
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mCurDayIndexDailySign = dayIndexOfPeriod
|
||||||
|
return dayIndexOfPeriod
|
||||||
|
}
|
||||||
|
|
||||||
|
fun executeDailySign(dayIndex: Int, rewardNum: Int) : Boolean {
|
||||||
|
val daySignState = mDailySignData.signStateList[dayIndex]
|
||||||
|
if ((dayIndex == mCurDayIndexDailySign && daySignState.signState == DailySignBean.SIGN_STATE_ENABLE)
|
||||||
|
|| (daySignState.isComplementEnable)) {
|
||||||
|
daySignState.signState = DailySignBean.SIGN_STATE_DONE
|
||||||
|
daySignState.rewardNum += rewardNum
|
||||||
|
saveDailySignInfo()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun saveDailySignInfo() {
|
||||||
|
SpUtil.instance().putObject(SpUtil.KEY_DAILY_SIGN, mDailySignData)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,32 +1,40 @@
|
||||||
package com.gamedog.vididin.manager
|
package com.gamedog.vididin.manager
|
||||||
|
|
||||||
import com.ama.core.architecture.util.DateUtil
|
import com.gamedog.vididin.manager.DailySignBean.Companion.SIGN_STATE_DISABLE
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
||||||
|
|
||||||
data class TaskStateBean(
|
|
||||||
val dailySignBean: DailySignBean
|
|
||||||
): Serializable
|
|
||||||
|
|
||||||
|
|
||||||
data class DailySignBean(
|
data class DailySignBean(
|
||||||
var startMs: Long = 0,
|
var startMs: Long = 0,
|
||||||
val signStateList: MutableList<Int> = mutableListOf()
|
val signStateList: MutableList<DailySignDayInfoBean> = mutableListOf()
|
||||||
|
|
||||||
): Serializable {
|
): Serializable {
|
||||||
companion object{
|
companion object{
|
||||||
const val SIGN_STATE_ENABLE = 1
|
const val SIGN_STATE_ENABLE = 1
|
||||||
const val SIGN_STATE_WAIT = 2
|
const val SIGN_STATE_DISABLE = 2
|
||||||
const val SIGN_STATE_FORGOT = 3
|
const val SIGN_STATE_DONE = 3
|
||||||
|
const val SIGN_STATE_FORGOT = 4
|
||||||
}
|
}
|
||||||
|
|
||||||
init {
|
init {
|
||||||
signStateList.add(SIGN_STATE_ENABLE)
|
signStateList.add(DailySignDayInfoBean(signState = SIGN_STATE_ENABLE))
|
||||||
signStateList.add(SIGN_STATE_WAIT)
|
signStateList.add(DailySignDayInfoBean())
|
||||||
signStateList.add(SIGN_STATE_WAIT)
|
signStateList.add(DailySignDayInfoBean())
|
||||||
signStateList.add(SIGN_STATE_WAIT)
|
signStateList.add(DailySignDayInfoBean())
|
||||||
signStateList.add(SIGN_STATE_WAIT)
|
signStateList.add(DailySignDayInfoBean())
|
||||||
signStateList.add(SIGN_STATE_WAIT)
|
signStateList.add(DailySignDayInfoBean())
|
||||||
signStateList.add(SIGN_STATE_WAIT)
|
signStateList.add(DailySignDayInfoBean())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
data class DailySignDayInfoBean(
|
||||||
|
var signState: Int = SIGN_STATE_DISABLE,
|
||||||
|
var rewardNum: Int = 0,
|
||||||
|
var finishExtraAd: Boolean = false,
|
||||||
|
var isComplementEnable: Boolean = false, // 补签
|
||||||
|
): Serializable
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ class DailySignItemView @JvmOverloads constructor(
|
||||||
init {
|
init {
|
||||||
mBinding = DailySignItemBinding.inflate(LayoutInflater.from(context), this, true)
|
mBinding = DailySignItemBinding.inflate(LayoutInflater.from(context), this, true)
|
||||||
mBinding.run {
|
mBinding.run {
|
||||||
setOnClickBatch(contentRoot) {
|
setOnClickBatch(contentRoot, ) {
|
||||||
when(this) {
|
when(this) {
|
||||||
contentRoot -> {
|
contentRoot -> {
|
||||||
if (!mIsSelected) {
|
if (!mIsSelected) {
|
||||||
|
|
|
||||||
|
|
@ -151,7 +151,7 @@
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
android:id="@+id/but_left"
|
android:id="@+id/but_sign"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="42dp"
|
android:layout_height="42dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
|
|
@ -164,7 +164,7 @@
|
||||||
|
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:id="@+id/but_right"
|
android:id="@+id/but_watch_ad"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="10dp"
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,101 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="20dp"
|
||||||
|
android:src="@mipmap/temp"/>
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/tv_desc"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:text="@string/sign_success_desc"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="24dp">
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:src="@mipmap/watch_video_gold_effect"/>
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/tv_gold_num"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:layout_marginTop="20dp"
|
||||||
|
android:textSize="40sp"
|
||||||
|
android:textColor="@color/yellow_00"
|
||||||
|
android:text="+100"
|
||||||
|
/>
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@+id/fl_action"
|
||||||
|
android:layout_width="300dp"
|
||||||
|
android:layout_height="54dp"
|
||||||
|
android:layout_marginTop="24dp"
|
||||||
|
android:paddingHorizontal="20dp"
|
||||||
|
android:background="@mipmap/icon_action_but_bg">
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:gravity="center_vertical">
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:textSize="18sp"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:text="@string/assistir"
|
||||||
|
android:drawableLeft="@mipmap/task_video"
|
||||||
|
android:drawablePadding="5dp"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:layout_marginLeft="15dp"
|
||||||
|
android:textSize="21sp"
|
||||||
|
android:textColor="@color/yellow_00"
|
||||||
|
android:text="+100"
|
||||||
|
android:drawableStart="@mipmap/task_gold"
|
||||||
|
android:drawablePadding="5dp"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/iv_close"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="64dp"
|
||||||
|
android:src="@mipmap/icon_close"/>
|
||||||
|
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -63,6 +63,7 @@
|
||||||
<string name="privacy">Privacy</string>
|
<string name="privacy">Privacy</string>
|
||||||
<string name="version">Version\n</string>
|
<string name="version">Version\n</string>
|
||||||
<string name="title_cash_record">Dinheiro</string>
|
<string name="title_cash_record">Dinheiro</string>
|
||||||
|
<string name="sign_success_desc">Você ganhou uma recompensa!</string>
|
||||||
|
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
@ -15,6 +15,7 @@ class SpUtil private constructor(spFileName: String) {
|
||||||
const val KEY_ACCOUNT = "KEY_ACCOUNT"
|
const val KEY_ACCOUNT = "KEY_ACCOUNT"
|
||||||
const val KEY_ACCOUNT_TOKEN = "KEY_ACCOUNT_TOKEN"
|
const val KEY_ACCOUNT_TOKEN = "KEY_ACCOUNT_TOKEN"
|
||||||
const val KEY_TASK_BEAN = "KEY_TASK_BEAN"
|
const val KEY_TASK_BEAN = "KEY_TASK_BEAN"
|
||||||
|
const val KEY_DAILY_SIGN = "KEY_DAILY_SIGN"
|
||||||
|
|
||||||
private const val DEFAULT_SP_NAME = "enhanced_prefs"
|
private const val DEFAULT_SP_NAME = "enhanced_prefs"
|
||||||
@Volatile
|
@Volatile
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue