Commit 230eb832 authored by wanglei's avatar wanglei

...

parent c1d33939
...@@ -47,18 +47,6 @@ ...@@ -47,18 +47,6 @@
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity
android:name=".activity.appmanager.AppManagerActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".activity.appmanager.AppManagerAnimationActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity <activity
android:name=".activity.battery.BatteryInfoAnimationActivity" android:name=".activity.battery.BatteryInfoAnimationActivity"
android:exported="false" android:exported="false"
...@@ -83,18 +71,6 @@ ...@@ -83,18 +71,6 @@
android:launchMode="singleTop" android:launchMode="singleTop"
android:screenOrientation="portrait" android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" /> tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".activity.appprocess.AppProcessAnimationActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".activity.appprocess.AppProcessActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity <activity
android:name=".activity.photomanager.PhotoManagerAnimationActivity" android:name=".activity.photomanager.PhotoManagerAnimationActivity"
android:exported="false" android:exported="false"
...@@ -178,47 +154,6 @@ ...@@ -178,47 +154,6 @@
android:launchMode="singleTop" android:launchMode="singleTop"
android:screenOrientation="portrait" android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" /> tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".activity.whatsapp.WhatsAppCleanerActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".activity.whatsapp.WhatsAppCleanerAnimationActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".activity.whatsapp.WhatsAppMessageCleanActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" /> <!-- <activity -->
<!-- android:name=".activity.privacyspace.PrivacyPinTwoActivity" -->
<!-- android:exported="false" -->
<!-- android:launchMode="singleTop" -->
<!-- android:screenOrientation="portrait" -->
<!-- tools:ignore="DiscouragedApi,LockedOrientationActivity" /> -->
<!-- <activity -->
<!-- android:name=".activity.privacyspace.PrivacyPinOneActivity" -->
<!-- android:exported="false" -->
<!-- android:launchMode="singleTop" -->
<!-- android:screenOrientation="portrait" -->
<!-- tools:ignore="DiscouragedApi,LockedOrientationActivity" /> -->
<!-- <activity -->
<!-- android:name=".activity.privacyspace.PrivacyImportActivity" -->
<!-- android:exported="false" -->
<!-- android:launchMode="singleTop" -->
<!-- android:screenOrientation="portrait" -->
<!-- tools:ignore="DiscouragedApi,LockedOrientationActivity" /> -->
<!-- <activity -->
<!-- android:name=".activity.privacyspace.PrivacySpaceActivity" -->
<!-- android:exported="false" -->
<!-- android:launchMode="singleTop" -->
<!-- android:screenOrientation="portrait" -->
<!-- tools:ignore="DiscouragedApi,LockedOrientationActivity" /> -->
<activity <activity
android:name=".activity.recovery.FileRecoveredActivity" android:name=".activity.recovery.FileRecoveredActivity"
android:exported="false" android:exported="false"
...@@ -239,19 +174,24 @@ ...@@ -239,19 +174,24 @@
tools:ignore="DiscouragedApi,LockedOrientationActivity" /> tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity <activity
android:name=".fragment.WebBrowserActivity" android:name=".fragment.WebBrowserActivity"
android:screenOrientation="portrait" /> android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity <activity
android:name=".activity.junkclean.ScanJunk2Activity" android:name=".activity.junkclean.ScanJunk2Activity"
android:screenOrientation="portrait" /> android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity <activity
android:name=".view.WeatherInterface" android:name=".view.WeatherInterface"
android:screenOrientation="portrait" /> android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity <activity
android:name=".activity.guide.CleanGuideActivity" android:name=".activity.guide.CleanGuideActivity"
android:screenOrientation="portrait" /> android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity <activity
android:name=".activity.XzLoadingActivity" android:name=".activity.XzLoadingActivity"
android:screenOrientation="portrait" /> android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<meta-data <meta-data
android:name="com.google.android.gms.ads.flag.OPTIMIZE_INITIALIZATION" android:name="com.google.android.gms.ads.flag.OPTIMIZE_INITIALIZATION"
...@@ -262,10 +202,6 @@ ...@@ -262,10 +202,6 @@
<meta-data <meta-data
android:name="com.google.android.gms.ads.flag.NATIVE_AD_DEBUGGER_ENABLED" android:name="com.google.android.gms.ads.flag.NATIVE_AD_DEBUGGER_ENABLED"
android:value="false" /> android:value="false" />
<!-- 常驻通知栏 -->
<!-- <service-->
<!-- android:name=".service.StayNotificationService"-->
<!-- android:foregroundServiceType="dataSync" />-->
<service <service
android:name=".service.StayJobService" android:name=".service.StayJobService"
android:exported="false" android:exported="false"
......
package com.base.filerecoveryrecyclebin.activity.appmanager
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.content.pm.ApplicationInfo
import android.content.pm.PackageInfo
import android.graphics.Color
import android.net.Uri
import android.view.View
import androidx.activity.addCallback
import androidx.core.view.updatePadding
import androidx.lifecycle.lifecycleScope
import com.base.filerecoveryrecyclebin.adapter.AppManagerAdapter
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.bean.AppBean
import com.base.filerecoveryrecyclebin.databinding.ActivityAppManagerBinding
import com.base.filerecoveryrecyclebin.help.BaseActivity
import com.base.filerecoveryrecyclebin.utils.BarUtils
import com.base.filerecoveryrecyclebin.utils.RamUtils.ramPair
import com.base.filerecoveryrecyclebin.view.DialogViews.showExitFunctionDialog
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class AppManagerActivity : BaseActivity<ActivityAppManagerBinding>() {
var uninstallTimes = 0
override val binding: ActivityAppManagerBinding by lazy {
ActivityAppManagerBinding.inflate(layoutInflater)
}
private lateinit var adapter: AppManagerAdapter
private var ePercent = 0
@SuppressLint("SetTextI18n")
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
val ramPair = ramPair()
val percent = ((ramPair.first.toFloat() / ramPair.second.toFloat()) * 100).toInt()
ePercent = percent
adapter = AppManagerAdapter(true) { pkg ->
if (uninstallTimes % 3 == 0 && uninstallTimes > 0) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this, isLoading = false) { unInstall(pkg) }
} else {
unInstall(pkg)
}
}
binding.rv.adapter = adapter
initData()
}
private fun unInstall(pkg: String) {
val intent = Intent(Intent.ACTION_DELETE, Uri.parse("package:${pkg}"))
launcher.launch(intent) {
if (!isInstalled(this, pkg)) {
adapter.removeBean(pkg)
uninstallTimes++
}
}
}
private fun isInstalled(context: Context, pkg: String, error: (() -> Unit)? = null): Boolean {
return try {
context.packageManager.getPackageInfo(pkg, 0)
true
} catch (e: Exception) {
error?.invoke()
false
}
}
override fun initListener() {
super.initListener()
onBackPressedDispatcher.addCallback {
showExitFunctionDialog(this@AppManagerActivity){showAd ->
if (showAd){
AdmobMaxHelper.admobMaxShowInterstitialAd(this@AppManagerActivity, isLoading = false) {
finishToMain()
}
}else{
finishToMain()
}
}
}
binding.flFanhui.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
}
@SuppressLint("QueryPermissionsNeeded")
private fun initData() = lifecycleScope.launch(Dispatchers.IO) {
val pm = packageManager
val packages = pm.getInstalledPackages(0)
val list = arrayListOf<AppBean>()
packages.forEach { app ->
if (isLaunchApp(this@AppManagerActivity, app)) {
val appBean = AppBean(
app.applicationInfo.loadIcon(pm),
app.applicationInfo.loadLabel(pm).toString(),
app.applicationInfo.packageName
)
list.add(appBean)
}
}
launch(Dispatchers.Main) {
binding.pbLoading.visibility = View.GONE
adapter.setData(list)
}
}
private fun isLaunchApp(context: Context, app: PackageInfo, filterSystem: Boolean = true): Boolean {
val flagSystem = (app.applicationInfo.flags and ApplicationInfo.FLAG_SYSTEM) < 1
val flag = if (filterSystem) flagSystem else true
return flag && app.applicationInfo.packageName != context.packageName
}
}
\ No newline at end of file
package com.base.filerecoveryrecyclebin.activity.appmanager
import android.annotation.SuppressLint
import android.content.Intent
import android.view.View
import android.widget.Toast
import androidx.activity.addCallback
import androidx.lifecycle.lifecycleScope
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.databinding.ActivityAppProcessAnimationBinding
import com.base.filerecoveryrecyclebin.help.BaseActivity
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlin.random.Random
class AppManagerAnimationActivity : BaseActivity<ActivityAppProcessAnimationBinding>() {
override val binding: ActivityAppProcessAnimationBinding by lazy {
ActivityAppProcessAnimationBinding.inflate(layoutInflater)
}
private var job: Job? = null
override fun initView() {
playLottie()
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative)
}
override fun initListener() {
onBackPressedDispatcher.addCallback {
Toast.makeText(this@AppManagerAnimationActivity, "wait a moment", Toast.LENGTH_SHORT).show()
}
}
@SuppressLint("SetTextI18n")
private fun playLottie() {
binding.lottie.imageAssetsFolder = "app_manager/images/"
binding.lottie.setAnimation("app_manager/data.json")
binding.lottie.playAnimation()
}
@SuppressLint("SetTextI18n")
fun jumpJob() = lifecycleScope.launch(Dispatchers.Main) {
delay(Random.nextLong(4000, 6000))
binding.lottie.visibility = View.GONE
binding.lottieCompleted.visibility = View.VISIBLE
binding.lottieCompleted.playAnimation()
binding.tv.text = "Completed!"
delay(1000)
AdmobMaxHelper.admobMaxShowInterstitialAd(this@AppManagerAnimationActivity) {
startActivity(Intent(this@AppManagerAnimationActivity, AppManagerActivity::class.java))
finish()
}
}
override fun onResume() {
super.onResume()
if (job?.isActive == false || job == null) {
job = jumpJob()
}
}
override fun onPause() {
super.onPause()
job?.cancel()
job = null
}
}
\ No newline at end of file
package com.base.filerecoveryrecyclebin.activity.appprocess
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.content.pm.ApplicationInfo
import android.content.pm.PackageInfo
import android.graphics.Color
import android.net.Uri
import android.provider.Settings
import android.view.View
import androidx.activity.addCallback
import androidx.core.view.updatePadding
import androidx.lifecycle.lifecycleScope
import com.base.filerecoveryrecyclebin.adapter.AppManagerAdapter
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper.showBackInterAdSp
import com.base.filerecoveryrecyclebin.bean.AppBean
import com.base.filerecoveryrecyclebin.databinding.ActivityAppProcessBinding
import com.base.filerecoveryrecyclebin.help.BaseActivity
import com.base.filerecoveryrecyclebin.help.KotlinExt.toFormatSize
import com.base.filerecoveryrecyclebin.utils.BarUtils
import com.base.filerecoveryrecyclebin.utils.RamUtils.ramPair
import com.base.filerecoveryrecyclebin.view.DialogViews.showAppProcessExitDialog
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class AppProcessActivity : BaseActivity<ActivityAppProcessBinding>() {
override val binding: ActivityAppProcessBinding by lazy {
ActivityAppProcessBinding.inflate(layoutInflater)
}
private lateinit var adapter: AppManagerAdapter
private var ePercent = 0
@SuppressLint("SetTextI18n")
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
val ramPair = ramPair()
val percent = ((ramPair.first.toFloat() / ramPair.second.toFloat()) * 100).toInt()
ePercent = percent
binding.tvPercent.text = percent.toString()
binding.pbRam.progress = percent
binding.tvSize.text = "${ramPair.first.toFormatSize()}/${ramPair.second.toFormatSize()}"
adapter = AppManagerAdapter { pkg ->
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
val uri = Uri.fromParts("package", pkg, null) // 替换为需要跳转的应用包名
intent.setData(uri)
startActivity(intent)
}
binding.rv.adapter = adapter
initData()
}
override fun initListener() {
super.initListener()
onBackPressedDispatcher.addCallback {
showAppProcessExitDialog(ePercent) {
if (showBackInterAdSp()) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@AppProcessActivity, false) {
finishToMain()
}
} else {
finishToMain()
}
}
}
binding.flFanhui.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
}
@SuppressLint("QueryPermissionsNeeded")
private fun initData() = lifecycleScope.launch(Dispatchers.IO) {
val pm = packageManager
val packages = pm.getInstalledPackages(0)
val list = arrayListOf<AppBean>()
packages.forEach { app ->
if (isLaunchApp(this@AppProcessActivity, app)) {
val appBean = AppBean(
app.applicationInfo.loadIcon(pm),
app.applicationInfo.loadLabel(pm).toString(),
app.applicationInfo.packageName
)
list.add(appBean)
}
}
launch(Dispatchers.Main) {
binding.pbLoading.visibility = View.GONE
adapter.setData(list)
}
}
private fun isLaunchApp(context: Context, app: PackageInfo, filterSystem: Boolean = true): Boolean {
val flagSystem = (app.applicationInfo.flags and ApplicationInfo.FLAG_SYSTEM) < 1
val flag = if (filterSystem) flagSystem else true
return flag && app.applicationInfo.packageName != context.packageName
}
}
\ No newline at end of file
package com.base.filerecoveryrecyclebin.activity.appprocess
import android.annotation.SuppressLint
import android.content.Intent
import android.view.View
import android.widget.Toast
import androidx.activity.addCallback
import androidx.lifecycle.lifecycleScope
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.databinding.ActivityAppProcessAnimationBinding
import com.base.filerecoveryrecyclebin.help.BaseActivity
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlin.random.Random
class AppProcessAnimationActivity : BaseActivity<ActivityAppProcessAnimationBinding>() {
override val binding: ActivityAppProcessAnimationBinding by lazy {
ActivityAppProcessAnimationBinding.inflate(layoutInflater)
}
private var job: Job? = null
override fun initView() {
playLottie()
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative)
}
override fun initListener() {
onBackPressedDispatcher.addCallback {
Toast.makeText(this@AppProcessAnimationActivity, "wait a moment", Toast.LENGTH_SHORT).show()
}
}
@SuppressLint("SetTextI18n")
private fun playLottie() {
binding.lottie.imageAssetsFolder = "app_manager/images/"
binding.lottie.setAnimation("app_manager/data.json")
binding.lottie.playAnimation()
}
@SuppressLint("SetTextI18n")
fun jumpJob() = lifecycleScope.launch(Dispatchers.Main) {
delay(Random.nextLong(4000, 6000))
binding.lottie.visibility = View.GONE
binding.lottieCompleted.visibility = View.VISIBLE
binding.lottieCompleted.playAnimation()
binding.tv.text = "Completed!"
delay(1000)
AdmobMaxHelper.admobMaxShowInterstitialAd(this@AppProcessAnimationActivity) {
startActivity(Intent(this@AppProcessAnimationActivity, AppProcessActivity::class.java))
finish()
}
}
override fun onResume() {
super.onResume()
if (job?.isActive == false || job == null) {
job = jumpJob()
}
}
override fun onPause() {
super.onPause()
job?.cancel()
job = null
}
}
\ No newline at end of file
...@@ -2,35 +2,35 @@ package com.base.filerecoveryrecyclebin.activity.guide ...@@ -2,35 +2,35 @@ package com.base.filerecoveryrecyclebin.activity.guide
import android.content.Intent import android.content.Intent
import android.graphics.Color import android.graphics.Color
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2 import androidx.viewpager2.widget.ViewPager2
import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.databinding.ActivityGuideBinding import com.base.filerecoveryrecyclebin.databinding.ActivityGuideBinding
import com.base.filerecoveryrecyclebin.fragment.GuideFragment import com.base.filerecoveryrecyclebin.fragment.GuideFragment
import com.base.filerecoveryrecyclebin.help.BaseActivity import com.base.filerecoveryrecyclebin.help.BaseActivity
import com.base.filerecoveryrecyclebin.help.PermissionHelp.requestStorePermission
import com.base.filerecoveryrecyclebin.utils.BarUtils import com.base.filerecoveryrecyclebin.utils.BarUtils
import com.zhpan.indicator.enums.IndicatorSlideMode
import com.zhpan.indicator.enums.IndicatorStyle
class GuideActivity : BaseActivity<ActivityGuideBinding>() { class GuideActivity : BaseActivity<ActivityGuideBinding>() {
private val page1: GuideFragment by lazy { private val page1: GuideFragment by lazy {
GuideFragment().apply { page = 1 } GuideFragment().apply { page = 0 }
} }
private val page2: GuideFragment by lazy { private val page2: GuideFragment by lazy {
GuideFragment().apply { page = 2 } GuideFragment().apply { page = 1 }
}
private val pageNative: NativeFullFragment by lazy {
NativeFullFragment()
} }
private val page3: GuideFragment by lazy { private val page3: GuideFragment by lazy {
GuideFragment().apply { page = 3 } GuideFragment().apply { page = 3 }
} }
private val fragments by lazy { private val fragments by lazy {
mutableListOf(page1, page2, page3) mutableListOf(page1, page2, pageNative, page3)
} }
private var currentIndex = 0
override val binding: ActivityGuideBinding by lazy { override val binding: ActivityGuideBinding by lazy {
ActivityGuideBinding.inflate(layoutInflater) ActivityGuideBinding.inflate(layoutInflater)
...@@ -44,7 +44,7 @@ class GuideActivity : BaseActivity<ActivityGuideBinding>() { ...@@ -44,7 +44,7 @@ class GuideActivity : BaseActivity<ActivityGuideBinding>() {
override fun initView() { override fun initView() {
BarUtils.setStatusBarLightMode(this, true) BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT) BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
AdmobMaxHelper.admobMaxShowNativeAd(this, binding.idFlNative)
binding.viewpager2.run { binding.viewpager2.run {
adapter = object : FragmentStateAdapter(this@GuideActivity) { adapter = object : FragmentStateAdapter(this@GuideActivity) {
override fun getItemCount(): Int { override fun getItemCount(): Int {
...@@ -59,25 +59,27 @@ class GuideActivity : BaseActivity<ActivityGuideBinding>() { ...@@ -59,25 +59,27 @@ class GuideActivity : BaseActivity<ActivityGuideBinding>() {
binding.viewpager2.registerOnPageChangeCallback(object : binding.viewpager2.registerOnPageChangeCallback(object :
ViewPager2.OnPageChangeCallback() { ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) { override fun onPageSelected(position: Int) {
currentIndex = position
} }
}) })
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 lauchPermisson() { fun next(page: Int) {
startActivity(Intent(this, CleanGuideActivity::class.java))
finish() if (page == 0) {
requestStorePermission(launcher) { binding.viewpager2.currentItem = 1
return
}
if (page == 1) {
binding.viewpager2.currentItem = 2
return
}
if (page == 3) {
startActivity(Intent(this, CleanGuideActivity::class.java))
finish()
} }
} }
} }
\ No newline at end of file
...@@ -5,17 +5,12 @@ import android.content.Intent ...@@ -5,17 +5,12 @@ import android.content.Intent
import android.util.Log import android.util.Log
import com.base.filerecoveryrecyclebin.activity.MainActivity import com.base.filerecoveryrecyclebin.activity.MainActivity
import com.base.filerecoveryrecyclebin.activity.XzLoadingActivity import com.base.filerecoveryrecyclebin.activity.XzLoadingActivity
import com.base.filerecoveryrecyclebin.activity.appmanager.AppManagerAnimationActivity
import com.base.filerecoveryrecyclebin.activity.appprocess.AppProcessAnimationActivity
import com.base.filerecoveryrecyclebin.activity.battery.BatteryInfoAnimationActivity import com.base.filerecoveryrecyclebin.activity.battery.BatteryInfoAnimationActivity
import com.base.filerecoveryrecyclebin.activity.guide.GuideActivity import com.base.filerecoveryrecyclebin.activity.guide.WhichWantGuideActivity
import com.base.filerecoveryrecyclebin.activity.junkclean.ScanJunkActivity import com.base.filerecoveryrecyclebin.activity.junkclean.ScanJunkActivity
import com.base.filerecoveryrecyclebin.activity.photomanager.PhotoManagerAnimationActivity import com.base.filerecoveryrecyclebin.activity.photomanager.PhotoManagerAnimationActivity
import com.base.filerecoveryrecyclebin.activity.recovery.FileScanResultActivity import com.base.filerecoveryrecyclebin.activity.recovery.FileScanResultActivity
import com.base.filerecoveryrecyclebin.activity.whatsapp.WhatsAppCleanerAnimationActivity
import com.base.filerecoveryrecyclebin.bean.ConstObject import com.base.filerecoveryrecyclebin.bean.ConstObject
import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_APP_MANAGER
import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_APP_PROCESS
import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_BATTERY_INFO import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_BATTERY_INFO
import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_JUNK_CLEAN_PUSH import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_JUNK_CLEAN_PUSH
import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_RECOVERY_DOCUMENTS import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_RECOVERY_DOCUMENTS
...@@ -23,7 +18,6 @@ import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_RECOVERY_PHOTOS ...@@ -23,7 +18,6 @@ import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_RECOVERY_PHOTOS
import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_RECOVERY_VIDEOS import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_RECOVERY_VIDEOS
import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_SCREENSHOT_CLEAN import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_SCREENSHOT_CLEAN
import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_SIMILAR_IMAGE import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_SIMILAR_IMAGE
import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_WHATSAPP
import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_WHEATHER import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_WHEATHER
import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_XINGZUO import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_XINGZUO
import com.base.filerecoveryrecyclebin.bean.ConstObject.isGuide import com.base.filerecoveryrecyclebin.bean.ConstObject.isGuide
...@@ -50,37 +44,21 @@ object StartUtils { ...@@ -50,37 +44,21 @@ object StartUtils {
ID_JUNK_CLEAN_PUSH -> { ID_JUNK_CLEAN_PUSH -> {
context.startActivity(Intent(context, ScanJunkActivity::class.java)) context.startActivity(Intent(context, ScanJunkActivity::class.java))
} }
ID_SIMILAR_IMAGE -> { ID_SIMILAR_IMAGE -> {
context.startActivity(Intent(context, PhotoManagerAnimationActivity::class.java)) context.startActivity(Intent(context, PhotoManagerAnimationActivity::class.java))
} }
ID_SCREENSHOT_CLEAN -> { ID_SCREENSHOT_CLEAN -> {
context.startActivity(Intent(context, PhotoManagerAnimationActivity::class.java)) context.startActivity(Intent(context, PhotoManagerAnimationActivity::class.java))
} }
ID_RECOVERY_PHOTOS -> { ID_RECOVERY_PHOTOS -> {
context.startActivity(Intent(context, FileScanResultActivity::class.java).putExtra("ScanType",ConstObject.SCAN_PHOTOS)) context.startActivity(Intent(context, FileScanResultActivity::class.java).putExtra("ScanType",ConstObject.SCAN_PHOTOS))
} }
ID_RECOVERY_VIDEOS -> { ID_RECOVERY_VIDEOS -> {
context.startActivity(Intent(context, FileScanResultActivity::class.java).putExtra("ScanType",ConstObject.SCAN_VIDEOS)) context.startActivity(Intent(context, FileScanResultActivity::class.java).putExtra("ScanType",ConstObject.SCAN_VIDEOS))
} }
ID_RECOVERY_DOCUMENTS -> { ID_RECOVERY_DOCUMENTS -> {
context.startActivity(Intent(context, FileScanResultActivity::class.java).putExtra("ScanType",ConstObject.SCAN_DOCUMENTS)) context.startActivity(Intent(context, FileScanResultActivity::class.java).putExtra("ScanType",ConstObject.SCAN_DOCUMENTS))
} }
ID_WHATSAPP -> {
context.startActivity(Intent(context, WhatsAppCleanerAnimationActivity::class.java))
}
ID_APP_PROCESS->{
context.startActivity(Intent(context, AppProcessAnimationActivity::class.java))
}
ID_APP_MANAGER->{
context.startActivity(Intent(context, AppManagerAnimationActivity::class.java))
}
ID_BATTERY_INFO -> { ID_BATTERY_INFO -> {
context.startActivity(Intent(context, BatteryInfoAnimationActivity::class.java)) context.startActivity(Intent(context, BatteryInfoAnimationActivity::class.java))
} }
...@@ -98,7 +76,8 @@ object StartUtils { ...@@ -98,7 +76,8 @@ object StartUtils {
val isHotLaunch = context.intent?.extras?.getBoolean("isHotLaunch", false) ?: false val isHotLaunch = context.intent?.extras?.getBoolean("isHotLaunch", false) ?: false
if (!isHotLaunch) { if (!isHotLaunch) {
if (!isGuide) { if (!isGuide) {
context.startActivity(Intent(context, GuideActivity::class.java)) // context.startActivity(Intent(context, GuideActivity::class.java))
context.startActivity(Intent(context, WhichWantGuideActivity::class.java))
isGuide = true isGuide = true
} else { } else {
context.startActivity(Intent(context, MainActivity::class.java)) context.startActivity(Intent(context, MainActivity::class.java))
......
package com.base.filerecoveryrecyclebin.activity.whatsapp
import android.content.Intent
import android.graphics.Color
import android.os.Environment
import androidx.activity.addCallback
import androidx.lifecycle.lifecycleScope
import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.activity.ResultActivity
import com.base.filerecoveryrecyclebin.adapter.WhatsAppCleanerAdapter
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.bean.ConstObject.WHATSAPP_CLEANER
import com.base.filerecoveryrecyclebin.bean.WhatsAppCleanerBean
import com.base.filerecoveryrecyclebin.databinding.ActivityWhatsAppCleanerBinding
import com.base.filerecoveryrecyclebin.help.BaseActivity
import com.base.filerecoveryrecyclebin.help.FileHelp.getDirFiles
import com.base.filerecoveryrecyclebin.help.KotlinExt.toFormatSize
import com.base.filerecoveryrecyclebin.help.PermissionHelp.checkStorePermission
import com.base.filerecoveryrecyclebin.help.PermissionHelp.requestStorePermission
import com.base.filerecoveryrecyclebin.utils.BarUtils
import com.base.filerecoveryrecyclebin.utils.FileHexEx.isImage
import com.base.filerecoveryrecyclebin.utils.FileHexEx.isVideo
import com.base.filerecoveryrecyclebin.utils.LogEx
import com.base.filerecoveryrecyclebin.view.DialogViews.showExitFunctionDialog
import com.base.filerecoveryrecyclebin.view.DialogViews.showGerPermission
import com.google.gson.Gson
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.io.File
class WhatsAppCleanerActivity : BaseActivity<ActivityWhatsAppCleanerBinding>() {
private val TAG = "WhatsAppCleanerActivity"
private lateinit var adapter: WhatsAppCleanerAdapter
private val whatsAppMediaDir = "${Environment.getExternalStorageDirectory()}/Android/media/com.whatsapp/WhatsApp/Media/"
override val binding: ActivityWhatsAppCleanerBinding by lazy {
ActivityWhatsAppCleanerBinding.inflate(layoutInflater)
}
override fun initView() {
setupStatusBar()
setupAdapter()
checkAndRequestPermissions()
showNativeAd()
}
private fun setupStatusBar() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
}
private fun setupAdapter() {
adapter = WhatsAppCleanerAdapter { item ->
navigateToWhatsAppMessageCleanActivity(item)
}
binding.rv.adapter = adapter
}
private fun checkAndRequestPermissions() {
if (checkStorePermission()) {
initData()
} else {
requestStoragePermissionWithDialog()
}
}
private fun requestStoragePermissionWithDialog() {
showGerPermission(
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.",
deny = {
finishToMain()
},
allow = {
requestStorePermission(
launcher,
result = { flag ->
if (flag) {
initData()
} else {
finishToMain()
}
}
)
})
}
private fun navigateToWhatsAppMessageCleanActivity(item: WhatsAppCleanerBean) {
val intent = Intent(this, WhatsAppMessageCleanActivity::class.java).apply {
putExtra("PathList", Gson().toJson(item.subFile.toTypedArray()))
putExtra("Tittle", item.tittle)
}
startActivity(intent)
}
private fun showNativeAd() {
AdmobMaxHelper.admobMaxShowNativeAd(this, binding.flAd, 0)
}
override fun initListener() {
setupBackButton()
binding.tvGotIt.setOnClickListener {
startActivity(Intent(this, ResultActivity::class.java).apply {
putExtra("from", WHATSAPP_CLEANER)
})
finish()
}
}
private fun setupBackButton() {
binding.flBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
onBackPressedDispatcher.addCallback {
showInterstitialAdAndFinish()
}
}
private fun showInterstitialAdAndFinish() {
showExitFunctionDialog(this) { showAd ->
if (showAd) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this, false) {
finishToMain()
}
} else {
finishToMain()
}
}
}
private fun initData() = lifecycleScope.launch(Dispatchers.IO) {
val list = arrayListOf<WhatsAppCleanerBean>()
list.add(WhatsAppCleanerBean(R.mipmap.videomessages, "Video Messages"))
list.add(WhatsAppCleanerBean(R.mipmap.imagemessages, "Image Messages"))
list.add(WhatsAppCleanerBean(R.mipmap.audiomessages, "Audio Messages"))
var totalSize = 0L
File(whatsAppMediaDir).listFiles()?.forEach { file ->
if (file.name == "WhatsApp Video") {
LogEx.logDebug(TAG, "whatsapp file=${file.absolutePath}")
val bean = list.find { it.tittle == "Video Messages" }
val subFile = getDirFiles(file).filter { isVideo(it) }
val size = subFile.sumOf { it.length() }
bean?.size = size
totalSize += size
bean?.subFile = subFile.map { it.absolutePath }
// subFile.forEach { path ->
// LogEx.logDebug(TAG, "path=$path")
// }
}
if (file.name == "WhatsApp Images") {
val bean = list.find { it.tittle == "Image Messages" }
val subFile = getDirFiles(file).filter { isImage(it) }
val size = subFile.sumOf { it.length() }
bean?.size = size
totalSize += size
bean?.subFile = subFile.map { it.absolutePath }
}
if (file.name == "WhatsApp Audio") {
val bean = list.find { it.tittle == "Audio Messages" }
val subFile = getDirFiles(file).filter { it.name.contains(".mp3") }
val size = subFile.sumOf { it.length() }
bean?.size = size
totalSize += size
bean?.subFile = subFile.map { it.absolutePath }
}
}
launch(Dispatchers.Main) {
adapter.setData(list)
updateTotalSizeUI(list)
}
}
private fun updateTotalSizeUI(list: List<WhatsAppCleanerBean>) {
val totalSize = list.sumOf { it.size }
val formattedSize = totalSize.toFormatSize()
binding.tvSize.text = formattedSize.split(" ")[0]
binding.tvUnit.text = formattedSize.split(" ")[1]
}
}
\ No newline at end of file
package com.base.filerecoveryrecyclebin.activity.whatsapp
import android.annotation.SuppressLint
import android.content.Intent
import android.view.View
import android.widget.Toast
import androidx.activity.addCallback
import androidx.lifecycle.lifecycleScope
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.databinding.ActivityWhatsAppCleanerAnimationBinding
import com.base.filerecoveryrecyclebin.help.BaseActivity
import com.base.filerecoveryrecyclebin.utils.LogEx
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
class WhatsAppCleanerAnimationActivity : BaseActivity<ActivityWhatsAppCleanerAnimationBinding>() {
private val TAG = "WhatsAppCleanerAnimationActivity"
override val binding: ActivityWhatsAppCleanerAnimationBinding by lazy {
ActivityWhatsAppCleanerAnimationBinding.inflate(layoutInflater)
}
private var job: Job? = null
override fun initView() {
playLottie()
AdmobMaxHelper.admobMaxShowNativeAd(this,binding.idFlNative)
}
override fun initListener() {
onBackPressedDispatcher.addCallback {
Toast.makeText(this@WhatsAppCleanerAnimationActivity, "wait a moment", Toast.LENGTH_SHORT).show()
}
}
@SuppressLint("SetTextI18n")
private fun playLottie() {
binding.lottie.imageAssetsFolder = "whupscan/images/"
binding.lottie.setAnimation("whupscan/data.json")
binding.lottie.playAnimation()
}
@SuppressLint("SetTextI18n")
fun jumpJob() = lifecycleScope.launch(Dispatchers.Main) {
delay(5000)
LogEx.logDebug(TAG, "delay over")
binding.lottie.cancelAnimation()
binding.lottie.visibility = View.GONE
binding.lottieCompleted.visibility = View.VISIBLE
binding.lottieCompleted.playAnimation()
binding.tv.text = "Completed!"
delay(1000)
AdmobMaxHelper.admobMaxShowInterstitialAd(this@WhatsAppCleanerAnimationActivity) {
startActivity(Intent(this@WhatsAppCleanerAnimationActivity, WhatsAppCleanerActivity::class.java))
finish()
}
}
override fun onResume() {
super.onResume()
LogEx.logDebug(TAG, "onResume")
if (job?.isActive == false || job == null) {
job = jumpJob()
}
}
override fun onPause() {
super.onPause()
LogEx.logDebug(TAG, "onPause")
job?.cancel()
job = null
}
}
\ No newline at end of file
package com.base.filerecoveryrecyclebin.activity.whatsapp
import android.content.Intent
import android.graphics.Color
import androidx.activity.addCallback
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.base.filerecoveryrecyclebin.activity.ResultActivity
import com.base.filerecoveryrecyclebin.adapter.WhatsAppMediaAdapter
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils
import com.base.filerecoveryrecyclebin.bean.ConstObject
import com.base.filerecoveryrecyclebin.bean.MediaBean
import com.base.filerecoveryrecyclebin.databinding.ActivityWhatsAppMessageCleanBinding
import com.base.filerecoveryrecyclebin.help.BaseActivity
import com.base.filerecoveryrecyclebin.help.KotlinExt.toFormatSize
import com.base.filerecoveryrecyclebin.utils.BarUtils
import com.base.filerecoveryrecyclebin.view.DialogViews.showExitFunctionDialog
import com.google.gson.Gson
import java.io.File
class WhatsAppMessageCleanActivity : BaseActivity<ActivityWhatsAppMessageCleanBinding>() {
private val pathList by lazy {
val json = intent.extras?.getString("PathList")
val list = Gson().fromJson(json, Array<String>::class.java)
list.map { MediaBean(it) }
}
private lateinit var adapter: WhatsAppMediaAdapter
override val binding: ActivityWhatsAppMessageCleanBinding by lazy {
ActivityWhatsAppMessageCleanBinding.inflate(layoutInflater)
}
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
val tittle = intent.extras?.getString("Tittle") ?: ""
binding.tvTitle.text = tittle
var isList = false
when (tittle) {
"Audio Messages" -> {
binding.rv.layoutManager = LinearLayoutManager(this)
isList = true
}
else -> {
binding.rv.layoutManager = GridLayoutManager(this, 3)
}
}
adapter = WhatsAppMediaAdapter(isList) {
binding.llSelectAll.isSelected = it
binding.tvClean.isEnabled = adapter.getSelectData().isNotEmpty()
val split = adapter.getSelectDataSize().toFormatSize().split(" ")
binding.tvSize.text = split[0]
binding.tvUnit.text = split[1]
}
binding.rv.adapter = adapter
adapter.setData(pathList)
}
override fun initListener() {
binding.flBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
onBackPressedDispatcher.addCallback {
showExitFunctionDialog(this@WhatsAppMessageCleanActivity) { showAd ->
if (showAd) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@WhatsAppMessageCleanActivity, isLoading = false) {
finishToMain()
}
} else {
finishToMain()
}
}
}
binding.llSelectAll.setOnClickListener {
it.isSelected = !it.isSelected
adapter.toggleSelect(it.isSelected)
binding.tvClean.isEnabled = it.isSelected
val split = adapter.getSelectDataSize().toFormatSize().split(" ")
binding.tvSize.text = split[0]
binding.tvUnit.text = split[1]
}
binding.tvClean.setOnClickListener {
AdmobInterstitialUtils.showInterstitialAd(this) {
val list = adapter.getSelectData()
runCatching {
list.forEach { File(it).delete() }
}
startActivity(Intent(this@WhatsAppMessageCleanActivity, ResultActivity::class.java).apply {
putExtra("from", ConstObject.WHATSAPP_CLEANER)
})
finish()
}
}
}
}
\ No newline at end of file
package com.base.filerecoveryrecyclebin.ads
//object AdmobCommonUtils {
//
// private var lastAd: Any? = null
// private var maxMultiClick = AppPreferences.getInstance().getString("maxMultiClick", "10").toInt()
// private var multiClick = 0
// fun isMultiClick(currentAd: Any?) {
// if (currentAd == null) {
// return
// }
// if (lastAd == currentAd) {
// multiClick++
// if (multiClick >= maxMultiClick) {
// AdDisplayUtils.getInstance()
// .setAdClickCount(AdDisplayUtils.getInstance().maxAdClickCount)
// ActivityManagerUtils.getInstance().finishAllActivity()
// return
// }
// } else {
// multiClick = 0
// }
//
// lastAd = currentAd
//
// }
//}
\ No newline at end of file
...@@ -7,6 +7,10 @@ import com.base.filerecoveryrecyclebin.R ...@@ -7,6 +7,10 @@ import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils
import com.base.filerecoveryrecyclebin.ads.admob.AdmobNativeUtils import com.base.filerecoveryrecyclebin.ads.admob.AdmobNativeUtils
import com.base.filerecoveryrecyclebin.ads.admob.AdmobOpenUtils import com.base.filerecoveryrecyclebin.ads.admob.AdmobOpenUtils
import com.base.filerecoveryrecyclebin.ads.max.AdMaxInit.initAdMax
import com.base.filerecoveryrecyclebin.ads.max.AdMaxInterstitialUtils
import com.base.filerecoveryrecyclebin.ads.max.AdMaxNativeUtils
import com.base.filerecoveryrecyclebin.ads.max.AdMaxOpenUtils
import com.base.filerecoveryrecyclebin.help.BaseApplication import com.base.filerecoveryrecyclebin.help.BaseApplication
import com.base.filerecoveryrecyclebin.utils.AppPreferences import com.base.filerecoveryrecyclebin.utils.AppPreferences
import com.base.filerecoveryrecyclebin.utils.EventUtils import com.base.filerecoveryrecyclebin.utils.EventUtils
...@@ -19,15 +23,21 @@ object AdmobMaxHelper { ...@@ -19,15 +23,21 @@ object AdmobMaxHelper {
var isAdInit = AtomicBoolean(false) var isAdInit = AtomicBoolean(false)
var isBlack: Boolean = false var isBlack: Boolean = false
fun haveSpAdmobTrueMaxFalse(): Boolean { fun getSpAdmobTrueMaxFalse(): Boolean {
return AppPreferences.getInstance().getString("admobTrueMaxFalse", "-1").toInt() != -1
}
private fun getSpAdmobTrueMaxFalse(): Boolean {
val ss = AppPreferences.getInstance().getString("admobTrueMaxFalse", "1").toInt() val ss = AppPreferences.getInstance().getString("admobTrueMaxFalse", "1").toInt()
return ss == 1 return ss == 1
} }
fun showExitNativeSp(): Boolean {
val isShowExitNative = AppPreferences.getInstance().getString("isShowExitNative", "0").toInt()
return isShowExitNative == 1
}
fun showGuideNativeSp(): Boolean {
val isShowGuideNative = AppPreferences.getInstance().getString("isShowGuideNative", "0").toInt()
return isShowGuideNative == 1
}
fun showBackInterAdSp(): Boolean { fun showBackInterAdSp(): Boolean {
val isShowBackIntAd = AppPreferences.getInstance().getString("isShowBackIntAd", "0").toInt() val isShowBackIntAd = AppPreferences.getInstance().getString("isShowBackIntAd", "0").toInt()
//1要看插屏 0不看 //1要看插屏 0不看
...@@ -46,7 +56,7 @@ object AdmobMaxHelper { ...@@ -46,7 +56,7 @@ object AdmobMaxHelper {
if (isBlack) { if (isBlack) {
return return
} }
if (true) { if (getSpAdmobTrueMaxFalse()) {
if (!isAdInit.get()) { if (!isAdInit.get()) {
LogEx.logDebug(TAG, "init sp Admob") LogEx.logDebug(TAG, "init sp Admob")
MobileAds.initialize(BaseApplication.context) { initializationStatus -> MobileAds.initialize(BaseApplication.context) { initializationStatus ->
...@@ -54,21 +64,20 @@ object AdmobMaxHelper { ...@@ -54,21 +64,20 @@ object AdmobMaxHelper {
} }
} }
} else { } else {
// if (!isAdInit.get()) { if (!isAdInit.get()) {
// LogEx.logDebug(TAG, "init sp AdMax") LogEx.logDebug(TAG, "init sp AdMax")
// BaseApplication.context.initAdMax() BaseApplication.context.initAdMax()
// } }
} }
} }
//End end //End end
fun isOpenAdLoaded(): Boolean { fun isOpenAdLoaded(): Boolean {
// if (getSpAdmobTrueMaxFalse()) { if (getSpAdmobTrueMaxFalse()) {
// return AdmobOpenUtils.isOpenAdLoaded()
// } else { } else {
// AdMaxOpenUtils.isOpenAdLoaded() return AdMaxOpenUtils.isOpenAdLoaded()
// } }
return AdmobOpenUtils.isOpenAdLoaded()
} }
//展示广告关闭时赋值 //展示广告关闭时赋值
...@@ -96,14 +105,14 @@ object AdmobMaxHelper { ...@@ -96,14 +105,14 @@ object AdmobMaxHelper {
return return
} }
if (true) { if (getSpAdmobTrueMaxFalse()) {
AdmobInterstitialUtils.showInterstitialAd(activity) { AdmobInterstitialUtils.showInterstitialAd(activity) {
onHidden?.invoke() onHidden?.invoke()
} }
} else { } else {
// AdMaxInterstitialUtils.showInterstitialAd(activity) { AdMaxInterstitialUtils.showInterstitialAd(activity) {
// onHidden?.invoke() onHidden?.invoke()
// } }
} }
} }
...@@ -116,47 +125,40 @@ object AdmobMaxHelper { ...@@ -116,47 +125,40 @@ object AdmobMaxHelper {
onHidden?.invoke() onHidden?.invoke()
return return
} }
if (true) { if (getSpAdmobTrueMaxFalse()) {
AdmobOpenUtils.showAppOpenAd(activity, showBefore = showBeforeAction) { AdmobOpenUtils.showAppOpenAd(activity, showBefore = showBeforeAction) {
onHidden?.invoke() onHidden?.invoke()
} }
} else { } else {
// AdMaxOpenUtils.showAppOpenAd(activity, loadCallBack = showBeforeAction) { AdMaxOpenUtils.showAppOpenAd(activity, showBefore = showBeforeAction, loadCallBack = showBeforeAction) {
// onHidden?.invoke() onHidden?.invoke()
// } }
} }
} }
fun admobMaxShowNativeAd(activity: Activity, parent: ViewGroup, where: Int = 0) { fun admobMaxShowNativeAd(activity: Activity, parent: ViewGroup, where: Int = -1) {
if (isBlack) { if (isBlack) {
return return
} }
val isShowResultNaAd =
AppPreferences.getInstance().getString("isShowResultNaAd", "0").toInt() if (getSpAdmobTrueMaxFalse()) {
Log.e("MXL", "admobMaxShowNativeAd: $isShowResultNaAd") val layout = when (where) {
if (isShowResultNaAd == 0) 0 -> R.layout.layout_native_custom
return 1 -> R.layout.layout_nativie_custom2
var layout = R.layout.layout_native_custom 3 -> R.layout.layout_native_full
when (where) { else -> R.layout.layout_native_custom
0 -> layout = R.layout.layout_native_custom }
1 -> layout = R.layout.layout_nativie_custom2 AdmobNativeUtils.showNativeAd(activity, parent, layout)
} else {
val layout = when (where) {
0 -> R.layout.layout_max_native_small_f8f8f8
1 -> R.layout.layout_max_native_big
2 -> R.layout.layout_max_native_big_2
3 -> R.layout.layout_max_native_full
else -> R.layout.layout_max_native_small_f8f8f8
}
AdMaxNativeUtils.showNativeAd(activity, parent, layout)
} }
AdmobNativeUtils.showNativeAd(activity, parent, layout)
// if (true) {
// 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 preloadAd(activity: Activity) { fun preloadAd(activity: Activity) {
...@@ -164,19 +166,18 @@ object AdmobMaxHelper { ...@@ -164,19 +166,18 @@ object AdmobMaxHelper {
return return
} }
if (true) { if (getSpAdmobTrueMaxFalse()) {
// AdmobOpenUtils.loadAppOpenAd() // AdmobOpenUtils.loadAppOpenAd()
AdmobInterstitialUtils.loadInterstitialAd(activity) AdmobInterstitialUtils.loadInterstitialAd(activity)
} else { } else {
if (isAdInit.get()) { if (isAdInit.get()) {
// AdMaxOpenUtils.loadAppOpenAd(activity) AdMaxOpenUtils.loadAppOpenAd(activity)
// AdMaxInterstitialUtils.loadInterstitialAd(activity) AdMaxInterstitialUtils.loadInterstitialAd(activity)
} else { } else {
// AdMaxInit.maxInitAction = { // AdMaxInit.maxInitAction = {
Log.d(TAG, "max init suc") Log.d(TAG, "max init suc")
// AdMaxOpenUtils.loadAppOpenAd(activity) AdMaxOpenUtils.loadAppOpenAd(activity)
// AdMaxInterstitialUtils.loadInterstitialAd(activity) AdMaxInterstitialUtils.loadInterstitialAd(activity)
// }
} }
} }
} }
......
...@@ -9,6 +9,7 @@ import android.view.ViewTreeObserver ...@@ -9,6 +9,7 @@ import android.view.ViewTreeObserver
import androidx.core.view.children import androidx.core.view.children
import com.base.filerecoveryrecyclebin.BuildConfig import com.base.filerecoveryrecyclebin.BuildConfig
import com.base.filerecoveryrecyclebin.GlobalConfig import com.base.filerecoveryrecyclebin.GlobalConfig
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.help.ConfigHelper import com.base.filerecoveryrecyclebin.help.ConfigHelper
import com.base.filerecoveryrecyclebin.utils.AppPreferences import com.base.filerecoveryrecyclebin.utils.AppPreferences
import com.base.filerecoveryrecyclebin.utils.LogEx import com.base.filerecoveryrecyclebin.utils.LogEx
...@@ -26,6 +27,9 @@ object AdmobBannerUtils { ...@@ -26,6 +27,9 @@ object AdmobBannerUtils {
private var listener: ViewTreeObserver.OnGlobalLayoutListener? = null private var listener: ViewTreeObserver.OnGlobalLayoutListener? = null
fun showCollapsibleBannerAd(context: Context, parent: ViewGroup) { fun showCollapsibleBannerAd(context: Context, parent: ViewGroup) {
if (!AdmobMaxHelper.getSpAdmobTrueMaxFalse()) return
val isShowBanner = AppPreferences.getInstance().getString("isShowBanner", "0").toInt() val isShowBanner = AppPreferences.getInstance().getString("isShowBanner", "0").toInt()
if (isShowBanner == 0) { if (isShowBanner == 0) {
return return
......
//package com.base.filerecoveryrecyclebin.ads.max package com.base.filerecoveryrecyclebin.ads.max
//
//import android.content.Context import android.content.Context
//import com.applovin.sdk.AppLovinMediationProvider import com.applovin.sdk.AppLovinMediationProvider
//import com.applovin.sdk.AppLovinSdk import com.applovin.sdk.AppLovinSdk
//import com.applovin.sdk.AppLovinSdkInitializationConfiguration import com.applovin.sdk.AppLovinSdkInitializationConfiguration
//import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper.isAdInit import com.base.filerecoveryrecyclebin.BuildConfig
//import com.base.filerecoveryrecyclebin.utils.EventUtils import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper.isAdInit
//import com.base.filerecoveryrecyclebin.utils.LogEx import com.base.filerecoveryrecyclebin.utils.EventUtils
//import java.util.concurrent.Executors import com.base.filerecoveryrecyclebin.utils.LogEx
// import com.google.android.gms.ads.identifier.AdvertisingIdClient
//object AdMaxInit { import java.util.Collections
// import java.util.concurrent.Executors
// private val TAG = "AdMaxInit"
// var maxInitAction: (() -> Unit)? = null object AdMaxInit {
//
// fun Context.initAdMax() { private val TAG = "AdMaxInit"
// // If you want to test your own AppLovin SDK key, change the value here and update the package name in the build.gradle var maxInitAction: (() -> Unit)? = null
//// val YOUR_SDK_KEY = "05TMDQ5tZabpXQ45_UTbmEGNUtVAzSTzT6KmWQc5_CuWdzccS4DCITZoL3yIWUG3bbq60QC_d4WF28tUC4gVTF"
// val YOUR_SDK_KEY = "GGPreND6SRmCt1zJgn5faiLGD8c2PVGPLgPpSg7cHanVTud1DhtuI9MmteTqlEviaJ57WnxW68kQDaATJ5z3cW" fun Context.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 executor = Executors.newSingleThreadExecutor(); // val YOUR_SDK_KEY = "05TMDQ5tZabpXQ45_UTbmEGNUtVAzSTzT6KmWQc5_CuWdzccS4DCITZoL3yIWUG3bbq60QC_d4WF28tUC4gVTF"
// executor.execute { val YOUR_SDK_KEY = "GGPreND6SRmCt1zJgn5faiLGD8c2PVGPLgPpSg7cHanVTud1DhtuI9MmteTqlEviaJ57WnxW68kQDaATJ5z3cW"
//
// val initConfigBuilder = AppLovinSdkInitializationConfiguration.builder(YOUR_SDK_KEY, this) val executor = Executors.newSingleThreadExecutor();
// initConfigBuilder.mediationProvider = AppLovinMediationProvider.MAX executor.execute {
//
// // Enable test mode by default for the current device. Cannot be run on the main thread. val initConfigBuilder = AppLovinSdkInitializationConfiguration.builder(YOUR_SDK_KEY, this)
//// val currentGaid = AdvertisingIdClient.getAdvertisingIdInfo(this).id initConfigBuilder.mediationProvider = AppLovinMediationProvider.MAX
//// if (currentGaid != null) {
//// initConfigBuilder.testDeviceAdvertisingIds = Collections.singletonList(currentGaid) // Enable test mode by default for the current device. Cannot be run on the main thread.
//// } if (BuildConfig.DEBUG) {
// kotlin.runCatching {
// val currentGaid = AdvertisingIdClient.getAdvertisingIdInfo(this).id
// // Initialize the AppLovin SDK if (currentGaid != null) {
// val sdk = AppLovinSdk.getInstance(this) initConfigBuilder.testDeviceAdvertisingIds = Collections.singletonList(currentGaid)
// sdk.initialize(initConfigBuilder.build()) { }
// LogEx.logDebug(TAG, "max init") }
// isAdInit.set(true) }
// maxInitAction?.invoke()
// maxInitAction = null // Initialize the AppLovin SDK
// EventUtils.event("MaxInit", "MaxInit") val sdk = AppLovinSdk.getInstance(this)
// } sdk.initialize(initConfigBuilder.build()) {
// LogEx.logDebug(TAG, "max init")
// executor.shutdown() isAdInit.set(true)
// } maxInitAction?.invoke()
// } maxInitAction = null
//} EventUtils.event("MaxInit", "MaxInit")
\ No newline at end of file }
executor.shutdown()
}
}
}
\ No newline at end of file
...@@ -11,8 +11,6 @@ object ConstObject { ...@@ -11,8 +11,6 @@ object ConstObject {
const val ID_RECOVERY_VIDEOS = 13001 const val ID_RECOVERY_VIDEOS = 13001
const val ID_RECOVERY_DOCUMENTS = 13002 const val ID_RECOVERY_DOCUMENTS = 13002
const val ID_WHATSAPP = 12001 const val ID_WHATSAPP = 12001
const val ID_APP_PROCESS = 12056
const val ID_APP_MANAGER = 12076
const val ID_BATTERY_INFO = 12086 const val ID_BATTERY_INFO = 12086
const val ID_WHEATHER = 12087 const val ID_WHEATHER = 12087
const val ID_XINGZUO = 12088 const val ID_XINGZUO = 12088
...@@ -26,9 +24,6 @@ object ConstObject { ...@@ -26,9 +24,6 @@ object ConstObject {
const val SCREENSHOT_CLEANER = "Screenshot Cleaner" const val SCREENSHOT_CLEANER = "Screenshot Cleaner"
const val PRIVACY_SPACE = "Privacy Space" const val PRIVACY_SPACE = "Privacy Space"
const val RECYCLE_BIN = "Recycle Bin" const val RECYCLE_BIN = "Recycle Bin"
const val WHATSAPP_CLEANER = "WhatsApp Cleaner"
const val APP_PROCESS = "App Process"
const val APP_MANAGER = "App Manager"
const val LARGE_FILE = "Large File" const val LARGE_FILE = "Large File"
const val BATTERY_INFO = "Battery Info" const val BATTERY_INFO = "Battery Info"
......
package com.base.filerecoveryrecyclebin.fragment package com.base.filerecoveryrecyclebin.fragment
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Intent import com.base.filerecoveryrecyclebin.BuildConfig
import androidx.core.view.isVisible
import com.base.filerecoveryrecyclebin.R import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.activity.MainActivity
import com.base.filerecoveryrecyclebin.activity.guide.CleanGuideActivity
import com.base.filerecoveryrecyclebin.activity.guide.GuideActivity import com.base.filerecoveryrecyclebin.activity.guide.GuideActivity
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.databinding.FragmentGuideBinding import com.base.filerecoveryrecyclebin.databinding.FragmentGuideBinding
import com.base.filerecoveryrecyclebin.help.BaseFragment import com.base.filerecoveryrecyclebin.help.BaseFragment
import com.base.filerecoveryrecyclebin.utils.AppPreferences
class GuideFragment : BaseFragment<FragmentGuideBinding>() { class GuideFragment : BaseFragment<FragmentGuideBinding>() {
...@@ -25,56 +21,50 @@ class GuideFragment : BaseFragment<FragmentGuideBinding>() { ...@@ -25,56 +21,50 @@ class GuideFragment : BaseFragment<FragmentGuideBinding>() {
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
override fun setView() { override fun setView() {
if (page == 1) {
binding.iv.setImageResource(R.mipmap.yindaoye1) when (page) {
binding.tv0.text = "Deleted precious photos or important\n" + 0 -> {
"filesbyaccident?Regret kicks in." binding.iv.setImageResource(R.mipmap.yindaotu1)
binding.tvBtn.text = "Next" binding.ivDian.setImageResource(R.mipmap.dian1)
} else if (page == 2) { binding.tvContent.text = "Clean up clutter to unlock more space and\n" +
binding.iv.setImageResource(R.mipmap.yindaoye2) "keep your phone running smoothly."
binding.tv0.text = "Don't leave any regrets! Our APP\n" + }
"can accurately retrieve the files\n" +
"you've accidentally deleted." 1 -> {
binding.tvBtn.text = "Next" binding.iv.setImageResource(R.mipmap.yindaotu2)
// binding.flSkip.visibility = View.GONE binding.ivDian.setImageResource(R.mipmap.dian2)
} else { binding.tvContent.text = "Quickly clear junk files and free up valuable\n" +
binding.iv.isVisible = false "storage with just a few taps."
binding.tv0.isVisible = false }
binding.idLl111.isVisible = true
binding.tvBtn.text = "Next" 3 -> {
binding.iv.setImageResource(R.mipmap.yindaotu3)
binding.ivDian.setImageResource(R.mipmap.dian3)
binding.tvContent.text = "Clean photos,videos,and audio files to\n" +
"save space and keep your phone tidy."
}
} }
} }
override fun setListener() { override fun setListener() {
super.setListener() super.setListener()
binding.tvBtn.setOnClickListener { binding.tvBtn.setOnClickListener {
if (page == 1) { val activity = requireActivity() as GuideActivity?
(requireActivity() as GuideActivity).setPosition(1) activity ?: requireActivity()
} else if (page == 2) { activity?.next(page)
(requireActivity() as GuideActivity).setPosition(2)
} else {
(requireActivity() as GuideActivity).lauchPermisson()
}
}
binding.idTvAllow.setOnClickListener {
(requireActivity() as GuideActivity).lauchPermisson()
}
binding.idTvNotAllow.setOnClickListener {
startActivity(Intent(requireContext(), MainActivity::class.java))
requireActivity().finish()
} }
} }
private fun jumpNext() { override fun onResume() {
val showAd = AppPreferences.getInstance().getString("isShowGuideAd", "0")?.toInt() super.onResume()
if (showAd == 1) {
AdmobMaxHelper.admobMaxShowInterstitialAd(requireActivity(), isLoading = false) { if (AdmobMaxHelper.showGuideNativeSp() || BuildConfig.DEBUG) {
startActivity(Intent(requireContext(), CleanGuideActivity::class.java)) kotlin.runCatching {
requireActivity().finish() AdmobMaxHelper.admobMaxShowNativeAd(requireActivity(), binding.flAd)
} }
} else {
startActivity(Intent(requireContext(), CleanGuideActivity::class.java))
requireActivity().finish()
} }
} }
} }
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#4676FF" />
<corners android:radius="69dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#EBF3FF" />
<corners android:radius="16dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#80000000" />
<corners android:radius="0dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@mipmap/icon_yuan_s" android:state_selected="true" />
<item android:drawable="@mipmap/icon_yuan_n" android:state_selected="false" />
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activity.guide.WhichWantGuideActivity">
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="35dp"
android:layout_marginTop="56dp"
android:gravity="center"
android:text="Which type do you want to clean?"
android:textSize="24sp"
android:textStyle="bold"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="vertical"
app:layout_constraintTop_toBottomOf="@id/tv">
<LinearLayout
android:id="@+id/llPhoto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginVertical="4dp"
android:background="@drawable/bg_ebf3ff_16"
android:foreground="?attr/selectableItemBackground"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginVertical="12dp"
android:layout_marginStart="20dp"
android:src="@mipmap/icon_photo"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="25dp"
android:layout_weight="1"
android:text="Photo"
android:textColor="#111111"
android:textSize="20sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/iv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="20dp"
android:background="@drawable/bg_select_yuan"
tools:ignore="ContentDescription" />
</LinearLayout>
<LinearLayout
android:id="@+id/llVideo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginVertical="4dp"
android:background="@drawable/bg_ebf3ff_16"
android:foreground="?attr/selectableItemBackground"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginVertical="12dp"
android:layout_marginStart="20dp"
android:src="@mipmap/icon_video" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="25dp"
android:layout_weight="1"
android:text="Video"
android:textColor="#111111"
android:textSize="20sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/iv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="20dp"
android:background="@drawable/bg_select_yuan" />
</LinearLayout>
<LinearLayout
android:id="@+id/llAudio"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginVertical="4dp"
android:background="@drawable/bg_ebf3ff_16"
android:foreground="?attr/selectableItemBackground"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginVertical="12dp"
android:layout_marginStart="20dp"
android:src="@mipmap/icon_audio" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="25dp"
android:layout_weight="1"
android:text="Audio"
android:textColor="#111111"
android:textSize="20sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/iv3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="20dp"
android:background="@drawable/bg_select_yuan" />
</LinearLayout>
<LinearLayout
android:id="@+id/llDocument"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginVertical="4dp"
android:background="@drawable/bg_ebf3ff_16"
android:foreground="?attr/selectableItemBackground"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginVertical="12dp"
android:layout_marginStart="20dp"
android:src="@mipmap/icon_document" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="25dp"
android:layout_weight="1"
android:text="Document"
android:textColor="#111111"
android:textSize="20sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/iv4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="20dp"
android:background="@drawable/bg_select_yuan" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/llContinue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:orientation="horizontal"
android:padding="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/ll">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Continue"
android:textColor="#1364FF"
android:textSize="17sp"
android:textStyle="bold" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@mipmap/jiantou" />
</LinearLayout>
<FrameLayout
android:id="@+id/flAd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#EDEDED"
android:minHeight="80dp"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="300dp"
android:layout_height="124dp"
android:layout_gravity="center"
android:background="@drawable/bg_ffffff_10"
tools:ignore="UselessParent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/loading_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginStart="20dp"
android:layout_marginTop="20dp"
android:scaleType="centerInside"
android:src="@mipmap/zhuanquan"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="32dp"
android:text="AD LOADING"
android:textColor="#ff111111"
android:textSize="20sp"
app:layout_constraintStart_toEndOf="@id/loading_image"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/countdown_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="Ads are about to be shown"
android:textColor="#ff666666"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/loading_image"
tools:ignore="HardcodedText" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</LinearLayout>
...@@ -4,160 +4,94 @@ ...@@ -4,160 +4,94 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="#EFEFEF" android:background="#FFFFFF"
tools:context=".fragment.GuideFragment"> tools:context=".fragment.GuideFragment">
<TextView
android:id="@+id/tvSkip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:layout_marginEnd="20dp"
android:text="Skip"
android:textColor="#B6B6B6"
android:textSize="16sp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView <ImageView
android:id="@+id/iv" android:id="@+id/iv"
android:layout_width="200dp" android:layout_width="wrap_content"
android:layout_height="200dp" android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.25" app:layout_constraintVertical_bias="0.3"
tools:ignore="ContentDescription" tools:ignore="ContentDescription"
tools:src="@mipmap/yindaoye1" /> tools:src="@mipmap/yindaotu1" />
<androidx.appcompat.widget.LinearLayoutCompat <TextView
android:id="@+id/id_ll_111" android:id="@+id/tvContent"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp"
android:layout_marginTop="18dp"
android:gravity="center" android:gravity="center"
android:orientation="vertical" android:text="Clean up clutter to unlock more space and keep your phone running smoothly."
android:visibility="gone" android:textColor="#000000"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toBottomOf="@id/iv" />
<TextView <ImageView
android:id="@+id/id_tv_need" android:id="@+id/ivDian"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="100dp"
android:text="Need to obtain storage permissions"
android:textColor="#000000"
android:textSize="15sp"
android:textStyle="bold"
android:visibility="visible" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/id_ll_need"
android:layout_width="264dp"
android:layout_height="wrap_content"
android:layout_marginTop="74dp"
android:background="@drawable/shape_ffffff_r20"
android:gravity="center_horizontal"
android:orientation="vertical"
android:visibility="visible">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:src="@mipmap/folder" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp"
android:layout_marginTop="18dp"
android:text="Allow Dumpster: Photo Recovery to
access all files on your device?"
android:textColor="#7D7D7D"
android:textSize="13sp" />
<TextView
android:id="@+id/id_tv_allow"
android:layout_width="match_parent"
android:layout_height="38dp"
android:layout_marginHorizontal="40dp"
android:layout_marginTop="18dp"
android:background="@drawable/shape_f5f5f5_r8"
android:gravity="center"
android:text="allow"
android:textColor="#4773FF"
android:textSize="13sp" />
<TextView
android:id="@+id/id_tv_not_allow"
android:layout_width="match_parent"
android:layout_height="38dp"
android:layout_marginHorizontal="40dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="12dp"
android:background="@drawable/shape_f5f5f5_r8"
android:gravity="center"
android:text="not allow"
android:textColor="#A7A7A7"
android:textSize="13sp" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
<LinearLayout
android:id="@+id/ll"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="120dp" android:layout_height="wrap_content"
android:layout_marginTop="50dp" android:layout_marginTop="25dp"
android:orientation="vertical" android:src="@mipmap/dian1"
app:layout_constraintEnd_toEndOf="@id/iv" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/iv" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv"> app:layout_constraintTop_toBottomOf="@id/tvContent" />
<TextView
android:id="@+id/tv_0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginHorizontal="40dp"
android:text="Deleted precious photos or important
filesbyaccident?Regret kicks in."
android:textSize="15sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1">
<TextView
android:id="@+id/tv_1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center|bottom"
android:text="One click scanning can restore various\ntypes of files such as photos,video,audio,\ndocuments,etc"
android:textSize="18sp"
android:visibility="gone"
tools:ignore="HardcodedText" />
</FrameLayout>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/tv_btn"
app:layout_constraintTop_toBottomOf="@id/ll" />
<TextView <TextView
android:id="@+id/tv_btn" android:id="@+id/tv_btn"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="45dp" android:layout_height="45dp"
android:layout_marginHorizontal="30dp" android:layout_marginHorizontal="80dp"
android:layout_marginTop="24dp"
android:layout_marginBottom="28dp" android:layout_marginBottom="28dp"
android:background="@drawable/bg_577dfd_10" android:background="@drawable/bg_4676ff_69"
android:gravity="center" android:gravity="center"
android:text="Next"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="18sp" android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ivDian"
tools:ignore="MissingConstraints" /> tools:ignore="MissingConstraints" />
<FrameLayout
android:id="@+id/flAd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#D9D9D9"
android:minHeight="75dp"
app:layout_constraintBottom_toBottomOf="parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="AD"
android:textColor="#ffffff"
android:textSize="16sp" />
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/flAd"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#D9D9D9"
tools:context=".activity.guide.NativeFullFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="@color/white">
<TextView
android:layout_width="match_parent"
android:layout_height="80dp"
android:layout_marginTop="16dp"
android:background="#D9D9D9"
android:gravity="center"
android:text="ad"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold" />
</LinearLayout>
</FrameLayout>
\ No newline at end of file
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:background="@drawable/bg_ad_border_ffffff"
android:baselineAligned="false"
android:orientation="vertical"
android:padding="10dp"
tools:ignore="UselessParent">
<FrameLayout
android:id="@+id/ad_media"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="center_vertical"
android:layout_marginTop="10dp"
android:layout_weight="1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/ad_app_icon"
android:layout_width="46dp"
android:layout_height="46dp"
android:layout_gravity="center_vertical"
tools:ignore="ContentDescription" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="8dp"
android:layout_weight="1"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="#FF923E"
android:padding="2dp"
android:paddingHorizontal="3dp"
android:text="Ad"
android:textColor="@color/white"
android:textSize="12sp"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/ad_headline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:ellipsize="end"
android:maxLines="2"
android:textColor="@color/black"
android:textSize="14sp"
android:textStyle="bold" />
</LinearLayout>
<TextView
android:id="@+id/ad_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:textColor="@color/black"
android:textSize="12sp" />
</LinearLayout>
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/ad_call_to_action"
android:layout_width="wrap_content"
android:layout_height="38dp"
android:layout_gravity="center_vertical"
android:background="@drawable/bg_ad_button_0073c3"
android:gravity="center"
android:textAllCaps="false"
android:textColor="@color/white"
android:textSize="15sp"
tools:text="Install" />
</LinearLayout>
</LinearLayout>
</FrameLayout>
\ No newline at end of file
<com.google.android.gms.ads.nativead.NativeAdView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_ad_border">
<com.google.android.gms.ads.nativead.MediaView
android:id="@+id/ad_media"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@id/ll"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="8dp"
android:layout_marginTop="11dp"
android:layout_weight="1"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="4dp"
android:background="#FF923E"
android:padding="2dp"
android:text="Ad"
android:textColor="@color/white"
android:textSize="12sp"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/ad_headline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/black"
android:textSize="14sp"
android:textStyle="bold"
tools:text="Competition Countdown" />
</LinearLayout>
<TextView
android:id="@+id/ad_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:textColor="@color/black"
android:textSize="12sp"
tools:text="Best competitions, One App We don't run any competitions,we just show you them all in one" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingVertical="14dp">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/ad_call_to_action"
android:layout_width="match_parent"
android:layout_height="36dp"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="8dp"
android:background="@drawable/bg_ad_button"
android:gravity="center"
android:textColor="@color/white"
android:textSize="15sp" />
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.gms.ads.nativead.NativeAdView>
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