From cb547ae99616395ec00dddf27d7931c53d06c03b Mon Sep 17 00:00:00 2001 From: renhaoting <370797079@qq.com> Date: Wed, 26 Nov 2025 14:04:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AF=8F=E6=97=A5=E7=AD=BE=E5=88=B0=20?= =?UTF-8?q?=E7=8A=B6=E6=80=81sp=E4=BF=9D=E5=AD=98=EF=BC=8C=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E5=A4=A9=E8=AF=BB=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/fragments/task/DailySignDialog.kt | 4 +- .../gamedog/vididin/manager/TaskManager.kt | 27 ++++++++++-- .../gamedog/vididin/manager/TaskStateBean.kt | 6 ++- .../vididin/widget/DailySignItemView.kt | 7 +-- app/src/main/res/layout/daily_sign_item.xml | 12 ++++-- .../ama/core/architecture/util/DateUtil.kt | 43 +++++++++++++++++-- .../com/ama/core/architecture/util/SpUtil.kt | 3 +- 7 files changed, 82 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/gamedog/vididin/main/fragments/task/DailySignDialog.kt b/app/src/main/java/com/gamedog/vididin/main/fragments/task/DailySignDialog.kt index 75bb152..167eb95 100644 --- a/app/src/main/java/com/gamedog/vididin/main/fragments/task/DailySignDialog.kt +++ b/app/src/main/java/com/gamedog/vididin/main/fragments/task/DailySignDialog.kt @@ -9,6 +9,7 @@ import com.gamedog.vididin.widget.DailySignItemView class DailySignDialog(context: Context) : BindingDialog(context, DialogDailySignBinding::inflate) { + private var mCurDayIndex: Int = 0 private var mDataList: List? = emptyList() private var mSignItemList: MutableList = mutableListOf() @@ -67,7 +68,8 @@ class DailySignDialog(context: Context) : BindingDialog( } private fun initSignState() { - val todayIndex = TaskManager.instance().getCurDayIndexOfDailyCheckIn() + mCurDayIndex = TaskManager.instance().getCurDayIndexOfDailyCheckIn() + mSignItemList[mCurDayIndex].setSelectState(true) } private fun handleItemSelectStateChanged(itemIndex: Int, selected: Boolean) { diff --git a/app/src/main/java/com/gamedog/vididin/manager/TaskManager.kt b/app/src/main/java/com/gamedog/vididin/manager/TaskManager.kt index 1dd0b2a..2623c6a 100644 --- a/app/src/main/java/com/gamedog/vididin/manager/TaskManager.kt +++ b/app/src/main/java/com/gamedog/vididin/manager/TaskManager.kt @@ -1,5 +1,6 @@ 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.SpUtil import com.gamedog.vididin.main.fragments.task.Task @@ -39,11 +40,13 @@ class TaskManager private constructor() { } } + private val mutex = Mutex() @Volatile private var initialized = false private var mTaskConfig: TaskBean? = null + private var mTaskBean: TaskStateBean = TaskStateBean(DailySignBean()) private val mGson = GsonBuilder().create() @@ -81,7 +84,12 @@ class TaskManager private constructor() { private suspend fun loadTaskStateFromSp() { return withContext(Dispatchers.IO) { - // TODO ------------ + val taskStateBeanInSp = SpUtil.instance().getObject(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 + } } diff --git a/app/src/main/java/com/gamedog/vididin/manager/TaskStateBean.kt b/app/src/main/java/com/gamedog/vididin/manager/TaskStateBean.kt index 90a0ab3..beef8a6 100644 --- a/app/src/main/java/com/gamedog/vididin/manager/TaskStateBean.kt +++ b/app/src/main/java/com/gamedog/vididin/manager/TaskStateBean.kt @@ -1,5 +1,6 @@ package com.gamedog.vididin.manager +import com.ama.core.architecture.util.DateUtil import java.io.Serializable @@ -9,8 +10,9 @@ data class TaskStateBean( data class DailySignBean( - val startMs: Long = 0L, + var startMs: Long = 0, val signStateList: MutableList = mutableListOf() + ): Serializable { companion object{ const val SIGN_STATE_ENABLE = 1 @@ -19,7 +21,7 @@ data class DailySignBean( } 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) diff --git a/app/src/main/java/com/gamedog/vididin/widget/DailySignItemView.kt b/app/src/main/java/com/gamedog/vididin/widget/DailySignItemView.kt index eb9d7ac..53ee3c8 100644 --- a/app/src/main/java/com/gamedog/vididin/widget/DailySignItemView.kt +++ b/app/src/main/java/com/gamedog/vididin/widget/DailySignItemView.kt @@ -5,6 +5,7 @@ import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater import android.widget.LinearLayout +import androidx.core.view.isVisible import com.ama.core.architecture.util.setOnClickBatch import com.gamedog.vididin.R import com.gamedog.vididin.databinding.DailySignItemBinding @@ -55,11 +56,7 @@ class DailySignItemView @JvmOverloads constructor( fun setSelectState(isSelect: Boolean) { mIsSelected = isSelect - if (mIsSelected) { - mBinding.rlRoot.setBackgroundResource(R.drawable.bg_daily_sign_day_item) - } else { - mBinding.rlRoot.background = null - } + mBinding.ivSelected.isVisible = mIsSelected } diff --git a/app/src/main/res/layout/daily_sign_item.xml b/app/src/main/res/layout/daily_sign_item.xml index 39c2080..e3c5714 100644 --- a/app/src/main/res/layout/daily_sign_item.xml +++ b/app/src/main/res/layout/daily_sign_item.xml @@ -9,10 +9,8 @@ > + android:layout_height="wrap_content"> + + 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() + } + + } } diff --git a/core/architecture/src/main/java/com/ama/core/architecture/util/SpUtil.kt b/core/architecture/src/main/java/com/ama/core/architecture/util/SpUtil.kt index 0f6ff85..7eb6d84 100644 --- a/core/architecture/src/main/java/com/ama/core/architecture/util/SpUtil.kt +++ b/core/architecture/src/main/java/com/ama/core/architecture/util/SpUtil.kt @@ -14,8 +14,7 @@ class SpUtil private constructor(spFileName: String) { companion object { const val KEY_ACCOUNT = "KEY_ACCOUNT" const val KEY_ACCOUNT_TOKEN = "KEY_ACCOUNT_TOKEN" - - const val KEY_X2 = "22222" + const val KEY_TASK_BEAN = "KEY_TASK_BEAN" private const val DEFAULT_SP_NAME = "enhanced_prefs" @Volatile