homefragment签到模块接入正式的bean

This commit is contained in:
renhaoting 2025-11-27 11:06:31 +08:00
parent d24c51ff22
commit 6ad0ae0d22
3 changed files with 38 additions and 86 deletions

View File

@ -1,13 +0,0 @@
package com.gamedog.vididin.main.fragments.task
// DayStatus.kt
data class DayStatus(
val day: Int, // 第几天 (1-7)
val reward: String, // 奖励数值 ("100", "300"等)
val isCompleted: Boolean = false, // 是否已完成
val isPastDay: Boolean = false,
val isToday: Boolean = false, // 是否是今天
val icon: String = if (isCompleted) "" else "G" // 图标
) {
val displayText: String get() = "Dia $day"
}

View File

@ -9,7 +9,10 @@ import com.ama.core.common.util.sp
import com.gamedog.vididin.R
import android.graphics.*
import com.ama.core.architecture.BaseApp
import java.util.*
import com.ama.core.architecture.util.ResUtil
import com.gamedog.vididin.manager.DailySignDayInfoBean
import com.gamedog.vididin.manager.TaskManager
class WeekStatusView @JvmOverloads constructor(
context: Context,
@ -17,14 +20,12 @@ class WeekStatusView @JvmOverloads constructor(
defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {
private var currentDay = 1
private var dayStatusList: List<DayStatus> = emptyList()
private var completedColor = Color.parseColor("#4CAF50")
private var pendingColor = Color.parseColor("#FF9800")
private var dayColor = Color.parseColor("#FF999999")
private var dayPastColor = Color.parseColor("#FFD4D4D4")
private var rewardTextColor = Color.parseColor("#FF9800")
private var rewardTextSignedColor = Color.parseColor("#999999")
private var todayHighlightColor = Color.parseColor("#4CAF50")
private var bgRectColor = Color.parseColor("#ffffedd7")
@ -59,7 +60,7 @@ class WeekStatusView @JvmOverloads constructor(
init {
setupAttributes(attrs)
setupDefaultData()
initLoadDatas()
}
private fun setupAttributes(attrs: AttributeSet?) {
@ -80,9 +81,8 @@ class WeekStatusView @JvmOverloads constructor(
typedArray.recycle()
}
private fun setupDefaultData() {
currentDay = getCurrentDayOfWeek()
dayStatusList = generateWeekData(currentDay)
private fun initLoadDatas() {
}
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
@ -97,10 +97,12 @@ class WeekStatusView @JvmOverloads constructor(
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
if (dayStatusList.isEmpty()) return
val dayStateList = TaskManager.instance().getDayStateList()
if (dayStateList.isEmpty()) return
val totalWidth = measuredWidth.toFloat()
val totalItemCount = dayStatusList.size
val totalItemCount = dayStateList.size
val itemHoriGapPixel = (totalWidth - 2 * circleRadius - 2 * HoriMagin) / (totalItemCount - 1)
// bg rect
@ -108,27 +110,27 @@ class WeekStatusView @JvmOverloads constructor(
canvas.drawRect(circleRadius + HoriMagin, bgTop,
totalWidth - circleRadius - HoriMagin, bgTop + bgRectHeight, bgPaint)
dayStatusList.forEachIndexed { index, dayStatus ->
dayStateList.forEachIndexed { index, dayStatus ->
val centerX = HoriMagin + circleRadius + itemHoriGapPixel * index
drawDayStatusItem(canvas, dayStatus, centerX)
}
}
private fun drawDayStatusItem(canvas: Canvas, dayStatus: DayStatus, centerX: Float) {
// day text 'dia'
textPaint.color = if (dayStatus.isCompleted) dayPastColor else dayColor
textPaint.color = if (dayStatus.hasSigned) dayPastColor else dayColor
textPaint.textSize = dayTextSize
canvas.drawText(dayStatus.displayText, centerX, vertiMagin + dayTextSize/2, textPaint)
canvas.drawText(ResUtil.getString(R.string.day) + " $index", centerX, vertiMagin + dayTextSize/2, textPaint)
// icons
val iconRes = if (dayStatus.isCompleted) R.mipmap.task_week_view_done else R.mipmap.task_week_view_ongoing
val iconRes = if (dayStatus.hasSigned) R.mipmap.task_week_view_done else R.mipmap.task_week_view_ongoing
canvas.drawBitmap(getBitmap(iconRes)!!, centerX - circleRadius, vertiMagin + dayTextSize + componentGap, circlePaint)
// reward text
textPaint.color = rewardTextColor
textPaint.textSize = rewardTextSize
canvas.drawText(dayStatus.reward, centerX, vertiMagin + dayTextSize + componentGap + 2*circleRadius + componentGap, textPaint)
val rewardNum = TaskManager.instance().getRewardNumOfDailySign(index)
textPaint.color = if (dayStatus.hasSigned) rewardTextColor else rewardTextSignedColor
canvas.drawText(rewardNum.toString(), centerX, vertiMagin + dayTextSize + componentGap + 2*circleRadius + componentGap, textPaint)
}
}
fun getBitmap(resId: Int): Bitmap? {
return try {
@ -141,52 +143,5 @@ class WeekStatusView @JvmOverloads constructor(
// --------------------- public ---------------------
fun updateData(data: List<DayStatus>) {
dayStatusList = data
invalidate()
}
fun updateForDate(targetDate: Date) {
val targetDay = getDayOfWeekFromDate(targetDate)
dayStatusList = generateWeekData(targetDay)
invalidate()
}
fun refreshToCurrentDate() {
updateForDate(Date())
}
fun getCurrentData(): List<DayStatus> = dayStatusList
fun getCurrentDay(): Int = currentDay
private fun generateWeekData(targetDay: Int): List<DayStatus> {
val rewards = listOf("100", "300", "300", "500", "300", "300", "800")
return (1..7).map { day ->
DayStatus(
day = day,
reward = rewards[day - 1],
isCompleted = day < targetDay,
isToday = day == targetDay
)
}
}
private fun getCurrentDayOfWeek(): Int {
val calendar = Calendar.getInstance()
return convertCalendarDayToWeekDay(calendar.get(Calendar.DAY_OF_WEEK))
}
private fun getDayOfWeekFromDate(date: Date): Int {
val calendar = Calendar.getInstance().apply { time = date }
return convertCalendarDayToWeekDay(calendar.get(Calendar.DAY_OF_WEEK))
}
private fun convertCalendarDayToWeekDay(calendarDay: Int): Int {
return if (calendarDay == 1) 7 else calendarDay - 1
}
}

View File

@ -239,6 +239,16 @@ class TaskManager private constructor() {
return -1;
}
fun getDayStateList(): List<DailySignDayInfoBean> {
return mDailySignData.signStateList
}
fun getRewardNumOfDailySign(dayIndex: Int) : Int {
return getDailyCheckInTask()?.reward_details?.get(dayIndex)?.value ?: 0
}
}