diff --git a/app/src/main/java/com/gamedog/vididin/main/fragments/TasksFragment.kt b/app/src/main/java/com/gamedog/vididin/main/fragments/TasksFragment.kt index 31310d8..16e8973 100644 --- a/app/src/main/java/com/gamedog/vididin/main/fragments/TasksFragment.kt +++ b/app/src/main/java/com/gamedog/vididin/main/fragments/TasksFragment.kt @@ -156,8 +156,8 @@ class TasksFragment : AppViewsFragment(), OnTab mDailyWatchVideoAdViewList.add(watchTaskItemView) binding?.dailyTasksContainer!!.run { - watchTaskItemView.initUI(R.mipmap.icon_video_task, R.string.daily_video_task_title, - detail.target_count, detail.value, if (index == 0) R.string.resgatar else R.string.go_and_do) + watchTaskItemView.initUI(R.mipmap.icon_ad, R.string.daily_ad_task_title, + detail.target_count, detail.value) addView(watchTaskItemView, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT) if (true) { @@ -183,7 +183,7 @@ class TasksFragment : AppViewsFragment(), OnTab binding?.dailyTasksContainer!!.run { watchTaskItemView.initUI(R.mipmap.icon_video_task, R.string.daily_video_task_title, - detail.target_count, detail.value, if (index == 0) R.string.resgatar else R.string.go_and_do) + detail.target_count, detail.value) addView(watchTaskItemView, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT) if (index != dailyWatchVideoTask.reward_details.size - 1) { @@ -205,16 +205,18 @@ class TasksFragment : AppViewsFragment(), OnTab } private fun updateDailyWatchVideoUI() { - val statusBean = TaskManager.instance().dailyWatchVideoStatus().getStatus() + val statusBean = TaskManager.instance().dailyWatchVideoStatus().getStatusBean() + val subTaskStatusList = statusBean.getSubTaskRewardState() mDailyWatchVideoTaskViewList.forEachIndexed { index, view -> - view.updateProgress(statusBean.getTodayWatchedCount()) + view.updateProgress(statusBean.getTodayWatchedCount(), subTaskStatusList[index].state) } } private fun updateDailyWatchAdUI() { - val statusBean = TaskManager.instance().dailyWatchAdStatus().getStatus() + val statusBean = TaskManager.instance().dailyWatchAdStatus().getStatusBean() + val subTaskStatusList = statusBean.getSubTaskRewardState() mDailyWatchVideoAdViewList.forEachIndexed { index, view -> - view.updateProgress(statusBean.getTodayWatchedAdCount()) + view.updateProgress(statusBean.getTodayWatchedAdCount(), subTaskStatusList[index].state) } } diff --git a/app/src/main/java/com/gamedog/vididin/main/fragments/task/widget/DailyTaskItemView.kt b/app/src/main/java/com/gamedog/vididin/main/fragments/task/widget/DailyTaskItemView.kt index 1316c5b..50194af 100644 --- a/app/src/main/java/com/gamedog/vididin/main/fragments/task/widget/DailyTaskItemView.kt +++ b/app/src/main/java/com/gamedog/vididin/main/fragments/task/widget/DailyTaskItemView.kt @@ -6,7 +6,11 @@ import android.view.LayoutInflater import android.widget.LinearLayout import com.ama.core.architecture.util.ResUtil import com.ama.core.architecture.util.setOnClickBatch +import com.gamedog.vididin.R import com.gamedog.vididin.databinding.DailyTaskItemViewBinding +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 class DailyTaskItemView @JvmOverloads constructor( @@ -35,23 +39,50 @@ class DailyTaskItemView @JvmOverloads constructor( - fun initUI(titleIconRes: Int, titleRes: Int, videosNum: Int, goldReward: Int, actionRes: Int) { + fun initUI(titleIconRes: Int, titleRes: Int, videosNum: Int, goldReward: Int) { mRewardNum = goldReward mNeedWatchTotal = videosNum mBinding.ivItemIcon.setImageResource(titleIconRes) mBinding.tvItemTitle.text = String.format(ResUtil.getString(titleRes), videosNum) - mBinding.tvAction.setText(actionRes) mBinding.tvRewardNum.text = "+$goldReward" mBinding.tvItemProgress.text = "(0/$videosNum)" } - fun updateProgress(finishVideoNum: Int) { - val showWatchedNum = if (finishVideoNum > mNeedWatchTotal) mNeedWatchTotal else finishVideoNum - mBinding.tvItemProgress.text = "($showWatchedNum/$mNeedWatchTotal)" - mBinding.itemProgress.setProgress(100*showWatchedNum/mNeedWatchTotal) + fun updateProgress(watchedCount: Int, subTaskState: Int) { + doUpdateProgress(watchedCount) + + with(mBinding.tvAction) { + when(subTaskState) { + STATE_ONGOING -> { + setText(R.string.go_and_do) + setBackgroundResource(R.drawable.bg_sub_task_normal) + isClickable = true + alpha = 1F + } + + STATE_FINISH -> { + setText(R.string.resgatar) + setBackgroundResource(R.drawable.bg_sub_task_normal) + isClickable = true + alpha = 1F + } + + STATE_CLAIMED -> { + setText(R.string.Resgatado) + setBackgroundResource(R.drawable.bg_sub_task_normal) + isClickable = false + alpha = 0.4F + } + } + } } + private fun doUpdateProgress(finishNum: Int) { + val properShowNumForCurSubTask = if (finishNum > mNeedWatchTotal) mNeedWatchTotal else finishNum + mBinding.tvItemProgress.text = "($properShowNumForCurSubTask/$mNeedWatchTotal)" + mBinding.itemProgress.setProgress(100*properShowNumForCurSubTask/mNeedWatchTotal) + } fun setActionFun(action: ()->Unit) { mAction = action diff --git a/app/src/main/java/com/gamedog/vididin/manager/helpers/BaseTaskHelper.kt b/app/src/main/java/com/gamedog/vididin/manager/helpers/BaseTaskHelper.kt index 5cc08a7..64f0034 100644 --- a/app/src/main/java/com/gamedog/vididin/manager/helpers/BaseTaskHelper.kt +++ b/app/src/main/java/com/gamedog/vididin/manager/helpers/BaseTaskHelper.kt @@ -40,7 +40,7 @@ abstract class BaseTaskHelper { SpUtil.instance().putObject(mSpKey, mStateBean) } - fun getStatus() : T { + fun getStatusBean() : T { return mStateBean } diff --git a/app/src/main/java/com/gamedog/vididin/manager/helpers/DailyWatchAdTaskHelper.kt b/app/src/main/java/com/gamedog/vididin/manager/helpers/DailyWatchAdTaskHelper.kt index 440f9ab..2b184dd 100644 --- a/app/src/main/java/com/gamedog/vididin/manager/helpers/DailyWatchAdTaskHelper.kt +++ b/app/src/main/java/com/gamedog/vididin/manager/helpers/DailyWatchAdTaskHelper.kt @@ -1,12 +1,14 @@ package com.gamedog.vididin.manager.helpers import com.ama.core.architecture.util.DateUtil -import com.ama.core.architecture.util.ResUtil import com.ama.core.architecture.util.SpUtil import com.ama.core.architecture.util.eventbus.NotifyMan import com.gamedog.vididin.R import com.gamedog.vididin.VididinEvents import com.gamedog.vididin.core.login.login.AccountManager +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.TaskStateWatchAd @@ -55,7 +57,7 @@ class DailyWatchAdTaskHelper : BaseTaskHelper() { mStateBean.run { if (!isAllTaskFinish()) { addWatchedCount(newAdWatchedNum) - checkSubTaskFinishState() + calculateNewState() saveState2Sp() notifyEvents() } @@ -63,29 +65,36 @@ class DailyWatchAdTaskHelper : BaseTaskHelper() { } - fun checkSubTaskFinishState() { + fun calculateNewState() { val todayWatchedCount = mStateBean.getTodayWatchedAdCount() mStateBean.getSubTaskRewardState().forEachIndexed { index, subTaskState -> - if (!subTaskState.isFinish && todayWatchedCount >= subTaskState.mTargetAdCount) { - AccountManager.addGold(subTaskState.mRewardNum) - subTaskState.isFinish = true - } - } - } - - fun getAdTaskShowingText() : String { - if (mStateBean.isAllTaskFinish()) { - return ResUtil.getString(R.string.done) - } else { - val subTaskStatusList = mStateBean.getSubTaskRewardState() - subTaskStatusList.forEach { - if (!it.isFinish) { - return it.mRewardNum.toString() + val targetCount = subTaskState.mTargetAdCount + when(subTaskState.state) { + STATE_ONGOING -> { + if (todayWatchedCount >= targetCount) { + subTaskState.state = STATE_FINISH + } } } } - return "" } + 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) + return true + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + return false + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/gamedog/vididin/manager/helpers/DailyWatchVideoTaskHelper.kt b/app/src/main/java/com/gamedog/vididin/manager/helpers/DailyWatchVideoTaskHelper.kt index 9f83b9a..402af34 100644 --- a/app/src/main/java/com/gamedog/vididin/manager/helpers/DailyWatchVideoTaskHelper.kt +++ b/app/src/main/java/com/gamedog/vididin/manager/helpers/DailyWatchVideoTaskHelper.kt @@ -5,6 +5,8 @@ import com.ama.core.architecture.util.SpUtil import com.ama.core.architecture.util.eventbus.NotifyMan import com.gamedog.vididin.VididinEvents import com.gamedog.vididin.core.login.login.AccountManager +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 @@ -50,7 +52,7 @@ class DailyWatchVideoTaskHelper : BaseTaskHelper() { mStateBean.run { if (!isAllTaskFinish()) { if (addWatchedVideoInfo(dataPair)) { - checkSubTaskFinishState() + calculateNewState() saveState2Sp() notifyEvents() } @@ -59,16 +61,35 @@ class DailyWatchVideoTaskHelper : BaseTaskHelper() { } - fun checkSubTaskFinishState() { + fun calculateNewState() { val todayWatchedCount = mStateBean.getTodayWatchedCount() mStateBean.getSubTaskRewardState().forEachIndexed { index, subTaskState -> - if (!subTaskState.isFinish && todayWatchedCount >= subTaskState.mTargetVideoCount) { - AccountManager.addGold(subTaskState.mRewardNum) - subTaskState.isFinish = true + 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) + return true + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + return false + } } \ No newline at end of file diff --git a/app/src/main/java/com/gamedog/vididin/manager/taskbeans/BaseTaskState.kt b/app/src/main/java/com/gamedog/vididin/manager/taskbeans/BaseTaskState.kt new file mode 100644 index 0000000..2580327 --- /dev/null +++ b/app/src/main/java/com/gamedog/vididin/manager/taskbeans/BaseTaskState.kt @@ -0,0 +1,13 @@ +package com.gamedog.vididin.manager.taskbeans + +import kotlinx.serialization.Serializable + + +@Serializable +abstract class BaseTaskState { + companion object { + const val STATE_ONGOING = 1 + const val STATE_FINISH = 2 + const val STATE_CLAIMED = 3 + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gamedog/vididin/manager/taskbeans/TaskDailySignBean.kt b/app/src/main/java/com/gamedog/vididin/manager/taskbeans/TaskDailySignBean.kt index 84eddf9..48f3da5 100644 --- a/app/src/main/java/com/gamedog/vididin/manager/taskbeans/TaskDailySignBean.kt +++ b/app/src/main/java/com/gamedog/vididin/manager/taskbeans/TaskDailySignBean.kt @@ -6,7 +6,7 @@ import java.io.Serializable data class TaskDailySignBean( var startDurationMs: Long = 0, val signStateList: MutableList = mutableListOf() -): Serializable { +): BaseTaskState() { init { signStateList.add(DailySignDayInfoBean()) signStateList.add(DailySignDayInfoBean()) diff --git a/app/src/main/java/com/gamedog/vididin/manager/taskbeans/TaskStateWatchAd.kt b/app/src/main/java/com/gamedog/vididin/manager/taskbeans/TaskStateWatchAd.kt index 4f818c3..d268925 100644 --- a/app/src/main/java/com/gamedog/vididin/manager/taskbeans/TaskStateWatchAd.kt +++ b/app/src/main/java/com/gamedog/vididin/manager/taskbeans/TaskStateWatchAd.kt @@ -2,13 +2,13 @@ package com.gamedog.vididin.manager.taskbeans import com.gamedog.vididin.main.fragments.task.RewardDetail -import java.io.Serializable +import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_ONGOING import kotlin.collections.forEach data class TaskStateWatchAd( var todayMs: Long = 0, -): Serializable { +): BaseTaskState() { private var mWatchAdCount: Int = 0 private val mSubTaskRewardState: MutableList = mutableListOf() @@ -21,14 +21,14 @@ data class TaskStateWatchAd( } fun isAllTaskFinish(): Boolean { - return mSubTaskRewardState.all { it.isFinish } + return mSubTaskRewardState.all { it.state > STATE_ONGOING } } fun initSubTaskRewardList(subTasks: List) { mSubTaskRewardState.clear() subTasks.forEach { - mSubTaskRewardState.add(SubAdTaskBean(it.value, it.target_count, false)) + mSubTaskRewardState.add(SubAdTaskBean(it.value, it.target_count, STATE_ONGOING)) } } @@ -47,7 +47,7 @@ data class TaskStateWatchAd( data class SubAdTaskBean( val mRewardNum: Int, val mTargetAdCount: Int, - var isFinish: Boolean = false,) + var state: Int = STATE_ONGOING,) diff --git a/app/src/main/java/com/gamedog/vididin/manager/taskbeans/TaskStateWatchVideo.kt b/app/src/main/java/com/gamedog/vididin/manager/taskbeans/TaskStateWatchVideo.kt index d6441a9..4b56f3b 100644 --- a/app/src/main/java/com/gamedog/vididin/manager/taskbeans/TaskStateWatchVideo.kt +++ b/app/src/main/java/com/gamedog/vididin/manager/taskbeans/TaskStateWatchVideo.kt @@ -1,13 +1,13 @@ package com.gamedog.vididin.manager.taskbeans import com.gamedog.vididin.main.fragments.task.RewardDetail -import java.io.Serializable +import com.gamedog.vididin.manager.taskbeans.BaseTaskState.Companion.STATE_ONGOING import java.util.concurrent.ConcurrentHashMap data class DailyStateWatchVideoBean( var todayMs: Long = 0, -): Serializable { +): BaseTaskState() { private val mWatchedMap = ConcurrentHashMap() private val mSubTaskRewardState: MutableList = mutableListOf() @@ -36,14 +36,14 @@ data class DailyStateWatchVideoBean( } fun isAllTaskFinish(): Boolean { - return mSubTaskRewardState.all { it.isFinish } + return mSubTaskRewardState.all { it.state >= STATE_CLAIMED } } fun initSubTaskRewardList(subTasks: List) { mSubTaskRewardState.clear() subTasks.forEach { - mSubTaskRewardState.add(SubTaskBean(it.value, it.target_count, false)) + mSubTaskRewardState.add(SubTaskBean(it.value, it.target_count, STATE_ONGOING)) } } @@ -54,5 +54,5 @@ data class DailyStateWatchVideoBean( data class SubTaskBean( val mRewardNum: Int, val mTargetVideoCount: Int, - var isFinish: Boolean = false,) + var state: Int = STATE_ONGOING,) diff --git a/app/src/main/res/drawable/bg_sub_task_disable.xml b/app/src/main/res/drawable/bg_sub_task_disable.xml new file mode 100644 index 0000000..b84b61e --- /dev/null +++ b/app/src/main/res/drawable/bg_sub_task_disable.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/app/src/main/res/drawable/bg_sub_task_normal.xml b/app/src/main/res/drawable/bg_sub_task_normal.xml new file mode 100644 index 0000000..3670d5c --- /dev/null +++ b/app/src/main/res/drawable/bg_sub_task_normal.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/app/src/main/res/layout/daily_task_item_view.xml b/app/src/main/res/layout/daily_task_item_view.xml index 70e07db..f0bc009 100644 --- a/app/src/main/res/layout/daily_task_item_view.xml +++ b/app/src/main/res/layout/daily_task_item_view.xml @@ -112,11 +112,11 @@ android:layout_alignParentRight="true" android:layout_marginLeft="9dp" android:gravity="center" - android:background="@drawable/vididinapp_feature_message_bg_task_fazer" + android:background="@drawable/bg_sub_task_normal" android:textSize="14sp" android:textStyle="bold" android:textColor="@color/white" - android:text="@string/resgatar" + android:text="@string/go_and_do" /> diff --git a/app/src/main/res/mipmap-xxhdpi/icon_ad.webp b/app/src/main/res/mipmap-xxhdpi/icon_ad.webp new file mode 100644 index 0000000..3df9f49 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_ad.webp differ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3d392f3..7abb536 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -27,6 +27,7 @@ R$ 0.0 Saque para Novatos Assistir a %d vídeo + Assistir a %d Anúncio Notificações push Ative as notificações e ganhe 200 moedas! Comunidade Discord