Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
B
Browser White
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
Browser White
Commits
ca7d2ae8
Commit
ca7d2ae8
authored
Aug 27, 2024
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...ad
parent
0e02fbb7
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
32 changed files
with
2358 additions
and
22 deletions
+2358
-22
build.gradle.kts
app/build.gradle.kts
+1
-0
MyApplication.kt
app/src/main/java/com/base/browserwhite/MyApplication.kt
+3
-3
AdDisplayUtils.java
...c/main/java/com/base/browserwhite/ads/AdDisplayUtils.java
+308
-0
AdmobMaxHelper.kt
...src/main/java/com/base/browserwhite/ads/AdmobMaxHelper.kt
+162
-0
CustomDialog.kt
app/src/main/java/com/base/browserwhite/ads/CustomDialog.kt
+20
-0
AdmobBannerColla.kt
.../java/com/base/browserwhite/ads/admob/AdmobBannerColla.kt
+90
-0
AdmobEvent.kt
...c/main/java/com/base/browserwhite/ads/admob/AdmobEvent.kt
+248
-0
AdmobInterstitialUtils.kt
...com/base/browserwhite/ads/admob/AdmobInterstitialUtils.kt
+179
-0
AdmobNativeUtils.kt
.../java/com/base/browserwhite/ads/admob/AdmobNativeUtils.kt
+113
-0
AdmobOpenUtils.kt
...in/java/com/base/browserwhite/ads/admob/AdmobOpenUtils.kt
+144
-0
NativeView.kt
...c/main/java/com/base/browserwhite/ads/admob/NativeView.kt
+62
-0
AdMaxEvent.kt
...src/main/java/com/base/browserwhite/ads/max/AdMaxEvent.kt
+144
-0
AdMaxInit.kt
app/src/main/java/com/base/browserwhite/ads/max/AdMaxInit.kt
+48
-0
AdMaxInterstitialUtils.kt
...a/com/base/browserwhite/ads/max/AdMaxInterstitialUtils.kt
+194
-0
AdMaxNativeUtils.kt
...in/java/com/base/browserwhite/ads/max/AdMaxNativeUtils.kt
+160
-0
AdMaxOpenUtils.kt
...main/java/com/base/browserwhite/ads/max/AdMaxOpenUtils.kt
+182
-0
ConfigHelper.kt
app/src/main/java/com/base/browserwhite/help/ConfigHelper.kt
+1
-1
EventUtils.kt
app/src/main/java/com/base/browserwhite/help/EventUtils.kt
+3
-2
NewsUtils.kt
app/src/main/java/com/base/browserwhite/help/NewsUtils.kt
+0
-1
StayNotificationService.kt
.../com/base/browserwhite/service/StayNotificationService.kt
+1
-1
SplashActivity.kt
.../java/com/base/browserwhite/ui/activity/SplashActivity.kt
+5
-6
CleaningActivity.kt
...se/browserwhite/ui/activity/cleanjunk/CleaningActivity.kt
+1
-1
WebDownloadManagerActivity.kt
...rwhite/ui/activity/download/WebDownloadManagerActivity.kt
+6
-6
bg_355bea_10.xml
app/src/main/res/drawable/bg_355bea_10.xml
+5
-0
bg_ad_border.xml
app/src/main/res/drawable/bg_ad_border.xml
+7
-0
bg_ff8a00_10.xml
app/src/main/res/drawable/bg_ff8a00_10.xml
+5
-0
circle_progress_bar.xml
app/src/main/res/drawable/circle_progress_bar.xml
+27
-0
dialog_ad_loading.xml
app/src/main/res/layout/dialog_ad_loading.xml
+33
-0
dialog_download_finish.xml
app/src/main/res/layout/dialog_download_finish.xml
+1
-1
layout_admob_native_custom.xml
app/src/main/res/layout/layout_admob_native_custom.xml
+99
-0
layout_admob_native_download.xml
app/src/main/res/layout/layout_admob_native_download.xml
+0
-0
layout_max_native_small.xml
app/src/main/res/layout/layout_max_native_small.xml
+106
-0
No files found.
app/build.gradle.kts
View file @
ca7d2ae8
...
...
@@ -129,6 +129,7 @@ dependencies {
//firebase
implementation
(
platform
(
"com.google.firebase:firebase-bom:32.3.1"
))
implementation
(
"com.google.firebase:firebase-analytics"
)
implementation
(
"com.google.firebase:firebase-analytics-ktx"
)
implementation
(
"com.google.firebase:firebase-crashlytics"
)
//机器学习二维码扫描
...
...
app/src/main/java/com/base/browserwhite/MyApplication.kt
View file @
ca7d2ae8
...
...
@@ -52,14 +52,14 @@ class MyApplication : Application() {
// LogEx.logDebug(TAG, "flag=$flag" + " activity:" + activity.localClassName)
//
// if (flag && !isInterOpenShowing) {
// if (AdmobMaxHelper.isOpenAdLoaded()) {
// if (
com.base.browserwhite.ads.
AdmobMaxHelper.isOpenAdLoaded()) {
// var loaded: Boolean = true
// AdmobMaxHelper.admobMaxShowOpenAd(activity, {
//
com.base.browserwhite.ads.
AdmobMaxHelper.admobMaxShowOpenAd(activity, {
// loaded = it
// }, {
// val sp = AppPreferences.getInstance().getString("splashShowInter", "0").toInt()
// if (sp == 1 && !loaded) {
// AdmobMaxHelper.admobMaxShowInterstitialAd(activity)
//
com.base.browserwhite.ads.
AdmobMaxHelper.admobMaxShowInterstitialAd(activity)
// }
// })
// } else {
...
...
app/src/main/java/com/base/browserwhite/ads/AdDisplayUtils.java
0 → 100644
View file @
ca7d2ae8
This diff is collapsed.
Click to expand it.
app/src/main/java/com/base/browserwhite/ads/AdmobMaxHelper.kt
0 → 100644
View file @
ca7d2ae8
package
com.base.browserwhite.ads
import
android.app.Activity
import
android.util.Log
import
android.view.ViewGroup
import
com.base.browserwhite.MyApplication
import
com.base.browserwhite.R
import
com.base.browserwhite.ads.admob.AdmobInterstitialUtils
import
com.base.browserwhite.ads.admob.AdmobNativeUtils
import
com.base.browserwhite.ads.admob.AdmobOpenUtils
import
com.base.browserwhite.ads.max.AdMaxInit
import
com.base.browserwhite.ads.max.AdMaxInit.initAdMax
import
com.base.browserwhite.ads.max.AdMaxInterstitialUtils
import
com.base.browserwhite.ads.max.AdMaxNativeUtils
import
com.base.browserwhite.ads.max.AdMaxOpenUtils
import
com.base.browserwhite.help.EventUtils
import
com.base.browserwhite.utils.AppPreferences
import
com.base.browserwhite.utils.LogEx
import
com.google.android.gms.ads.MobileAds
import
java.util.concurrent.atomic.AtomicBoolean
object
AdmobMaxHelper
{
private
val
TAG
=
"AdmobMaxHelper"
var
isAdInit
=
AtomicBoolean
(
false
)
var
isBlack
:
Boolean
=
false
var
isInterOpenShowing
:
Boolean
=
false
private
fun
getSpAdmobTrueMaxFalse
():
Boolean
{
val
ss
=
AppPreferences
.
getInstance
().
getString
(
"admobTrueMaxFalse"
,
"1"
).
toInt
()
return
ss
==
1
}
fun
showBackInterAdSp
():
Boolean
{
val
isShowBackIntAd
=
AppPreferences
.
getInstance
().
getString
(
"isShowBackIntAd"
,
"0"
).
toInt
()
//1要看插屏 0不看
return
isShowBackIntAd
==
1
}
fun
showDeleteAdSp
():
Boolean
{
val
isDeleteInterAd
=
AppPreferences
.
getInstance
().
getString
(
"isDeleteInterAd"
,
"0"
).
toInt
()
//1要看插屏 0不看
return
isDeleteInterAd
==
1
}
fun
initAdmobMaxAd
()
{
if
(
isBlack
)
{
return
}
if
(
getSpAdmobTrueMaxFalse
())
{
if
(!
isAdInit
.
get
())
{
LogEx
.
logDebug
(
TAG
,
"init sp Admob"
)
MobileAds
.
initialize
(
MyApplication
.
context
)
{
initializationStatus
->
isAdInit
.
set
(
true
)
EventUtils
.
event
(
"AdmobInit"
,
"AdmobInit"
)
}
}
}
else
{
if
(!
isAdInit
.
get
())
{
LogEx
.
logDebug
(
TAG
,
"init sp AdMax"
)
MyApplication
.
context
.
initAdMax
()
}
}
}
//展示广告关闭时赋值
var
lastShowedOnHiddenTime
=
0L
fun
admobMaxShowInterstitialAd
(
activity
:
Activity
,
isLoading
:
Boolean
=
true
,
onHidden
:
(()
->
Unit
)?
=
null
)
{
if
(
isBlack
)
{
EventUtils
.
event
(
"ad_black"
,
"interAd"
)
onHidden
?.
invoke
()
return
}
val
isShowLoadingAd
=
AppPreferences
.
getInstance
().
getString
(
"isShowLoadingAd"
,
"0"
).
toInt
()
if
(
isShowLoadingAd
==
0
&&
isLoading
)
{
EventUtils
.
event
(
"ad_switch_close"
)
onHidden
?.
invoke
()
return
}
val
adInterval
=
AppPreferences
.
getInstance
().
getString
(
"adInterval"
,
"0"
).
toInt
()
if
((
System
.
currentTimeMillis
()
-
lastShowedOnHiddenTime
)
<
adInterval
*
1000
&&
lastShowedOnHiddenTime
!=
0L
)
{
onHidden
?.
invoke
()
EventUtils
.
event
(
"ad_interval"
)
return
}
if
(
getSpAdmobTrueMaxFalse
())
{
AdmobInterstitialUtils
.
showInterstitialAd
(
activity
)
{
onHidden
?.
invoke
()
}
}
else
{
AdMaxInterstitialUtils
.
showInterstitialAd
(
activity
)
{
onHidden
?.
invoke
()
}
}
}
fun
admobMaxShowOpenAd
(
activity
:
Activity
,
showBeforeAction
:
(
flag
:
Boolean
)
->
Unit
,
onHidden
:
(()
->
Unit
)?
=
null
,
)
{
if
(
isBlack
)
{
EventUtils
.
event
(
"ad_black"
,
"openAd"
)
onHidden
?.
invoke
()
return
}
if
(
getSpAdmobTrueMaxFalse
())
{
AdmobOpenUtils
.
showAppOpenAd
(
activity
,
showBefore
=
showBeforeAction
)
{
onHidden
?.
invoke
()
}
}
else
{
AdMaxOpenUtils
.
showAppOpenAd
(
activity
,
loadCallBack
=
showBeforeAction
)
{
onHidden
?.
invoke
()
}
}
}
fun
admobMaxShowNativeAd
(
activity
:
Activity
,
parent
:
ViewGroup
,
where
:
Int
=
0
)
{
if
(
isBlack
)
{
return
}
if
(
getSpAdmobTrueMaxFalse
())
{
AdmobNativeUtils
.
showNativeAd
(
activity
,
parent
)
}
else
{
var
layout
=
R
.
layout
.
layout_max_native_small
// if (where == 0) {
// layout = R.layout.layout_max_native_small_f8f8f8
// }
// if (where == 1) {
// layout = R.layout.layout_max_native_big
// }
// if (where == 2) {
// layout = R.layout.layout_max_native_big_2
// }
AdMaxNativeUtils
.
showNativeAd
(
activity
,
parent
,
layout
)
}
}
fun
preloadAd
(
activity
:
Activity
)
{
if
(
isBlack
)
{
return
}
if
(
getSpAdmobTrueMaxFalse
())
{
// com.base.browserwhite.ads.admob.AdmobOpenUtils.loadAppOpenAd()
AdmobInterstitialUtils
.
loadInterstitialAd
(
activity
)
}
else
{
if
(
isAdInit
.
get
())
{
// com.base.browserwhite.ads.max.AdMaxOpenUtils.loadAppOpenAd(activity)
AdMaxInterstitialUtils
.
loadInterstitialAd
(
activity
)
}
else
{
AdMaxInit
.
maxInitAction
=
{
Log
.
d
(
TAG
,
"max init suc"
)
// com.base.browserwhite.ads.max.AdMaxOpenUtils.loadAppOpenAd(activity)
// com.base.browserwhite.ads.max.AdMaxInterstitialUtils.loadInterstitialAd(activity)
}
}
}
}
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/ads/CustomDialog.kt
0 → 100644
View file @
ca7d2ae8
package
com.base.browserwhite.ads
import
android.app.Dialog
import
android.content.Context
import
android.view.Gravity
import
android.view.View
class
CustomDialog
(
context
:
Context
,
layoutId
:
Int
?
=
null
,
view
:
View
?
=
null
)
:
Dialog
(
context
)
{
init
{
layoutId
?.
let
{
setContentView
(
it
)
}
view
?.
let
{
setContentView
(
it
)
}
val
window
=
window
window
?.
apply
{
setGravity
(
Gravity
.
CENTER
)
setBackgroundDrawableResource
(
android
.
R
.
color
.
transparent
)
}
setCancelable
(
false
)
}
}
app/src/main/java/com/base/browserwhite/ads/admob/AdmobBannerColla.kt
0 → 100644
View file @
ca7d2ae8
package
com.base.browserwhite.ads.admob
import
android.content.Context
import
android.os.Bundle
import
android.view.View
import
android.view.ViewGroup
import
android.view.ViewTreeObserver
import
androidx.core.view.children
import
com.base.browserwhite.BuildConfig
import
com.base.browserwhite.help.ConfigHelper
import
com.base.browserwhite.utils.AppPreferences
import
com.base.browserwhite.utils.LogEx
import
com.google.ads.mediation.admob.AdMobAdapter
import
com.google.android.gms.ads.AdListener
import
com.google.android.gms.ads.AdRequest
import
com.google.android.gms.ads.AdSize
import
com.google.android.gms.ads.AdView
import
java.util.UUID
object
AdmobBannerUtils
{
private
const
val
TAG
=
"AdmobBannerUtils"
private
var
adView
:
AdView
?
=
null
private
var
listener
:
ViewTreeObserver
.
OnGlobalLayoutListener
?
=
null
fun
showCollapsibleBannerAd
(
context
:
Context
,
parent
:
ViewGroup
)
{
val
isShowBanner
=
AppPreferences
.
getInstance
().
getString
(
"isShowBanner"
,
"0"
).
toInt
()
if
(
isShowBanner
==
0
)
{
return
}
if
(
adView
!=
null
)
{
adView
?.
destroy
()
}
adView
=
AdView
(
context
)
adView
?.
tag
=
"CollapsibleBannerAd"
// parent.removeAllViews()
val
list
=
parent
.
children
list
.
forEach
{
if
(
it
.
tag
!=
"zhanweitu"
)
{
parent
.
removeView
(
it
)
}
}
parent
.
addView
(
adView
)
listener
=
ViewTreeObserver
.
OnGlobalLayoutListener
{
val
screenPixelDensity
=
context
.
resources
.
displayMetrics
.
density
val
adWidth
=
(
parent
.
width
/
screenPixelDensity
).
toInt
()
val
adSize
=
AdSize
.
getCurrentOrientationAnchoredAdaptiveBannerAdSize
(
context
,
adWidth
)
adView
?.
adUnitId
=
if
(
BuildConfig
.
DEBUG
)
ConfigHelper
.
bannerAdmobIdTest
else
ConfigHelper
.
bannerAdmobId
adView
?.
setAdSize
(
adSize
)
loadCollapsibleBanner
(
parent
)
parent
.
viewTreeObserver
.
removeOnGlobalLayoutListener
(
listener
)
}
parent
.
viewTreeObserver
.
addOnGlobalLayoutListener
(
listener
)
}
private
fun
loadCollapsibleBanner
(
parent
:
ViewGroup
)
{
val
extras
=
Bundle
()
extras
.
putString
(
"collapsible"
,
"bottom"
)
extras
.
putString
(
"collapsible_request_id"
,
UUID
.
randomUUID
().
toString
())
val
adRequest
=
AdRequest
.
Builder
().
addNetworkExtrasBundle
(
AdMobAdapter
::
class
.
java
,
extras
).
build
()
adView
?.
adListener
=
object
:
AdListener
()
{
override
fun
onAdLoaded
()
{
LogEx
.
logDebug
(
TAG
,
"onAdLoaded"
)
}
override
fun
onAdOpened
()
{
LogEx
.
logDebug
(
TAG
,
"onAdOpened"
)
}
override
fun
onAdClosed
()
{
super
.
onAdClosed
()
LogEx
.
logDebug
(
TAG
,
"onAdClosed"
)
val
removeList
=
arrayListOf
<
View
>()
parent
.
children
.
forEach
{
if
(
it
.
tag
!=
"CollapsibleBannerAd"
)
{
removeList
.
add
(
it
)
}
}
removeList
.
forEach
{
parent
.
removeView
(
it
)
}
}
}
adView
?.
loadAd
(
adRequest
)
}
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/ads/admob/AdmobEvent.kt
0 → 100644
View file @
ca7d2ae8
This diff is collapsed.
Click to expand it.
app/src/main/java/com/base/browserwhite/ads/admob/AdmobInterstitialUtils.kt
0 → 100644
View file @
ca7d2ae8
package
com.base.browserwhite.ads.admob
import
android.app.Activity
import
android.app.Dialog
import
android.widget.Toast
import
com.base.browserwhite.BuildConfig
import
com.base.browserwhite.MyApplication
import
com.base.browserwhite.R
import
com.base.browserwhite.ads.AdDisplayUtils
import
com.base.browserwhite.ads.AdmobMaxHelper.lastShowedOnHiddenTime
import
com.base.browserwhite.ads.CustomDialog
import
com.base.browserwhite.ads.admob.AdmobEvent.clickAd
import
com.base.browserwhite.ads.admob.AdmobEvent.pullAd
import
com.base.browserwhite.ads.admob.AdmobEvent.showAd
import
com.base.browserwhite.help.ConfigHelper
import
com.base.browserwhite.help.EventUtils
import
com.google.android.gms.ads.AdError
import
com.google.android.gms.ads.AdRequest
import
com.google.android.gms.ads.FullScreenContentCallback
import
com.google.android.gms.ads.LoadAdError
import
com.google.android.gms.ads.interstitial.InterstitialAd
import
com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback
import
org.json.JSONObject
import
java.util.UUID
object
AdmobInterstitialUtils
{
private
var
interAd
:
InterstitialAd
?
=
null
private
var
interLoadTime
=
Long
.
MAX_VALUE
private
var
adLastDisplayTime
:
Long
=
0
private
val
mRequest
=
AdRequest
.
Builder
().
build
()
private
fun
isAdExpired
():
Boolean
{
return
System
.
currentTimeMillis
()
-
interLoadTime
>
1000
*
60
*
60
}
fun
showInterstitialAd
(
activity
:
Activity
,
isReLoadAd
:
Boolean
=
false
,
isShowDialog
:
Boolean
=
true
,
onHidden
:
(()
->
Unit
)?
=
null
)
{
if
(
activity
.
isFinishing
||
activity
.
isDestroyed
)
{
return
}
val
obj1
=
JSONObject
()
obj1
.
put
(
"ad_unit"
,
"interAd"
)
EventUtils
.
event
(
"ad_prepare_show"
,
ext
=
obj1
)
if
(
isAdExpired
())
{
val
obj2
=
JSONObject
()
obj2
.
put
(
"ad_unit"
,
"interAd"
)
EventUtils
.
event
(
"ad_expire"
,
ext
=
obj2
)
interAd
=
null
loadInterstitialAd
(
activity
)
onHidden
?.
invoke
()
return
}
if
(!
AdDisplayUtils
.
getInstance
().
shouldShowAd
(
"interAd"
))
{
onHidden
?.
invoke
()
return
}
if
(
interAd
!=
null
)
{
displayInterstitialAd
(
activity
,
onHidden
)
}
else
{
showAdDialogAndLoadInterstitial
(
activity
,
isReLoadAd
,
isShowDialog
,
onHidden
)
}
}
fun
loadInterstitialAd
(
activity
:
Activity
,
onLoad
:
(()
->
Unit
)?
=
null
)
{
if
(
interAd
!=
null
)
{
onLoad
?.
invoke
()
return
}
if
(!
AdDisplayUtils
.
getInstance
().
shouldShowAd
(
""
))
{
onLoad
?.
invoke
()
return
}
val
reqId
=
UUID
.
randomUUID
().
toString
()
val
obj
=
JSONObject
()
obj
.
put
(
"req_id"
,
reqId
)
obj
.
put
(
"ad_type"
,
"interAd"
)
obj
.
put
(
"from"
,
activity
.
javaClass
.
simpleName
)
EventUtils
.
event
(
"ad_pull_start"
,
ext
=
obj
)
InterstitialAd
.
load
(
activity
,
if
(
BuildConfig
.
DEBUG
)
ConfigHelper
.
interAdmobIdTest
else
ConfigHelper
.
interAdmobId
,
mRequest
,
object
:
InterstitialAdLoadCallback
()
{
override
fun
onAdFailedToLoad
(
p0
:
LoadAdError
)
{
interAd
=
null
onLoad
?.
invoke
()
pullAd
(
p0
.
responseInfo
,
"interAd"
,
p0
.
message
,
reqId
=
reqId
)
if
(
BuildConfig
.
DEBUG
)
{
Toast
.
makeText
(
MyApplication
.
context
,
"拉取失败"
+
p0
.
message
,
Toast
.
LENGTH_SHORT
).
show
()
}
}
override
fun
onAdLoaded
(
ad
:
InterstitialAd
)
{
interAd
=
ad
onLoad
?.
invoke
()
interLoadTime
=
System
.
currentTimeMillis
()
pullAd
(
ad
.
responseInfo
,
"interAd"
,
reqId
=
reqId
)
ad
.
onPaidEventListener
=
AdmobEvent
.
EventOnPaidEventListener
(
ad
)
}
})
}
private
fun
showAdDialogAndLoadInterstitial
(
activity
:
Activity
,
isReLoadAd
:
Boolean
,
isShowDialog
:
Boolean
,
onHidden
:
(()
->
Unit
)?
)
{
if
(!
isShowDialog
)
{
onHidden
?.
invoke
()
return
}
var
mDialog
:
Dialog
?
=
null
if
(!
activity
.
isFinishing
&&
!
activity
.
isDestroyed
)
{
mDialog
=
CustomDialog
(
activity
,
R
.
layout
.
dialog_ad_loading
)
// 设置对话框的样式和内容
mDialog
.
show
()
}
loadInterstitialAd
(
activity
)
{
mDialog
?.
dismiss
()
if
(!
isReLoadAd
)
{
showInterstitialAd
(
activity
,
true
,
false
)
{
onHidden
?.
invoke
()
}
}
}
if
(
isReLoadAd
)
{
mDialog
?.
dismiss
()
onHidden
?.
invoke
()
}
}
private
fun
displayInterstitialAd
(
activity
:
Activity
,
onHidden
:
(()
->
Unit
)?
=
null
)
{
val
thisInterAd
=
interAd
interAd
=
null
thisInterAd
?.
fullScreenContentCallback
=
object
:
FullScreenContentCallback
()
{
override
fun
onAdClicked
()
{
clickAd
(
thisInterAd
?.
responseInfo
,
"interAd"
)
AdDisplayUtils
.
getInstance
().
incrementAdClickCount
()
}
override
fun
onAdDismissedFullScreenContent
()
{
interAd
=
null
onHidden
?.
invoke
()
loadInterstitialAd
(
activity
)
lastShowedOnHiddenTime
=
System
.
currentTimeMillis
()
}
override
fun
onAdFailedToShowFullScreenContent
(
p0
:
AdError
)
{
interAd
=
null
onHidden
?.
invoke
()
loadInterstitialAd
(
activity
)
}
override
fun
onAdShowedFullScreenContent
()
{
showAd
(
thisInterAd
?.
responseInfo
,
"interAd"
,
activity
)
AdDisplayUtils
.
getInstance
().
incrementAdDisplayCount
()
adLastDisplayTime
=
System
.
currentTimeMillis
()
/
1000
}
}
thisInterAd
?.
show
(
activity
)
}
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/ads/admob/AdmobNativeUtils.kt
0 → 100644
View file @
ca7d2ae8
package
com.base.browserwhite.ads.admob
import
android.app.Activity
import
android.view.ViewGroup
import
androidx.core.view.isVisible
import
com.base.browserwhite.BuildConfig
import
com.base.browserwhite.MyApplication
import
com.base.browserwhite.R
import
com.base.browserwhite.ads.AdDisplayUtils
import
com.base.browserwhite.ads.admob.AdmobEvent.clickAd
import
com.base.browserwhite.ads.admob.AdmobEvent.pullAd
import
com.base.browserwhite.ads.admob.AdmobEvent.showAd
import
com.base.browserwhite.help.ConfigHelper
import
com.base.browserwhite.help.EventUtils
import
com.base.browserwhite.utils.LogEx
import
com.google.android.gms.ads.AdListener
import
com.google.android.gms.ads.AdLoader
import
com.google.android.gms.ads.AdRequest
import
com.google.android.gms.ads.LoadAdError
import
com.google.android.gms.ads.nativead.NativeAd
import
org.json.JSONObject
import
java.util.UUID
object
AdmobNativeUtils
{
private
const
val
TAG
=
"AdmobNativeUtils"
private
var
nativeAd
:
NativeAd
?
=
null
private
var
isLoading
=
false
private
var
nativeLoadTime
=
Long
.
MAX_VALUE
private
var
loadingListener
:
(()
->
Unit
)?
=
null
private
val
mRequest
=
AdRequest
.
Builder
().
build
()
private
fun
loadNativeAd
()
{
if
(
nativeAd
!=
null
)
{
return
}
if
(
isLoading
)
{
return
}
isLoading
=
true
if
(!
AdDisplayUtils
.
getInstance
().
shouldShowAd
(
"NativeAd"
))
{
return
}
val
reqId
=
UUID
.
randomUUID
().
toString
()
val
obj
=
JSONObject
()
obj
.
put
(
"req_id"
,
reqId
)
obj
.
put
(
"ad_type"
,
"nativeAd"
)
val
adLoader
=
AdLoader
.
Builder
(
MyApplication
.
context
,
if
(
BuildConfig
.
DEBUG
)
ConfigHelper
.
nativeAdmobIdTest
else
ConfigHelper
.
nativeAdmobId
).
forNativeAd
{
nativeLoadTime
=
System
.
currentTimeMillis
()
nativeAd
=
it
LogEx
.
logDebug
(
TAG
,
"nativeAd=${nativeAd.toString()}"
)
isLoading
=
false
loadingListener
?.
invoke
()
pullAd
(
it
.
responseInfo
,
"nativeAd"
,
reqId
=
reqId
)
it
.
setOnPaidEventListener
(
AdmobEvent
.
EventOnPaidEventListener
(
it
))
}.
withAdListener
(
object
:
AdListener
()
{
override
fun
onAdClicked
()
{
clickAd
(
nativeAd
?.
responseInfo
,
"nativeAd"
)
}
override
fun
onAdFailedToLoad
(
p0
:
LoadAdError
)
{
LogEx
.
logDebug
(
TAG
,
"onAdFailedToLoad=${p0.message}"
)
nativeAd
=
null
isLoading
=
false
pullAd
(
p0
.
responseInfo
,
"nativeAd"
,
p0
.
message
,
reqId
=
reqId
)
// Log.e("MXL", "NativeAdFailedToLoad: " + p0.message)
}
}).
build
()
adLoader
.
loadAd
(
mRequest
)
}
fun
showNativeAd
(
activity
:
Activity
?,
parent
:
ViewGroup
,
layout
:
Int
=
R
.
layout
.
layout_admob_native_custom
)
{
val
obj
=
JSONObject
()
obj
.
put
(
"ad_unit"
,
"NativeAd"
)
EventUtils
.
event
(
"ad_prepare_show_native"
,
ext
=
obj
)
if
(!
AdDisplayUtils
.
getInstance
().
shouldShowAd
(
"NativeAd"
))
{
return
}
loadingListener
=
{
if
(
System
.
currentTimeMillis
()
-
nativeLoadTime
<=
1000
*
60
*
60
)
{
nativeAd
?.
let
{
NativeView
(
parent
.
context
,
layout
).
run
{
parent
.
removeAllViews
()
setNativeAd
(
it
)
parent
.
addView
(
this
)
parent
.
isVisible
=
true
showAd
(
nativeAd
?.
responseInfo
,
"nativeAd"
,
activity
)
}
}
}
nativeAd
=
null
loadingListener
=
null
loadNativeAd
()
}
if
(
nativeAd
==
null
)
{
loadNativeAd
()
val
obj2
=
JSONObject
()
obj2
.
put
(
"reason"
,
"no_ad"
)
obj2
.
put
(
"ad_unit"
,
"nativeAd"
)
EventUtils
.
event
(
"ad_show_error"
,
ext
=
obj2
)
}
else
{
loadingListener
?.
invoke
()
}
}
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/ads/admob/AdmobOpenUtils.kt
0 → 100644
View file @
ca7d2ae8
package
com.base.browserwhite.ads.admob
import
android.app.Activity
import
com.base.browserwhite.BuildConfig
import
com.base.browserwhite.MyApplication
import
com.base.browserwhite.ads.AdDisplayUtils
import
com.base.browserwhite.ads.admob.AdmobEvent.clickAd
import
com.base.browserwhite.ads.admob.AdmobEvent.pullAd
import
com.base.browserwhite.ads.admob.AdmobEvent.showAd
import
com.base.browserwhite.help.ConfigHelper
import
com.base.browserwhite.help.EventUtils
import
com.base.browserwhite.utils.LogEx
import
com.google.android.gms.ads.AdError
import
com.google.android.gms.ads.AdRequest
import
com.google.android.gms.ads.FullScreenContentCallback
import
com.google.android.gms.ads.LoadAdError
import
com.google.android.gms.ads.appopen.AppOpenAd
import
org.json.JSONObject
import
java.util.UUID
object
AdmobOpenUtils
{
private
const
val
TAG
=
"AdmobOpenUtils"
private
val
mRequest
=
AdRequest
.
Builder
().
build
()
private
var
openLoadTime
=
Long
.
MAX_VALUE
private
var
mOpenAd
:
AppOpenAd
?
=
null
fun
isOpenAdLoaded
()
=
mOpenAd
!=
null
fun
loadAppOpenAd
(
skip
:
Boolean
=
false
,
onLoad
:
((
where
:
Int
)
->
Unit
)?
=
null
)
{
if
(
mOpenAd
!=
null
||
skip
)
{
onLoad
?.
invoke
(
1
)
return
}
if
(!
AdDisplayUtils
.
getInstance
().
shouldShowAd
(
"openAd"
))
{
onLoad
?.
invoke
(
2
)
return
}
val
reqId
=
UUID
.
randomUUID
().
toString
()
val
obj
=
JSONObject
()
obj
.
put
(
"req_id"
,
reqId
)
obj
.
put
(
"ad_type"
,
"openAd"
)
EventUtils
.
event
(
"ad_pull_start"
,
ext
=
obj
)
AppOpenAd
.
load
(
MyApplication
.
context
,
if
(
BuildConfig
.
DEBUG
)
ConfigHelper
.
openAdmobIdTest
else
ConfigHelper
.
openAdmobId
,
mRequest
,
object
:
AppOpenAd
.
AppOpenAdLoadCallback
()
{
override
fun
onAdLoaded
(
ad
:
AppOpenAd
)
{
LogEx
.
logDebug
(
TAG
,
"onAdLoaded"
)
openLoadTime
=
System
.
currentTimeMillis
()
mOpenAd
=
ad
onLoad
?.
invoke
(
3
)
pullAd
(
ad
.
responseInfo
,
"openAd"
,
reqId
=
reqId
)
ad
.
onPaidEventListener
=
AdmobEvent
.
EventOnPaidEventListener
(
ad
)
}
override
fun
onAdFailedToLoad
(
p0
:
LoadAdError
)
{
LogEx
.
logDebug
(
TAG
,
"LoadAdError ${p0.message}"
)
mOpenAd
=
null
onLoad
?.
invoke
(
4
)
pullAd
(
p0
.
responseInfo
,
"openAd"
,
p0
.
message
,
reqId
=
reqId
)
}
})
}
fun
showAppOpenAd
(
activity
:
Activity
,
isRetry
:
Boolean
=
false
,
showBefore
:
((
flag
:
Boolean
)
->
Unit
)?
=
null
,
onHidden
:
((
where
:
Int
)
->
Unit
)?
=
null
)
{
if
(
activity
.
isFinishing
||
activity
.
isDestroyed
)
{
return
}
if
(!
AdDisplayUtils
.
getInstance
().
shouldShowAd
(
"openAd"
))
{
onHidden
?.
invoke
(
1
)
return
}
if
(
System
.
currentTimeMillis
()
-
openLoadTime
>
1000
*
60
*
60
)
{
LogEx
.
logDebug
(
TAG
,
"openLoadTime out time"
)
mOpenAd
=
null
loadAppOpenAd
()
onHidden
?.
invoke
(
2
)
val
obj2
=
JSONObject
()
obj2
.
put
(
"ad_unit"
,
"openAd"
)
EventUtils
.
event
(
"ad_expire"
,
ext
=
obj2
)
return
}
if
(!
isRetry
)
{
val
obj1
=
JSONObject
()
obj1
.
put
(
"ad_unit"
,
"openAd"
)
EventUtils
.
event
(
"ad_prepare_show"
,
ext
=
obj1
)
}
if
(
mOpenAd
!=
null
)
{
LogEx
.
logDebug
(
TAG
,
"mOpenAd!=null"
)
val
thisMOpenAd
=
mOpenAd
mOpenAd
=
null
thisMOpenAd
?.
fullScreenContentCallback
=
object
:
FullScreenContentCallback
()
{
override
fun
onAdClicked
()
{
clickAd
(
thisMOpenAd
?.
responseInfo
,
"openAd"
)
}
override
fun
onAdDismissedFullScreenContent
()
{
mOpenAd
=
null
onHidden
?.
invoke
(
3
)
loadAppOpenAd
()
}
override
fun
onAdFailedToShowFullScreenContent
(
p0
:
AdError
)
{
mOpenAd
=
null
onHidden
?.
invoke
(
4
)
loadAppOpenAd
()
val
obj
=
JSONObject
()
obj
.
put
(
"reason"
,
p0
.
message
)
obj
.
put
(
"ad_unit"
,
"openAd"
)
EventUtils
.
event
(
"ad_show_error"
,
ext
=
obj
)
}
override
fun
onAdShowedFullScreenContent
()
{
showBefore
?.
invoke
(
true
)
showAd
(
thisMOpenAd
?.
responseInfo
,
"openAd"
,
activity
)
}
}
thisMOpenAd
?.
show
(
activity
)
}
else
{
LogEx
.
logDebug
(
TAG
,
"mOpenAd=null"
)
loadAppOpenAd
{
if
(
mOpenAd
!=
null
)
{
showAppOpenAd
(
activity
,
true
,
showBefore
,
onHidden
)
}
else
{
val
obj
=
JSONObject
()
obj
.
put
(
"reason"
,
"no_ad"
)
obj
.
put
(
"ad_unit"
,
"openAd"
)
EventUtils
.
event
(
"ad_show_error"
,
ext
=
obj
)
onHidden
?.
invoke
(
5
)
}
}
}
}
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/ads/admob/NativeView.kt
0 → 100644
View file @
ca7d2ae8
package
com.base.browserwhite.ads.admob
import
android.annotation.SuppressLint
import
android.content.Context
import
android.util.AttributeSet
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
android.widget.Button
import
android.widget.FrameLayout
import
android.widget.ImageView
import
android.widget.TextView
import
com.base.browserwhite.R
import
com.google.android.gms.ads.nativead.NativeAd
import
com.google.android.gms.ads.nativead.NativeAdView
@SuppressLint
(
"ViewConstructor"
)
class
NativeView
(
context
:
Context
,
val
layout
:
Int
,
attrs
:
AttributeSet
?
=
null
)
:
FrameLayout
(
context
,
attrs
)
{
init
{
layoutParams
=
LayoutParams
(
ViewGroup
.
LayoutParams
.
MATCH_PARENT
,
ViewGroup
.
LayoutParams
.
WRAP_CONTENT
)
}
fun
setNativeAd
(
nativeAd
:
NativeAd
?)
{
nativeAd
?:
return
val
adView
=
LayoutInflater
.
from
(
context
)
.
inflate
(
layout
,
this
,
false
)
as
NativeAdView
adView
.
mediaView
=
adView
.
findViewById
(
R
.
id
.
ad_media
)
adView
.
headlineView
=
adView
.
findViewById
(
R
.
id
.
ad_headline
)
adView
.
bodyView
=
adView
.
findViewById
(
R
.
id
.
ad_body
)
adView
.
callToActionView
=
adView
.
findViewById
(
R
.
id
.
ad_call_to_action
)
adView
.
iconView
=
adView
.
findViewById
(
R
.
id
.
ad_app_icon
)
(
adView
.
headlineView
as
TextView
?)
?.
text
=
nativeAd
.
headline
adView
.
mediaView
!!
.
mediaContent
=
nativeAd
.
mediaContent
if
(
nativeAd
.
body
==
null
)
{
adView
.
bodyView
!!
.
visibility
=
View
.
INVISIBLE
}
else
{
adView
.
bodyView
!!
.
visibility
=
View
.
VISIBLE
(
adView
.
bodyView
as
TextView
?)
?.
text
=
nativeAd
.
body
}
if
(
nativeAd
.
callToAction
==
null
)
{
adView
.
callToActionView
!!
.
visibility
=
View
.
INVISIBLE
}
else
{
adView
.
callToActionView
!!
.
visibility
=
View
.
VISIBLE
(
adView
.
callToActionView
as
Button
?)
?.
text
=
nativeAd
.
callToAction
}
if
(
nativeAd
.
icon
==
null
)
{
adView
.
iconView
!!
.
visibility
=
View
.
GONE
}
else
{
(
adView
.
iconView
as
ImageView
?)
?.
setImageDrawable
(
nativeAd
.
icon
!!
.
drawable
)
adView
.
iconView
!!
.
visibility
=
View
.
VISIBLE
}
adView
.
setNativeAd
(
nativeAd
)
removeAllViews
()
addView
(
adView
)
}
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/ads/max/AdMaxEvent.kt
0 → 100644
View file @
ca7d2ae8
package
com.base.browserwhite.ads.max
import
android.os.Bundle
import
com.applovin.mediation.MaxAd
import
com.applovin.mediation.MaxAdRevenueListener
import
com.applovin.sdk.AppLovinSdk
import
com.base.browserwhite.MyApplication
import
com.base.browserwhite.help.EventUtils
import
com.base.browserwhite.utils.LogEx
import
com.facebook.FacebookSdk
import
com.facebook.appevents.AppEventsConstants
import
com.facebook.appevents.AppEventsLogger
import
com.google.firebase.analytics.FirebaseAnalytics
import
org.json.JSONObject
object
AdMaxEvent
{
fun
pullAd
(
ad
:
MaxAd
?,
adUnit
:
String
,
error
:
String
?
=
null
,
reqId
:
String
?
=
null
,
code
:
Int
?
=
null
)
{
val
obj
=
JSONObject
()
obj
.
put
(
"UnitId"
,
ad
?.
adUnitId
)
obj
.
put
(
"ad_unit"
,
adUnit
)
obj
.
put
(
"creativeId"
,
ad
?.
creativeId
)
obj
.
put
(
"req_id"
,
reqId
)
obj
.
put
(
"status"
,
if
(
ad
==
null
)
"0"
else
"1"
)
obj
.
put
(
"networkname"
,
ad
?.
networkName
)
obj
.
put
(
"placement"
,
ad
?.
placement
)
obj
.
put
(
"networkplacement"
,
ad
?.
networkPlacement
)
obj
.
put
(
"latency"
,
ad
?.
requestLatencyMillis
)
obj
.
put
(
"valueMicros"
,
ad
?.
revenue
)
if
(
error
==
null
)
{
obj
.
put
(
"status"
,
"1"
)
}
else
{
obj
.
put
(
"errMsg"
,
error
)
obj
.
put
(
"status"
,
"2"
)
}
EventUtils
.
event
(
"ad_pull"
,
ext
=
obj
)
}
fun
clickAd
(
ad
:
MaxAd
?,
adUnit
:
String
)
{
val
obj
=
JSONObject
()
obj
.
put
(
"UnitId"
,
ad
?.
adUnitId
)
obj
.
put
(
"ad_unit"
,
adUnit
)
obj
.
put
(
"creativeId"
,
ad
?.
creativeId
)
obj
.
put
(
"networkname"
,
ad
?.
networkName
)
obj
.
put
(
"placement"
,
ad
?.
placement
)
obj
.
put
(
"networkplacement"
,
ad
?.
networkPlacement
)
obj
.
put
(
"latency"
,
ad
?.
requestLatencyMillis
)
obj
.
put
(
"valueMicros"
,
ad
?.
revenue
)
if
(!
adUnit
.
equals
(
"nativeAd"
))
{
EventUtils
.
event
(
"ad_click"
,
ext
=
obj
)
}
else
{
EventUtils
.
event
(
"big_imgad_click"
,
ext
=
obj
)
}
}
fun
showAd
(
ad
:
MaxAd
?,
adUnit
:
String
,
activity
:
String
?)
{
val
obj
=
JSONObject
()
obj
.
put
(
"UnitId"
,
ad
?.
adUnitId
)
obj
.
put
(
"ad_unit"
,
adUnit
)
obj
.
put
(
"creativeId"
,
ad
?.
creativeId
)
obj
.
put
(
"networkname"
,
ad
?.
networkName
)
obj
.
put
(
"placement"
,
ad
?.
placement
)
obj
.
put
(
"networkplacement"
,
ad
?.
networkPlacement
)
obj
.
put
(
"latency"
,
ad
?.
requestLatencyMillis
)
obj
.
put
(
"valueMicros"
,
ad
?.
revenue
)
obj
.
put
(
"from"
,
activity
)
obj
.
put
(
"mediation"
,
"applovin"
)
LogEx
.
logDebug
(
"glc"
,
"from: $activity"
)
if
(
adUnit
!=
"nativeAd"
)
{
EventUtils
.
event
(
"ad_show"
,
ext
=
obj
)
}
else
{
EventUtils
.
event
(
"big_img_show"
,
ext
=
obj
)
}
}
private
val
taichiPref
=
FacebookSdk
.
getApplicationContext
()
.
getSharedPreferences
(
"TaichiTroasCache"
,
0
)
private
val
taichiSharedPreferencesEditor
=
taichiPref
.
edit
()
class
EventOnPaidEventListener
:
MaxAdRevenueListener
{
override
fun
onAdRevenuePaid
(
ad
:
MaxAd
)
{
val
params
=
Bundle
()
val
currentImpressionRevenue
:
Double
=
ad
.
revenue
// In USD
val
mFirebaseAnalytics
=
FirebaseAnalytics
.
getInstance
(
MyApplication
.
context
)
params
.
putString
(
FirebaseAnalytics
.
Param
.
AD_PLATFORM
,
"appLovin"
)
params
.
putString
(
FirebaseAnalytics
.
Param
.
AD_SOURCE
,
ad
.
networkName
)
params
.
putString
(
FirebaseAnalytics
.
Param
.
AD_FORMAT
,
ad
.
format
.
getDisplayName
())
params
.
putString
(
FirebaseAnalytics
.
Param
.
AD_UNIT_NAME
,
ad
.
adUnitId
)
params
.
putDouble
(
FirebaseAnalytics
.
Param
.
VALUE
,
currentImpressionRevenue
)
params
.
putString
(
FirebaseAnalytics
.
Param
.
CURRENCY
,
"USD"
)
mFirebaseAnalytics
.
logEvent
(
FirebaseAnalytics
.
Event
.
AD_IMPRESSION
,
params
)
mFirebaseAnalytics
.
logEvent
(
"Ad_Impression_Revenue"
,
params
)
val
previousTaichiTroasCache
=
taichiPref
.
getFloat
(
"TaichiTroasCache"
,
0f
)
val
currentTaichiTroasCache
=
previousTaichiTroasCache
+
currentImpressionRevenue
if
(
currentTaichiTroasCache
>=
0.01
)
{
val
roasbundle
=
Bundle
()
roasbundle
.
putDouble
(
FirebaseAnalytics
.
Param
.
VALUE
,
currentTaichiTroasCache
)
roasbundle
.
putString
(
FirebaseAnalytics
.
Param
.
CURRENCY
,
"USD"
)
///(Required)tROAS事件必须
mFirebaseAnalytics
.
logEvent
(
"Total_Ads_Revenue_001"
,
roasbundle
)
// 给Taichi用
taichiSharedPreferencesEditor
.
putFloat
(
"TaichiTroasCache"
,
0f
)
//重新清零,开始计算
val
logger
=
AppEventsLogger
.
newLogger
(
MyApplication
.
context
)
val
parameters
=
Bundle
()
parameters
.
putString
(
AppEventsConstants
.
EVENT_PARAM_CURRENCY
,
"USD"
)
logger
.
logEvent
(
"ad_value"
,
currentTaichiTroasCache
,
parameters
)
}
else
{
taichiSharedPreferencesEditor
.
putFloat
(
"TaichiTroasCache"
,
currentTaichiTroasCache
.
toFloat
()
)
taichiSharedPreferencesEditor
.
commit
()
}
val
obj
=
JSONObject
()
val
revenue
=
ad
.
revenue
val
countryCode
=
AppLovinSdk
.
getInstance
(
MyApplication
.
context
).
configuration
.
countryCode
val
networkName
=
ad
.
networkName
val
adUnitId
=
ad
.
adUnitId
val
adFormat
=
ad
.
format
val
placement
=
ad
.
placement
val
networkPlacement
=
ad
.
networkPlacement
obj
.
put
(
"valueMicros"
,
revenue
)
obj
.
put
(
"currencyCode"
,
countryCode
)
obj
.
put
(
"adUnitId"
,
adUnitId
)
obj
.
put
(
"networkName"
,
networkName
)
obj
.
put
(
"adFormat"
,
adFormat
)
obj
.
put
(
"placement"
,
placement
)
obj
.
put
(
"networkPlacement"
,
networkPlacement
)
EventUtils
.
event
(
"ad_price"
,
ext
=
obj
)
}
}
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/ads/max/AdMaxInit.kt
0 → 100644
View file @
ca7d2ae8
package
com.base.browserwhite.ads.max
import
android.content.Context
import
com.applovin.sdk.AppLovinMediationProvider
import
com.applovin.sdk.AppLovinSdk
import
com.applovin.sdk.AppLovinSdkInitializationConfiguration
import
com.base.browserwhite.ads.AdmobMaxHelper.isAdInit
import
com.base.browserwhite.help.EventUtils
import
com.base.browserwhite.utils.LogEx
import
java.util.concurrent.Executors
object
AdMaxInit
{
private
const
val
TAG
=
"AdMaxInit"
var
maxInitAction
:
(()
->
Unit
)?
=
null
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 YOUR_SDK_KEY = "05TMDQ5tZabpXQ45_UTbmEGNUtVAzSTzT6KmWQc5_CuWdzccS4DCITZoL3yIWUG3bbq60QC_d4WF28tUC4gVTF"
val
YOUR_SDK_KEY
=
"GGPreND6SRmCt1zJgn5faiLGD8c2PVGPLgPpSg7cHanVTud1DhtuI9MmteTqlEviaJ57WnxW68kQDaATJ5z3cW"
val
executor
=
Executors
.
newSingleThreadExecutor
();
executor
.
execute
{
val
initConfigBuilder
=
AppLovinSdkInitializationConfiguration
.
builder
(
YOUR_SDK_KEY
,
this
)
initConfigBuilder
.
mediationProvider
=
AppLovinMediationProvider
.
MAX
// Enable test mode by default for the current device. Cannot be run on the main thread.
// val currentGaid = AdvertisingIdClient.getAdvertisingIdInfo(this).id
// if (currentGaid != null) {
// initConfigBuilder.testDeviceAdvertisingIds = Collections.singletonList(currentGaid)
// }
// Initialize the AppLovin SDK
val
sdk
=
AppLovinSdk
.
getInstance
(
this
)
sdk
.
initialize
(
initConfigBuilder
.
build
())
{
LogEx
.
logDebug
(
TAG
,
"max init"
)
isAdInit
.
set
(
true
)
maxInitAction
?.
invoke
()
maxInitAction
=
null
EventUtils
.
event
(
"MaxInit"
,
"MaxInit"
)
}
executor
.
shutdown
()
}
}
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/ads/max/AdMaxInterstitialUtils.kt
0 → 100644
View file @
ca7d2ae8
package
com.base.browserwhite.ads.max
import
android.app.Activity
import
android.app.Dialog
import
com.applovin.mediation.MaxAd
import
com.applovin.mediation.MaxAdListener
import
com.applovin.mediation.MaxError
import
com.applovin.mediation.ads.MaxInterstitialAd
import
com.base.browserwhite.R
import
com.base.browserwhite.ads.AdDisplayUtils
import
com.base.browserwhite.ads.AdmobMaxHelper.isInterOpenShowing
import
com.base.browserwhite.ads.AdmobMaxHelper.lastShowedOnHiddenTime
import
com.base.browserwhite.ads.CustomDialog
import
com.base.browserwhite.help.ConfigHelper
import
com.base.browserwhite.help.EventUtils
import
com.base.browserwhite.utils.LogEx
import
org.json.JSONObject
import
java.util.UUID
object
AdMaxInterstitialUtils
{
private
const
val
TAG
=
"AdMaxInterstitialUtils"
private
var
interstitialAd
:
MaxInterstitialAd
?
=
null
private
var
interLoadTime
=
Long
.
MAX_VALUE
private
var
onHidden
:
(()
->
Unit
)?
=
null
private
var
loadingListener
:
(()
->
Unit
)?
=
null
private
var
activityString
:
String
=
""
private
fun
setListener
(
activity
:
Activity
)
{
activityString
=
activity
::
class
.
java
.
toString
().
split
(
"."
).
last
()
if
(
interstitialAd
==
null
)
{
interstitialAd
=
MaxInterstitialAd
(
ConfigHelper
.
interAdMaxId
,
activity
)
interstitialAd
?.
setListener
(
object
:
MaxAdListener
{
override
fun
onAdLoaded
(
p0
:
MaxAd
)
{
LogEx
.
logDebug
(
TAG
,
"onAdLoaded"
)
loadingListener
?.
invoke
()
loadingListener
=
null
interLoadTime
=
System
.
currentTimeMillis
()
val
reqId
=
UUID
.
randomUUID
().
toString
()
AdMaxEvent
.
pullAd
(
p0
,
"interAd"
,
reqId
=
reqId
)
}
override
fun
onAdLoadFailed
(
p0
:
String
,
p1
:
MaxError
)
{
LogEx
.
logDebug
(
TAG
,
"onAdLoadFailed"
)
val
reqId
=
UUID
.
randomUUID
().
toString
()
AdMaxEvent
.
pullAd
(
null
,
"interAd"
,
reqId
=
reqId
,
error
=
p1
.
message
,
code
=
p1
.
code
)
AdDisplayUtils
.
getInstance
().
incrementAdRequestFailCount
()
loadingListener
?.
invoke
()
loadingListener
=
null
}
override
fun
onAdDisplayed
(
p0
:
MaxAd
)
{
LogEx
.
logDebug
(
TAG
,
"onAdDisplayed"
)
AdDisplayUtils
.
getInstance
().
incrementAdDisplayCount
()
AdMaxEvent
.
showAd
(
p0
,
"interAd"
,
activityString
)
isInterOpenShowing
=
true
}
override
fun
onAdHidden
(
p0
:
MaxAd
)
{
LogEx
.
logDebug
(
TAG
,
"onAdHidden"
)
onHidden
?.
invoke
()
onHidden
=
null
AdMaxOpenUtils
.
loadAppOpenAd
(
activity
)
// loadInterstitialAd(activity)
isInterOpenShowing
=
false
lastShowedOnHiddenTime
=
System
.
currentTimeMillis
()
}
override
fun
onAdClicked
(
p0
:
MaxAd
)
{
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
)
return
}
if
(!
AdDisplayUtils
.
getInstance
().
shouldShowAd
(
"interAd"
))
{
onHidden
?.
invoke
()
return
}
LogEx
.
logDebug
(
TAG
,
"showInterstitialAd,展示插屏广告"
)
val
obj1
=
JSONObject
()
obj1
.
put
(
"ad_unit"
,
"interAd"
)
EventUtils
.
event
(
"ad_prepare_show"
,
ext
=
obj1
)
isInterOpenShowing
=
false
if
(
interstitialAd
?.
isReady
==
true
)
{
LogEx
.
logDebug
(
TAG
,
"有缓存直接播放。"
)
AdMaxInterstitialUtils
.
onHidden
=
onHidden
interstitialAd
?.
showAd
(
activity
)
}
else
{
LogEx
.
logDebug
(
TAG
,
"展示广告时,没有缓存,需要拉取。"
)
val
obj2
=
JSONObject
()
obj2
.
put
(
"reason"
,
"no cache ad"
)
obj2
.
put
(
"ad_unit"
,
"interAd"
)
EventUtils
.
event
(
"ad_nocache_pull"
,
ext
=
obj2
)
val
loaded
=
loadInterstitialAd
(
activity
)
if
(
loaded
)
{
LogEx
.
logDebug
(
TAG
,
"loaded=true"
)
val
dialog
=
showAdDialogAndLoadInterstitial
(
activity
)
loadingListener
=
{
dialog
?.
dismiss
()
if
(
interstitialAd
?.
isReady
==
true
)
{
AdMaxInterstitialUtils
.
onHidden
=
onHidden
interstitialAd
?.
showAd
(
activity
)
}
else
{
onHidden
?.
invoke
()
}
}
}
else
{
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
}
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/ads/max/AdMaxNativeUtils.kt
0 → 100644
View file @
ca7d2ae8
package
com.base.browserwhite.ads.max
import
android.app.Activity
import
android.content.Context
import
android.view.ViewGroup
import
androidx.core.view.isVisible
import
com.applovin.mediation.MaxAd
import
com.applovin.mediation.MaxError
import
com.applovin.mediation.nativeAds.MaxNativeAdListener
import
com.applovin.mediation.nativeAds.MaxNativeAdLoader
import
com.applovin.mediation.nativeAds.MaxNativeAdView
import
com.applovin.mediation.nativeAds.MaxNativeAdViewBinder
import
com.base.browserwhite.MyApplication
import
com.base.browserwhite.R
import
com.base.browserwhite.ads.AdDisplayUtils
import
com.base.browserwhite.help.ConfigHelper
import
com.base.browserwhite.help.EventUtils
import
com.base.browserwhite.utils.LogEx
import
org.json.JSONObject
object
AdMaxNativeUtils
{
private
val
TAG
=
"AdMaxNativeUtils"
private
var
nativeAdLoader
:
MaxNativeAdLoader
=
MaxNativeAdLoader
(
ConfigHelper
.
nativeAdMaxId
,
MyApplication
.
context
)
private
var
nativeAd
:
MaxAd
?
=
null
private
var
nativeLoadTime
=
Long
.
MAX_VALUE
private
var
haveSetAdListener
:
Boolean
=
false
private
var
loadingListener
:
(()
->
Unit
)?
=
null
private
var
activityString
:
String
=
""
private
fun
setNativeAdListener
()
{
if
(!
haveSetAdListener
)
{
//加载展示监听
nativeAdLoader
.
setNativeAdListener
(
object
:
MaxNativeAdListener
()
{
override
fun
onNativeAdLoaded
(
nativeAdView
:
MaxNativeAdView
?,
ad
:
MaxAd
)
{
LogEx
.
logDebug
(
TAG
,
"onNativeAdLoaded"
)
// Cleanup any pre-existing native ad to prevent memory leaks.
if
(
nativeAd
?.
nativeAd
?.
isExpired
==
true
)
{
nativeAdLoader
.
destroy
(
nativeAd
)
}
// Save ad to be rendered later.
nativeAd
=
ad
nativeLoadTime
=
System
.
currentTimeMillis
()
loadingListener
?.
invoke
()
loadingListener
=
null
}
override
fun
onNativeAdLoadFailed
(
p0
:
String
,
p1
:
MaxError
)
{
super
.
onNativeAdLoadFailed
(
p0
,
p1
)
loadingListener
?.
invoke
()
loadingListener
=
null
LogEx
.
logDebug
(
TAG
,
"onNativeAdLoadFailed"
)
LogEx
.
logDebug
(
TAG
,
"code=${p1.code}"
)
LogEx
.
logDebug
(
TAG
,
"message=${p1.message}"
)
// AdDisplayUtils.getInstance().incrementAdRequestFailCount()
val
obj2
=
JSONObject
()
obj2
.
put
(
"reason"
,
"no_ad"
)
obj2
.
put
(
"ad_unit"
,
"nativeAd"
)
EventUtils
.
event
(
"ad_show_error"
,
ext
=
obj2
)
}
override
fun
onNativeAdClicked
(
p0
:
MaxAd
)
{
super
.
onNativeAdClicked
(
p0
)
LogEx
.
logDebug
(
TAG
,
"onNativeAdClicked"
)
// AdDisplayUtils.getInstance().incrementAdClickCount()
nativeAd
?.
let
{
AdMaxEvent
.
clickAd
(
it
,
"nativeAd"
)
}
}
override
fun
onNativeAdExpired
(
p0
:
MaxAd
)
{
super
.
onNativeAdExpired
(
p0
)
}
})
//广告价格监听
nativeAdLoader
.
setRevenueListener
{
ad
->
}
haveSetAdListener
=
true
}
}
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)
// .setBodyTextViewId(R.id.body_text_view)
// .setAdvertiserTextViewId(R.id.advertiser_text_view)
// .setIconImageViewId(R.id.icon_image_view)
// .setMediaContentViewGroupId(R.id.media_view_container)
// .setOptionsContentViewGroupId(R.id.options_view)
// .setStarRatingContentViewGroupId(R.id.star_rating_view)
// .setCallToActionButtonId(R.id.cta_button)
// .build()
// 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
()
return
MaxNativeAdView
(
binder
,
context
)
}
fun
loadNativeAd
()
{
setNativeAdListener
()
if
(!
AdDisplayUtils
.
getInstance
().
shouldShowAd
(
"nativeAd"
))
{
return
}
nativeAdLoader
.
loadAd
()
}
fun
showNativeAd
(
activity
:
Activity
,
parent
:
ViewGroup
,
layout
:
Int
)
{
activityString
=
activity
::
class
.
java
.
toString
().
split
(
"."
).
last
()
LogEx
.
logDebug
(
TAG
,
"activityString=$activityString"
)
setNativeAdListener
()
if
(!
AdDisplayUtils
.
getInstance
().
shouldShowAd
(
"nativeAd"
))
{
LogEx
.
logDebug
(
TAG
,
"!shouldShowAd"
)
return
}
if
(
nativeAd
?.
nativeAd
?.
isExpired
==
true
||
nativeAd
==
null
)
{
LogEx
.
logDebug
(
TAG
,
"nativeAd?.nativeAd?.isExpired == true"
)
nativeAdLoader
.
destroy
(
nativeAd
)
nativeAdLoader
.
loadAd
()
loadingListener
=
{
if
(
nativeAd
!=
null
)
{
showReadyNative
(
activity
,
parent
,
layout
)
}
}
}
else
{
showReadyNative
(
activity
,
parent
,
layout
)
}
}
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
)
}
LogEx
.
logDebug
(
TAG
,
"loadingListener finish"
)
}
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/ads/max/AdMaxOpenUtils.kt
0 → 100644
View file @
ca7d2ae8
package
com.base.browserwhite.ads.max
import
android.app.Activity
import
com.applovin.mediation.MaxAd
import
com.applovin.mediation.MaxAdListener
import
com.applovin.mediation.MaxError
import
com.applovin.mediation.ads.MaxAppOpenAd
import
com.base.browserwhite.ads.AdDisplayUtils
import
com.base.browserwhite.ads.AdmobMaxHelper.isInterOpenShowing
import
com.base.browserwhite.help.ConfigHelper
import
com.base.browserwhite.help.EventUtils
import
com.base.browserwhite.utils.LogEx
import
org.json.JSONObject
import
java.util.UUID
object
AdMaxOpenUtils
{
private
const
val
TAG
=
"AdMaxOpenUtils"
private
var
appOpenAd
:
MaxAppOpenAd
?
=
null
private
var
openLoadTime
=
Long
.
MAX_VALUE
private
var
onHidden
:
(()
->
Unit
)?
=
null
private
var
loadingListener
:
((
flag
:
Boolean
)
->
Unit
)?
=
null
private
var
activityString
=
""
private
fun
setListener
(
activity
:
Activity
)
{
activityString
=
activity
::
class
.
java
.
toString
().
split
(
"."
).
last
()
if
(
appOpenAd
==
null
)
{
appOpenAd
=
MaxAppOpenAd
(
ConfigHelper
.
openAdMaxId
,
activity
)
appOpenAd
?.
setListener
(
object
:
MaxAdListener
{
override
fun
onAdLoaded
(
p0
:
MaxAd
)
{
LogEx
.
logDebug
(
TAG
,
"广告拉取成功"
)
openLoadTime
=
System
.
currentTimeMillis
()
loadingListener
?.
invoke
(
true
)
loadingListener
=
null
AdMaxEvent
.
pullAd
(
p0
,
"openAd"
)
}
override
fun
onAdLoadFailed
(
p0
:
String
,
p1
:
MaxError
)
{
LogEx
.
logDebug
(
TAG
,
"广告拉取失败了,onAdLoadFailed:"
+
p0
)
LogEx
.
logDebug
(
TAG
,
"广告拉取失败了,onAdLoadFailed:"
+
p1
.
message
.
toString
())
LogEx
.
logDebug
(
TAG
,
"广告拉取失败了,onAdLoadFailed:"
+
p1
.
code
)
loadingListener
?.
invoke
(
false
)
loadingListener
=
null
AdDisplayUtils
.
getInstance
().
incrementAdRequestFailCount
()
val
reqId
=
UUID
.
randomUUID
().
toString
()
AdMaxEvent
.
pullAd
(
null
,
"openAd"
,
reqId
=
reqId
,
error
=
p1
.
message
,
code
=
p1
.
code
)
}
override
fun
onAdDisplayed
(
p0
:
MaxAd
)
{
AdDisplayUtils
.
getInstance
().
incrementAdDisplayCount
()
AdMaxEvent
.
showAd
(
p0
,
"openAd"
,
activityString
)
isInterOpenShowing
=
true
}
override
fun
onAdHidden
(
p0
:
MaxAd
)
{
LogEx
.
logDebug
(
TAG
,
"onAdHidden"
)
onHidden
?.
invoke
()
onHidden
=
null
loadAppOpenAd
(
activity
)
isInterOpenShowing
=
false
}
override
fun
onAdDisplayFailed
(
p0
:
MaxAd
,
p1
:
MaxError
)
{
LogEx
.
logDebug
(
TAG
,
"onAdDisplayFailed"
)
onHidden
?.
invoke
()
onHidden
=
null
loadAppOpenAd
(
activity
)
val
obj
=
JSONObject
()
obj
.
put
(
"code"
,
p1
.
code
)
obj
.
put
(
"reason"
,
p1
.
message
)
obj
.
put
(
"ad_unit"
,
"openAd"
)
EventUtils
.
event
(
"ad_show_error"
,
ext
=
obj
)
isInterOpenShowing
=
false
}
override
fun
onAdClicked
(
p0
:
MaxAd
)
{
AdDisplayUtils
.
getInstance
().
incrementAdClickCount
()
AdMaxEvent
.
clickAd
(
p0
,
"openAd"
)
}
})
appOpenAd
?.
setRevenueListener
(
AdMaxEvent
.
EventOnPaidEventListener
())
}
}
fun
showAppOpenAd
(
activity
:
Activity
,
loadCallBack
:
((
loaded
:
Boolean
)
->
Unit
)?
=
null
,
onHidden
:
(()
->
Unit
)?
=
null
)
{
setListener
(
activity
)
if
(
activity
.
isFinishing
||
activity
.
isDestroyed
)
{
return
}
if
(!
AdDisplayUtils
.
getInstance
().
shouldShowAd
(
"openAd"
))
{
LogEx
.
logDebug
(
TAG
,
"!shouldShowAd"
)
onHidden
?.
invoke
()
return
}
if
(
System
.
currentTimeMillis
()
-
openLoadTime
>
1000
*
60
*
60
)
{
LogEx
.
logDebug
(
TAG
,
"openLoadTime > "
)
onHidden
?.
invoke
()
val
obj2
=
JSONObject
()
obj2
.
put
(
"ad_unit"
,
"openAd"
)
EventUtils
.
event
(
"ad_expire"
,
ext
=
obj2
)
appOpenAd
?.
loadAd
()
}
// if (!isAdInit.get()) {
// EventUtils.event("isAdInit", value = "showAppOpenAd isAdInit=${isAdInit.get()}")
// onHidden?.invoke()
// return
// }
LogEx
.
logDebug
(
TAG
,
"showAppOpenAd"
)
val
obj1
=
JSONObject
()
obj1
.
put
(
"ad_unit"
,
"openAd"
)
EventUtils
.
event
(
"ad_prepare_show"
,
ext
=
obj1
)
isInterOpenShowing
=
false
if
(
appOpenAd
?.
isReady
==
true
)
{
LogEx
.
logDebug
(
TAG
,
"广告准备好了,展示广告"
)
AdMaxOpenUtils
.
onHidden
=
onHidden
appOpenAd
?.
showAd
()
}
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
,
"展示时候,发现广告需要拉取"
)
val
loaded
=
loadAppOpenAd
(
activity
)
if
(
loaded
)
{
loadingListener
=
{
loadResult
->
loadCallBack
?.
invoke
(
loadResult
)
LogEx
.
logDebug
(
TAG
,
"loadingListener callback"
)
if
(
appOpenAd
?.
isReady
==
true
)
{
AdMaxOpenUtils
.
onHidden
=
onHidden
appOpenAd
?.
showAd
()
}
else
{
onHidden
?.
invoke
()
}
}
}
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
}
}
app/src/main/java/com/base/browserwhite/
utils
/ConfigHelper.kt
→
app/src/main/java/com/base/browserwhite/
help
/ConfigHelper.kt
View file @
ca7d2ae8
package
com.base.browserwhite.
utils
package
com.base.browserwhite.
help
object
ConfigHelper
{
...
...
app/src/main/java/com/base/browserwhite/
utils
/EventUtils.kt
→
app/src/main/java/com/base/browserwhite/
help
/EventUtils.kt
View file @
ca7d2ae8
package
com.base.browserwhite.
utils
package
com.base.browserwhite.
help
import
android.os.Build
import
com.base.browserwhite.BuildConfig
import
com.base.browserwhite.help.AESHelper
import
com.base.browserwhite.help.ReportUtils.doPost
import
com.base.browserwhite.utils.AppPreferences
import
com.base.browserwhite.utils.LogEx
import
org.json.JSONException
import
org.json.JSONObject
...
...
app/src/main/java/com/base/browserwhite/help/NewsUtils.kt
View file @
ca7d2ae8
...
...
@@ -3,7 +3,6 @@ package com.base.browserwhite.help
import
com.base.browserwhite.BuildConfig
import
com.base.browserwhite.bean.NewsBean
import
com.base.browserwhite.utils.AppPreferences
import
com.base.browserwhite.utils.ConfigHelper
import
com.base.browserwhite.utils.LogEx
import
com.google.gson.Gson
import
com.google.gson.JsonParser
...
...
app/src/main/java/com/base/browserwhite/service/StayNotificationService.kt
View file @
ca7d2ae8
...
...
@@ -19,7 +19,7 @@ import com.base.browserwhite.R
import
com.base.browserwhite.bean.ConstObject
import
com.base.browserwhite.ui.activity.MainActivity
import
com.base.browserwhite.ui.activity.SplashActivity
import
com.base.browserwhite.
utils
.EventUtils
import
com.base.browserwhite.
help
.EventUtils
import
kotlin.random.Random
...
...
app/src/main/java/com/base/browserwhite/ui/activity/SplashActivity.kt
View file @
ca7d2ae8
...
...
@@ -20,7 +20,7 @@ import com.base.browserwhite.ui.activity.cleanjunk.ScanJunkActivity
import
com.base.browserwhite.ui.activity.news.NewsActivity
import
com.base.browserwhite.ui.activity.scanqrc.ScanQRCActivity
import
com.base.browserwhite.utils.BarUtils
import
com.base.browserwhite.
utils
.ConfigHelper
import
com.base.browserwhite.
help
.ConfigHelper
import
com.base.browserwhite.utils.LogEx
import
kotlinx.coroutines.Job
import
kotlinx.coroutines.cancel
...
...
@@ -30,7 +30,6 @@ import kotlinx.coroutines.flow.SharedFlow
import
kotlinx.coroutines.flow.collectLatest
import
kotlinx.coroutines.isActive
import
kotlinx.coroutines.launch
import
kotlin.random.Random
@SuppressLint
(
"CustomSplashScreen"
)
class
SplashActivity
:
BaseActivity
<
ActivitySplashBinding
>()
{
...
...
@@ -61,7 +60,7 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>() {
progressCollect
()
if
(
ifAgreePrivacy
)
{
//
AdmobMaxHelper.preloadAd(this)
// AdmobMaxHelper.preloadAd(this)
job
=
startProgress
()
binding
.
llStart
.
visibility
=
View
.
GONE
binding
.
llProgress
.
visibility
=
View
.
VISIBLE
...
...
@@ -154,7 +153,7 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>() {
oneClickStart
=
true
ifAgreePrivacy
=
true
// (application as MyApplication).initApp(true)
// AdmobMaxHelper.preloadAd(this)
//
com.base.browserwhite.ads.
AdmobMaxHelper.preloadAd(this)
binding
.
llStart
.
visibility
=
View
.
GONE
binding
.
llProgress
.
visibility
=
View
.
VISIBLE
job
=
startProgress
()
...
...
@@ -187,14 +186,14 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>() {
// LogEx.logDebug(TAG, "outTimeAd")
//
// var loaded: Boolean = true
// AdmobMaxHelper.admobMaxShowOpenAd(this, showBeforeAction = { flag ->
//
com.base.browserwhite.ads.
AdmobMaxHelper.admobMaxShowOpenAd(this, showBeforeAction = { flag ->
// LogEx.logDebug(TAG, "showBeforeAction flag=$flag")
// loaded = flag
// job?.cancel()
// }, onHidden = {
// val sp = AppPreferences.getInstance().getString("splashShowInter", "0").toInt()
// if (sp == 1 && !loaded) {
// AdmobMaxHelper.admobMaxShowInterstitialAd(this, isLoading = false) {
//
com.base.browserwhite.ads.
AdmobMaxHelper.admobMaxShowInterstitialAd(this, isLoading = false) {
// binding.pb.progress = 100
// jumpNext()
// }
...
...
app/src/main/java/com/base/browserwhite/ui/activity/cleanjunk/CleaningActivity.kt
View file @
ca7d2ae8
...
...
@@ -82,7 +82,7 @@ class CleaningActivity : BaseActivity<ActivityLayoutCleanupingBinding>() {
// val isCleanEndAdSp = AppPreferences.getInstance().getString("isCleanEndAdSp", "0").toInt()
// if (isCleanEndAdSp == 1) {
// AdmobMaxHelper.admobMaxShowInterstitialAd(this@CleaningActivity) {
//
com.base.browserwhite.ads.
AdmobMaxHelper.admobMaxShowInterstitialAd(this@CleaningActivity) {
// startActivity(
// Intent(this@CleaningActivity, ResultActivity::class.java).putExtra("from", JUNK_CLEANER)
// .putExtra("clean_size", intentSize)
...
...
app/src/main/java/com/base/browserwhite/ui/activity/download/WebDownloadManagerActivity.kt
View file @
ca7d2ae8
...
...
@@ -9,7 +9,6 @@ import androidx.core.view.updatePadding
import
com.base.browserwhite.bean.DownloadBean
import
com.base.browserwhite.databinding.ActivityWebDownloadManagerBinding
import
com.base.browserwhite.ui.activity.BaseActivity
import
com.base.browserwhite.ui.activity.mediabrowser.MediaBrowserActivity
import
com.base.browserwhite.ui.activity.mediabrowser.MediaVideoDetailActivity
import
com.base.browserwhite.ui.views.DialogViews.showDeleteTipDialog
import
com.base.browserwhite.ui.views.DialogViews.showGerPermission
...
...
@@ -20,7 +19,6 @@ import com.base.browserwhite.utils.DownloadHelper.getDownloadJsonBean
import
com.base.browserwhite.utils.DownloadHelper.saveDownloadRecordFile
import
com.base.browserwhite.utils.IntentEx.shareAction
import
com.base.browserwhite.utils.KotlinExt.toFormatTime
import
com.base.browserwhite.utils.LogEx
import
com.base.browserwhite.utils.PermissionHelp.checkStorePermission
import
com.base.browserwhite.utils.PermissionHelp.requestStorePermission
import
com.google.gson.Gson
...
...
@@ -73,11 +71,13 @@ class WebDownloadManagerActivity : BaseActivity<ActivityWebDownloadManagerBindin
if
(
checkStorePermission
())
{
initData
()
}
else
{
showGerPermission
(
desc
=
""
,
deny
=
{
finishToMain
()
},
allow
=
{
requestStorePermission
(
launcher
,
result
=
{
if
(
it
)
initData
()
else
finishToMain
()
showGerPermission
(
desc
=
"This feature requires access to your storage to manage your downloads. We will not transfer your data to any third-party services. Please grant permission so that we can provide you with better services."
,
deny
=
{
finishToMain
()
},
allow
=
{
requestStorePermission
(
launcher
,
result
=
{
if
(
it
)
initData
()
else
finishToMain
()
})
})
})
}
}
...
...
app/src/main/res/drawable/bg_355bea_10.xml
0 → 100644
View file @
ca7d2ae8
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<solid
android:color=
"#355BEA"
/>
<corners
android:radius=
"10dp"
/>
</shape>
\ No newline at end of file
app/src/main/res/drawable/bg_ad_border.xml
0 → 100644
View file @
ca7d2ae8
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<!-- <stroke-->
<!-- android:width="1dp"-->
<!-- android:color="#E5E5E5" />-->
<solid
android:color=
"#F2F2F2"
/>
</shape>
\ No newline at end of file
app/src/main/res/drawable/bg_ff8a00_10.xml
0 → 100644
View file @
ca7d2ae8
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<solid
android:color=
"#FF8A00"
/>
<corners
android:radius=
"10dp"
/>
</shape>
\ No newline at end of file
app/src/main/res/drawable/circle_progress_bar.xml
0 → 100644
View file @
ca7d2ae8
<?xml version="1.0" encoding="utf-8"?>
<rotate
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:fromDegrees=
"0"
android:toDegrees=
"360"
>
<shape
android:innerRadiusRatio=
"3"
android:shape=
"ring"
android:thicknessRatio=
"7.0"
>
<size
android:height=
"48dp"
android:width=
"48dp"
/>
<gradient
android:centerColor=
"#355bea"
android:endColor=
"#355bea"
android:startColor=
"#355bea"
android:type=
"sweep"
android:useLevel=
"false"
/>
<stroke
android:width=
"3dp"
android:color=
"#FFFFFF"
/>
<corners
android:radius=
"3dp"
/>
</shape>
</rotate>
app/src/main/res/layout/dialog_ad_loading.xml
0 → 100644
View file @
ca7d2ae8
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"wrap_content"
android:layout_height=
"90dp"
android:background=
"@drawable/bg_ffffff_10"
android:gravity=
"center"
android:orientation=
"horizontal"
>
<ProgressBar
android:id=
"@+id/progressBar"
style=
"?android:attr/progressBarStyle"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"18dp"
android:indeterminate=
"true"
android:indeterminateDrawable=
"@drawable/circle_progress_bar"
/>
<TextView
android:id=
"@+id/dialog_ad_loading_text"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"11dp"
android:layout_marginEnd=
"18dp"
android:text=
"Network fluctuation, ad is loading, please wait."
android:textColor=
"#ff000000"
android:textSize=
"14sp"
tools:ignore=
"HardcodedText"
/>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/dialog_download_finish.xml
View file @
ca7d2ae8
...
...
@@ -77,7 +77,7 @@
android:layout_height=
"175dp"
android:layout_marginTop=
"20dp"
>
<include
layout=
"@layout/layout_
native_admob
_download"
/>
<include
layout=
"@layout/layout_
admob_native
_download"
/>
</FrameLayout>
<TextView
...
...
app/src/main/res/layout/layout_admob_native_custom.xml
0 → 100644
View file @
ca7d2ae8
<com.google.android.gms.ads.nativead.NativeAdView
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_margin=
"10dp"
>
<LinearLayout
android:background=
"@drawable/bg_ad_border"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:baselineAligned=
"false"
>
<com.google.android.gms.ads.nativead.MediaView
android:id=
"@+id/ad_media"
android:layout_width=
"91dp"
android:layout_height=
"91dp"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"5dp"
/>
<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"
>
<TextView
android:id=
"@+id/ad_headline"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:ellipsize=
"end"
android:maxLines=
"2"
android:textColor=
"@color/black"
android:textSize=
"14sp"
android:textStyle=
"bold"
/>
<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:text=
"Ad"
android:textColor=
"@color/white"
android:textSize=
"12sp"
tools:ignore=
"HardcodedText"
/>
<TextView
android:id=
"@+id/ad_body"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"8dp"
android:layout_marginEnd=
"10dp"
android:ellipsize=
"end"
android:maxLines=
"2"
android:textColor=
"@color/black"
android:textSize=
"12sp"
/>
</LinearLayout>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:paddingVertical=
"5dp"
>
<ImageView
android:id=
"@+id/ad_app_icon"
android:layout_width=
"30dp"
android:layout_height=
"30dp"
android:layout_gravity=
"center_vertical"
tools:ignore=
"ContentDescription"
/>
<androidx.appcompat.widget.AppCompatButton
android:id=
"@+id/ad_call_to_action"
android:layout_width=
"match_parent"
android:layout_height=
"26dp"
android:layout_gravity=
"center_vertical"
android:layout_marginHorizontal=
"12dp"
android:background=
"@drawable/bg_ff8a00_10"
android:gravity=
"center"
android:textColor=
"@color/white"
android:textSize=
"15sp"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</com.google.android.gms.ads.nativead.NativeAdView>
\ No newline at end of file
app/src/main/res/layout/layout_
native_admob
_download.xml
→
app/src/main/res/layout/layout_
admob_native
_download.xml
View file @
ca7d2ae8
File moved
app/src/main/res/layout/layout_max_native_small.xml
0 → 100644
View file @
ca7d2ae8
<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=
"wrap_content"
android:layout_margin=
"2dp"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:background=
"#D9D9D9"
android:baselineAligned=
"false"
android:minHeight=
"40dp"
android:orientation=
"horizontal"
android:paddingHorizontal=
"5dp"
android:paddingVertical=
"2dp"
tools:ignore=
"UselessParent"
>
<FrameLayout
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
>
<FrameLayout
android:id=
"@+id/ad_media"
android:layout_width=
"80dp"
android:layout_height=
"60dp"
android:layout_gravity=
"center"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"end"
android:background=
"@color/black"
android:padding=
"2dp"
android:text=
"Ad"
android:textColor=
"@color/white"
android:textSize=
"8sp"
tools:ignore=
"HardcodedText,SmallSp"
/>
</FrameLayout>
<LinearLayout
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginHorizontal=
"5dp"
android:layout_weight=
"1"
android:orientation=
"vertical"
>
<TextView
android:id=
"@+id/ad_headline"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:ellipsize=
"end"
android:includeFontPadding=
"false"
android:maxLines=
"2"
android:textColor=
"@color/black"
android:textSize=
"16sp"
android:textStyle=
"bold"
/>
<TextView
android:id=
"@+id/ad_body"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:ellipsize=
"end"
android:maxLines=
"2"
android:textColor=
"@color/black"
android:textSize=
"14sp"
tools:ignore=
"SmallSp"
/>
</LinearLayout>
<LinearLayout
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:orientation=
"vertical"
>
<ImageView
android:id=
"@+id/ad_app_icon"
android:layout_width=
"30dp"
android:layout_height=
"30dp"
android:layout_gravity=
"center_horizontal"
tools:ignore=
"ContentDescription"
/>
<androidx.appcompat.widget.AppCompatButton
android:id=
"@+id/ad_call_to_action"
android:layout_width=
"wrap_content"
android:layout_height=
"30dp"
android:layout_gravity=
"center_vertical"
android:layout_marginHorizontal=
"8dp"
android:layout_marginVertical=
"5dp"
android:background=
"@drawable/bg_355bea_10"
android:gravity=
"center"
android:textColor=
"@color/white"
android:textSize=
"12sp"
/>
</LinearLayout>
</LinearLayout>
</FrameLayout>
\ No newline at end of file
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