调整视频任务完成后 金币获取为主动获取
This commit is contained in:
parent
797d1c01a9
commit
ef8d084744
|
|
@ -220,7 +220,7 @@ class TasksFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnTab
|
||||||
val statusBean = TaskManager.instance().dailyWatchAdStatus().getStatusBean()
|
val statusBean = TaskManager.instance().dailyWatchAdStatus().getStatusBean()
|
||||||
val subTaskStatusList = statusBean.getSubTaskRewardState()
|
val subTaskStatusList = statusBean.getSubTaskRewardState()
|
||||||
mDailyWatchAdViewList.forEachIndexed { index, view ->
|
mDailyWatchAdViewList.forEachIndexed { index, view ->
|
||||||
view.updateProgress(statusBean.getTodayWatchedAdCount(), subTaskStatusList[index].state)
|
view.updateProgress(statusBean.getTodayWatchedCount(), subTaskStatusList[index].state)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,17 @@
|
||||||
package com.gamedog.vididin.manager.helpers
|
package com.gamedog.vididin.manager.helpers
|
||||||
|
|
||||||
|
import com.ama.core.architecture.util.DateUtil
|
||||||
import com.gamedog.vididin.core.login.login.AccountManager
|
import com.gamedog.vididin.core.login.login.AccountManager
|
||||||
|
import com.gamedog.vididin.manager.taskbeans.BaseDailyTaskState
|
||||||
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_CLAIMED
|
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_CLAIMED
|
||||||
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_FINISH
|
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_FINISH
|
||||||
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_ONGOING
|
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_ONGOING
|
||||||
|
import com.gamedog.vididin.manager.taskbeans.TaskStateWatchVideo
|
||||||
import com.gamedog.vididin.manager.taskbeans.TaskStateWatchAd
|
import com.gamedog.vididin.manager.taskbeans.TaskStateWatchAd
|
||||||
|
|
||||||
abstract class BaseDailyTaskHelper : BaseTaskHelper<TaskStateWatchAd>() {
|
|
||||||
|
|
||||||
|
abstract class BaseDailyTaskHelper<T : BaseDailyTaskState> : BaseTaskHelper<T>() {
|
||||||
|
|
||||||
abstract protected fun notifyEvents()
|
abstract protected fun notifyEvents()
|
||||||
|
|
||||||
|
|
@ -30,7 +35,7 @@ abstract class BaseDailyTaskHelper : BaseTaskHelper<TaskStateWatchAd>() {
|
||||||
|
|
||||||
|
|
||||||
protected fun calculateNewState() {
|
protected fun calculateNewState() {
|
||||||
val todayWatchedCount = mStateBean.getTodayWatchedAdCount()
|
val todayWatchedCount = mStateBean.getTodayWatchedCount()
|
||||||
|
|
||||||
mStateBean.getSubTaskRewardState().forEachIndexed { index, subTaskState ->
|
mStateBean.getSubTaskRewardState().forEachIndexed { index, subTaskState ->
|
||||||
val targetCount = subTaskState.mTargetAdCount
|
val targetCount = subTaskState.mTargetAdCount
|
||||||
|
|
@ -44,16 +49,17 @@ abstract class BaseDailyTaskHelper : BaseTaskHelper<TaskStateWatchAd>() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected fun generateTodayTask() {
|
||||||
|
mStateBean = TaskStateWatchAd(DateUtil.getCurTimeMs()) as T
|
||||||
|
mStateBean.initSubTaskRewardList(mTaskConfig.reward_details)
|
||||||
|
}
|
||||||
|
|
||||||
protected fun handleOneAdWatched(newAdWatchedNum: Int) {
|
protected fun isTodayStatusBean(stateBean: TaskStateWatchAd): Boolean {
|
||||||
mStateBean.run {
|
return DateUtil.isToday(stateBean.todayMs)
|
||||||
if (!isAllTaskFinish()) {
|
|
||||||
addWatchedCount(newAdWatchedNum)
|
|
||||||
calculateNewState()
|
|
||||||
saveState2Sp()
|
|
||||||
notifyEvents()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected fun isTodayStatusBean(stateBean: TaskStateWatchVideo): Boolean {
|
||||||
|
return DateUtil.isToday(stateBean.todayMs)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -3,6 +3,7 @@ package com.gamedog.vididin.manager.helpers
|
||||||
import com.ama.core.architecture.util.SpUtil
|
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 com.gamedog.vididin.manager.taskbeans.BaseTaskState
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,12 @@
|
||||||
package com.gamedog.vididin.manager.helpers
|
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.SpUtil
|
||||||
import com.ama.core.architecture.util.eventbus.NotifyMan
|
import com.ama.core.architecture.util.eventbus.NotifyMan
|
||||||
import com.gamedog.vididin.VididinEvents
|
import com.gamedog.vididin.VididinEvents
|
||||||
import com.gamedog.vididin.manager.taskbeans.TaskStateWatchAd
|
import com.gamedog.vididin.manager.taskbeans.TaskStateWatchAd
|
||||||
|
|
||||||
|
|
||||||
class DailyWatchAdTaskHelper : BaseDailyTaskHelper() {
|
class DailyWatchAdTaskHelper : BaseDailyTaskHelper<TaskStateWatchAd>() {
|
||||||
|
|
||||||
override val mSpKey = SpUtil.KEY_DAILY_WATCH_AD_FOR_GOLD
|
override val mSpKey = SpUtil.KEY_DAILY_WATCH_AD_FOR_GOLD
|
||||||
|
|
||||||
|
|
@ -34,15 +33,15 @@ class DailyWatchAdTaskHelper : BaseDailyTaskHelper() {
|
||||||
NotifyMan.instance().sendEvent(VididinEvents.EVENT_DAILY_WATCHED_AD_NUM_CHANGED, null)
|
NotifyMan.instance().sendEvent(VididinEvents.EVENT_DAILY_WATCHED_AD_NUM_CHANGED, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun handleOneAdWatched(newAdWatchedNum: Int) {
|
||||||
private fun generateTodayTask() {
|
mStateBean.run {
|
||||||
mStateBean = TaskStateWatchAd(DateUtil.getCurTimeMs())
|
if (!isAllTaskFinish()) {
|
||||||
mStateBean.initSubTaskRewardList(mTaskConfig.reward_details)
|
addWatchedCount(newAdWatchedNum)
|
||||||
|
calculateNewState()
|
||||||
|
saveState2Sp()
|
||||||
|
notifyEvents()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isTodayStatusBean(stateBean: TaskStateWatchAd): Boolean {
|
|
||||||
return DateUtil.isToday(stateBean.todayMs)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -1,17 +1,13 @@
|
||||||
package com.gamedog.vididin.manager.helpers
|
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.SpUtil
|
||||||
import com.ama.core.architecture.util.eventbus.NotifyMan
|
import com.ama.core.architecture.util.eventbus.NotifyMan
|
||||||
import com.gamedog.vididin.VididinEvents
|
import com.gamedog.vididin.VididinEvents
|
||||||
import com.gamedog.vididin.core.login.login.AccountManager
|
import com.gamedog.vididin.manager.taskbeans.TaskStateWatchVideo
|
||||||
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_CLAIMED
|
|
||||||
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_FINISH
|
|
||||||
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_ONGOING
|
|
||||||
import com.gamedog.vididin.manager.taskbeans.DailyStateWatchVideoBean
|
|
||||||
|
|
||||||
|
|
||||||
class DailyWatchVideoTaskHelper : BaseTaskHelper<DailyStateWatchVideoBean>() {
|
class DailyWatchVideoTaskHelper : BaseDailyTaskHelper<TaskStateWatchVideo>() {
|
||||||
|
|
||||||
override val mSpKey = SpUtil.KEY_DAILY_WATCH_VIDEO
|
override val mSpKey = SpUtil.KEY_DAILY_WATCH_VIDEO
|
||||||
|
|
||||||
|
|
@ -24,7 +20,7 @@ class DailyWatchVideoTaskHelper : BaseTaskHelper<DailyStateWatchVideoBean>() {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun loadTaskFromSp() {
|
override fun loadTaskFromSp() {
|
||||||
val spStateBean = SpUtil.instance().getObject<DailyStateWatchVideoBean>(mSpKey)
|
val spStateBean = SpUtil.instance().getObject<TaskStateWatchVideo>(mSpKey)
|
||||||
if (spStateBean == null || !isTodayStatusBean(spStateBean)) {
|
if (spStateBean == null || !isTodayStatusBean(spStateBean)) {
|
||||||
generateTodayTask()
|
generateTodayTask()
|
||||||
saveState2Sp()
|
saveState2Sp()
|
||||||
|
|
@ -32,23 +28,22 @@ class DailyWatchVideoTaskHelper : BaseTaskHelper<DailyStateWatchVideoBean>() {
|
||||||
mStateBean = spStateBean
|
mStateBean = spStateBean
|
||||||
notifyEvents()
|
notifyEvents()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*val spStateBean = SpUtil.instance().getObject<TaskStateWatchAd>(mSpKey)
|
||||||
|
if (spStateBean == null || !isTodayStatusBean(spStateBean)) {
|
||||||
|
generateTodayTask()
|
||||||
|
saveState2Sp()
|
||||||
|
} else {
|
||||||
|
mStateBean = spStateBean
|
||||||
|
notifyEvents()
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun notifyEvents() {
|
override fun notifyEvents() {
|
||||||
NotifyMan.instance().sendEvent(VididinEvents.EVENT_DAILY_WATCHED_VIDEO_NUM_CHANGED, null)
|
NotifyMan.instance().sendEvent(VididinEvents.EVENT_DAILY_WATCHED_VIDEO_NUM_CHANGED, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun generateTodayTask() {
|
|
||||||
mStateBean = DailyStateWatchVideoBean(DateUtil.getCurTimeMs())
|
|
||||||
mStateBean.initSubTaskRewardList(mTaskConfig.reward_details)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun isTodayStatusBean(stateBean: DailyStateWatchVideoBean): Boolean {
|
|
||||||
return DateUtil.isToday(stateBean.todayMs)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private fun handleOneVideoWatched(dataPair: Pair<String, Long>) {
|
private fun handleOneVideoWatched(dataPair: Pair<String, Long>) {
|
||||||
mStateBean.run {
|
mStateBean.run {
|
||||||
if (!isAllTaskFinish()) {
|
if (!isAllTaskFinish()) {
|
||||||
|
|
@ -62,38 +57,4 @@ class DailyWatchVideoTaskHelper : BaseTaskHelper<DailyStateWatchVideoBean>() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun calculateNewState() {
|
|
||||||
val todayWatchedCount = mStateBean.getTodayWatchedCount()
|
|
||||||
|
|
||||||
mStateBean.getSubTaskRewardState().forEachIndexed { index, subTaskState ->
|
|
||||||
val targetCount = subTaskState.mTargetVideoCount
|
|
||||||
when(subTaskState.state) {
|
|
||||||
STATE_ONGOING -> {
|
|
||||||
if (todayWatchedCount >= targetCount) {
|
|
||||||
subTaskState.state = STATE_FINISH
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun claimSubTaskReward(subTaskIndex: Int) : Boolean {
|
|
||||||
if (subTaskIndex >= 0 && subTaskIndex < mStateBean.getSubTaskRewardState().size) {
|
|
||||||
try {
|
|
||||||
val subTask = mStateBean.getSubTaskRewardState()[subTaskIndex]
|
|
||||||
if (subTask.state == STATE_FINISH) {
|
|
||||||
AccountManager.addGold(subTask.mRewardNum)
|
|
||||||
subTask.state = STATE_CLAIMED
|
|
||||||
saveState2Sp()
|
|
||||||
notifyEvents()
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
package com.gamedog.vididin.manager.taskbeans
|
||||||
|
|
||||||
|
import com.gamedog.vididin.main.fragments.task.RewardDetail
|
||||||
|
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_ONGOING
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
import kotlin.collections.forEach
|
||||||
|
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
abstract class BaseDailyTaskState : BaseTaskState() {
|
||||||
|
protected val mSubTaskRewardState: MutableList<SubDailyTaskBean> = mutableListOf()
|
||||||
|
|
||||||
|
abstract fun getTodayWatchedCount(): Int
|
||||||
|
abstract fun addWatchedCount(newWatchedNum: Int)
|
||||||
|
abstract fun addWatchedVideoInfo(dataPair: Pair<String, Long>): Boolean
|
||||||
|
|
||||||
|
|
||||||
|
fun getSubTaskRewardState(): List<SubDailyTaskBean> {
|
||||||
|
return mSubTaskRewardState
|
||||||
|
}
|
||||||
|
|
||||||
|
fun isAllTaskFinish(): Boolean {
|
||||||
|
return mSubTaskRewardState.all { it.state >= STATE_CLAIMED }
|
||||||
|
}
|
||||||
|
|
||||||
|
fun initSubTaskRewardList(subTasks: List<RewardDetail>) {
|
||||||
|
mSubTaskRewardState.clear()
|
||||||
|
|
||||||
|
subTasks.forEach {
|
||||||
|
mSubTaskRewardState.add(SubDailyTaskBean(it.value, it.target_count, STATE_ONGOING))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data class SubDailyTaskBean(
|
||||||
|
val mRewardNum: Int,
|
||||||
|
val mTargetAdCount: Int,
|
||||||
|
var state: Int = STATE_ONGOING,)
|
||||||
|
|
@ -1,53 +1,37 @@
|
||||||
package com.gamedog.vididin.manager.taskbeans
|
package com.gamedog.vididin.manager.taskbeans
|
||||||
|
|
||||||
|
|
||||||
import com.gamedog.vididin.main.fragments.task.RewardDetail
|
|
||||||
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_ONGOING
|
|
||||||
import kotlin.collections.forEach
|
|
||||||
|
|
||||||
|
|
||||||
data class TaskStateWatchAd(
|
data class TaskStateWatchAd(
|
||||||
var todayMs: Long = 0,
|
var todayMs: Long = 0,
|
||||||
): BaseTaskState() {
|
): BaseDailyTaskState() {
|
||||||
|
|
||||||
private var mWatchAdCount: Int = 0
|
private var mWatchAdCount: Int = 0
|
||||||
private val mSubTaskRewardState: MutableList<SubAdTaskBean> = mutableListOf()
|
|
||||||
|
|
||||||
|
|
||||||
fun addWatchedCount(newWatchedNum: Int) {
|
|
||||||
|
override fun addWatchedCount(newWatchedNum: Int) {
|
||||||
if (newWatchedNum > 0) {
|
if (newWatchedNum > 0) {
|
||||||
mWatchAdCount += newWatchedNum
|
mWatchAdCount += newWatchedNum
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun isAllTaskFinish(): Boolean {
|
override fun addWatchedVideoInfo(dataPair: Pair<String, Long>): Boolean {
|
||||||
return mSubTaskRewardState.all { it.state >= STATE_CLAIMED }
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
fun initSubTaskRewardList(subTasks: List<RewardDetail>) {
|
override fun getTodayWatchedCount(): Int {
|
||||||
mSubTaskRewardState.clear()
|
|
||||||
|
|
||||||
subTasks.forEach {
|
|
||||||
mSubTaskRewardState.add(SubAdTaskBean(it.value, it.target_count, STATE_ONGOING))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getTodayWatchedAdCount(): Int {
|
|
||||||
return mWatchAdCount
|
return mWatchAdCount
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getSubTaskRewardState(): List<SubAdTaskBean> {
|
|
||||||
return mSubTaskRewardState
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
data class SubAdTaskBean(
|
|
||||||
val mRewardNum: Int,
|
|
||||||
val mTargetAdCount: Int,
|
|
||||||
var state: Int = STATE_ONGOING,)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,16 @@
|
||||||
package com.gamedog.vididin.manager.taskbeans
|
package com.gamedog.vididin.manager.taskbeans
|
||||||
|
|
||||||
import com.gamedog.vididin.main.fragments.task.RewardDetail
|
|
||||||
import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_ONGOING
|
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
|
|
||||||
|
|
||||||
data class DailyStateWatchVideoBean(
|
data class TaskStateWatchVideo(
|
||||||
var todayMs: Long = 0,
|
var todayMs: Long = 0,
|
||||||
): BaseTaskState() {
|
): BaseDailyTaskState() {
|
||||||
|
|
||||||
private val mWatchedMap = ConcurrentHashMap<String, Long>()
|
private val mWatchedMap = ConcurrentHashMap<String, Long>()
|
||||||
private val mSubTaskRewardState: MutableList<SubTaskBean> = mutableListOf()
|
|
||||||
|
|
||||||
|
override fun addWatchedVideoInfo(dataPair: Pair<String, Long>): Boolean {
|
||||||
fun clearDatas() {
|
|
||||||
mWatchedMap.clear()
|
|
||||||
todayMs = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
fun addWatchedVideoInfo(dataPair: Pair<String, Long>): Boolean {
|
|
||||||
if (!mWatchedMap.contains(dataPair.first)) {
|
if (!mWatchedMap.contains(dataPair.first)) {
|
||||||
mWatchedMap.put(dataPair.first, dataPair.second)
|
mWatchedMap.put(dataPair.first, dataPair.second)
|
||||||
return true
|
return true
|
||||||
|
|
@ -26,33 +18,14 @@ data class DailyStateWatchVideoBean(
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun addWatchedCount(newWatchedNum: Int) {
|
||||||
|
|
||||||
fun getTodayWatchedCount(): Int {
|
}
|
||||||
|
|
||||||
|
override fun getTodayWatchedCount(): Int {
|
||||||
return mWatchedMap.size
|
return mWatchedMap.size
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getSubTaskRewardState(): List<SubTaskBean> {
|
|
||||||
return mSubTaskRewardState
|
|
||||||
}
|
|
||||||
|
|
||||||
fun isAllTaskFinish(): Boolean {
|
|
||||||
return mSubTaskRewardState.all { it.state >= STATE_CLAIMED }
|
|
||||||
}
|
|
||||||
|
|
||||||
fun initSubTaskRewardList(subTasks: List<RewardDetail>) {
|
|
||||||
mSubTaskRewardState.clear()
|
|
||||||
|
|
||||||
subTasks.forEach {
|
|
||||||
mSubTaskRewardState.add(SubTaskBean(it.value, it.target_count, STATE_ONGOING))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
data class SubTaskBean(
|
|
||||||
val mRewardNum: Int,
|
|
||||||
val mTargetVideoCount: Int,
|
|
||||||
var state: Int = STATE_ONGOING,)
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue