调整签到逻辑

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.widget.BindingDialog
import com.gamedog.vididin.databinding.DialogDailySignBinding
import com.gamedog.vididin.manager.DailySignBean
import com.gamedog.vididin.manager.TaskManager
import com.gamedog.vididin.widget.DailySignItemView
class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(context, DialogDailySignBinding::inflate) {
private var mCurDayIndex: Int = 0
private var mSelectedDayIndex: Int = 0
private var mRewardDetailList: List<RewardDetail>? = emptyList()
private var mConfigList: List<RewardDetail>? = emptyList()
private var mSignItemViewList: MutableList<DailySignItemView> = mutableListOf()
init {
build()
mRewardDetailList = TaskManager.instance().getDailyCheckInTask()?.reward_details
mConfigList = TaskManager.instance().getDailyCheckInTask()?.reward_details
initSignItemViews()
initSignState()
}
@ -33,30 +31,74 @@ class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(
mBinding.run {
setOnClickBatch(butSign, butWatchAd, ivClose) {
setOnClickBatch(butSign, butWatchAd, actionComplement, actionWatchAd, ivClose) {
when (this) {
ivClose -> {
dismiss()
}
butSign -> {
handleNormalSignClicked()
clickedNormalSign()
}
butWatchAd -> {
gotoWatchAdPage()
dismiss()
clickedAdDoubleBut()
}
actionWatchAd -> {
clickedAdSingleBut()
}
actionComplement -> {
clickedComplementSign()
}
}
}
}
}
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 clickedNormalSign() {
if (TaskManager.instance().executeDailySign(mCurDayIndex, false, false)) {
DailySignSuccessDialog(context).initData(mConfigList?.get(mCurDayIndex)?.value, true).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() {
with(mBinding) {
@ -70,9 +112,9 @@ class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(
mSignItemViewList.add(signItem6)
mSignItemViewList.add(signItem7)
mRewardDetailList?.let {
mConfigList?.let {
mSignItemViewList.forEachIndexed { index, itemView->
itemView.setData(mRewardDetailList!![index],
itemView.setData(mConfigList!![index],
TaskManager.instance().getDailySignStateBean(index))
}
}
@ -81,7 +123,6 @@ class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(
private fun initSignState() {
mCurDayIndex = TaskManager.instance().getCurDayIndexOfDailyCheckIn()
mSelectedDayIndex = mCurDayIndex
mSignItemViewList[mCurDayIndex].setSelectState(true)
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
import android.content.Context
import androidx.core.view.isVisible
import com.ama.core.architecture.util.setOnClickBatch
import com.ama.core.architecture.widget.BindingDialog
import com.gamedog.vididin.databinding.DialogDailySignSuccessBinding as ViewBinding
@ -39,8 +40,9 @@ class DailySignSuccessDialog(context: Context) : BindingDialog<ViewBinding>(cont
//TODO("Not yet implemented")
}
fun setRewardNum(goldNum: Int?) : DailySignSuccessDialog {
fun initData(goldNum: Int?, showAdBut: Boolean) : DailySignSuccessDialog {
mBinding.tvGoldNum.text = "+$goldNum"
mBinding.flAction.isVisible = showAdBut
return this
}

View File

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