修改获取金币逻辑为 手动获取

This commit is contained in:
renhaoting 2025-12-02 15:00:33 +08:00
parent 32d201030d
commit 93543545c5
14 changed files with 144 additions and 51 deletions

View File

@ -156,8 +156,8 @@ class TasksFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), 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<ViewBinding, UiState, ViewModel>(), 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<ViewBinding, UiState, ViewModel>(), 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)
}
}

View File

@ -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

View File

@ -40,7 +40,7 @@ abstract class BaseTaskHelper<T: Any> {
SpUtil.instance().putObject(mSpKey, mStateBean)
}
fun getStatus() : T {
fun getStatusBean() : T {
return mStateBean
}

View File

@ -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<TaskStateWatchAd>() {
mStateBean.run {
if (!isAllTaskFinish()) {
addWatchedCount(newAdWatchedNum)
checkSubTaskFinishState()
calculateNewState()
saveState2Sp()
notifyEvents()
}
@ -63,29 +65,36 @@ class DailyWatchAdTaskHelper : BaseTaskHelper<TaskStateWatchAd>() {
}
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
val targetCount = subTaskState.mTargetAdCount
when(subTaskState.state) {
STATE_ONGOING -> {
if (todayWatchedCount >= targetCount) {
subTaskState.state = STATE_FINISH
}
}
}
}
}
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()
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
}
return ""
}
}

View File

@ -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<DailyStateWatchVideoBean>() {
mStateBean.run {
if (!isAllTaskFinish()) {
if (addWatchedVideoInfo(dataPair)) {
checkSubTaskFinishState()
calculateNewState()
saveState2Sp()
notifyEvents()
}
@ -59,16 +61,35 @@ class DailyWatchVideoTaskHelper : BaseTaskHelper<DailyStateWatchVideoBean>() {
}
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
}
}

View File

@ -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
}
}

View File

@ -6,7 +6,7 @@ import java.io.Serializable
data class TaskDailySignBean(
var startDurationMs: Long = 0,
val signStateList: MutableList<DailySignDayInfoBean> = mutableListOf()
): Serializable {
): BaseTaskState() {
init {
signStateList.add(DailySignDayInfoBean())
signStateList.add(DailySignDayInfoBean())

View File

@ -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<SubAdTaskBean> = 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<RewardDetail>) {
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,)

View File

@ -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<String, Long>()
private val mSubTaskRewardState: MutableList<SubTaskBean> = 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<RewardDetail>) {
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,)

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ff938a84" />
<corners android:topLeftRadius="42dp" android:topRightRadius="42dp" android:bottomLeftRadius="42dp" android:bottomRightRadius="42dp" />
</shape>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<gradient android:type="linear" android:useLevel="true" android:startColor="#ffff2a2a"
android:endColor="#ffff862f" android:angle="90" />
<corners android:topLeftRadius="45dp" android:topRightRadius="45dp"
android:bottomLeftRadius="45dp" android:bottomRightRadius="45dp" />
</shape>

View File

@ -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"
/>
</RelativeLayout>
</LinearLayout>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -27,6 +27,7 @@
<string name="cash00">R$ 0.0</string>
<string name="beginner_withdraw_title">Saque para Novatos</string>
<string name="daily_video_task_title">Assistir a %d vídeo</string>
<string name="daily_ad_task_title">Assistir a %d Anúncio</string>
<string name="beginner_notify_title">Notificações push</string>
<string name="beginner_notify_desc">Ative as notificações e ganhe 200 moedas!</string>
<string name="beginner_discord_title">Comunidade Discord</string>