看广告act+1

This commit is contained in:
renhaoting 2025-11-28 13:49:08 +08:00
parent a8ab37a17b
commit cfe4acbb78
10 changed files with 131 additions and 19 deletions

View File

@ -35,6 +35,7 @@
<activity android:name=".features.feedback.FeedbackActivity" android:exported="false" />
<activity android:name=".features.withdrawrecord.WithdrawRecordActivity" android:exported="false" />
<activity android:name=".features.privacy.PrivacyActivity" android:exported="false" />
<activity android:name=".features.watchad.WatchAdActivity" android:exported="false" />

View File

@ -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<ViewBinding, UiState, ViewModel>(), 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<ViewBinding, UiState, ViewModel>(), 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<ViewBinding, UiState, ViewModel>(), 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)
}
}

View File

@ -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<DialogWatchVideoBinding>(context, DialogWatchVideoBinding::inflate) {
private lateinit var mDataList: List<RewardDetail>
init {
build()
@ -30,7 +29,6 @@ class WatchVideoDialog(context: Activity) : BindingDialog<DialogWatchVideoBindin
}
flAction -> {
gotoWatchVideo()
dismiss()
}
}
}
@ -38,7 +36,13 @@ class WatchVideoDialog(context: Activity) : BindingDialog<DialogWatchVideoBindin
}
private fun gotoWatchVideo() {
val taskUUID = AndroidUtil.genRandomInt(500000, Int.MAX_VALUE)
registerEvents({
AndroidUtil.showToast("广告任务完成")
dismiss()
}, taskUUID)
Router.WatchAd.startActivity(mActivity, taskUUID)
}

View File

@ -41,7 +41,7 @@ class DefaultVersionRouter: IRouterVersion {
class DefaultWatchAdRouter: IRouterWatchAd {
override fun startActivity(activity: Activity) {
WatchAdActivity.Companion.startActivity(activity)
override fun startActivity(activity: Activity, taskUUID: Int) {
WatchAdActivity.Companion.startActivity(activity, taskUUID)
}
}

View File

@ -24,7 +24,7 @@ interface IRouterSplash {
}
interface IRouterWatchAd {
fun startActivity(activity: Activity)
fun startActivity(activity: Activity, taskUUID: Int)
}

View File

@ -1,9 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/content_root" >
android:layout_height="match_parent">
<androidx.appcompat.widget.AppCompatImageView
@ -14,6 +12,22 @@
android:src="@mipmap/bg_record_win_rgiht"
/>
</LinearLayout>
<FrameLayout
android:id="@+id/content_root"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_ad_counter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="18sp"
android:textColor="@color/white"
android:text="ad showing"
/>
</FrameLayout>
</FrameLayout>

View File

@ -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<Binding : ViewBinding, UiState : Any,
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
initEdgeToEdge()
readIntent(intent)
// 内容
setContentView(binding.root)
// 初始化
@ -65,6 +67,15 @@ abstract class BaseViewsActivity<Binding : ViewBinding, UiState : Any,
binding.initObservers()
}
override fun readIntent(intent: Intent) {
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
readIntent(intent)
}
open fun initEdgeToEdge() {
enableEdgeToEdge()
}

View File

@ -1,5 +1,6 @@
package com.ama.core.architecture.interfaces
import android.content.Intent
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.viewbinding.ViewBinding
@ -17,6 +18,8 @@ interface ViewBindingActivity<Binding : ViewBinding, UiState> {
fun Binding.initObservers()
fun Binding.onUiStateCollect(uiState: UiState)
fun readIntent(intent: Intent)
}
interface ViewBindingFragment<Binding : ViewBinding, UiState> {

View File

@ -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()
}
}

View File

@ -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<VB : ViewBinding>(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<VB : ViewBinding>(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<VB : ViewBinding>(protected val mActivity: Activity,
}
}
fun init() {
if (mActivity is ComponentActivity) {
mActivity.lifecycle.addObserver(this)