光看广告task

This commit is contained in:
renhaoting 2025-12-02 11:21:42 +08:00
parent 0b0805d6bc
commit b07c1cf4ab
7 changed files with 141 additions and 5 deletions

View File

@ -9,8 +9,9 @@ object VididinEvents {
const val Event_HOME_WATCH_Time_TICK = 700
const val Event_Finish_One_Video = 701
const val Event_Finish_One_Ad = 702
const val Event_Toady_Watched_Total = 702
const val Event_Toady_Watched_Total = 703

View File

@ -177,7 +177,7 @@ class TasksFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnTab
}
private fun updateDailyWatchUI() {
val statusBean = TaskManager.instance().dailyWatchStatus().getStatus()
val statusBean = TaskManager.instance().dailyWatchVideoStatus().getStatus()
mDailyWatchVideoTaskViewList.forEachIndexed { index, view ->
view.updateProgress(statusBean.getTodayWatchedCount())
}

View File

@ -9,6 +9,7 @@ import com.gamedog.vididin.main.fragments.task.Task
import com.gamedog.vididin.main.fragments.task.TaskBean
import com.gamedog.vididin.manager.helpers.DailyBoxHelper
import com.gamedog.vididin.manager.helpers.DailySignTaskHelper
import com.gamedog.vididin.manager.helpers.DailyWatchAdTaskHelper
import com.gamedog.vididin.manager.helpers.DailyWatchVideoTaskHelper
import com.gamedog.vididin.manager.helpers.NewbieEnableNotifyHelper
import com.gamedog.vididin.manager.helpers.NewbieFirstWithdrawHelper
@ -55,6 +56,7 @@ class TaskManager private constructor() {
private var mTaskConfig: TaskBean? = null
private val mDailySignTaskHelper by lazy { DailySignTaskHelper() }
private val mDailyWatchVideoTaskHelper by lazy { DailyWatchVideoTaskHelper() }
private val mDailyWatchAdTaskHelper by lazy { DailyWatchAdTaskHelper() }
private val mDailyBoxHelper by lazy { DailyBoxHelper() }
private val mNewbieJoinDiscordHelper by lazy { NewbieJoinDiscordHelper() }
private val mNewbieEnableNotifyHelper by lazy { NewbieEnableNotifyHelper() }
@ -119,6 +121,7 @@ class TaskManager private constructor() {
private suspend fun initHelpers() {
mDailySignTaskHelper.initDatas(getDailyCheckInTask()!!)
mDailyWatchVideoTaskHelper.initDatas(getDailyVideoTask()!!)
mDailyWatchAdTaskHelper.initDatas(getDailyAdTask()!!)
mDailyBoxHelper.initDatas(getDailyVideoTask()!!) // TODO - get right box task config
mNewbieJoinDiscordHelper.initDatas(getNewbieJoinDiscordTask()!!)
mNewbieEnableNotifyHelper.initDatas(getNewbieEnableNotifyTask()!!)
@ -131,10 +134,14 @@ class TaskManager private constructor() {
return mDailySignTaskHelper
}
fun dailyWatchStatus(): DailyWatchVideoTaskHelper {
fun dailyWatchVideoStatus(): DailyWatchVideoTaskHelper {
return mDailyWatchVideoTaskHelper
}
fun dailyWatchAdStatus(): DailyWatchAdTaskHelper {
return mDailyWatchAdTaskHelper
}
fun dailyBoxStatus(): DailyBoxHelper {
return mDailyBoxHelper
}

View File

@ -0,0 +1,72 @@
package com.gamedog.vididin.manager.helpers
import com.ama.core.architecture.util.DateUtil
import com.ama.core.architecture.util.SpUtil
import com.ama.core.architecture.util.eventbus.NotifyMan
import com.gamedog.vididin.VididinEvents
import com.gamedog.vididin.core.login.login.AccountManager
import com.gamedog.vididin.manager.taskbeans.TaskStateWatchAd
class DailyWatchAdTaskHelper : BaseTaskHelper<TaskStateWatchAd>() {
override val mSpKey = SpUtil.KEY_DAILY_WATCH_AD_FOR_GOLD
init {
registerEvents( { eventData->
val watchedAdNum: Int = eventData?.mData as Int
handleOneAdWatched(watchedAdNum)
}, VididinEvents.Event_Finish_One_Ad)
}
override fun loadTaskFromSp() {
val spStateBean = SpUtil.instance().getObject<TaskStateWatchAd>(mSpKey)
if (spStateBean == null || !isTodayStatusBean(spStateBean)) {
generateTodayTask()
saveState2Sp()
} else {
mStateBean = spStateBean
notifyEvents()
}
}
private fun notifyEvents() {
NotifyMan.instance().sendEvent(VididinEvents.Event_Toady_Watched_Total, null)
}
private fun generateTodayTask() {
mStateBean = TaskStateWatchAd(DateUtil.getCurTimeMs())
mStateBean.initSubTaskRewardList(mTaskConfig.reward_details)
}
private fun isTodayStatusBean(stateBean: TaskStateWatchAd): Boolean {
return DateUtil.isToday(stateBean.todayMs)
}
private fun handleOneAdWatched(newAdWatchedNum: Int) {
mStateBean.run {
if (!isAllTaskFinish()) {
addWatchedCount(newAdWatchedNum)
checkSubTaskFinishState()
saveState2Sp()
notifyEvents()
}
}
}
fun checkSubTaskFinishState() {
val todayWatchedCount = mStateBean.getTodayWatchedAdCount()
mStateBean.getSubTaskRewardState().forEachIndexed { index, subTaskState ->
if (!subTaskState.isFinish && todayWatchedCount >= subTaskState.mTargetAdCount) {
AccountManager.addGold(subTaskState.mRewardNum)
subTaskState.isFinish = true
}
}
}
}

View File

@ -10,7 +10,7 @@ import com.gamedog.vididin.manager.taskbeans.DailyStateWatchVideoBean
class DailyWatchVideoTaskHelper : BaseTaskHelper<DailyStateWatchVideoBean>() {
override val mSpKey = SpUtil.KEY_DAILY_WATCH
override val mSpKey = SpUtil.KEY_DAILY_WATCH_VIDEO
init {

View File

@ -0,0 +1,55 @@
package com.gamedog.vididin.manager.taskbeans
import com.gamedog.vididin.main.fragments.task.RewardDetail
import java.io.Serializable
import kotlin.collections.forEach
data class TaskStateWatchAd(
var todayMs: Long = 0,
): Serializable {
private var mWatchAdCount: Int = 0
private val mSubTaskRewardState: MutableList<SubAdTaskBean> = mutableListOf()
fun addWatchedCount(newWatchedNum: Int) {
if (newWatchedNum > 0) {
mWatchAdCount += newWatchedNum
}
}
fun isAllTaskFinish(): Boolean {
return mSubTaskRewardState.all { it.isFinish }
}
fun initSubTaskRewardList(subTasks: List<RewardDetail>) {
mSubTaskRewardState.clear()
subTasks.forEach {
mSubTaskRewardState.add(SubAdTaskBean(it.value, it.target_count, false))
}
}
fun getTodayWatchedAdCount(): Int {
return mWatchAdCount
}
fun getSubTaskRewardState(): List<SubAdTaskBean> {
return mSubTaskRewardState
}
}
data class SubAdTaskBean(
val mRewardNum: Int,
val mTargetAdCount: Int,
var isFinish: Boolean = false,)

View File

@ -22,7 +22,8 @@ class SpUtil private constructor(spFileName: String) {
// Various tasks
const val KEY_DAILY_SIGN = "KEY_DAILY_SIGN"
const val KEY_DAILY_WATCH = "KEY_DAILY_WATCH"
const val KEY_DAILY_WATCH_VIDEO = "KEY_DAILY_WATCH_VIDEO"
const val KEY_DAILY_WATCH_AD_FOR_GOLD = "KEY_DAILY_WATCH_AD_FOR_GOLD"
const val KEY_DAILY_BOX = "KEY_DAILY_BOX"
const val KEY_NEWBIE_FIRST_WITHDRAW = "KEY_NEWBIE_FIRST_WITHDRAW"