react-native-daro 1.0.13 → 1.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +30 -30
- package/android/build.gradle +52 -59
- package/android/src/admob/java/com/daro/reactnative/DaroSdkBridge.kt +23 -0
- package/android/src/main/AndroidManifest.xml +1 -2
- package/android/src/main/java/com/{darom → daro/reactnative}/DaroMAdBannerViewManager.kt +38 -15
- package/android/src/main/java/com/daro/reactnative/DaroMAdNativeViewManager.kt +167 -0
- package/android/src/main/java/com/daro/reactnative/DaroMModule.kt +257 -0
- package/android/src/main/java/com/daro/reactnative/DaroMPackage.kt +45 -0
- package/android/src/main/java/com/daro/reactnative/DaroMediaViewManager.kt +25 -0
- package/android/src/main/java/com/{darom → daro/reactnative}/constants/InternalDaroMBannerSize.kt +1 -1
- package/android/src/main/java/com/{darom → daro/reactnative}/event/DaroMEvent.kt +19 -8
- package/android/src/main/java/com/{darom → daro/reactnative}/impl/DaroMBannerViewModuleImpl.kt +2 -2
- package/android/src/main/java/com/{darom → daro/reactnative}/impl/DaroMInterstitialModuleImpl.kt +26 -26
- package/android/src/main/java/com/{darom → daro/reactnative}/impl/DaroMLightPopupModuleImpl.kt +30 -29
- package/android/src/main/java/com/{darom → daro/reactnative}/impl/DaroMRewardedAdModuleImpl.kt +27 -27
- package/android/src/main/java/com/{darom → daro/reactnative}/util/AdInfoUtil.kt +25 -1
- package/android/src/main/java/com/daro/reactnative/util/EventEmitterUtil.kt +37 -0
- package/android/src/main/java/com/daro/reactnative/view/DaroMAdBannerViewContainer.kt +417 -0
- package/android/src/main/java/com/daro/reactnative/view/DaroMAdNativeViewContainer.kt +624 -0
- package/android/src/main/java/com/daro/reactnative/view/DaroMediaView.kt +123 -0
- package/android/src/newarch/java/com/daro/reactnative/DaroMModuleSpec.kt +6 -0
- package/android/src/oldarch/java/com/daro/reactnative/DaroMModuleSpec.kt +90 -0
- package/app.plugin.js +1 -0
- package/ios/DaroMModule+AppOpen.swift +38 -32
- package/ios/DaroMModule+Interstitial.swift +32 -26
- package/ios/DaroMModule+LightPopup.swift +43 -33
- package/ios/DaroMModule+Rewarded.swift +38 -27
- package/ios/DaroMModule.mm +45 -17
- package/ios/DaroMModule.swift +24 -17
- package/ios/Fabric/DaroMAdBannerComponentView.mm +207 -0
- package/ios/Fabric/DaroMFabricEventSink.mm +31 -0
- package/ios/Fabric/DaroMFabricPropApplier.mm +123 -0
- package/ios/Fabric/DaroMNativeAdComponentView.mm +294 -0
- package/ios/{DaroMAdBannerViewManager.m → Paper/DaroMAdBannerViewManager.m} +3 -1
- package/ios/Paper/DaroMAdBannerViewManager.swift +21 -0
- package/ios/{DaroMNativeAdViewManager.m → Paper/DaroMNativeAdViewManager.m} +2 -1
- package/ios/Paper/DaroMNativeAdViewManager.swift +22 -0
- package/ios/Shared/DaroMAdEventSink.swift +24 -0
- package/ios/Shared/DaroMBannerAdView.swift +188 -0
- package/ios/Shared/DaroMNativeAdLoadCoordinator.swift +49 -0
- package/ios/Shared/DaroMNativeAdView.swift +575 -0
- package/ios/Shared/DaroMNativeAssetResolver.swift +53 -0
- package/ios/mediation/admob/DaroMediationDebugger.swift +11 -0
- package/ios/mediation/admob/DaroMediationTypes.swift +23 -0
- package/lib/commonjs/AdBannerView.js +21 -35
- package/lib/commonjs/AdBannerView.js.map +1 -1
- package/lib/commonjs/AppOpenAd.js +80 -21
- package/lib/commonjs/AppOpenAd.js.map +1 -1
- package/lib/commonjs/DaroMAdBannerViewNativeComponent.ts +47 -0
- package/lib/commonjs/DaroMNativeAdViewNativeComponent.ts +62 -0
- package/lib/commonjs/DaroMediaViewNativeComponent.ts +9 -0
- package/lib/commonjs/ErrorCode.js.map +1 -1
- package/lib/commonjs/EventEmitter.js +4 -5
- package/lib/commonjs/EventEmitter.js.map +1 -1
- package/lib/commonjs/InterstitialAd.js +48 -22
- package/lib/commonjs/InterstitialAd.js.map +1 -1
- package/lib/commonjs/LightPopupAd.js +64 -46
- package/lib/commonjs/LightPopupAd.js.map +1 -1
- package/lib/commonjs/NativeDaroModule.js +9 -0
- package/lib/commonjs/NativeDaroModule.js.map +1 -0
- package/lib/commonjs/RewardedAd.js +47 -23
- package/lib/commonjs/RewardedAd.js.map +1 -1
- package/lib/commonjs/codegen-env.d.js +2 -0
- package/lib/commonjs/codegen-env.d.js.map +1 -0
- package/lib/commonjs/hooks/useInterstitialAd.js +110 -0
- package/lib/commonjs/hooks/useInterstitialAd.js.map +1 -0
- package/lib/commonjs/hooks/useLightPopupAd.js +114 -0
- package/lib/commonjs/hooks/useLightPopupAd.js.map +1 -0
- package/lib/commonjs/hooks/useRewardedAd.js +113 -0
- package/lib/commonjs/hooks/useRewardedAd.js.map +1 -0
- package/lib/commonjs/index.js +29 -13
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/nativeAd/NativeAdView.js +23 -18
- package/lib/commonjs/nativeAd/NativeAdView.js.map +1 -1
- package/lib/commonjs/nativeAd/NativeAdViewComponents.js +43 -31
- package/lib/commonjs/nativeAd/NativeAdViewComponents.js.map +1 -1
- package/lib/commonjs/nativeAd/NativeAdViewProvider.js +34 -7
- package/lib/commonjs/nativeAd/NativeAdViewProvider.js.map +1 -1
- package/lib/commonjs/package.json +1 -0
- package/lib/module/AdBannerView.js +20 -36
- package/lib/module/AdBannerView.js.map +1 -1
- package/lib/module/AppOpenAd.js +80 -22
- package/lib/module/AppOpenAd.js.map +1 -1
- package/lib/module/DaroMAdBannerViewNativeComponent.ts +47 -0
- package/lib/module/DaroMNativeAdViewNativeComponent.ts +62 -0
- package/lib/module/DaroMediaViewNativeComponent.ts +9 -0
- package/lib/module/ErrorCode.js.map +1 -1
- package/lib/module/EventEmitter.js +4 -6
- package/lib/module/EventEmitter.js.map +1 -1
- package/lib/module/InterstitialAd.js +47 -22
- package/lib/module/InterstitialAd.js.map +1 -1
- package/lib/module/LightPopupAd.js +65 -47
- package/lib/module/LightPopupAd.js.map +1 -1
- package/lib/module/NativeDaroModule.js +5 -0
- package/lib/module/NativeDaroModule.js.map +1 -0
- package/lib/module/RewardedAd.js +46 -23
- package/lib/module/RewardedAd.js.map +1 -1
- package/lib/module/codegen-env.d.js +2 -0
- package/lib/module/codegen-env.d.js.map +1 -0
- package/lib/module/hooks/useInterstitialAd.js +106 -0
- package/lib/module/hooks/useInterstitialAd.js.map +1 -0
- package/lib/module/hooks/useLightPopupAd.js +110 -0
- package/lib/module/hooks/useLightPopupAd.js.map +1 -0
- package/lib/module/hooks/useRewardedAd.js +109 -0
- package/lib/module/hooks/useRewardedAd.js.map +1 -0
- package/lib/module/index.js +7 -13
- package/lib/module/index.js.map +1 -1
- package/lib/module/nativeAd/NativeAdView.js +22 -19
- package/lib/module/nativeAd/NativeAdView.js.map +1 -1
- package/lib/module/nativeAd/NativeAdViewComponents.js +45 -34
- package/lib/module/nativeAd/NativeAdViewComponents.js.map +1 -1
- package/lib/module/nativeAd/NativeAdViewProvider.js +35 -8
- package/lib/module/nativeAd/NativeAdViewProvider.js.map +1 -1
- package/lib/module/package.json +1 -0
- package/lib/typescript/commonjs/plugin/src/index.d.ts +19 -0
- package/lib/typescript/commonjs/plugin/src/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/plugin/src/skAdNetworkIds.d.ts +6 -0
- package/lib/typescript/commonjs/plugin/src/skAdNetworkIds.d.ts.map +1 -0
- package/lib/typescript/commonjs/plugin/src/withAndroid.d.ts +8 -0
- package/lib/typescript/commonjs/plugin/src/withAndroid.d.ts.map +1 -0
- package/lib/typescript/commonjs/plugin/src/withIos.d.ts +8 -0
- package/lib/typescript/commonjs/plugin/src/withIos.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/AdBannerView.d.ts +126 -4
- package/lib/typescript/commonjs/src/AdBannerView.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/AppOpenAd.d.ts +6 -0
- package/lib/typescript/commonjs/src/AppOpenAd.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/DaroMAdBannerViewNativeComponent.d.ts +32 -0
- package/lib/typescript/commonjs/src/DaroMAdBannerViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/DaroMNativeAdViewNativeComponent.d.ts +42 -0
- package/lib/typescript/commonjs/src/DaroMNativeAdViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/DaroMediaViewNativeComponent.d.ts +6 -0
- package/lib/typescript/commonjs/src/DaroMediaViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/ErrorCode.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/EventEmitter.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/InterstitialAd.d.ts +6 -0
- package/lib/typescript/commonjs/src/InterstitialAd.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/LightPopupAd.d.ts +6 -0
- package/lib/typescript/commonjs/src/LightPopupAd.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/NativeDaroModule.d.ts +61 -0
- package/lib/typescript/commonjs/src/NativeDaroModule.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/RewardedAd.d.ts +6 -0
- package/lib/typescript/commonjs/src/RewardedAd.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/hooks/useInterstitialAd.d.ts +19 -0
- package/lib/typescript/commonjs/src/hooks/useInterstitialAd.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/useLightPopupAd.d.ts +23 -0
- package/lib/typescript/commonjs/src/hooks/useLightPopupAd.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/useRewardedAd.d.ts +20 -0
- package/lib/typescript/commonjs/src/hooks/useRewardedAd.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +7 -1
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/nativeAd/NativeAdView.d.ts +125 -2
- package/lib/typescript/commonjs/src/nativeAd/NativeAdView.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/nativeAd/NativeAdViewComponents.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/nativeAd/NativeAdViewProvider.d.ts +11 -5
- package/lib/typescript/commonjs/src/nativeAd/NativeAdViewProvider.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/types/AdBannerViewProps.d.ts +2 -2
- package/lib/typescript/commonjs/src/types/AdBannerViewProps.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/types/AdInfo.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/types/AdProps.d.ts +2 -2
- package/lib/typescript/commonjs/src/types/AdProps.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/types/DaroMMobileAds.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/types/NativeAdViewProps.d.ts +2 -0
- package/lib/typescript/commonjs/src/types/NativeAdViewProps.d.ts.map +1 -1
- package/lib/typescript/module/plugin/src/index.d.ts +19 -0
- package/lib/typescript/module/plugin/src/index.d.ts.map +1 -0
- package/lib/typescript/module/plugin/src/skAdNetworkIds.d.ts +6 -0
- package/lib/typescript/module/plugin/src/skAdNetworkIds.d.ts.map +1 -0
- package/lib/typescript/module/plugin/src/withAndroid.d.ts +8 -0
- package/lib/typescript/module/plugin/src/withAndroid.d.ts.map +1 -0
- package/lib/typescript/module/plugin/src/withIos.d.ts +8 -0
- package/lib/typescript/module/plugin/src/withIos.d.ts.map +1 -0
- package/lib/typescript/module/src/AdBannerView.d.ts +126 -4
- package/lib/typescript/module/src/AdBannerView.d.ts.map +1 -1
- package/lib/typescript/module/src/AppOpenAd.d.ts +6 -0
- package/lib/typescript/module/src/AppOpenAd.d.ts.map +1 -1
- package/lib/typescript/module/src/DaroMAdBannerViewNativeComponent.d.ts +32 -0
- package/lib/typescript/module/src/DaroMAdBannerViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/DaroMNativeAdViewNativeComponent.d.ts +42 -0
- package/lib/typescript/module/src/DaroMNativeAdViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/DaroMediaViewNativeComponent.d.ts +6 -0
- package/lib/typescript/module/src/DaroMediaViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/ErrorCode.d.ts.map +1 -1
- package/lib/typescript/module/src/EventEmitter.d.ts.map +1 -1
- package/lib/typescript/module/src/InterstitialAd.d.ts +6 -0
- package/lib/typescript/module/src/InterstitialAd.d.ts.map +1 -1
- package/lib/typescript/module/src/LightPopupAd.d.ts +6 -0
- package/lib/typescript/module/src/LightPopupAd.d.ts.map +1 -1
- package/lib/typescript/module/src/NativeDaroModule.d.ts +61 -0
- package/lib/typescript/module/src/NativeDaroModule.d.ts.map +1 -0
- package/lib/typescript/module/src/RewardedAd.d.ts +6 -0
- package/lib/typescript/module/src/RewardedAd.d.ts.map +1 -1
- package/lib/typescript/module/src/hooks/useInterstitialAd.d.ts +19 -0
- package/lib/typescript/module/src/hooks/useInterstitialAd.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/useLightPopupAd.d.ts +23 -0
- package/lib/typescript/module/src/hooks/useLightPopupAd.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/useRewardedAd.d.ts +20 -0
- package/lib/typescript/module/src/hooks/useRewardedAd.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +7 -1
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/nativeAd/NativeAdView.d.ts +125 -2
- package/lib/typescript/module/src/nativeAd/NativeAdView.d.ts.map +1 -1
- package/lib/typescript/module/src/nativeAd/NativeAdViewComponents.d.ts.map +1 -1
- package/lib/typescript/module/src/nativeAd/NativeAdViewProvider.d.ts +11 -5
- package/lib/typescript/module/src/nativeAd/NativeAdViewProvider.d.ts.map +1 -1
- package/lib/typescript/module/src/types/AdBannerViewProps.d.ts +2 -2
- package/lib/typescript/module/src/types/AdBannerViewProps.d.ts.map +1 -1
- package/lib/typescript/module/src/types/AdInfo.d.ts.map +1 -1
- package/lib/typescript/module/src/types/AdProps.d.ts +2 -2
- package/lib/typescript/module/src/types/AdProps.d.ts.map +1 -1
- package/lib/typescript/module/src/types/DaroMMobileAds.d.ts.map +1 -1
- package/lib/typescript/module/src/types/NativeAdViewProps.d.ts +2 -0
- package/lib/typescript/module/src/types/NativeAdViewProps.d.ts.map +1 -1
- package/package.json +95 -105
- package/plugin/build/index.d.ts +18 -0
- package/plugin/build/index.js +71 -0
- package/plugin/build/skAdNetworkIds.d.ts +5 -0
- package/plugin/build/skAdNetworkIds.js +205 -0
- package/plugin/build/withAndroid.d.ts +7 -0
- package/plugin/build/withAndroid.js +222 -0
- package/plugin/build/withIos.d.ts +7 -0
- package/plugin/build/withIos.js +82 -0
- package/react-native-daro.podspec +28 -0
- package/src/AdBannerView.tsx +48 -48
- package/src/AppOpenAd.ts +101 -20
- package/src/DaroMAdBannerViewNativeComponent.ts +47 -0
- package/src/DaroMNativeAdViewNativeComponent.ts +62 -0
- package/src/DaroMediaViewNativeComponent.ts +9 -0
- package/src/ErrorCode.ts +1 -2
- package/src/EventEmitter.ts +9 -7
- package/src/InterstitialAd.ts +75 -21
- package/src/LightPopupAd.ts +90 -51
- package/src/NativeDaroModule.ts +91 -0
- package/src/RewardedAd.ts +72 -22
- package/src/codegen-env.d.ts +45 -0
- package/src/hooks/useInterstitialAd.ts +117 -0
- package/src/hooks/useLightPopupAd.ts +132 -0
- package/src/hooks/useRewardedAd.ts +122 -0
- package/src/index.tsx +21 -22
- package/src/nativeAd/NativeAdView.tsx +83 -45
- package/src/nativeAd/NativeAdViewComponents.tsx +129 -64
- package/src/nativeAd/NativeAdViewProvider.tsx +84 -16
- package/src/types/AdBannerViewProps.ts +11 -11
- package/src/types/AdInfo.ts +17 -17
- package/src/types/AdProps.ts +8 -9
- package/src/types/DaroMMobileAds.ts +3 -6
- package/src/types/NativeAdViewProps.ts +12 -5
- package/src/types/index.ts +1 -1
- package/android/gradle.properties +0 -5
- package/android/src/main/AndroidManifestNew.xml +0 -7
- package/android/src/main/java/com/darom/DaroMAdNativeViewManager.kt +0 -136
- package/android/src/main/java/com/darom/DaroMModule.kt +0 -203
- package/android/src/main/java/com/darom/DaroMPackage.kt +0 -21
- package/android/src/main/java/com/darom/util/EventEmitterUtil.kt +0 -24
- package/android/src/main/java/com/darom/view/DaroMAdBannerViewContainer.kt +0 -163
- package/android/src/main/java/com/darom/view/DaroMAdNativeViewContainer.kt +0 -375
- package/android/src/main/res/layout/layout_activity_transparent.xml +0 -7
- package/android/src/main/res/values/styles.xml +0 -11
- package/ios/DaroM-Bridging-Header.h +0 -6
- package/ios/DaroMAdBannerViewManager.swift +0 -91
- package/ios/DaroMNativeAdViewManager.swift +0 -291
- package/react-native-daro-m.podspec +0 -44
package/android/src/main/java/com/{darom → daro/reactnative}/impl/DaroMRewardedAdModuleImpl.kt
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
package com.
|
|
1
|
+
package com.daro.reactnative.impl
|
|
2
2
|
|
|
3
3
|
import android.app.Activity
|
|
4
|
-
import com.
|
|
5
|
-
import com.
|
|
6
|
-
import com.
|
|
4
|
+
import com.daro.reactnative.DaroMModule
|
|
5
|
+
import com.daro.reactnative.event.RewardedEvent
|
|
6
|
+
import com.daro.reactnative.util.AdInfoUtil
|
|
7
7
|
import com.facebook.react.bridge.Promise
|
|
8
8
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
9
9
|
import droom.daro.core.adunit.DaroRewardedAdUnit
|
|
@@ -23,39 +23,39 @@ internal class DaroMRewardedAdModuleImpl(
|
|
|
23
23
|
private val currentActivity: Activity?
|
|
24
24
|
get() = getCurrentActivity()
|
|
25
25
|
|
|
26
|
-
private val rewardedAdMap: MutableMap<
|
|
27
|
-
private val loaderMap: MutableMap<
|
|
26
|
+
private val rewardedAdMap: MutableMap<Int, DaroRewardedAd> = mutableMapOf()
|
|
27
|
+
private val loaderMap: MutableMap<Int, DaroRewardedAdLoader> = mutableMapOf()
|
|
28
28
|
|
|
29
|
-
override fun isRewardedAdReady(adUnitId: String, promise: Promise) {
|
|
30
|
-
promise.resolve(retrieveAd(
|
|
29
|
+
override fun isRewardedAdReady(requestId: Int, adUnitId: String, promise: Promise) {
|
|
30
|
+
promise.resolve(retrieveAd(requestId) != null)
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
override fun loadRewardedAd(adUnitId: String) {
|
|
34
|
-
retrieveLoader(adUnitId).load()
|
|
33
|
+
override fun loadRewardedAd(requestId: Int, adUnitId: String) {
|
|
34
|
+
retrieveLoader(requestId, adUnitId).load()
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
override fun showRewardedAd(adUnitId: String, customData: String?) {
|
|
37
|
+
override fun showRewardedAd(requestId: Int, adUnitId: String, customData: String?) {
|
|
38
38
|
currentActivity?.let { activity ->
|
|
39
|
-
retrieveAd(
|
|
39
|
+
retrieveAd(requestId)?.apply {
|
|
40
40
|
setListener(object : DaroRewardedAdListener {
|
|
41
41
|
override fun onAdImpression(adInfo: DaroAdInfo) {
|
|
42
42
|
sendNativeEvent(
|
|
43
43
|
event = RewardedEvent.ON_REWARDED_AD_IMPRESSION_RECORDED,
|
|
44
|
-
params = AdInfoUtil.getAdInfo(adUnitId, adInfo),
|
|
44
|
+
params = AdInfoUtil.getAdInfo(requestId, adUnitId, adInfo),
|
|
45
45
|
)
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
override fun onAdClicked(adInfo: DaroAdInfo) {
|
|
49
49
|
sendNativeEvent(
|
|
50
50
|
event = RewardedEvent.ON_REWARDED_AD_CLICKED_EVENT,
|
|
51
|
-
params = AdInfoUtil.getAdInfo(adUnitId, adInfo),
|
|
51
|
+
params = AdInfoUtil.getAdInfo(requestId, adUnitId, adInfo),
|
|
52
52
|
)
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
override fun onDismiss(adInfo: DaroAdInfo) {
|
|
56
56
|
sendNativeEvent(
|
|
57
57
|
event = RewardedEvent.ON_REWARDED_AD_HIDDEN_EVENT,
|
|
58
|
-
params = AdInfoUtil.getAdInfo(adUnitId, adInfo),
|
|
58
|
+
params = AdInfoUtil.getAdInfo(requestId, adUnitId, adInfo),
|
|
59
59
|
)
|
|
60
60
|
}
|
|
61
61
|
|
|
@@ -65,7 +65,7 @@ internal class DaroMRewardedAdModuleImpl(
|
|
|
65
65
|
) {
|
|
66
66
|
sendNativeEvent(
|
|
67
67
|
event = RewardedEvent.ON_REWARDED_AD_RECEIVED_REWARD_EVENT,
|
|
68
|
-
params = AdInfoUtil.getRewardInfo(adUnitId, rewardItem),
|
|
68
|
+
params = AdInfoUtil.getRewardInfo(requestId, adUnitId, rewardItem),
|
|
69
69
|
)
|
|
70
70
|
}
|
|
71
71
|
|
|
@@ -75,17 +75,17 @@ internal class DaroMRewardedAdModuleImpl(
|
|
|
75
75
|
) {
|
|
76
76
|
sendNativeEvent(
|
|
77
77
|
event = RewardedEvent.ON_REWARDED_AD_FAILED_TO_DISPLAY_EVENT,
|
|
78
|
-
params = AdInfoUtil.getAdDisplayFailedInfo(adUnitId, adInfo, error),
|
|
78
|
+
params = AdInfoUtil.getAdDisplayFailedInfo(requestId, adUnitId, adInfo, error),
|
|
79
79
|
)
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
override fun onShown(adInfo: DaroAdInfo) {
|
|
83
83
|
sendNativeEvent(
|
|
84
84
|
event = RewardedEvent.ON_REWARDED_AD_DISPLAYED_EVENT,
|
|
85
|
-
params = AdInfoUtil.getAdInfo(adUnitId, adInfo),
|
|
85
|
+
params = AdInfoUtil.getAdInfo(requestId, adUnitId, adInfo),
|
|
86
86
|
)
|
|
87
87
|
|
|
88
|
-
rewardedAdMap.remove(
|
|
88
|
+
rewardedAdMap.remove(requestId)
|
|
89
89
|
}
|
|
90
90
|
})
|
|
91
91
|
|
|
@@ -97,18 +97,18 @@ internal class DaroMRewardedAdModuleImpl(
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
private fun retrieveLoader(adUnitId: String): DaroRewardedAdLoader {
|
|
101
|
-
return loaderMap[
|
|
100
|
+
private fun retrieveLoader(requestId: Int, adUnitId: String): DaroRewardedAdLoader {
|
|
101
|
+
return loaderMap[requestId] ?: DaroRewardedAdLoader(
|
|
102
102
|
context,
|
|
103
103
|
DaroRewardedAdUnit(adUnitId, adUnitId)
|
|
104
104
|
).also {
|
|
105
|
-
loaderMap[
|
|
105
|
+
loaderMap[requestId] = it
|
|
106
106
|
it.setListener(
|
|
107
107
|
object : DaroRewardedAdLoaderListener {
|
|
108
108
|
override fun onAdLoadFail(err: DaroAdLoadError) {
|
|
109
109
|
sendNativeEvent(
|
|
110
110
|
event = RewardedEvent.ON_REWARDED_AD_LOAD_FAILED_EVENT,
|
|
111
|
-
params = AdInfoUtil.getAdLoadFailedInfo(adUnitId, err),
|
|
111
|
+
params = AdInfoUtil.getAdLoadFailedInfo(requestId, adUnitId, err),
|
|
112
112
|
)
|
|
113
113
|
}
|
|
114
114
|
|
|
@@ -116,11 +116,11 @@ internal class DaroMRewardedAdModuleImpl(
|
|
|
116
116
|
ad: DaroRewardedAd,
|
|
117
117
|
adInfo: DaroAdInfo,
|
|
118
118
|
) {
|
|
119
|
-
rewardedAdMap[
|
|
119
|
+
rewardedAdMap[requestId] = ad
|
|
120
120
|
|
|
121
121
|
sendNativeEvent(
|
|
122
122
|
event = RewardedEvent.ON_REWARDED_AD_LOADED_EVENT,
|
|
123
|
-
params = AdInfoUtil.getAdInfo(adUnitId, adInfo),
|
|
123
|
+
params = AdInfoUtil.getAdInfo(requestId, adUnitId, adInfo),
|
|
124
124
|
)
|
|
125
125
|
}
|
|
126
126
|
}
|
|
@@ -128,7 +128,7 @@ internal class DaroMRewardedAdModuleImpl(
|
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
private fun retrieveAd(
|
|
132
|
-
return rewardedAdMap[
|
|
131
|
+
private fun retrieveAd(requestId: Int): DaroRewardedAd? {
|
|
132
|
+
return rewardedAdMap[requestId]
|
|
133
133
|
}
|
|
134
134
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package com.
|
|
1
|
+
package com.daro.reactnative.util
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.Arguments
|
|
4
4
|
import com.facebook.react.bridge.WritableMap
|
|
@@ -16,6 +16,12 @@ internal object AdInfoUtil {
|
|
|
16
16
|
return adInfo
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
fun getAdInfo(requestId: Int, adUnitId: String, ad: DaroAdInfo): WritableMap {
|
|
20
|
+
val adInfo = getAdInfo(adUnitId, ad)
|
|
21
|
+
adInfo.putInt("requestId", requestId)
|
|
22
|
+
return adInfo
|
|
23
|
+
}
|
|
24
|
+
|
|
19
25
|
fun getAdLoadFailedInfo(adUnitId: String?, error: DaroAdLoadError?): WritableMap {
|
|
20
26
|
val errInfo = Arguments.createMap()
|
|
21
27
|
errInfo.putString("adUnitId", adUnitId)
|
|
@@ -31,6 +37,12 @@ internal object AdInfoUtil {
|
|
|
31
37
|
return errInfo
|
|
32
38
|
}
|
|
33
39
|
|
|
40
|
+
fun getAdLoadFailedInfo(requestId: Int, adUnitId: String?, error: DaroAdLoadError?): WritableMap {
|
|
41
|
+
val errInfo = getAdLoadFailedInfo(adUnitId, error)
|
|
42
|
+
errInfo.putInt("requestId", requestId)
|
|
43
|
+
return errInfo
|
|
44
|
+
}
|
|
45
|
+
|
|
34
46
|
fun getAdDisplayFailedInfo(adUnitId: String, ad: DaroAdInfo, error: DaroAdDisplayFailError): WritableMap {
|
|
35
47
|
val info = getAdInfo(adUnitId, ad)
|
|
36
48
|
|
|
@@ -39,6 +51,12 @@ internal object AdInfoUtil {
|
|
|
39
51
|
return info
|
|
40
52
|
}
|
|
41
53
|
|
|
54
|
+
fun getAdDisplayFailedInfo(requestId: Int, adUnitId: String, ad: DaroAdInfo, error: DaroAdDisplayFailError): WritableMap {
|
|
55
|
+
val info = getAdDisplayFailedInfo(adUnitId, ad, error)
|
|
56
|
+
info.putInt("requestId", requestId)
|
|
57
|
+
return info
|
|
58
|
+
}
|
|
59
|
+
|
|
42
60
|
fun getRewardInfo(adUnitId: String, reward: DaroRewardedAd.DaroRewardedItem): WritableMap {
|
|
43
61
|
val adInfo = Arguments.createMap()
|
|
44
62
|
|
|
@@ -48,4 +66,10 @@ internal object AdInfoUtil {
|
|
|
48
66
|
|
|
49
67
|
return adInfo
|
|
50
68
|
}
|
|
69
|
+
|
|
70
|
+
fun getRewardInfo(requestId: Int, adUnitId: String, reward: DaroRewardedAd.DaroRewardedItem): WritableMap {
|
|
71
|
+
val info = getRewardInfo(adUnitId, reward)
|
|
72
|
+
info.putInt("requestId", requestId)
|
|
73
|
+
return info
|
|
74
|
+
}
|
|
51
75
|
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
package com.daro.reactnative.util
|
|
2
|
+
|
|
3
|
+
import android.view.View
|
|
4
|
+
import com.daro.reactnative.event.AdViewEvent
|
|
5
|
+
import com.daro.reactnative.event.DaroMEvent
|
|
6
|
+
import com.facebook.react.bridge.ReactContext
|
|
7
|
+
import com.facebook.react.bridge.WritableMap
|
|
8
|
+
import com.facebook.react.modules.core.DeviceEventManagerModule
|
|
9
|
+
import com.facebook.react.uimanager.UIManagerHelper
|
|
10
|
+
import com.facebook.react.uimanager.events.Event
|
|
11
|
+
|
|
12
|
+
internal object EventEmitterUtil {
|
|
13
|
+
// React Native Bridge
|
|
14
|
+
fun sendReactNativeEvent(reactContext: ReactContext, event: DaroMEvent, params: WritableMap?) {
|
|
15
|
+
reactContext
|
|
16
|
+
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
|
|
17
|
+
.emit(event.value, params)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
fun View.sendNativeViewEvent(reactContext: ReactContext, event: AdViewEvent, params: WritableMap?) {
|
|
21
|
+
val eventDispatcher = UIManagerHelper.getEventDispatcherForReactTag(reactContext, id) ?: return
|
|
22
|
+
eventDispatcher.dispatchEvent(
|
|
23
|
+
AdViewDispatchedEvent(UIManagerHelper.getSurfaceId(reactContext), id, event, params)
|
|
24
|
+
)
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
private class AdViewDispatchedEvent(
|
|
29
|
+
surfaceId: Int,
|
|
30
|
+
viewId: Int,
|
|
31
|
+
private val event: AdViewEvent,
|
|
32
|
+
private val payload: WritableMap?,
|
|
33
|
+
) : Event<AdViewDispatchedEvent>(surfaceId, viewId) {
|
|
34
|
+
override fun getEventName() = event.value
|
|
35
|
+
|
|
36
|
+
override fun getEventData() = payload
|
|
37
|
+
}
|
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
package com.daro.reactnative.view
|
|
2
|
+
|
|
3
|
+
import android.annotation.SuppressLint
|
|
4
|
+
import android.graphics.Rect
|
|
5
|
+
import android.view.View
|
|
6
|
+
import android.view.ViewTreeObserver
|
|
7
|
+
import android.view.ViewGroup
|
|
8
|
+
import android.widget.FrameLayout
|
|
9
|
+
import androidx.core.view.children
|
|
10
|
+
import androidx.core.view.isVisible
|
|
11
|
+
import com.daro.reactnative.event.AdViewEvent
|
|
12
|
+
import com.daro.reactnative.util.AdInfoUtil
|
|
13
|
+
import com.daro.reactnative.util.EventEmitterUtil.sendNativeViewEvent
|
|
14
|
+
import com.facebook.react.bridge.ReactContext
|
|
15
|
+
import com.facebook.react.views.view.ReactViewGroup
|
|
16
|
+
import droom.daro.core.adunit.DaroBannerAdUnit
|
|
17
|
+
import droom.daro.core.model.DaroAdInfo
|
|
18
|
+
import droom.daro.core.model.DaroAdLoadError
|
|
19
|
+
import droom.daro.core.model.DaroBannerSize
|
|
20
|
+
import droom.daro.core.model.DaroViewAd
|
|
21
|
+
import droom.daro.view.DaroAdViewListener
|
|
22
|
+
import droom.daro.view.DaroBannerAdView
|
|
23
|
+
|
|
24
|
+
@SuppressLint("ViewConstructor")
|
|
25
|
+
class DaroMAdBannerViewContainer(val context: ReactContext) : ReactViewGroup(context),
|
|
26
|
+
DaroAdViewListener {
|
|
27
|
+
private companion object {
|
|
28
|
+
private const val MAX_PENDING_LOAD_RETRIES = 10
|
|
29
|
+
private const val PENDING_LOAD_RETRY_DELAY_MS = 100L
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
private var adView: DaroBannerAdView? = null
|
|
33
|
+
|
|
34
|
+
internal var adUnitId: String = ""
|
|
35
|
+
|
|
36
|
+
internal var adSize: DaroBannerSize? = null
|
|
37
|
+
|
|
38
|
+
internal var loadOnMount: Boolean = true
|
|
39
|
+
|
|
40
|
+
private var isAdVisible: Boolean = true
|
|
41
|
+
private var isAdPaused: Boolean = false
|
|
42
|
+
private var hasRequestedInitialLoad: Boolean = false
|
|
43
|
+
private var hasPendingLoad: Boolean = false
|
|
44
|
+
private var isPendingLoadRetryScheduled: Boolean = false
|
|
45
|
+
private var pendingLoadRetryCount: Int = 0
|
|
46
|
+
private var pendingLoadRetryRunnable: Runnable? = null
|
|
47
|
+
private var hasScheduledLoadedAdDrawActivation: Boolean = false
|
|
48
|
+
private var hasPulsedLoadedAdAttach: Boolean = false
|
|
49
|
+
private var activatedAdChild: View? = null
|
|
50
|
+
private var pulsedAdChild: View? = null
|
|
51
|
+
private val visibleRect = Rect()
|
|
52
|
+
|
|
53
|
+
fun loadAd() {
|
|
54
|
+
(adView ?: buildAdView())?.apply {
|
|
55
|
+
adView = this
|
|
56
|
+
|
|
57
|
+
if (this.parent == null) {
|
|
58
|
+
this.layoutParams = ViewGroup.LayoutParams(
|
|
59
|
+
ViewGroup.LayoutParams.MATCH_PARENT,
|
|
60
|
+
ViewGroup.LayoutParams.MATCH_PARENT,
|
|
61
|
+
)
|
|
62
|
+
this@DaroMAdBannerViewContainer.addView(this)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
layoutAdView()
|
|
66
|
+
if (!canLoadAd()) {
|
|
67
|
+
if (!hasPendingLoad) {
|
|
68
|
+
pendingLoadRetryCount = 0
|
|
69
|
+
}
|
|
70
|
+
hasPendingLoad = true
|
|
71
|
+
schedulePendingLoadRetry()
|
|
72
|
+
return
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
hasPendingLoad = false
|
|
76
|
+
pendingLoadRetryCount = 0
|
|
77
|
+
cancelPendingLoadRetry()
|
|
78
|
+
hasScheduledLoadedAdDrawActivation = false
|
|
79
|
+
hasPulsedLoadedAdAttach = false
|
|
80
|
+
activatedAdChild = null
|
|
81
|
+
pulsedAdChild = null
|
|
82
|
+
loadAd()
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
private fun buildAdView(): DaroBannerAdView? {
|
|
87
|
+
if (adUnitId.isEmpty() || adSize == null) {
|
|
88
|
+
return null
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return DaroBannerAdView(
|
|
92
|
+
context,
|
|
93
|
+
DaroBannerAdUnit(
|
|
94
|
+
key = adUnitId,
|
|
95
|
+
placement = adUnitId,
|
|
96
|
+
bannerSize = adSize!!,
|
|
97
|
+
)
|
|
98
|
+
).also { view ->
|
|
99
|
+
view.setListener(this)
|
|
100
|
+
view.setOnHierarchyChangeListener(object : ViewGroup.OnHierarchyChangeListener {
|
|
101
|
+
override fun onChildViewAdded(parent: View, child: View) {
|
|
102
|
+
if (activatedAdChild !== child) {
|
|
103
|
+
hasScheduledLoadedAdDrawActivation = false
|
|
104
|
+
hasPulsedLoadedAdAttach = false
|
|
105
|
+
activatedAdChild = null
|
|
106
|
+
pulsedAdChild = null
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
layoutAdView()
|
|
110
|
+
layoutLoadedAdChild(child)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
override fun onChildViewRemoved(parent: View, child: View) = Unit
|
|
114
|
+
})
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
fun destroy() {
|
|
119
|
+
cancelPendingLoadRetry()
|
|
120
|
+
hasPendingLoad = false
|
|
121
|
+
pendingLoadRetryCount = 0
|
|
122
|
+
hasScheduledLoadedAdDrawActivation = false
|
|
123
|
+
hasPulsedLoadedAdAttach = false
|
|
124
|
+
activatedAdChild = null
|
|
125
|
+
pulsedAdChild = null
|
|
126
|
+
adView?.setOnHierarchyChangeListener(null)
|
|
127
|
+
adView?.destroy()
|
|
128
|
+
adView = null
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
fun setAdVisibility(visible: Boolean) {
|
|
132
|
+
isAdVisible = visible
|
|
133
|
+
this.isVisible = visible
|
|
134
|
+
adView?.isVisible = visible
|
|
135
|
+
|
|
136
|
+
if (visible) {
|
|
137
|
+
resumeAd()
|
|
138
|
+
loadPendingAdIfReady()
|
|
139
|
+
} else {
|
|
140
|
+
cancelPendingLoadRetry()
|
|
141
|
+
pauseAd()
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
fun pauseAd() {
|
|
146
|
+
cancelPendingLoadRetry()
|
|
147
|
+
if (!isAdPaused) {
|
|
148
|
+
isAdPaused = true
|
|
149
|
+
adView?.pause()
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
fun resumeAd() {
|
|
154
|
+
if (isAdPaused) {
|
|
155
|
+
isAdPaused = false
|
|
156
|
+
adView?.resume()
|
|
157
|
+
}
|
|
158
|
+
loadPendingAdIfReady()
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
override fun onAdClicked(adInfo: DaroAdInfo) {
|
|
162
|
+
sendNativeViewEvent(
|
|
163
|
+
reactContext = context,
|
|
164
|
+
event = AdViewEvent.ON_AD_CLICKED,
|
|
165
|
+
params = AdInfoUtil.getAdInfo(adUnitId, adInfo)
|
|
166
|
+
)
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
override fun onAdImpression(adInfo: DaroAdInfo) {
|
|
170
|
+
sendNativeViewEvent(
|
|
171
|
+
reactContext = context,
|
|
172
|
+
event = AdViewEvent.ON_AD_IMPRESSION,
|
|
173
|
+
params = AdInfoUtil.getAdInfo(adUnitId, adInfo),
|
|
174
|
+
)
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
override fun onAdLoadFail(err: DaroAdLoadError) {
|
|
178
|
+
sendNativeViewEvent(
|
|
179
|
+
reactContext = context,
|
|
180
|
+
event = AdViewEvent.ON_AD_FAILED_TO_LOAD,
|
|
181
|
+
params = AdInfoUtil.getAdLoadFailedInfo(adUnitId, err),
|
|
182
|
+
)
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
override fun onAdLoadSuccess(
|
|
186
|
+
ad: DaroViewAd,
|
|
187
|
+
adInfo: DaroAdInfo,
|
|
188
|
+
) {
|
|
189
|
+
layoutLoadedAdView()
|
|
190
|
+
|
|
191
|
+
sendNativeViewEvent(
|
|
192
|
+
reactContext = context,
|
|
193
|
+
event = AdViewEvent.ON_AD_LOADED,
|
|
194
|
+
params = AdInfoUtil.getAdInfo(adUnitId, adInfo),
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
post {
|
|
198
|
+
layoutLoadedAdView()
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
override fun requestLayout() {
|
|
203
|
+
super.requestLayout()
|
|
204
|
+
|
|
205
|
+
// https://stackoverflow.com/a/39838774/5477988
|
|
206
|
+
// This is required to ensure ad refreshes render correctly in RN Android due to known issue
|
|
207
|
+
// where `getWidth()` and `getHeight()` return 0 on attach
|
|
208
|
+
post {
|
|
209
|
+
layoutAdView()
|
|
210
|
+
loadPendingAdIfReady()
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
override fun onAttachedToWindow() {
|
|
215
|
+
super.onAttachedToWindow()
|
|
216
|
+
loadPendingAdIfReady()
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
|
|
220
|
+
super.onSizeChanged(w, h, oldw, oldh)
|
|
221
|
+
layoutAdView()
|
|
222
|
+
loadPendingAdIfReady()
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
|
|
226
|
+
super.onLayout(changed, left, top, right, bottom)
|
|
227
|
+
layoutAdView()
|
|
228
|
+
loadPendingAdIfReady()
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
override fun onWindowVisibilityChanged(visibility: Int) {
|
|
232
|
+
super.onWindowVisibilityChanged(visibility)
|
|
233
|
+
|
|
234
|
+
if (visibility == View.VISIBLE) {
|
|
235
|
+
loadPendingAdIfReady()
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
private fun layoutAdView() {
|
|
240
|
+
if (width <= 0 || height <= 0) {
|
|
241
|
+
return
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
try {
|
|
245
|
+
adView?.measure(
|
|
246
|
+
MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
|
|
247
|
+
MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
|
|
248
|
+
)
|
|
249
|
+
|
|
250
|
+
adView?.layout(0, 0, width, height)
|
|
251
|
+
} catch (_: Exception) {
|
|
252
|
+
// Ignore
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
private fun layoutLoadedAdView() {
|
|
257
|
+
layoutAdView()
|
|
258
|
+
adView?.children?.firstOrNull()?.let { layoutLoadedAdChild(it) }
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
private fun layoutLoadedAdChild(child: View) {
|
|
262
|
+
layoutLoadedAdChild(child, scheduleDrawActivation = true)
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
private fun layoutLoadedAdChild(child: View, scheduleDrawActivation: Boolean) {
|
|
266
|
+
if (width <= 0 || height <= 0) {
|
|
267
|
+
return
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
ensureMatchParentLayoutParams(child)
|
|
271
|
+
|
|
272
|
+
child.measure(
|
|
273
|
+
MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
|
|
274
|
+
MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
|
|
275
|
+
)
|
|
276
|
+
|
|
277
|
+
child.layout(0, 0, width, height)
|
|
278
|
+
child.requestLayout()
|
|
279
|
+
adView?.requestLayout()
|
|
280
|
+
|
|
281
|
+
if (scheduleDrawActivation) {
|
|
282
|
+
scheduleLoadedAdDrawActivation(child)
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
private fun scheduleLoadedAdDrawActivation(child: View) {
|
|
287
|
+
if (hasScheduledLoadedAdDrawActivation && activatedAdChild === child) {
|
|
288
|
+
return
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
hasScheduledLoadedAdDrawActivation = true
|
|
292
|
+
activatedAdChild = child
|
|
293
|
+
child.viewTreeObserver.addOnPreDrawListener(object : ViewTreeObserver.OnPreDrawListener {
|
|
294
|
+
override fun onPreDraw(): Boolean {
|
|
295
|
+
if (child.viewTreeObserver.isAlive) {
|
|
296
|
+
child.viewTreeObserver.removeOnPreDrawListener(this)
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
layoutLoadedAdChild(child)
|
|
300
|
+
pulseLoadedAdAttachIfNeeded(child)
|
|
301
|
+
adView?.requestLayout()
|
|
302
|
+
adView?.invalidate()
|
|
303
|
+
child.requestLayout()
|
|
304
|
+
child.invalidate()
|
|
305
|
+
return true
|
|
306
|
+
}
|
|
307
|
+
})
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
private fun pulseLoadedAdAttachIfNeeded(child: View) {
|
|
311
|
+
if ((hasPulsedLoadedAdAttach && pulsedAdChild === child) || !isStableVisibleAdChild(child)) {
|
|
312
|
+
return
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
hasPulsedLoadedAdAttach = true
|
|
316
|
+
pulsedAdChild = child
|
|
317
|
+
post {
|
|
318
|
+
val parent = child.parent as? ViewGroup
|
|
319
|
+
val currentAdView = adView
|
|
320
|
+
if (parent == null || currentAdView == null || parent !== currentAdView) {
|
|
321
|
+
return@post
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
parent.removeView(child)
|
|
325
|
+
ensureMatchParentLayoutParams(child)
|
|
326
|
+
currentAdView.addView(child)
|
|
327
|
+
layoutAdView()
|
|
328
|
+
layoutLoadedAdChild(child, scheduleDrawActivation = false)
|
|
329
|
+
child.requestLayout()
|
|
330
|
+
child.invalidate()
|
|
331
|
+
currentAdView.requestLayout()
|
|
332
|
+
currentAdView.invalidate()
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
private fun isStableVisibleAdChild(child: View): Boolean {
|
|
337
|
+
val hasGlobalVisibleRect = child.getGlobalVisibleRect(visibleRect)
|
|
338
|
+
return width > 0 &&
|
|
339
|
+
height > 0 &&
|
|
340
|
+
child.width > 0 &&
|
|
341
|
+
child.height > 0 &&
|
|
342
|
+
child.isAttachedToWindow &&
|
|
343
|
+
child.isShown &&
|
|
344
|
+
child.windowVisibility == View.VISIBLE &&
|
|
345
|
+
hasGlobalVisibleRect &&
|
|
346
|
+
visibleRect.width() > 0 &&
|
|
347
|
+
visibleRect.height() > 0
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
private fun ensureMatchParentLayoutParams(child: View) {
|
|
351
|
+
val layoutParams = child.layoutParams
|
|
352
|
+
if (layoutParams == null) {
|
|
353
|
+
child.layoutParams = FrameLayout.LayoutParams(
|
|
354
|
+
ViewGroup.LayoutParams.MATCH_PARENT,
|
|
355
|
+
ViewGroup.LayoutParams.MATCH_PARENT,
|
|
356
|
+
)
|
|
357
|
+
return
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT
|
|
361
|
+
layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT
|
|
362
|
+
child.layoutParams = layoutParams
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
private fun loadPendingAdIfReady() {
|
|
366
|
+
if (!hasPendingLoad) {
|
|
367
|
+
return
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
if (canLoadAd()) {
|
|
371
|
+
loadAd()
|
|
372
|
+
} else {
|
|
373
|
+
schedulePendingLoadRetry()
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
private fun schedulePendingLoadRetry() {
|
|
378
|
+
if (isPendingLoadRetryScheduled || pendingLoadRetryCount >= MAX_PENDING_LOAD_RETRIES) {
|
|
379
|
+
return
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
isPendingLoadRetryScheduled = true
|
|
383
|
+
pendingLoadRetryCount += 1
|
|
384
|
+
val retryRunnable = Runnable {
|
|
385
|
+
pendingLoadRetryRunnable = null
|
|
386
|
+
isPendingLoadRetryScheduled = false
|
|
387
|
+
loadPendingAdIfReady()
|
|
388
|
+
}
|
|
389
|
+
pendingLoadRetryRunnable = retryRunnable
|
|
390
|
+
postDelayed(retryRunnable, PENDING_LOAD_RETRY_DELAY_MS)
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
private fun cancelPendingLoadRetry() {
|
|
394
|
+
pendingLoadRetryRunnable?.let { removeCallbacks(it) }
|
|
395
|
+
pendingLoadRetryRunnable = null
|
|
396
|
+
isPendingLoadRetryScheduled = false
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
private fun canLoadAd(): Boolean {
|
|
400
|
+
return isAdVisible &&
|
|
401
|
+
isAttachedToWindow &&
|
|
402
|
+
width > 0 &&
|
|
403
|
+
height > 0 &&
|
|
404
|
+
windowVisibility == View.VISIBLE
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
fun onSetProps() {
|
|
408
|
+
if (loadOnMount && !hasRequestedInitialLoad && canBuildAdView()) {
|
|
409
|
+
hasRequestedInitialLoad = true
|
|
410
|
+
loadAd()
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
private fun canBuildAdView(): Boolean {
|
|
415
|
+
return adUnitId.isNotEmpty() && adSize != null
|
|
416
|
+
}
|
|
417
|
+
}
|