每日观看 优化

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_HOME_WATCH_Time_TICK = 700
const val Event_Finish_One_Video = 701 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 package com.gamedog.vididin.manager.helpers
import com.ama.core.architecture.util.SpUtil
import com.ama.core.architecture.util.eventbus.NotifyMan import com.ama.core.architecture.util.eventbus.NotifyMan
import com.gamedog.vididin.main.fragments.task.Task import com.gamedog.vididin.main.fragments.task.Task
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext 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 protected lateinit var mTaskConfig: Task
private var mEventCallback: NotifyMan.ICallback? = null private var mEventCallback: NotifyMan.ICallback? = null
@ -33,6 +36,11 @@ abstract class BaseTaskHelper {
NotifyMan.instance().register(mEventCallback, *eventTypes) NotifyMan.instance().register(mEventCallback, *eventTypes)
} }
protected fun saveState2Sp() {
SpUtil.instance().putObject(mSpKey, mStateBean)
}
fun release() { fun release() {
NotifyMan.instance().unregister(mEventCallback) NotifyMan.instance().unregister(mEventCallback)
} }

View File

@ -1,8 +1,11 @@
package com.gamedog.vididin.manager.helpers 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() { override fun loadTaskFromSp() {

View File

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

View File

@ -1,8 +1,11 @@
package com.gamedog.vididin.manager.helpers 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() { override fun loadTaskFromSp() {

View File

@ -1,8 +1,11 @@
package com.gamedog.vididin.manager.helpers 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() { override fun loadTaskFromSp() {

View File

@ -1,8 +1,11 @@
package com.gamedog.vididin.manager.helpers 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() { override fun loadTaskFromSp() {

View File

@ -23,6 +23,12 @@ class SpUtil private constructor(spFileName: String) {
// Various tasks // Various tasks
const val KEY_DAILY_SIGN = "KEY_DAILY_SIGN" const val KEY_DAILY_SIGN = "KEY_DAILY_SIGN"
const val KEY_DAILY_WATCH = "KEY_DAILY_WATCH" 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"