每日观看 优化

This commit is contained in:
renhaoting 2025-12-01 17:06:47 +08:00
parent 1542db851e
commit 63d636ff1a
9 changed files with 72 additions and 42 deletions

View File

@ -10,4 +10,8 @@ object VididinEvents {
const val Event_HOME_WATCH_Time_TICK = 700
const val Event_Finish_One_Video = 701
const val Event_Toady_Watched_Total = 702
}

View File

@ -1,11 +1,14 @@
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 {
abstract class BaseTaskHelper<T: Any> {
abstract val mSpKey: String
protected lateinit var mStateBean: T
protected lateinit var mTaskConfig: Task
private var mEventCallback: NotifyMan.ICallback? = null
@ -33,6 +36,11 @@ abstract class BaseTaskHelper {
NotifyMan.instance().register(mEventCallback, *eventTypes)
}
protected fun saveState2Sp() {
SpUtil.instance().putObject(mSpKey, mStateBean)
}
fun release() {
NotifyMan.instance().unregister(mEventCallback)
}

View File

@ -1,8 +1,11 @@
package com.gamedog.vididin.manager.helpers
class DailyBoxHelper: BaseTaskHelper() {
import com.ama.core.architecture.util.SpUtil
import com.gamedog.vididin.manager.taskbeans.TaskStateBox
class DailyBoxHelper: BaseTaskHelper<TaskStateBox>() {
override val mSpKey = SpUtil.KEY_ACCOUNT
override fun loadTaskFromSp() {

View File

@ -9,35 +9,33 @@ import com.gamedog.vididin.manager.taskbeans.TaskDailySignBean
import com.gamedog.vididin.manager.taskbeans.DailySignDayInfoBean
class DailySignTaskHelper : BaseTaskHelper() {
class DailySignTaskHelper : BaseTaskHelper<TaskDailySignBean>() {
private var mCurDayIndexDailySign: Int = 0
private var mDailySignData: TaskDailySignBean = TaskDailySignBean()
override val mSpKey = SpUtil.KEY_TASK_BEAN
override fun loadTaskFromSp() {
val taskStateBeanInSp = SpUtil.instance().getObject<TaskDailySignBean>(SpUtil.KEY_TASK_BEAN)
val taskStateBeanInSp = SpUtil.instance().getObject<TaskDailySignBean>(mSpKey)
if (taskStateBeanInSp == null) {
SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mDailySignData)
saveState2Sp()
} else {
mDailySignData = taskStateBeanInSp
mStateBean = taskStateBeanInSp
}
}
fun getCurDayIndexOfDailyCheckIn() : Int {
var dayIndexOfPeriod = 0
val periodStartMs = mDailySignData.startDurationMs
val periodStartMs = mStateBean.startDurationMs
if (periodStartMs > 0) {
dayIndexOfPeriod = DateUtil.getPassedDayNum(periodStartMs, DateUtil.getCurTimeMs())
if (dayIndexOfPeriod > 6) {
mDailySignData.startDurationMs = DateUtil.getCurTimeMs()
SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mDailySignData)
mStateBean?.startDurationMs = DateUtil.getCurTimeMs()
saveState2Sp()
}
} else {
mDailySignData.startDurationMs = DateUtil.getCurTimeMs()
SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mDailySignData)
mStateBean?.startDurationMs = DateUtil.getCurTimeMs()
saveState2Sp()
}
mCurDayIndexDailySign = dayIndexOfPeriod
@ -45,11 +43,11 @@ class DailySignTaskHelper : BaseTaskHelper() {
}
fun getDailySignStateBean(dayIndex: Int): DailySignDayInfoBean {
return mDailySignData.signStateList[dayIndex]
return mStateBean.signStateList[dayIndex]
}
fun executeDailySign(dayIndex: Int, isDoubleReward: Boolean, isByAd: Boolean) : Boolean {
val daySignState = mDailySignData.signStateList[dayIndex]
val daySignState = mStateBean.signStateList[dayIndex]
if (!daySignState.hasSigned || (dayIndex == mCurDayIndexDailySign && !daySignState.hasWatchedAd)) {
val dayReward = getRewardNumOfDailySign(dayIndex)
@ -57,7 +55,7 @@ class DailySignTaskHelper : BaseTaskHelper() {
daySignState.hasRewardedNum += finalReward
daySignState.hasSigned = true
daySignState.hasWatchedAd = isByAd
saveDailySignInfo()
saveState2Sp()
AccountManager.addGold(finalReward)
notifySignStateChanged(Pair(dayIndex, daySignState))
return true
@ -69,12 +67,8 @@ class DailySignTaskHelper : BaseTaskHelper() {
NotifyMan.instance().sendEvent(VididinEvents.Event_Sign_State_Changed, NotifyMan.NotifyData(dataPair))
}
private fun saveDailySignInfo() {
SpUtil.instance().putObject(SpUtil.KEY_DAILY_SIGN, mDailySignData)
}
fun generateTestDailySignTestBean() {
mDailySignData = TaskDailySignBean().apply {
mStateBean = TaskDailySignBean().apply {
startDurationMs = DateUtil.getCurTimeMs() - 4 * DateUtil.MS_NUM_ONE_DAY
signStateList.clear()
signStateList.add(DailySignDayInfoBean(hasSigned = true, hasWatchedAd = true))
@ -86,14 +80,14 @@ class DailySignTaskHelper : BaseTaskHelper() {
signStateList.add(DailySignDayInfoBean(hasSigned = false, hasWatchedAd = false))
}
SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mDailySignData)
saveState2Sp()
AccountManager.saveBankAccount(null)
}
fun getForgotSignDays(): Int {
var forgotSignDays = 0
val curDayIndex = getCurDayIndexOfDailyCheckIn()
mDailySignData.signStateList.forEachIndexed { index, item->
mStateBean.signStateList.forEachIndexed { index, item->
if (!item.hasSigned && index < curDayIndex) {
forgotSignDays++
}
@ -103,7 +97,7 @@ class DailySignTaskHelper : BaseTaskHelper() {
fun getSignDaysTotal(): Int {
var signDays = 0
mDailySignData.signStateList.forEachIndexed { index, item->
mStateBean.signStateList.forEachIndexed { index, item->
if (item.hasSigned) {
signDays++
}
@ -113,7 +107,7 @@ class DailySignTaskHelper : BaseTaskHelper() {
fun getForgotSignFirstDayIndex(): Int {
val curDayIndex = getCurDayIndexOfDailyCheckIn()
mDailySignData.signStateList.forEachIndexed { index, item->
mStateBean.signStateList.forEachIndexed { index, item->
if (!item.hasSigned && index < curDayIndex) {
return index
}
@ -123,7 +117,7 @@ class DailySignTaskHelper : BaseTaskHelper() {
fun getDayStateList(): List<DailySignDayInfoBean> {
return mDailySignData.signStateList
return mStateBean.signStateList
}
fun getRewardNumOfDailySign(dayIndex: Int) : Int {

View File

@ -2,15 +2,14 @@ package com.gamedog.vididin.manager.helpers
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.manager.taskbeans.DailyStateWatchVideoBean
class DailyWatchVideoTaskHelper : BaseTaskHelper<DailyStateWatchVideoBean>() {
class DailyWatchVideoTaskHelper : BaseTaskHelper() {
private var mStateBean: DailyStateWatchVideoBean? = null
override val mSpKey = SpUtil.KEY_DAILY_WATCH
init {
@ -21,27 +20,34 @@ class DailyWatchVideoTaskHelper : BaseTaskHelper() {
}
override fun loadTaskFromSp() {
mStateBean = SpUtil.instance().getObject<DailyStateWatchVideoBean>(SpUtil.KEY_DAILY_WATCH)
if (mStateBean == null || !isCurBeanInToday()) {
val spStateBean = SpUtil.instance().getObject<DailyStateWatchVideoBean>(mSpKey)
if (spStateBean == null || !isCurBeanInToday(spStateBean)) {
generateTodayTask()
SpUtil.instance().putObject(SpUtil.KEY_DAILY_WATCH, mStateBean)
saveState2Sp()
} else {
mStateBean = spStateBean
notifyEvents()
}
}
private fun notifyEvents() {
// TODO check read need info
NotifyMan.instance().sendEvent(VididinEvents.Event_Toady_Watched_Total, NotifyMan.NotifyData(11111L))
}
private fun generateTodayTask() {
mStateBean?.clearDatas()
mStateBean.clearDatas()
mStateBean = DailyStateWatchVideoBean(DateUtil.getCurTimeMs())
}
private fun isCurBeanInToday(): Boolean {
return mStateBean != null && DateUtil.isToday(mStateBean?.todayStartMs!!)
private fun isCurBeanInToday(stateBean: DailyStateWatchVideoBean): Boolean {
return DateUtil.isToday(stateBean.todayStartMs)
}
private fun handleVideoWatched(dataPair: Pair<String, Long>) {
mStateBean?.run {
mStateBean.run {
addWatchedVideoInfo(dataPair)
}

View File

@ -1,8 +1,11 @@
package com.gamedog.vididin.manager.helpers
class NewbieEnableNotifyHelper: BaseTaskHelper() {
import com.ama.core.architecture.util.SpUtil
import com.gamedog.vididin.manager.taskbeans.TaskStateNewBieEnableNotify
class NewbieEnableNotifyHelper: BaseTaskHelper<TaskStateNewBieEnableNotify>() {
override val mSpKey = SpUtil.KEY_NEWBIE_ENABLE_NOTIFY
override fun loadTaskFromSp() {

View File

@ -1,8 +1,11 @@
package com.gamedog.vididin.manager.helpers
class NewbieFirstWithdrawHelper: BaseTaskHelper() {
import com.ama.core.architecture.util.SpUtil
import com.gamedog.vididin.manager.taskbeans.TaskStateNewBieFirstWithDraw
class NewbieFirstWithdrawHelper: BaseTaskHelper<TaskStateNewBieFirstWithDraw>() {
override val mSpKey = SpUtil.KEY_NEWBIE_FIRST_WITHDRAW
override fun loadTaskFromSp() {

View File

@ -1,8 +1,11 @@
package com.gamedog.vididin.manager.helpers
class NewbieJoinDiscordHelper: BaseTaskHelper() {
import com.ama.core.architecture.util.SpUtil
import com.gamedog.vididin.manager.taskbeans.TaskStateNewBieJoinDiscord
class NewbieJoinDiscordHelper: BaseTaskHelper<TaskStateNewBieJoinDiscord>() {
override val mSpKey = SpUtil.KEY_NEWBIE_JOIN_DISCORD
override fun loadTaskFromSp() {

View File

@ -23,6 +23,12 @@ class SpUtil private constructor(spFileName: String) {
// Various tasks
const val KEY_DAILY_SIGN = "KEY_DAILY_SIGN"
const val KEY_DAILY_WATCH = "KEY_DAILY_WATCH"
const val KEY_DAILY_BOX = "KEY_DAILY_BOX"
const val KEY_NEWBIE_FIRST_WITHDRAW = "KEY_NEWBIE_FIRST_WITHDRAW"
const val KEY_NEWBIE_ENABLE_NOTIFY = "KEY_NEWBIE_ENABLE_NOTIFY"
const val KEY_NEWBIE_JOIN_DISCORD = "KEY_NEWBIE_JOIN_DISCORD"