优化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) {
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() {
val hasFinishAllSignWork = TaskManager.instance().isDailySignAllOperationDone()
val hasFinishAllSignWork = TaskManager.instance().dailySignTask().isDailySignAllOperationDone()
binding?.ivGotoDailySign?.apply {
setText(
@ -244,7 +244,7 @@ class TasksFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnTab
}
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() {
if (TaskManager.instance().executeDailySign(mCurDayIndex, false, false)) {
if (TaskManager.instance().dailySignTask().executeDailySign(mCurDayIndex, false, false)) {
DailySignSuccessDialog(mActivity).initData(mConfigList?.get(mCurDayIndex)?.value, true).show()
updateUI(mCurDayIndex)
}
@ -65,7 +65,7 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
private fun clickedAdSingleBut() {
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()
updateUI(mCurDayIndex)
}
@ -74,7 +74,7 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
private fun clickedAdDoubleBut() {
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(
2
), false).show()
@ -84,10 +84,10 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
}
private fun clickedComplementSign() {
val firstForgotSignDayIndex = TaskManager.instance().getForgotSignFirstDayIndex()
val firstForgotSignDayIndex = TaskManager.instance().dailySignTask().getForgotSignFirstDayIndex()
if (firstForgotSignDayIndex > 0) {
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()
updateUI(firstForgotSignDayIndex)
}
@ -121,14 +121,14 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
mConfigList?.let {
mSignItemViewList.forEachIndexed { index, itemView->
itemView.setData(mConfigList!![index],
TaskManager.instance().getDailySignStateBean(index))
TaskManager.instance().dailySignTask().getDailySignStateBean(index))
}
}
}
}
private fun initSignState() {
mCurDayIndex = TaskManager.instance().getCurDayIndexOfDailyCheckIn()
mCurDayIndex = TaskManager.instance().dailySignTask().getCurDayIndexOfDailyCheckIn()
mSignItemViewList[mCurDayIndex].setSelectState(true)
updateUI(mCurDayIndex)
}
@ -141,7 +141,7 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
mBinding.tvSignedTotal.text = buildString {
append(TaskManager.instance().getSignDaysTotal())
append(TaskManager.instance().dailySignTask().getSignDaysTotal())
append("/7")
}
mSignItemViewList[signedDayIndex].updateUI()
@ -163,7 +163,7 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
mConfigList?.get(mCurDayIndex)?.value
}
} else {
val forgotSignDays = TaskManager.instance().getForgotSignDays()
val forgotSignDays = TaskManager.instance().dailySignTask().getForgotSignDays()
if (forgotSignDays > 0) {
mBinding.actionNormalTwoButs.isVisible = false
mBinding.actionWatchAd.isVisible = false

View File

@ -114,7 +114,7 @@ class WeekStatusView @JvmOverloads constructor(
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
val dayStateList = TaskManager.instance().getDayStateList()
val dayStateList = TaskManager.instance().dailySignTask().getDayStateList()
if (dayStateList.isEmpty()) return
val totalWidth = measuredWidth.toFloat()
@ -140,7 +140,7 @@ class WeekStatusView @JvmOverloads constructor(
// reward text
textPaint.textSize = rewardTextSize
val rewardNum = TaskManager.instance().getRewardNumOfDailySign(index)
val rewardNum = TaskManager.instance().dailySignTask().getRewardNumOfDailySign(index)
textPaint.color = if (dayStatus.hasSigned) rewardTextSignedColor else rewardTextColor
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()
@Volatile
private var initialized = false
private var mTaskConfig: TaskBean? = null
private var mDailySignData: DailySignBean = DailySignBean()
private val mGson = GsonBuilder().create()
@ -60,7 +66,7 @@ class TaskManager private constructor() {
// TODO - remove test code
if (true) {
generateTestDailySignTestBean()
mDailySignTaskHelper.generateTestDailySignTestBean()
}
}
@ -77,9 +83,8 @@ class TaskManager private constructor() {
mutex.withLock {
if (!initialized) {
loadTaskConfigFromAsset()
loadTaskStatesFromSp()
initCalculate()
mDailySignTaskHelper.loadTaskStatesFromSp()
initHelpers()
}
}
}
@ -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)
if (taskStateBeanInSp == null) {
SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mDailySignData)
} else {
mDailySignData = taskStateBeanInSp
}
}
private fun initHelpers() {
mDailySignTaskHelper.setTaskConfig(getDailyCheckInTask()!!)
}
private fun initCalculate() {
fun dailySignTask(): DailySignTaskHelper {
return mDailySignTaskHelper
}
//------------------------- Get tasks -------------------------------
// 日常任务
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 {
var dayIndexOfPeriod = 0
@ -180,7 +218,7 @@ class TaskManager private constructor() {
val daySignState = mDailySignData.signStateList[dayIndex]
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
daySignState.hasRewardedNum += finalReward
daySignState.hasSigned = true
@ -201,7 +239,7 @@ class TaskManager private constructor() {
SpUtil.instance().putObject(SpUtil.KEY_DAILY_SIGN, mDailySignData)
}
private fun generateTestDailySignTestBean() {
fun generateTestDailySignTestBean() {
mDailySignData = DailySignBean().apply {
startMs = DateUtil.getCurTimeMs() - 4 * DateUtil.MS_NUM_ONE_DAY
signStateList.clear()
@ -255,7 +293,7 @@ class TaskManager private constructor() {
}
fun getRewardNumOfDailySign(dayIndex: Int) : Int {
return getDailyCheckInTask()?.reward_details?.get(dayIndex)?.value ?: 0
return mTaskConfig.reward_details[dayIndex].value
}
fun isDailySignAllOperationDone(): Boolean {
@ -263,7 +301,25 @@ class TaskManager private constructor() {
return curDayState.hasSigned && curDayState.hasWatchedAd && getForgotSignFirstDayIndex() <= 0
}
}
private class DailyWatchVideoTaskHelper {
}
private class DailyBoxTaskHelper {
}
private class NewBieWithdrawTaskHelper {
}
private class NewBieEnableNotifyTaskHelper {
}
private class NewBieJoinDiscordTaskHelper {
}