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.VididinEvents
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.TaskBean
import com.gamedog.vididin.manager.helpers.BoxTaskHelper
@ -149,8 +150,7 @@ class TaskManager private constructor() {
mNewbieJoinDiscordHelper.setConfigDatas(getNewbieJoinDiscordTask()!!)
mNewbieEnableNotifyHelper.setConfigDatas(getNewbieEnableNotifyTask()!!)
mNewbieFirstWithdrawHelper.setConfigDatas(getNewbieFirstWithdrawTask()!!)
mBoxHelper.setConfigDatas(getDailyVideoTask()!!)
mBoxHelper.setConfigDatas(getBoxTaskConfig()!!)
}
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.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.BaseTaskState.Companion.STATE_CLAIMED
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 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.eventbus.NotifyMan
import com.gamedog.vididin.main.fragments.task.Task
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
abstract class BaseTaskHelper<T: Any> {
abstract class BaseTaskHelper<T: Any, C: Any> {
abstract val mSpKey: String
protected lateinit var mStateBean: T
protected lateinit var mTaskConfig: Task
protected lateinit var mTaskConfig: C
private var mEventCallback: NotifyMan.ICallback? = null
abstract fun loadTaskFromSp()
suspend fun setConfigDatas(taskConfig: Task) {
suspend fun setConfigDatas(taskConfig: C) {
mTaskConfig = taskConfig
return withContext(Dispatchers.IO) {

View File

@ -1,25 +1,48 @@
package com.gamedog.vididin.manager.helpers
import com.ama.core.architecture.util.DateUtil
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.TaskStateBoxSub
class BoxTaskHelper: BaseTaskHelper<TaskStateBoxRoot>() {
class BoxTaskHelper: BaseTaskHelper<TaskStateBoxRoot, BoxTaskRoot>() {
override val mSpKey = SpUtil.KEY_TASK_BOX
override fun loadTaskFromSp() {
val taskStateBeanInSp = SpUtil.instance().getObject<TaskStateBoxRoot>(mSpKey)
if (taskStateBeanInSp == null) {
//mStateBean = generateStateBeanFromConfig()
//saveState2Sp()
if (taskStateBeanInSp == null || isBoxRootTaskExpired(taskStateBeanInSp)) {
mStateBean = generateStateBeanFromConfig()
saveState2Sp()
} else {
mStateBean = taskStateBeanInSp
}
}
private fun generateStateBeanFromConfig(): TaskStateBoxRoot? {
return null
private fun generateStateBeanFromConfig(): TaskStateBoxRoot {
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.gamedog.vididin.VididinEvents
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.DailySignDayInfoBean
class DailySignTaskHelper : BaseTaskHelper<TaskDailySignBean>() {
class DailySignTaskHelper : BaseTaskHelper<TaskDailySignBean, Task>() {
private var mCurDayIndexDailySign: Int = 0
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.eventbus.NotifyMan
import com.gamedog.vididin.VididinEvents
import com.gamedog.vididin.main.fragments.task.Task
import com.gamedog.vididin.manager.taskbeans.TaskStateWatchAd

View File

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

View File

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

View File

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

View File

@ -18,7 +18,10 @@ data class TaskStateBox(
val reward_value: Float,
val is_one_time: Boolean,
val status: String,
val tasks: List<TaskStateBoxSub>
val tasks: List<TaskStateBoxSub>,
// new added
val hasClaimedReward: Boolean = false,
): Serializable
data class TaskStateBoxSub(
@ -26,6 +29,9 @@ data class TaskStateBoxSub(
val task_name: String,
val required_count: Int,
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

View File

@ -67,6 +67,11 @@ class DateUtil private constructor() {
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()
}
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 {
val utcTimeZone = TimeZone.getTimeZone("UTC") // 使用UTC时区