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
eb1ce437
Commit
eb1ce437
authored
Jul 17, 2024
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
max广告
parent
fecada1c
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
609 additions
and
214 deletions
+609
-214
MyApplication.kt
...ain/java/com/base/filerecoveryrecyclebin/MyApplication.kt
+0
-1
AdmobMaxHelper.kt
...ava/com/base/filerecoveryrecyclebin/ads/AdmobMaxHelper.kt
+56
-0
AdmobOpenUtils.kt
...m/base/filerecoveryrecyclebin/ads/admob/AdmobOpenUtils.kt
+1
-1
AdMaxEvent.kt
...ava/com/base/filerecoveryrecyclebin/ads/max/AdMaxEvent.kt
+114
-33
AdMaxInit.kt
...java/com/base/filerecoveryrecyclebin/ads/max/AdMaxInit.kt
+10
-10
AdMaxInterstitialUtils.kt
.../filerecoveryrecyclebin/ads/max/AdMaxInterstitialUtils.kt
+61
-105
AdMaxNativeUtils.kt
...m/base/filerecoveryrecyclebin/ads/max/AdMaxNativeUtils.kt
+33
-23
AdMaxOpenUtils.kt
...com/base/filerecoveryrecyclebin/ads/max/AdMaxOpenUtils.kt
+22
-41
layout_max_native_big.xml
app/src/main/res/layout/layout_max_native_big.xml
+100
-0
layout_max_native_small.xml
app/src/main/res/layout/layout_max_native_small.xml
+106
-0
layout_max_native_small_f8f8f8.xml
app/src/main/res/layout/layout_max_native_small_f8f8f8.xml
+106
-0
No files found.
app/src/main/java/com/base/filerecoveryrecyclebin/MyApplication.kt
View file @
eb1ce437
...
@@ -6,7 +6,6 @@ import android.content.Intent
...
@@ -6,7 +6,6 @@ import android.content.Intent
import
android.os.Bundle
import
android.os.Bundle
import
com.base.filerecoveryrecyclebin.activity.SplashActivity
import
com.base.filerecoveryrecyclebin.activity.SplashActivity
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.bean.ConstObject.ifAgreePrivacy
import
com.base.filerecoveryrecyclebin.bean.ConstObject.ifAgreePrivacy
import
com.base.filerecoveryrecyclebin.fcm.FCMManager
import
com.base.filerecoveryrecyclebin.fcm.FCMManager
import
com.base.filerecoveryrecyclebin.fcm.RecoveryTimerManager
import
com.base.filerecoveryrecyclebin.fcm.RecoveryTimerManager
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/ads/AdmobMaxHelper.kt
0 → 100644
View file @
eb1ce437
package
com.base.filerecoveryrecyclebin.ads
import
android.app.Activity
import
android.view.ViewGroup
import
com.base.filerecoveryrecyclebin.R
import
com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils
import
com.base.filerecoveryrecyclebin.ads.admob.AdmobNativeUtils
import
com.base.filerecoveryrecyclebin.ads.admob.AdmobOpenUtils
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.ConfigHelper
object
AdmobMaxHelper
{
private
val
TAG
=
""
fun
admobMaxShowInterstitialAd
(
activity
:
Activity
,
onHidden
:
(()
->
Unit
)?
=
null
)
{
if
(
ConfigHelper
.
admobTrueMaxFlase
)
{
AdmobInterstitialUtils
.
showInterstitialAd
(
activity
)
{
onHidden
?.
invoke
()
}
}
else
{
AdMaxInterstitialUtils
.
showInterstitialAd
(
activity
)
{
onHidden
?.
invoke
()
}
}
}
fun
admobMaxShowOpenAd
(
activity
:
Activity
,
showBeforeAction
:
()
->
Unit
,
onHidden
:
(()
->
Unit
)?
=
null
)
{
if
(
ConfigHelper
.
admobTrueMaxFlase
)
{
AdmobOpenUtils
.
showAppOpenAd
(
activity
,
showBefore
=
showBeforeAction
)
{
onHidden
?.
invoke
()
}
}
else
{
AdMaxOpenUtils
.
showAppOpenAd
(
activity
,
loaded
=
showBeforeAction
)
{
onHidden
?.
invoke
()
}
}
}
fun
admobMaxShowNativeAd
(
activity
:
Activity
,
parent
:
ViewGroup
,
where
:
Int
=
0
)
{
if
(
ConfigHelper
.
admobTrueMaxFlase
)
{
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
}
AdMaxNativeUtils
.
showNativeAd
(
activity
,
parent
,
layout
)
}
}
}
\ No newline at end of file
app/src/main/java/com/base/filerecoveryrecyclebin/ads/admob/AdmobOpenUtils.kt
View file @
eb1ce437
...
@@ -64,7 +64,7 @@ object AdmobOpenUtils {
...
@@ -64,7 +64,7 @@ object AdmobOpenUtils {
}
}
fun
showAppOpenAd
(
activity
:
Activity
,
s
kip
:
Boolean
=
false
,
onHidden
:
((
where
:
Int
)
->
Unit
)?
=
null
)
{
fun
showAppOpenAd
(
activity
:
Activity
,
s
howBefore
:
(()
->
Unit
)?
=
null
,
onHidden
:
((
where
:
Int
)
->
Unit
)?
=
null
)
{
if
(
activity
.
isFinishing
||
activity
.
isDestroyed
)
{
if
(
activity
.
isFinishing
||
activity
.
isDestroyed
)
{
return
return
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/ads/max/AdMaxEvent.kt
View file @
eb1ce437
package
com.base.
filerecoveryrecyclebin
.ads.max
package
com.base.
datarecovery
.ads.max
import
android.app.Activity
import
android.app.Activity
import
android.os.Bundle
import
com.applovin.mediation.MaxAd
import
com.applovin.mediation.MaxAd
import
com.applovin.mediation.MaxAdRevenueListener
import
com.applovin.sdk.AppLovinSdk
import
com.base.filerecoveryrecyclebin.help.BaseApplication
import
com.base.filerecoveryrecyclebin.utils.EventUtils
import
com.base.filerecoveryrecyclebin.utils.EventUtils
import
com.facebook.FacebookSdk
import
com.google.firebase.analytics.FirebaseAnalytics
import
org.json.JSONObject
import
org.json.JSONObject
object
AdMaxEvent
{
object
AdMaxEvent
{
fun
clickAd
(
nativeAd
:
MaxAd
,
adUnit
:
String
)
{
fun
pullAd
(
ad
:
MaxAd
?,
adUnit
:
String
,
error
:
String
?
=
null
,
reqId
:
String
?
=
null
)
{
// val response = responseInfo?.adapterResponses?.getOrNull(0)
val
obj
=
JSONObject
()
val
obj
=
JSONObject
()
// obj.put("source", response?.adSourceName)
obj
.
put
(
"UnitId"
,
ad
?.
adUnitId
)
obj
.
put
(
"source"
,
nativeAd
.
dspName
)
obj
.
put
(
"ad_unit"
,
adUnit
)
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 credentials = mapOf(
val
obj
=
JSONObject
()
// "placementid" to response?.credentials?.get("placementid"),
obj
.
put
(
"UnitId"
,
ad
?.
adUnitId
)
// "appid" to response?.credentials?.get("appid"),
obj
.
put
(
"ad_unit"
,
adUnit
)
// "pubid" to response?.credentials?.get("pubid")
obj
.
put
(
// )
"creativeId"
,
// obj.put("credentials", credentials.toString())
ad
?.
creativeId
// obj.put("session_id", responseInfo?.responseId)
)
// obj.put("networkname", responseInfo?.mediationAdapterClassName)
obj
.
put
(
"networkname"
,
ad
?.
networkName
)
obj
.
put
(
"networkname"
,
nativeAd
.
networkName
)
obj
.
put
(
"placement"
,
ad
?.
placement
)
if
(
adUnit
!=
"nativeAd"
)
{
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
)
EventUtils
.
event
(
"ad_click"
,
ext
=
obj
)
}
else
{
}
else
{
EventUtils
.
event
(
"big
image_
ad_click"
,
ext
=
obj
)
EventUtils
.
event
(
"big
_img
ad_click"
,
ext
=
obj
)
}
}
}
}
fun
showAd
(
nativeAd
:
MaxAd
,
adUnit
:
String
,
activity
:
Activity
?
=
null
)
{
fun
showAd
(
ad
:
MaxAd
?,
adUnit
:
String
)
{
// val response = responseInfo?.adapterResponses?.getOrNull(0)
val
obj
=
JSONObject
()
val
obj
=
JSONObject
()
// obj.put("source", response?.adSourceName
)
obj
.
put
(
"UnitId"
,
ad
?.
adUnitId
)
obj
.
put
(
"ad_unit"
,
adUnit
)
obj
.
put
(
"ad_unit"
,
adUnit
)
obj
.
put
(
"networkname"
,
nativeAd
.
networkName
)
obj
.
put
(
// val credentials = mapOf(
"creativeId"
,
// "placementid" to response?.credentials?.get("placementid"),
ad
?.
creativeId
// "appid" to response?.credentials?.get("appid"),
)
// "pubid" to response?.credentials?.get("pubid"
)
obj
.
put
(
"networkname"
,
ad
?.
networkName
)
//
)
obj
.
put
(
"placement"
,
ad
?.
placement
)
// obj.put("credentials", credentials.toString()
)
obj
.
put
(
"networkplacement"
,
ad
?.
networkPlacement
)
// obj.put("session_id", responseInfo?.responseId
)
obj
.
put
(
"latency"
,
ad
?.
requestLatencyMillis
)
obj
.
put
(
"
from"
,
activity
?.
javaClass
?.
simpleNam
e
)
obj
.
put
(
"
valueMicros"
,
ad
?.
revenu
e
)
if
(
adUnit
!=
"nativeAd"
)
{
if
(!
adUnit
.
equals
(
"nativeAd"
))
{
EventUtils
.
event
(
"ad_show"
,
ext
=
obj
)
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
(
BaseApplication
.
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
)
//重新清零,开始计算
}
else
{
}
else
{
EventUtils
.
event
(
"bigimage_ad_show"
,
ext
=
obj
)
taichiSharedPreferencesEditor
.
putFloat
(
"TaichiTroasCache"
,
currentTaichiTroasCache
.
toFloat
()
)
taichiSharedPreferencesEditor
.
commit
()
}
val
obj
=
JSONObject
()
val
revenue
=
ad
.
revenue
val
countryCode
=
AppLovinSdk
.
getInstance
(
BaseApplication
.
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/filerecoveryrecyclebin/ads/max/AdMaxInit.kt
View file @
eb1ce437
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.utils.LogEx
import
com.base.filerecoveryrecyclebin.utils.LogEx
import
com.google.android.gms.ads.identifier.AdvertisingIdClient
import
java.util.Collections
import
java.util.concurrent.Executors
import
java.util.concurrent.Executors
import
java.util.concurrent.atomic.AtomicBoolean
object
AdMaxInit
{
object
AdMaxInit
{
private
val
TAG
=
"AdMaxInit"
private
val
TAG
=
"com.base.filerecoveryrecyclebin.ads.max.AdMaxInit"
var
isAdMaxInit
=
false
var
isAdMaxInit
=
AtomicBoolean
(
false
)
var
maxInitAction
:
(()
->
Unit
)?
=
null
fun
Context
.
initAdMax
()
{
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
// If you want to test your own AppLovin SDK key, change the value here and update the package name in the build.gradle
...
@@ -25,16 +24,17 @@ object AdMaxInit {
...
@@ -25,16 +24,17 @@ object AdMaxInit {
initConfigBuilder
.
mediationProvider
=
AppLovinMediationProvider
.
MAX
initConfigBuilder
.
mediationProvider
=
AppLovinMediationProvider
.
MAX
// Enable test mode by default for the current device. Cannot be run on the main thread.
// Enable test mode by default for the current device. Cannot be run on the main thread.
val
currentGaid
=
AdvertisingIdClient
.
getAdvertisingIdInfo
(
this
).
id
//
val currentGaid = AdvertisingIdClient.getAdvertisingIdInfo(this).id
if
(
currentGaid
!=
null
)
{
//
if (currentGaid != null) {
initConfigBuilder
.
testDeviceAdvertisingIds
=
Collections
.
singletonList
(
currentGaid
)
//
initConfigBuilder.testDeviceAdvertisingIds = Collections.singletonList(currentGaid)
}
//
}
// Initialize the AppLovin SDK
// Initialize the AppLovin SDK
val
sdk
=
AppLovinSdk
.
getInstance
(
this
)
val
sdk
=
AppLovinSdk
.
getInstance
(
this
)
sdk
.
initialize
(
initConfigBuilder
.
build
())
{
sdk
.
initialize
(
initConfigBuilder
.
build
())
{
LogEx
.
logDebug
(
TAG
,
"max init"
)
LogEx
.
logDebug
(
TAG
,
"max init"
)
isAdMaxInit
=
true
isAdMaxInit
.
set
(
true
)
maxInitAction
?.
invoke
()
}
}
executor
.
shutdown
()
executor
.
shutdown
()
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/ads/max/AdMaxInterstitialUtils.kt
View file @
eb1ce437
...
@@ -2,31 +2,19 @@ package com.base.filerecoveryrecyclebin.ads.max
...
@@ -2,31 +2,19 @@ package com.base.filerecoveryrecyclebin.ads.max
import
android.annotation.SuppressLint
import
android.annotation.SuppressLint
import
android.app.Activity
import
android.app.Activity
import
android.app.Dialog
import
android.os.CountDownTimer
import
android.os.Handler
import
com.applovin.mediation.MaxAd
import
com.applovin.mediation.MaxAd
import
com.applovin.mediation.MaxAdListener
import
com.applovin.mediation.MaxAdListener
import
com.applovin.mediation.MaxError
import
com.applovin.mediation.MaxError
import
com.applovin.mediation.ads.MaxInterstitialAd
import
com.applovin.mediation.ads.MaxInterstitialAd
import
com.base.datarecovery.ads.max.AdMaxEvent
import
com.base.filerecoveryrecyclebin.R
import
com.base.filerecoveryrecyclebin.R
import
com.base.filerecoveryrecyclebin.ads.AdDisplayUtils
import
com.base.filerecoveryrecyclebin.ads.AdDisplayUtils
import
com.base.filerecoveryrecyclebin.ads.AdmobCommonUtils
import
com.base.filerecoveryrecyclebin.ads.admob.AdmobEvent
import
com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils
import
com.base.filerecoveryrecyclebin.help.ConfigHelper
import
com.base.filerecoveryrecyclebin.help.ConfigHelper
import
com.base.filerecoveryrecyclebin.utils.EventUtils
import
com.base.filerecoveryrecyclebin.utils.EventUtils
import
com.base.filerecoveryrecyclebin.utils.LogEx
import
com.base.filerecoveryrecyclebin.utils.LogEx
import
com.base.filerecoveryrecyclebin.view.CustomDialog
import
com.base.filerecoveryrecyclebin.view.CustomDialog
import
com.google.android.gms.ads.AdError
import
com.google.android.gms.ads.FullScreenContentCallback
import
kotlinx.coroutines.MainScope
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.launch
import
org.json.JSONObject
import
org.json.JSONObject
import
java.util.concurrent.TimeUnit
import
java.util.UUID
import
kotlin.math.min
import
kotlin.math.pow
object
AdMaxInterstitialUtils
{
object
AdMaxInterstitialUtils
{
...
@@ -36,48 +24,47 @@ object AdMaxInterstitialUtils {
...
@@ -36,48 +24,47 @@ object AdMaxInterstitialUtils {
private
var
onHidden
:
(()
->
Unit
)?
=
null
private
var
onHidden
:
(()
->
Unit
)?
=
null
private
var
loadingListener
:
(()
->
Unit
)?
=
null
private
var
loadingListener
:
(()
->
Unit
)?
=
null
private
var
retryAttempt
=
0
private
var
retryAttempt
=
0
private
var
maxRetryAttempt
=
8
@SuppressLint
(
"StaticFieldLeak"
)
@SuppressLint
(
"StaticFieldLeak"
)
private
var
customDialog
:
CustomDialog
?
=
null
private
var
customDialog
:
CustomDialog
?
=
null
private
fun
setListener
(
activity
:
Activity
)
{
private
fun
setListener
(
activity
:
Activity
)
{
if
(
interstitialAd
==
null
)
{
if
(
interstitialAd
==
null
)
{
interstitialAd
=
MaxInterstitialAd
(
ConfigHelper
.
interAdMaxId
,
activity
)
}
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
=
MaxInterstitialAd
(
ConfigHelper
.
interAdMaxId
,
activity
)
interstitialAd
?.
setListener
(
object
:
MaxAdListener
{
interstitialAd
?.
setListener
(
object
:
MaxAdListener
{
override
fun
onAdLoaded
(
p0
:
MaxAd
)
{
override
fun
onAdLoaded
(
p0
:
MaxAd
)
{
LogEx
.
logDebug
(
TAG
,
"onAdLoaded"
)
LogEx
.
logDebug
(
TAG
,
"onAdLoaded"
)
loadingListener
?.
invoke
()
loadingListener
?.
invoke
()
interLoadTime
=
System
.
currentTimeMillis
()
interLoadTime
=
System
.
currentTimeMillis
()
retryAttempt
=
0
retryAttempt
=
0
AdMaxEvent
.
pullAd
(
p0
,
"interAd"
,
reqId
=
reqId
)
}
}
override
fun
onAdLoadFailed
(
p0
:
String
,
p1
:
MaxError
)
{
override
fun
onAdLoadFailed
(
p0
:
String
,
p1
:
MaxError
)
{
LogEx
.
logDebug
(
TAG
,
"onAdLoadFailed"
)
LogEx
.
logDebug
(
TAG
,
"onAdLoadFailed"
)
AdMaxEvent
.
pullAd
(
null
,
"interAd"
,
reqId
=
reqId
)
AdDisplayUtils
.
getInstance
().
incrementAdRequestFailCount
()
AdDisplayUtils
.
getInstance
().
incrementAdRequestFailCount
()
retryAttempt
++
retryAttempt
++
val
delayMillis
=
TimeUnit
.
SECONDS
.
toMillis
(
2.0
.
pow
(
min
(
6
,
retryAttempt
)).
toLong
())
LogEx
.
logDebug
(
TAG
,
"onAdLoadFailed retryAttempt=$retryAttempt"
)
LogEx
.
logDebug
(
TAG
,
"onAdLoadFailed retryAttempt=$retryAttempt delayMillis=$delayMillis"
)
if
(
retryAttempt
==
1
)
{
if
(
retryAttempt
==
2
)
{
onHidden
?.
invoke
()
customDialog
?.
dismiss
()
customDialog
?.
dismiss
()
}
onHidden
?.
invoke
()
if
(
retryAttempt
<=
maxRetryAttempt
)
{
MainScope
().
launch
{
delay
(
delayMillis
)
interstitialAd
?.
loadAd
()
}
}
else
{
retryAttempt
=
0
retryAttempt
=
0
}
else
{
// interstitialAd?.loadAd()
}
}
}
}
override
fun
onAdDisplayed
(
p0
:
MaxAd
)
{
override
fun
onAdDisplayed
(
p0
:
MaxAd
)
{
LogEx
.
logDebug
(
TAG
,
"onAdDisplayed"
)
LogEx
.
logDebug
(
TAG
,
"onAdDisplayed"
)
AdDisplayUtils
.
getInstance
().
incrementAdDisplayCount
()
AdDisplayUtils
.
getInstance
().
incrementAdDisplayCount
()
AdMaxEvent
.
showAd
(
p0
,
"interAd"
)
}
}
override
fun
onAdHidden
(
p0
:
MaxAd
)
{
override
fun
onAdHidden
(
p0
:
MaxAd
)
{
...
@@ -89,6 +76,7 @@ object AdMaxInterstitialUtils {
...
@@ -89,6 +76,7 @@ object AdMaxInterstitialUtils {
override
fun
onAdClicked
(
p0
:
MaxAd
)
{
override
fun
onAdClicked
(
p0
:
MaxAd
)
{
LogEx
.
logDebug
(
TAG
,
"onAdClicked"
)
LogEx
.
logDebug
(
TAG
,
"onAdClicked"
)
AdDisplayUtils
.
getInstance
().
incrementAdClickCount
()
AdDisplayUtils
.
getInstance
().
incrementAdClickCount
()
AdMaxEvent
.
clickAd
(
p0
,
"interAd"
)
}
}
...
@@ -97,11 +85,10 @@ object AdMaxInterstitialUtils {
...
@@ -97,11 +85,10 @@ object AdMaxInterstitialUtils {
}
}
})
})
}
}
}
fun
showInterstitialAd
(
fun
showInterstitialAd
(
activity
:
Activity
,
activity
:
Activity
,
isReLoadAd
:
Boolean
=
false
,
isShowDialog
:
Boolean
=
true
,
onHidden
:
(()
->
Unit
)?
=
null
onHidden
:
(()
->
Unit
)?
=
null
)
{
)
{
setListener
(
activity
)
setListener
(
activity
)
...
@@ -128,14 +115,15 @@ object AdMaxInterstitialUtils {
...
@@ -128,14 +115,15 @@ object AdMaxInterstitialUtils {
return
return
}
}
this
.
onHidden
=
onHidden
AdMaxInterstitialUtils
.
onHidden
=
onHidden
interstitialAd
?.
setRevenueListener
(
AdMaxEvent
.
EventOnPaidEventListener
())
if
(
interstitialAd
?.
isReady
==
true
)
{
if
(
interstitialAd
?.
isReady
==
true
)
{
LogEx
.
logDebug
(
TAG
,
"isReady=true"
)
LogEx
.
logDebug
(
TAG
,
"isReady=true"
)
showIntervalDialogAndShowAd
(
activity
,
isShowDialog
,
onHidden
,
2
)
interstitialAd
?.
showAd
(
)
}
else
{
}
else
{
interstitialAd
?.
loadAd
()
interstitialAd
?.
loadAd
()
LogEx
.
logDebug
(
TAG
,
"isReady=false"
)
LogEx
.
logDebug
(
TAG
,
"isReady=false"
)
showAdDialogAndLoadInterstitial
(
activity
,
isShowDialog
)
showAdDialogAndLoadInterstitial
(
activity
)
}
}
}
}
...
@@ -144,49 +132,10 @@ object AdMaxInterstitialUtils {
...
@@ -144,49 +132,10 @@ object AdMaxInterstitialUtils {
return
System
.
currentTimeMillis
()
-
interLoadTime
>
1000
*
60
*
60
return
System
.
currentTimeMillis
()
-
interLoadTime
>
1000
*
60
*
60
}
}
private
fun
showIntervalDialogAndShowAd
(
activity
:
Activity
,
isShowDialog
:
Boolean
,
onHidden
:
(()
->
Unit
)?,
interval
:
Int
)
{
// if (!isShowDialog) {
// return
// }
//
// if (customDialog != null && customDialog?.isShowing == true) {
// return // 如果对话框已经显示,则不再显示
// }
//
// customDialog = CustomDialog(activity, R.layout.dialog_ad_loading)
// customDialog?.setCountdownText(R.id.dialog_ad_loading_text)
// val countdownTimer = object : CountDownTimer((interval * 1000).toLong(), 1000) {
// override fun onTick(millisUntilFinished: Long) {
// val seconds = (millisUntilFinished / 1000).toInt()
// customDialog?.updateCountdownText("Advertising in preparation ($seconds" + "s)...")
// }
//
// override fun onFinish() {
// if (!activity.isDestroyed && !activity.isFinishing) {
// customDialog?.dismiss()
// }
// customDialog = null
// LogEx.logDebug(TAG, "onFinish")
interstitialAd
?.
showAd
()
// }
// }
// countdownTimer.start()
// customDialog?.show()
}
private
fun
showAdDialogAndLoadInterstitial
(
private
fun
showAdDialogAndLoadInterstitial
(
activity
:
Activity
,
activity
:
Activity
,
isShowDialog
:
Boolean
,
)
{
)
{
if
(!
isShowDialog
)
{
return
}
if
(!
activity
.
isFinishing
&&
!
activity
.
isDestroyed
)
{
if
(!
activity
.
isFinishing
&&
!
activity
.
isDestroyed
)
{
customDialog
=
CustomDialog
(
activity
,
R
.
layout
.
dialog_ad_loading
)
customDialog
=
CustomDialog
(
activity
,
R
.
layout
.
dialog_ad_loading
)
// 设置对话框的样式和内容
// 设置对话框的样式和内容
...
@@ -201,8 +150,15 @@ object AdMaxInterstitialUtils {
...
@@ -201,8 +150,15 @@ object AdMaxInterstitialUtils {
}
}
fun
loadInterstitialAd
(
activity
:
Activity
)
{
fun
loadInterstitialAd
(
activity
:
Activity
)
{
if
(!
AdDisplayUtils
.
getInstance
().
shouldShowAd
())
{
return
}
setListener
(
activity
)
setListener
(
activity
)
if
(
AdMaxInit
.
isAdMaxInit
)
{
if
(!
AdDisplayUtils
.
getInstance
().
shouldShowAd
())
{
return
}
if
(
AdMaxInit
.
isAdMaxInit
.
get
())
{
LogEx
.
logDebug
(
TAG
,
"loadInterstitialAd"
)
interstitialAd
?.
loadAd
()
interstitialAd
?.
loadAd
()
}
}
}
}
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/ads/max/AdMaxNativeUtils.kt
View file @
eb1ce437
...
@@ -4,15 +4,13 @@ import android.app.Activity
...
@@ -4,15 +4,13 @@ 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.adjust.sdk.Adjust
import
com.adjust.sdk.AdjustAdRevenue
import
com.adjust.sdk.AdjustConfig
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.datarecovery.ads.max.AdMaxEvent
import
com.base.filerecoveryrecyclebin.R
import
com.base.filerecoveryrecyclebin.R
import
com.base.filerecoveryrecyclebin.ads.AdDisplayUtils
import
com.base.filerecoveryrecyclebin.ads.AdDisplayUtils
import
com.base.filerecoveryrecyclebin.ads.AdmobCommonUtils
import
com.base.filerecoveryrecyclebin.ads.AdmobCommonUtils
...
@@ -35,8 +33,9 @@ object AdMaxNativeUtils {
...
@@ -35,8 +33,9 @@ object AdMaxNativeUtils {
//加载展示监听
//加载展示监听
nativeAdLoader
.
setNativeAdListener
(
object
:
MaxNativeAdListener
()
{
nativeAdLoader
.
setNativeAdListener
(
object
:
MaxNativeAdListener
()
{
override
fun
onNativeAdLoaded
(
nativeAdView
:
MaxNativeAdView
?,
ad
:
MaxAd
)
{
override
fun
onNativeAdLoaded
(
nativeAdView
:
MaxNativeAdView
?,
ad
:
MaxAd
)
{
LogEx
.
logDebug
(
TAG
,
"onNativeAdLoaded"
)
// Cleanup any pre-existing native ad to prevent memory leaks.
// Cleanup any pre-existing native ad to prevent memory leaks.
if
(
nativeAd
!=
null
)
{
if
(
nativeAd
?.
nativeAd
?.
isExpired
==
true
)
{
nativeAdLoader
.
destroy
(
nativeAd
)
nativeAdLoader
.
destroy
(
nativeAd
)
}
}
...
@@ -48,6 +47,7 @@ object AdMaxNativeUtils {
...
@@ -48,6 +47,7 @@ object AdMaxNativeUtils {
override
fun
onNativeAdLoadFailed
(
p0
:
String
,
p1
:
MaxError
)
{
override
fun
onNativeAdLoadFailed
(
p0
:
String
,
p1
:
MaxError
)
{
super
.
onNativeAdLoadFailed
(
p0
,
p1
)
super
.
onNativeAdLoadFailed
(
p0
,
p1
)
LogEx
.
logDebug
(
TAG
,
"onNativeAdLoadFailed"
)
AdDisplayUtils
.
getInstance
().
incrementAdRequestFailCount
()
AdDisplayUtils
.
getInstance
().
incrementAdRequestFailCount
()
val
obj2
=
JSONObject
()
val
obj2
=
JSONObject
()
obj2
.
put
(
"reason"
,
"no_ad"
)
obj2
.
put
(
"reason"
,
"no_ad"
)
...
@@ -57,6 +57,7 @@ object AdMaxNativeUtils {
...
@@ -57,6 +57,7 @@ object AdMaxNativeUtils {
override
fun
onNativeAdClicked
(
p0
:
MaxAd
)
{
override
fun
onNativeAdClicked
(
p0
:
MaxAd
)
{
super
.
onNativeAdClicked
(
p0
)
super
.
onNativeAdClicked
(
p0
)
LogEx
.
logDebug
(
TAG
,
"onNativeAdClicked"
)
AdDisplayUtils
.
getInstance
().
incrementAdClickCount
()
AdDisplayUtils
.
getInstance
().
incrementAdClickCount
()
nativeAd
?.
let
{
AdMaxEvent
.
clickAd
(
it
,
"nativeAd"
)
}
nativeAd
?.
let
{
AdMaxEvent
.
clickAd
(
it
,
"nativeAd"
)
}
AdmobCommonUtils
.
isMultiClick
(
nativeAd
)
AdmobCommonUtils
.
isMultiClick
(
nativeAd
)
...
@@ -70,12 +71,7 @@ object AdMaxNativeUtils {
...
@@ -70,12 +71,7 @@ object AdMaxNativeUtils {
//广告价格监听
//广告价格监听
nativeAdLoader
.
setRevenueListener
{
ad
->
nativeAdLoader
.
setRevenueListener
{
ad
->
val
adjustAdRevenue
=
AdjustAdRevenue
(
AdjustConfig
.
AD_REVENUE_APPLOVIN_MAX
)
adjustAdRevenue
.
setRevenue
(
ad
.
revenue
,
"USD"
)
adjustAdRevenue
.
setAdRevenueNetwork
(
ad
.
networkName
)
adjustAdRevenue
.
setAdRevenueUnit
(
ad
.
adUnitId
)
adjustAdRevenue
.
setAdRevenuePlacement
(
ad
.
placement
)
Adjust
.
trackAdRevenue
(
adjustAdRevenue
)
}
}
...
@@ -85,22 +81,35 @@ object AdMaxNativeUtils {
...
@@ -85,22 +81,35 @@ object AdMaxNativeUtils {
}
}
}
}
private
fun
createNativeAdView
(
context
:
Context
):
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)
// .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
()
.
build
()
return
MaxNativeAdView
(
binder
,
context
)
return
MaxNativeAdView
(
binder
,
context
)
}
}
fun
showNativeAd
(
activity
:
Activity
,
parent
:
ViewGroup
)
{
fun
showNativeAd
(
activity
:
Activity
,
parent
:
ViewGroup
,
layout
:
Int
)
{
setNativeAdListener
()
setNativeAdListener
()
...
@@ -119,11 +128,12 @@ object AdMaxNativeUtils {
...
@@ -119,11 +128,12 @@ object AdMaxNativeUtils {
nativeAdLoader
.
loadAd
()
nativeAdLoader
.
loadAd
()
}
else
{
}
else
{
//展示广告
//展示广告
val
adView
=
createNativeAdView
(
activity
)
val
adView
=
createNativeAdView
(
activity
,
layout
)
parent
.
isVisible
=
true
parent
.
isVisible
=
true
nativeAdLoader
.
render
(
adView
,
nativeAd
)
nativeAdLoader
.
render
(
adView
,
nativeAd
)
parent
.
removeAllViews
()
parent
.
addView
(
adView
)
parent
.
addView
(
adView
)
nativeAd
?.
let
{
AdMaxEvent
.
showAd
(
it
,
"nativeAd"
,
activity
)
}
nativeAd
?.
let
{
AdMaxEvent
.
showAd
(
it
,
"nativeAd"
)
}
AdDisplayUtils
.
getInstance
().
incrementAdDisplayCount
()
AdDisplayUtils
.
getInstance
().
incrementAdDisplayCount
()
}
}
}
}
...
...
app/src/main/java/com/base/filerecoveryrecyclebin/ads/max/AdMaxOpenUtils.kt
View file @
eb1ce437
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
com.adjust.sdk.Adjust
import
com.adjust.sdk.AdjustAdRevenue
import
com.adjust.sdk.AdjustConfig
import
com.applovin.mediation.MaxAd
import
com.applovin.mediation.MaxAd
import
com.applovin.mediation.MaxAdListener
import
com.applovin.mediation.MaxAdListener
import
com.applovin.mediation.MaxError
import
com.applovin.mediation.MaxError
import
com.applovin.mediation.ads.MaxAppOpenAd
import
com.applovin.mediation.ads.MaxAppOpenAd
import
com.base.datarecovery.ads.max.AdMaxEvent
import
com.base.filerecoveryrecyclebin.ads.AdDisplayUtils
import
com.base.filerecoveryrecyclebin.ads.AdDisplayUtils
import
com.base.filerecoveryrecyclebin.ads.AdmobCommonUtils
import
com.base.filerecoveryrecyclebin.ads.AdmobCommonUtils
import
com.base.filerecoveryrecyclebin.help.ConfigHelper
import
com.base.filerecoveryrecyclebin.help.ConfigHelper
import
com.base.filerecoveryrecyclebin.utils.EventUtils
import
com.base.filerecoveryrecyclebin.utils.EventUtils
import
com.base.filerecoveryrecyclebin.utils.LogEx
import
com.base.filerecoveryrecyclebin.utils.LogEx
import
kotlinx.coroutines.MainScope
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.launch
import
org.jacoco.core.internal.analysis.filter.IFilter
import
org.json.JSONObject
import
org.json.JSONObject
import
java.util.concurrent.TimeUnit
import
kotlin.math.min
import
kotlin.math.pow
object
AdMaxOpenUtils
{
object
AdMaxOpenUtils
{
private
val
TAG
=
"AdMaxOpenUtils"
private
val
TAG
=
"
com.base.filerecoveryrecyclebin.ads.max.
AdMaxOpenUtils"
private
var
appOpenAd
:
MaxAppOpenAd
?
=
null
private
var
appOpenAd
:
MaxAppOpenAd
?
=
null
private
var
openLoadTime
=
Long
.
MAX_VALUE
private
var
openLoadTime
=
Long
.
MAX_VALUE
private
var
onHidden
:
(()
->
Unit
)?
=
null
private
var
onHidden
:
(()
->
Unit
)?
=
null
private
var
loadingListener
:
(()
->
Unit
)?
=
null
private
var
loadingListener
:
(()
->
Unit
)?
=
null
private
var
retryAttempt
=
0
private
var
maxRetryAttempt
=
8
private
fun
setListener
(
context
:
Context
)
{
private
fun
setListener
(
context
:
Context
)
{
if
(
appOpenAd
==
null
)
{
if
(
appOpenAd
==
null
)
{
...
@@ -41,33 +29,20 @@ object AdMaxOpenUtils {
...
@@ -41,33 +29,20 @@ object AdMaxOpenUtils {
LogEx
.
logDebug
(
TAG
,
"onAdLoaded"
)
LogEx
.
logDebug
(
TAG
,
"onAdLoaded"
)
openLoadTime
=
System
.
currentTimeMillis
()
openLoadTime
=
System
.
currentTimeMillis
()
loadingListener
?.
invoke
()
loadingListener
?.
invoke
()
AdMaxEvent
.
pullAd
(
p0
,
"openAd"
)
}
}
override
fun
onAdLoadFailed
(
p0
:
String
,
p1
:
MaxError
)
{
override
fun
onAdLoadFailed
(
p0
:
String
,
p1
:
MaxError
)
{
LogEx
.
logDebug
(
TAG
,
"onAdLoadFailed
"
)
LogEx
.
logDebug
(
TAG
,
"onAdLoadFailed
:"
+
p1
.
message
.
toString
()
)
onHidden
?.
invoke
()
onHidden
?.
invoke
()
AdDisplayUtils
.
getInstance
().
incrementAdRequestFailCount
()
AdDisplayUtils
.
getInstance
().
incrementAdRequestFailCount
()
// retryAttempt++
AdMaxEvent
.
pullAd
(
null
,
"openAd"
)
// val delayMillis = TimeUnit.SECONDS.toMillis(2.0.pow(min(6, retryAttempt)).toLong())
// LogEx.logDebug(TAG, "onAdLoadFailed retryAttempt=$retryAttempt delayMillis=$delayMillis")
// if (retryAttempt == 2) {
// LogEx.logDebug(TAG, "onAdLoadFailed onHidden")
// onHidden?.invoke()
// }
//
// if (retryAttempt <= maxRetryAttempt) {
// MainScope().launch {
// delay(delayMillis)
// appOpenAd?.loadAd()
// }
// } else {
// retryAttempt = 0
// }
}
}
override
fun
onAdDisplayed
(
p0
:
MaxAd
)
{
override
fun
onAdDisplayed
(
p0
:
MaxAd
)
{
AdDisplayUtils
.
getInstance
().
incrementAdDisplayCount
()
AdDisplayUtils
.
getInstance
().
incrementAdDisplayCount
()
AdMaxEvent
.
showAd
(
p0
,
"openAd"
)
}
}
override
fun
onAdHidden
(
p0
:
MaxAd
)
{
override
fun
onAdHidden
(
p0
:
MaxAd
)
{
...
@@ -78,8 +53,9 @@ object AdMaxOpenUtils {
...
@@ -78,8 +53,9 @@ object AdMaxOpenUtils {
override
fun
onAdClicked
(
p0
:
MaxAd
)
{
override
fun
onAdClicked
(
p0
:
MaxAd
)
{
AdDisplayUtils
.
getInstance
().
incrementAdClickCount
()
AdDisplayUtils
.
getInstance
().
incrementAdClickCount
()
// AdMaxEvent.clickAd(appOpenAd, "openAd")
//
com.base.datarecovery.ads.max.
AdMaxEvent.clickAd(appOpenAd, "openAd")
AdmobCommonUtils
.
isMultiClick
(
appOpenAd
)
AdmobCommonUtils
.
isMultiClick
(
appOpenAd
)
AdMaxEvent
.
clickAd
(
p0
,
"openAd"
)
}
}
...
@@ -95,12 +71,7 @@ object AdMaxOpenUtils {
...
@@ -95,12 +71,7 @@ object AdMaxOpenUtils {
})
})
appOpenAd
?.
setRevenueListener
{
ad
->
appOpenAd
?.
setRevenueListener
{
ad
->
val
adjustAdRevenue
=
AdjustAdRevenue
(
AdjustConfig
.
AD_REVENUE_APPLOVIN_MAX
)
adjustAdRevenue
.
setRevenue
(
ad
.
revenue
,
"USD"
)
adjustAdRevenue
.
setAdRevenueNetwork
(
ad
.
networkName
)
adjustAdRevenue
.
setAdRevenueUnit
(
ad
.
adUnitId
)
adjustAdRevenue
.
setAdRevenuePlacement
(
ad
.
placement
)
Adjust
.
trackAdRevenue
(
adjustAdRevenue
)
}
}
}
}
}
}
...
@@ -128,7 +99,7 @@ object AdMaxOpenUtils {
...
@@ -128,7 +99,7 @@ object AdMaxOpenUtils {
appOpenAd
?.
loadAd
()
appOpenAd
?.
loadAd
()
}
}
if
(!
AdMaxInit
.
isAdMaxInit
)
{
if
(!
AdMaxInit
.
isAdMaxInit
.
get
()
)
{
onHidden
?.
invoke
()
onHidden
?.
invoke
()
return
return
}
}
...
@@ -136,10 +107,11 @@ object AdMaxOpenUtils {
...
@@ -136,10 +107,11 @@ object AdMaxOpenUtils {
LogEx
.
logDebug
(
TAG
,
"showAppOpenAd continue"
)
LogEx
.
logDebug
(
TAG
,
"showAppOpenAd continue"
)
thi
s
.
onHidden
=
onHidden
AdMaxOpenUtil
s
.
onHidden
=
onHidden
if
(
appOpenAd
?.
isReady
==
true
)
{
if
(
appOpenAd
?.
isReady
==
true
)
{
LogEx
.
logDebug
(
TAG
,
"isReady=false"
)
LogEx
.
logDebug
(
TAG
,
"isReady=false"
)
appOpenAd
?.
setRevenueListener
(
AdMaxEvent
.
EventOnPaidEventListener
())
appOpenAd
?.
showAd
()
appOpenAd
?.
showAd
()
}
else
{
}
else
{
appOpenAd
?.
loadAd
()
appOpenAd
?.
loadAd
()
...
@@ -156,9 +128,18 @@ object AdMaxOpenUtils {
...
@@ -156,9 +128,18 @@ object AdMaxOpenUtils {
}
}
fun
loadAppOpenAd
(
activity
:
Activity
)
{
fun
loadAppOpenAd
(
activity
:
Activity
)
{
if
(!
AdDisplayUtils
.
getInstance
().
shouldShowAd
())
{
LogEx
.
logDebug
(
TAG
,
"!shouldShowAd"
)
return
}
setListener
(
activity
)
setListener
(
activity
)
if
(
AdMaxInit
.
isAdMaxInit
)
{
LogEx
.
logDebug
(
TAG
,
"loadAppOpenAd1"
)
if
(
AdMaxInit
.
isAdMaxInit
.
get
())
{
LogEx
.
logDebug
(
TAG
,
"loadAppOpenAd2"
)
appOpenAd
?.
loadAd
()
appOpenAd
?.
loadAd
()
}
else
{
LogEx
.
logDebug
(
TAG
,
"loadAppOpenAd3"
)
}
}
}
}
...
...
app/src/main/res/layout/layout_max_native_big.xml
0 → 100644
View file @
eb1ce437
<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:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:background=
"@drawable/bg_ad_border"
android:baselineAligned=
"false"
android:orientation=
"vertical"
android:padding=
"10dp"
>
<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:text=
"Ad"
android:textColor=
"@color/white"
android:textSize=
"12sp"
tools:ignore=
"HardcodedText"
/>
<TextView
android:layout_marginStart=
"8dp"
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>
<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>
</LinearLayout>
<com.google.android.gms.ads.nativead.MediaView
android:id=
"@+id/ad_media"
android:layout_width=
"match_parent"
android:layout_height=
"100dp"
android:layout_gravity=
"center_vertical"
android:layout_marginVertical=
"10dp"
/>
<androidx.appcompat.widget.AppCompatButton
android:id=
"@+id/ad_call_to_action"
android:layout_width=
"match_parent"
android:layout_height=
"38dp"
android:layout_gravity=
"center_vertical"
android:background=
"@drawable/bg_ad_button"
android:gravity=
"center"
android:textAllCaps=
"false"
android:textColor=
"@color/white"
android:textSize=
"15sp"
tools:text=
"Install"
/>
</LinearLayout>
</com.google.android.gms.ads.nativead.NativeAdView>
\ No newline at end of file
app/src/main/res/layout/layout_max_native_small.xml
0 → 100644
View file @
eb1ce437
<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
app/src/main/res/layout/layout_max_native_small_f8f8f8.xml
0 → 100644
View file @
eb1ce437
<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=
"#f8f8f8"
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