VidiDin-Android/app/src/main/java/com/gamedog/vididin/manager/TaskManager.kt

268 lines
8.9 KiB
Kotlin
Raw Normal View History

2025-11-20 09:45:17 +00:00
package com.gamedog.vididin.manager
2025-12-01 11:26:14 +00:00
2025-11-20 09:45:17 +00:00
import com.ama.core.architecture.util.FileUtil
2025-12-01 11:26:14 +00:00
import com.ama.core.architecture.util.eventbus.NotifyMan
2025-12-02 10:42:05 +00:00
import com.gamedog.vididin.VidiConst
2025-12-01 11:26:14 +00:00
import com.gamedog.vididin.VididinEvents
2025-12-24 09:12:21 +00:00
import com.gamedog.vididin.beans.RECORD_GOLD_PLUS_WATCH_REWARD_AD
import com.gamedog.vididin.beans.RECORD_GOLD_PLUS_WATCH_VIDEO_BY_TIME_DURATION
import com.gamedog.vididin.beans.RecordGold
2025-12-01 11:26:14 +00:00
import com.gamedog.vididin.core.login.login.AccountManager
2025-12-03 07:11:03 +00:00
import com.gamedog.vididin.main.fragments.task.BoxTaskRoot
2025-11-25 11:29:09 +00:00
import com.gamedog.vididin.main.fragments.task.Task
2025-11-20 09:45:17 +00:00
import com.gamedog.vididin.main.fragments.task.TaskBean
2025-12-03 06:30:42 +00:00
import com.gamedog.vididin.manager.helpers.BoxTaskHelper
2025-12-01 06:46:11 +00:00
import com.gamedog.vididin.manager.helpers.DailySignTaskHelper
2025-12-02 03:21:42 +00:00
import com.gamedog.vididin.manager.helpers.DailyWatchAdTaskHelper
2025-12-01 06:46:11 +00:00
import com.gamedog.vididin.manager.helpers.DailyWatchVideoTaskHelper
2025-12-01 07:11:53 +00:00
import com.gamedog.vididin.manager.helpers.NewbieEnableNotifyHelper
import com.gamedog.vididin.manager.helpers.NewbieFirstWithdrawHelper
import com.gamedog.vididin.manager.helpers.NewbieJoinDiscordHelper
2025-12-24 09:12:21 +00:00
import com.gamedog.vididin.youtubestatistic.RewardConst
2025-11-20 09:45:17 +00:00
import com.google.gson.GsonBuilder
2025-12-31 03:16:19 +00:00
import com.remax.notification.newUtil.NotificationDatas
import com.remax.notification.newUtil.NotificationDatas.IResidentDataCallback
2025-11-20 09:45:17 +00:00
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.*
class TaskManager private constructor() {
companion object {
2025-11-25 11:29:09 +00:00
// 新手任务分类及其子类
private const val TAG_CATEGORY_NEWBIE_TASK = "newbie_task"
private const val TAG_TASK_NEWBIE_FIRST_WITHDRAW = "newbie_first_withdraw"
private const val TAG_TASK_NEWBIE_PUSH_NOTIFY = "newbie_push_notify"
private const val TAG_TASK_NEWBIE_JOIN_DISCORD = "newbie_join_discord"
private const val TAG_TASK_NEWBIE_7DAY_CHECKIN = "newbie_7day_checkin"
// 日常任务分类及其子类
private const val TAG_CATEGORY_DAILY_TASK = "daily_task"
private const val TAG_TASK_DAILY_CHECKIN = "daily_checkin"
private const val TAG_TASK_DAILY_VIDEO = "daily_video_ladder"
private const val TAG_TASK_DAILY_AD = "daily_ad_ladder"
2025-12-03 03:58:36 +00:00
// 宝箱子任务类型对应
const val BOX_SUB_TASK_TYPE_AD = 1
const val BOX_SUB_TASK_TYPE_VIDEO = 2
const val BOX_SUB_TASK_TYPE_SIGN = 3
const val BOX_SUB_TASK_TYPE_ZERO_BUY = 4
2025-11-26 03:52:09 +00:00
@Volatile
private var instance: TaskManager? = null
fun instance(): TaskManager {
return instance ?: synchronized(this) {
instance ?: TaskManager().also {
instance = it
}
}
}
2025-11-20 09:45:17 +00:00
}
2025-12-01 04:00:18 +00:00
2025-12-01 07:11:53 +00:00
@Volatile
private var initialized = false
private val mutex = Mutex()
private val mGson = GsonBuilder().create()
private var mTaskConfig: TaskBean? = null
2025-12-03 02:48:32 +00:00
2025-12-01 06:46:11 +00:00
private val mDailySignTaskHelper by lazy { DailySignTaskHelper() }
private val mDailyWatchVideoTaskHelper by lazy { DailyWatchVideoTaskHelper() }
2025-12-02 03:21:42 +00:00
private val mDailyWatchAdTaskHelper by lazy { DailyWatchAdTaskHelper() }
2025-12-03 06:30:42 +00:00
private val mBoxHelper by lazy { BoxTaskHelper() }
2025-12-01 07:11:53 +00:00
private val mNewbieJoinDiscordHelper by lazy { NewbieJoinDiscordHelper() }
private val mNewbieEnableNotifyHelper by lazy { NewbieEnableNotifyHelper() }
private val mNewbieFirstWithdrawHelper by lazy { NewbieFirstWithdrawHelper() }
2025-12-01 04:00:18 +00:00
2025-11-20 09:45:17 +00:00
init {
loadTaskConfigAsync()
2025-12-01 11:26:14 +00:00
registerEvents()
2025-11-26 09:06:12 +00:00
// TODO - remove test code
2025-12-10 06:57:34 +00:00
if (false) {
2025-12-01 04:00:18 +00:00
mDailySignTaskHelper.generateTestDailySignTestBean()
2025-11-26 09:06:12 +00:00
}
2025-11-20 09:45:17 +00:00
}
2025-12-01 11:26:14 +00:00
private fun registerEvents() {
NotifyMan.instance().register(object : NotifyMan.ICallback(true) {
override fun onEvent(data: NotifyMan.NotifyData<*>?) {
when (data?.mEventType) {
2025-12-10 09:35:49 +00:00
VididinEvents.EVENT_AD_WATCHED_FOR_CONVERT_GOLD_2_CASH -> {
2025-12-01 11:26:14 +00:00
AccountManager.convertGold2Cash()
}
2025-12-10 09:35:49 +00:00
VididinEvents.EVENT_AD_WATCHED_FOR_EARN_GOLD -> {
2025-12-24 09:12:21 +00:00
val goldNum = VidiConst.WATCH_AD_REWARD_GOLD.toLong()
AccountManager.adjustGold(goldNum, RecordGold(RECORD_GOLD_PLUS_WATCH_REWARD_AD, goldNum))
2025-12-01 11:26:14 +00:00
}
}
}
2025-12-10 09:35:49 +00:00
}, VididinEvents.EVENT_AD_WATCHED_FOR_CONVERT_GOLD_2_CASH, VididinEvents.EVENT_AD_WATCHED_FOR_EARN_GOLD)
2025-12-01 11:26:14 +00:00
}
2025-11-20 09:45:17 +00:00
suspend fun getTaskConfig(): TaskBean? = mutex.withLock {
if (!initialized) {
loadTaskConfigFromAsset()
}
2025-11-25 11:29:09 +00:00
return mTaskConfig
2025-11-20 09:45:17 +00:00
}
private fun loadTaskConfigAsync() {
CoroutineScope(Dispatchers.IO).launch {
mutex.withLock {
if (!initialized) {
loadTaskConfigFromAsset()
2025-12-01 04:00:18 +00:00
initHelpers()
2025-11-20 09:45:17 +00:00
}
}
}
}
private suspend fun loadTaskConfigFromAsset() {
return withContext(Dispatchers.IO) {
val configStr = FileUtil.readAssetsFile("taskConfig.json")
2025-11-25 11:29:09 +00:00
mTaskConfig = mGson.fromJson(configStr, TaskBean::class.java)
2025-11-20 09:45:17 +00:00
initialized = true
}
}
2025-11-25 06:59:50 +00:00
2025-12-01 06:46:11 +00:00
private suspend fun initHelpers() {
2025-12-03 06:30:42 +00:00
mDailySignTaskHelper.setConfigDatas(getDailyCheckInTask()!!)
mDailyWatchVideoTaskHelper.setConfigDatas(getDailyVideoTask()!!)
mDailyWatchAdTaskHelper.setConfigDatas(getDailyAdTask()!!)
mNewbieJoinDiscordHelper.setConfigDatas(getNewbieJoinDiscordTask()!!)
mNewbieEnableNotifyHelper.setConfigDatas(getNewbieEnableNotifyTask()!!)
mNewbieFirstWithdrawHelper.setConfigDatas(getNewbieFirstWithdrawTask()!!)
2025-12-03 07:11:03 +00:00
mBoxHelper.setConfigDatas(getBoxTaskConfig()!!)
2025-11-26 10:39:20 +00:00
}
2025-12-03 02:48:32 +00:00
fun onDateChanged() {
mDailySignTaskHelper.onDateChanged()
mDailyWatchVideoTaskHelper.onDateChanged()
mDailyWatchAdTaskHelper.onDateChanged()
2025-12-03 06:30:42 +00:00
mBoxHelper.onDateChanged()
2025-12-03 02:48:32 +00:00
mNewbieJoinDiscordHelper.onDateChanged()
mNewbieEnableNotifyHelper.onDateChanged()
mNewbieFirstWithdrawHelper.onDateChanged()
}
2025-11-25 11:29:09 +00:00
2025-12-01 07:11:53 +00:00
//------------------------- Tasks Getter ------------------------------
fun dailySignStatus(): DailySignTaskHelper {
return mDailySignTaskHelper
}
2025-11-25 11:29:09 +00:00
2025-12-02 03:21:42 +00:00
fun dailyWatchVideoStatus(): DailyWatchVideoTaskHelper {
2025-12-01 07:11:53 +00:00
return mDailyWatchVideoTaskHelper
}
2025-11-25 11:29:09 +00:00
2025-12-02 03:21:42 +00:00
fun dailyWatchAdStatus(): DailyWatchAdTaskHelper {
return mDailyWatchAdTaskHelper
}
2025-12-03 06:30:42 +00:00
fun boxTaskStatus(): BoxTaskHelper {
return mBoxHelper
2025-12-01 07:11:53 +00:00
}
2025-12-01 04:00:18 +00:00
2025-12-01 07:11:53 +00:00
fun newbieJoinDiscordStatus(): NewbieJoinDiscordHelper {
return mNewbieJoinDiscordHelper
}
2025-12-01 04:00:18 +00:00
2025-12-01 07:11:53 +00:00
fun newbieEnableNotifyStatus(): NewbieEnableNotifyHelper {
return mNewbieEnableNotifyHelper
2025-12-01 04:00:18 +00:00
}
2025-12-01 07:11:53 +00:00
fun newbieFirstWithdrawStatus(): NewbieFirstWithdrawHelper {
return mNewbieFirstWithdrawHelper
2025-12-01 06:46:11 +00:00
}
2025-12-01 04:00:18 +00:00
2025-12-01 07:11:53 +00:00
2025-11-26 03:52:09 +00:00
//------------------------- Get tasks -------------------------------
2025-11-25 11:29:09 +00:00
// 日常任务
fun getDailyCheckInTask(): Task? {
return mTaskConfig?.task_module_config?.getTaskCategoryById(TAG_CATEGORY_DAILY_TASK)?.getTaskById(TAG_TASK_DAILY_CHECKIN)
}
fun getDailyVideoTask(): Task? {
return mTaskConfig?.task_module_config?.getTaskCategoryById(TAG_CATEGORY_DAILY_TASK)?.getTaskById(TAG_TASK_DAILY_VIDEO)
}
fun getDailyAdTask(): Task? {
return mTaskConfig?.task_module_config?.getTaskCategoryById(TAG_CATEGORY_DAILY_TASK)?.getTaskById(TAG_TASK_DAILY_AD)
}
// 新手任务
fun getNewbieFirstWithdrawTask(): Task? {
return mTaskConfig?.task_module_config?.getTaskCategoryById(TAG_CATEGORY_NEWBIE_TASK)?.getTaskById(TAG_TASK_NEWBIE_FIRST_WITHDRAW)
}
fun getNewbieEnableNotifyTask(): Task? {
return mTaskConfig?.task_module_config?.getTaskCategoryById(TAG_CATEGORY_NEWBIE_TASK)?.getTaskById(TAG_TASK_NEWBIE_PUSH_NOTIFY)
}
fun getNewbieJoinDiscordTask(): Task? {
return mTaskConfig?.task_module_config?.getTaskCategoryById(TAG_CATEGORY_NEWBIE_TASK)?.getTaskById(TAG_TASK_NEWBIE_JOIN_DISCORD)
}
fun getNewbieCheckInTask(): Task? {
return mTaskConfig?.task_module_config?.getTaskCategoryById(TAG_CATEGORY_NEWBIE_TASK)?.getTaskById(TAG_TASK_NEWBIE_7DAY_CHECKIN)
}
2025-12-03 07:11:03 +00:00
// 宝箱任务
fun getBoxTaskConfig(): BoxTaskRoot? {
return mTaskConfig?.task_module_config?.box_task
}
2025-11-25 11:29:09 +00:00
2025-12-31 03:16:19 +00:00
fun initNotificationData() {
NotificationDatas.setResidentCallback(object : IResidentDataCallback {
override fun getGoldNumber(): Long {
return AccountManager.getGold()
}
2025-12-01 07:11:53 +00:00
2025-12-31 03:16:19 +00:00
override fun getCashNumber(): Double {
return AccountManager.getCash()
}
2025-11-26 03:52:09 +00:00
2025-12-31 03:16:19 +00:00
override fun getBoxRestTimeStr(): String {
return mBoxHelper.getLeftValidBoxTotalDurationStr()
}
2025-11-26 03:52:09 +00:00
2025-12-31 03:16:19 +00:00
override fun hasWithdrawed01(): Boolean {
return newbieFirstWithdrawStatus().getStatusBean().hasClaimReward
}
})
}
2025-12-01 04:00:18 +00:00
}
2025-11-20 09:45:17 +00:00