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

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 subTaskStatusList = statusBean.getSubTaskRewardState()
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
import com.ama.core.architecture.util.DateUtil
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_FINISH
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_ONGOING
import com.gamedog.vididin.manager.taskbeans.TaskStateWatchVideo
import com.gamedog.vididin.manager.taskbeans.TaskStateWatchAd
abstract class BaseDailyTaskHelper : BaseTaskHelper<TaskStateWatchAd>() {
abstract class BaseDailyTaskHelper<T : BaseDailyTaskState> : BaseTaskHelper<T>() {
abstract protected fun notifyEvents()
@ -30,7 +35,7 @@ abstract class BaseDailyTaskHelper : BaseTaskHelper<TaskStateWatchAd>() {
protected fun calculateNewState() {
val todayWatchedCount = mStateBean.getTodayWatchedAdCount()
val todayWatchedCount = mStateBean.getTodayWatchedCount()
mStateBean.getSubTaskRewardState().forEachIndexed { index, subTaskState ->
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) {
mStateBean.run {
if (!isAllTaskFinish()) {
addWatchedCount(newAdWatchedNum)
calculateNewState()
saveState2Sp()
notifyEvents()
}
}
protected fun isTodayStatusBean(stateBean: TaskStateWatchAd): Boolean {
return DateUtil.isToday(stateBean.todayMs)
}
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.eventbus.NotifyMan
import com.gamedog.vididin.main.fragments.task.Task
import com.gamedog.vididin.manager.taskbeans.BaseTaskState
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext

View File

@ -1,13 +1,12 @@
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.manager.taskbeans.TaskStateWatchAd
class DailyWatchAdTaskHelper : BaseDailyTaskHelper() {
class DailyWatchAdTaskHelper : BaseDailyTaskHelper<TaskStateWatchAd>() {
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)
}
private fun generateTodayTask() {
mStateBean = TaskStateWatchAd(DateUtil.getCurTimeMs())
mStateBean.initSubTaskRewardList(mTaskConfig.reward_details)
private fun handleOneAdWatched(newAdWatchedNum: Int) {
mStateBean.run {
if (!isAllTaskFinish()) {
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
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.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
import com.gamedog.vididin.manager.taskbeans.TaskStateWatchVideo
class DailyWatchVideoTaskHelper : BaseTaskHelper<DailyStateWatchVideoBean>() {
class DailyWatchVideoTaskHelper : BaseDailyTaskHelper<TaskStateWatchVideo>() {
override val mSpKey = SpUtil.KEY_DAILY_WATCH_VIDEO
@ -24,7 +20,7 @@ class DailyWatchVideoTaskHelper : BaseTaskHelper<DailyStateWatchVideoBean>() {
}
override fun loadTaskFromSp() {
val spStateBean = SpUtil.instance().getObject<DailyStateWatchVideoBean>(mSpKey)
val spStateBean = SpUtil.instance().getObject<TaskStateWatchVideo>(mSpKey)
if (spStateBean == null || !isTodayStatusBean(spStateBean)) {
generateTodayTask()
saveState2Sp()
@ -32,23 +28,22 @@ class DailyWatchVideoTaskHelper : BaseTaskHelper<DailyStateWatchVideoBean>() {
mStateBean = spStateBean
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)
}
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>) {
mStateBean.run {
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
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(
var todayMs: Long = 0,
): BaseTaskState() {
): BaseDailyTaskState() {
private var mWatchAdCount: Int = 0
private val mSubTaskRewardState: MutableList<SubAdTaskBean> = mutableListOf()
fun addWatchedCount(newWatchedNum: Int) {
override fun addWatchedCount(newWatchedNum: Int) {
if (newWatchedNum > 0) {
mWatchAdCount += newWatchedNum
}
}
fun isAllTaskFinish(): Boolean {
return mSubTaskRewardState.all { it.state >= STATE_CLAIMED }
override fun addWatchedVideoInfo(dataPair: Pair<String, Long>): Boolean {
return false
}
fun initSubTaskRewardList(subTasks: List<RewardDetail>) {
mSubTaskRewardState.clear()
subTasks.forEach {
mSubTaskRewardState.add(SubAdTaskBean(it.value, it.target_count, STATE_ONGOING))
}
}
fun getTodayWatchedAdCount(): Int {
override fun getTodayWatchedCount(): Int {
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
import com.gamedog.vididin.main.fragments.task.RewardDetail
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_ONGOING
import java.util.concurrent.ConcurrentHashMap
data class DailyStateWatchVideoBean(
data class TaskStateWatchVideo(
var todayMs: Long = 0,
): BaseTaskState() {
): BaseDailyTaskState() {
private val mWatchedMap = ConcurrentHashMap<String, Long>()
private val mSubTaskRewardState: MutableList<SubTaskBean> = mutableListOf()
fun clearDatas() {
mWatchedMap.clear()
todayMs = 0
}
fun addWatchedVideoInfo(dataPair: Pair<String, Long>): Boolean {
override fun addWatchedVideoInfo(dataPair: Pair<String, Long>): Boolean {
if (!mWatchedMap.contains(dataPair.first)) {
mWatchedMap.put(dataPair.first, dataPair.second)
return true
@ -26,33 +18,14 @@ data class DailyStateWatchVideoBean(
return false
}
override fun addWatchedCount(newWatchedNum: Int) {
fun getTodayWatchedCount(): Int {
}
override fun getTodayWatchedCount(): Int {
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,)