每日签到 状态sp保存,当前天读取
This commit is contained in:
parent
d92216bfdd
commit
cb547ae996
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue