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
|
|
|
|
|
import com.gamedog.vididin.VididinEvents
|
|
|
|
|
import com.gamedog.vididin.core.login.login.AccountManager
|
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-01 07:11:53 +00:00
|
|
|
import com.gamedog.vididin.manager.helpers.DailyBoxHelper
|
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-11-20 09:45:17 +00:00
|
|
|
import com.google.gson.GsonBuilder
|
|
|
|
|
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-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-11-26 06:04:30 +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-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-01 07:11:53 +00:00
|
|
|
private val mDailyBoxHelper by lazy { DailyBoxHelper() }
|
|
|
|
|
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
|
|
|
|
|
if (true) {
|
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) {
|
|
|
|
|
VididinEvents.Event_AD_TASK_TYPE_Convert_Gold_2_Cash -> {
|
|
|
|
|
AccountManager.convertGold2Cash()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
VididinEvents.Event_AD_TASK_TYPE_Watch_Ad_For_Gold -> {
|
|
|
|
|
// TODO - add gold for user
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}, VididinEvents.Event_AD_TASK_TYPE_Convert_Gold_2_Cash, VididinEvents.Event_AD_TASK_TYPE_Watch_Ad_For_Gold)
|
|
|
|
|
}
|
|
|
|
|
|
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() {
|
|
|
|
|
mDailySignTaskHelper.initDatas(getDailyCheckInTask()!!)
|
|
|
|
|
mDailyWatchVideoTaskHelper.initDatas(getDailyVideoTask()!!)
|
2025-12-02 03:21:42 +00:00
|
|
|
mDailyWatchAdTaskHelper.initDatas(getDailyAdTask()!!)
|
2025-12-01 07:11:53 +00:00
|
|
|
mDailyBoxHelper.initDatas(getDailyVideoTask()!!) // TODO - get right box task config
|
|
|
|
|
mNewbieJoinDiscordHelper.initDatas(getNewbieJoinDiscordTask()!!)
|
|
|
|
|
mNewbieEnableNotifyHelper.initDatas(getNewbieEnableNotifyTask()!!)
|
|
|
|
|
mNewbieFirstWithdrawHelper.initDatas(getNewbieFirstWithdrawTask()!!)
|
2025-11-26 10:39:20 +00:00
|
|
|
}
|
|
|
|
|
|
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-01 07:11:53 +00:00
|
|
|
fun dailyBoxStatus(): DailyBoxHelper {
|
|
|
|
|
return mDailyBoxHelper
|
|
|
|
|
}
|
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-01 07:11:53 +00:00
|
|
|
|
2025-11-26 03:52:09 +00:00
|
|
|
//----------------------------- 每日签到 -----------------------------//
|
|
|
|
|
|
|
|
|
|
fun getHomeWatchDurationRewardNum(): Int {
|
|
|
|
|
return 28; // TODO - mTaskConfigBean.xxxx
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-12-01 04:00:18 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-11-20 09:45:17 +00:00
|
|
|
|