从配置文件动态读取 每日观看个数阶梯任务

This commit is contained in:
renhaoting 2025-12-01 16:13:44 +08:00
parent f4aebf8e9c
commit 1542db851e
5 changed files with 51 additions and 89 deletions

View File

@ -2,7 +2,9 @@ package com.gamedog.vididin.main.fragments
import android.Manifest
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.updatePadding
@ -23,6 +25,7 @@ import com.gamedog.vididin.core.login.login.AccountManager
import com.gamedog.vididin.main.WatchVideoDialog
import com.gamedog.vididin.main.fragments.task.DailySignDialog
import com.gamedog.vididin.main.fragments.task.TaskBean
import com.gamedog.vididin.main.fragments.task.widget.DailyTaskItemView
import com.gamedog.vididin.main.interfaces.OnTabClickAgainListener
import com.gamedog.vididin.manager.TaskManager
import com.gamedog.vididin.router.Router
@ -38,10 +41,13 @@ import com.gamedog.vididin.main.fragments.home.YoutubeUiState as UiState
@AndroidEntryPoint
class TasksFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnTabClickAgainListener, OnFragmentBackgroundListener {
private var mTaskConfig: TaskBean? = null
override val mViewModel: ViewModel by viewModels()
override var isBackgroundBright: Boolean = true
private val mDailyWatchVideoTaskViewList = mutableListOf<DailyTaskItemView>()
override fun inflateViewBinding(
inflater: LayoutInflater,
@ -122,31 +128,7 @@ class TasksFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnTab
}
dailyTaskWatch1.initUI(R.mipmap.icon_video_task, R.string.daily_video_task_title, 1, R.string.resgatar)
dailyTaskWatch1.setActionFun {
gotoWithVideo()
}
dailyTaskWatch5.initUI(R.mipmap.icon_video_task, R.string.daily_video_task_title, 5, R.string.go_and_do)
dailyTaskWatch5.setActionFun {
gotoWithVideo()
}
dailyTaskWatch10.initUI(R.mipmap.icon_video_task, R.string.daily_video_task_title, 10, R.string.go_and_do)
dailyTaskWatch10.setActionFun {
gotoWithVideo()
}
dailyTaskWatch20.initUI(R.mipmap.icon_video_task, R.string.daily_video_task_title, 20, R.string.go_and_do)
dailyTaskWatch20.setActionFun {
gotoWithVideo()
}
dailyTaskWatch30.initUI(R.mipmap.icon_video_task, R.string.daily_video_task_title, 30, R.string.go_and_do)
dailyTaskWatch30.setActionFun {
gotoWithVideo()
}
addDailySubTasks()
updateUIGoldTotal()
updateUICashTotal()
@ -157,6 +139,34 @@ class TasksFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnTab
}
}
private fun addDailySubTasks() {
val dailyWatchVideoTask = TaskManager.instance().getDailyVideoTask()
if (dailyWatchVideoTask != null && dailyWatchVideoTask.status == "active"
&& dailyWatchVideoTask.reward_details.isNotEmpty()) {
dailyWatchVideoTask.reward_details.forEachIndexed {index, detail ->
val watchTaskItemView = DailyTaskItemView(requireActivity())
watchTaskItemView.setActionFun {
gotoWithVideo()
}
mDailyWatchVideoTaskViewList.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)
addView(watchTaskItemView, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)
if (index != dailyWatchVideoTask.reward_details.size - 1) {
val separateLine = View(requireActivity())
separateLine.setBackgroundResource(R.color.gray_f2)
addView(separateLine, LinearLayout.LayoutParams.MATCH_PARENT, ResUtil.getPixelSize(R.dimen.dp1))
}
}
}
}
}
private fun updateUICashTotal() {
binding?.tvCashTotal?.text = buildString {
append(ResUtil.getString(R.string.cash))

View File

@ -14,8 +14,10 @@ class DailyTaskItemView @JvmOverloads constructor(
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : LinearLayout(context, attrs, defStyleAttr) {
private var mRewardNum: Int = 0
private var mNeedWatchTotal: Int = 0
private lateinit var mAction: () -> Unit
private lateinit var mBinding: DailyTaskItemViewBinding
private var mBinding: DailyTaskItemViewBinding
init {
@ -33,21 +35,23 @@ class DailyTaskItemView @JvmOverloads constructor(
fun initUI(titleIconRes: Int, titleRes: Int, videosNum: Int, actionRes: Int) {
fun initUI(titleIconRes: Int, titleRes: Int, videosNum: Int, goldReward: Int, actionRes: 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 setProgressText(progress: Int, progressText: String) {
mBinding.tvItemProgress.text = progressText
mBinding.itemProgress.setProgress(progress)
fun updateProgress(finishVideoNum: Int) {
val showWatchedNum = if (finishVideoNum > mNeedWatchTotal) mNeedWatchTotal else finishVideoNum
mBinding.tvItemProgress.text = "($showWatchedNum/$mNeedWatchTotal)"
mBinding.itemProgress.setProgress(showWatchedNum/mNeedWatchTotal)
}
fun setRewardInfo(rewardIconRes: Int, rewardNum: Int) {
mBinding.tvRewardNum.text = "" + rewardNum
mBinding.ivRewardIcon.setImageResource(rewardIconRes)
}
fun setActionFun(action: ()->Unit) {
mAction = action

View File

@ -65,7 +65,7 @@
android:textSize="14sp"
android:textStyle="bold"
android:textColor="@color/gray6"
android:text="(1/5)"
android:text="(0/5)"
/>
</LinearLayout>

View File

@ -473,66 +473,13 @@
<LinearLayout
android:id="@+id/daily_tasks_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:paddingHorizontal="15dp"
android:background="@drawable/vididinapp_feature_message_bg_task_login"
android:orientation="vertical">
<com.gamedog.vididin.main.fragments.task.widget.DailyTaskItemView
android:id="@+id/daily_task_watch_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/gray_f2"
/>
<com.gamedog.vididin.main.fragments.task.widget.DailyTaskItemView
android:id="@+id/daily_task_watch_5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/gray_f2"
/>
<com.gamedog.vididin.main.fragments.task.widget.DailyTaskItemView
android:id="@+id/daily_task_watch_10"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/gray_f2"
/>
<com.gamedog.vididin.main.fragments.task.widget.DailyTaskItemView
android:id="@+id/daily_task_watch_20"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/gray_f2"
/>
<com.gamedog.vididin.main.fragments.task.widget.DailyTaskItemView
android:id="@+id/daily_task_watch_30"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
</LinearLayout>

View File

@ -6,4 +6,5 @@
<dimen name="main_tab_item_image_size">30dp</dimen>
<dimen name="main_tab_item_padding_vertical">14dp</dimen>
<dimen name="main_tab_item_title_test_size">16sp</dimen>
<dimen name="dp1">1dp</dimen>
</resources>