From 4843f71574c624d3099c4233bfe61d1085b153d0 Mon Sep 17 00:00:00 2001 From: renhaoting <370797079@qq.com> Date: Wed, 26 Nov 2025 15:31:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=99=AE=E9=80=9A=E7=AD=BE=E5=88=B0=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/fragments/task/DailySignDialog.kt | 54 ++++++---- .../fragments/task/DailySignSuccessDialog.kt | 49 +++++++++ .../gamedog/vididin/manager/TaskManager.kt | 46 +++++--- .../gamedog/vididin/manager/TaskStateBean.kt | 36 ++++--- .../vididin/widget/DailySignItemView.kt | 2 +- app/src/main/res/layout/dialog_daily_sign.xml | 4 +- .../res/layout/dialog_daily_sign_success.xml | 101 ++++++++++++++++++ app/src/main/res/values/strings.xml | 1 + .../com/ama/core/architecture/util/SpUtil.kt | 1 + 9 files changed, 243 insertions(+), 51 deletions(-) create mode 100644 app/src/main/java/com/gamedog/vididin/main/fragments/task/DailySignSuccessDialog.kt create mode 100644 app/src/main/res/layout/dialog_daily_sign_success.xml diff --git a/app/src/main/java/com/gamedog/vididin/main/fragments/task/DailySignDialog.kt b/app/src/main/java/com/gamedog/vididin/main/fragments/task/DailySignDialog.kt index 167eb95..5ff0370 100644 --- a/app/src/main/java/com/gamedog/vididin/main/fragments/task/DailySignDialog.kt +++ b/app/src/main/java/com/gamedog/vididin/main/fragments/task/DailySignDialog.kt @@ -10,13 +10,15 @@ import com.gamedog.vididin.widget.DailySignItemView class DailySignDialog(context: Context) : BindingDialog(context, DialogDailySignBinding::inflate) { private var mCurDayIndex: Int = 0 - private var mDataList: List? = emptyList() - private var mSignItemList: MutableList = mutableListOf() + private var mSelectedDayIndex: Int = 0 + private var mRewardDetailList: List? = emptyList() + private var mSignItemViewList: MutableList = mutableListOf() + private var mSignStateList: MutableList = mutableListOf() init { build() - mDataList = TaskManager.instance().getDailyCheckInTask()?.reward_details + mRewardDetailList = TaskManager.instance().getDailyCheckInTask()?.reward_details initSignItemViews() initSignState() } @@ -30,13 +32,16 @@ class DailySignDialog(context: Context) : BindingDialog( mBinding.run { - setOnClickBatch(butLeft, butRight, ivClose) { + setOnClickBatch(butSign, butWatchAd, ivClose) { when (this) { - butLeft, ivClose -> { + ivClose -> { dismiss() } - butRight -> { - handleRightButClicked() + butSign -> { + handleNormalSignClicked() + } + butWatchAd -> { + gotoWatchAdPage() dismiss() } } @@ -44,22 +49,29 @@ class DailySignDialog(context: Context) : BindingDialog( } } + 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() { with(mBinding) { signItem7.setLargeWidthMode() - mSignItemList.add(signItem1) - mSignItemList.add(signItem2) - mSignItemList.add(signItem3) - mSignItemList.add(signItem4) - mSignItemList.add(signItem5) - mSignItemList.add(signItem6) - mSignItemList.add(signItem7) + mSignItemViewList.add(signItem1) + mSignItemViewList.add(signItem2) + mSignItemViewList.add(signItem3) + mSignItemViewList.add(signItem4) + mSignItemViewList.add(signItem5) + mSignItemViewList.add(signItem6) + mSignItemViewList.add(signItem7) - mDataList?.let { - mSignItemList.forEachIndexed { index, itemView-> - itemView.setData(mDataList!![index], { isSelected -> + mRewardDetailList?.let { + mSignItemViewList.forEachIndexed { index, itemView-> + itemView.setData(mRewardDetailList!![index], { isSelected -> handleItemSelectStateChanged(index, isSelected) }) } @@ -69,11 +81,13 @@ class DailySignDialog(context: Context) : BindingDialog( private fun initSignState() { mCurDayIndex = TaskManager.instance().getCurDayIndexOfDailyCheckIn() - mSignItemList[mCurDayIndex].setSelectState(true) + mSelectedDayIndex = mCurDayIndex + mSignItemViewList[mCurDayIndex].setSelectState(true) } private fun handleItemSelectStateChanged(itemIndex: Int, selected: Boolean) { - mSignItemList.forEachIndexed { index, itemView -> + mSelectedDayIndex = itemIndex + mSignItemViewList.forEachIndexed { index, itemView -> if (itemIndex != index) { itemView.setSelectState(false) } @@ -81,7 +95,7 @@ class DailySignDialog(context: Context) : BindingDialog( } - private fun handleRightButClicked() { + private fun gotoWatchAdPage() { } diff --git a/app/src/main/java/com/gamedog/vididin/main/fragments/task/DailySignSuccessDialog.kt b/app/src/main/java/com/gamedog/vididin/main/fragments/task/DailySignSuccessDialog.kt new file mode 100644 index 0000000..cca0162 --- /dev/null +++ b/app/src/main/java/com/gamedog/vididin/main/fragments/task/DailySignSuccessDialog.kt @@ -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(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 + } + + +} + diff --git a/app/src/main/java/com/gamedog/vididin/manager/TaskManager.kt b/app/src/main/java/com/gamedog/vididin/manager/TaskManager.kt index 2623c6a..87a274d 100644 --- a/app/src/main/java/com/gamedog/vididin/manager/TaskManager.kt +++ b/app/src/main/java/com/gamedog/vididin/manager/TaskManager.kt @@ -41,12 +41,13 @@ class TaskManager private constructor() { } + private var mCurDayIndexDailySign: Int = 0 private val mutex = Mutex() @Volatile private var initialized = false private var mTaskConfig: TaskBean? = null - private var mTaskBean: TaskStateBean = TaskStateBean(DailySignBean()) + private var mDailySignData: DailySignBean = DailySignBean() private val mGson = GsonBuilder().create() @@ -67,7 +68,7 @@ class TaskManager private constructor() { mutex.withLock { if (!initialized) { loadTaskConfigFromAsset() - loadTaskStateFromSp() + loadTaskStatesFromSp() } } } @@ -82,13 +83,13 @@ class TaskManager private constructor() { } - private suspend fun loadTaskStateFromSp() { + private suspend fun loadTaskStatesFromSp() { return withContext(Dispatchers.IO) { - val taskStateBeanInSp = SpUtil.instance().getObject(SpUtil.KEY_TASK_BEAN) + val taskStateBeanInSp = SpUtil.instance().getObject(SpUtil.KEY_TASK_BEAN) if (taskStateBeanInSp == null) { - SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mTaskBean) + SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mDailySignData) } else { - mTaskBean = taskStateBeanInSp + mDailySignData = taskStateBeanInSp } } } @@ -138,22 +139,39 @@ class TaskManager private constructor() { fun getCurDayIndexOfDailyCheckIn() : Int { - val periodStartMs = mTaskBean.dailySignBean.startMs + var dayIndexOfPeriod = 0 + val periodStartMs = mDailySignData.startMs if (periodStartMs > 0) { - val dayIndexOfPeriod = DateUtil.getPassedDayNum(periodStartMs, DateUtil.getCurTimeMs()) + dayIndexOfPeriod = DateUtil.getPassedDayNum(periodStartMs, DateUtil.getCurTimeMs()) if (dayIndexOfPeriod > 6) { - mTaskBean.dailySignBean.startMs = DateUtil.getCurTimeMs() - SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mTaskBean) + mDailySignData.startMs = DateUtil.getCurTimeMs() + SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mDailySignData) } - return dayIndexOfPeriod } else { - mTaskBean.dailySignBean.startMs = DateUtil.getCurTimeMs() - SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mTaskBean) - return 0 + mDailySignData.startMs = DateUtil.getCurTimeMs() + SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mDailySignData) } + + 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) + } } diff --git a/app/src/main/java/com/gamedog/vididin/manager/TaskStateBean.kt b/app/src/main/java/com/gamedog/vididin/manager/TaskStateBean.kt index beef8a6..a521c08 100644 --- a/app/src/main/java/com/gamedog/vididin/manager/TaskStateBean.kt +++ b/app/src/main/java/com/gamedog/vididin/manager/TaskStateBean.kt @@ -1,32 +1,40 @@ 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 -data class TaskStateBean( - val dailySignBean: DailySignBean -): Serializable data class DailySignBean( var startMs: Long = 0, - val signStateList: MutableList = mutableListOf() + val signStateList: MutableList = mutableListOf() ): Serializable { companion object{ const val SIGN_STATE_ENABLE = 1 - const val SIGN_STATE_WAIT = 2 - const val SIGN_STATE_FORGOT = 3 + const val SIGN_STATE_DISABLE = 2 + const val SIGN_STATE_DONE = 3 + const val SIGN_STATE_FORGOT = 4 } init { - signStateList.add(SIGN_STATE_ENABLE) - signStateList.add(SIGN_STATE_WAIT) - signStateList.add(SIGN_STATE_WAIT) - signStateList.add(SIGN_STATE_WAIT) - signStateList.add(SIGN_STATE_WAIT) - signStateList.add(SIGN_STATE_WAIT) - signStateList.add(SIGN_STATE_WAIT) + signStateList.add(DailySignDayInfoBean(signState = SIGN_STATE_ENABLE)) + signStateList.add(DailySignDayInfoBean()) + signStateList.add(DailySignDayInfoBean()) + signStateList.add(DailySignDayInfoBean()) + signStateList.add(DailySignDayInfoBean()) + signStateList.add(DailySignDayInfoBean()) + 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 + + diff --git a/app/src/main/java/com/gamedog/vididin/widget/DailySignItemView.kt b/app/src/main/java/com/gamedog/vididin/widget/DailySignItemView.kt index e732531..3c8057d 100644 --- a/app/src/main/java/com/gamedog/vididin/widget/DailySignItemView.kt +++ b/app/src/main/java/com/gamedog/vididin/widget/DailySignItemView.kt @@ -27,7 +27,7 @@ class DailySignItemView @JvmOverloads constructor( init { mBinding = DailySignItemBinding.inflate(LayoutInflater.from(context), this, true) mBinding.run { - setOnClickBatch(contentRoot) { + setOnClickBatch(contentRoot, ) { when(this) { contentRoot -> { if (!mIsSelected) { diff --git a/app/src/main/res/layout/dialog_daily_sign.xml b/app/src/main/res/layout/dialog_daily_sign.xml index fd02d7c..d8f7835 100644 --- a/app/src/main/res/layout/dialog_daily_sign.xml +++ b/app/src/main/res/layout/dialog_daily_sign.xml @@ -151,7 +151,7 @@ android:orientation="horizontal"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a9db752..2a8712e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -63,6 +63,7 @@ Privacy Version\n Dinheiro + Você ganhou uma recompensa! \ No newline at end of file diff --git a/core/architecture/src/main/java/com/ama/core/architecture/util/SpUtil.kt b/core/architecture/src/main/java/com/ama/core/architecture/util/SpUtil.kt index 7eb6d84..58a27cc 100644 --- a/core/architecture/src/main/java/com/ama/core/architecture/util/SpUtil.kt +++ b/core/architecture/src/main/java/com/ama/core/architecture/util/SpUtil.kt @@ -15,6 +15,7 @@ class SpUtil private constructor(spFileName: String) { const val KEY_ACCOUNT = "KEY_ACCOUNT" const val KEY_ACCOUNT_TOKEN = "KEY_ACCOUNT_TOKEN" const val KEY_TASK_BEAN = "KEY_TASK_BEAN" + const val KEY_DAILY_SIGN = "KEY_DAILY_SIGN" private const val DEFAULT_SP_NAME = "enhanced_prefs" @Volatile