调整签到逻辑

This commit is contained in:
renhaoting 2025-11-26 18:39:20 +08:00
parent 3bcd4383e0
commit 6edf63abf5
3 changed files with 84 additions and 23 deletions

View File

@ -5,21 +5,19 @@ import androidx.core.view.isVisible
import com.ama.core.architecture.util.setOnClickBatch import com.ama.core.architecture.util.setOnClickBatch
import com.ama.core.architecture.widget.BindingDialog import com.ama.core.architecture.widget.BindingDialog
import com.gamedog.vididin.databinding.DialogDailySignBinding import com.gamedog.vididin.databinding.DialogDailySignBinding
import com.gamedog.vididin.manager.DailySignBean
import com.gamedog.vididin.manager.TaskManager import com.gamedog.vididin.manager.TaskManager
import com.gamedog.vididin.widget.DailySignItemView 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 mSelectedDayIndex: Int = 0 private var mConfigList: List<RewardDetail>? = emptyList()
private var mRewardDetailList: List<RewardDetail>? = emptyList()
private var mSignItemViewList: MutableList<DailySignItemView> = mutableListOf() private var mSignItemViewList: MutableList<DailySignItemView> = mutableListOf()
init { init {
build() build()
mRewardDetailList = TaskManager.instance().getDailyCheckInTask()?.reward_details mConfigList = TaskManager.instance().getDailyCheckInTask()?.reward_details
initSignItemViews() initSignItemViews()
initSignState() initSignState()
} }
@ -33,30 +31,74 @@ class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(
mBinding.run { mBinding.run {
setOnClickBatch(butSign, butWatchAd, ivClose) { setOnClickBatch(butSign, butWatchAd, actionComplement, actionWatchAd, ivClose) {
when (this) { when (this) {
ivClose -> { ivClose -> {
dismiss() dismiss()
} }
butSign -> { butSign -> {
handleNormalSignClicked() clickedNormalSign()
} }
butWatchAd -> { butWatchAd -> {
gotoWatchAdPage() clickedAdDoubleBut()
dismiss() }
actionWatchAd -> {
clickedAdSingleBut()
}
actionComplement -> {
clickedComplementSign()
} }
} }
} }
} }
} }
private fun handleNormalSignClicked() { private fun clickedNormalSign() {
val rewardConfig = mRewardDetailList?.get(mSelectedDayIndex) if (TaskManager.instance().executeDailySign(mCurDayIndex, false, false)) {
if (TaskManager.instance().executeDailySign(mSelectedDayIndex, rewardConfig?.value ?: 0)) { DailySignSuccessDialog(context).initData(mConfigList?.get(mCurDayIndex)?.value, true).show()
DailySignSuccessDialog(context).setRewardNum(mRewardDetailList?.get(mCurDayIndex)?.value).show()
} }
} }
private fun clickedAdSingleBut() {
startAdTask("signalAd", {
if (TaskManager.instance().executeDailySign(mCurDayIndex, false, true)) {
DailySignSuccessDialog(context).initData(mConfigList?.get(mCurDayIndex)?.value, false).show()
}
})
}
private fun clickedAdDoubleBut() {
startAdTask("doubleAd", {
if (TaskManager.instance().executeDailySign(mCurDayIndex, true, true)) {
DailySignSuccessDialog(context).initData(mConfigList?.get(mCurDayIndex)?.value, false).show()
}
})
}
private fun clickedComplementSign() {
val firstForgotSignDayIndex = TaskManager.instance().getForgotSignFirstDayIndex()
if (firstForgotSignDayIndex > 0) {
startAdTask("complementAd", {
if (TaskManager.instance().executeDailySign(firstForgotSignDayIndex, false, false)){
DailySignSuccessDialog(context).initData(mConfigList?.get(mCurDayIndex)?.value, false).show()
}
})
} else {
updateUI()
}
}
private fun startAdTask(taskUUid: String, completeCallback: ()->Unit) {
// start ad page with uuidKey, register notify of ad done event
completeCallback.invoke()
}
private fun initSignItemViews() { private fun initSignItemViews() {
with(mBinding) { with(mBinding) {
@ -70,9 +112,9 @@ class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(
mSignItemViewList.add(signItem6) mSignItemViewList.add(signItem6)
mSignItemViewList.add(signItem7) mSignItemViewList.add(signItem7)
mRewardDetailList?.let { mConfigList?.let {
mSignItemViewList.forEachIndexed { index, itemView-> mSignItemViewList.forEachIndexed { index, itemView->
itemView.setData(mRewardDetailList!![index], itemView.setData(mConfigList!![index],
TaskManager.instance().getDailySignStateBean(index)) TaskManager.instance().getDailySignStateBean(index))
} }
} }
@ -81,7 +123,6 @@ class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(
private fun initSignState() { private fun initSignState() {
mCurDayIndex = TaskManager.instance().getCurDayIndexOfDailyCheckIn() mCurDayIndex = TaskManager.instance().getCurDayIndexOfDailyCheckIn()
mSelectedDayIndex = mCurDayIndex
mSignItemViewList[mCurDayIndex].setSelectState(true) mSignItemViewList[mCurDayIndex].setSelectState(true)
updateUI() updateUI()
} }
@ -121,9 +162,6 @@ class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(
} }
private fun gotoWatchAdPage() {
}
} }

View File

@ -1,6 +1,7 @@
package com.gamedog.vididin.main.fragments.task package com.gamedog.vididin.main.fragments.task
import android.content.Context import android.content.Context
import androidx.core.view.isVisible
import com.ama.core.architecture.util.setOnClickBatch import com.ama.core.architecture.util.setOnClickBatch
import com.ama.core.architecture.widget.BindingDialog import com.ama.core.architecture.widget.BindingDialog
import com.gamedog.vididin.databinding.DialogDailySignSuccessBinding as ViewBinding import com.gamedog.vididin.databinding.DialogDailySignSuccessBinding as ViewBinding
@ -39,8 +40,9 @@ class DailySignSuccessDialog(context: Context) : BindingDialog<ViewBinding>(cont
//TODO("Not yet implemented") //TODO("Not yet implemented")
} }
fun setRewardNum(goldNum: Int?) : DailySignSuccessDialog { fun initData(goldNum: Int?, showAdBut: Boolean) : DailySignSuccessDialog {
mBinding.tvGoldNum.text = "+$goldNum" mBinding.tvGoldNum.text = "+$goldNum"
mBinding.flAction.isVisible = showAdBut
return this return this
} }

View File

@ -1,5 +1,6 @@
package com.gamedog.vididin.manager package com.gamedog.vididin.manager
import android.R
import com.ama.core.architecture.util.DateUtil import com.ama.core.architecture.util.DateUtil
import com.ama.core.architecture.util.FileUtil import com.ama.core.architecture.util.FileUtil
import com.ama.core.architecture.util.SpUtil import com.ama.core.architecture.util.SpUtil
@ -54,6 +55,7 @@ class TaskManager private constructor() {
init { init {
loadTaskConfigAsync() loadTaskConfigAsync()
// TODO - remove test code // TODO - remove test code
if (true) { if (true) {
generateTestDailySignTestBean() generateTestDailySignTestBean()
@ -74,6 +76,8 @@ class TaskManager private constructor() {
if (!initialized) { if (!initialized) {
loadTaskConfigFromAsset() loadTaskConfigFromAsset()
loadTaskStatesFromSp() loadTaskStatesFromSp()
initCalculate()
} }
} }
} }
@ -99,6 +103,10 @@ class TaskManager private constructor() {
} }
} }
private fun initCalculate() {
}
@ -166,12 +174,14 @@ class TaskManager private constructor() {
return mDailySignData.signStateList[dayIndex] return mDailySignData.signStateList[dayIndex]
} }
fun executeDailySign(dayIndex: Int, rewardNum: Int) : Boolean { fun executeDailySign(dayIndex: Int, isDoubleReward: Boolean, isByAd: Boolean) : Boolean {
val daySignState = mDailySignData.signStateList[dayIndex] val daySignState = mDailySignData.signStateList[dayIndex]
if (!daySignState.hasSigned) { if (!daySignState.hasSigned) {
val dayReward = getDailyCheckInTask()?.reward_details?.get(dayIndex)?.value ?: 0
daySignState.hasRewardedNum += if (isDoubleReward) 2*dayReward else dayReward
daySignState.hasSigned = true daySignState.hasSigned = true
daySignState.hasRewardedNum += rewardNum daySignState.hasWatchedAd = isByAd
saveDailySignInfo() saveDailySignInfo()
return true return true
} }
@ -200,14 +210,25 @@ class TaskManager private constructor() {
fun getForgotSignDays(): Int { fun getForgotSignDays(): Int {
var forgotSignDays = 0 var forgotSignDays = 0
mDailySignData.signStateList.forEach { item-> val curDayIndex = getCurDayIndexOfDailyCheckIn()
if (!item.hasSigned) { mDailySignData.signStateList.forEachIndexed { index, item->
if (!item.hasSigned && index < curDayIndex) {
forgotSignDays++ forgotSignDays++
} }
} }
return forgotSignDays return forgotSignDays
} }
fun getForgotSignFirstDayIndex(): Int {
val curDayIndex = getCurDayIndexOfDailyCheckIn()
mDailySignData.signStateList.forEachIndexed { index, item->
if (!item.hasSigned && index < curDayIndex) {
return index
}
}
return -1;
}
} }