优化taskmanager 结构

This commit is contained in:
renhaoting 2025-12-01 12:00:18 +08:00
parent e00bf1da76
commit 5fdf3a4ad9
5 changed files with 94 additions and 33 deletions

View File

@ -117,4 +117,9 @@ class MainActivity : AppViewsActivity<ViewBinding, UiState, ViewModel>(), OnTabS
override fun onTabIsDarkFont(isDarkFont: Boolean) { override fun onTabIsDarkFont(isDarkFont: Boolean) {
navigatorAdapter.setIsDarkFont(isDarkFont) navigatorAdapter.setIsDarkFont(isDarkFont)
} }
fun switchTab(itemIndex: Int) {
binding.viewPager2.setCurrentItem(itemIndex, false)
}
} }

View File

@ -188,7 +188,7 @@ class TasksFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnTab
} }
private fun updateDailySignButUI() { private fun updateDailySignButUI() {
val hasFinishAllSignWork = TaskManager.instance().isDailySignAllOperationDone() val hasFinishAllSignWork = TaskManager.instance().dailySignTask().isDailySignAllOperationDone()
binding?.ivGotoDailySign?.apply { binding?.ivGotoDailySign?.apply {
setText( setText(
@ -244,7 +244,7 @@ class TasksFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnTab
} }
private fun gotoWithVideo() { private fun gotoWithVideo() {
//TODO("Not yet implemented") Router.Mine.createMineFragment()
} }

View File

@ -57,7 +57,7 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
} }
private fun clickedNormalSign() { private fun clickedNormalSign() {
if (TaskManager.instance().executeDailySign(mCurDayIndex, false, false)) { if (TaskManager.instance().dailySignTask().executeDailySign(mCurDayIndex, false, false)) {
DailySignSuccessDialog(mActivity).initData(mConfigList?.get(mCurDayIndex)?.value, true).show() DailySignSuccessDialog(mActivity).initData(mConfigList?.get(mCurDayIndex)?.value, true).show()
updateUI(mCurDayIndex) updateUI(mCurDayIndex)
} }
@ -65,7 +65,7 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
private fun clickedAdSingleBut() { private fun clickedAdSingleBut() {
startAdTask("signalAd", { startAdTask("signalAd", {
if (TaskManager.instance().executeDailySign(mCurDayIndex, false, true)) { if (TaskManager.instance().dailySignTask().executeDailySign(mCurDayIndex, false, true)) {
DailySignSuccessDialog(mActivity).initData(mConfigList?.get(mCurDayIndex)?.value, false).show() DailySignSuccessDialog(mActivity).initData(mConfigList?.get(mCurDayIndex)?.value, false).show()
updateUI(mCurDayIndex) updateUI(mCurDayIndex)
} }
@ -74,7 +74,7 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
private fun clickedAdDoubleBut() { private fun clickedAdDoubleBut() {
startAdTask("doubleAd", { startAdTask("doubleAd", {
if (TaskManager.instance().executeDailySign(mCurDayIndex, true, true)) { if (TaskManager.instance().dailySignTask().executeDailySign(mCurDayIndex, true, true)) {
DailySignSuccessDialog(mActivity).initData((mConfigList?.get(mCurDayIndex)?.value)?.times( DailySignSuccessDialog(mActivity).initData((mConfigList?.get(mCurDayIndex)?.value)?.times(
2 2
), false).show() ), false).show()
@ -84,10 +84,10 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
} }
private fun clickedComplementSign() { private fun clickedComplementSign() {
val firstForgotSignDayIndex = TaskManager.instance().getForgotSignFirstDayIndex() val firstForgotSignDayIndex = TaskManager.instance().dailySignTask().getForgotSignFirstDayIndex()
if (firstForgotSignDayIndex > 0) { if (firstForgotSignDayIndex > 0) {
startAdTask("complementAd", { startAdTask("complementAd", {
if (TaskManager.instance().executeDailySign(firstForgotSignDayIndex, false, false)){ if (TaskManager.instance().dailySignTask().executeDailySign(firstForgotSignDayIndex, false, false)){
DailySignSuccessDialog(mActivity).initData(mConfigList?.get(firstForgotSignDayIndex)?.value, false).show() DailySignSuccessDialog(mActivity).initData(mConfigList?.get(firstForgotSignDayIndex)?.value, false).show()
updateUI(firstForgotSignDayIndex) updateUI(firstForgotSignDayIndex)
} }
@ -121,14 +121,14 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
mConfigList?.let { mConfigList?.let {
mSignItemViewList.forEachIndexed { index, itemView-> mSignItemViewList.forEachIndexed { index, itemView->
itemView.setData(mConfigList!![index], itemView.setData(mConfigList!![index],
TaskManager.instance().getDailySignStateBean(index)) TaskManager.instance().dailySignTask().getDailySignStateBean(index))
} }
} }
} }
} }
private fun initSignState() { private fun initSignState() {
mCurDayIndex = TaskManager.instance().getCurDayIndexOfDailyCheckIn() mCurDayIndex = TaskManager.instance().dailySignTask().getCurDayIndexOfDailyCheckIn()
mSignItemViewList[mCurDayIndex].setSelectState(true) mSignItemViewList[mCurDayIndex].setSelectState(true)
updateUI(mCurDayIndex) updateUI(mCurDayIndex)
} }
@ -141,7 +141,7 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
mBinding.tvSignedTotal.text = buildString { mBinding.tvSignedTotal.text = buildString {
append(TaskManager.instance().getSignDaysTotal()) append(TaskManager.instance().dailySignTask().getSignDaysTotal())
append("/7") append("/7")
} }
mSignItemViewList[signedDayIndex].updateUI() mSignItemViewList[signedDayIndex].updateUI()
@ -163,7 +163,7 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
mConfigList?.get(mCurDayIndex)?.value mConfigList?.get(mCurDayIndex)?.value
} }
} else { } else {
val forgotSignDays = TaskManager.instance().getForgotSignDays() val forgotSignDays = TaskManager.instance().dailySignTask().getForgotSignDays()
if (forgotSignDays > 0) { if (forgotSignDays > 0) {
mBinding.actionNormalTwoButs.isVisible = false mBinding.actionNormalTwoButs.isVisible = false
mBinding.actionWatchAd.isVisible = false mBinding.actionWatchAd.isVisible = false

View File

@ -114,7 +114,7 @@ class WeekStatusView @JvmOverloads constructor(
override fun onDraw(canvas: Canvas) { override fun onDraw(canvas: Canvas) {
super.onDraw(canvas) super.onDraw(canvas)
val dayStateList = TaskManager.instance().getDayStateList() val dayStateList = TaskManager.instance().dailySignTask().getDayStateList()
if (dayStateList.isEmpty()) return if (dayStateList.isEmpty()) return
val totalWidth = measuredWidth.toFloat() val totalWidth = measuredWidth.toFloat()
@ -140,7 +140,7 @@ class WeekStatusView @JvmOverloads constructor(
// reward text // reward text
textPaint.textSize = rewardTextSize textPaint.textSize = rewardTextSize
val rewardNum = TaskManager.instance().getRewardNumOfDailySign(index) val rewardNum = TaskManager.instance().dailySignTask().getRewardNumOfDailySign(index)
textPaint.color = if (dayStatus.hasSigned) rewardTextSignedColor else rewardTextColor textPaint.color = if (dayStatus.hasSigned) rewardTextSignedColor else rewardTextColor
canvas.drawText(rewardNum.toString(), centerX, vertiMagin + dayTextSize + componentGap + 2*circleRadius + componentGap, textPaint) canvas.drawText(rewardNum.toString(), centerX, vertiMagin + dayTextSize + componentGap + 2*circleRadius + componentGap, textPaint)
} }

View File

@ -44,13 +44,19 @@ class TaskManager private constructor() {
} }
private var mCurDayIndexDailySign: Int = 0
private val mDailySignTaskHelper: DailySignTaskHelper by lazy {
DailySignTaskHelper()
}
private val mutex = Mutex() private val mutex = Mutex()
@Volatile @Volatile
private var initialized = false private var initialized = false
private var mTaskConfig: TaskBean? = null private var mTaskConfig: TaskBean? = null
private var mDailySignData: DailySignBean = DailySignBean()
private val mGson = GsonBuilder().create() private val mGson = GsonBuilder().create()
@ -60,7 +66,7 @@ class TaskManager private constructor() {
// TODO - remove test code // TODO - remove test code
if (true) { if (true) {
generateTestDailySignTestBean() mDailySignTaskHelper.generateTestDailySignTestBean()
} }
} }
@ -77,9 +83,8 @@ class TaskManager private constructor() {
mutex.withLock { mutex.withLock {
if (!initialized) { if (!initialized) {
loadTaskConfigFromAsset() loadTaskConfigFromAsset()
loadTaskStatesFromSp() mDailySignTaskHelper.loadTaskStatesFromSp()
initHelpers()
initCalculate()
} }
} }
} }
@ -94,24 +99,25 @@ class TaskManager private constructor() {
} }
private suspend fun loadTaskStatesFromSp() {
return withContext(Dispatchers.IO) {
val taskStateBeanInSp = SpUtil.instance().getObject<DailySignBean>(SpUtil.KEY_TASK_BEAN) private fun initHelpers() {
if (taskStateBeanInSp == null) { mDailySignTaskHelper.setTaskConfig(getDailyCheckInTask()!!)
SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mDailySignData)
} else {
mDailySignData = taskStateBeanInSp
}
}
} }
private fun initCalculate() {
fun dailySignTask(): DailySignTaskHelper {
return mDailySignTaskHelper
} }
//------------------------- Get tasks ------------------------------- //------------------------- Get tasks -------------------------------
// 日常任务 // 日常任务
fun getDailyCheckInTask(): Task? { fun getDailyCheckInTask(): Task? {
@ -153,6 +159,38 @@ class TaskManager private constructor() {
} }
}
private class ConfigHelper {
}
class DailySignTaskHelper() {
private var mCurDayIndexDailySign: Int = 0
private var mDailySignData: DailySignBean = DailySignBean()
private lateinit var mTaskConfig: Task
fun setTaskConfig(taskConfig: Task) {
mTaskConfig = taskConfig
}
suspend fun loadTaskStatesFromSp() {
return withContext(Dispatchers.IO) {
val taskStateBeanInSp = SpUtil.instance().getObject<DailySignBean>(SpUtil.KEY_TASK_BEAN)
if (taskStateBeanInSp == null) {
SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mDailySignData)
} else {
mDailySignData = taskStateBeanInSp
}
}
}
fun getCurDayIndexOfDailyCheckIn() : Int { fun getCurDayIndexOfDailyCheckIn() : Int {
var dayIndexOfPeriod = 0 var dayIndexOfPeriod = 0
@ -180,7 +218,7 @@ class TaskManager private constructor() {
val daySignState = mDailySignData.signStateList[dayIndex] val daySignState = mDailySignData.signStateList[dayIndex]
if (!daySignState.hasSigned || (dayIndex == mCurDayIndexDailySign && !daySignState.hasWatchedAd)) { if (!daySignState.hasSigned || (dayIndex == mCurDayIndexDailySign && !daySignState.hasWatchedAd)) {
val dayReward = getDailyCheckInTask()?.reward_details?.get(dayIndex)?.value ?: 0 val dayReward = getRewardNumOfDailySign(dayIndex)
val finalReward = if (isDoubleReward) 2*dayReward else dayReward val finalReward = if (isDoubleReward) 2*dayReward else dayReward
daySignState.hasRewardedNum += finalReward daySignState.hasRewardedNum += finalReward
daySignState.hasSigned = true daySignState.hasSigned = true
@ -201,7 +239,7 @@ class TaskManager private constructor() {
SpUtil.instance().putObject(SpUtil.KEY_DAILY_SIGN, mDailySignData) SpUtil.instance().putObject(SpUtil.KEY_DAILY_SIGN, mDailySignData)
} }
private fun generateTestDailySignTestBean() { fun generateTestDailySignTestBean() {
mDailySignData = DailySignBean().apply { mDailySignData = DailySignBean().apply {
startMs = DateUtil.getCurTimeMs() - 4 * DateUtil.MS_NUM_ONE_DAY startMs = DateUtil.getCurTimeMs() - 4 * DateUtil.MS_NUM_ONE_DAY
signStateList.clear() signStateList.clear()
@ -255,7 +293,7 @@ class TaskManager private constructor() {
} }
fun getRewardNumOfDailySign(dayIndex: Int) : Int { fun getRewardNumOfDailySign(dayIndex: Int) : Int {
return getDailyCheckInTask()?.reward_details?.get(dayIndex)?.value ?: 0 return mTaskConfig.reward_details[dayIndex].value
} }
fun isDailySignAllOperationDone(): Boolean { fun isDailySignAllOperationDone(): Boolean {
@ -263,7 +301,25 @@ class TaskManager private constructor() {
return curDayState.hasSigned && curDayState.hasWatchedAd && getForgotSignFirstDayIndex() <= 0 return curDayState.hasSigned && curDayState.hasWatchedAd && getForgotSignFirstDayIndex() <= 0
} }
}
private class DailyWatchVideoTaskHelper {
} }
private class DailyBoxTaskHelper {
}
private class NewBieWithdrawTaskHelper {
}
private class NewBieEnableNotifyTaskHelper {
}
private class NewBieJoinDiscordTaskHelper {
}