Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
F
File Recovery RecycleBin
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wanglei
File Recovery RecycleBin
Commits
230eb832
Commit
230eb832
authored
Mar 13, 2025
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...
parent
c1d33939
Show whitespace changes
Inline
Side-by-side
Showing
43 changed files
with
1671 additions
and
1857 deletions
+1671
-1857
AndroidManifest.xml
app/src/main/AndroidManifest.xml
+10
-74
AppManagerActivity.kt
...overyrecyclebin/activity/appmanager/AppManagerActivity.kt
+0
-130
AppManagerAnimationActivity.kt
...clebin/activity/appmanager/AppManagerAnimationActivity.kt
+0
-71
AppProcessActivity.kt
...overyrecyclebin/activity/appprocess/AppProcessActivity.kt
+0
-113
AppProcessAnimationActivity.kt
...clebin/activity/appprocess/AppProcessAnimationActivity.kt
+0
-71
GuideActivity.kt
...se/filerecoveryrecyclebin/activity/guide/GuideActivity.kt
+26
-24
StartUtils.kt
...base/filerecoveryrecyclebin/activity/splash/StartUtils.kt
+3
-24
WhatsAppCleanerActivity.kt
...ryrecyclebin/activity/whatsapp/WhatsAppCleanerActivity.kt
+0
-183
WhatsAppCleanerAnimationActivity.kt
...bin/activity/whatsapp/WhatsAppCleanerAnimationActivity.kt
+0
-76
WhatsAppMessageCleanActivity.kt
...yclebin/activity/whatsapp/WhatsAppMessageCleanActivity.kt
+0
-107
AdCommonUtils.kt
...java/com/base/filerecoveryrecyclebin/ads/AdCommonUtils.kt
+0
-27
AdmobMaxHelper.kt
...ava/com/base/filerecoveryrecyclebin/ads/AdmobMaxHelper.kt
+57
-56
AdmobBannerColla.kt
...base/filerecoveryrecyclebin/ads/admob/AdmobBannerColla.kt
+4
-0
AdMaxEvent.kt
...ava/com/base/filerecoveryrecyclebin/ads/max/AdMaxEvent.kt
+144
-144
AdMaxInit.kt
...java/com/base/filerecoveryrecyclebin/ads/max/AdMaxInit.kt
+54
-48
AdMaxInterstitialUtils.kt
.../filerecoveryrecyclebin/ads/max/AdMaxInterstitialUtils.kt
+281
-196
AdMaxNativeUtils.kt
...m/base/filerecoveryrecyclebin/ads/max/AdMaxNativeUtils.kt
+164
-160
AdMaxOpenUtils.kt
...com/base/filerecoveryrecyclebin/ads/max/AdMaxOpenUtils.kt
+277
-179
ConstObject.kt
.../java/com/base/filerecoveryrecyclebin/bean/ConstObject.kt
+0
-5
GuideFragment.kt
...com/base/filerecoveryrecyclebin/fragment/GuideFragment.kt
+35
-45
bg_4676ff_69.xml
app/src/main/res/drawable/bg_4676ff_69.xml
+7
-0
bg_ebf3ff_16.xml
app/src/main/res/drawable/bg_ebf3ff_16.xml
+7
-0
bg_loadingads.xml
app/src/main/res/drawable/bg_loadingads.xml
+6
-0
bg_select_yuan.xml
app/src/main/res/drawable/bg_select_yuan.xml
+5
-0
activity_which_want_guide.xml
app/src/main/res/layout/activity_which_want_guide.xml
+223
-0
dialog_loading.xml
app/src/main/res/layout/dialog_loading.xml
+65
-0
fragment_guide.xml
app/src/main/res/layout/fragment_guide.xml
+58
-124
fragment_native_full.xml
app/src/main/res/layout/fragment_native_full.xml
+30
-0
layout_max_native_full.xml
app/src/main/res/layout/layout_max_native_full.xml
+105
-0
layout_native_full.xml
app/src/main/res/layout/layout_native_full.xml
+110
-0
dian1.png
app/src/main/res/mipmap-xxhdpi/dian1.png
+0
-0
dian2.png
app/src/main/res/mipmap-xxhdpi/dian2.png
+0
-0
dian3.png
app/src/main/res/mipmap-xxhdpi/dian3.png
+0
-0
icon_audio.png
app/src/main/res/mipmap-xxhdpi/icon_audio.png
+0
-0
icon_document.png
app/src/main/res/mipmap-xxhdpi/icon_document.png
+0
-0
icon_photo.png
app/src/main/res/mipmap-xxhdpi/icon_photo.png
+0
-0
icon_video.png
app/src/main/res/mipmap-xxhdpi/icon_video.png
+0
-0
icon_yuan_n.png
app/src/main/res/mipmap-xxhdpi/icon_yuan_n.png
+0
-0
icon_yuan_s.png
app/src/main/res/mipmap-xxhdpi/icon_yuan_s.png
+0
-0
yindaotu1.png
app/src/main/res/mipmap-xxhdpi/yindaotu1.png
+0
-0
yindaotu2.png
app/src/main/res/mipmap-xxhdpi/yindaotu2.png
+0
-0
yindaotu3.png
app/src/main/res/mipmap-xxhdpi/yindaotu3.png
+0
-0
zhuanquan.png
app/src/main/res/mipmap-xxhdpi/zhuanquan.png
+0
-0
No files found.
app/src/main/AndroidManifest.xml
View file @
230eb832
...
@@ -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"
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/activity/appmanager/AppManagerActivity.kt
deleted
100644 → 0
View file @
c1d33939
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
app/src/main/java/com/base/filerecoveryrecyclebin/activity/appmanager/AppManagerAnimationActivity.kt
deleted
100644 → 0
View file @
c1d33939
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
app/src/main/java/com/base/filerecoveryrecyclebin/activity/appprocess/AppProcessActivity.kt
deleted
100644 → 0
View file @
c1d33939
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
app/src/main/java/com/base/filerecoveryrecyclebin/activity/appprocess/AppProcessAnimationActivity.kt
deleted
100644 → 0
View file @
c1d33939
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
app/src/main/java/com/base/filerecoveryrecyclebin/activity/guide/GuideActivity.kt
View file @
230eb832
...
@@ -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
,
page
Native
,
page
3
)
}
}
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
}
}
})
})
}
fun
next
(
page
:
Int
)
{
val
normalColor
=
ContextCompat
.
getColor
(
this
,
R
.
color
.
color_cccccc
)
if
(
page
==
0
)
{
val
selectedColor
=
ContextCompat
.
getColor
(
this
,
R
.
color
.
color_4f86eb
)
binding
.
viewpager2
.
currentItem
=
1
binding
.
indicatorView
return
.
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
()
{
if
(
page
==
1
)
{
binding
.
viewpager2
.
currentItem
=
2
return
}
if
(
page
==
3
)
{
startActivity
(
Intent
(
this
,
CleanGuideActivity
::
class
.
java
))
startActivity
(
Intent
(
this
,
CleanGuideActivity
::
class
.
java
))
finish
()
finish
()
requestStorePermission
(
launcher
)
{
}
}
}
}
}
}
\ No newline at end of file
app/src/main/java/com/base/filerecoveryrecyclebin/activity/splash/StartUtils.kt
View file @
230eb832
...
@@ -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.
WhichWant
GuideActivity
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
))
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/activity/whatsapp/WhatsAppCleanerActivity.kt
deleted
100644 → 0
View file @
c1d33939
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
app/src/main/java/com/base/filerecoveryrecyclebin/activity/whatsapp/WhatsAppCleanerAnimationActivity.kt
deleted
100644 → 0
View file @
c1d33939
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
app/src/main/java/com/base/filerecoveryrecyclebin/activity/whatsapp/WhatsAppMessageCleanActivity.kt
deleted
100644 → 0
View file @
c1d33939
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
app/src/main/java/com/base/filerecoveryrecyclebin/ads/AdCommonUtils.kt
deleted
100644 → 0
View file @
c1d33939
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
app/src/main/java/com/base/filerecoveryrecyclebin/ads/AdmobMaxHelper.kt
View file @
230eb832
...
@@ -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
())
{
//
// } else {
// AdMaxOpenUtils.isOpenAdLoaded()
// }
return
AdmobOpenUtils
.
isOpenAdLoaded
()
return
AdmobOpenUtils
.
isOpenAdLoaded
()
}
else
{
return
AdMaxOpenUtils
.
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
)
AdmobNativeUtils
.
showNativeAd
(
activity
,
parent
,
layout
)
// if (true) {
}
else
{
// AdmobNativeUtils.showNativeAd(activity, parent)
val
layout
=
when
(
where
)
{
// } else {
0
->
R
.
layout
.
layout_max_native_small_f8f8f8
//// var layout = R.layout.layout_max_native_small
1
->
R
.
layout
.
layout_max_native_big
//// if (where == 0) {
2
->
R
.
layout
.
layout_max_native_big_2
//// layout = R.layout.layout_max_native_small_f8f8f8
3
->
R
.
layout
.
layout_max_native_full
//// }
else
->
R
.
layout
.
layout_max_native_small_f8f8f8
//// if (where == 1) {
}
//// layout = R.layout.layout_max_native_big
AdMaxNativeUtils
.
showNativeAd
(
activity
,
parent
,
layout
)
//// }
}
//// 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
)
// }
}
}
}
}
}
}
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/ads/admob/AdmobBannerColla.kt
View file @
230eb832
...
@@ -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
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/ads/max/AdMaxEvent.kt
View file @
230eb832
//package com.base.filerecoveryrecyclebin.ads.max
package
com.base.filerecoveryrecyclebin.ads.max
//
//import android.os.Bundle
import
android.os.Bundle
//import com.applovin.mediation.MaxAd
import
com.applovin.mediation.MaxAd
//import com.applovin.mediation.MaxAdRevenueListener
import
com.applovin.mediation.MaxAdRevenueListener
//import com.applovin.sdk.AppLovinSdk
import
com.applovin.sdk.AppLovinSdk
//import com.base.filerecoveryrecyclebin.help.BaseApplication
import
com.base.filerecoveryrecyclebin.help.BaseApplication
//import com.base.filerecoveryrecyclebin.utils.EventUtils
import
com.base.filerecoveryrecyclebin.utils.EventUtils
//import com.base.filerecoveryrecyclebin.utils.LogEx
import
com.base.filerecoveryrecyclebin.utils.LogEx
//import com.facebook.FacebookSdk
import
com.facebook.FacebookSdk
//import com.facebook.appevents.AppEventsConstants
import
com.facebook.appevents.AppEventsConstants
//import com.facebook.appevents.AppEventsLogger
import
com.facebook.appevents.AppEventsLogger
//import com.google.firebase.analytics.FirebaseAnalytics
import
com.google.firebase.analytics.FirebaseAnalytics
//import org.json.JSONObject
import
org.json.JSONObject
//
//object AdMaxEvent {
object
AdMaxEvent
{
// fun pullAd(ad: MaxAd?, adUnit: String, error: String? = null, reqId: String? = null, code: Int? = null) {
fun
pullAd
(
ad
:
MaxAd
?,
adUnit
:
String
,
error
:
String
?
=
null
,
reqId
:
String
?
=
null
,
code
:
Int
?
=
null
)
{
// val obj = JSONObject()
val
obj
=
JSONObject
()
// obj.put("UnitId", ad?.adUnitId)
obj
.
put
(
"UnitId"
,
ad
?.
adUnitId
)
// obj.put("ad_unit", adUnit)
obj
.
put
(
"ad_unit"
,
adUnit
)
// obj.put(
obj
.
put
(
// "creativeId",
"creativeId"
,
// ad?.creativeId
ad
?.
creativeId
// )
)
// obj.put("req_id", reqId)
obj
.
put
(
"req_id"
,
reqId
)
// obj.put("status", if (ad == null) "0" else "1")
obj
.
put
(
"status"
,
if
(
ad
==
null
)
"0"
else
"1"
)
// obj.put("networkname", ad?.networkName)
obj
.
put
(
"networkname"
,
ad
?.
networkName
)
// obj.put("placement", ad?.placement)
obj
.
put
(
"placement"
,
ad
?.
placement
)
// obj.put("networkplacement", ad?.networkPlacement)
obj
.
put
(
"networkplacement"
,
ad
?.
networkPlacement
)
// obj.put("latency", ad?.requestLatencyMillis)
obj
.
put
(
"latency"
,
ad
?.
requestLatencyMillis
)
// obj.put("valueMicros", ad?.revenue)
obj
.
put
(
"valueMicros"
,
ad
?.
revenue
)
// if (error == null) {
if
(
error
==
null
)
{
// obj.put("status", "1")
obj
.
put
(
"status"
,
"1"
)
// } else {
}
else
{
// obj.put("errMsg", error)
obj
.
put
(
"errMsg"
,
error
)
// obj.put("status", "2")
obj
.
put
(
"status"
,
"2"
)
// }
}
// EventUtils.event("ad_pull", ext = obj)
EventUtils
.
event
(
"ad_pull"
,
ext
=
obj
)
// }
}
//
// fun clickAd(ad: MaxAd?, adUnit: String) {
fun
clickAd
(
ad
:
MaxAd
?,
adUnit
:
String
)
{
//
// val obj = JSONObject()
val
obj
=
JSONObject
()
// obj.put("UnitId", ad?.adUnitId)
obj
.
put
(
"UnitId"
,
ad
?.
adUnitId
)
// obj.put("ad_unit", adUnit)
obj
.
put
(
"ad_unit"
,
adUnit
)
// obj.put(
obj
.
put
(
// "creativeId",
"creativeId"
,
// ad?.creativeId
ad
?.
creativeId
// )
)
// obj.put("networkname", ad?.networkName)
obj
.
put
(
"networkname"
,
ad
?.
networkName
)
// obj.put("placement", ad?.placement)
obj
.
put
(
"placement"
,
ad
?.
placement
)
// obj.put("networkplacement", ad?.networkPlacement)
obj
.
put
(
"networkplacement"
,
ad
?.
networkPlacement
)
// obj.put("latency", ad?.requestLatencyMillis)
obj
.
put
(
"latency"
,
ad
?.
requestLatencyMillis
)
// obj.put("valueMicros", ad?.revenue)
obj
.
put
(
"valueMicros"
,
ad
?.
revenue
)
// if (!adUnit.equals("nativeAd")) {
if
(!
adUnit
.
equals
(
"nativeAd"
))
{
// EventUtils.event("ad_click", ext = obj)
EventUtils
.
event
(
"ad_click"
,
ext
=
obj
)
// } else {
}
else
{
// EventUtils.event("big_imgad_click", ext = obj)
EventUtils
.
event
(
"big_imgad_click"
,
ext
=
obj
)
// }
}
//
// }
}
//
// fun showAd(ad: MaxAd?, adUnit: String, activity: String?) {
fun
showAd
(
ad
:
MaxAd
?,
adUnit
:
String
,
activity
:
String
?)
{
// val obj = JSONObject()
val
obj
=
JSONObject
()
// obj.put("UnitId", ad?.adUnitId)
obj
.
put
(
"UnitId"
,
ad
?.
adUnitId
)
// obj.put("ad_unit", adUnit)
obj
.
put
(
"ad_unit"
,
adUnit
)
// obj.put(
obj
.
put
(
// "creativeId",
"creativeId"
,
// ad?.creativeId
ad
?.
creativeId
// )
)
// obj.put("networkname", ad?.networkName)
obj
.
put
(
"networkname"
,
ad
?.
networkName
)
// obj.put("placement", ad?.placement)
obj
.
put
(
"placement"
,
ad
?.
placement
)
// obj.put("networkplacement", ad?.networkPlacement)
obj
.
put
(
"networkplacement"
,
ad
?.
networkPlacement
)
// obj.put("latency", ad?.requestLatencyMillis)
obj
.
put
(
"latency"
,
ad
?.
requestLatencyMillis
)
// obj.put("valueMicros", ad?.revenue)
obj
.
put
(
"valueMicros"
,
ad
?.
revenue
)
// obj.put("from", activity)
obj
.
put
(
"from"
,
activity
)
// obj.put("mediation", "applovin")
obj
.
put
(
"mediation"
,
"applovin"
)
// LogEx.logDebug("glc", "from: $activity")
LogEx
.
logDebug
(
"glc"
,
"from: $activity"
)
// if (adUnit != "nativeAd") {
if
(
adUnit
!=
"nativeAd"
)
{
// EventUtils.event("ad_show", ext = obj)
EventUtils
.
event
(
"ad_show"
,
ext
=
obj
)
// } else {
}
else
{
// EventUtils.event("big_img_show", ext = obj)
EventUtils
.
event
(
"big_img_show"
,
ext
=
obj
)
// }
}
//
// }
}
//
// private val taichiPref = FacebookSdk.getApplicationContext()
private
val
taichiPref
=
FacebookSdk
.
getApplicationContext
()
// .getSharedPreferences("TaichiTroasCache", 0)
.
getSharedPreferences
(
"TaichiTroasCache"
,
0
)
// private val taichiSharedPreferencesEditor = taichiPref.edit()
private
val
taichiSharedPreferencesEditor
=
taichiPref
.
edit
()
//
// class EventOnPaidEventListener : MaxAdRevenueListener {
class
EventOnPaidEventListener
:
MaxAdRevenueListener
{
// override fun onAdRevenuePaid(ad: MaxAd) {
override
fun
onAdRevenuePaid
(
ad
:
MaxAd
)
{
// val params = Bundle()
val
params
=
Bundle
()
// val currentImpressionRevenue: Double = ad.revenue // In USD
val
currentImpressionRevenue
:
Double
=
ad
.
revenue
// In USD
// val mFirebaseAnalytics = FirebaseAnalytics.getInstance(BaseApplication.context)
val
mFirebaseAnalytics
=
FirebaseAnalytics
.
getInstance
(
BaseApplication
.
context
)
// params.putString(FirebaseAnalytics.Param.AD_PLATFORM, "appLovin")
params
.
putString
(
FirebaseAnalytics
.
Param
.
AD_PLATFORM
,
"appLovin"
)
// params.putString(FirebaseAnalytics.Param.AD_SOURCE, ad.networkName)
params
.
putString
(
FirebaseAnalytics
.
Param
.
AD_SOURCE
,
ad
.
networkName
)
// params.putString(FirebaseAnalytics.Param.AD_FORMAT, ad.format.getDisplayName())
params
.
putString
(
FirebaseAnalytics
.
Param
.
AD_FORMAT
,
ad
.
format
.
getDisplayName
())
// params.putString(FirebaseAnalytics.Param.AD_UNIT_NAME, ad.adUnitId)
params
.
putString
(
FirebaseAnalytics
.
Param
.
AD_UNIT_NAME
,
ad
.
adUnitId
)
// params.putDouble(FirebaseAnalytics.Param.VALUE, currentImpressionRevenue)
params
.
putDouble
(
FirebaseAnalytics
.
Param
.
VALUE
,
currentImpressionRevenue
)
// params.putString(FirebaseAnalytics.Param.CURRENCY, "USD")
params
.
putString
(
FirebaseAnalytics
.
Param
.
CURRENCY
,
"USD"
)
// mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION, params)
mFirebaseAnalytics
.
logEvent
(
FirebaseAnalytics
.
Event
.
AD_IMPRESSION
,
params
)
// mFirebaseAnalytics.logEvent("Ad_Impression_Revenue", params)
mFirebaseAnalytics
.
logEvent
(
"Ad_Impression_Revenue"
,
params
)
// val previousTaichiTroasCache = taichiPref.getFloat("TaichiTroasCache", 0f)
val
previousTaichiTroasCache
=
taichiPref
.
getFloat
(
"TaichiTroasCache"
,
0f
)
// val currentTaichiTroasCache = previousTaichiTroasCache + currentImpressionRevenue
val
currentTaichiTroasCache
=
previousTaichiTroasCache
+
currentImpressionRevenue
// if (currentTaichiTroasCache >= 0.01) {
if
(
currentTaichiTroasCache
>=
0.01
)
{
// val roasbundle = Bundle()
val
roasbundle
=
Bundle
()
// roasbundle.putDouble(FirebaseAnalytics.Param.VALUE, currentTaichiTroasCache)
roasbundle
.
putDouble
(
FirebaseAnalytics
.
Param
.
VALUE
,
currentTaichiTroasCache
)
// roasbundle.putString(FirebaseAnalytics.Param.CURRENCY, "USD")///(Required)tROAS事件必须
roasbundle
.
putString
(
FirebaseAnalytics
.
Param
.
CURRENCY
,
"USD"
)
///(Required)tROAS事件必须
// mFirebaseAnalytics.logEvent("Total_Ads_Revenue_001", roasbundle) // 给Taichi用
mFirebaseAnalytics
.
logEvent
(
"Total_Ads_Revenue_001"
,
roasbundle
)
// 给Taichi用
// taichiSharedPreferencesEditor.putFloat("TaichiTroasCache", 0f)//重新清零,开始计算
taichiSharedPreferencesEditor
.
putFloat
(
"TaichiTroasCache"
,
0f
)
//重新清零,开始计算
//
// val logger = AppEventsLogger.newLogger(BaseApplication.context)
val
logger
=
AppEventsLogger
.
newLogger
(
BaseApplication
.
context
)
// val parameters = Bundle()
val
parameters
=
Bundle
()
// parameters.putString(AppEventsConstants.EVENT_PARAM_CURRENCY, "USD")
parameters
.
putString
(
AppEventsConstants
.
EVENT_PARAM_CURRENCY
,
"USD"
)
// logger.logEvent("ad_value", currentTaichiTroasCache, parameters)
logger
.
logEvent
(
"ad_value"
,
currentTaichiTroasCache
,
parameters
)
// } else {
}
else
{
// taichiSharedPreferencesEditor.putFloat(
taichiSharedPreferencesEditor
.
putFloat
(
// "TaichiTroasCache",
"TaichiTroasCache"
,
// currentTaichiTroasCache.toFloat()
currentTaichiTroasCache
.
toFloat
()
// )
)
// taichiSharedPreferencesEditor.commit()
taichiSharedPreferencesEditor
.
commit
()
// }
}
// val obj = JSONObject()
val
obj
=
JSONObject
()
// val revenue = ad.revenue
val
revenue
=
ad
.
revenue
// val countryCode =
val
countryCode
=
// AppLovinSdk.getInstance(BaseApplication.context).configuration.countryCode
AppLovinSdk
.
getInstance
(
BaseApplication
.
context
).
configuration
.
countryCode
// val networkName = ad.networkName
val
networkName
=
ad
.
networkName
// val adUnitId = ad.adUnitId
val
adUnitId
=
ad
.
adUnitId
// val adFormat = ad.format
val
adFormat
=
ad
.
format
// val placement = ad.placement
val
placement
=
ad
.
placement
// val networkPlacement = ad.networkPlacement
val
networkPlacement
=
ad
.
networkPlacement
// obj.put("valueMicros", revenue)
obj
.
put
(
"valueMicros"
,
revenue
)
// obj.put("currencyCode", countryCode)
obj
.
put
(
"currencyCode"
,
countryCode
)
// obj.put("adUnitId", adUnitId)
obj
.
put
(
"adUnitId"
,
adUnitId
)
// obj.put("networkName", networkName)
obj
.
put
(
"networkName"
,
networkName
)
// obj.put("adFormat", adFormat)
obj
.
put
(
"adFormat"
,
adFormat
)
// obj.put("placement", placement)
obj
.
put
(
"placement"
,
placement
)
// obj.put("networkPlacement", networkPlacement)
obj
.
put
(
"networkPlacement"
,
networkPlacement
)
// EventUtils.event("ad_price", ext = obj)
EventUtils
.
event
(
"ad_price"
,
ext
=
obj
)
// }
}
//
// }
}
//}
}
\ No newline at end of file
\ No newline at end of file
app/src/main/java/com/base/filerecoveryrecyclebin/ads/max/AdMaxInit.kt
View file @
230eb832
//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
app/src/main/java/com/base/filerecoveryrecyclebin/ads/max/AdMaxInterstitialUtils.kt
View file @
230eb832
//package com.base.filerecoveryrecyclebin.ads.max
package
com.base.filerecoveryrecyclebin.ads.max
//
//import android.app.Activity
import
android.animation.ObjectAnimator
//import android.app.Dialog
import
android.app.Activity
//import com.applovin.mediation.MaxAd
import
android.app.Dialog
//import com.applovin.mediation.MaxAdListener
import
android.os.Handler
//import com.applovin.mediation.MaxError
import
android.os.Looper
//import com.applovin.mediation.ads.MaxInterstitialAd
import
android.view.View
//import com.base.filerecoveryrecyclebin.MyApplication.Companion.isInterOpenShowing
import
android.view.Window
//import com.base.filerecoveryrecyclebin.R
import
android.widget.ImageView
//import com.base.filerecoveryrecyclebin.ads.AdDisplayUtils
import
android.widget.TextView
//import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper.isAdInit
import
androidx.core.content.ContextCompat
//import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper.lastShowedOnHiddenTime
import
com.applovin.mediation.MaxAd
//import com.base.filerecoveryrecyclebin.help.ConfigHelper
import
com.applovin.mediation.MaxAdListener
//import com.base.filerecoveryrecyclebin.utils.EventUtils
import
com.applovin.mediation.MaxError
//import com.base.filerecoveryrecyclebin.utils.LogEx
import
com.applovin.mediation.ads.MaxInterstitialAd
//import com.base.filerecoveryrecyclebin.view.CustomDialog
import
com.base.filerecoveryrecyclebin.GlobalConfig
//import org.json.JSONObject
import
com.base.filerecoveryrecyclebin.MyApplication.Companion.isInterOpenShowing
//import java.util.UUID
import
com.base.filerecoveryrecyclebin.R
//
import
com.base.filerecoveryrecyclebin.ads.AdDisplayUtils
//object AdMaxInterstitialUtils {
import
com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper.lastShowedOnHiddenTime
//
import
com.base.filerecoveryrecyclebin.utils.EventUtils
// private val TAG = "AdMaxInterstitialUtils"
import
com.base.filerecoveryrecyclebin.utils.LogEx
// private var interstitialAd: MaxInterstitialAd? = null
import
com.base.filerecoveryrecyclebin.view.CustomDialog
// private var interLoadTime = Long.MAX_VALUE
import
org.json.JSONObject
// private var onHidden: (() -> Unit)? = null
import
java.util.UUID
// private var loadingListener: (() -> Unit)? = null
// private var activityString: String = ""
object
AdMaxInterstitialUtils
{
//
// private fun setListener(activity: Activity) {
private
val
TAG
=
"AdMaxInterstitialUtils"
// activityString = activity::class.java.toString().split(".").last()
private
var
interstitialAd
:
MaxInterstitialAd
?
=
null
// if (interstitialAd == null) {
private
var
interLoadTime
=
Long
.
MAX_VALUE
//
private
var
onHidden
:
(()
->
Unit
)?
=
null
// interstitialAd = MaxInterstitialAd(ConfigHelper.interAdMaxId, activity)
private
var
loadingListener
:
(()
->
Unit
)?
=
null
// interstitialAd?.setListener(object : MaxAdListener {
private
var
activityString
:
String
=
""
// override fun onAdLoaded(p0: MaxAd) {
// LogEx.logDebug(TAG, "onAdLoaded")
private
fun
setListener
(
activity
:
Activity
)
{
//
activityString
=
activity
::
class
.
java
.
toString
().
split
(
"."
).
last
()
// loadingListener?.invoke()
if
(
interstitialAd
==
null
)
{
// loadingListener = null
//
interstitialAd
=
MaxInterstitialAd
(
GlobalConfig
.
ID_MAX_INTER
,
activity
)
// interLoadTime = System.currentTimeMillis()
interstitialAd
?.
setListener
(
object
:
MaxAdListener
{
// val reqId = UUID.randomUUID().toString()
override
fun
onAdLoaded
(
p0
:
MaxAd
)
{
// AdMaxEvent.pullAd(p0, "interAd", reqId = reqId)
LogEx
.
logDebug
(
TAG
,
"onAdLoaded"
)
// }
//
loadingListener
?.
invoke
()
// override fun onAdLoadFailed(p0: String, p1: MaxError) {
loadingListener
=
null
// LogEx.logDebug(TAG, "onAdLoadFailed")
// val reqId = UUID.randomUUID().toString()
interLoadTime
=
System
.
currentTimeMillis
()
// AdMaxEvent.pullAd(null, "interAd", reqId = reqId, error = p1.message, code = p1.code)
val
reqId
=
UUID
.
randomUUID
().
toString
()
// AdDisplayUtils.getInstance().incrementAdRequestFailCount()
AdMaxEvent
.
pullAd
(
p0
,
"interAd"
,
reqId
=
reqId
)
//
}
// loadingListener?.invoke()
// loadingListener = null
override
fun
onAdLoadFailed
(
p0
:
String
,
p1
:
MaxError
)
{
// }
LogEx
.
logDebug
(
TAG
,
"onAdLoadFailed"
)
//
val
reqId
=
UUID
.
randomUUID
().
toString
()
// override fun onAdDisplayed(p0: MaxAd) {
AdMaxEvent
.
pullAd
(
null
,
"interAd"
,
reqId
=
reqId
,
error
=
p1
.
message
,
code
=
p1
.
code
)
// LogEx.logDebug(TAG, "onAdDisplayed")
AdDisplayUtils
.
getInstance
().
incrementAdRequestFailCount
()
// AdDisplayUtils.getInstance().incrementAdDisplayCount()
// AdMaxEvent.showAd(p0, "interAd", activityString)
loadingListener
?.
invoke
()
//
loadingListener
=
null
// isInterOpenShowing = true
}
// }
//
override
fun
onAdDisplayed
(
p0
:
MaxAd
)
{
// override fun onAdHidden(p0: MaxAd) {
LogEx
.
logDebug
(
TAG
,
"onAdDisplayed"
)
// LogEx.logDebug(TAG, "onAdHidden")
AdDisplayUtils
.
getInstance
().
incrementAdDisplayCount
()
// onHidden?.invoke()
AdMaxEvent
.
showAd
(
p0
,
"interAd"
,
activityString
)
// onHidden = null
// AdMaxOpenUtils.loadAppOpenAd(activity)
isInterOpenShowing
=
true
//// loadInterstitialAd(activity)
}
//
// isInterOpenShowing = false
override
fun
onAdHidden
(
p0
:
MaxAd
)
{
// lastShowedOnHiddenTime = System.currentTimeMillis()
LogEx
.
logDebug
(
TAG
,
"onAdHidden"
)
// }
onHidden
?.
invoke
()
//
onHidden
=
null
// override fun onAdClicked(p0: MaxAd) {
AdMaxOpenUtils
.
loadAppOpenAd
(
activity
)
// LogEx.logDebug(TAG, "onAdClicked activity=$activityString")
// AdDisplayUtils.getInstance().incrementAdClickCount()
// AdMaxEvent.clickAd(p0, "interAd")
// }
//
//
// override fun onAdDisplayFailed(p0: MaxAd, p1: MaxError) {
// LogEx.logDebug(TAG, "onAdDisplayFailed")
// onHidden?.invoke()
// onHidden = null
// val obj2 = JSONObject()
// obj2.put("code", p1.code)
// obj2.put("reason", p1.message)
// obj2.put("ad_unit", "interAd")
// EventUtils.event("ad_show_error", ext = obj2)
//
// isInterOpenShowing = false
// }
// })
// interstitialAd?.setRevenueListener(AdMaxEvent.EventOnPaidEventListener())
// }
// }
//
// fun showInterstitialAd(activity: Activity, onHidden: (() -> Unit)? = null) {
// setListener(activity)
//
// if (activity.isFinishing || activity.isDestroyed) {
// return
// }
//
// if (isAdExpired()) {
// val obj2 = JSONObject()
// obj2.put("ad_unit", "interAd")
// EventUtils.event("ad_expire", ext = obj2)
// onHidden?.invoke()
// loadInterstitialAd(activity)
// loadInterstitialAd(activity)
// return
// }
isInterOpenShowing
=
false
//
lastShowedOnHiddenTime
=
System
.
currentTimeMillis
()
//
}
// if (!AdDisplayUtils.getInstance().shouldShowAd("interAd")) {
// onHidden?.invoke()
override
fun
onAdClicked
(
p0
:
MaxAd
)
{
// return
LogEx
.
logDebug
(
TAG
,
"onAdClicked activity=$activityString"
)
// }
AdDisplayUtils
.
getInstance
().
incrementAdClickCount
()
//
AdMaxEvent
.
clickAd
(
p0
,
"interAd"
)
// LogEx.logDebug(TAG, "showInterstitialAd,展示插屏广告")
}
//
// val obj1 = JSONObject()
// obj1.put("ad_unit", "interAd")
override
fun
onAdDisplayFailed
(
p0
:
MaxAd
,
p1
:
MaxError
)
{
// EventUtils.event("ad_prepare_show", ext = obj1)
LogEx
.
logDebug
(
TAG
,
"onAdDisplayFailed"
)
// isInterOpenShowing = false
onHidden
?.
invoke
()
//
onHidden
=
null
// if (interstitialAd?.isReady == true) {
val
obj2
=
JSONObject
()
// LogEx.logDebug(TAG, "有缓存直接播放。")
obj2
.
put
(
"code"
,
p1
.
code
)
// this.onHidden = onHidden
obj2
.
put
(
"reason"
,
p1
.
message
)
// interstitialAd?.showAd(activity)
obj2
.
put
(
"ad_unit"
,
"interAd"
)
// } else {
EventUtils
.
event
(
"ad_show_error"
,
ext
=
obj2
)
// LogEx.logDebug(TAG, "展示广告时,没有缓存,需要拉取。")
// val obj2 = JSONObject()
isInterOpenShowing
=
false
// obj2.put("reason", "no cache ad")
}
// obj2.put("ad_unit", "interAd")
})
// EventUtils.event("ad_nocache_pull", ext = obj2)
interstitialAd
?.
setRevenueListener
(
AdMaxEvent
.
EventOnPaidEventListener
())
// val loaded = loadInterstitialAd(activity)
}
// if (loaded) {
}
// LogEx.logDebug(TAG, "loaded=true")
// val dialog = showAdDialogAndLoadInterstitial(activity)
fun
showInterstitialAd
(
activity
:
Activity
,
onHidden
:
(()
->
Unit
)?
=
null
)
{
// loadingListener = {
setListener
(
activity
)
// dialog?.dismiss()
// if (interstitialAd?.isReady == true) {
if
(
activity
.
isFinishing
||
activity
.
isDestroyed
)
{
// this.onHidden = onHidden
return
// interstitialAd?.showAd(activity)
}
// } else {
// onHidden?.invoke()
if
(
isAdExpired
())
{
// }
val
obj2
=
JSONObject
()
// }
obj2
.
put
(
"ad_unit"
,
"interAd"
)
// } else {
EventUtils
.
event
(
"ad_expire"
,
ext
=
obj2
)
// LogEx.logDebug(TAG, "loaded=false")
onHidden
?.
invoke
()
// onHidden?.invoke()
loadInterstitialAd
(
activity
)
// }
return
// }
}
//
// }
//
if
(!
AdDisplayUtils
.
getInstance
().
shouldShowAd
(
"interAd"
))
{
// private fun isAdExpired(): Boolean {
onHidden
?.
invoke
()
// return System.currentTimeMillis() - interLoadTime > 1000 * 60 * 60
return
// }
}
//
//
LogEx
.
logDebug
(
TAG
,
"showInterstitialAd,展示插屏广告"
)
// private fun showAdDialogAndLoadInterstitial(
// activity: Activity,
val
obj1
=
JSONObject
()
// ): Dialog? {
obj1
.
put
(
"ad_unit"
,
"interAd"
)
// var customDialog: Dialog? = null
EventUtils
.
event
(
"ad_prepare_show"
,
ext
=
obj1
)
// if (!activity.isFinishing && !activity.isDestroyed) {
isInterOpenShowing
=
false
// customDialog = CustomDialog(activity, R.layout.dialog_ad_loading)
// // 设置对话框的样式和内容
if
(
interstitialAd
?.
isReady
==
true
)
{
// customDialog.show()
LogEx
.
logDebug
(
TAG
,
"有缓存直接播放。"
)
// }
this
.
onHidden
=
onHidden
// return customDialog
showLoadingScreen
(
activity
)
{
// }
startCountdownAndShowAd
{
//
interstitialAd
?.
showAd
(
activity
)
// fun loadInterstitialAd(activity: Activity): Boolean {
}
// setListener(activity)
}
//
}
else
{
// if (!AdDisplayUtils.getInstance().shouldShowAd("interAd")) {
LogEx
.
logDebug
(
TAG
,
"展示广告时,没有缓存,需要拉取。"
)
// return false
val
obj2
=
JSONObject
()
// }
obj2
.
put
(
"reason"
,
"no cache ad"
)
//
obj2
.
put
(
"ad_unit"
,
"interAd"
)
// LogEx.logDebug(TAG, "loadInterstitialAd")
EventUtils
.
event
(
"ad_nocache_pull"
,
ext
=
obj2
)
// val reqId = UUID.randomUUID().toString()
val
loaded
=
loadInterstitialAd
(
activity
)
// val obj = JSONObject()
showLoadingScreen
(
activity
)
{}
// obj.put("req_id", reqId)
if
(
loaded
)
{
// obj.put("ad_type", "interAd")
LogEx
.
logDebug
(
TAG
,
"loaded=true"
)
// EventUtils.event("ad_pull_start", ext = obj)
loadingListener
=
{
// interstitialAd?.loadAd()
LogEx
.
logDebug
(
TAG
,
"loadingListener"
)
// AdDisplayUtils.getInstance().incrementAdRequestCount()
// return true
if
(
interstitialAd
?.
isReady
==
true
)
{
// }
this
.
onHidden
=
onHidden
//
startCountdownAndShowAd
{
//
loadingDialog
?.
dismiss
()
//}
interstitialAd
?.
showAd
(
activity
)
\ No newline at end of file
}
}
else
{
loadingDialog
?.
dismiss
()
onHidden
?.
invoke
()
}
}
}
else
{
loadingDialog
?.
dismiss
()
LogEx
.
logDebug
(
TAG
,
"loaded=false"
)
onHidden
?.
invoke
()
}
}
}
private
fun
isAdExpired
():
Boolean
{
return
System
.
currentTimeMillis
()
-
interLoadTime
>
1000
*
60
*
60
}
private
fun
showAdDialogAndLoadInterstitial
(
activity
:
Activity
,
):
Dialog
?
{
var
customDialog
:
Dialog
?
=
null
if
(!
activity
.
isFinishing
&&
!
activity
.
isDestroyed
)
{
customDialog
=
CustomDialog
(
activity
,
R
.
layout
.
dialog_ad_loading
)
// 设置对话框的样式和内容
customDialog
.
show
()
}
return
customDialog
}
fun
loadInterstitialAd
(
activity
:
Activity
):
Boolean
{
setListener
(
activity
)
if
(!
AdDisplayUtils
.
getInstance
().
shouldShowAd
(
"interAd"
))
{
return
false
}
LogEx
.
logDebug
(
TAG
,
"loadInterstitialAd"
)
val
reqId
=
UUID
.
randomUUID
().
toString
()
val
obj
=
JSONObject
()
obj
.
put
(
"req_id"
,
reqId
)
obj
.
put
(
"ad_type"
,
"interAd"
)
EventUtils
.
event
(
"ad_pull_start"
,
ext
=
obj
)
interstitialAd
?.
loadAd
()
AdDisplayUtils
.
getInstance
().
incrementAdRequestCount
()
return
true
}
private
fun
showLoadingScreen
(
activity
:
Activity
,
callBack
:
(()
->
Unit
))
{
if
(
activity
.
isFinishing
||
activity
.
isDestroyed
)
{
return
}
if
(
loadingDialog
==
null
)
{
loadingDialog
=
Dialog
(
activity
).
apply
{
requestWindowFeature
(
Window
.
FEATURE_NO_TITLE
)
setContentView
(
R
.
layout
.
dialog_loading
)
setCancelable
(
false
)
window
?.
setBackgroundDrawable
(
ContextCompat
.
getDrawable
(
activity
,
R
.
drawable
.
bg_loadingads
))
}
}
val
imageView
=
loadingDialog
?.
findViewById
<
ImageView
>(
R
.
id
.
loading_image
)
val
countdownTextView
=
loadingDialog
?.
findViewById
<
TextView
>(
R
.
id
.
countdown_text
)
imageView
?.
let
{
startRotateAnimation
(
it
)
}
// 开始旋转动画
// 控制倒计时文本是否显示
countdownTextView
?.
visibility
=
View
.
VISIBLE
loadingDialog
?.
show
()
callBack
.
invoke
()
}
private
fun
startRotateAnimation
(
imageView
:
ImageView
)
{
ObjectAnimator
.
ofFloat
(
imageView
,
"rotation"
,
0f
,
360f
).
apply
{
duration
=
3000
// 持续 3 秒
repeatCount
=
ObjectAnimator
.
INFINITE
// 无限循环
start
()
}
}
private
var
countdown
=
3
// 初始倒计时
private
var
countdownHandler
:
Handler
?
=
null
private
var
loadingDialog
:
Dialog
?
=
null
private
fun
startCountdownAndShowAd
(
callBack
:
(()
->
Unit
)?)
{
countdown
=
3
updateCountdownText
(
count
=
countdown
)
// 显示倒计时文本
countdownHandler
?.
removeCallbacksAndMessages
(
null
)
countdownHandler
=
Handler
(
Looper
.
getMainLooper
())
countdownHandler
?.
post
(
object
:
Runnable
{
override
fun
run
()
{
if
(
countdown
<=
0
)
{
loadingDialog
?.
dismiss
()
loadingDialog
=
null
callBack
?.
invoke
()
}
else
{
updateCountdownText
(
countdown
)
// 更新倒计时文本
countdown
--
countdownHandler
?.
postDelayed
(
this
,
1000
)
}
}
})
}
// 更新倒计时文本并控制是否显示括号和数字
private
fun
updateCountdownText
(
count
:
Int
)
{
val
countdownTextView
=
loadingDialog
?.
findViewById
<
TextView
>(
R
.
id
.
countdown_text
)
// LogEx.logDebug(AdmobOpenUtils.TAG, "updateCountdownText $count countdownTextView=$countdownTextView")
countdownTextView
?.
text
=
"Ads are about to be shown($count)"
countdownTextView
?.
visibility
=
View
.
VISIBLE
}
}
app/src/main/java/com/base/filerecoveryrecyclebin/ads/max/AdMaxNativeUtils.kt
View file @
230eb832
//package com.base.filerecoveryrecyclebin.ads.max
package
com.base.filerecoveryrecyclebin.ads.max
//
//import android.app.Activity
import
android.app.Activity
//import android.content.Context
import
android.content.Context
//import android.view.ViewGroup
import
android.view.ViewGroup
//import androidx.core.view.isVisible
import
androidx.core.view.isVisible
//import com.applovin.mediation.MaxAd
import
com.applovin.mediation.MaxAd
//import com.applovin.mediation.MaxError
import
com.applovin.mediation.MaxError
//import com.applovin.mediation.nativeAds.MaxNativeAdListener
import
com.applovin.mediation.nativeAds.MaxNativeAdListener
//import com.applovin.mediation.nativeAds.MaxNativeAdLoader
import
com.applovin.mediation.nativeAds.MaxNativeAdLoader
//import com.applovin.mediation.nativeAds.MaxNativeAdView
import
com.applovin.mediation.nativeAds.MaxNativeAdView
//import com.applovin.mediation.nativeAds.MaxNativeAdViewBinder
import
com.applovin.mediation.nativeAds.MaxNativeAdViewBinder
//import com.base.filerecoveryrecyclebin.R
import
com.base.filerecoveryrecyclebin.BuildConfig
//import com.base.filerecoveryrecyclebin.ads.AdDisplayUtils
import
com.base.filerecoveryrecyclebin.R
//import com.base.filerecoveryrecyclebin.help.BaseApplication
import
com.base.filerecoveryrecyclebin.ads.AdDisplayUtils
//import com.base.filerecoveryrecyclebin.help.ConfigHelper
import
com.base.filerecoveryrecyclebin.help.BaseApplication
//import com.base.filerecoveryrecyclebin.utils.EventUtils
import
com.base.filerecoveryrecyclebin.help.ConfigHelper
//import com.base.filerecoveryrecyclebin.utils.LogEx
import
com.base.filerecoveryrecyclebin.utils.EventUtils
//import org.json.JSONObject
import
com.base.filerecoveryrecyclebin.utils.LogEx
//
import
org.json.JSONObject
//object AdMaxNativeUtils {
//
object
AdMaxNativeUtils
{
// private val TAG = "AdMaxNativeUtils"
// private var nativeAdLoader: MaxNativeAdLoader = MaxNativeAdLoader(ConfigHelper.nativeAdMaxId, BaseApplication.context)
private
val
TAG
=
"AdMaxNativeUtils"
// private var nativeAd: MaxAd? = null
private
var
nativeAdLoader
:
MaxNativeAdLoader
=
MaxNativeAdLoader
(
ConfigHelper
.
nativeAdMaxId
,
BaseApplication
.
context
)
// private var nativeLoadTime = Long.MAX_VALUE
private
var
nativeAd
:
MaxAd
?
=
null
// private var haveSetAdListener: Boolean = false
private
var
nativeLoadTime
=
Long
.
MAX_VALUE
// private var loadingListener: (() -> Unit)? = null
private
var
haveSetAdListener
:
Boolean
=
false
// private var activityString: String = ""
private
var
loadingListener
:
(()
->
Unit
)?
=
null
// private fun setNativeAdListener() {
private
var
activityString
:
String
=
""
// if (!haveSetAdListener) {
private
fun
setNativeAdListener
()
{
// //加载展示监听
if
(!
haveSetAdListener
)
{
// nativeAdLoader.setNativeAdListener(object : MaxNativeAdListener() {
//加载展示监听
// override fun onNativeAdLoaded(nativeAdView: MaxNativeAdView?, ad: MaxAd) {
nativeAdLoader
.
setNativeAdListener
(
object
:
MaxNativeAdListener
()
{
// LogEx.logDebug(TAG, "onNativeAdLoaded")
override
fun
onNativeAdLoaded
(
nativeAdView
:
MaxNativeAdView
?,
ad
:
MaxAd
)
{
// // Cleanup any pre-existing native ad to prevent memory leaks.
LogEx
.
logDebug
(
TAG
,
"onNativeAdLoaded"
)
// if (nativeAd?.nativeAd?.isExpired == true) {
// Cleanup any pre-existing native ad to prevent memory leaks.
// nativeAdLoader.destroy(nativeAd)
if
(
nativeAd
?.
nativeAd
?.
isExpired
==
true
)
{
// }
nativeAdLoader
.
destroy
(
nativeAd
)
//
}
// // Save ad to be rendered later.
// nativeAd = ad
// Save ad to be rendered later.
// nativeLoadTime = System.currentTimeMillis()
nativeAd
=
ad
// loadingListener?.invoke()
nativeLoadTime
=
System
.
currentTimeMillis
()
// loadingListener = null
loadingListener
?.
invoke
()
// }
loadingListener
=
null
//
}
// override fun onNativeAdLoadFailed(p0: String, p1: MaxError) {
// super.onNativeAdLoadFailed(p0, p1)
override
fun
onNativeAdLoadFailed
(
p0
:
String
,
p1
:
MaxError
)
{
// loadingListener?.invoke()
super
.
onNativeAdLoadFailed
(
p0
,
p1
)
// loadingListener = null
loadingListener
?.
invoke
()
// LogEx.logDebug(TAG, "onNativeAdLoadFailed")
loadingListener
=
null
// LogEx.logDebug(TAG, "code=${p1.code}")
LogEx
.
logDebug
(
TAG
,
"onNativeAdLoadFailed"
)
// LogEx.logDebug(TAG, "message=${p1.message}")
LogEx
.
logDebug
(
TAG
,
"code=${p1.code}"
)
//// AdDisplayUtils.getInstance().incrementAdRequestFailCount()
LogEx
.
logDebug
(
TAG
,
"message=${p1.message}"
)
// val obj2 = JSONObject()
// AdDisplayUtils.getInstance().incrementAdRequestFailCount()
// obj2.put("reason", "no_ad")
val
obj2
=
JSONObject
()
// obj2.put("ad_unit", "nativeAd")
obj2
.
put
(
"reason"
,
"no_ad"
)
// EventUtils.event("ad_show_error", ext = obj2)
obj2
.
put
(
"ad_unit"
,
"nativeAd"
)
// }
EventUtils
.
event
(
"ad_show_error"
,
ext
=
obj2
)
//
}
// override fun onNativeAdClicked(p0: MaxAd) {
// super.onNativeAdClicked(p0)
override
fun
onNativeAdClicked
(
p0
:
MaxAd
)
{
// LogEx.logDebug(TAG, "onNativeAdClicked")
super
.
onNativeAdClicked
(
p0
)
//// AdDisplayUtils.getInstance().incrementAdClickCount()
LogEx
.
logDebug
(
TAG
,
"onNativeAdClicked"
)
// nativeAd?.let { AdMaxEvent.clickAd(it, "nativeAd") }
// AdDisplayUtils.getInstance().incrementAdClickCount()
// }
nativeAd
?.
let
{
AdMaxEvent
.
clickAd
(
it
,
"nativeAd"
)
}
//
}
// override fun onNativeAdExpired(p0: MaxAd) {
// super.onNativeAdExpired(p0)
override
fun
onNativeAdExpired
(
p0
:
MaxAd
)
{
// }
super
.
onNativeAdExpired
(
p0
)
// })
}
//
})
//
// //广告价格监听
// nativeAdLoader.setRevenueListener { ad ->
//广告价格监听
//
nativeAdLoader
.
setRevenueListener
{
ad
->
// }
//
}
//
// haveSetAdListener = true
//
haveSetAdListener
=
true
//
// }
// }
}
//
}
// private fun createNativeAdView(context: Context, layout: Int): MaxNativeAdView {
//
private
fun
createNativeAdView
(
context
:
Context
,
layout
:
Int
):
MaxNativeAdView
{
//// val binder: MaxNativeAdViewBinder = MaxNativeAdViewBinder.Builder(R.layout.layout_max_native_custom)
//// .setTitleTextViewId(R.id.title_text_view)
// val binder: MaxNativeAdViewBinder = MaxNativeAdViewBinder.Builder(R.layout.layout_max_native_custom)
//// .setBodyTextViewId(R.id.body_text_view)
// .setTitleTextViewId(R.id.title_text_view)
//// .setAdvertiserTextViewId(R.id.advertiser_text_view)
// .setBodyTextViewId(R.id.body_text_view)
//// .setIconImageViewId(R.id.icon_image_view)
// .setAdvertiserTextViewId(R.id.advertiser_text_view)
//// .setMediaContentViewGroupId(R.id.media_view_container)
// .setIconImageViewId(R.id.icon_image_view)
//// .setOptionsContentViewGroupId(R.id.options_view)
// .setMediaContentViewGroupId(R.id.media_view_container)
//// .setStarRatingContentViewGroupId(R.id.star_rating_view)
// .setOptionsContentViewGroupId(R.id.options_view)
//// .setCallToActionButtonId(R.id.cta_button)
// .setStarRatingContentViewGroupId(R.id.star_rating_view)
//// .build()
// .setCallToActionButtonId(R.id.cta_button)
//// return MaxNativeAdView(binder, context)
//
// val binder: MaxNativeAdViewBinder = MaxNativeAdViewBinder.Builder(layout)
// .setTitleTextViewId(R.id.ad_headline)
// .setBodyTextViewId(R.id.ad_body)
//// .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()
// .build()
// return MaxNativeAdView(binder, context)
// return MaxNativeAdView(binder, context)
// }
//
val
binder
:
MaxNativeAdViewBinder
=
MaxNativeAdViewBinder
.
Builder
(
layout
)
// fun loadNativeAd() {
.
setTitleTextViewId
(
R
.
id
.
ad_headline
)
// setNativeAdListener()
.
setBodyTextViewId
(
R
.
id
.
ad_body
)
// if (!AdDisplayUtils.getInstance().shouldShowAd("nativeAd")) {
// .setAdvertiserTextViewId(R.id.advertiser_text_view)
// return
.
setIconImageViewId
(
R
.
id
.
ad_app_icon
)
// }
.
setMediaContentViewGroupId
(
R
.
id
.
ad_media
)
// nativeAdLoader.loadAd()
// .setOptionsContentViewGroupId(R.id.options_view)
// }
// .setStarRatingContentViewGroupId(R.id.star_rating_view)
//
.
setCallToActionButtonId
(
R
.
id
.
ad_call_to_action
)
//
.
build
()
// fun showNativeAd(activity: Activity, parent: ViewGroup, layout: Int) {
return
MaxNativeAdView
(
binder
,
context
)
// activityString = activity::class.java.toString().split(".").last()
}
// LogEx.logDebug(TAG, "activityString=$activityString")
// setNativeAdListener()
fun
loadNativeAd
()
{
//
setNativeAdListener
()
// if (!AdDisplayUtils.getInstance().shouldShowAd("nativeAd")) {
if
(!
AdDisplayUtils
.
getInstance
().
shouldShowAd
(
"nativeAd"
))
{
// LogEx.logDebug(TAG, "!shouldShowAd")
return
// return
}
// }
nativeAdLoader
.
loadAd
()
//
}
// if (nativeAd?.nativeAd?.isExpired == true || nativeAd == null) {
// LogEx.logDebug(TAG, "nativeAd?.nativeAd?.isExpired == true")
// nativeAdLoader.destroy(nativeAd)
fun
showNativeAd
(
activity
:
Activity
,
parent
:
ViewGroup
,
layout
:
Int
)
{
// nativeAdLoader.loadAd()
activityString
=
activity
::
class
.
java
.
toString
().
split
(
"."
).
last
()
// loadingListener = {
LogEx
.
logDebug
(
TAG
,
"activityString=$activityString"
)
// if (nativeAd != null) {
setNativeAdListener
()
// showReadyNative(activity, parent, layout)
// }
if
(!
BuildConfig
.
DEBUG
)
{
// }
if
(!
AdDisplayUtils
.
getInstance
().
shouldShowAd
(
"nativeAd"
))
{
// } else {
LogEx
.
logDebug
(
TAG
,
"!shouldShowAd"
)
// showReadyNative(activity, parent, layout)
return
// }
}
//
}
// }
//
if
(
nativeAd
?.
nativeAd
?.
isExpired
==
true
||
nativeAd
==
null
)
{
// private fun showReadyNative(activity: Activity, parent: ViewGroup, layout: Int) {
LogEx
.
logDebug
(
TAG
,
"nativeAd?.nativeAd?.isExpired == true"
)
// val adView = createNativeAdView(activity, layout)
nativeAdLoader
.
destroy
(
nativeAd
)
//
nativeAdLoader
.
loadAd
()
// LogEx.logDebug(TAG, "showReadNative adUnitId=${nativeAd?.adUnitId}")
loadingListener
=
{
// parent.isVisible = true
LogEx
.
logDebug
(
TAG
,
"loadingListener nativeAd==$nativeAd"
)
// parent.removeAllViews()
if
(
nativeAd
!=
null
)
{
// nativeAdLoader.render(adView, nativeAd)
showReadyNative
(
activity
,
parent
,
layout
)
// parent.addView(adView)
}
// nativeAd?.let { AdMaxEvent.showAd(it, "nativeAd", activityString) }
}
//// AdDisplayUtils.getInstance().incrementAdDisplayCount()
}
else
{
//
showReadyNative
(
activity
,
parent
,
layout
)
// LogEx.logDebug(TAG, "loadingListener finish")
}
// }
//
}
//}
\ No newline at end of file
private
fun
showReadyNative
(
activity
:
Activity
,
parent
:
ViewGroup
,
layout
:
Int
)
{
val
adView
=
createNativeAdView
(
activity
,
layout
)
LogEx
.
logDebug
(
TAG
,
"showReadNative adUnitId=${nativeAd?.adUnitId}"
)
parent
.
isVisible
=
true
parent
.
removeAllViews
()
nativeAdLoader
.
render
(
adView
,
nativeAd
)
parent
.
addView
(
adView
)
nativeAd
?.
let
{
AdMaxEvent
.
showAd
(
it
,
"nativeAd"
,
activityString
)
}
// AdDisplayUtils.getInstance().incrementAdDisplayCount()
LogEx
.
logDebug
(
TAG
,
"loadingListener finish"
)
}
}
\ No newline at end of file
app/src/main/java/com/base/filerecoveryrecyclebin/ads/max/AdMaxOpenUtils.kt
View file @
230eb832
//package com.base.filerecoveryrecyclebin.ads.max
package
com.base.filerecoveryrecyclebin.ads.max
//
//import android.app.Activity
import
android.animation.ObjectAnimator
//import com.applovin.mediation.MaxAd
import
android.app.Activity
//import com.applovin.mediation.MaxAdListener
import
android.app.Dialog
//import com.applovin.mediation.MaxError
import
android.os.Handler
//import com.applovin.mediation.ads.MaxAppOpenAd
import
android.os.Looper
//import com.base.filerecoveryrecyclebin.MyApplication.Companion.isInterOpenShowing
import
android.view.View
//import com.base.filerecoveryrecyclebin.ads.AdDisplayUtils
import
android.view.Window
//import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper.isAdInit
import
android.widget.ImageView
//import com.base.filerecoveryrecyclebin.help.ConfigHelper
import
android.widget.TextView
//import com.base.filerecoveryrecyclebin.utils.EventUtils
import
androidx.core.content.ContextCompat
//import com.base.filerecoveryrecyclebin.utils.LogEx
import
com.applovin.mediation.MaxAd
//import org.json.JSONObject
import
com.applovin.mediation.MaxAdListener
//import java.util.UUID
import
com.applovin.mediation.MaxError
//
import
com.applovin.mediation.ads.MaxAppOpenAd
//object AdMaxOpenUtils {
import
com.base.filerecoveryrecyclebin.MyApplication.Companion.isInterOpenShowing
// private val TAG = "AdMaxOpenUtils"
import
com.base.filerecoveryrecyclebin.R
// private var appOpenAd: MaxAppOpenAd? = null
import
com.base.filerecoveryrecyclebin.activity.splash.Splash2Activity
// private var openLoadTime = Long.MAX_VALUE
import
com.base.filerecoveryrecyclebin.ads.AdDisplayUtils
// private var onHidden: (() -> Unit)? = null
import
com.base.filerecoveryrecyclebin.help.ConfigHelper
// private var loadingListener: ((flag: Boolean) -> Unit)? = null
import
com.base.filerecoveryrecyclebin.utils.EventUtils
// private var activityString = ""
import
com.base.filerecoveryrecyclebin.utils.LogEx
//
import
org.json.JSONObject
// private fun setListener(activity: Activity) {
import
java.util.UUID
// activityString = activity::class.java.toString().split(".").last()
// if (appOpenAd == null) {
object
AdMaxOpenUtils
{
// appOpenAd = MaxAppOpenAd(ConfigHelper.openAdMaxId, activity)
private
val
TAG
=
"AdMaxOpenUtils"
//
private
var
appOpenAd
:
MaxAppOpenAd
?
=
null
// appOpenAd?.setListener(object : MaxAdListener {
private
var
openLoadTime
=
Long
.
MAX_VALUE
// override fun onAdLoaded(p0: MaxAd) {
private
var
onHidden
:
(()
->
Unit
)?
=
null
// LogEx.logDebug(TAG, "广告拉取成功")
private
var
loadingListener
:
((
flag
:
Boolean
)
->
Unit
)?
=
null
// openLoadTime = System.currentTimeMillis()
private
var
activityString
=
""
// loadingListener?.invoke(true)
// loadingListener = null
private
fun
setListener
(
activity
:
Activity
)
{
// AdMaxEvent.pullAd(p0, "openAd")
activityString
=
activity
::
class
.
java
.
toString
().
split
(
"."
).
last
()
// }
if
(
appOpenAd
==
null
)
{
//
appOpenAd
=
MaxAppOpenAd
(
ConfigHelper
.
openAdMaxId
,
activity
)
// override fun onAdLoadFailed(p0: String, p1: MaxError) {
// LogEx.logDebug(TAG, "广告拉取失败了,onAdLoadFailed:" + p0)
appOpenAd
?.
setListener
(
object
:
MaxAdListener
{
// LogEx.logDebug(TAG, "广告拉取失败了,onAdLoadFailed:" + p1.message.toString())
override
fun
onAdLoaded
(
p0
:
MaxAd
)
{
// LogEx.logDebug(TAG, "广告拉取失败了,onAdLoadFailed:" + p1.code)
LogEx
.
logDebug
(
TAG
,
"广告拉取成功"
)
// loadingListener?.invoke(false)
openLoadTime
=
System
.
currentTimeMillis
()
// loadingListener = null
loadingListener
?.
invoke
(
true
)
// AdDisplayUtils.getInstance().incrementAdRequestFailCount()
loadingListener
=
null
// val reqId = UUID.randomUUID().toString()
AdMaxEvent
.
pullAd
(
p0
,
"openAd"
)
// AdMaxEvent.pullAd(null, "openAd", reqId = reqId, error = p1.message, code = p1.code)
}
// }
//
override
fun
onAdLoadFailed
(
p0
:
String
,
p1
:
MaxError
)
{
// override fun onAdDisplayed(p0: MaxAd) {
LogEx
.
logDebug
(
TAG
,
"广告拉取失败了,onAdLoadFailed:"
+
p0
)
// AdDisplayUtils.getInstance().incrementAdDisplayCount()
LogEx
.
logDebug
(
TAG
,
"广告拉取失败了,onAdLoadFailed:"
+
p1
.
message
.
toString
())
// AdMaxEvent.showAd(p0, "openAd", activityString)
LogEx
.
logDebug
(
TAG
,
"广告拉取失败了,onAdLoadFailed:"
+
p1
.
code
)
//
loadingListener
?.
invoke
(
false
)
// isInterOpenShowing = true
loadingListener
=
null
// }
AdDisplayUtils
.
getInstance
().
incrementAdRequestFailCount
()
//
val
reqId
=
UUID
.
randomUUID
().
toString
()
// override fun onAdHidden(p0: MaxAd) {
AdMaxEvent
.
pullAd
(
null
,
"openAd"
,
reqId
=
reqId
,
error
=
p1
.
message
,
code
=
p1
.
code
)
// LogEx.logDebug(TAG, "onAdHidden")
}
// onHidden?.invoke()
// onHidden = null
override
fun
onAdDisplayed
(
p0
:
MaxAd
)
{
// loadAppOpenAd(activity)
AdDisplayUtils
.
getInstance
().
incrementAdDisplayCount
()
//
AdMaxEvent
.
showAd
(
p0
,
"openAd"
,
activityString
)
// isInterOpenShowing = false
// }
isInterOpenShowing
=
true
//
}
// override fun onAdDisplayFailed(p0: MaxAd, p1: MaxError) {
// LogEx.logDebug(TAG, "onAdDisplayFailed")
override
fun
onAdHidden
(
p0
:
MaxAd
)
{
// onHidden?.invoke()
LogEx
.
logDebug
(
TAG
,
"onAdHidden"
)
// onHidden = null
onHidden
?.
invoke
()
// loadAppOpenAd(activity)
onHidden
=
null
// val obj = JSONObject()
loadAppOpenAd
(
activity
)
// obj.put("code", p1.code)
// obj.put("reason", p1.message)
isInterOpenShowing
=
false
// obj.put("ad_unit", "openAd")
}
// EventUtils.event("ad_show_error", ext = obj)
//
override
fun
onAdDisplayFailed
(
p0
:
MaxAd
,
p1
:
MaxError
)
{
// isInterOpenShowing = false
LogEx
.
logDebug
(
TAG
,
"onAdDisplayFailed"
)
// }
onHidden
?.
invoke
()
//
onHidden
=
null
// override fun onAdClicked(p0: MaxAd) {
loadAppOpenAd
(
activity
)
// AdDisplayUtils.getInstance().incrementAdClickCount()
val
obj
=
JSONObject
()
// AdMaxEvent.clickAd(p0, "openAd")
obj
.
put
(
"code"
,
p1
.
code
)
// }
obj
.
put
(
"reason"
,
p1
.
message
)
//
obj
.
put
(
"ad_unit"
,
"openAd"
)
// })
EventUtils
.
event
(
"ad_show_error"
,
ext
=
obj
)
//
// appOpenAd?.setRevenueListener(AdMaxEvent.EventOnPaidEventListener())
isInterOpenShowing
=
false
// }
}
// }
//
override
fun
onAdClicked
(
p0
:
MaxAd
)
{
// fun showAppOpenAd(
AdDisplayUtils
.
getInstance
().
incrementAdClickCount
()
// activity: Activity,
AdMaxEvent
.
clickAd
(
p0
,
"openAd"
)
// loadCallBack: ((loaded: Boolean) -> Unit)? = null,
}
// onHidden: (() -> Unit)? = null
// ) {
})
//
// setListener(activity)
appOpenAd
?.
setRevenueListener
(
AdMaxEvent
.
EventOnPaidEventListener
())
//
}
// if (activity.isFinishing || activity.isDestroyed) {
}
// return
// }
fun
showAppOpenAd
(
//
activity
:
Activity
,
// if (!AdDisplayUtils.getInstance().shouldShowAd("openAd")) {
showBefore
:
((
flag
:
Boolean
)
->
Unit
)?
=
null
,
// LogEx.logDebug(TAG, "!shouldShowAd")
loadCallBack
:
((
loaded
:
Boolean
)
->
Unit
)?
=
null
,
// onHidden?.invoke()
onHidden
:
(()
->
Unit
)?
=
null
// return
)
{
// }
//
setListener
(
activity
)
// if (System.currentTimeMillis() - openLoadTime > 1000 * 60 * 60) {
// LogEx.logDebug(TAG, "openLoadTime > ")
if
(
activity
.
isFinishing
||
activity
.
isDestroyed
)
{
// onHidden?.invoke()
return
// val obj2 = JSONObject()
}
// obj2.put("ad_unit", "openAd")
// EventUtils.event("ad_expire", ext = obj2)
if
(!
AdDisplayUtils
.
getInstance
().
shouldShowAd
(
"openAd"
))
{
// appOpenAd?.loadAd()
LogEx
.
logDebug
(
TAG
,
"!shouldShowAd"
)
// }
onHidden
?.
invoke
()
//
return
//
}
//
// LogEx.logDebug(TAG, "showAppOpenAd")
if
(
System
.
currentTimeMillis
()
-
openLoadTime
>
1000
*
60
*
60
)
{
// val obj1 = JSONObject()
LogEx
.
logDebug
(
TAG
,
"openLoadTime > "
)
// obj1.put("ad_unit", "openAd")
onHidden
?.
invoke
()
// EventUtils.event("ad_prepare_show", ext = obj1)
val
obj2
=
JSONObject
()
//
obj2
.
put
(
"ad_unit"
,
"openAd"
)
// isInterOpenShowing = false
EventUtils
.
event
(
"ad_expire"
,
ext
=
obj2
)
//
appOpenAd
?.
loadAd
()
// if (appOpenAd?.isReady == true) {
}
// LogEx.logDebug(TAG, "广告准备好了,展示广告")
// AdMaxOpenUtils.onHidden = onHidden
// appOpenAd?.showAd()
// } else {
LogEx
.
logDebug
(
TAG
,
"showAppOpenAd"
)
// val obj = JSONObject()
val
obj1
=
JSONObject
()
// obj.put("reason", "no cache ad")
obj1
.
put
(
"ad_unit"
,
"openAd"
)
// obj.put("ad_unit", "openAd")
EventUtils
.
event
(
"ad_prepare_show"
,
ext
=
obj1
)
// EventUtils.event("ad_nocache_pull", ext = obj)
// LogEx.logDebug(TAG, "展示时候,发现广告需要拉取")
isInterOpenShowing
=
false
// val loaded = loadAppOpenAd(activity)
// if (loaded) {
if
(
appOpenAd
?.
isReady
==
true
)
{
// loadingListener = { loadResult ->
LogEx
.
logDebug
(
TAG
,
"广告准备好了,展示广告"
)
// loadCallBack?.invoke(loadResult)
AdMaxOpenUtils
.
onHidden
=
onHidden
// LogEx.logDebug(TAG, "loadingListener callback")
LogEx
.
logDebug
(
TAG
,
"Splash2Activity.isSplashHot=${Splash2Activity.isSplashHot}"
)
// if (appOpenAd?.isReady == true) {
showBefore
?.
invoke
(
true
)
// AdMaxOpenUtils.onHidden = onHidden
if
(
Splash2Activity
.
isSplashHot
)
{
// appOpenAd?.showAd()
startCountdownAndShowAd
{
// } else {
appOpenAd
?.
showAd
()
// onHidden?.invoke()
}
// }
}
else
{
// }
appOpenAd
?.
showAd
()
// } else {
}
// onHidden?.invoke()
}
else
{
// }
val
obj
=
JSONObject
()
//
obj
.
put
(
"reason"
,
"no cache ad"
)
// }
obj
.
put
(
"ad_unit"
,
"openAd"
)
// }
EventUtils
.
event
(
"ad_nocache_pull"
,
ext
=
obj
)
//
LogEx
.
logDebug
(
TAG
,
"展示时候,发现广告需要拉取"
)
// fun loadAppOpenAd(activity: Activity): Boolean {
val
loaded
=
loadAppOpenAd
(
activity
)
// setListener(activity)
if
(
loaded
)
{
//
loadingListener
=
{
loadResult
->
// if (!AdDisplayUtils.getInstance().shouldShowAd("openAd")) {
loadCallBack
?.
invoke
(
loadResult
)
// LogEx.logDebug(TAG, "!shouldShowAd")
LogEx
.
logDebug
(
TAG
,
"loadingListener callback"
)
// return false
if
(
appOpenAd
?.
isReady
==
true
)
{
// }
AdMaxOpenUtils
.
onHidden
=
onHidden
//
showBefore
?.
invoke
(
true
)
// val reqId = UUID.randomUUID().toString()
LogEx
.
logDebug
(
TAG
,
"Splash2Activity.isSplashHot=${Splash2Activity.isSplashHot}"
)
// val obj = JSONObject()
if
(
Splash2Activity
.
isSplashHot
)
{
// obj.put("req_id", reqId)
startCountdownAndShowAd
{
// obj.put("ad_type", "openAd")
appOpenAd
?.
showAd
()
// EventUtils.event("ad_pull_start", ext = obj)
}
// appOpenAd?.loadAd()
}
else
{
// AdDisplayUtils.getInstance().incrementAdRequestCount()
appOpenAd
?.
showAd
()
// return true
}
// }
}
else
{
//
showBefore
?.
invoke
(
false
)
// fun isOpenAdLoaded(): Boolean {
onHidden
?.
invoke
()
// return appOpenAd?.isReady == true
}
// }
}
//
}
else
{
//}
onHidden
?.
invoke
()
//
}
}
}
fun
loadAppOpenAd
(
activity
:
Activity
):
Boolean
{
setListener
(
activity
)
if
(!
AdDisplayUtils
.
getInstance
().
shouldShowAd
(
"openAd"
))
{
LogEx
.
logDebug
(
TAG
,
"!shouldShowAd"
)
return
false
}
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
?.
loadAd
()
AdDisplayUtils
.
getInstance
().
incrementAdRequestCount
()
return
true
}
fun
isOpenAdLoaded
():
Boolean
{
return
appOpenAd
?.
isReady
==
true
}
private
fun
showLoadingScreen
(
activity
:
Activity
,
callBack
:
(()
->
Unit
))
{
if
(
activity
.
isFinishing
||
activity
.
isDestroyed
)
{
return
}
if
(
loadingDialog
==
null
)
{
loadingDialog
=
Dialog
(
activity
).
apply
{
requestWindowFeature
(
Window
.
FEATURE_NO_TITLE
)
setContentView
(
R
.
layout
.
dialog_loading
)
setCancelable
(
false
)
window
?.
setBackgroundDrawable
(
ContextCompat
.
getDrawable
(
activity
,
R
.
drawable
.
bg_loadingads
))
}
}
val
imageView
=
loadingDialog
?.
findViewById
<
ImageView
>(
R
.
id
.
loading_image
)
val
countdownTextView
=
loadingDialog
?.
findViewById
<
TextView
>(
R
.
id
.
countdown_text
)
imageView
?.
let
{
startRotateAnimation
(
it
)
}
// 开始旋转动画
// 控制倒计时文本是否显示
countdownTextView
?.
visibility
=
View
.
VISIBLE
loadingDialog
?.
show
()
startCountdownAndShowAd
(
callBack
=
callBack
)
}
private
fun
startRotateAnimation
(
imageView
:
ImageView
)
{
ObjectAnimator
.
ofFloat
(
imageView
,
"rotation"
,
0f
,
360f
).
apply
{
duration
=
3000
// 持续 3 秒
repeatCount
=
ObjectAnimator
.
INFINITE
// 无限循环
start
()
}
}
private
var
countdown
=
3
// 初始倒计时
private
var
countdownHandler
:
Handler
?
=
null
private
var
loadingDialog
:
Dialog
?
=
null
private
fun
startCountdownAndShowAd
(
callBack
:
(()
->
Unit
)?)
{
countdown
=
3
updateCountdownText
(
count
=
countdown
)
// 显示倒计时文本
countdownHandler
?.
removeCallbacksAndMessages
(
null
)
countdownHandler
=
Handler
(
Looper
.
getMainLooper
())
countdownHandler
?.
post
(
object
:
Runnable
{
override
fun
run
()
{
if
(
countdown
<=
0
)
{
loadingDialog
?.
dismiss
()
Splash2Activity
.
progressCallBack
=
null
callBack
?.
invoke
()
}
else
{
Splash2Activity
.
progressCallBack
?.
invoke
()
updateCountdownText
(
countdown
)
// 更新倒计时文本
countdown
--
LogEx
.
logDebug
(
TAG
,
"startCountdownAndShowAd countdown=$countdown"
)
countdownHandler
?.
postDelayed
(
this
,
1000
)
}
}
})
}
// 更新倒计时文本并控制是否显示括号和数字
private
fun
updateCountdownText
(
count
:
Int
)
{
val
countdownTextView
=
loadingDialog
?.
findViewById
<
TextView
>(
R
.
id
.
countdown_text
)
// LogEx.logDebug(AdmobOpenUtils.TAG, "updateCountdownText $count countdownTextView=$countdownTextView")
countdownTextView
?.
text
=
"Ads are about to be shown($count)"
countdownTextView
?.
visibility
=
View
.
VISIBLE
}
}
app/src/main/java/com/base/filerecoveryrecyclebin/bean/ConstObject.kt
View file @
230eb832
...
@@ -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"
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/fragment/GuideFragment.kt
View file @
230eb832
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."
binding
.
tvBtn
.
text
=
"Next"
// binding.flSkip.visibility = View.GONE
}
else
{
binding
.
iv
.
isVisible
=
false
binding
.
tv0
.
isVisible
=
false
binding
.
idLl111
.
isVisible
=
true
binding
.
tvBtn
.
text
=
"Next"
}
}
1
->
{
binding
.
iv
.
setImageResource
(
R
.
mipmap
.
yindaotu2
)
binding
.
ivDian
.
setImageResource
(
R
.
mipmap
.
dian2
)
binding
.
tvContent
.
text
=
"Quickly clear junk files and free up valuable\n"
+
"storage with just a few taps."
}
}
override
fun
setListener
()
{
3
->
{
super
.
setListener
()
binding
.
iv
.
setImageResource
(
R
.
mipmap
.
yindaotu3
)
binding
.
tvBtn
.
setOnClickListener
{
binding
.
ivDian
.
setImageResource
(
R
.
mipmap
.
dian3
)
if
(
page
==
1
)
{
binding
.
tvContent
.
text
=
"Clean photos,videos,and audio files to\n"
+
(
requireActivity
()
as
GuideActivity
).
setPosition
(
1
)
"save space and keep your phone tidy."
}
else
if
(
page
==
2
)
{
(
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
))
override
fun
setListener
()
{
requireActivity
().
finish
()
super
.
setListener
()
binding
.
tvBtn
.
setOnClickListener
{
val
activity
=
requireActivity
()
as
GuideActivity
?
activity
?:
requireActivity
()
activity
?.
next
(
page
)
}
}
}
}
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
app/src/main/res/drawable/bg_4676ff_69.xml
0 → 100644
View file @
230eb832
<?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
app/src/main/res/drawable/bg_ebf3ff_16.xml
0 → 100644
View file @
230eb832
<?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
app/src/main/res/drawable/bg_loadingads.xml
0 → 100644
View file @
230eb832
<?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
app/src/main/res/drawable/bg_select_yuan.xml
0 → 100644
View file @
230eb832
<?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
app/src/main/res/layout/activity_which_want_guide.xml
0 → 100644
View file @
230eb832
<?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
app/src/main/res/layout/dialog_loading.xml
0 → 100644
View file @
230eb832
<?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>
app/src/main/res/layout/fragment_guide.xml
View file @
230eb832
...
@@ -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=
"#
EFEFE
F"
android:background=
"#
FFFFF
F"
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
android:id=
"@+id/id_ll_111"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:gravity=
"center"
android:orientation=
"vertical"
android:visibility=
"gone"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
>
<TextView
android:id=
"@+id/id_tv_need"
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
<TextView
android:layout_width=
"wrap_content"
android:id=
"@+id/tvContent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginHorizontal=
"20dp"
android:layout_marginHorizontal=
"20dp"
android:layout_marginTop=
"18dp"
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:gravity=
"center"
android:text=
"allow"
android:text=
"Clean up clutter to unlock more space and keep your phone running smoothly."
android:textColor=
"#4773FF"
android:textColor=
"#000000"
android:textSize=
"13sp"
/>
android:textSize=
"16sp"
app:layout_constraintEnd_toEndOf=
"parent"
<TextView
app:layout_constraintStart_toStartOf=
"parent"
android:id=
"@+id/id_tv_not_allow"
app:layout_constraintTop_toBottomOf=
"@id/iv"
/>
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_height=
"120dp"
android:layout_marginTop=
"50dp"
android:orientation=
"vertical"
app:layout_constraintEnd_toEndOf=
"@id/iv"
app:layout_constraintStart_toStartOf=
"@id/iv"
app:layout_constraintTop_toBottomOf=
"@id/iv"
>
<Text
View
<Image
View
android:id=
"@+id/tv_0
"
android:id=
"@+id/ivDian
"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"25dp"
android:layout_marginHorizontal=
"40dp"
android:src=
"@mipmap/dian1"
android:text=
"Deleted precious photos or important
app:layout_constraintEnd_toEndOf=
"parent"
filesbyaccident?Regret kicks in."
app:layout_constraintStart_toStartOf=
"parent"
android:textSize=
"15sp"
app:layout_constraintTop_toBottomOf=
"@id/tvContent"
/>
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
app/src/main/res/layout/fragment_native_full.xml
0 → 100644
View file @
230eb832
<?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
app/src/main/res/layout/layout_max_native_full.xml
0 → 100644
View file @
230eb832
<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
app/src/main/res/layout/layout_native_full.xml
0 → 100644
View file @
230eb832
<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>
app/src/main/res/mipmap-xxhdpi/dian1.png
0 → 100644
View file @
230eb832
2.4 KB
app/src/main/res/mipmap-xxhdpi/dian2.png
0 → 100644
View file @
230eb832
2.45 KB
app/src/main/res/mipmap-xxhdpi/dian3.png
0 → 100644
View file @
230eb832
2.43 KB
app/src/main/res/mipmap-xxhdpi/icon_audio.png
0 → 100644
View file @
230eb832
3.14 KB
app/src/main/res/mipmap-xxhdpi/icon_document.png
0 → 100644
View file @
230eb832
2.31 KB
app/src/main/res/mipmap-xxhdpi/icon_photo.png
0 → 100644
View file @
230eb832
5.94 KB
app/src/main/res/mipmap-xxhdpi/icon_video.png
0 → 100644
View file @
230eb832
4.83 KB
app/src/main/res/mipmap-xxhdpi/icon_yuan_n.png
0 → 100644
View file @
230eb832
2.32 KB
app/src/main/res/mipmap-xxhdpi/icon_yuan_s.png
0 → 100644
View file @
230eb832
3.02 KB
app/src/main/res/mipmap-xxhdpi/yindaotu1.png
0 → 100644
View file @
230eb832
173 KB
app/src/main/res/mipmap-xxhdpi/yindaotu2.png
0 → 100644
View file @
230eb832
116 KB
app/src/main/res/mipmap-xxhdpi/yindaotu3.png
0 → 100644
View file @
230eb832
104 KB
app/src/main/res/mipmap-xxhdpi/zhuanquan.png
0 → 100644
View file @
230eb832
11.2 KB
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment