Commit 9d8a858b authored by guest's avatar guest

修改新需求

parent 905d3ff3
......@@ -32,11 +32,11 @@
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/logo"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:requestRawExternalStorageAccess="true"
android:roundIcon="@mipmap/logo"
android:supportsRtl="true"
android:theme="@style/Theme.DataRecovery"
android:requestRawExternalStorageAccess="true"
android:requestLegacyExternalStorage="true"
tools:targetApi="34">
<activity
......@@ -111,7 +111,13 @@
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".activity.guide.GuideActivity"
android:name=".activity.guide.FirstSelectActivity"
android:exported="true"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".activity.guide.FirstGuestActivity"
android:exported="true"
android:launchMode="singleTop"
android:screenOrientation="portrait"
......@@ -216,14 +222,13 @@
<activity
android:name=".activity.junkclean.ScanJunk2Activity"
android:screenOrientation="portrait" />
<activity android:name=".activity.newfunction.WeatherInterface"
android:screenOrientation="portrait"/>
<activity android:name=".activity.newfunction.WebBrowserActivity"
android:screenOrientation="portrait"/>
<activity android:name=".activity.newfunction.XingzuoLoadingActivity"
android:screenOrientation="portrait"/>
<activity android:name=".activity.repeat.SimilarPicAt"
android:screenOrientation="portrait"/>
<activity
android:name=".activity.newfunction.WeatherInterface"
android:screenOrientation="portrait" />
<activity
android:name=".activity.repeat.SimilarPicAt"
android:screenOrientation="portrait" />
<meta-data
android:name="com.google.android.gms.ads.flag.OPTIMIZE_INITIALIZATION"
android:value="true" />
......@@ -281,8 +286,8 @@
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.intent.action.TIMEZONE_CHANGED"/>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
<action android:name="android.intent.action.TIMEZONE_CHANGED" />
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
......@@ -304,14 +309,17 @@
<data android:scheme="file" />
</intent-filter>
</receiver>
<receiver android:name=".fcm.work.AlterReceiver"
<receiver
android:name=".fcm.work.AlterReceiver"
android:enabled="true"
android:exported="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED"/>
<receiver android:name=".fcm.work.AlterReceiver2"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver
android:name=".fcm.work.AlterReceiver2"
android:enabled="true"
android:exported="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED"/>
android:permission="android.permission.RECEIVE_BOOT_COMPLETED" />
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-3940256099942544~3347511713" />
......
package com.base.datarecovery
import com.base.datarecovery.utils.AppPreferences
object GlobalConfig {
// 包名
const val PACKAGE_NAME = "com.cleaner.recovery.tencgog"
// 域名
/**
* Url Event 上报接口
*/
const val URL_EVENT = "https://rp.rocioxynv2.online"
/**
* Url Api 业务接口
*/
const val URL_API = "https://api.rocioxynv2.online"
/**
* Url Privacy 隐私链接
*/
const val URL_PRIVACY = "https://sites.google.com/view/recpri/rec"
/**
* Url Use 使用条款
*/
const val URL_USE = ""
/**
* Key Aes 加密key
*/
const val KEY_AES = "5s1q2jusawhorcz0"
/**
* Key solar 归因key
*/
const val KEY_SOLAR = ""
inline val ID_ADMOB_APPLICATION get() = "ca-app-pub-3940256099942544~3347511713"
// admob广告位id
inline val ID_ADMOB_OPEN get() = "/6499/example/app-open"
inline val ID_ADMOB_INTER get() = "ca-app-pub-3940256099942544/1033173712"
inline val ID_ADMOB_NATIVE get() = "ca-app-pub-3940256099942544/2247696110"
inline val ID_ADMOB_BANNER get() = "ca-app-pub-3940256099942544/9214589741"
inline val ID_ADMOB_REWARD get() = ""
// max广告位id
inline val ID_MAX_OPEN get() = "d1d943cdd3127c90"
inline val ID_MAX_INTER get() = "b31e7f6d11ee659e"
inline val ID_MAX_NATIVE get() = "96e8fe78b0efc5d1"
inline val ID_MAX_BANNER get() = "ca-app-pub-3940256099942544/9214589741"
inline val ID_MAX_REWARD get() = ""
/**
* Key MAX MAX广告初始化key
*/
const val KEY_MAX =
"GGPreND6SRmCt1zJgn5faiLGD8c2PVGPLgPpSg7cHanVTud1DhtuI9MmteTqlEviaJ57WnxW68kQDaATJ5z3cW"
//
const val KEY_INIT = "key_init"
const val KEY_AD = "sAds"
const val KEY_BLACKLIST = "blacklist"
const val KEY_CLEANUP_SIZE = "key_cleanup_size"
const val KEY_SCORE = "key_score"
const val KEY_APP_BACKGROUND = "key_app_background"
const val KEY_NOTIFICATION_ID = "key_notification_id"
const val KEY_HOME_COUNT = "key_home_count"
const val KEY_INSTALL_TIME = "key_install_time"
const val KEY_CLEAN_LAST_TIME = "key_clean_last_time"
const val KEY_NOT_CLEAN_TIME = "key_not_clean_time"
const val KEY_UUID = "key_uuid"
const val KEY_GOOGLE_ADVERTISER_ID = "key_google_advertiser_id"
const val KEY_DEVICE_NAME = "key_device_name"
const val KEY_IS_FIRST = "is_first"
const val KEY_REFERRER = "referrer"
const val KEY_TOKEN = "token"
const val KEY_TOKEN_SUCCESS = "token_success"
const val KEY_PUSH_REPORT_SWITCH = "push_report_switch"
const val ID_CLEAN_JUNK = 12000
const val ID_BATTERY_INFO = 12020
const val ID_LARGE_FILE_CLEANER = 12030
const val ID_PHOTO_COMPRESSION = 12040
const val ID_SCREENSHOT_CLEAN = 12050
const val ID_APP_INSTALL = 12060
const val ID_APP_UNINSTALL = 12070
const val ID_NOT_CLEANED = 12080
const val ID_BATTERY_LEVEL = 12090
const val ID_HOME = 12100
const val DEFAULT_SWITCH = "1"
inline var isInit
get() = AppPreferences.getInstance().getBoolean(KEY_INIT,false)
set(value) = AppPreferences.getInstance().put(KEY_INIT, value)
inline var isFirst
get() = AppPreferences.getInstance().getBoolean(KEY_IS_FIRST, true)
set(value) = AppPreferences.getInstance().put(KEY_IS_FIRST, value)
inline var useBlacklist
get() = AppPreferences.getInstance().getBoolean(KEY_BLACKLIST,false)
set(value) = AppPreferences.getInstance().put(KEY_BLACKLIST, value)
inline var useAdmob
get() = AppPreferences.getInstance().getString(KEY_AD, "1").toInt()
set(value) = AppPreferences.getInstance().put(KEY_AD, value)
const val KEY_GET_CONFIG = "getConfigInterval"
}
\ No newline at end of file
......@@ -15,7 +15,6 @@ import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkManager
import com.base.datarecovery.activity.newfunction.WeatherUtils
import com.base.datarecovery.activity.splash.Splash2Activity
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.bean.ConstObject.ifAgreePrivacy
import com.base.datarecovery.fcm.FCMManager
import com.base.datarecovery.fcm.ScreenStatusReceiver
......@@ -55,6 +54,9 @@ class MyApplication : BaseApplication() {
@JvmField
var PAUSED_VALUE = 0
fun initApp() {
(context as MyApplication).initApp()
}
}
override fun init() {
......@@ -82,7 +84,7 @@ class MyApplication : BaseApplication() {
FacebookSdk.sdkInitialize(applicationContext)
// FacebookSdk.setIsDebugEnabled(true)
// FacebookSdk.addLoggingBehavior(LoggingBehavior.APP_EVENTS)
val topic = ConfigHelper.packageName + "_push"
val topic = GlobalConfig.PACKAGE_NAME + "_push"
FCMManager.initFirebase(this)
FCMManager.subscribeToTopic(topic)
LogEx.logDebug(TAG, "topic=${topic}")
......@@ -141,65 +143,43 @@ class MyApplication : BaseApplication() {
private fun initLifeListener() {
registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
private var count = 0
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
ActivityManagerUtils.addActivity(activity)
}
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}
override fun onActivityStarted(activity: Activity) {
// LogEx.logDebug(TAG, "onActivityStarted")
count++
lastTimeResume = System.currentTimeMillis()
if (count == 1 && isHotLaunch()) {
val topActivity: Activity? = ActivityManagerUtils.topActivity
var flag = if (topActivity == null) {
val flag = if (topActivity == null) {
true
} else {
ConfigHelper.noLoadingActivities.all {
!topActivity.localClassName.contains(it, true)
!topActivity.localClassName.contains(
it,
true
)
}
}
if (activity.localClassName.contains("AppLovinFullscreenActivity")) {
flag = false
}
LogEx.logDebug(TAG, "flag=$flag" + " activity:" + activity.localClassName)
if (flag && !isInterOpenShowing) {
if (AdmobMaxHelper.isOpenAdLoaded()) {
topActivity?.startActivity(
Intent(
topActivity,
Splash2Activity::class.java
).apply {
putExtra("isHotLaunch", true)
putExtra("type", -1)
})
} else {
topActivity?.startActivity(
Intent(
topActivity,
Splash2Activity::class.java
).apply {
putExtra("isHotLaunch", true)
putExtra("type", -1)
})
}
if (flag) {
topActivity?.startActivity(
Intent(
topActivity,
Splash2Activity::class.java
).apply {
putExtra("isHotLaunch", true)
putExtra("type", -1)
})
}
}
lastTimeResume = 0
}
override fun onActivityResumed(activity: Activity) {
// LogEx.logDebug(TAG, "onActivityResumed")
PAUSED_VALUE = 1
}
override fun onActivityPaused(activity: Activity) {
// LogEx.logDebug(TAG, "onActivityPaused")
PAUSED_VALUE = 2
lastTimePause = System.currentTimeMillis()
......@@ -207,13 +187,12 @@ class MyApplication : BaseApplication() {
override fun onActivityStopped(activity: Activity) {
count--
}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
override fun onActivityDestroyed(activity: Activity) {
ActivityManagerUtils.removeActivity(activity)
}
override fun onActivityDestroyed(activity: Activity) {}
})
}
......
......@@ -7,7 +7,6 @@ import android.graphics.Color
import android.graphics.Typeface
import android.os.Build
import android.provider.Settings
import android.view.View
import androidx.activity.addCallback
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.view.updatePadding
......@@ -15,7 +14,7 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.base.datarecovery.ads.admob.AdmobBannerUtils
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.databinding.ActivityMainBinding
import com.base.datarecovery.fragment.HomeFragment
import com.base.datarecovery.fragment.RecoveryFragment
......@@ -63,16 +62,12 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
AdmobManager.showBannerAd(this,binding.flBanner)
if (!checkStorePermission()) {
if (dialog == null) {
dialog = showPermissionBottomSheet(launcher) {
binding.flBanner.visibility = View.VISIBLE
AdmobBannerUtils.showCollapsibleBannerAd(this, binding.flBanner)
}
}
} else {
binding.flBanner.visibility = View.VISIBLE
AdmobBannerUtils.showCollapsibleBannerAd(this, binding.flBanner)
}
binding.viewpager2.run {
adapter = object : FragmentStateAdapter(this@MainActivity) {
......
......@@ -3,7 +3,7 @@ package com.base.datarecovery.activity
import android.annotation.SuppressLint
import android.content.Intent
import android.graphics.Color
import androidx.activity.OnBackPressedCallback
import androidx.activity.addCallback
import androidx.core.view.updatePadding
import com.base.datarecovery.activity.battery.BatteryInfoAnimationActivity
import com.base.datarecovery.activity.junkclean.ScanJunkActivity
......@@ -15,7 +15,7 @@ import com.base.datarecovery.activity.repeat.RepeatAnimationActivity
import com.base.datarecovery.activity.screenshot.ScreenShotAnimationActivity
import com.base.datarecovery.activity.videomanager.VideoCleanAnimationActivity
import com.base.datarecovery.adapter.AppFunctionAdapter
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.bean.ConstObject.BATTERY_INFO
import com.base.datarecovery.bean.ConstObject.JUNK_CLEANER
import com.base.datarecovery.bean.ConstObject.LARGE_FILE
......@@ -150,25 +150,17 @@ class ResultActivity : BaseActivity<ActivityLayoutResultBinding>() {
adapter.removeItem(it)
}
onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
val s = AppPreferences.getInstance().getString("isShowBackIntAd", "0").toIntOrNull()
?: 0
if (s == 1) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@ResultActivity,false) {
finishToMain()
}
} else {
finishToMain()
}
}
})
binding.ivBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
AdmobMaxHelper.admobMaxShowNativeAd(this@ResultActivity, binding.flAd)
onBackPressedDispatcher.addCallback {
admobMaxShowInterstitialAd(isShow = AdmobManager.isShowAdResultBackInter()) {
finishToMain()
}
}
AdmobManager.showNativeAd(this@ResultActivity, binding.flAd)
}
override fun onDestroy() {
......
......@@ -7,13 +7,13 @@ import android.content.Intent
import android.graphics.Color
import android.net.Uri
import androidx.activity.addCallback
import com.base.datarecovery.GlobalConfig
import com.base.datarecovery.bean.ConstObject.fcmNotification
import com.base.datarecovery.bean.ConstObject.stayNotification
import com.base.datarecovery.databinding.ActivitySettingBinding
import com.base.datarecovery.fcm.FCMManager.subscribeToTopic
import com.base.datarecovery.fcm.FCMManager.unsubscribeFromTopic
import com.base.datarecovery.help.BaseActivity
import com.base.datarecovery.help.ConfigHelper
import com.base.datarecovery.service.StayJobService
import com.base.datarecovery.service.StayJobService.Companion.startJob
import com.base.datarecovery.utils.BarUtils
......@@ -54,7 +54,7 @@ class SettingActivity : BaseActivity<ActivitySettingBinding>() {
}
binding.switchFcmNotification.setOnCheckedChangeListener { buttonView, isChecked ->
fcmNotification = isChecked
val topic = "${ConfigHelper.packageName}_push"
val topic = "${GlobalConfig.PACKAGE_NAME}_push"
if (isChecked) {
subscribeToTopic(topic)
} else {
......@@ -65,7 +65,7 @@ class SettingActivity : BaseActivity<ActivitySettingBinding>() {
binding.llPrivacy.setOnClickListener {
val intent = Intent(
Intent.ACTION_VIEW,
Uri.parse(ConfigHelper.privacyPolicy)
Uri.parse(GlobalConfig.URL_PRIVACY)
)
startActivity(intent)
// NotificationUtil.sendNotification(this, actionId = ID_WEATHER,"weather")
......
......@@ -8,7 +8,7 @@ import android.os.BatteryManager
import androidx.activity.addCallback
import androidx.core.view.updatePadding
import com.base.datarecovery.activity.ResultActivity
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.bean.ConstObject.BATTERY_INFO
import com.base.datarecovery.databinding.ActivityBatteryBinding
import com.base.datarecovery.help.BaseActivity
......@@ -57,18 +57,14 @@ class BatteryActivity : BaseActivity<ActivityBatteryBinding>() {
// }
// }
AdmobMaxHelper.admobMaxShowNativeAd(this, binding.flAd, 2)
AdmobManager.showNativeAd(this, binding.flAd)
}
override fun initListener() {
super.initListener()
onBackPressedDispatcher.addCallback {
showExitFunctionDialog { showAd ->
if (showAd) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@BatteryActivity) {
finishToMain()
}
} else {
showExitFunctionDialog {
admobMaxShowInterstitialAd(isShow = AdmobManager.isShowAdBackInter()) {
finishToMain()
}
}
......@@ -77,10 +73,12 @@ class BatteryActivity : BaseActivity<ActivityBatteryBinding>() {
onBackPressedDispatcher.onBackPressed()
}
binding.tvFinish.setOnClickListener {
startActivity(Intent(this, ResultActivity::class.java).apply {
putExtra("from", BATTERY_INFO)
})
finish()
admobMaxShowInterstitialAd(true) {
startActivity(Intent(this, ResultActivity::class.java).apply {
putExtra("from", BATTERY_INFO)
})
finish()
}
}
}
......@@ -99,7 +97,8 @@ class BatteryActivity : BaseActivity<ActivityBatteryBinding>() {
val currentNow = mBatteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_NOW)
binding.tvElectric.text = "${getFirstThreeDigits(currentNow * 100)} mA"
val currentAverage: Int = mBatteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE)
val currentAverage: Int =
mBatteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE)
binding.tvCurrentAverage.text = "${getFirstThreeDigits(currentAverage * 100)} mA"
val hm = (capacity.toFloat() / getFirstThreeDigits(currentNow * 100).toFloat())
......
......@@ -6,7 +6,7 @@ import android.view.View
import android.widget.Toast
import androidx.activity.addCallback
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.databinding.ActivityBatteryInfoAnimationBinding
import com.base.datarecovery.help.BaseActivity
import kotlinx.coroutines.Dispatchers
......@@ -24,7 +24,7 @@ class BatteryInfoAnimationActivity : BaseActivity<ActivityBatteryInfoAnimationBi
override fun initView() {
resumeLottie()
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative,1)
AdmobManager.showNativeAd(this,binding.idFlNative, isShowAdNative = AdmobManager.isShowAdNativeBottom())
}
override fun initListener() {
......@@ -64,7 +64,7 @@ class BatteryInfoAnimationActivity : BaseActivity<ActivityBatteryInfoAnimationBi
binding.lottieCompleted.playAnimation()
binding.tv.text = "Completed!"
delay(1000)
AdmobMaxHelper.admobMaxShowInterstitialAd(this@BatteryInfoAnimationActivity) {
admobMaxShowInterstitialAd {
binding.lottie.clearAnimation()
startActivity(Intent(this@BatteryInfoAnimationActivity, BatteryActivity::class.java))
finish()
......
package com.base.datarecovery.activity.guide
import com.base.datarecovery.R
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.databinding.FragmentFullScreenBinding
import com.base.datarecovery.help.BaseFragment
class AdFragment : BaseFragment<FragmentFullScreenBinding>() {
override val binding: FragmentFullScreenBinding by lazy {
FragmentFullScreenBinding.inflate(layoutInflater)
}
var page: Int = 2
override fun setView() {
binding.idClose.setOnClickListener {
(requireActivity() as FirstGuestActivity).setPosition(3)
}
AdmobManager.showNativeAd(requireActivity(), binding.idFlNative, layout = R.layout.native_layout_full)
}
}
\ No newline at end of file
package com.base.datarecovery.activity.guide
import android.graphics.Color
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.base.datarecovery.R
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.databinding.ActivityGuideBinding
import com.base.datarecovery.fragment.GuideFragment
import com.base.datarecovery.help.BaseActivity
import com.base.datarecovery.utils.BarUtils
import com.zhpan.indicator.enums.IndicatorSlideMode
import com.zhpan.indicator.enums.IndicatorStyle
class GuideActivity : BaseActivity<ActivityGuideBinding>() {
private val page1: GuideFragment by lazy {
GuideFragment().apply { page = 1 }
class FirstGuestActivity : BaseActivity<ActivityGuideBinding>() {
override val binding: ActivityGuideBinding by lazy {
ActivityGuideBinding.inflate(layoutInflater)
}
private val page2: GuideFragment by lazy {
GuideFragment().apply { page = 2 }
private val page1: GuestFragment by lazy {
GuestFragment().apply { page = 0 }
}
private val fragments by lazy {
mutableListOf(page1, page2)
private val page2: GuestFragment by lazy {
GuestFragment().apply { page = 1 }
}
override val binding: ActivityGuideBinding by lazy {
ActivityGuideBinding.inflate(layoutInflater)
private val adPage: AdFragment by lazy {
AdFragment().apply { page = 2 }
}
fun setPosition(position: Int) {
binding.viewpager2.currentItem = position
private val page3: GuestFragment by lazy {
GuestFragment().apply { page = 3 }
}
private val page4: GuestFragment by lazy {
GuestFragment().apply { page = 4 }
}
private val fragments by lazy {
mutableListOf(page1, page2, adPage, page3, page4)
}
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative,1)
binding.viewpager2.run {
adapter = object : FragmentStateAdapter(this@GuideActivity) {
if (!AdmobManager.checkNative()) {
fragments.removeAt(2)
}
binding.idViewPager.run {
adapter = object : FragmentStateAdapter(this@FirstGuestActivity) {
override fun getItemCount(): Int {
return fragments.size
}
......@@ -51,21 +50,15 @@ class GuideActivity : BaseActivity<ActivityGuideBinding>() {
}
}
}
binding.viewpager2.registerOnPageChangeCallback(object :
binding.idViewPager.registerOnPageChangeCallback(object :
ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
}
})
val normalColor = ContextCompat.getColor(this, R.color.color_cccccc)
val selectedColor = ContextCompat.getColor(this, R.color.color_4f86eb)
binding.indicatorView
.setSliderColor(normalColor, selectedColor)
.setSliderWidth(resources.getDimension(R.dimen.dp_9))
.setSliderHeight(resources.getDimension(R.dimen.dp_9))
.setSlideMode(IndicatorSlideMode.WORM)
.setIndicatorStyle(IndicatorStyle.CIRCLE)
.setupWithViewPager(binding.viewpager2)
}
fun setPosition(position: Int) {
binding.idViewPager.currentItem = position
}
}
\ No newline at end of file
package com.base.datarecovery.activity.guide
import android.content.Intent
import android.graphics.Color
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.core.view.updatePadding
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.base.datarecovery.R
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.bean.SelectBean
import com.base.datarecovery.databinding.ActivityLayoutFirstSelectBinding
import com.base.datarecovery.help.BaseActivity
import com.base.datarecovery.utils.BarUtils
import com.base.datarecovery.view.DialogViews.showFeature
class FirstSelectActivity : BaseActivity<ActivityLayoutFirstSelectBinding>() {
override val binding: ActivityLayoutFirstSelectBinding by lazy {
ActivityLayoutFirstSelectBinding.inflate(layoutInflater)
}
private val mList by lazy {
mutableListOf(
SelectBean(R.mipmap.icon_image, "Photo"),
SelectBean(R.mipmap.icon_video, "Video"),
SelectBean(R.mipmap.icon_voice, "Audio"),
SelectBean(R.mipmap.icon_document, "Document")
)
}
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
binding.idRl.run {
layoutManager = LinearLayoutManager(this@FirstSelectActivity)
adapter = mAdapter
}
AdmobManager.showNativeAd(this, binding.idFlAd)
}
override fun initListener() {
binding.idContinue.setOnClickListener {
val s = mList.filter { it.isSelect }
if (s.isNotEmpty()) {
startActivity(Intent(this, FirstGuestActivity::class.java))
finish()
} else {
showFeature()
}
}
}
var isshow = 0
private val mAdapter by lazy {
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val ivImage: ImageView
val tvName: TextView
val ivSelect: ImageView
init {
ivImage = view.findViewById(R.id.id_icon)
tvName = view.findViewById(R.id.id_tv_name)
ivSelect = view.findViewById(R.id.id_img_select)
}
}
object : RecyclerView.Adapter<ViewHolder>() {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): ViewHolder {
val view = LayoutInflater.from(this@FirstSelectActivity)
.inflate(R.layout.item_layout_select_type, parent, false)
return ViewHolder(view)
}
override fun getItemCount() = mList.size
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = mList[position]
holder.ivImage.setImageResource(item.imageRes)
holder.tvName.text = item.name
holder.itemView.setOnClickListener {
item.isSelect = !item.isSelect
holder.itemView.isSelected = item.isSelect
holder.ivSelect.isSelected = item.isSelect
isshow++
if (isshow < 2) {
AdmobManager.showNativeAd(this@FirstSelectActivity, binding.idFlAd)
}
}
}
}
}
}
\ No newline at end of file
package com.base.datarecovery.activity.guide
import android.annotation.SuppressLint
import android.content.Intent
import android.view.View
import androidx.core.view.isVisible
import com.base.datarecovery.R
import com.base.datarecovery.activity.MainActivity
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.bean.ConstObject
import com.base.datarecovery.databinding.FragmentGuestBinding
import com.base.datarecovery.help.BaseFragment
class GuestFragment : BaseFragment<FragmentGuestBinding>() {
var page: Int = 0
override val binding: FragmentGuestBinding by lazy {
FragmentGuestBinding.inflate(layoutInflater)
}
@SuppressLint("SetTextI18n")
override fun setView() {
if (page == 0) {
binding.idFlNative.visibility = View.VISIBLE
AdmobManager.showNativeAd(
requireActivity(),
binding.idFlNative
)
} else {
binding.idFlNative.visibility = View.INVISIBLE
}
binding.root.postDelayed({
binding.idTvSkip.isVisible = true
}, 2000)
when (page) {
0 -> {
binding.idImg01.setImageResource(R.mipmap.jindu1)
binding.idImg02.setImageResource(R.mipmap.yuan1)
binding.idImg03.setImageResource(R.mipmap.yuan1)
binding.idImg04.setImageResource(R.mipmap.yuan1)
binding.iv.setImageResource(R.mipmap.yindao1)
binding.idTrip1.text = "Bring Your Memories Back"
binding.idTrip2.text = "Recover Deleted Photos and Videos"
}
1 -> {
binding.iv.setImageResource(R.mipmap.yindao2)
binding.idTrip1.text = "Fast Recovery, No Stress"
binding.idTrip2.text = "Quickly scan and restore your files with afew taps"
binding.idImg01.setImageResource(R.mipmap.yuan1)
binding.idImg02.setImageResource(R.mipmap.jindu1)
binding.idImg03.setImageResource(R.mipmap.yuan1)
binding.idImg04.setImageResource(R.mipmap.yuan1)
}
2 -> {
binding.iv.setImageResource(R.mipmap.yindao3)
binding.idTrip1.text = "Everything You Need,Recovered"
binding.idTrip2.text =
"Search, preview, and recover various other files-all in one place"
binding.idImg01.setImageResource(R.mipmap.yuan1)
binding.idImg02.setImageResource(R.mipmap.yuan1)
binding.idImg03.setImageResource(R.mipmap.jindu1)
binding.idImg04.setImageResource(R.mipmap.yuan1)
}
3 -> {
binding.iv.setImageResource(R.mipmap.yindao3)
binding.idTrip1.text = "Everything You Need,Recovered"
binding.idTrip2.text =
"Search, preview, and recover various other files-all in one place"
binding.idImg01.setImageResource(R.mipmap.yuan1)
binding.idImg02.setImageResource(R.mipmap.yuan1)
binding.idImg03.setImageResource(R.mipmap.jindu1)
binding.idImg04.setImageResource(R.mipmap.yuan1)
}
4 -> {
binding.iv.setImageResource(R.mipmap.yindao4)
binding.idTrip1.text = "All-in-One Solution"
binding.idTrip2.text = "Recover, manage, and organize your files—all in one intuitive interface."
binding.idImg01.setImageResource(R.mipmap.yuan1)
binding.idImg02.setImageResource(R.mipmap.yuan1)
binding.idImg03.setImageResource(R.mipmap.yuan1)
binding.idImg04.setImageResource(R.mipmap.jindu1)
}
}
binding.idTvNext.setOnClickListener {
if (page == 0) {
(requireActivity() as FirstGuestActivity).setPosition(1)
} else if (page == 1) {
(requireActivity() as FirstGuestActivity).setPosition(2)
} else if (page == 2) {
(requireActivity() as FirstGuestActivity).setPosition(3)
} else if (page == 3) {
(requireActivity() as FirstGuestActivity).setPosition(4)
} else {
jumpNext()
}
}
binding.idTvSkip.setOnClickListener {
jumpNext()
}
}
private fun jumpNext() {
ConstObject.isGuide = true
(requireActivity() as FirstGuestActivity).admobMaxShowInterstitialAd {
startActivity(Intent(requireContext(), MainActivity::class.java))
}
// val showAd = SPUtils.getInstance().getString("isShowGuideAd", "0")?.toInt()
// if (showAd == 1) {
//
// } else {
// if (!ConfigHelper.ifGuest) {
// startActivity(Intent(requireContext(), DeviceScanActivity::class.java))
// requireActivity().finish()
// }else{
// startActivity(Intent(requireContext(), MainActivity::class.java))
// }
// }
}
}
\ No newline at end of file
......@@ -5,14 +5,14 @@ import android.content.Intent
import android.graphics.Color
import android.os.Environment
import android.view.View
import androidx.activity.OnBackPressedCallback
import androidx.activity.addCallback
import androidx.core.view.isVisible
import androidx.core.view.updatePadding
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.R
import com.base.datarecovery.activity.ResultActivity
import com.base.datarecovery.activity.photomanager.PhotoManagerAnimationActivity
import com.base.datarecovery.adapter.JunkExpandAdapter
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.bean.ChildBean
import com.base.datarecovery.bean.ConstObject.JUNK_CLEANER
import com.base.datarecovery.databinding.ActivityLayoutCleanJunkBinding
......@@ -20,7 +20,6 @@ import com.base.datarecovery.help.BaseActivity
import com.base.datarecovery.help.KotlinExt.toFormatSize
import com.base.datarecovery.help.PermissionHelp.checkStorePermission
import com.base.datarecovery.help.PermissionHelp.requestStorePermission
import com.base.datarecovery.utils.AppPreferences
import com.base.datarecovery.utils.BarUtils
import com.base.datarecovery.utils.MediaStoreUtils
import com.base.datarecovery.view.DialogViews.showExitFunctionDialog
......@@ -48,11 +47,11 @@ class CleanJunkActivity : BaseActivity<ActivityLayoutCleanJunkBinding>() {
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
// binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
binding.llTop.updatePadding(top = BarUtils.getStatusBarHeight())
AdmobManager.showNativeAd(this, binding.idFlNative)
junkExpandAdapter = JunkExpandAdapter { size ->
if (size == 0L) {
binding.tvBtn.text = "Got it"
binding.tvBtn.text = "Go it"
binding.tvSize.text = "0"
binding.tvUnit.text = "B"
} else {
......@@ -65,7 +64,6 @@ class CleanJunkActivity : BaseActivity<ActivityLayoutCleanJunkBinding>() {
if (junkExpandAdapter.getAllChildItemCount() == 0) {
binding.tvBtn.visibility = View.VISIBLE
binding.tvBtn.isEnabled = true
binding.llTwoBtn.visibility = View.GONE
} else {
binding.tvBtn.isVisible = true
binding.tvBtn.isEnabled = true
......@@ -92,62 +90,37 @@ class CleanJunkActivity : BaseActivity<ActivityLayoutCleanJunkBinding>() {
binding.flFanhui.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
showExitFunctionDialog {
if (it) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@CleanJunkActivity, false) {
finishToMain()
}
} else {
finishToMain()
}
onBackPressedDispatcher.addCallback {
showExitFunctionDialog {
admobMaxShowInterstitialAd(isShow = AdmobManager.isShowAdBackInter()) {
finishToMain()
}
}
}
})
binding.tvBtn.setOnClickListener {
when (binding.tvBtn.text) {
"Got it" -> {
val showJunkBtnAd = AppPreferences.getInstance().getString("isGotItplayAd", "0").toInt()
if (showJunkBtnAd == 1) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this) {
startActivity(Intent(this@CleanJunkActivity, ResultActivity::class.java).apply {
"Go it" -> {
admobMaxShowInterstitialAd(true) {
startActivity(
Intent(
this@CleanJunkActivity,
ResultActivity::class.java
).apply {
putExtra("clean_size", JUNK_CLEANER)
putExtra("from", 0)
})
finish()
}
} else {
startActivity(Intent(this@CleanJunkActivity, ResultActivity::class.java).apply {
putExtra("clean_size", JUNK_CLEANER)
putExtra("from", 0)
})
finish()
}
}
else -> {
val showJunkBtnAd = AppPreferences.getInstance().getString("isGotItplayAd", "0").toInt()
if (showJunkBtnAd == 1) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this) {
startActivity(
Intent(this, CleaningActivity::class.java).apply {
val list = junkExpandAdapter.getChoosePath()
putExtra("type",JUNK_CLEANER)
putExtra("list", list.map { it.chilepath }.toTypedArray())
putExtra("size", list.sumOf { it.childSize })
}
)
finish()
}
} else {
admobMaxShowInterstitialAd(true) {
startActivity(
Intent(this, CleaningActivity::class.java).apply {
val list = junkExpandAdapter.getChoosePath()
putExtra("type",JUNK_CLEANER)
putExtra("type", JUNK_CLEANER)
putExtra("list", list.map { it.chilepath }.toTypedArray())
putExtra("size", list.sumOf { it.childSize })
}
......@@ -159,31 +132,6 @@ class CleanJunkActivity : BaseActivity<ActivityLayoutCleanJunkBinding>() {
}
binding.tvGotIt2.setOnClickListener {
val showJunkBtnAd = AppPreferences.getInstance().getString("isGotItplayAd", "0").toInt()
if (showJunkBtnAd == 1) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this) {
startActivity(Intent(this@CleanJunkActivity, ResultActivity::class.java).apply {
putExtra("clean_size", JUNK_CLEANER)
putExtra("from", 0)
})
finish()
}
} else {
startActivity(Intent(this@CleanJunkActivity, ResultActivity::class.java).apply {
putExtra("clean_size", JUNK_CLEANER)
putExtra("from", 0)
})
finish()
}
}
binding.tvDeepScan.setOnClickListener {
startActivity(Intent(this, PhotoManagerAnimationActivity::class.java).apply {
putExtra("tittle", "Deep Scan")
})
finish()
}
}
......@@ -225,7 +173,9 @@ class CleanJunkActivity : BaseActivity<ActivityLayoutCleanJunkBinding>() {
list.clear()
async {
val apk = MediaStoreUtils.queryFiles(this@CleanJunkActivity, MediaStoreUtils.FileType.APK) ?: listOf()
val apk =
MediaStoreUtils.queryFiles(this@CleanJunkActivity, MediaStoreUtils.FileType.APK)
?: listOf()
apk.forEach { l ->
totalSize += l.size
list.add(ChildBean(R.mipmap.apk, l.name, l.path, l.size))
......@@ -244,7 +194,9 @@ class CleanJunkActivity : BaseActivity<ActivityLayoutCleanJunkBinding>() {
list.clear()
async {
val temp = MediaStoreUtils.queryFiles(this@CleanJunkActivity, MediaStoreUtils.FileType.TMP) ?: listOf()
val temp =
MediaStoreUtils.queryFiles(this@CleanJunkActivity, MediaStoreUtils.FileType.TMP)
?: listOf()
temp.forEach { l ->
totalSize += l.size
list.add(ChildBean(R.mipmap.temp_clean, l.name, l.path, l.size))
......@@ -262,7 +214,9 @@ class CleanJunkActivity : BaseActivity<ActivityLayoutCleanJunkBinding>() {
list.clear()
async {
val log = MediaStoreUtils.queryFiles(this@CleanJunkActivity, MediaStoreUtils.FileType.LOG) ?: listOf()
val log =
MediaStoreUtils.queryFiles(this@CleanJunkActivity, MediaStoreUtils.FileType.LOG)
?: listOf()
log.forEach { l ->
totalSize += l.size
list.add(ChildBean(R.mipmap.log_clean, l.name, l.path, l.size))
......@@ -290,12 +244,14 @@ class CleanJunkActivity : BaseActivity<ActivityLayoutCleanJunkBinding>() {
it.cancel()
}
}
fun findEmptyFolders(): List<File> {
val externalStorageDir = Environment.getExternalStorageDirectory()
val filters = arrayOf("/storage/emulated/0/Android/data", "/storage/emulated/0/Android/obb")
val emptyFolders = getAllEmptyFolders(externalStorageDir, filters)
return emptyFolders
}
private fun getAllEmptyFolders(root: File, filters: Array<String>): List<File> {
return root.walk()
.filter {
......
......@@ -9,7 +9,7 @@ import androidx.activity.addCallback
import androidx.core.animation.doOnEnd
import androidx.core.view.updatePadding
import com.base.datarecovery.activity.ResultActivity
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.databinding.ActivityLayoutCleanupingBinding
import com.base.datarecovery.help.BaseActivity
import com.base.datarecovery.utils.BarUtils
......@@ -41,7 +41,7 @@ class CleaningActivity : BaseActivity<ActivityLayoutCleanupingBinding>() {
override fun initView() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative,1)
AdmobManager.showNativeAd(this,binding.idFlNative, isShowAdNative = AdmobManager.isShowAdNativeBottom())
MainScope().launch(Dispatchers.IO) {
try {
listPath.forEach {
......@@ -81,14 +81,12 @@ class CleaningActivity : BaseActivity<ActivityLayoutCleanupingBinding>() {
binding.idTvJd.text = "${it.animatedValue as Int}"
}
doOnEnd {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@CleaningActivity,false) {
startActivity(
Intent(this@CleaningActivity, ResultActivity::class.java)
.putExtra("from", type)
.putExtra("clean_size", intentSize)
)
finish()
}
startActivity(
Intent(this@CleaningActivity, ResultActivity::class.java)
.putExtra("from", type)
.putExtra("clean_size", intentSize)
)
finish()
}
start()
}
......
......@@ -10,7 +10,7 @@ import android.widget.Toast
import androidx.activity.addCallback
import androidx.core.view.updatePadding
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.databinding.ActivityLayoutScanJunkBinding
import com.base.datarecovery.help.BaseActivity
import com.base.datarecovery.utils.BarUtils
......@@ -32,7 +32,7 @@ class ScanJunk2Activity : BaseActivity<ActivityLayoutScanJunkBinding>() {
LogEx.logDebug(TAG,"ScanJunkActivity initView")
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative,1)
AdmobManager.showNativeAd(this,binding.idFlNative, isShowAdNative = AdmobManager.isShowAdNativeBottom())
}
......@@ -123,7 +123,7 @@ class ScanJunk2Activity : BaseActivity<ActivityLayoutScanJunkBinding>() {
animator2?.cancel()
animator3?.cancel()
delay(1000)
AdmobMaxHelper.admobMaxShowInterstitialAd(this@ScanJunk2Activity) {
admobMaxShowInterstitialAd {
startActivity(Intent(this@ScanJunk2Activity, CleanJunkActivity::class.java))
finish()
}
......
......@@ -10,8 +10,7 @@ import android.widget.Toast
import androidx.activity.addCallback
import androidx.core.view.updatePadding
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.AdmobMaxHelper.admobMaxShowInterstitialAd
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.databinding.ActivityLayoutScanJunkBinding
import com.base.datarecovery.help.BaseActivity
import com.base.datarecovery.help.PermissionHelp.checkStorePermission
......@@ -39,7 +38,7 @@ class ScanJunkActivity : BaseActivity<ActivityLayoutScanJunkBinding>() {
LogEx.logDebug(TAG,"ScanJunkActivity initView")
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative,1)
AdmobManager.showNativeAd(this,binding.idFlNative, isShowAdNative = AdmobManager.isShowAdNativeBottom())
if (!checkStorePermission()) {
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.",
......@@ -145,7 +144,7 @@ class ScanJunkActivity : BaseActivity<ActivityLayoutScanJunkBinding>() {
animator2?.cancel()
animator3?.cancel()
delay(1000)
admobMaxShowInterstitialAd(this@ScanJunkActivity) {
admobMaxShowInterstitialAd {
startActivity(Intent(this@ScanJunkActivity, CleanJunkActivity::class.java))
finish()
}
......
......@@ -7,7 +7,7 @@ import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.activity.junkclean.CleaningActivity
import com.base.datarecovery.adapter.LargeFileAdapter
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.bean.ConstObject
import com.base.datarecovery.bean.ConstObject.SELECT_FILE_ALL
import com.base.datarecovery.bean.ConstObject.SELECT_FILE_AUDIO
......@@ -43,7 +43,7 @@ class LargeFileActivity : BaseActivity<ActivityLargeFileBinding>() {
@SuppressLint("SetTextI18n")
override fun initView() {
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative,1)
AdmobManager.showNativeAd(this,binding.idFlNative)
largeFileAdapter = LargeFileAdapter(itemClick = {}, selectClick = {
if (it.isNotEmpty()) {
binding.tvDelete.isEnabled = true
......@@ -72,12 +72,8 @@ class LargeFileActivity : BaseActivity<ActivityLargeFileBinding>() {
override fun initListener() {
super.initListener()
onBackPressedDispatcher.addCallback {
showExitFunctionDialog { show ->
if (show) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@LargeFileActivity, false) {
finishToMain()
}
} else {
showExitFunctionDialog {
admobMaxShowInterstitialAd(isShow = AdmobManager.isShowAdBackInter()) {
finishToMain()
}
}
......@@ -139,7 +135,8 @@ class LargeFileActivity : BaseActivity<ActivityLargeFileBinding>() {
}
private fun deleteFiles() {
val list = largeFileAdapter.getSelectData()
admobMaxShowInterstitialAd (true){
val list = largeFileAdapter.getSelectData()
// runCatching {
// list.forEach { bean ->
// File(bean.path).delete()
......@@ -153,12 +150,13 @@ class LargeFileActivity : BaseActivity<ActivityLargeFileBinding>() {
// })
// finish()
// }
startActivity(Intent(this, CleaningActivity::class.java).apply {
startActivity(Intent(this, CleaningActivity::class.java).apply {
putExtra("list",list.map { it.path }.toTypedArray())
putExtra("type", ConstObject.LARGE_FILE)
}
)
finish()
)
finish()
}
}
private fun initData() = lifecycleScope.launch(Dispatchers.IO) {
......
......@@ -5,7 +5,7 @@ import android.view.View
import android.widget.Toast
import androidx.activity.addCallback
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.databinding.ActivityLargeFileAnimationBinding
import com.base.datarecovery.help.BaseActivity
import kotlinx.coroutines.Dispatchers
......@@ -22,7 +22,7 @@ class LargeFileAnimationActivity : BaseActivity<ActivityLargeFileAnimationBindin
private var job: Job? = null
override fun initView() {
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative,1)
AdmobManager.showNativeAd(this,binding.idFlNative, isShowAdNative = AdmobManager.isShowAdNativeBottom())
}
override fun initListener() {
......@@ -40,7 +40,7 @@ class LargeFileAnimationActivity : BaseActivity<ActivityLargeFileAnimationBindin
binding.lottieCompleted.playAnimation()
binding.tv.text = "Completed!"
delay(1000)
AdmobMaxHelper.admobMaxShowInterstitialAd(this@LargeFileAnimationActivity) {
admobMaxShowInterstitialAd {
startActivity(Intent(this@LargeFileAnimationActivity, LargeFileActivity::class.java))
finish()
}
......
......@@ -9,12 +9,12 @@ import android.view.ViewGroup
import android.view.animation.LinearInterpolator
import android.widget.ImageView
import android.widget.TextView
import androidx.activity.OnBackPressedCallback
import androidx.activity.addCallback
import androidx.core.view.isVisible
import androidx.core.view.updatePadding
import androidx.recyclerview.widget.RecyclerView
import com.base.datarecovery.R
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.bean.ListBean
import com.base.datarecovery.bean.WeatherBean
import com.base.datarecovery.databinding.ActivityWeatherBinding
......@@ -32,21 +32,20 @@ class WeatherInterface : BaseActivity<ActivityWeatherBinding>() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.idBack.updatePadding(top = BarUtils.getStatusBarHeight())
getData()
AdmobMaxHelper.admobMaxShowNativeAd(this, binding.idFlNative,1)
AdmobMaxHelper.admobMaxShowNativeAd(this, binding.idFlAd,1)
AdmobManager.showNativeAd(this,binding.idFlNative, isShowAdNative = AdmobManager.isShowAdNativeBottom())
}
override fun initListener() {
binding.idBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@WeatherInterface){
onBackPressedDispatcher.addCallback {
admobMaxShowInterstitialAd(isShow = AdmobManager.isShowAdBackInter()) {
finishToMain()
}
}
})
}
private fun getData() {
......@@ -58,8 +57,9 @@ class WeatherInterface : BaseActivity<ActivityWeatherBinding>() {
WeatherUtils.requestWeatherData()
}
binding.root.postDelayed({
AdmobMaxHelper.admobMaxShowInterstitialAd(this@WeatherInterface){
admobMaxShowInterstitialAd{
binding.idFlLoading.isVisible = false
AdmobManager.showNativeAd(this, binding.idFlAd)
}
}, Random.nextLong(2000, 4000))
ValueAnimator.ofFloat(0f, 360f).apply {
......
......@@ -2,8 +2,8 @@ package com.base.datarecovery.activity.newfunction
import android.text.TextUtils
import com.base.datarecovery.BuildConfig
import com.base.datarecovery.GlobalConfig
import com.base.datarecovery.bean.WeatherBean
import com.base.datarecovery.help.ConfigHelper
import com.base.datarecovery.utils.AESHelper
import com.base.datarecovery.utils.AppPreferences
import com.google.gson.Gson
......@@ -67,9 +67,9 @@ object WeatherUtils {
private val url by lazy {
val pkg = ConfigHelper.packageName
val pkg = GlobalConfig.PACKAGE_NAME
val url = StringBuilder(
"${ConfigHelper.apiUrl}/city/${
"${GlobalConfig.URL_API}/city/${
pkg.filter { it.isLowerCase() }.substring(4, 9)
}tq"
)
......
package com.base.datarecovery.activity.newfunction
import android.annotation.SuppressLint
import android.content.Intent
import android.graphics.Bitmap
import android.net.Uri
import android.net.http.SslError
import android.view.View
import android.webkit.CookieManager
import android.webkit.JsResult
import android.webkit.SslErrorHandler
import android.webkit.ValueCallback
import android.webkit.WebChromeClient
import android.webkit.WebResourceError
import android.webkit.WebResourceRequest
import android.webkit.WebResourceResponse
import android.webkit.WebSettings
import android.webkit.WebStorage
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.activity.addCallback
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.databinding.ActivityWebBrowserBinding
import com.base.datarecovery.help.BaseActivity
import com.base.datarecovery.utils.BarUtils
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlin.random.Random
class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() {
override val binding: ActivityWebBrowserBinding by lazy {
ActivityWebBrowserBinding.inflate(layoutInflater)
}
override fun initView() {
BarUtils.setStatusBarLightMode(this,true)
initWebSettings()
binding.webView.loadUrl("https://www.horoscope.com/us/index.aspx")
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.flNative,1)
}
override fun initListener() {
super.initListener()
binding.idBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
binding.refreshLayout.setOnRefreshListener {
lifecycleScope.launch {
binding.refreshLayout.isRefreshing = true
delay(Random.nextLong(1500, 2500))
binding.refreshLayout.isRefreshing = false
}
binding.webView.reload()
}
onBackPressedDispatcher.addCallback {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@WebBrowserActivity) {
finishToMain()
}
}
}
@SuppressLint("JavascriptInterface")
private fun initWebSettings() {
val webSettings = binding.webView.settings
webSettings.allowFileAccess = true// 设置允许访问文件数据
webSettings.setSupportZoom(false)
webSettings.builtInZoomControls = true
webSettings.cacheMode = WebSettings.LOAD_NO_CACHE
webSettings.domStorageEnabled = true
webSettings.databaseEnabled = true
@Suppress("DEPRECATION")
webSettings.allowFileAccessFromFileURLs = true
WebStorage.getInstance().deleteAllData()
// 关键性代码,这里要给webView添加这行代码,才可以点击之后正常播放音频。记录一下。
webSettings.mediaPlaybackRequiresUserGesture = false
//设置WebView属性,能够执行Javascript脚本
webSettings.javaScriptEnabled = true
//设置混合内容模式:对于HTTPS和HTTP混合内容的加载,需要设置WebView以允许混合内容:
webSettings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
//使用CookieManager设置允许跨域Cookie
CookieManager.getInstance().setAcceptThirdPartyCookies(binding.webView, true)
//适应屏幕设置
webSettings.useWideViewPort = true
webSettings.loadWithOverviewMode = true
//网页使用localStorage等Web存储API,需要启用DOM存储
webSettings.domStorageEnabled = true
webSettings.setUseWideViewPort(false)
webSettings.setLoadsImagesAutomatically(true) // 确保自动加载图片
//设置WebChromeClient
binding.webView.webChromeClient = object : WebChromeClient() {
override fun onProgressChanged(view: WebView, newProgress: Int) {
binding.progressBar.progress = newProgress
if (binding.progressBar.progress >= 100) {
binding.progressBar.visibility = View.GONE
}
}
override fun onReceivedTitle(view: WebView?, title: String?) {
super.onReceivedTitle(view, title)
}
override fun onShowFileChooser(
webView: WebView?,
filePathCallback: ValueCallback<Array<Uri?>?>,
fileChooserParams: FileChooserParams?
): Boolean {
return true
}
override fun onJsAlert(
view: WebView?,
url: String?,
message: String?,
result: JsResult?
): Boolean = true
}
binding.webView.webViewClient = object : WebViewClient() {
override fun shouldInterceptRequest(view: WebView?, request: WebResourceRequest?): WebResourceResponse? {
val url = request?.url.toString()
// LogEx.logDebug(TAG, "shouldInterceptRequest url=$url")
if (url.contains("//ads.") || url.contains("https://play.google.com")) {
return WebResourceResponse(null, null, null) // 拦截广告请
}
return super.shouldInterceptRequest(view, request)
}
override fun onLoadResource(view: WebView?, url: String?) {
super.onLoadResource(view, url)
}
override fun shouldOverrideUrlLoading(
view: WebView?,
request: WebResourceRequest?
): Boolean {
if (request != null) {
val uri = request.url
val scheme = uri.scheme
// 检查 URL 是否是 scheme 类型
if (scheme != null && (scheme == "http" || scheme == "https")) {
} else {
val intent = Intent(Intent.ACTION_VIEW, uri)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
if (packageManager != null && intent.resolveActivity(packageManager) != null) {
startActivity(intent)
}
return true // 返回 true,表示 URL 已经被处理
}
return super.shouldOverrideUrlLoading(view, request)
}
return false
}
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
super.onPageStarted(view, url, favicon)
}
override fun onPageFinished(view: WebView?, url: String?) {
val jsCode = "javascript:" +
"var ads = document.querySelectorAll('.ad-container');" + // 替换为广告的CSS选择器
"for (var i = 0; i < ads.length; i++) {" +
" ads[i].parentNode.removeChild(ads[i]);" +
"}"
view?.loadUrl(jsCode)
}
override fun onReceivedSslError(
view: WebView?,
handler: SslErrorHandler?,
error: SslError?
) {
}
override fun onReceivedError(
view: WebView?,
request: WebResourceRequest?,
error: WebResourceError?
) {
super.onReceivedError(view, request, error)
}
}
//设置Cookie
val instance = CookieManager.getInstance()
instance.setAcceptThirdPartyCookies(binding.webView, true)
binding.webView.addJavascriptInterface(this, "android")
binding.webView.swipeRefreshLayout = binding.refreshLayout
}
}
\ No newline at end of file
package com.base.datarecovery.activity.newfunction
import android.content.Context
import android.util.AttributeSet
import android.webkit.WebView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
/**
*Create by SleepDog on 2025-01-21
*/
class WebRefreshView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null
) : WebView(context, attrs) {
var swipeRefreshLayout: SwipeRefreshLayout? = null
override fun onScrollChanged(l: Int, t: Int, oldl: Int, oldt: Int) {
super.onScrollChanged(l, t, oldl, oldt)
swipeRefreshLayout?.isEnabled = scrollY == 0
}
}
\ No newline at end of file
package com.base.datarecovery.activity.newfunction
import android.animation.ValueAnimator
import android.content.Intent
import android.graphics.Color
import android.view.animation.LinearInterpolator
import android.widget.Toast
import androidx.activity.addCallback
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.databinding.ActivityLayoutXingzuoLoadingBinding
import com.base.datarecovery.help.BaseActivity
import com.base.datarecovery.utils.BarUtils
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlin.random.Random
class XingzuoLoadingActivity : BaseActivity<ActivityLayoutXingzuoLoadingBinding>() {
override val binding: ActivityLayoutXingzuoLoadingBinding by lazy {
ActivityLayoutXingzuoLoadingBinding.inflate(layoutInflater)
}
override fun initView() {
BarUtils.setStatusBarLightMode(this,false)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative,1)
ValueAnimator.ofFloat(0f, 360f).apply {
duration = 1100
repeatMode = ValueAnimator.RESTART
repeatCount = ValueAnimator.INFINITE
interpolator = LinearInterpolator()
addUpdateListener { binding.idZhuan.rotation = it.animatedValue as Float }
start()
}
}
override fun initListener() {
onBackPressedDispatcher.addCallback {
Toast.makeText(this@XingzuoLoadingActivity, "wait a moment", Toast.LENGTH_SHORT).show()
}
}
private var isPasue = false
override fun onPause() {
super.onPause()
isPasue = false
}
override fun onResume() {
super.onResume()
isPasue = true
playAnimal()
}
private fun playAnimal() {
lifecycleScope.launch(Dispatchers.Main) {
binding.root.postDelayed({
animaEnd()
}, Random.nextLong(3000, 5000))
}
}
private fun animaEnd(){
if (isPasue) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this){
startActivity(Intent(this, WebBrowserActivity::class.java).apply {
putExtra("url", "https://www.horoscope.com/us/index.aspx")
})
finish()
}
}
}
}
......@@ -9,7 +9,7 @@ import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.activity.repeat.RepeatActivity
import com.base.datarecovery.activity.repeat.RepeatAnimationActivity
import com.base.datarecovery.activity.screenshot.ScreenShotActivity
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.databinding.ActivityPhotoManagerBinding
import com.base.datarecovery.help.BaseActivity
import com.base.datarecovery.help.FileHelp.getDirFiles
......@@ -33,7 +33,7 @@ class PhotoManagerActivity : BaseActivity<ActivityPhotoManagerBinding>() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.WHITE)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative,1)
AdmobManager.showNativeAd(this,binding.idFlNative)
val tittle = intent.extras?.getString("tittle")
tittle?.let { binding.tvTittle.text = it }
......
......@@ -5,7 +5,7 @@ import android.view.View
import android.widget.Toast
import androidx.activity.addCallback
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.databinding.ActivityScreenShotAnimationBinding
import com.base.datarecovery.help.BaseActivity
import kotlinx.coroutines.Dispatchers
......@@ -23,7 +23,7 @@ class PhotoManagerAnimationActivity : BaseActivity<ActivityScreenShotAnimationBi
private var job: Job? = null
override fun initView() {
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative,1)
AdmobManager.showNativeAd(this,binding.idFlNative, isShowAdNative = AdmobManager.isShowAdNativeBottom())
}
private fun jumpJob() = lifecycleScope.launch(Dispatchers.Main) {
......@@ -34,7 +34,7 @@ class PhotoManagerAnimationActivity : BaseActivity<ActivityScreenShotAnimationBi
delay(1500)
val tittle = this@PhotoManagerAnimationActivity.intent?.extras?.getString("tittle")
AdmobMaxHelper.admobMaxShowInterstitialAd(this@PhotoManagerAnimationActivity) {
admobMaxShowInterstitialAd {
startActivity(Intent(this@PhotoManagerAnimationActivity, PhotoManagerActivity::class.java).apply {
tittle?.let { putExtra("tittle", it) }
})
......
......@@ -8,8 +8,6 @@ import android.widget.Toast
import androidx.core.view.updatePadding
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.adapter.MediaSubAdapter
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobInterstitialUtils
import com.base.datarecovery.bean.MediaBean
import com.base.datarecovery.databinding.ActivityPrivacyManageBinding
import com.base.datarecovery.help.BaseActivity
......@@ -70,7 +68,7 @@ class PrivacyManageActivity : BaseActivity<ActivityPrivacyManageBinding>() {
private fun deleteFilesDirMedia() {
showDeletePermanentlyDialog {
AdmobMaxHelper.admobMaxShowInterstitialAd(this,false){
admobMaxShowInterstitialAd(true){
lifecycleScope.launch(Dispatchers.IO) {
val list = mediaSubAdapter.getSelectData()
list.forEach {
......
......@@ -10,7 +10,7 @@ import androidx.core.content.ContextCompat
import androidx.core.widget.addTextChangedListener
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.R
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.bean.ConstObject.privacyPinPassword
import com.base.datarecovery.databinding.ActivityPrivacyPinOneBinding
import com.base.datarecovery.help.BaseActivity
......@@ -35,7 +35,7 @@ class PrivacyPinOneActivity : BaseActivity<ActivityPrivacyPinOneBinding>() {
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative,1)
AdmobManager.showNativeAd(this,binding.idFlNative)
}
@RequiresApi(Build.VERSION_CODES.O)
......
......@@ -9,7 +9,7 @@ import androidx.core.content.ContextCompat
import androidx.core.widget.addTextChangedListener
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.R
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.bean.ConstObject.privacyPinPassword
import com.base.datarecovery.databinding.ActivityPrivacyPinTwoBinding
import com.base.datarecovery.help.BaseActivity
......@@ -36,7 +36,7 @@ class PrivacyPinTwoActivity : BaseActivity<ActivityPrivacyPinTwoBinding>() {
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative,1)
AdmobManager.showNativeAd(this,binding.idFlNative)
firstInput = intent.extras?.getString("FirstInput") ?: "null"
LogEx.logDebug(TAG, "firstInput=$firstInput")
}
......
......@@ -8,7 +8,7 @@ import androidx.activity.addCallback
import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.bean.ConstObject.privacyPinPassword
import com.base.datarecovery.databinding.ActivityPrivacySpaceBinding
import com.base.datarecovery.fragment.PrivacyPageFragment
......@@ -89,7 +89,7 @@ class PrivacySpaceActivity : BaseActivity<ActivityPrivacySpaceBinding>() {
binding.viewpager2.currentItem = 1
}
onBackPressedDispatcher.addCallback {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@PrivacySpaceActivity,false) {
admobMaxShowInterstitialAd(isShow = AdmobManager.isShowAdBackInter()) {
finishToMain()
}
}
......
......@@ -5,7 +5,7 @@ import android.graphics.Color
import android.os.Environment
import androidx.activity.addCallback
import com.base.datarecovery.R
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.bean.ConstObject.SCAN_AUDIOS
import com.base.datarecovery.bean.ConstObject.SCAN_DOCUMENTS
import com.base.datarecovery.bean.ConstObject.SCAN_PHOTOS
......@@ -52,12 +52,12 @@ class FileRecoveredActivity : BaseActivity<ActivityFileRecoveredBinding>() {
onBackPressedDispatcher.onBackPressed()
}
onBackPressedDispatcher.addCallback {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@FileRecoveredActivity,false) {
admobMaxShowInterstitialAd(isShow = AdmobManager.isShowAdBackInter()) {
finishToMain()
}
}
binding.tvContinue.setOnClickListener {
AdmobMaxHelper.admobMaxShowInterstitialAd(this,false) {
admobMaxShowInterstitialAd(true) {
finish()
}
}
......
......@@ -8,7 +8,7 @@ import androidx.activity.addCallback
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.adapter.FileFolderAdapter
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.bean.ConstObject.SCAN_AUDIOS
import com.base.datarecovery.bean.ConstObject.SCAN_DOCUMENTS
import com.base.datarecovery.bean.ConstObject.SCAN_PHOTOS
......@@ -54,7 +54,7 @@ class FileScanResultActivity : BaseActivity<ActivityFileScanResultBinding>() {
scanType = intent.extras?.getInt("ScanType") ?: 0
LogEx.logDebug(TAG, "scanType=$scanType")
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative,1)
AdmobManager.showNativeAd(this,binding.idFlNative)
when (scanType) {
SCAN_PHOTOS -> {
binding.tvTittle.text = "Photo Recovery"
......@@ -103,11 +103,7 @@ class FileScanResultActivity : BaseActivity<ActivityFileScanResultBinding>() {
}
onBackPressedDispatcher.addCallback {
showExitFunctionDialog {
if (it) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@FileScanResultActivity,false) {
finishToMain()
}
} else {
admobMaxShowInterstitialAd(isShow = AdmobManager.isShowAdBackInter()) {
finishToMain()
}
}
......@@ -166,7 +162,7 @@ class FileScanResultActivity : BaseActivity<ActivityFileScanResultBinding>() {
binding.ivWancheng.visibility = View.VISIBLE
binding.tvScanning.text = "Completed"
lifecycleScope.launchWhenResumed {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@FileScanResultActivity,false)
admobMaxShowInterstitialAd{}
}
binding.flEmpty.isVisible = pathList.isEmpty()
setAdapterData(null)
......
......@@ -8,13 +8,11 @@ import androidx.core.view.isVisible
import androidx.core.view.updatePadding
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.adapter.MediaAdapter
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.AdmobMaxHelper.showDeleteAdSp
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.bean.MediaBean
import com.base.datarecovery.bean.MediaTimeBean
import com.base.datarecovery.databinding.ActivityRepeatBinding
import com.base.datarecovery.help.BaseActivity
import com.base.datarecovery.help.ConfigHelper
import com.base.datarecovery.help.KotlinExt.toFormatSize
import com.base.datarecovery.help.KotlinExt.toFormatTime
import com.base.datarecovery.help.MediaStoreHelp.getImageMedia
......@@ -80,11 +78,7 @@ class RepeatActivity : BaseActivity<ActivityRepeatBinding>() {
override fun initListener() {
onBackPressedDispatcher.addCallback {
showExitFunctionDialog {
if (it) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@RepeatActivity,false) {
finishToMain()
}
} else {
admobMaxShowInterstitialAd(isShow = AdmobManager.isShowAdBackInter()) {
finishToMain()
}
......@@ -99,11 +93,7 @@ class RepeatActivity : BaseActivity<ActivityRepeatBinding>() {
}
binding.tvClean.setOnClickListener {
showDeletePermanentlyDialog {
if (showDeleteAdSp()) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@RepeatActivity,false) {
cleanFile()
}
} else {
admobMaxShowInterstitialAd (true){
cleanFile()
}
}
......@@ -145,8 +135,8 @@ class RepeatActivity : BaseActivity<ActivityRepeatBinding>() {
binding.tvScanning.visibility = View.GONE
binding.flScanning.visibility = View.GONE
mediaAdapter.setData(beanList)
if (beanList.sumOf { it.beans.size } > 6 || ConfigHelper.mustShowNativeAd) {
AdmobMaxHelper.admobMaxShowNativeAd(this@RepeatActivity, binding.flAd)
if (beanList.sumOf { it.beans.size } > 6) {
AdmobManager.showNativeAd(this@RepeatActivity,binding.flAd)
}
binding.llEmpty.isVisible = beanList.isEmpty()
}
......
......@@ -4,7 +4,7 @@ import android.content.Intent
import android.widget.Toast
import androidx.activity.addCallback
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.databinding.ActivityRepeatAnimationBinding
import com.base.datarecovery.help.BaseActivity
import com.base.datarecovery.utils.SimarPhotoUtils
......@@ -22,7 +22,7 @@ class RepeatAnimationActivity : BaseActivity<ActivityRepeatAnimationBinding>() {
private var job: Job? = null
override fun initView() {
AdmobMaxHelper.admobMaxShowNativeAd(this, binding.idFlNative, 1)
AdmobManager.showNativeAd(this,binding.idFlNative, isShowAdNative = AdmobManager.isShowAdNativeBottom())
}
override fun initListener() {
......@@ -76,8 +76,7 @@ class RepeatAnimationActivity : BaseActivity<ActivityRepeatAnimationBinding>() {
}
private fun animaEnd(){
if (isPasue) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this){
admobMaxShowInterstitialAd{
startActivity(Intent(this, SimilarPicAt::class.java))
finish()
}
......
package com.base.datarecovery.activity.repeat
import android.annotation.SuppressLint
import android.graphics.Color
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import androidx.activity.addCallback
import androidx.core.view.isVisible
import androidx.core.view.updatePadding
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.base.datarecovery.R
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.bean.ImageInfoBean
import com.base.datarecovery.databinding.ActivityDuplicateImageBinding
import com.base.datarecovery.help.BaseActivity
......@@ -39,7 +37,7 @@ class SimilarPicAt : BaseActivity<ActivityDuplicateImageBinding>() {
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
// BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
if (checkStorePermission()) {
initData()
} else {
......@@ -56,11 +54,12 @@ class SimilarPicAt : BaseActivity<ActivityDuplicateImageBinding>() {
})
})
}
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
// binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
binding.idTvDelete.isEnabled = false
}
private fun initData(){
private fun initData() {
binding.idLlResult.isVisible = true
fileList = SimarPhotoUtils.similarImageList
binding.idTvNoData.isVisible = fileList.size == 0
......@@ -69,28 +68,22 @@ class SimilarPicAt : BaseActivity<ActivityDuplicateImageBinding>() {
binding.idImgSelect.isVisible = fileList.size > 0
initAdapter()
if (fileList.size > 6) {
AdmobMaxHelper.admobMaxShowNativeAd(this, binding.flAd, 1)
AdmobManager.showNativeAd(this, binding.flAd)
}
}
@SuppressLint("NotifyDataSetChanged")
override fun initListener() {
binding.idBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
showExitFunctionDialog {
if (it) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@SimilarPicAt, false) {
finishToMain()
}
} else {
finishToMain()
}
onBackPressedDispatcher.addCallback {
showExitFunctionDialog {
admobMaxShowInterstitialAd(isShow = AdmobManager.isShowAdBackInter()) {
finishToMain()
}
}
})
}
binding.idImgSelect.setOnClickListener {
if (isSelectAll) {
......@@ -109,7 +102,7 @@ class SimilarPicAt : BaseActivity<ActivityDuplicateImageBinding>() {
}
binding.idTvDelete.setOnClickListener {
showDeletePermanentlyDialog {
AdmobMaxHelper.admobMaxShowInterstitialAd(this, false) {
admobMaxShowInterstitialAd(true) {
cleanFile()
}
}
......@@ -135,8 +128,6 @@ class SimilarPicAt : BaseActivity<ActivityDuplicateImageBinding>() {
private var fileList = mutableListOf<ImageInfoBean>()
private fun initAdapter() {
binding.idRlList.run {
layoutManager = GridLayoutManager(this@SimilarPicAt, 3)
......
......@@ -9,12 +9,11 @@ import androidx.core.view.isVisible
import androidx.core.view.updatePadding
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.adapter.ScreenShotAdapter
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.bean.ScreenPhotoBean
import com.base.datarecovery.bean.ScreenshotBean
import com.base.datarecovery.databinding.ActivityScreenShotBinding
import com.base.datarecovery.help.BaseActivity
import com.base.datarecovery.help.ConfigHelper
import com.base.datarecovery.help.FileHelp
import com.base.datarecovery.help.KotlinExt.toFormatSize
import com.base.datarecovery.help.PermissionHelp.checkStorePermission
......@@ -86,8 +85,8 @@ class ScreenShotActivity : BaseActivity<ActivityScreenShotBinding>() {
val sizeF = size.toFormatSize().split(" ")
binding.tvSize.text = sizeF[0]
binding.tvUnit.text = sizeF[1]
if (list.sumOf { it.screenPhotoBean.size } > 6 || ConfigHelper.mustShowNativeAd) {
AdmobMaxHelper.admobMaxShowNativeAd(this@ScreenShotActivity, binding.flAd)
if (list.sumOf { it.screenPhotoBean.size } > 6 ) {
AdmobManager.showNativeAd(this@ScreenShotActivity,binding.flAd)
}
binding.llEmpty.isVisible = list.isEmpty()
}
......@@ -100,14 +99,9 @@ class ScreenShotActivity : BaseActivity<ActivityScreenShotBinding>() {
}
onBackPressedDispatcher.addCallback {
showExitFunctionDialog {
if (it) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@ScreenShotActivity, false) {
finishToMain()
}
} else {
admobMaxShowInterstitialAd(isShow = AdmobManager.isShowAdBackInter()) {
finishToMain()
}
}
}
......@@ -121,7 +115,7 @@ class ScreenShotActivity : BaseActivity<ActivityScreenShotBinding>() {
binding.tvClean.setOnClickListener {
showDeletePermanentlyDialog {
AdmobMaxHelper.admobMaxShowInterstitialAd(this, false) {
admobMaxShowInterstitialAd(true) {
cleanFile()
}
// if (showDeleteAdSp()) {
......
......@@ -4,7 +4,7 @@ import android.content.Intent
import android.widget.Toast
import androidx.activity.addCallback
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.databinding.ActivityScreenShotAnimationBinding
import com.base.datarecovery.help.BaseActivity
import kotlinx.coroutines.Job
......@@ -20,12 +20,12 @@ class ScreenShotAnimationActivity : BaseActivity<ActivityScreenShotAnimationBind
private var job: Job? = null
override fun initView() {
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative,1)
AdmobManager.showNativeAd(this,binding.idFlNative, isShowAdNative = AdmobManager.isShowAdNativeBottom())
}
fun jumpJob() = lifecycleScope.launch {
delay(Random.nextLong(3000, 4500))
AdmobMaxHelper.admobMaxShowInterstitialAd(this@ScreenShotAnimationActivity) {
admobMaxShowInterstitialAd {
startActivity(Intent(this@ScreenShotAnimationActivity, ScreenShotActivity::class.java))
finish()
}
......
package com.base.datarecovery.activity.splash
import android.app.Activity
import android.content.Intent
import android.net.Uri
import android.text.SpannableString
import android.text.Spanned
import android.text.style.UnderlineSpan
import com.base.datarecovery.MyApplication
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.bean.ConstObject.ifAgreePrivacy
import com.base.datarecovery.databinding.ActivitySplashBinding
import com.base.datarecovery.help.ConfigHelper
class PrivacyManager(
private val binding: ActivitySplashBinding,
private val context: Activity,
private val listener: OnUserPrivacyAgreementListener
) {
init {
initView()
}
private fun initView() {
val spannableString = SpannableString("Privacy Policy")
spannableString.setSpan(
UnderlineSpan(),
0,
spannableString.length,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
binding.idTvPrivacyPolicy.text = spannableString
binding.idTvPrivacyPolicy.setOnClickListener {
val intent = Intent(
Intent.ACTION_VIEW,
Uri.parse(ConfigHelper.privacyPolicy)
)
context.startActivity(intent)
}
var clicked = false
binding.idTvStart.setOnClickListener {
if (clicked) {
return@setOnClickListener
}
clicked = true
ifAgreePrivacy = true
(context.application as MyApplication).initApp()
AdmobMaxHelper.preloadAd(context)
listener.onAgreePrivacy()
}
}
interface OnUserPrivacyAgreementListener {
fun onAgreePrivacy()
}
}
\ No newline at end of file
package com.base.datarecovery.activity.splash
import android.app.Activity
import android.content.Intent
import android.util.Log
import com.base.datarecovery.activity.MainActivity
import com.base.datarecovery.activity.battery.BatteryInfoAnimationActivity
import com.base.datarecovery.activity.guide.GuideActivity
import com.base.datarecovery.activity.junkclean.ScanJunkActivity
import com.base.datarecovery.activity.newfunction.WeatherInterface
import com.base.datarecovery.activity.newfunction.XingzuoLoadingActivity
import com.base.datarecovery.activity.photomanager.PhotoManagerAnimationActivity
import com.base.datarecovery.activity.recovery.FileScanResultActivity
import com.base.datarecovery.activity.videomanager.VideoCleanAnimationActivity
import com.base.datarecovery.bean.ConstObject
import com.base.datarecovery.bean.ConstObject.ID_APP_MANAGER
import com.base.datarecovery.bean.ConstObject.ID_BATTERY_INFO
import com.base.datarecovery.bean.ConstObject.ID_JUNK_CLEAN_PUSH
import com.base.datarecovery.bean.ConstObject.ID_RECOVERY_DOCUMENTS
import com.base.datarecovery.bean.ConstObject.ID_RECOVERY_PHOTOS
import com.base.datarecovery.bean.ConstObject.ID_RECOVERY_VIDEOS
import com.base.datarecovery.bean.ConstObject.ID_SCREENSHOT_CLEAN
import com.base.datarecovery.bean.ConstObject.ID_SIMILAR_IMAGE
import com.base.datarecovery.bean.ConstObject.ID_WEATHER
import com.base.datarecovery.bean.ConstObject.ID_XINGZUO
import com.base.datarecovery.bean.ConstObject.isGuide
object StartUtils {
private val TAG = "SplashJumpUtils"
fun jumpNextPage(context: Activity) {
var jumpType = context.intent.getIntExtra("actionId", 0)
Log.e(TAG, "actionId: $jumpType")
if (jumpType == 0) {
val uri = context.intent.data
val str = (uri?.getQueryParameter("type") ?: "0")
jumpType = str.toIntOrNull() ?: 0
if (jumpType != 0) {
}
}
when (jumpType) {
//=================================主动广播=======================================
ID_JUNK_CLEAN_PUSH -> {
context.startActivity(Intent(context, ScanJunkActivity::class.java))
}
ID_SIMILAR_IMAGE -> {
context.startActivity(Intent(context, PhotoManagerAnimationActivity::class.java))
}
ID_SCREENSHOT_CLEAN -> {
context.startActivity(Intent(context, PhotoManagerAnimationActivity::class.java))
}
ID_RECOVERY_PHOTOS -> {
context.startActivity(
Intent(context, FileScanResultActivity::class.java).putExtra(
"ScanType", ConstObject.SCAN_PHOTOS
)
)
}
ID_RECOVERY_VIDEOS -> {
context.startActivity(
Intent(context, FileScanResultActivity::class.java).putExtra(
"ScanType",
ConstObject.SCAN_VIDEOS
)
)
}
ID_RECOVERY_DOCUMENTS -> {
context.startActivity(
Intent(context, FileScanResultActivity::class.java).putExtra(
"ScanType",
ConstObject.SCAN_DOCUMENTS
)
)
}
// ID_WHATSAPP_CLEANER -> {
// context.startActivity(Intent(context, WhatsAppCleanerAnimationActivity::class.java))
// }
//
// ID_APP_PROCESS -> {
// context.startActivity(Intent(context, AppProcessAnimationActivity::class.java))
// }
ID_APP_MANAGER -> {
context.startActivity(Intent(context, VideoCleanAnimationActivity::class.java))
}
ID_BATTERY_INFO -> {
context.startActivity(Intent(context, BatteryInfoAnimationActivity::class.java))
}
ID_WEATHER->{
context.startActivity(Intent(context, WeatherInterface::class.java))
}
ID_XINGZUO->{
context.startActivity(Intent(context, XingzuoLoadingActivity::class.java))
}
//================================被动广播=========================================
else -> {
val isHotLaunch = context.intent?.extras?.getBoolean("isHotLaunch", false) ?: false
if (!isHotLaunch) {
if (!isGuide) {
context.startActivity(Intent(context, GuideActivity::class.java))
isGuide = true
} else {
context.startActivity(Intent(context, MainActivity::class.java))
}
}
}
}
context.finish()
}
}
\ No newline at end of file
package com.base.datarecovery.activity.splash
import android.os.Handler
import android.view.View
import androidx.core.view.isVisible
import com.base.datarecovery.databinding.ActivitySplashBinding
class TaskManager {
private val binding: ActivitySplashBinding
private var mHandler: Handler
private var mIsPaused = false
private var mProgress = 0
private val listener: ProgressListener
constructor(binding: ActivitySplashBinding, listener: ProgressListener) {
this.binding = binding
this.listener = listener
mHandler = Handler()
initView()
}
var loadTime: Int = 15
private fun initView() {
//loadTime = SPUtils.getInstance().getInt("loading_page_time", 15)
binding.pb.max = loadTime
binding.pb.progress = 0
}
fun startProgress() {
binding.idLlTishi.visibility=View.INVISIBLE
binding.idTvStart.isVisible = false
binding.llStart.visibility = View.GONE
binding.llProgress.visibility = View.VISIBLE
val mRunnable: Runnable = object : Runnable {
override fun run() {
if (!mIsPaused) {
mProgress++ // 计算进度
binding.pb.progress = mProgress
if (mProgress < loadTime) {
mHandler.postDelayed(this, 1000) // 每秒钟更新一次进度
} else {
listener.onProgressMax()
pauseProgress()
}
}
}
}
mHandler.postDelayed(mRunnable, 1000)
}
fun pauseProgress() {
if (!mIsPaused) {
mIsPaused = true
mHandler.removeCallbacksAndMessages(null)
}
}
fun maxProgress() {
binding.pb.progress = binding.pb.max
listener.onProgressMax()
}
interface ProgressListener {
fun onProgressMax()
}
}
\ No newline at end of file
......@@ -15,7 +15,7 @@ import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.base.datarecovery.R
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.bean.FileBean
import com.base.datarecovery.databinding.ActivityLayoutManagerBinding
import com.base.datarecovery.help.BaseActivity
......@@ -81,7 +81,7 @@ class ManagerActivity : BaseActivity<ActivityLayoutManagerBinding>() {
} else {
getList()
}
AdmobMaxHelper.admobMaxShowNativeAd(this, binding.idFlNative,1)
AdmobManager.showNativeAd(this,binding.idFlNative)
val layoutManager = when (title) {
image -> GridLayoutManager(this, 4)
else -> LinearLayoutManager(this)
......@@ -105,11 +105,7 @@ class ManagerActivity : BaseActivity<ActivityLayoutManagerBinding>() {
when (title) {
video -> {
showExitFunctionDialog {
if (it) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@ManagerActivity, false) {
finishToMain()
}
} else {
admobMaxShowInterstitialAd(isShow = AdmobManager.isShowAdBackInter()) {
finishToMain()
}
......@@ -138,7 +134,7 @@ class ManagerActivity : BaseActivity<ActivityLayoutManagerBinding>() {
// else -> "Confirm to delete this ${mFileList.filter { it.isSelect }.size} item"
// }
showDeletePermanentlyDialog {
AdmobMaxHelper.admobMaxShowInterstitialAd(this) {
admobMaxShowInterstitialAd(true) {
val list = mFileList.filter { it.isSelect }
val path = mutableListOf<String>()
list.forEach {
......
......@@ -5,7 +5,7 @@ import android.view.View
import android.widget.Toast
import androidx.activity.addCallback
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.admob.AdmobManager
import com.base.datarecovery.databinding.ActivityAppProcessAnimationBinding
import com.base.datarecovery.help.BaseActivity
import kotlinx.coroutines.Dispatchers
......@@ -22,7 +22,7 @@ class VideoCleanAnimationActivity : BaseActivity<ActivityAppProcessAnimationBind
private var job: Job? = null
override fun initView() {
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative,1)
AdmobManager.showNativeAd(this,binding.idFlNative, isShowAdNative = AdmobManager.isShowAdNativeBottom())
playLottie()
}
......@@ -48,7 +48,7 @@ class VideoCleanAnimationActivity : BaseActivity<ActivityAppProcessAnimationBind
binding.tv.text = "Completed!"
delay(1000)
AdmobMaxHelper.admobMaxShowInterstitialAd(this@VideoCleanAnimationActivity) {
admobMaxShowInterstitialAd {
startActivity(Intent(this@VideoCleanAnimationActivity, ManagerActivity::class.java))
finish()
}
......
package com.base.datarecovery.ads
import AdMaxNativeUtils
import android.app.Activity
import android.util.Log
import android.view.ViewGroup
import com.base.datarecovery.R
import com.base.datarecovery.ads.admob.AdmobInterstitialUtils
import com.base.datarecovery.ads.admob.AdmobNativeUtils
import com.base.datarecovery.ads.admob.AdmobOpenUtils
import com.base.datarecovery.ads.max.AdMaxInit
import com.base.datarecovery.ads.max.AdMaxInit.initAdMax
import com.base.datarecovery.ads.max.AdMaxInterstitialUtils
import com.base.datarecovery.ads.max.AdMaxOpenUtils
import com.base.datarecovery.help.BaseApplication
import com.base.datarecovery.utils.AppPreferences
import com.base.datarecovery.utils.EventUtils
import com.base.datarecovery.utils.LogEx
import com.google.android.gms.ads.MobileAds
import java.util.concurrent.atomic.AtomicBoolean
object AdmobMaxHelper {
var isBlack: Boolean = false
private val TAG = ""
var isAdInit = AtomicBoolean(false)
fun haveSpAdmobTrueMaxFalse(): Boolean {
return AppPreferences.getInstance().getString("admobTrueMaxFalse", "-1").toInt() != -1
}
private fun getSpAdmobTrueMaxFalse(): Boolean {
val ss = AppPreferences.getInstance().getString("admobTrueMaxFalse", "1").toInt()
return ss == 1
}
fun showBackInterAdSp(): Boolean {
val isShowBackIntAd = AppPreferences.getInstance().getString("isShowBackIntAd", "0").toInt()
//1要看插屏 0不看
return isShowBackIntAd == 1
}
fun showDeleteAdSp(): Boolean {
val isDeleteInterAd = AppPreferences.getInstance().getString("isDeleteInterAd", "0").toInt()
//1要看插屏 0不看
return isDeleteInterAd == 1
}
fun isOpenAdLoaded(): Boolean {
return if (getSpAdmobTrueMaxFalse()) {
AdmobOpenUtils.isOpenAdLoaded()
} else {
AdMaxOpenUtils.isOpenAdLoaded()
}
}
//展示广告关闭时赋值
var lastShowedOnHiddenTime = 0L
fun admobMaxShowInterstitialAd(activity: Activity, isLoading: Boolean = true, onHidden: (() -> Unit)? = null) {
if (isBlack) {
EventUtils.event("ad_black", "interAd")
onHidden?.invoke()
return
}
val isShowLoadingAd = AppPreferences.getInstance().getString("isShowLoadingAd", "0").toInt()
if (isShowLoadingAd == 0 && isLoading) {
EventUtils.event("ad_switch_close")
onHidden?.invoke()
return
}
val adInterval = AppPreferences.getInstance().getString("adInterval", "0").toInt()
if ((System.currentTimeMillis() - lastShowedOnHiddenTime) < adInterval * 1000 && lastShowedOnHiddenTime != 0L) {
onHidden?.invoke()
EventUtils.event("ad_interval")
return
}
if (getSpAdmobTrueMaxFalse()) {
AdmobInterstitialUtils.showInterstitialAd(activity) {
onHidden?.invoke()
}
} else {
AdMaxInterstitialUtils.showInterstitialAd(activity) {
onHidden?.invoke()
}
}
}
fun admobMaxShowOpenAd(activity: Activity, showBeforeAction: (flag: Boolean) -> Unit, onHidden: (() -> Unit)? = null) {
if (isBlack) {
onHidden?.invoke()
EventUtils.event("ad_black", "openAd")
return
}
if (getSpAdmobTrueMaxFalse()) {
AdmobOpenUtils.showAppOpenAd(activity, showBefore = showBeforeAction) {
onHidden?.invoke()
}
} else {
AdMaxOpenUtils.showAppOpenAd(activity, loadCallBack = showBeforeAction) {
onHidden?.invoke()
}
}
}
fun admobMaxShowNativeAd(activity: Activity, parent: ViewGroup, where: Int = 0) {
if (isBlack) {
return
}
if (getSpAdmobTrueMaxFalse()) {
AdmobNativeUtils.showNativeAd(activity, parent)
} else {
var layout = R.layout.layout_max_native_small
if (where == 0) {
layout = R.layout.layout_max_native_small_f8f8f8
}
if (where == 1) {
layout = R.layout.layout_max_native_big
}
if (where == 2) {
layout = R.layout.layout_max_native_big_2
}
AdMaxNativeUtils.showNativeAd(activity, parent, layout)
}
}
fun initAdmobMaxAd() {
if (isBlack) {
return
}
if (getSpAdmobTrueMaxFalse()) {
if (!isAdInit.get()) {
LogEx.logDebug(TAG, "init sp Admob")
MobileAds.initialize(BaseApplication.context) { initializationStatus ->
isAdInit.set(true)
}
}
} else {
if (!isAdInit.get()) {
LogEx.logDebug(TAG, "init sp AdMax")
BaseApplication.context.initAdMax()
}
}
}
fun preloadAd(activity: Activity) {
if (isBlack) {
return
}
if (getSpAdmobTrueMaxFalse()) {
// AdmobOpenUtils.loadAppOpenAd()
AdmobInterstitialUtils.loadInterstitialAd(activity)
} else {
if (isAdInit.get()) {
// AdMaxOpenUtils.loadAppOpenAd(activity)
AdMaxInterstitialUtils.loadInterstitialAd(activity)
} else {
AdMaxInit.maxInitAction = {
Log.d(TAG, "max init suc")
// AdMaxOpenUtils.loadAppOpenAd(activity)
// AdMaxInterstitialUtils.loadInterstitialAd(activity)
}
}
}
}
}
\ No newline at end of file
package com.base.datarecovery.ads.admob
import android.app.Dialog
import android.content.Context
import android.os.CountDownTimer
import android.view.LayoutInflater
import android.view.View
import android.widget.TextView
import androidx.core.view.isVisible
import com.base.datarecovery.R
import com.base.datarecovery.databinding.DialogAdLoadingBinding
class AdDialog(context: Context, block: (() -> Unit)? = null) :
Dialog(context, R.style.CustomDialog) {
private var countdownText: TextView? = null
init {
val binding = DialogAdLoadingBinding.inflate(LayoutInflater.from(context))
setContentView(binding.root)
setCancelable(false)
countdownText = binding.tvCountdown
}
fun setButtonClickListener(viewId: Int, listener: () -> Unit) {
val button = findViewById<View>(viewId) as? TextView
button?.setOnClickListener {
listener.invoke()
}
}
fun setCountdownText(viewId: Int) {
countdownText = findViewById(viewId)
}
fun updateCountdownText(seconds: String) {
countdownText?.text = seconds
}
fun start() {
countdownTimer.start()
}
override fun dismiss() {
super.dismiss()
// 清理引用
countdownText = null
}
private val countdownTimer = object : CountDownTimer(3000, 1000) {
override fun onTick(millisUntilFinished: Long) {
val seconds = (millisUntilFinished / 1000).toInt() + 1
countdownText?.text = "(${seconds})"
countdownText?.isVisible = true
}
override fun onFinish() {
block?.invoke()
countdownText?.isVisible = false
dismiss()
}
}
}
\ No newline at end of file
package com.base.datarecovery.ads.admob
import android.content.Context
import android.os.Bundle
import android.util.Log
import android.view.View
import android.view.ViewGroup
import android.view.ViewTreeObserver
import androidx.core.view.children
import com.base.datarecovery.BuildConfig
import com.base.datarecovery.help.ConfigHelper
import com.base.datarecovery.utils.AppPreferences
import com.base.datarecovery.utils.LogEx
import com.google.ads.mediation.admob.AdMobAdapter
import com.google.android.gms.ads.AdListener
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdSize
import com.google.android.gms.ads.AdView
import java.util.UUID
object AdmobBannerUtils {
private val TAG = "AdmobBannerUtils"
private var adView: AdView? = null
private var listener: ViewTreeObserver.OnGlobalLayoutListener? = null
fun showCollapsibleBannerAd(context: Context, parent: ViewGroup) {
val isShowBanner = AppPreferences.getInstance().getString("isShowBanner", "0").toInt()
if (isShowBanner == 0) {
return
}
if (adView != null) {
adView?.destroy()
}
adView = AdView(context)
// parent.removeAllViews()
adView?.tag = "CollapsibleBannerAd"
// parent.removeAllViews()
val list = parent.children
list.forEach {
if (it.tag != "zhanweitu") {
parent.removeView(it)
}
}
parent.addView(adView)
listener = ViewTreeObserver.OnGlobalLayoutListener {
val screenPixelDensity = context.resources.displayMetrics.density
val adWidth = (parent.width / screenPixelDensity).toInt()
val adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(context, adWidth)
adView?.adUnitId = if (BuildConfig.DEBUG) ConfigHelper.bannerAdmobIdTest else ConfigHelper.bannerAdmobId
adView?.setAdSize(adSize)
loadCollapsibleBanner(parent)
parent.viewTreeObserver.removeOnGlobalLayoutListener(listener)
}
parent.viewTreeObserver.addOnGlobalLayoutListener(listener)
}
private fun loadCollapsibleBanner(parent: ViewGroup) {
val extras = Bundle()
extras.putString("collapsible", "bottom")
extras.putString("collapsible_request_id", UUID.randomUUID().toString())
val adRequest =
AdRequest.Builder().addNetworkExtrasBundle(AdMobAdapter::class.java, extras).build()
adView?.adListener =
object : AdListener() {
override fun onAdLoaded() {}
override fun onAdClosed() {
super.onAdClosed()
LogEx.logDebug(TAG, "onAdClosed")
val removeList = arrayListOf<View>()
parent.children.forEach {
if (it.tag != "CollapsibleBannerAd") {
removeList.add(it)
}
}
removeList.forEach {
parent.removeView(it)
}
}
}
adView?.loadAd(adRequest)
}
}
\ No newline at end of file
package com.base.datarecovery.ads.admob
import android.annotation.SuppressLint
import android.app.Activity
import android.app.Dialog
import android.widget.Toast
import com.base.datarecovery.BuildConfig
import com.base.datarecovery.R
import com.base.datarecovery.ads.AdDisplayUtils
import com.base.datarecovery.ads.AdmobMaxHelper.lastShowedOnHiddenTime
import com.base.datarecovery.ads.admob.AdmobEvent.clickAd
import com.base.datarecovery.ads.admob.AdmobEvent.pullAd
import com.base.datarecovery.ads.admob.AdmobEvent.showAd
import com.base.datarecovery.help.BaseApplication
import com.base.datarecovery.help.ConfigHelper
import com.base.datarecovery.utils.EventUtils
import com.base.datarecovery.view.CustomDialog
import com.google.android.gms.ads.AdError
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.FullScreenContentCallback
import com.google.android.gms.ads.LoadAdError
import com.google.android.gms.ads.interstitial.InterstitialAd
import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback
import org.json.JSONObject
import java.util.UUID
object AdmobInterstitialUtils {
private var interAd: InterstitialAd? = null
private var interLoadTime = Long.MAX_VALUE
private var adLastDisplayTime: Long = 0
private val mRequest = AdRequest.Builder().build()
@SuppressLint("StaticFieldLeak")
private var customDialog: CustomDialog? = null
private fun isAdExpired(): Boolean {
return System.currentTimeMillis() - interLoadTime > 1000 * 60 * 60
}
fun showInterstitialAd(
activity: Activity,
isReLoadAd: Boolean = false,
isShowDialog: Boolean = true,
onHidden: (() -> Unit)? = null
) {
if (activity.isFinishing || activity.isDestroyed) {
return
}
val obj = JSONObject()
obj.put("ad_unit", "interAd")
EventUtils.event("ad_prepare_show", ext = obj)
if (isAdExpired()) {
val obj = JSONObject()
obj.put("ad_unit", "interAd")
EventUtils.event("ad_expire", ext = obj)
interAd = null
loadInterstitialAd(activity)
onHidden?.invoke()
return
}
if (!AdDisplayUtils.getInstance().shouldShowAd("interAd")) {
onHidden?.invoke()
return
}
if (interAd != null) {
showIntervalDialogAndShowAd(activity, isShowDialog, onHidden, 2)
} else {
showAdDialogAndLoadInterstitial(activity, isReLoadAd, isShowDialog, onHidden)
}
}
fun loadInterstitialAd(activity: Activity, onLoad: (() -> Unit)? = null) {
if (interAd != null) {
onLoad?.invoke()
return
}
if (!AdDisplayUtils.getInstance().shouldShowAd("interAd")) {
onLoad?.invoke()
return
}
val reqId = UUID.randomUUID().toString()
val obj = JSONObject()
obj.put("req_id", reqId)
obj.put("ad_type", "interAd")
obj.put("from", activity.javaClass.simpleName)
EventUtils.event("ad_pull_start", ext = obj)
InterstitialAd.load(
activity,
if (BuildConfig.DEBUG) ConfigHelper.interAdmobIdTest else ConfigHelper.interAdmobId,
mRequest,
object : InterstitialAdLoadCallback() {
override fun onAdFailedToLoad(p0: LoadAdError) {
AdDisplayUtils.getInstance().incrementAdRequestFailCount()
interAd = null
onLoad?.invoke()
pullAd(p0.responseInfo, "interAd", p0.message, reqId = reqId)
if (BuildConfig.DEBUG) {
Toast.makeText(
BaseApplication.context,
"拉取失败" + p0.message,
Toast.LENGTH_SHORT
).show()
}
}
override fun onAdLoaded(ad: InterstitialAd) {
interAd = ad
onLoad?.invoke()
interLoadTime = System.currentTimeMillis()
pullAd(ad.responseInfo, "interAd", reqId = reqId)
ad.onPaidEventListener = AdmobEvent.EventOnPaidEventListener(ad)
}
})
}
private fun showIntervalDialogAndShowAd(
activity: Activity,
isShowDialog: Boolean,
onHidden: (() -> Unit)?,
interval: Int
) {
displayInterstitialAd(activity, onHidden)
}
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) {
val thisInterAd = interAd
interAd = null
thisInterAd?.fullScreenContentCallback = object : FullScreenContentCallback() {
override fun onAdClicked() {
clickAd(thisInterAd?.responseInfo, "interAd")
AdDisplayUtils.getInstance().incrementAdClickCount()
}
override fun onAdDismissedFullScreenContent() {
interAd = null
onHidden?.invoke()
loadInterstitialAd(activity)
lastShowedOnHiddenTime = System.currentTimeMillis()
}
override fun onAdFailedToShowFullScreenContent(p0: AdError) {
interAd = null
onHidden?.invoke()
loadInterstitialAd(activity)
}
override fun onAdShowedFullScreenContent() {
showAd(thisInterAd?.responseInfo, "interAd", activity)
AdDisplayUtils.getInstance().incrementAdDisplayCount()
adLastDisplayTime = System.currentTimeMillis() / 1000
}
}
thisInterAd?.show(activity)
}
}
\ No newline at end of file
package com.base.datarecovery.ads.admob
import android.app.Activity
import android.view.ViewGroup
import androidx.core.view.isVisible
import com.base.datarecovery.BuildConfig
import com.base.datarecovery.R
import com.base.datarecovery.ads.AdDisplayUtils
import com.base.datarecovery.ads.admob.AdmobEvent.clickAd
import com.base.datarecovery.ads.admob.AdmobEvent.pullAd
import com.base.datarecovery.ads.admob.AdmobEvent.showAd
import com.base.datarecovery.help.BaseApplication
import com.base.datarecovery.help.ConfigHelper
import com.base.datarecovery.utils.EventUtils
import com.base.datarecovery.utils.LogEx
import com.google.android.gms.ads.AdListener
import com.google.android.gms.ads.AdLoader
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.LoadAdError
import com.google.android.gms.ads.nativead.NativeAd
import org.json.JSONObject
import java.util.UUID
object AdmobNativeUtils {
private val TAG = "AdmobNativeUtils"
private var nativeAd: NativeAd? = null
private var isLoading = false
private var nativeLoadTime = Long.MAX_VALUE
private var loadingListener: (() -> Unit)? = null
private val mRequest = AdRequest.Builder().build()
fun loadNativeAd() {
if (nativeAd != null) {
return
}
// if (isLoading) {
// return
// }
// isLoading = true
if (!AdDisplayUtils.getInstance().shouldShowAd("interAd")) {
return
}
val reqId = UUID.randomUUID().toString()
val obj = JSONObject()
obj.put("req_id", reqId)
obj.put("ad_type", "nativeAd")
val adLoader = AdLoader.Builder(
BaseApplication.context,
if (BuildConfig.DEBUG) ConfigHelper.nativeAdmobIdTest else ConfigHelper.nativeAdmobId
).forNativeAd {
nativeLoadTime = System.currentTimeMillis()
nativeAd = it
LogEx.logDebug(TAG, "nativeAd=${nativeAd.toString()}")
// isLoading = false
loadingListener?.invoke()
pullAd(it.responseInfo, "nativeAd", reqId = reqId)
it.setOnPaidEventListener(AdmobEvent.EventOnPaidEventListener(it))
}.withAdListener(object : AdListener() {
override fun onAdClicked() {
clickAd(nativeAd?.responseInfo, "nativeAd")
}
override fun onAdFailedToLoad(p0: LoadAdError) {
LogEx.logDebug(TAG, "onAdFailedToLoad=${p0.message}")
nativeAd = null
// isLoading = false
pullAd(p0.responseInfo, "nativeAd", p0.message, reqId = reqId)
// Log.e("MXL", "NativeAdFailedToLoad: " + p0.message)
}
}).build()
adLoader.loadAd(mRequest)
}
fun showNativeAd(activity: Activity?, parent: ViewGroup, layout: Int = R.layout.layout_native_custom) {
if (!AdDisplayUtils.getInstance().shouldShowAd("NativeAd")) {
return
}
loadingListener = {
if (System.currentTimeMillis() - nativeLoadTime <= 1000 * 60 * 60) {
nativeAd?.let {
NativeView(parent.context, layout).run {
parent.removeAllViews()
setNativeAd(it)
parent.addView(this)
parent.isVisible = true
showAd(nativeAd?.responseInfo, "nativeAd", activity)
}
}
}
nativeAd = null
loadingListener = null
loadNativeAd()
}
if (nativeAd == null) {
loadNativeAd()
val obj2 = JSONObject()
obj2.put("reason", "no coach ad")
obj2.put("ad_unit", "nativeAd")
EventUtils.event("ad_nocache_pull", ext = obj2)
} else {
loadingListener?.invoke()
}
}
}
\ No newline at end of file
package com.base.datarecovery.ads.admob
import android.app.Activity
import com.base.datarecovery.BuildConfig
import com.base.datarecovery.ads.AdDisplayUtils
import com.base.datarecovery.ads.admob.AdmobEvent.clickAd
import com.base.datarecovery.ads.admob.AdmobEvent.pullAd
import com.base.datarecovery.ads.admob.AdmobEvent.showAd
import com.base.datarecovery.help.BaseApplication
import com.base.datarecovery.help.ConfigHelper
import com.base.datarecovery.utils.EventUtils
import com.base.datarecovery.utils.LogEx
import com.google.android.gms.ads.AdError
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.FullScreenContentCallback
import com.google.android.gms.ads.LoadAdError
import com.google.android.gms.ads.appopen.AppOpenAd
import org.json.JSONObject
import java.util.UUID
object AdmobOpenUtils {
private val TAG = "AdmobOpenUtils"
private val mRequest = AdRequest.Builder().build()
private var openLoadTime = Long.MAX_VALUE
private var mOpenAd: AppOpenAd? = null
fun isOpenAdLoaded() = mOpenAd != null
fun loadAppOpenAd(skip: Boolean = false, onLoad: ((where: Int) -> Unit)? = null) {
if (mOpenAd != null || skip) {
onLoad?.invoke(1)
return
}
if (!AdDisplayUtils.getInstance().shouldShowAd("openAd")) {
onLoad?.invoke(2)
return
}
val reqId = UUID.randomUUID().toString()
val obj = JSONObject()
obj.put("req_id", reqId)
obj.put("ad_type", "openAd")
EventUtils.event("ad_pull_start", ext = obj)
AppOpenAd.load(
BaseApplication.context,
if (BuildConfig.DEBUG) ConfigHelper.openAdmobIdTest else ConfigHelper.openAdmobId,
mRequest,
object : AppOpenAd.AppOpenAdLoadCallback() {
override fun onAdLoaded(ad: AppOpenAd) {
openLoadTime = System.currentTimeMillis()
mOpenAd = ad
onLoad?.invoke(3)
pullAd(ad.responseInfo, "openAd", reqId = reqId)
ad.onPaidEventListener = AdmobEvent.EventOnPaidEventListener(ad)
}
override fun onAdFailedToLoad(p0: LoadAdError) {
AdDisplayUtils.getInstance().incrementAdRequestFailCount()
LogEx.logDebug(TAG, "LoadAdError ${p0.message}")
mOpenAd = null
onLoad?.invoke(4)
pullAd(p0.responseInfo, "openAd", p0.message, reqId = reqId)
}
})
}
fun showAppOpenAd(
activity: Activity,
isRetry: Boolean = false,
showBefore: ((flag: Boolean) -> Unit)? = null, onHidden: ((where: Int) -> Unit)? = null
) {
if (activity.isFinishing || activity.isDestroyed) {
return
}
if (!AdDisplayUtils.getInstance().shouldShowAd("openAd")) {
onHidden?.invoke(1)
return
}
if (System.currentTimeMillis() - openLoadTime > 1000 * 60 * 60) {
LogEx.logDebug(TAG, "openLoadTime out time")
mOpenAd = null
loadAppOpenAd()
onHidden?.invoke(2)
val obj2 = JSONObject()
obj2.put("ad_unit", "openAd")
EventUtils.event("ad_expire", ext = obj2)
return
}
if (!isRetry) {
val obj1 = JSONObject()
obj1.put("ad_unit", "openAd")
EventUtils.event("ad_prepare_show", ext = obj1)
}
if (mOpenAd != null) {
LogEx.logDebug(TAG, "mOpenAd!=null")
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)
} else {
LogEx.logDebug(TAG, "mOpenAd=null")
// onHidden?.invoke(5)
// loadAppOpenAd()
// val obj = JSONObject()
// obj.put("reason", "no_ad")
// obj.put("ad_unit", "openAd")
// EventUtils.event("ad_show_error", ext = obj)
loadAppOpenAd {
if (mOpenAd != null) {
showAppOpenAd(activity, true, showBefore, onHidden)
} else {
val obj = JSONObject()
obj.put("reason", "no_ad")
obj.put("ad_unit", "openAd")
EventUtils.event("ad_show_error", ext = obj)
onHidden?.invoke(5)
}
}
}
}
}
\ No newline at end of file
......@@ -9,19 +9,42 @@ import android.widget.Button
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.TextView
import com.applovin.mediation.MaxAd
import com.applovin.mediation.nativeAds.MaxNativeAdLoader
import com.applovin.mediation.nativeAds.MaxNativeAdView
import com.applovin.mediation.nativeAds.MaxNativeAdViewBinder
import com.base.datarecovery.R
import com.google.android.gms.ads.nativead.NativeAd
import com.google.android.gms.ads.nativead.NativeAdView
class NativeView @JvmOverloads constructor(
context: Context, val layout: Int, attrs: AttributeSet? = null
) : FrameLayout(context, attrs) {
): FrameLayout(context, attrs) {
init {
layoutParams = LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
)
layoutParams = LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
}
fun setNativeAd(
nativeAdLoader: MaxNativeAdLoader,
nativeAd: MaxAd,
) {
// val layout = resource ?: R.layout.native_custom_ad_view
val binder: MaxNativeAdViewBinder =
MaxNativeAdViewBinder.Builder(layout)
.setTitleTextViewId(R.id.ad_headline)
// .setBodyTextViewId(R.id.body_text_view)
// .setAdvertiserTextViewId(R.id.advertiser_text_view)
.setIconImageViewId(R.id.ad_app_icon)
.setMediaContentViewGroupId(R.id.ad_media)
// .setOptionsContentViewGroupId(R.id.options_view)
// .setStarRatingContentViewGroupId(R.id.star_rating_view)
.setCallToActionButtonId(R.id.ad_call_to_action)
.build()
val adView = MaxNativeAdView(binder, context)
nativeAdLoader.render(adView, nativeAd)
removeAllViews()
addView(adView)
}
fun setNativeAd(nativeAd: NativeAd?) {
......@@ -30,32 +53,35 @@ class NativeView @JvmOverloads constructor(
val adView = LayoutInflater.from(context)
.inflate(layout, this, false) as NativeAdView
// runCatching {
// adView.advertiserView = adView.findViewById(R.id.ad_advertiser)
// }
adView.mediaView = adView.findViewById(R.id.ad_media)
adView.headlineView = adView.findViewById(R.id.ad_headline)
adView.bodyView = adView.findViewById(R.id.ad_body)
adView.callToActionView = adView.findViewById(R.id.ad_call_to_action)
adView.iconView = adView.findViewById(R.id.ad_app_icon)
(adView.headlineView as TextView?)?.text = nativeAd.headline
adView.mediaView!!.mediaContent = nativeAd.mediaContent
adView.mediaView?.mediaContent = nativeAd.mediaContent
if (nativeAd.body == null) {
adView.bodyView!!.visibility = View.INVISIBLE
adView.bodyView?.visibility = View.INVISIBLE
} else {
adView.bodyView!!.visibility = View.VISIBLE
adView.bodyView?.visibility = View.VISIBLE
(adView.bodyView as TextView?)?.text = nativeAd.body
}
if (nativeAd.callToAction == null) {
adView.callToActionView!!.visibility = View.INVISIBLE
adView.callToActionView?.visibility = View.INVISIBLE
} else {
adView.callToActionView!!.visibility = View.VISIBLE
adView.callToActionView?.visibility = View.VISIBLE
(adView.callToActionView as Button?)?.text = nativeAd.callToAction
}
if (nativeAd.icon == null) {
adView.iconView!!.visibility = View.GONE
adView.iconView?.visibility = View.GONE
} else {
(adView.iconView as ImageView?)?.setImageDrawable(
nativeAd.icon!!.drawable
nativeAd.icon?.drawable
)
adView.iconView!!.visibility = View.VISIBLE
adView.iconView?.visibility = View.VISIBLE
}
adView.setNativeAd(nativeAd)
......
package com.base.datarecovery.ads.max
import android.content.Context
import android.util.Log
import com.applovin.sdk.AppLovinMediationProvider
import com.applovin.sdk.AppLovinSdk
import com.applovin.sdk.AppLovinSdkInitializationConfiguration
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.ads.AdmobMaxHelper.isAdInit
import com.base.datarecovery.utils.EventUtils
import com.base.datarecovery.utils.LogEx
import com.google.android.gms.ads.identifier.AdvertisingIdClient
import org.json.JSONObject
import java.util.Collections
import java.util.concurrent.Executors
import java.util.concurrent.atomic.AtomicBoolean
object AdMaxInit {
private val TAG = "AdMaxInit"
var maxInitAction: (() -> Unit)? = null
fun Context.initAdMax() {
Log.d(TAG, "initAdMax")
// If you want to test your own AppLovin SDK key, change the value here and update the package name in the build.gradle
// val YOUR_SDK_KEY = "05TMDQ5tZabpXQ45_UTbmEGNUtVAzSTzT6KmWQc5_CuWdzccS4DCITZoL3yIWUG3bbq60QC_d4WF28tUC4gVTF"
val YOUR_SDK_KEY = "GGPreND6SRmCt1zJgn5faiLGD8c2PVGPLgPpSg7cHanVTud1DhtuI9MmteTqlEviaJ57WnxW68kQDaATJ5z3cW"
val executor = Executors.newSingleThreadExecutor();
executor.execute {
val initConfigBuilder = AppLovinSdkInitializationConfiguration.builder(YOUR_SDK_KEY, this)
initConfigBuilder.mediationProvider = AppLovinMediationProvider.MAX
// Enable test mode by default for the current device. Cannot be run on the main thread.
// AppLovinSdk.getInstance( this ).showMediationDebugger()
// val currentGaid = AdvertisingIdClient.getAdvertisingIdInfo(this).id
// if (currentGaid != null) {
// initConfigBuilder.testDeviceAdvertisingIds = Collections.singletonList(currentGaid)
// }
// Initialize the AppLovin SDK
val sdk = AppLovinSdk.getInstance(this)
sdk.initialize(initConfigBuilder.build()) {
LogEx.logDebug(TAG, "max init")
isAdInit.set(true)
maxInitAction?.invoke()
maxInitAction = null
EventUtils.event("MaxInit", "MaxInit")
}
executor.shutdown()
}
}
}
\ No newline at end of file
......@@ -16,7 +16,7 @@ object ConstObject {
// const val ID_APP_PROCESS = 13011
const val ID_APP_MANAGER = 12076
const val ID_BATTERY_INFO = 12086
const val ID_XINGZUO = 12087
// const val ID_XINGZUO = 12087
const val ID_WEATHER = 12088
......
package com.base.datarecovery.bean
data class SelectBean(
val imageRes: Int,
val name: String,
var isSelect: Boolean = false
)
......@@ -24,11 +24,9 @@ import com.base.datarecovery.activity.junkclean.ScanJunkActivity
import com.base.datarecovery.activity.largefile.LargeFileAnimationActivity
import com.base.datarecovery.activity.newfunction.WeatherInterface
import com.base.datarecovery.activity.newfunction.WeatherUtils
import com.base.datarecovery.activity.newfunction.XingzuoLoadingActivity
import com.base.datarecovery.activity.repeat.RepeatAnimationActivity
import com.base.datarecovery.activity.screenshot.ScreenShotAnimationActivity
import com.base.datarecovery.activity.videomanager.VideoCleanAnimationActivity
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.databinding.FragmentHomeBinding
import com.base.datarecovery.help.BaseFragment
import com.base.datarecovery.help.KotlinExt.toFormatSize
......@@ -125,9 +123,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
i++
lastClickTime = System.currentTimeMillis()
}
binding.idXz.setOnClickListener {
startActivity(Intent(requireActivity(), XingzuoLoadingActivity::class.java))
}
binding.llWeather.setOnClickListener {
startActivity(Intent(requireActivity(), WeatherInterface::class.java))
}
......@@ -180,7 +176,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
override fun onResume() {
super.onResume()
AdmobMaxHelper.admobMaxShowNativeAd(requireActivity(), binding.idFlNative, 1)
// AdmobManager.showNativeAd(requireActivity(), binding.idFlNative, 1)
animatorSet.resume()
val bean = WeatherUtils.getWeatherEntity()?.list?.get(0)
bean?.let {
......
This diff is collapsed.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/theme_color"/>
<corners android:radius="10dp"/>
</shape>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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