日期变化监听

This commit is contained in:
renhaoting 2025-12-03 10:48:32 +08:00
parent 460270212d
commit ca1f3662b0
10 changed files with 85 additions and 19 deletions

View File

@ -48,6 +48,19 @@
android:name="com.gamedog.vididin.router.RouterInitializer" android:name="com.gamedog.vididin.router.RouterInitializer"
android:value="androidx.startup" /> android:value="androidx.startup" />
</provider> </provider>
<receiver
android:name=".manager.DateChangeReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.DATE_CHANGED" />
</intent-filter>
</receiver>
</application> </application>
</manifest> </manifest>

View File

@ -67,7 +67,7 @@ class WatchAdActivity : AppViewsActivity<ViewBinding, UiState, ViewModel>(), OnT
} }
private fun stateCounter() { private fun stateCounter() {
mCountDownTimer = object : CountDownTimer(5000, 1000) { mCountDownTimer = object : CountDownTimer(3000, 1000) {
override fun onTick(millisUntilFinished: Long) { override fun onTick(millisUntilFinished: Long) {
val secondsRemaining = millisUntilFinished / 1000 val secondsRemaining = millisUntilFinished / 1000
binding.tvAdCounter.text = "${secondsRemaining}" binding.tvAdCounter.text = "${secondsRemaining}"

View File

@ -1,8 +1,9 @@
package com.gamedog.vididin.main package com.gamedog.vididin.main
import android.app.Activity
import android.content.Intent import android.content.Intent
import android.content.IntentFilter
import com.ama.core.common.util.asSafe import com.ama.core.common.util.asSafe
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
@ -17,7 +18,6 @@ import com.ama.core.architecture.appBase.AppViewsActivity
import com.ama.core.architecture.appBase.OnFragmentBackgroundListener import com.ama.core.architecture.appBase.OnFragmentBackgroundListener
import com.ama.core.architecture.ext.toast import com.ama.core.architecture.ext.toast
import com.ama.core.architecture.util.bindViewPager2 import com.ama.core.architecture.util.bindViewPager2
import com.ama.core.architecture.util.eventbus.NotifyMan
import com.ama.core.architecture.util.setCommonNavigator import com.ama.core.architecture.util.setCommonNavigator
import com.ama.core.architecture.util.setDataOrAdapter import com.ama.core.architecture.util.setDataOrAdapter
import com.gamedog.vididin.R import com.gamedog.vididin.R
@ -25,10 +25,9 @@ import com.gamedog.vididin.VidiConst
import com.gamedog.vididin.VididinEvents import com.gamedog.vididin.VididinEvents
import com.gamedog.vididin.adapter.MainTabsAdapter import com.gamedog.vididin.adapter.MainTabsAdapter
import com.gamedog.vididin.adapter.MainViewPagerAdapter import com.gamedog.vididin.adapter.MainViewPagerAdapter
import com.gamedog.vididin.core.login.login.AccountManager
import com.gamedog.vididin.features.watchad.WatchAdActivity
import com.gamedog.vididin.main.fragments.task.DailySignSuccessDialog import com.gamedog.vididin.main.fragments.task.DailySignSuccessDialog
import com.gamedog.vididin.main.interfaces.OnTabStyleListener import com.gamedog.vididin.main.interfaces.OnTabStyleListener
import com.gamedog.vididin.manager.DateChangeReceiver
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlin.getValue import kotlin.getValue
import com.gamedog.vididin.databinding.ActivityMainBinding as ViewBinding import com.gamedog.vididin.databinding.ActivityMainBinding as ViewBinding
@ -44,6 +43,8 @@ class MainActivity : AppViewsActivity<ViewBinding, UiState, ViewModel>(), OnTabS
override val mViewModel: ViewModel by viewModels() override val mViewModel: ViewModel by viewModels()
private lateinit var navigatorAdapter: MainTabsAdapter private lateinit var navigatorAdapter: MainTabsAdapter
private val fragmentStateAdapter by lazy { MainViewPagerAdapter(this) } private val fragmentStateAdapter by lazy { MainViewPagerAdapter(this) }
private lateinit var mDateChangeReceiver: DateChangeReceiver
override fun inflateViewBinding(inflater: LayoutInflater) = ViewBinding.inflate(inflater) override fun inflateViewBinding(inflater: LayoutInflater) = ViewBinding.inflate(inflater)
@ -80,6 +81,10 @@ class MainActivity : AppViewsActivity<ViewBinding, UiState, ViewModel>(), OnTabS
} }
override fun ViewBinding.initListeners() { override fun ViewBinding.initListeners() {
mDateChangeReceiver = DateChangeReceiver()
val filter = IntentFilter(Intent.ACTION_DATE_CHANGED)
registerReceiver(mDateChangeReceiver, filter)
onBackPressedDispatcher.addCallback(this@MainActivity) { onBackPressedDispatcher.addCallback(this@MainActivity) {
if (mViewModel.canBack) { if (mViewModel.canBack) {
finish() finish()
@ -132,6 +137,11 @@ class MainActivity : AppViewsActivity<ViewBinding, UiState, ViewModel>(), OnTabS
super.onResume() super.onResume()
} }
override fun onDestroy() {
super.onDestroy()
unregisterReceiver(mDateChangeReceiver)
}
override fun onTabIsDarkFont(isDarkFont: Boolean) { override fun onTabIsDarkFont(isDarkFont: Boolean) {
navigatorAdapter.setIsDarkFont(isDarkFont) navigatorAdapter.setIsDarkFont(isDarkFont)
} }

View File

@ -82,9 +82,12 @@ class HomeFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnSwit
viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) { override fun onPageSelected(position: Int) {
super.onPageSelected(position) super.onPageSelected(position)
setHomeTabStyle(mViewPagerAdapter.getFragmentByIndex(position)) val fragment = mViewPagerAdapter.getFragmentByIndex(position)
val curFragment: HomeItemFragment = mViewPagerAdapter.getFragmentByIndex(position) as HomeItemFragment if (fragment != null) {
curFragment.loadVideo() setHomeTabStyle(fragment)
val curFragment: HomeItemFragment = fragment as HomeItemFragment
curFragment.loadVideo()
}
// load more // load more
if (mViewPagerAdapter.itemCount > 0 && position == mViewPagerAdapter.itemCount - 2) { if (mViewPagerAdapter.itemCount > 0 && position == mViewPagerAdapter.itemCount - 2) {

View File

@ -0,0 +1,13 @@
package com.gamedog.vididin.manager
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
class DateChangeReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == Intent.ACTION_DATE_CHANGED) {
TaskManager.instance().onDateChanged()
}
}
}

View File

@ -8,6 +8,7 @@ import com.gamedog.vididin.VididinEvents
import com.gamedog.vididin.core.login.login.AccountManager import com.gamedog.vididin.core.login.login.AccountManager
import com.gamedog.vididin.main.fragments.task.Task import com.gamedog.vididin.main.fragments.task.Task
import com.gamedog.vididin.main.fragments.task.TaskBean import com.gamedog.vididin.main.fragments.task.TaskBean
import com.gamedog.vididin.manager.helpers.BaseTaskHelper
import com.gamedog.vididin.manager.helpers.DailyBoxHelper import com.gamedog.vididin.manager.helpers.DailyBoxHelper
import com.gamedog.vididin.manager.helpers.DailySignTaskHelper import com.gamedog.vididin.manager.helpers.DailySignTaskHelper
import com.gamedog.vididin.manager.helpers.DailyWatchAdTaskHelper import com.gamedog.vididin.manager.helpers.DailyWatchAdTaskHelper
@ -55,6 +56,8 @@ class TaskManager private constructor() {
private val mutex = Mutex() private val mutex = Mutex()
private val mGson = GsonBuilder().create() private val mGson = GsonBuilder().create()
private var mTaskConfig: TaskBean? = null private var mTaskConfig: TaskBean? = null
private val mDailySignTaskHelper by lazy { DailySignTaskHelper() } private val mDailySignTaskHelper by lazy { DailySignTaskHelper() }
private val mDailyWatchVideoTaskHelper by lazy { DailyWatchVideoTaskHelper() } private val mDailyWatchVideoTaskHelper by lazy { DailyWatchVideoTaskHelper() }
private val mDailyWatchAdTaskHelper by lazy { DailyWatchAdTaskHelper() } private val mDailyWatchAdTaskHelper by lazy { DailyWatchAdTaskHelper() }
@ -129,6 +132,16 @@ class TaskManager private constructor() {
mNewbieFirstWithdrawHelper.initDatas(getNewbieFirstWithdrawTask()!!) mNewbieFirstWithdrawHelper.initDatas(getNewbieFirstWithdrawTask()!!)
} }
fun onDateChanged() {
mDailySignTaskHelper.onDateChanged()
mDailyWatchVideoTaskHelper.onDateChanged()
mDailyWatchAdTaskHelper.onDateChanged()
mDailyBoxHelper.onDateChanged()
mNewbieJoinDiscordHelper.onDateChanged()
mNewbieEnableNotifyHelper.onDateChanged()
mNewbieFirstWithdrawHelper.onDateChanged()
}
//------------------------- Tasks Getter ------------------------------ //------------------------- Tasks Getter ------------------------------
fun dailySignStatus(): DailySignTaskHelper { fun dailySignStatus(): DailySignTaskHelper {
@ -197,11 +210,6 @@ class TaskManager private constructor() {
//----------------------------- 每日签到 -----------------------------//
fun getHomeWatchDurationRewardNum(): Int {
return 28; // TODO - mTaskConfigBean.xxxx
}

View File

@ -14,6 +14,7 @@ import com.gamedog.vididin.manager.taskbeans.TaskStateWatchAd
abstract class BaseDailyTaskHelper<T : BaseDailyTaskState> : BaseTaskHelper<T>() { abstract class BaseDailyTaskHelper<T : BaseDailyTaskState> : BaseTaskHelper<T>() {
abstract protected fun notifyEvents() abstract protected fun notifyEvents()
abstract protected fun generateTodayTask()
fun claimSubTaskReward(subTaskIndex: Int) : Boolean { fun claimSubTaskReward(subTaskIndex: Int) : Boolean {
if (subTaskIndex >= 0 && subTaskIndex < mStateBean.getSubTaskRewardState().size) { if (subTaskIndex >= 0 && subTaskIndex < mStateBean.getSubTaskRewardState().size) {
@ -33,6 +34,12 @@ abstract class BaseDailyTaskHelper<T : BaseDailyTaskState> : BaseTaskHelper<T>()
return false return false
} }
override fun onDateChanged() {
super.onDateChanged()
generateTodayTask()
notifyEvents()
}
protected fun calculateNewState() { protected fun calculateNewState() {
val todayWatchedCount = mStateBean.getTodayWatchedCount() val todayWatchedCount = mStateBean.getTodayWatchedCount()
@ -49,10 +56,6 @@ abstract class BaseDailyTaskHelper<T : BaseDailyTaskState> : BaseTaskHelper<T>()
} }
} }
protected fun generateTodayTask() {
mStateBean = TaskStateWatchAd(DateUtil.getCurTimeMs()) as T
mStateBean.initSubTaskRewardList(mTaskConfig.reward_details)
}
protected fun isTodayStatusBean(stateBean: TaskStateWatchAd): Boolean { protected fun isTodayStatusBean(stateBean: TaskStateWatchAd): Boolean {
return DateUtil.isToday(stateBean.todayMs) return DateUtil.isToday(stateBean.todayMs)

View File

@ -23,6 +23,9 @@ abstract class BaseTaskHelper<T: Any> {
} }
} }
open fun onDateChanged() {
// TODO - sub class override this methods if daily task
}
protected fun registerEvents(onEvents: ((NotifyMan.NotifyData<*>?)->Unit), vararg eventTypes: Int) { protected fun registerEvents(onEvents: ((NotifyMan.NotifyData<*>?)->Unit), vararg eventTypes: Int) {

View File

@ -1,5 +1,6 @@
package com.gamedog.vididin.manager.helpers package com.gamedog.vididin.manager.helpers
import com.ama.core.architecture.util.DateUtil
import com.ama.core.architecture.util.SpUtil import com.ama.core.architecture.util.SpUtil
import com.ama.core.architecture.util.eventbus.NotifyMan import com.ama.core.architecture.util.eventbus.NotifyMan
import com.gamedog.vididin.VididinEvents import com.gamedog.vididin.VididinEvents
@ -22,13 +23,18 @@ class DailyWatchAdTaskHelper : BaseDailyTaskHelper<TaskStateWatchAd>() {
val spStateBean = SpUtil.instance().getObject<TaskStateWatchAd>(mSpKey) val spStateBean = SpUtil.instance().getObject<TaskStateWatchAd>(mSpKey)
if (spStateBean == null || !isTodayStatusBean(spStateBean)) { if (spStateBean == null || !isTodayStatusBean(spStateBean)) {
generateTodayTask() generateTodayTask()
saveState2Sp()
} else { } else {
mStateBean = spStateBean mStateBean = spStateBean
notifyEvents() notifyEvents()
} }
} }
override fun generateTodayTask() {
mStateBean = TaskStateWatchAd(DateUtil.getCurTimeMs())
mStateBean.initSubTaskRewardList(mTaskConfig.reward_details)
saveState2Sp()
}
override fun notifyEvents() { override fun notifyEvents() {
NotifyMan.instance().sendEvent(VididinEvents.EVENT_DAILY_WATCHED_AD_NUM_CHANGED, null) NotifyMan.instance().sendEvent(VididinEvents.EVENT_DAILY_WATCHED_AD_NUM_CHANGED, null)
} }

View File

@ -1,9 +1,11 @@
package com.gamedog.vididin.manager.helpers package com.gamedog.vididin.manager.helpers
import com.ama.core.architecture.util.DateUtil
import com.ama.core.architecture.util.SpUtil import com.ama.core.architecture.util.SpUtil
import com.ama.core.architecture.util.eventbus.NotifyMan import com.ama.core.architecture.util.eventbus.NotifyMan
import com.gamedog.vididin.VididinEvents import com.gamedog.vididin.VididinEvents
import com.gamedog.vididin.manager.taskbeans.TaskStateWatchAd
import com.gamedog.vididin.manager.taskbeans.TaskStateWatchVideo import com.gamedog.vididin.manager.taskbeans.TaskStateWatchVideo
@ -23,13 +25,18 @@ class DailyWatchVideoTaskHelper : BaseDailyTaskHelper<TaskStateWatchVideo>() {
val spStateBean = SpUtil.instance().getObject<TaskStateWatchVideo>(mSpKey) val spStateBean = SpUtil.instance().getObject<TaskStateWatchVideo>(mSpKey)
if (spStateBean == null || !isTodayStatusBean(spStateBean)) { if (spStateBean == null || !isTodayStatusBean(spStateBean)) {
generateTodayTask() generateTodayTask()
saveState2Sp()
} else { } else {
mStateBean = spStateBean mStateBean = spStateBean
notifyEvents() notifyEvents()
} }
} }
override fun generateTodayTask() {
mStateBean = TaskStateWatchVideo(DateUtil.getCurTimeMs())
mStateBean.initSubTaskRewardList(mTaskConfig.reward_details)
saveState2Sp()
}
override fun notifyEvents() { override fun notifyEvents() {
NotifyMan.instance().sendEvent(VididinEvents.EVENT_DAILY_WATCHED_VIDEO_NUM_CHANGED, null) NotifyMan.instance().sendEvent(VididinEvents.EVENT_DAILY_WATCHED_VIDEO_NUM_CHANGED, null)
} }