调整视频任务完成后 金币获取为主动获取

This commit is contained in:
renhaoting 2025-12-02 17:56:44 +08:00
parent 797d1c01a9
commit ef8d084744
8 changed files with 98 additions and 136 deletions

View File

@ -220,7 +220,7 @@ class TasksFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnTab
val statusBean = TaskManager.instance().dailyWatchAdStatus().getStatusBean() val statusBean = TaskManager.instance().dailyWatchAdStatus().getStatusBean()
val subTaskStatusList = statusBean.getSubTaskRewardState() val subTaskStatusList = statusBean.getSubTaskRewardState()
mDailyWatchAdViewList.forEachIndexed { index, view -> mDailyWatchAdViewList.forEachIndexed { index, view ->
view.updateProgress(statusBean.getTodayWatchedAdCount(), subTaskStatusList[index].state) view.updateProgress(statusBean.getTodayWatchedCount(), subTaskStatusList[index].state)
} }
} }

View File

@ -1,12 +1,17 @@
package com.gamedog.vididin.manager.helpers package com.gamedog.vididin.manager.helpers
import com.ama.core.architecture.util.DateUtil
import com.gamedog.vididin.core.login.login.AccountManager import com.gamedog.vididin.core.login.login.AccountManager
import com.gamedog.vididin.manager.taskbeans.BaseDailyTaskState
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_CLAIMED import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_CLAIMED
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_FINISH import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_FINISH
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_ONGOING import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_ONGOING
import com.gamedog.vididin.manager.taskbeans.TaskStateWatchVideo
import com.gamedog.vididin.manager.taskbeans.TaskStateWatchAd import com.gamedog.vididin.manager.taskbeans.TaskStateWatchAd
abstract class BaseDailyTaskHelper : BaseTaskHelper<TaskStateWatchAd>() {
abstract class BaseDailyTaskHelper<T : BaseDailyTaskState> : BaseTaskHelper<T>() {
abstract protected fun notifyEvents() abstract protected fun notifyEvents()
@ -30,7 +35,7 @@ abstract class BaseDailyTaskHelper : BaseTaskHelper<TaskStateWatchAd>() {
protected fun calculateNewState() { protected fun calculateNewState() {
val todayWatchedCount = mStateBean.getTodayWatchedAdCount() val todayWatchedCount = mStateBean.getTodayWatchedCount()
mStateBean.getSubTaskRewardState().forEachIndexed { index, subTaskState -> mStateBean.getSubTaskRewardState().forEachIndexed { index, subTaskState ->
val targetCount = subTaskState.mTargetAdCount val targetCount = subTaskState.mTargetAdCount
@ -44,16 +49,17 @@ abstract class BaseDailyTaskHelper : BaseTaskHelper<TaskStateWatchAd>() {
} }
} }
protected fun generateTodayTask() {
mStateBean = TaskStateWatchAd(DateUtil.getCurTimeMs()) as T
mStateBean.initSubTaskRewardList(mTaskConfig.reward_details)
}
protected fun handleOneAdWatched(newAdWatchedNum: Int) { protected fun isTodayStatusBean(stateBean: TaskStateWatchAd): Boolean {
mStateBean.run { return DateUtil.isToday(stateBean.todayMs)
if (!isAllTaskFinish()) {
addWatchedCount(newAdWatchedNum)
calculateNewState()
saveState2Sp()
notifyEvents()
}
} }
protected fun isTodayStatusBean(stateBean: TaskStateWatchVideo): Boolean {
return DateUtil.isToday(stateBean.todayMs)
} }
} }

View File

@ -3,6 +3,7 @@ package com.gamedog.vididin.manager.helpers
import com.ama.core.architecture.util.SpUtil import com.ama.core.architecture.util.SpUtil
import com.ama.core.architecture.util.eventbus.NotifyMan import com.ama.core.architecture.util.eventbus.NotifyMan
import com.gamedog.vididin.main.fragments.task.Task import com.gamedog.vididin.main.fragments.task.Task
import com.gamedog.vididin.manager.taskbeans.BaseTaskState
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext

View File

@ -1,13 +1,12 @@
package com.gamedog.vididin.manager.helpers 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.SpUtil
import com.ama.core.architecture.util.eventbus.NotifyMan import com.ama.core.architecture.util.eventbus.NotifyMan
import com.gamedog.vididin.VididinEvents import com.gamedog.vididin.VididinEvents
import com.gamedog.vididin.manager.taskbeans.TaskStateWatchAd import com.gamedog.vididin.manager.taskbeans.TaskStateWatchAd
class DailyWatchAdTaskHelper : BaseDailyTaskHelper() { class DailyWatchAdTaskHelper : BaseDailyTaskHelper<TaskStateWatchAd>() {
override val mSpKey = SpUtil.KEY_DAILY_WATCH_AD_FOR_GOLD override val mSpKey = SpUtil.KEY_DAILY_WATCH_AD_FOR_GOLD
@ -34,15 +33,15 @@ class DailyWatchAdTaskHelper : BaseDailyTaskHelper() {
NotifyMan.instance().sendEvent(VididinEvents.EVENT_DAILY_WATCHED_AD_NUM_CHANGED, null) NotifyMan.instance().sendEvent(VididinEvents.EVENT_DAILY_WATCHED_AD_NUM_CHANGED, null)
} }
private fun handleOneAdWatched(newAdWatchedNum: Int) {
private fun generateTodayTask() { mStateBean.run {
mStateBean = TaskStateWatchAd(DateUtil.getCurTimeMs()) if (!isAllTaskFinish()) {
mStateBean.initSubTaskRewardList(mTaskConfig.reward_details) addWatchedCount(newAdWatchedNum)
calculateNewState()
saveState2Sp()
notifyEvents()
}
} }
private fun isTodayStatusBean(stateBean: TaskStateWatchAd): Boolean {
return DateUtil.isToday(stateBean.todayMs)
} }
} }

View File

@ -1,17 +1,13 @@
package com.gamedog.vididin.manager.helpers 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.SpUtil
import com.ama.core.architecture.util.eventbus.NotifyMan import com.ama.core.architecture.util.eventbus.NotifyMan
import com.gamedog.vididin.VididinEvents import com.gamedog.vididin.VididinEvents
import com.gamedog.vididin.core.login.login.AccountManager import com.gamedog.vididin.manager.taskbeans.TaskStateWatchVideo
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_CLAIMED
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_FINISH
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_ONGOING
import com.gamedog.vididin.manager.taskbeans.DailyStateWatchVideoBean
class DailyWatchVideoTaskHelper : BaseTaskHelper<DailyStateWatchVideoBean>() { class DailyWatchVideoTaskHelper : BaseDailyTaskHelper<TaskStateWatchVideo>() {
override val mSpKey = SpUtil.KEY_DAILY_WATCH_VIDEO override val mSpKey = SpUtil.KEY_DAILY_WATCH_VIDEO
@ -24,7 +20,7 @@ class DailyWatchVideoTaskHelper : BaseTaskHelper<DailyStateWatchVideoBean>() {
} }
override fun loadTaskFromSp() { override fun loadTaskFromSp() {
val spStateBean = SpUtil.instance().getObject<DailyStateWatchVideoBean>(mSpKey) val spStateBean = SpUtil.instance().getObject<TaskStateWatchVideo>(mSpKey)
if (spStateBean == null || !isTodayStatusBean(spStateBean)) { if (spStateBean == null || !isTodayStatusBean(spStateBean)) {
generateTodayTask() generateTodayTask()
saveState2Sp() saveState2Sp()
@ -32,23 +28,22 @@ class DailyWatchVideoTaskHelper : BaseTaskHelper<DailyStateWatchVideoBean>() {
mStateBean = spStateBean mStateBean = spStateBean
notifyEvents() notifyEvents()
} }
/*val spStateBean = SpUtil.instance().getObject<TaskStateWatchAd>(mSpKey)
if (spStateBean == null || !isTodayStatusBean(spStateBean)) {
generateTodayTask()
saveState2Sp()
} else {
mStateBean = spStateBean
notifyEvents()
}*/
} }
private fun notifyEvents() { override fun notifyEvents() {
NotifyMan.instance().sendEvent(VididinEvents.EVENT_DAILY_WATCHED_VIDEO_NUM_CHANGED, null) NotifyMan.instance().sendEvent(VididinEvents.EVENT_DAILY_WATCHED_VIDEO_NUM_CHANGED, null)
} }
private fun generateTodayTask() {
mStateBean = DailyStateWatchVideoBean(DateUtil.getCurTimeMs())
mStateBean.initSubTaskRewardList(mTaskConfig.reward_details)
}
private fun isTodayStatusBean(stateBean: DailyStateWatchVideoBean): Boolean {
return DateUtil.isToday(stateBean.todayMs)
}
private fun handleOneVideoWatched(dataPair: Pair<String, Long>) { private fun handleOneVideoWatched(dataPair: Pair<String, Long>) {
mStateBean.run { mStateBean.run {
if (!isAllTaskFinish()) { if (!isAllTaskFinish()) {
@ -62,38 +57,4 @@ class DailyWatchVideoTaskHelper : BaseTaskHelper<DailyStateWatchVideoBean>() {
} }
fun calculateNewState() {
val todayWatchedCount = mStateBean.getTodayWatchedCount()
mStateBean.getSubTaskRewardState().forEachIndexed { index, subTaskState ->
val targetCount = subTaskState.mTargetVideoCount
when(subTaskState.state) {
STATE_ONGOING -> {
if (todayWatchedCount >= targetCount) {
subTaskState.state = STATE_FINISH
}
}
}
}
}
fun claimSubTaskReward(subTaskIndex: Int) : Boolean {
if (subTaskIndex >= 0 && subTaskIndex < mStateBean.getSubTaskRewardState().size) {
try {
val subTask = mStateBean.getSubTaskRewardState()[subTaskIndex]
if (subTask.state == STATE_FINISH) {
AccountManager.addGold(subTask.mRewardNum)
subTask.state = STATE_CLAIMED
saveState2Sp()
notifyEvents()
return true
}
} catch (e: Exception) {
e.printStackTrace()
}
}
return false
}
} }

View File

@ -0,0 +1,38 @@
package com.gamedog.vididin.manager.taskbeans
import com.gamedog.vididin.main.fragments.task.RewardDetail
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_ONGOING
import kotlinx.serialization.Serializable
import kotlin.collections.forEach
@Serializable
abstract class BaseDailyTaskState : BaseTaskState() {
protected val mSubTaskRewardState: MutableList<SubDailyTaskBean> = mutableListOf()
abstract fun getTodayWatchedCount(): Int
abstract fun addWatchedCount(newWatchedNum: Int)
abstract fun addWatchedVideoInfo(dataPair: Pair<String, Long>): Boolean
fun getSubTaskRewardState(): List<SubDailyTaskBean> {
return mSubTaskRewardState
}
fun isAllTaskFinish(): Boolean {
return mSubTaskRewardState.all { it.state >= STATE_CLAIMED }
}
fun initSubTaskRewardList(subTasks: List<RewardDetail>) {
mSubTaskRewardState.clear()
subTasks.forEach {
mSubTaskRewardState.add(SubDailyTaskBean(it.value, it.target_count, STATE_ONGOING))
}
}
}
data class SubDailyTaskBean(
val mRewardNum: Int,
val mTargetAdCount: Int,
var state: Int = STATE_ONGOING,)

View File

@ -1,53 +1,37 @@
package com.gamedog.vididin.manager.taskbeans package com.gamedog.vididin.manager.taskbeans
import com.gamedog.vididin.main.fragments.task.RewardDetail
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_ONGOING
import kotlin.collections.forEach
data class TaskStateWatchAd( data class TaskStateWatchAd(
var todayMs: Long = 0, var todayMs: Long = 0,
): BaseTaskState() { ): BaseDailyTaskState() {
private var mWatchAdCount: Int = 0 private var mWatchAdCount: Int = 0
private val mSubTaskRewardState: MutableList<SubAdTaskBean> = mutableListOf()
fun addWatchedCount(newWatchedNum: Int) {
override fun addWatchedCount(newWatchedNum: Int) {
if (newWatchedNum > 0) { if (newWatchedNum > 0) {
mWatchAdCount += newWatchedNum mWatchAdCount += newWatchedNum
} }
} }
fun isAllTaskFinish(): Boolean { override fun addWatchedVideoInfo(dataPair: Pair<String, Long>): Boolean {
return mSubTaskRewardState.all { it.state >= STATE_CLAIMED } return false
} }
fun initSubTaskRewardList(subTasks: List<RewardDetail>) { override fun getTodayWatchedCount(): Int {
mSubTaskRewardState.clear()
subTasks.forEach {
mSubTaskRewardState.add(SubAdTaskBean(it.value, it.target_count, STATE_ONGOING))
}
}
fun getTodayWatchedAdCount(): Int {
return mWatchAdCount return mWatchAdCount
} }
fun getSubTaskRewardState(): List<SubAdTaskBean> {
return mSubTaskRewardState
}
} }
data class SubAdTaskBean(
val mRewardNum: Int,
val mTargetAdCount: Int,
var state: Int = STATE_ONGOING,)

View File

@ -1,24 +1,16 @@
package com.gamedog.vididin.manager.taskbeans package com.gamedog.vididin.manager.taskbeans
import com.gamedog.vididin.main.fragments.task.RewardDetail
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_ONGOING
import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentHashMap
data class DailyStateWatchVideoBean( data class TaskStateWatchVideo(
var todayMs: Long = 0, var todayMs: Long = 0,
): BaseTaskState() { ): BaseDailyTaskState() {
private val mWatchedMap = ConcurrentHashMap<String, Long>() private val mWatchedMap = ConcurrentHashMap<String, Long>()
private val mSubTaskRewardState: MutableList<SubTaskBean> = mutableListOf()
override fun addWatchedVideoInfo(dataPair: Pair<String, Long>): Boolean {
fun clearDatas() {
mWatchedMap.clear()
todayMs = 0
}
fun addWatchedVideoInfo(dataPair: Pair<String, Long>): Boolean {
if (!mWatchedMap.contains(dataPair.first)) { if (!mWatchedMap.contains(dataPair.first)) {
mWatchedMap.put(dataPair.first, dataPair.second) mWatchedMap.put(dataPair.first, dataPair.second)
return true return true
@ -26,33 +18,14 @@ data class DailyStateWatchVideoBean(
return false return false
} }
override fun addWatchedCount(newWatchedNum: Int) {
fun getTodayWatchedCount(): Int { }
override fun getTodayWatchedCount(): Int {
return mWatchedMap.size return mWatchedMap.size
} }
fun getSubTaskRewardState(): List<SubTaskBean> {
return mSubTaskRewardState
}
fun isAllTaskFinish(): Boolean {
return mSubTaskRewardState.all { it.state >= STATE_CLAIMED }
}
fun initSubTaskRewardList(subTasks: List<RewardDetail>) {
mSubTaskRewardState.clear()
subTasks.forEach {
mSubTaskRewardState.add(SubTaskBean(it.value, it.target_count, STATE_ONGOING))
}
}
} }
data class SubTaskBean(
val mRewardNum: Int,
val mTargetVideoCount: Int,
var state: Int = STATE_ONGOING,)