From cfe4acbb78bfc9c508abe0b8658fb5e5dc155f68 Mon Sep 17 00:00:00 2001 From: renhaoting <370797079@qq.com> Date: Fri, 28 Nov 2025 13:49:08 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9C=8B=E5=B9=BF=E5=91=8Aact+1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 1 + .../features/watchad/WatchAdActivity.kt | 60 +++++++++++++++++-- .../gamedog/vididin/main/WatchVideoDialog.kt | 12 ++-- .../gamedog/vididin/router/RouterDefault.kt | 4 +- .../vididin/router/RouterInterfaces.kt | 2 +- app/src/main/res/layout/activity_watch_ad.xml | 24 ++++++-- .../base/views/BaseViewsActivity.kt | 11 ++++ .../interfaces/ViewBindingsInit.kt | 3 + .../ama/core/architecture/util/AndroidUtil.kt | 14 ++++- .../core/architecture/widget/BindingDialog.kt | 19 ++++++ 10 files changed, 131 insertions(+), 19 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c0bc81e..7f084c4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,7 @@ + diff --git a/app/src/main/java/com/gamedog/vididin/features/watchad/WatchAdActivity.kt b/app/src/main/java/com/gamedog/vididin/features/watchad/WatchAdActivity.kt index 7a5ed8d..2b1922f 100644 --- a/app/src/main/java/com/gamedog/vididin/features/watchad/WatchAdActivity.kt +++ b/app/src/main/java/com/gamedog/vididin/features/watchad/WatchAdActivity.kt @@ -2,12 +2,20 @@ package com.gamedog.vididin.features.watchad import android.app.Activity import android.content.Intent +import android.os.Bundle +import android.os.CountDownTimer +import android.os.PersistableBundle import android.view.LayoutInflater +import androidx.activity.addCallback import androidx.activity.viewModels import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.updatePadding import com.ama.core.architecture.appBase.AppViewsActivity +import com.ama.core.architecture.ext.toast +import com.ama.core.architecture.util.AndroidUtil +import com.ama.core.architecture.util.eventbus.NotifyMan +import com.gamedog.vididin.R import com.gamedog.vididin.main.interfaces.OnTabStyleListener import dagger.hilt.android.AndroidEntryPoint import kotlin.getValue @@ -22,6 +30,10 @@ class WatchAdActivity : AppViewsActivity(), OnT override val mViewModel: ViewModel by viewModels() override fun inflateViewBinding(inflater: LayoutInflater) = ViewBinding.inflate(inflater) + + private lateinit var mCountDownTimer: CountDownTimer + private var mTaskUUID: Int = 0 + override fun ViewBinding.initViews() { with(binding) { @@ -31,15 +43,49 @@ class WatchAdActivity : AppViewsActivity(), OnT override fun ViewBinding.initWindowInsets() { ViewCompat.setOnApplyWindowInsetsListener(contentRoot) { v, insets -> - val systemBars = - insets.getInsets(WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.displayCutout()) + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.displayCutout()) v.updatePadding(top = systemBars.top) insets } } override fun ViewBinding.initListeners() { - //TODO("Not yet implemented") + onBackPressedDispatcher.addCallback(this@WatchAdActivity) { + AndroidUtil.showToast("Can't exit while watching video") + } + + stateCounter() + } + + + private fun notifyAdWatchFinish() { + NotifyMan.instance().sendEvent(mTaskUUID, null) + } + + private fun stateCounter() { + mCountDownTimer = object : CountDownTimer(5000, 1000) { + override fun onTick(millisUntilFinished: Long) { + val secondsRemaining = millisUntilFinished / 1000 + binding.tvAdCounter.text = "${secondsRemaining}" + } + + override fun onFinish() { + notifyAdWatchFinish() + finish() + } + } + mCountDownTimer.start() + } + + override fun readIntent(intent: Intent) { + super.readIntent(intent) + mTaskUUID = intent.getIntExtra(KEY_TASKID, 0) + } + + + override fun onDestroy() { + super.onDestroy() + mCountDownTimer.cancel() } override fun ViewBinding.initObservers() { @@ -56,8 +102,12 @@ class WatchAdActivity : AppViewsActivity(), OnT companion object { - internal fun startActivity(activity: Activity) { - activity.startActivity(Intent(activity.applicationContext, WatchAdActivity::class.java)) + private val KEY_TASKID = "KEY_TASKID" + + internal fun startActivity(activity: Activity, taskUUID: Int) { + val intent = Intent(activity.applicationContext, WatchAdActivity::class.java) + intent.putExtra(KEY_TASKID, taskUUID) + activity.startActivity(intent) } } diff --git a/app/src/main/java/com/gamedog/vididin/main/WatchVideoDialog.kt b/app/src/main/java/com/gamedog/vididin/main/WatchVideoDialog.kt index c9c77e8..5225550 100644 --- a/app/src/main/java/com/gamedog/vididin/main/WatchVideoDialog.kt +++ b/app/src/main/java/com/gamedog/vididin/main/WatchVideoDialog.kt @@ -1,15 +1,14 @@ package com.gamedog.vididin.main import android.app.Activity -import android.content.Context +import com.ama.core.architecture.util.AndroidUtil import com.ama.core.architecture.util.setOnClickBatch import com.ama.core.architecture.widget.BindingDialog import com.gamedog.vididin.databinding.DialogWatchVideoBinding -import com.gamedog.vididin.main.fragments.task.RewardDetail +import com.gamedog.vididin.router.Router class WatchVideoDialog(context: Activity) : BindingDialog(context, DialogWatchVideoBinding::inflate) { - private lateinit var mDataList: List init { build() @@ -30,7 +29,6 @@ class WatchVideoDialog(context: Activity) : BindingDialog { gotoWatchVideo() - dismiss() } } } @@ -38,7 +36,13 @@ class WatchVideoDialog(context: Activity) : BindingDialog - + android:layout_height="match_parent"> - + + + + + + diff --git a/core/architecture/src/main/java/com/ama/core/architecture/base/views/BaseViewsActivity.kt b/core/architecture/src/main/java/com/ama/core/architecture/base/views/BaseViewsActivity.kt index e85275d..bedfb28 100644 --- a/core/architecture/src/main/java/com/ama/core/architecture/base/views/BaseViewsActivity.kt +++ b/core/architecture/src/main/java/com/ama/core/architecture/base/views/BaseViewsActivity.kt @@ -1,5 +1,6 @@ package com.ama.core.architecture.base.views +import android.content.Intent import android.os.Bundle import android.view.View import androidx.activity.enableEdgeToEdge @@ -55,6 +56,7 @@ abstract class BaseViewsActivity { fun Binding.initObservers() fun Binding.onUiStateCollect(uiState: UiState) + + fun readIntent(intent: Intent) } interface ViewBindingFragment { diff --git a/core/architecture/src/main/java/com/ama/core/architecture/util/AndroidUtil.kt b/core/architecture/src/main/java/com/ama/core/architecture/util/AndroidUtil.kt index fca2108..0c6c652 100644 --- a/core/architecture/src/main/java/com/ama/core/architecture/util/AndroidUtil.kt +++ b/core/architecture/src/main/java/com/ama/core/architecture/util/AndroidUtil.kt @@ -1,16 +1,26 @@ package com.ama.core.architecture.util -import android.app.Activity -import android.content.Intent +import android.widget.Toast import com.ama.core.architecture.BaseApp +import kotlin.random.Random class AndroidUtil private constructor() { companion object { + fun genRandomInt(rangeBegin: Int, rangeEnd: Int): Int { + return Random.nextInt(rangeBegin, rangeEnd) + } + fun showToast(strRes: Int) { + Toast.makeText(BaseApp.appContext(), strRes, Toast.LENGTH_SHORT).show() + } + + fun showToast(str: String) { + Toast.makeText(BaseApp.appContext(), str, Toast.LENGTH_SHORT).show() + } } diff --git a/core/architecture/src/main/java/com/ama/core/architecture/widget/BindingDialog.kt b/core/architecture/src/main/java/com/ama/core/architecture/widget/BindingDialog.kt index 60a41c1..52ebe3d 100644 --- a/core/architecture/src/main/java/com/ama/core/architecture/widget/BindingDialog.kt +++ b/core/architecture/src/main/java/com/ama/core/architecture/widget/BindingDialog.kt @@ -28,6 +28,7 @@ import androidx.lifecycle.LifecycleOwner import androidx.viewbinding.ViewBinding import com.ama.core.architecture.R import com.ama.core.architecture.util.ScreenUtils +import com.ama.core.architecture.util.eventbus.NotifyMan import com.ama.core.common.util.dp @@ -48,6 +49,20 @@ open class BindingDialog(protected val mActivity: Activity, lateinit var mBinding: VB var currEvent: Lifecycle.Event? = null + private var mEventCallback: NotifyMan.ICallback? = null + + protected fun registerEvents(onEvents: ((NotifyMan.NotifyData<*>?)->Unit), vararg eventTypes: Int) { + if (mEventCallback == null) { + mEventCallback = object : NotifyMan.ICallback(true) { + override fun onEvent(data: NotifyMan.NotifyData<*>?) { + onEvents.invoke(data) + } + } + } + + NotifyMan.instance().register(mEventCallback, *eventTypes) + } + companion object { fun getRoundRectDrawable(radius: Int, color: Int): ShapeDrawable { @@ -78,6 +93,9 @@ open class BindingDialog(protected val mActivity: Activity, super.onCreate(savedInstanceState) mBinding = inflate(layoutInflater) setContentView(mBinding.root) + setOnDismissListener { + NotifyMan.instance().unregister(mEventCallback) + } init() } @@ -88,6 +106,7 @@ open class BindingDialog(protected val mActivity: Activity, } } + fun init() { if (mActivity is ComponentActivity) { mActivity.lifecycle.addObserver(this)