sp宝箱statusbean 读取及初始化

This commit is contained in:
renhaoting 2025-12-03 15:11:03 +08:00
parent 3c081c230a
commit 77d93b0211
11 changed files with 73 additions and 19 deletions

View File

@ -6,6 +6,7 @@ import com.ama.core.architecture.util.eventbus.NotifyMan
import com.gamedog.vididin.VidiConst import com.gamedog.vididin.VidiConst
import com.gamedog.vididin.VididinEvents import com.gamedog.vididin.VididinEvents
import com.gamedog.vididin.core.login.login.AccountManager import com.gamedog.vididin.core.login.login.AccountManager
import com.gamedog.vididin.main.fragments.task.BoxTaskRoot
import com.gamedog.vididin.main.fragments.task.Task import com.gamedog.vididin.main.fragments.task.Task
import com.gamedog.vididin.main.fragments.task.TaskBean import com.gamedog.vididin.main.fragments.task.TaskBean
import com.gamedog.vididin.manager.helpers.BoxTaskHelper import com.gamedog.vididin.manager.helpers.BoxTaskHelper
@ -149,8 +150,7 @@ class TaskManager private constructor() {
mNewbieJoinDiscordHelper.setConfigDatas(getNewbieJoinDiscordTask()!!) mNewbieJoinDiscordHelper.setConfigDatas(getNewbieJoinDiscordTask()!!)
mNewbieEnableNotifyHelper.setConfigDatas(getNewbieEnableNotifyTask()!!) mNewbieEnableNotifyHelper.setConfigDatas(getNewbieEnableNotifyTask()!!)
mNewbieFirstWithdrawHelper.setConfigDatas(getNewbieFirstWithdrawTask()!!) mNewbieFirstWithdrawHelper.setConfigDatas(getNewbieFirstWithdrawTask()!!)
mBoxHelper.setConfigDatas(getBoxTaskConfig()!!)
mBoxHelper.setConfigDatas(getDailyVideoTask()!!)
} }
fun onDateChanged() { fun onDateChanged() {
@ -228,7 +228,10 @@ class TaskManager private constructor() {
} }
// 宝箱任务
fun getBoxTaskConfig(): BoxTaskRoot? {
return mTaskConfig?.task_module_config?.box_task
}

View File

@ -2,6 +2,7 @@ package com.gamedog.vididin.manager.helpers
import com.ama.core.architecture.util.DateUtil 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.main.fragments.task.Task
import com.gamedog.vididin.manager.taskbeans.BaseDailyTaskState 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
@ -11,7 +12,7 @@ import com.gamedog.vididin.manager.taskbeans.TaskStateWatchAd
abstract class BaseDailyTaskHelper<T : BaseDailyTaskState> : BaseTaskHelper<T>() { abstract class BaseDailyTaskHelper<T : BaseDailyTaskState> : BaseTaskHelper<T, Task>() {
abstract protected fun notifyEvents() abstract protected fun notifyEvents()
abstract protected fun generateTodayTask() abstract protected fun generateTodayTask()

View File

@ -2,19 +2,18 @@ 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 kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
abstract class BaseTaskHelper<T: Any> { abstract class BaseTaskHelper<T: Any, C: Any> {
abstract val mSpKey: String abstract val mSpKey: String
protected lateinit var mStateBean: T protected lateinit var mStateBean: T
protected lateinit var mTaskConfig: Task protected lateinit var mTaskConfig: C
private var mEventCallback: NotifyMan.ICallback? = null private var mEventCallback: NotifyMan.ICallback? = null
abstract fun loadTaskFromSp() abstract fun loadTaskFromSp()
suspend fun setConfigDatas(taskConfig: Task) { suspend fun setConfigDatas(taskConfig: C) {
mTaskConfig = taskConfig mTaskConfig = taskConfig
return withContext(Dispatchers.IO) { return withContext(Dispatchers.IO) {

View File

@ -1,25 +1,48 @@
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.gamedog.vididin.main.fragments.task.BoxTaskRoot
import com.gamedog.vididin.manager.taskbeans.TaskStateBox
import com.gamedog.vididin.manager.taskbeans.TaskStateBoxRoot import com.gamedog.vididin.manager.taskbeans.TaskStateBoxRoot
import com.gamedog.vididin.manager.taskbeans.TaskStateBoxSub
class BoxTaskHelper: BaseTaskHelper<TaskStateBoxRoot>() { class BoxTaskHelper: BaseTaskHelper<TaskStateBoxRoot, BoxTaskRoot>() {
override val mSpKey = SpUtil.KEY_TASK_BOX override val mSpKey = SpUtil.KEY_TASK_BOX
override fun loadTaskFromSp() { override fun loadTaskFromSp() {
val taskStateBeanInSp = SpUtil.instance().getObject<TaskStateBoxRoot>(mSpKey) val taskStateBeanInSp = SpUtil.instance().getObject<TaskStateBoxRoot>(mSpKey)
if (taskStateBeanInSp == null) { if (taskStateBeanInSp == null || isBoxRootTaskExpired(taskStateBeanInSp)) {
//mStateBean = generateStateBeanFromConfig() mStateBean = generateStateBeanFromConfig()
//saveState2Sp() saveState2Sp()
} else { } else {
mStateBean = taskStateBeanInSp mStateBean = taskStateBeanInSp
} }
} }
private fun generateStateBeanFromConfig(): TaskStateBoxRoot? { private fun generateStateBeanFromConfig(): TaskStateBoxRoot {
return null val boxStateList = mutableListOf<TaskStateBox>()
mTaskConfig.chests.forEachIndexed { index, task ->
val boxSubTaskStateList = mutableListOf<TaskStateBoxSub>()
task.tasks.forEachIndexed { index, task ->
boxSubTaskStateList.add(TaskStateBoxSub(task.task_id,
task.task_name, task.required_count, task.task_type))
} }
boxStateList.add(TaskStateBox(task.chest_id, task.chest_name, task.duration_days,
task.reward_type, task.reward_value, task.is_one_time, task.status, boxSubTaskStateList))
}
return TaskStateBoxRoot(DateUtil.getTodayStartTimeMs(), boxStateList)
}
private fun isBoxRootTaskExpired(taskStateBoxRoot: TaskStateBoxRoot): Boolean {
var totalDurationDays = 0
taskStateBoxRoot.tasks.forEach {
totalDurationDays += it.duration_days
}
return DateUtil.isPeriodExpired(taskStateBoxRoot.startMs, totalDurationDays)
}
} }

View File

@ -5,11 +5,12 @@ 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.core.login.login.AccountManager
import com.gamedog.vididin.main.fragments.task.Task
import com.gamedog.vididin.manager.taskbeans.TaskDailySignBean import com.gamedog.vididin.manager.taskbeans.TaskDailySignBean
import com.gamedog.vididin.manager.taskbeans.DailySignDayInfoBean import com.gamedog.vididin.manager.taskbeans.DailySignDayInfoBean
class DailySignTaskHelper : BaseTaskHelper<TaskDailySignBean>() { class DailySignTaskHelper : BaseTaskHelper<TaskDailySignBean, Task>() {
private var mCurDayIndexDailySign: Int = 0 private var mCurDayIndexDailySign: Int = 0
override val mSpKey = SpUtil.KEY_TASK_BEAN override val mSpKey = SpUtil.KEY_TASK_BEAN

View File

@ -4,6 +4,7 @@ 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.main.fragments.task.Task
import com.gamedog.vididin.manager.taskbeans.TaskStateWatchAd import com.gamedog.vididin.manager.taskbeans.TaskStateWatchAd

View File

@ -1,9 +1,10 @@
package com.gamedog.vididin.manager.helpers package com.gamedog.vididin.manager.helpers
import com.ama.core.architecture.util.SpUtil import com.ama.core.architecture.util.SpUtil
import com.gamedog.vididin.main.fragments.task.Task
import com.gamedog.vididin.manager.taskbeans.TaskStateNewBieEnableNotify import com.gamedog.vididin.manager.taskbeans.TaskStateNewBieEnableNotify
class NewbieEnableNotifyHelper: BaseTaskHelper<TaskStateNewBieEnableNotify>() { class NewbieEnableNotifyHelper: BaseTaskHelper<TaskStateNewBieEnableNotify, Task>() {
override val mSpKey = SpUtil.KEY_NEWBIE_ENABLE_NOTIFY override val mSpKey = SpUtil.KEY_NEWBIE_ENABLE_NOTIFY

View File

@ -1,9 +1,10 @@
package com.gamedog.vididin.manager.helpers package com.gamedog.vididin.manager.helpers
import com.ama.core.architecture.util.SpUtil import com.ama.core.architecture.util.SpUtil
import com.gamedog.vididin.main.fragments.task.Task
import com.gamedog.vididin.manager.taskbeans.TaskStateNewBieFirstWithDraw import com.gamedog.vididin.manager.taskbeans.TaskStateNewBieFirstWithDraw
class NewbieFirstWithdrawHelper: BaseTaskHelper<TaskStateNewBieFirstWithDraw>() { class NewbieFirstWithdrawHelper: BaseTaskHelper<TaskStateNewBieFirstWithDraw, Task>() {
override val mSpKey = SpUtil.KEY_NEWBIE_FIRST_WITHDRAW override val mSpKey = SpUtil.KEY_NEWBIE_FIRST_WITHDRAW

View File

@ -1,9 +1,10 @@
package com.gamedog.vididin.manager.helpers package com.gamedog.vididin.manager.helpers
import com.ama.core.architecture.util.SpUtil import com.ama.core.architecture.util.SpUtil
import com.gamedog.vididin.main.fragments.task.Task
import com.gamedog.vididin.manager.taskbeans.TaskStateNewBieJoinDiscord import com.gamedog.vididin.manager.taskbeans.TaskStateNewBieJoinDiscord
class NewbieJoinDiscordHelper: BaseTaskHelper<TaskStateNewBieJoinDiscord>() { class NewbieJoinDiscordHelper: BaseTaskHelper<TaskStateNewBieJoinDiscord, Task>() {
override val mSpKey = SpUtil.KEY_NEWBIE_JOIN_DISCORD override val mSpKey = SpUtil.KEY_NEWBIE_JOIN_DISCORD

View File

@ -18,7 +18,10 @@ data class TaskStateBox(
val reward_value: Float, val reward_value: Float,
val is_one_time: Boolean, val is_one_time: Boolean,
val status: String, val status: String,
val tasks: List<TaskStateBoxSub> val tasks: List<TaskStateBoxSub>,
// new added
val hasClaimedReward: Boolean = false,
): Serializable ): Serializable
data class TaskStateBoxSub( data class TaskStateBoxSub(
@ -26,6 +29,9 @@ data class TaskStateBoxSub(
val task_name: String, val task_name: String,
val required_count: Int, val required_count: Int,
val task_type: Int, // This added by self for decide which task should be execute, detail see: #TaskManager.companion val task_type: Int, // This added by self for decide which task should be execute, detail see: #TaskManager.companion
// new added
val finishedNum: Int = 0,
): Serializable ): Serializable

View File

@ -67,6 +67,11 @@ class DateUtil private constructor() {
return currentTime - targetTimestamp > periodMillis return currentTime - targetTimestamp > periodMillis
} }
fun isPeriodExpired(startTimeMs: Long, dayNum: Int): Boolean {
val periodMillis = dayNum * 24 * 3600000
return startTimeMs + periodMillis < getCurTimeMs()
}
/** /**
* 从起始时间到现在已经过去多少天 * 从起始时间到现在已经过去多少天
*/ */
@ -174,6 +179,18 @@ class DateUtil private constructor() {
return System.currentTimeMillis() return System.currentTimeMillis()
} }
fun getTodayStartTimeMs(): Long {
val calendar = Calendar.getInstance().apply {
set(Calendar.HOUR_OF_DAY, 0)
set(Calendar.MINUTE, 0)
set(Calendar.SECOND, 0)
set(Calendar.MILLISECOND, 0)
}
return calendar.timeInMillis
}
fun getPassedDayNum(periodStartMs: Long, currentMs: Long): Int { fun getPassedDayNum(periodStartMs: Long, currentMs: Long): Int {
val utcTimeZone = TimeZone.getTimeZone("UTC") // 使用UTC时区 val utcTimeZone = TimeZone.getTimeZone("UTC") // 使用UTC时区