Commit 0ae7376c authored by wanglei's avatar wanglei

...

parent cbbce77b
...@@ -192,6 +192,10 @@ ...@@ -192,6 +192,10 @@
android:name=".activity.XzLoadingActivity" android:name=".activity.XzLoadingActivity"
android:screenOrientation="portrait" android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" /> tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".activity.guide.WhichWantGuideActivity"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<meta-data <meta-data
android:name="com.google.android.gms.ads.flag.OPTIMIZE_INITIALIZATION" android:name="com.google.android.gms.ads.flag.OPTIMIZE_INITIALIZATION"
...@@ -202,6 +206,7 @@ ...@@ -202,6 +206,7 @@
<meta-data <meta-data
android:name="com.google.android.gms.ads.flag.NATIVE_AD_DEBUGGER_ENABLED" android:name="com.google.android.gms.ads.flag.NATIVE_AD_DEBUGGER_ENABLED"
android:value="false" /> android:value="false" />
<service <service
android:name=".service.StayJobService" android:name=".service.StayJobService"
android:exported="false" android:exported="false"
......
...@@ -23,7 +23,9 @@ class BatteryInfoAnimationActivity : BaseActivity<ActivityBatteryInfoAnimationBi ...@@ -23,7 +23,9 @@ class BatteryInfoAnimationActivity : BaseActivity<ActivityBatteryInfoAnimationBi
private var job: Job? = null private var job: Job? = null
override fun initView() { override fun initView() {
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative) if (AdmobMaxHelper.showLoadingNativeSp()) {
AdmobMaxHelper.admobMaxShowNativeAd(this, binding.idFlNative)
}
resumeLottie() resumeLottie()
} }
......
...@@ -38,7 +38,9 @@ class ScanJunkActivity : BaseActivity<ActivityLayoutScanJunkBinding>() { ...@@ -38,7 +38,9 @@ class ScanJunkActivity : BaseActivity<ActivityLayoutScanJunkBinding>() {
override fun initView() { override fun initView() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT) BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight()) binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative) if (AdmobMaxHelper.showLoadingNativeSp()) {
AdmobMaxHelper.admobMaxShowNativeAd(this, binding.idFlNative)
}
if (!checkStorePermission()) { if (!checkStorePermission()) {
showGerPermission(tittle = "Storage Permission Required", showGerPermission(tittle = "Storage Permission Required",
desc = "This feature requires access to your storage to scan your files and clean up junk files and unused APK files. We will not transmit your data to any third-party service. Please grant permission so that we can provide you with better service.", desc = "This feature requires access to your storage to scan your files and clean up junk files and unused APK files. We will not transmit your data to any third-party service. Please grant permission so that we can provide you with better service.",
...@@ -51,8 +53,8 @@ class ScanJunkActivity : BaseActivity<ActivityLayoutScanJunkBinding>() { ...@@ -51,8 +53,8 @@ class ScanJunkActivity : BaseActivity<ActivityLayoutScanJunkBinding>() {
} }
}) })
}) })
}else{ } else {
ConstObject.hasCleaned=true ConstObject.hasCleaned = true
} }
} }
......
...@@ -23,7 +23,9 @@ class LargeFileAnimationActivity : BaseActivity<ActivityLargeFileAnimationBindin ...@@ -23,7 +23,9 @@ class LargeFileAnimationActivity : BaseActivity<ActivityLargeFileAnimationBindin
private var job: Job? = null private var job: Job? = null
override fun initView() { override fun initView() {
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative) if (AdmobMaxHelper.showLoadingNativeSp()) {
AdmobMaxHelper.admobMaxShowNativeAd(this, binding.idFlNative)
}
} }
override fun initListener() { override fun initListener() {
......
...@@ -21,7 +21,9 @@ class RepeatAnimationActivity : BaseActivity<ActivityRepeatAnimationBinding>() { ...@@ -21,7 +21,9 @@ class RepeatAnimationActivity : BaseActivity<ActivityRepeatAnimationBinding>() {
private var job: Job? = null private var job: Job? = null
override fun initView() { override fun initView() {
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative) if (AdmobMaxHelper.showLoadingNativeSp()) {
AdmobMaxHelper.admobMaxShowNativeAd(this, binding.idFlNative)
}
} }
override fun initListener() { override fun initListener() {
......
...@@ -23,7 +23,9 @@ class ScreenShotAnimationActivity : BaseActivity<ActivityScreenShotAnimationBind ...@@ -23,7 +23,9 @@ class ScreenShotAnimationActivity : BaseActivity<ActivityScreenShotAnimationBind
private var job: Job? = null private var job: Job? = null
override fun initView() { override fun initView() {
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative) if (AdmobMaxHelper.showLoadingNativeSp()) {
AdmobMaxHelper.admobMaxShowNativeAd(this, binding.idFlNative)
}
} }
private fun jumpJob() = lifecycleScope.launch { private fun jumpJob() = lifecycleScope.launch {
......
...@@ -6,11 +6,11 @@ import android.net.Uri ...@@ -6,11 +6,11 @@ import android.net.Uri
import android.text.SpannableString import android.text.SpannableString
import android.text.Spanned import android.text.Spanned
import android.text.style.UnderlineSpan import android.text.style.UnderlineSpan
import android.view.View
import com.base.filerecoveryrecyclebin.GlobalConfig import com.base.filerecoveryrecyclebin.GlobalConfig
import com.base.filerecoveryrecyclebin.MyApplication import com.base.filerecoveryrecyclebin.MyApplication
import com.base.filerecoveryrecyclebin.bean.ConstObject.ifAgreePrivacy import com.base.filerecoveryrecyclebin.bean.ConstObject.ifAgreePrivacy
import com.base.filerecoveryrecyclebin.databinding.ActivitySplashBinding import com.base.filerecoveryrecyclebin.databinding.ActivitySplashBinding
import com.base.filerecoveryrecyclebin.help.ConfigHelper
class PrivacyManager { class PrivacyManager {
...@@ -60,6 +60,7 @@ class PrivacyManager { ...@@ -60,6 +60,7 @@ class PrivacyManager {
return@setOnClickListener return@setOnClickListener
} }
clicked = true clicked = true
binding.llConsent.visibility = View.INVISIBLE
// binding.idTvStart.isVisible = false // binding.idTvStart.isVisible = false
// binding.idLlJindu.isVisible = true // binding.idLlJindu.isVisible = true
// binding.idLlYinsi.igitsVisible = false // binding.idLlYinsi.igitsVisible = false
......
...@@ -17,6 +17,7 @@ import com.base.filerecoveryrecyclebin.fcm.NotificationUtil ...@@ -17,6 +17,7 @@ import com.base.filerecoveryrecyclebin.fcm.NotificationUtil
import com.base.filerecoveryrecyclebin.help.BaseActivity import com.base.filerecoveryrecyclebin.help.BaseActivity
import com.base.filerecoveryrecyclebin.utils.BarUtils import com.base.filerecoveryrecyclebin.utils.BarUtils
import com.base.filerecoveryrecyclebin.utils.EventUtils import com.base.filerecoveryrecyclebin.utils.EventUtils
import com.base.filerecoveryrecyclebin.utils.LogEx
@SuppressLint("CustomSplashScreen") @SuppressLint("CustomSplashScreen")
class Splash2Activity : BaseActivity<ActivitySplashBinding>(), class Splash2Activity : BaseActivity<ActivitySplashBinding>(),
...@@ -48,6 +49,11 @@ class Splash2Activity : BaseActivity<ActivitySplashBinding>(), ...@@ -48,6 +49,11 @@ class Splash2Activity : BaseActivity<ActivitySplashBinding>(),
var jumpType = 0 var jumpType = 0
override fun initView() { override fun initView() {
val isHotLaunch = intent?.extras?.getBoolean("isHotLaunch", false) ?: false
Splash2Activity.isSplashHot = isHotLaunch
initStatusBar() initStatusBar()
if (isDestroyed) { if (isDestroyed) {
return return
...@@ -95,8 +101,14 @@ class Splash2Activity : BaseActivity<ActivitySplashBinding>(), ...@@ -95,8 +101,14 @@ class Splash2Activity : BaseActivity<ActivitySplashBinding>(),
}, 500) }, 500)
} }
var shenPb = 0
private fun loadAd() { private fun loadAd() {
progressCallBack = {
binding.pb.progress += shenPb
LogEx.logDebug(TAG, "AdmobOpenUtils shenPb=$shenPb ${binding.pb.max}")
}
AdmobMaxHelper.admobMaxShowOpenAd(this, { AdmobMaxHelper.admobMaxShowOpenAd(this, {
shenPb = (binding.pb.max - binding.pb.progress) / 3
mTaskManager?.pauseProgress() mTaskManager?.pauseProgress()
}, { }, {
mTaskManager?.pauseProgress() mTaskManager?.pauseProgress()
......
...@@ -28,13 +28,18 @@ object AdmobMaxHelper { ...@@ -28,13 +28,18 @@ object AdmobMaxHelper {
return ss == 1 return ss == 1
} }
fun showLoadingNativeSp(): Boolean {
val isShowLoadingNative = AppPreferences.getInstance().getString("isShowLoadingNative", "1").toInt()
return isShowLoadingNative == 1
}
fun showExitNativeSp(): Boolean { fun showExitNativeSp(): Boolean {
val isShowExitNative = AppPreferences.getInstance().getString("isShowExitNative", "0").toInt() val isShowExitNative = AppPreferences.getInstance().getString("isShowExitNative", "0").toInt()
return isShowExitNative == 1 return isShowExitNative == 1
} }
fun showGuideNativeSp(): Boolean { fun showGuideNativeSp(): Boolean {
val isShowGuideNative = AppPreferences.getInstance().getString("isShowGuideNative", "0").toInt() val isShowGuideNative = AppPreferences.getInstance().getString("isShowGuideNative", "1").toInt()
return isShowGuideNative == 1 return isShowGuideNative == 1
} }
......
package com.base.filerecoveryrecyclebin.ads
import android.animation.ObjectAnimator
import android.app.Activity
import android.app.Dialog
import android.os.Handler
import android.os.Looper
import android.view.View
import android.view.Window
import android.widget.ImageView
import android.widget.TextView
import androidx.core.content.ContextCompat
import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.activity.splash.Splash2Activity
import com.base.filerecoveryrecyclebin.utils.LogEx
object CountdownDialog {
private val TAG = "CountdownDialog"
fun dismissLoadingDialog() {
kotlin.runCatching {
loadingDialog?.dismiss()
loadingDialog = null
}
}
/**
* 显示倒计时弹窗
*/
fun showLoadingScreen(activity: Activity, callBack: (() -> Unit)?) {
if (loadingDialog == null) {
loadingDialog = Dialog(activity).apply {
requestWindowFeature(Window.FEATURE_NO_TITLE)
setContentView(R.layout.dialog_loading)
setCancelable(false)
window?.setBackgroundDrawable(ContextCompat.getDrawable(activity, R.drawable.bg_loadingads))
}
}
val imageView = loadingDialog?.findViewById<ImageView>(R.id.loading_image)
val countdownTextView = loadingDialog?.findViewById<TextView>(R.id.countdown_text)
imageView?.let { startRotateAnimation(it) } // 开始旋转动画
// 控制倒计时文本是否显示
countdownTextView?.visibility = View.VISIBLE
loadingDialog?.setOnDismissListener {
loadingDialog = null
}
if (!activity.isFinishing && !activity.isDestroyed) {
loadingDialog?.show()
}
callBack?.invoke()
}
private var countdown = 3 // 初始倒计时
private var countdownHandler: Handler? = null
private var loadingDialog: Dialog? = null
/**
* 倒计时3秒,如果显示了弹窗跟弹窗
*/
fun startCountdownAndShowAd(callBack: (() -> Unit)?) {
countdown = 3
updateCountdownText(countdown) // 显示倒计时文本
countdownHandler?.removeCallbacksAndMessages(null)
countdownHandler = Handler(Looper.getMainLooper())
countdownHandler?.post(object : Runnable {
override fun run() {
if (countdown <= 0) {
loadingDialog?.dismiss()
Splash2Activity.progressCallBack = null
callBack?.invoke()
} else {
Splash2Activity.progressCallBack?.invoke()
updateCountdownText(countdown) // 更新倒计时文本
countdown--
LogEx.logDebug(TAG, "startCountdownAndShowAd countdown=$countdown")
countdownHandler?.postDelayed(this, 1000)
}
}
})
}
// 更新倒计时文本并控制是否显示括号和数字
private fun updateCountdownText(count: Int) {
val countdownTextView = loadingDialog?.findViewById<TextView>(R.id.countdown_text)
// LogEx.logDebug(AdmobOpenUtils.TAG, "updateCountdownText $count countdownTextView=$countdownTextView")
countdownTextView?.text = "Ads are about to be shown($count)"
countdownTextView?.visibility = View.VISIBLE
}
private fun startRotateAnimation(imageView: ImageView) {
ObjectAnimator.ofFloat(imageView, "rotation", 0f, 360f).apply {
duration = 3000 // 持续 3 秒
repeatCount = ObjectAnimator.INFINITE // 无限循环
start()
}
}
}
\ No newline at end of file
...@@ -8,11 +8,13 @@ import com.base.filerecoveryrecyclebin.GlobalConfig ...@@ -8,11 +8,13 @@ import com.base.filerecoveryrecyclebin.GlobalConfig
import com.base.filerecoveryrecyclebin.R import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.ads.AdDisplayUtils import com.base.filerecoveryrecyclebin.ads.AdDisplayUtils
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper.lastShowedOnHiddenTime import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper.lastShowedOnHiddenTime
import com.base.filerecoveryrecyclebin.ads.CountdownDialog.dismissLoadingDialog
import com.base.filerecoveryrecyclebin.ads.CountdownDialog.showLoadingScreen
import com.base.filerecoveryrecyclebin.ads.CountdownDialog.startCountdownAndShowAd
import com.base.filerecoveryrecyclebin.ads.admob.AdmobEvent.clickAd import com.base.filerecoveryrecyclebin.ads.admob.AdmobEvent.clickAd
import com.base.filerecoveryrecyclebin.ads.admob.AdmobEvent.pullAd import com.base.filerecoveryrecyclebin.ads.admob.AdmobEvent.pullAd
import com.base.filerecoveryrecyclebin.ads.admob.AdmobEvent.showAd import com.base.filerecoveryrecyclebin.ads.admob.AdmobEvent.showAd
import com.base.filerecoveryrecyclebin.help.BaseApplication import com.base.filerecoveryrecyclebin.help.BaseApplication
import com.base.filerecoveryrecyclebin.help.ConfigHelper
import com.base.filerecoveryrecyclebin.utils.EventUtils import com.base.filerecoveryrecyclebin.utils.EventUtils
import com.base.filerecoveryrecyclebin.view.CustomDialog import com.base.filerecoveryrecyclebin.view.CustomDialog
import com.google.android.gms.ads.AdError import com.google.android.gms.ads.AdError
...@@ -38,8 +40,6 @@ object AdmobInterstitialUtils { ...@@ -38,8 +40,6 @@ object AdmobInterstitialUtils {
fun showInterstitialAd( fun showInterstitialAd(
activity: Activity, activity: Activity,
isReLoadAd: Boolean = false,
isShowDialog: Boolean = true,
onHidden: (() -> Unit)? = null onHidden: (() -> Unit)? = null
) { ) {
...@@ -65,20 +65,35 @@ object AdmobInterstitialUtils { ...@@ -65,20 +65,35 @@ object AdmobInterstitialUtils {
return return
} }
if (interAd != null) { if (interAd != null) {
displayInterstitialAd(activity, onHidden) showLoadingScreen(activity) {
startCountdownAndShowAd {
displayInterstitialAd(activity, onHidden)
}
}
} else { } else {
showAdDialogAndLoadInterstitial(activity, isReLoadAd, isShowDialog, onHidden) showLoadingScreen(activity) {}
loadInterstitialAd(activity) { loaded ->
if (loaded) {
startCountdownAndShowAd {
displayInterstitialAd(activity, onHidden)
}
} else {
dismissLoadingDialog()
onHidden?.invoke()
}
}
} }
} }
fun loadInterstitialAd(activity: Activity, onLoad: (() -> Unit)? = null) { fun loadInterstitialAd(activity: Activity, onLoad: ((flag: Boolean) -> Unit)? = null) {
if (interAd != null) { if (interAd != null) {
onLoad?.invoke() onLoad?.invoke(true)
return return
} }
if (!AdDisplayUtils.getInstance().shouldShowAd("")) { if (!AdDisplayUtils.getInstance().shouldShowAd("InterAd")) {
onLoad?.invoke() onLoad?.invoke(false)
return return
} }
val reqId = UUID.randomUUID().toString() val reqId = UUID.randomUUID().toString()
...@@ -93,7 +108,7 @@ object AdmobInterstitialUtils { ...@@ -93,7 +108,7 @@ object AdmobInterstitialUtils {
object : InterstitialAdLoadCallback() { object : InterstitialAdLoadCallback() {
override fun onAdFailedToLoad(p0: LoadAdError) { override fun onAdFailedToLoad(p0: LoadAdError) {
interAd = null interAd = null
onLoad?.invoke() onLoad?.invoke(false)
pullAd(p0.responseInfo, "interAd", p0.message, reqId = reqId) pullAd(p0.responseInfo, "interAd", p0.message, reqId = reqId)
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
Toast.makeText( Toast.makeText(
...@@ -107,7 +122,7 @@ object AdmobInterstitialUtils { ...@@ -107,7 +122,7 @@ object AdmobInterstitialUtils {
override fun onAdLoaded(ad: InterstitialAd) { override fun onAdLoaded(ad: InterstitialAd) {
interAd = ad interAd = ad
onLoad?.invoke() onLoad?.invoke(true)
interLoadTime = System.currentTimeMillis() interLoadTime = System.currentTimeMillis()
pullAd(ad.responseInfo, "interAd", reqId = reqId) pullAd(ad.responseInfo, "interAd", reqId = reqId)
ad.onPaidEventListener = AdmobEvent.EventOnPaidEventListener(ad) ad.onPaidEventListener = AdmobEvent.EventOnPaidEventListener(ad)
...@@ -115,37 +130,6 @@ object AdmobInterstitialUtils { ...@@ -115,37 +130,6 @@ object AdmobInterstitialUtils {
}) })
} }
private fun showAdDialogAndLoadInterstitial(
activity: Activity,
isReLoadAd: Boolean,
isShowDialog: Boolean,
onHidden: (() -> Unit)?
) {
if (!isShowDialog) {
onHidden?.invoke()
return
}
var mDialog: Dialog? = null
if (!activity.isFinishing && !activity.isDestroyed) {
mDialog = CustomDialog(activity, R.layout.dialog_ad_loading)
// 设置对话框的样式和内容
mDialog.show()
}
loadInterstitialAd(activity) {
mDialog?.dismiss()
if (!isReLoadAd) {
showInterstitialAd(activity, true, false) {
onHidden?.invoke()
}
}
}
if (isReLoadAd) {
mDialog?.dismiss()
onHidden?.invoke()
}
}
private fun displayInterstitialAd(activity: Activity, onHidden: (() -> Unit)? = null) { private fun displayInterstitialAd(activity: Activity, onHidden: (() -> Unit)? = null) {
val thisInterAd = interAd val thisInterAd = interAd
......
...@@ -3,7 +3,6 @@ package com.base.filerecoveryrecyclebin.ads.admob ...@@ -3,7 +3,6 @@ package com.base.filerecoveryrecyclebin.ads.admob
import android.app.Activity import android.app.Activity
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.view.isVisible import androidx.core.view.isVisible
import com.base.filerecoveryrecyclebin.BuildConfig
import com.base.filerecoveryrecyclebin.GlobalConfig import com.base.filerecoveryrecyclebin.GlobalConfig
import com.base.filerecoveryrecyclebin.R import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.ads.AdDisplayUtils import com.base.filerecoveryrecyclebin.ads.AdDisplayUtils
...@@ -11,7 +10,6 @@ import com.base.filerecoveryrecyclebin.ads.admob.AdmobEvent.clickAd ...@@ -11,7 +10,6 @@ import com.base.filerecoveryrecyclebin.ads.admob.AdmobEvent.clickAd
import com.base.filerecoveryrecyclebin.ads.admob.AdmobEvent.pullAd import com.base.filerecoveryrecyclebin.ads.admob.AdmobEvent.pullAd
import com.base.filerecoveryrecyclebin.ads.admob.AdmobEvent.showAd import com.base.filerecoveryrecyclebin.ads.admob.AdmobEvent.showAd
import com.base.filerecoveryrecyclebin.help.BaseApplication import com.base.filerecoveryrecyclebin.help.BaseApplication
import com.base.filerecoveryrecyclebin.help.ConfigHelper
import com.base.filerecoveryrecyclebin.utils.EventUtils import com.base.filerecoveryrecyclebin.utils.EventUtils
import com.base.filerecoveryrecyclebin.utils.LogEx import com.base.filerecoveryrecyclebin.utils.LogEx
import com.google.android.gms.ads.AdListener import com.google.android.gms.ads.AdListener
...@@ -81,6 +79,7 @@ object AdmobNativeUtils { ...@@ -81,6 +79,7 @@ object AdmobNativeUtils {
obj.put("ad_unit", "NativeAd") obj.put("ad_unit", "NativeAd")
EventUtils.event("ad_prepare_show", ext = obj) EventUtils.event("ad_prepare_show", ext = obj)
if (!AdDisplayUtils.getInstance().shouldShowAd("NativeAd")) { if (!AdDisplayUtils.getInstance().shouldShowAd("NativeAd")) {
LogEx.logDebug(TAG, "!shouldShowAd")
return return
} }
loadingListener = { loadingListener = {
......
package com.base.filerecoveryrecyclebin.ads.admob package com.base.filerecoveryrecyclebin.ads.admob
import android.app.Activity import android.app.Activity
import com.base.filerecoveryrecyclebin.BuildConfig
import com.base.filerecoveryrecyclebin.GlobalConfig import com.base.filerecoveryrecyclebin.GlobalConfig
import com.base.filerecoveryrecyclebin.activity.splash.Splash2Activity
import com.base.filerecoveryrecyclebin.ads.AdDisplayUtils import com.base.filerecoveryrecyclebin.ads.AdDisplayUtils
import com.base.filerecoveryrecyclebin.ads.CountdownDialog.startCountdownAndShowAd
import com.base.filerecoveryrecyclebin.ads.admob.AdmobEvent.clickAd import com.base.filerecoveryrecyclebin.ads.admob.AdmobEvent.clickAd
import com.base.filerecoveryrecyclebin.ads.admob.AdmobEvent.pullAd import com.base.filerecoveryrecyclebin.ads.admob.AdmobEvent.pullAd
import com.base.filerecoveryrecyclebin.ads.admob.AdmobEvent.showAd import com.base.filerecoveryrecyclebin.ads.admob.AdmobEvent.showAd
import com.base.filerecoveryrecyclebin.help.BaseApplication import com.base.filerecoveryrecyclebin.help.BaseApplication
import com.base.filerecoveryrecyclebin.help.ConfigHelper
import com.base.filerecoveryrecyclebin.utils.EventUtils import com.base.filerecoveryrecyclebin.utils.EventUtils
import com.base.filerecoveryrecyclebin.utils.LogEx import com.base.filerecoveryrecyclebin.utils.LogEx
import com.google.android.gms.ads.AdError import com.google.android.gms.ads.AdError
...@@ -98,40 +98,26 @@ object AdmobOpenUtils { ...@@ -98,40 +98,26 @@ object AdmobOpenUtils {
if (mOpenAd != null) { if (mOpenAd != null) {
LogEx.logDebug(TAG, "mOpenAd!=null") LogEx.logDebug(TAG, "mOpenAd!=null")
val thisMOpenAd = mOpenAd showBefore?.invoke(true)
mOpenAd = null if (Splash2Activity.isSplashHot) {
thisMOpenAd?.fullScreenContentCallback = object : FullScreenContentCallback() { startCountdownAndShowAd {
override fun onAdClicked() { showReadyAd(activity, showBefore, onHidden)
clickAd(thisMOpenAd?.responseInfo, "openAd")
}
override fun onAdDismissedFullScreenContent() {
mOpenAd = null
onHidden?.invoke(3)
loadAppOpenAd()
}
override fun onAdFailedToShowFullScreenContent(p0: AdError) {
mOpenAd = null
onHidden?.invoke(4)
loadAppOpenAd()
val obj = JSONObject()
obj.put("reason", p0.message)
obj.put("ad_unit", "openAd")
EventUtils.event("ad_show_error", ext = obj)
}
override fun onAdShowedFullScreenContent() {
showBefore?.invoke(true)
showAd(thisMOpenAd?.responseInfo, "openAd", activity)
} }
} else {
showReadyAd(activity, showBefore, onHidden)
} }
thisMOpenAd?.show(activity)
} else { } else {
LogEx.logDebug(TAG, "mOpenAd=null") LogEx.logDebug(TAG, "mOpenAd=null")
loadAppOpenAd { loadAppOpenAd {
if (mOpenAd != null) { if (mOpenAd != null) {
showAppOpenAd(activity, true, showBefore, onHidden) showBefore?.invoke(true)
if (Splash2Activity.isSplashHot) {
startCountdownAndShowAd {
showReadyAd(activity, showBefore, onHidden)
}
} else {
showReadyAd(activity, showBefore, onHidden)
}
} else { } else {
val obj = JSONObject() val obj = JSONObject()
obj.put("reason", "no_ad") obj.put("reason", "no_ad")
...@@ -142,4 +128,41 @@ object AdmobOpenUtils { ...@@ -142,4 +128,41 @@ object AdmobOpenUtils {
} }
} }
} }
private fun showReadyAd(
activity: Activity,
showBefore: ((flag: Boolean) -> Unit)? = null,
onHidden: ((where: Int) -> Unit)?
) {
val thisMOpenAd = mOpenAd
mOpenAd = null
thisMOpenAd?.fullScreenContentCallback = object : FullScreenContentCallback() {
override fun onAdClicked() {
clickAd(thisMOpenAd?.responseInfo, "openAd")
}
override fun onAdDismissedFullScreenContent() {
mOpenAd = null
onHidden?.invoke(3)
loadAppOpenAd()
}
override fun onAdFailedToShowFullScreenContent(p0: AdError) {
mOpenAd = null
onHidden?.invoke(4)
loadAppOpenAd()
val obj = JSONObject()
obj.put("reason", p0.message)
obj.put("ad_unit", "openAd")
EventUtils.event("ad_show_error", ext = obj)
}
override fun onAdShowedFullScreenContent() {
showBefore?.invoke(true)
showAd(thisMOpenAd?.responseInfo, "openAd", activity)
}
}
thisMOpenAd?.show(activity)
}
} }
\ No newline at end of file
package com.base.filerecoveryrecyclebin.ads.max package com.base.filerecoveryrecyclebin.ads.max
import android.animation.ObjectAnimator
import android.app.Activity import android.app.Activity
import android.app.Dialog import android.app.Dialog
import android.os.Handler
import android.os.Looper
import android.view.View
import android.view.Window
import android.widget.ImageView
import android.widget.TextView
import androidx.core.content.ContextCompat
import com.applovin.mediation.MaxAd import com.applovin.mediation.MaxAd
import com.applovin.mediation.MaxAdListener import com.applovin.mediation.MaxAdListener
import com.applovin.mediation.MaxError import com.applovin.mediation.MaxError
...@@ -19,6 +11,8 @@ import com.base.filerecoveryrecyclebin.MyApplication.Companion.isInterOpenShowin ...@@ -19,6 +11,8 @@ import com.base.filerecoveryrecyclebin.MyApplication.Companion.isInterOpenShowin
import com.base.filerecoveryrecyclebin.R import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.ads.AdDisplayUtils import com.base.filerecoveryrecyclebin.ads.AdDisplayUtils
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper.lastShowedOnHiddenTime import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper.lastShowedOnHiddenTime
import com.base.filerecoveryrecyclebin.ads.CountdownDialog.showLoadingScreen
import com.base.filerecoveryrecyclebin.ads.CountdownDialog.startCountdownAndShowAd
import com.base.filerecoveryrecyclebin.utils.EventUtils import com.base.filerecoveryrecyclebin.utils.EventUtils
import com.base.filerecoveryrecyclebin.utils.LogEx import com.base.filerecoveryrecyclebin.utils.LogEx
import com.base.filerecoveryrecyclebin.view.CustomDialog import com.base.filerecoveryrecyclebin.view.CustomDialog
...@@ -153,20 +147,16 @@ object AdMaxInterstitialUtils { ...@@ -153,20 +147,16 @@ object AdMaxInterstitialUtils {
LogEx.logDebug(TAG, "loaded=true") LogEx.logDebug(TAG, "loaded=true")
loadingListener = { loadingListener = {
LogEx.logDebug(TAG, "loadingListener") LogEx.logDebug(TAG, "loadingListener")
if (interstitialAd?.isReady == true) { if (interstitialAd?.isReady == true) {
this.onHidden = onHidden this.onHidden = onHidden
startCountdownAndShowAd { startCountdownAndShowAd {
loadingDialog?.dismiss()
interstitialAd?.showAd(activity) interstitialAd?.showAd(activity)
} }
} else { } else {
loadingDialog?.dismiss()
onHidden?.invoke() onHidden?.invoke()
} }
} }
} else { } else {
loadingDialog?.dismiss()
LogEx.logDebug(TAG, "loaded=false") LogEx.logDebug(TAG, "loaded=false")
onHidden?.invoke() onHidden?.invoke()
} }
...@@ -178,19 +168,6 @@ object AdMaxInterstitialUtils { ...@@ -178,19 +168,6 @@ object AdMaxInterstitialUtils {
return System.currentTimeMillis() - interLoadTime > 1000 * 60 * 60 return System.currentTimeMillis() - interLoadTime > 1000 * 60 * 60
} }
private fun showAdDialogAndLoadInterstitial(
activity: Activity,
): Dialog? {
var customDialog: Dialog? = null
if (!activity.isFinishing && !activity.isDestroyed) {
customDialog = CustomDialog(activity, R.layout.dialog_ad_loading)
// 设置对话框的样式和内容
customDialog.show()
}
return customDialog
}
fun loadInterstitialAd(activity: Activity): Boolean { fun loadInterstitialAd(activity: Activity): Boolean {
setListener(activity) setListener(activity)
...@@ -208,74 +185,6 @@ object AdMaxInterstitialUtils { ...@@ -208,74 +185,6 @@ object AdMaxInterstitialUtils {
AdDisplayUtils.getInstance().incrementAdRequestCount() AdDisplayUtils.getInstance().incrementAdRequestCount()
return true return true
} }
private fun showLoadingScreen(activity: Activity, callBack: (() -> Unit)) {
if (activity.isFinishing || activity.isDestroyed) {
return
}
if (loadingDialog == null) {
loadingDialog = Dialog(activity).apply {
requestWindowFeature(Window.FEATURE_NO_TITLE)
setContentView(R.layout.dialog_loading)
setCancelable(false)
window?.setBackgroundDrawable(ContextCompat.getDrawable(activity, R.drawable.bg_loadingads))
}
}
val imageView = loadingDialog?.findViewById<ImageView>(R.id.loading_image)
val countdownTextView = loadingDialog?.findViewById<TextView>(R.id.countdown_text)
imageView?.let { startRotateAnimation(it) } // 开始旋转动画
// 控制倒计时文本是否显示
countdownTextView?.visibility = View.VISIBLE
loadingDialog?.show()
callBack.invoke()
}
private fun startRotateAnimation(imageView: ImageView) {
ObjectAnimator.ofFloat(imageView, "rotation", 0f, 360f).apply {
duration = 3000 // 持续 3 秒
repeatCount = ObjectAnimator.INFINITE // 无限循环
start()
}
}
private var countdown = 3 // 初始倒计时
private var countdownHandler: Handler? = null
private var loadingDialog: Dialog? = null
private fun startCountdownAndShowAd(callBack: (() -> Unit)?) {
countdown = 3
updateCountdownText(count = countdown) // 显示倒计时文本
countdownHandler?.removeCallbacksAndMessages(null)
countdownHandler = Handler(Looper.getMainLooper())
countdownHandler?.post(object : Runnable {
override fun run() {
if (countdown <= 0) {
loadingDialog?.dismiss()
loadingDialog = null
callBack?.invoke()
} else {
updateCountdownText(countdown) // 更新倒计时文本
countdown--
countdownHandler?.postDelayed(this, 1000)
}
}
})
}
// 更新倒计时文本并控制是否显示括号和数字
private fun updateCountdownText(count: Int) {
val countdownTextView = loadingDialog?.findViewById<TextView>(R.id.countdown_text)
// LogEx.logDebug(AdmobOpenUtils.TAG, "updateCountdownText $count countdownTextView=$countdownTextView")
countdownTextView?.text = "Ads are about to be shown($count)"
countdownTextView?.visibility = View.VISIBLE
}
} }
...@@ -19,6 +19,7 @@ import com.base.filerecoveryrecyclebin.MyApplication.Companion.isInterOpenShowin ...@@ -19,6 +19,7 @@ import com.base.filerecoveryrecyclebin.MyApplication.Companion.isInterOpenShowin
import com.base.filerecoveryrecyclebin.R import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.activity.splash.Splash2Activity import com.base.filerecoveryrecyclebin.activity.splash.Splash2Activity
import com.base.filerecoveryrecyclebin.ads.AdDisplayUtils import com.base.filerecoveryrecyclebin.ads.AdDisplayUtils
import com.base.filerecoveryrecyclebin.ads.CountdownDialog.startCountdownAndShowAd
import com.base.filerecoveryrecyclebin.help.ConfigHelper import com.base.filerecoveryrecyclebin.help.ConfigHelper
import com.base.filerecoveryrecyclebin.utils.EventUtils import com.base.filerecoveryrecyclebin.utils.EventUtils
import com.base.filerecoveryrecyclebin.utils.LogEx import com.base.filerecoveryrecyclebin.utils.LogEx
...@@ -204,75 +205,5 @@ object AdMaxOpenUtils { ...@@ -204,75 +205,5 @@ object AdMaxOpenUtils {
return appOpenAd?.isReady == true return appOpenAd?.isReady == true
} }
private fun showLoadingScreen(activity: Activity, callBack: (() -> Unit)) {
if (activity.isFinishing || activity.isDestroyed) {
return
}
if (loadingDialog == null) {
loadingDialog = Dialog(activity).apply {
requestWindowFeature(Window.FEATURE_NO_TITLE)
setContentView(R.layout.dialog_loading)
setCancelable(false)
window?.setBackgroundDrawable(ContextCompat.getDrawable(activity, R.drawable.bg_loadingads))
}
}
val imageView = loadingDialog?.findViewById<ImageView>(R.id.loading_image)
val countdownTextView = loadingDialog?.findViewById<TextView>(R.id.countdown_text)
imageView?.let { startRotateAnimation(it) } // 开始旋转动画
// 控制倒计时文本是否显示
countdownTextView?.visibility = View.VISIBLE
loadingDialog?.show()
startCountdownAndShowAd(callBack = callBack)
}
private fun startRotateAnimation(imageView: ImageView) {
ObjectAnimator.ofFloat(imageView, "rotation", 0f, 360f).apply {
duration = 3000 // 持续 3 秒
repeatCount = ObjectAnimator.INFINITE // 无限循环
start()
}
}
private var countdown = 3 // 初始倒计时
private var countdownHandler: Handler? = null
private var loadingDialog: Dialog? = null
private fun startCountdownAndShowAd(callBack: (() -> Unit)?) {
countdown = 3
updateCountdownText(count = countdown) // 显示倒计时文本
countdownHandler?.removeCallbacksAndMessages(null)
countdownHandler = Handler(Looper.getMainLooper())
countdownHandler?.post(object : Runnable {
override fun run() {
if (countdown <= 0) {
loadingDialog?.dismiss()
Splash2Activity.progressCallBack = null
callBack?.invoke()
} else {
Splash2Activity.progressCallBack?.invoke()
updateCountdownText(countdown) // 更新倒计时文本
countdown--
LogEx.logDebug(TAG, "startCountdownAndShowAd countdown=$countdown")
countdownHandler?.postDelayed(this, 1000)
}
}
})
}
// 更新倒计时文本并控制是否显示括号和数字
private fun updateCountdownText(count: Int) {
val countdownTextView = loadingDialog?.findViewById<TextView>(R.id.countdown_text)
// LogEx.logDebug(AdmobOpenUtils.TAG, "updateCountdownText $count countdownTextView=$countdownTextView")
countdownTextView?.text = "Ads are about to be shown($count)"
countdownTextView?.visibility = View.VISIBLE
}
} }
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#4772FF" />
<corners android:radius="10dp" />
</shape>
\ No newline at end of file
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginHorizontal="33dp" android:layout_marginHorizontal="33dp"
android:layout_marginTop="300dp" android:layout_marginTop="350dp"
android:background="@drawable/bg_fbfbfb_20" android:background="@drawable/bg_fbfbfb_20"
android:orientation="vertical" android:orientation="vertical"
android:padding="18dp"> android:padding="18dp">
...@@ -46,14 +46,13 @@ ...@@ -46,14 +46,13 @@
<ScrollView <ScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="150dp"
android:layout_marginTop="12dp"> android:layout_marginTop="12dp">
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center" android:gravity="center"
android:maxHeight="150dp"
android:text="@string/consent" android:text="@string/consent"
android:textColor="#A8A8A8" android:textColor="#A8A8A8"
android:textSize="13sp" /> android:textSize="13sp" />
...@@ -154,7 +153,7 @@ ...@@ -154,7 +153,7 @@
android:layout_height="48dp" android:layout_height="48dp"
android:layout_marginHorizontal="40dp" android:layout_marginHorizontal="40dp"
android:layout_marginBottom="49dp" android:layout_marginBottom="49dp"
android:background="#577CFB" android:background="@drawable/bg_4772ff_10"
android:gravity="center" android:gravity="center"
android:text="START TO USE" android:text="START TO USE"
android:textColor="@color/white" android:textColor="@color/white"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment