每日签到 状态sp保存,当前天读取

This commit is contained in:
renhaoting 2025-11-26 14:04:30 +08:00
parent d92216bfdd
commit cb547ae996
7 changed files with 82 additions and 20 deletions

View File

@ -9,6 +9,7 @@ import com.gamedog.vididin.widget.DailySignItemView
class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(context, DialogDailySignBinding::inflate) { class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(context, DialogDailySignBinding::inflate) {
private var mCurDayIndex: Int = 0
private var mDataList: List<RewardDetail>? = emptyList() private var mDataList: List<RewardDetail>? = emptyList()
private var mSignItemList: MutableList<DailySignItemView> = mutableListOf() private var mSignItemList: MutableList<DailySignItemView> = mutableListOf()
@ -67,7 +68,8 @@ class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(
} }
private fun initSignState() { private fun initSignState() {
val todayIndex = TaskManager.instance().getCurDayIndexOfDailyCheckIn() mCurDayIndex = TaskManager.instance().getCurDayIndexOfDailyCheckIn()
mSignItemList[mCurDayIndex].setSelectState(true)
} }
private fun handleItemSelectStateChanged(itemIndex: Int, selected: Boolean) { private fun handleItemSelectStateChanged(itemIndex: Int, selected: Boolean) {

View File

@ -1,5 +1,6 @@
package com.gamedog.vididin.manager package com.gamedog.vididin.manager
import com.ama.core.architecture.util.DateUtil
import com.ama.core.architecture.util.FileUtil import com.ama.core.architecture.util.FileUtil
import com.ama.core.architecture.util.SpUtil import com.ama.core.architecture.util.SpUtil
import com.gamedog.vididin.main.fragments.task.Task import com.gamedog.vididin.main.fragments.task.Task
@ -39,11 +40,13 @@ class TaskManager private constructor() {
} }
} }
private val mutex = Mutex() private val mutex = Mutex()
@Volatile @Volatile
private var initialized = false private var initialized = false
private var mTaskConfig: TaskBean? = null private var mTaskConfig: TaskBean? = null
private var mTaskBean: TaskStateBean = TaskStateBean(DailySignBean())
private val mGson = GsonBuilder().create() private val mGson = GsonBuilder().create()
@ -81,7 +84,12 @@ class TaskManager private constructor() {
private suspend fun loadTaskStateFromSp() { private suspend fun loadTaskStateFromSp() {
return withContext(Dispatchers.IO) { return withContext(Dispatchers.IO) {
// TODO ------------ val taskStateBeanInSp = SpUtil.instance().getObject<TaskStateBean>(SpUtil.KEY_TASK_BEAN)
if (taskStateBeanInSp == null) {
SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mTaskBean)
} else {
mTaskBean = taskStateBeanInSp
}
} }
} }
@ -129,8 +137,21 @@ class TaskManager private constructor() {
} }
fun getCurDayIndexOfDailyCheckIn() { fun getCurDayIndexOfDailyCheckIn() : Int {
//... val periodStartMs = mTaskBean.dailySignBean.startMs
if (periodStartMs > 0) {
val dayIndexOfPeriod = DateUtil.getPassedDayNum(periodStartMs, DateUtil.getCurTimeMs())
if (dayIndexOfPeriod > 6) {
mTaskBean.dailySignBean.startMs = DateUtil.getCurTimeMs()
SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mTaskBean)
}
return dayIndexOfPeriod
} else {
mTaskBean.dailySignBean.startMs = DateUtil.getCurTimeMs()
SpUtil.instance().putObject(SpUtil.KEY_TASK_BEAN, mTaskBean)
return 0
}
} }

View File

@ -1,5 +1,6 @@
package com.gamedog.vididin.manager package com.gamedog.vididin.manager
import com.ama.core.architecture.util.DateUtil
import java.io.Serializable import java.io.Serializable
@ -9,8 +10,9 @@ data class TaskStateBean(
data class DailySignBean( data class DailySignBean(
val startMs: Long = 0L, var startMs: Long = 0,
val signStateList: MutableList<Int> = mutableListOf() val signStateList: MutableList<Int> = mutableListOf()
): Serializable { ): Serializable {
companion object{ companion object{
const val SIGN_STATE_ENABLE = 1 const val SIGN_STATE_ENABLE = 1
@ -19,7 +21,7 @@ data class DailySignBean(
} }
init { init {
signStateList.add(SIGN_STATE_WAIT) signStateList.add(SIGN_STATE_ENABLE)
signStateList.add(SIGN_STATE_WAIT) signStateList.add(SIGN_STATE_WAIT)
signStateList.add(SIGN_STATE_WAIT) signStateList.add(SIGN_STATE_WAIT)
signStateList.add(SIGN_STATE_WAIT) signStateList.add(SIGN_STATE_WAIT)

View File

@ -5,6 +5,7 @@ import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import android.view.LayoutInflater import android.view.LayoutInflater
import android.widget.LinearLayout import android.widget.LinearLayout
import androidx.core.view.isVisible
import com.ama.core.architecture.util.setOnClickBatch import com.ama.core.architecture.util.setOnClickBatch
import com.gamedog.vididin.R import com.gamedog.vididin.R
import com.gamedog.vididin.databinding.DailySignItemBinding import com.gamedog.vididin.databinding.DailySignItemBinding
@ -55,11 +56,7 @@ class DailySignItemView @JvmOverloads constructor(
fun setSelectState(isSelect: Boolean) { fun setSelectState(isSelect: Boolean) {
mIsSelected = isSelect mIsSelected = isSelect
if (mIsSelected) { mBinding.ivSelected.isVisible = mIsSelected
mBinding.rlRoot.setBackgroundResource(R.drawable.bg_daily_sign_day_item)
} else {
mBinding.rlRoot.background = null
}
} }

View File

@ -9,10 +9,8 @@
> >
<RelativeLayout <RelativeLayout
android:id="@+id/rl_root"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content">
android:padding="2dp">
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_bg" android:id="@+id/iv_bg"
@ -21,6 +19,14 @@
android:layout_centerInParent="true" android:layout_centerInParent="true"
android:src="@mipmap/bg_biginner_daily"/> android:src="@mipmap/bg_biginner_daily"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_selected"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:visibility="gone"
android:src="@drawable/bg_daily_sign_day_item"/>
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View File

@ -4,12 +4,14 @@ package com.ama.core.architecture.util
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
import java.util.Calendar
import java.util.TimeZone
class DateUtil private constructor() { class DateUtil private constructor() {
companion object { companion object {
private const val MS_NUM_ONE_DAY = (24 * 60 * 60 * 1000)
private const val FORMAT_DATE = "yyyy-MM-dd" private const val FORMAT_DATE = "yyyy-MM-dd"
private const val FORMAT_DATETIME = "yyyy-MM-dd HH:mm:ss" private const val FORMAT_DATETIME = "yyyy-MM-dd HH:mm:ss"
@ -84,9 +86,7 @@ class DateUtil private constructor() {
return TimeUnit.MILLISECONDS.toDays(diffMillis) return TimeUnit.MILLISECONDS.toDays(diffMillis)
} }
fun getCurTimeMs(): Long {
return System.currentTimeMillis()
}
/** /**
* 两个时间点之间的天数差 * 两个时间点之间的天数差
@ -164,6 +164,41 @@ class DateUtil private constructor() {
else -> 0L else -> 0L
} }
} }
//--------------------------- New added methods ----------------------------//
fun getCurTimeMs(): Long {
return System.currentTimeMillis()
}
fun getPassedDayNum(periodStartMs: Long, currentMs: Long): Int {
val utcTimeZone = TimeZone.getTimeZone("UTC") // 使用UTC时区
val calendarStart = Calendar.getInstance(utcTimeZone).apply {
timeInMillis = periodStartMs
}
val calendarCurrent = Calendar.getInstance(utcTimeZone).apply {
timeInMillis = currentMs
}
// 清除时分秒毫秒信息
fun Calendar.clearTime() {
set(Calendar.HOUR_OF_DAY, 0)
set(Calendar.MINUTE, 0)
set(Calendar.SECOND, 0)
set(Calendar.MILLISECOND, 0)
}
calendarStart.clearTime()
calendarCurrent.clearTime()
return ((calendarCurrent.timeInMillis - calendarStart.timeInMillis) / MS_NUM_ONE_DAY).toInt()
}
} }
} }

View File

@ -14,8 +14,7 @@ class SpUtil private constructor(spFileName: String) {
companion object { companion object {
const val KEY_ACCOUNT = "KEY_ACCOUNT" const val KEY_ACCOUNT = "KEY_ACCOUNT"
const val KEY_ACCOUNT_TOKEN = "KEY_ACCOUNT_TOKEN" const val KEY_ACCOUNT_TOKEN = "KEY_ACCOUNT_TOKEN"
const val KEY_TASK_BEAN = "KEY_TASK_BEAN"
const val KEY_X2 = "22222"
private const val DEFAULT_SP_NAME = "enhanced_prefs" private const val DEFAULT_SP_NAME = "enhanced_prefs"
@Volatile @Volatile