react-native-applovin-max 8.2.0 → 9.1.0

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.
Files changed (196) hide show
  1. package/android/build.gradle +14 -3
  2. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXAdView.java +34 -27
  3. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXAdViewManagerImpl.java +110 -0
  4. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXAdViewUiComponent.java +15 -13
  5. package/android/src/main/java/com/applovin/reactnative/{AppLovinMAXModule.java → AppLovinMAXModuleImpl.java} +108 -168
  6. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXNativeAdView.java +84 -56
  7. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXNativeAdViewManagerImpl.java +101 -0
  8. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXPackage.java +44 -11
  9. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXUtils.java +56 -0
  10. package/android/src/newarch/com/applovin/reactnative/AppLovinMAXAdViewManager.java +151 -0
  11. package/android/src/newarch/com/applovin/reactnative/AppLovinMAXModule.java +453 -0
  12. package/android/src/newarch/com/applovin/reactnative/AppLovinMAXNativeAdViewManager.java +130 -0
  13. package/android/src/oldarch/com/applovin/reactnative/AppLovinMAXAdViewManager.java +128 -0
  14. package/android/src/oldarch/com/applovin/reactnative/AppLovinMAXModule.java +453 -0
  15. package/android/src/oldarch/com/applovin/reactnative/AppLovinMAXNativeAdViewManager.java +93 -0
  16. package/ios/AppLovinMAX.h +8 -3
  17. package/ios/{AppLovinMAX.m → AppLovinMAX.mm} +67 -53
  18. package/ios/AppLovinMAXAdView.h +7 -2
  19. package/ios/AppLovinMAXAdView.mm +747 -0
  20. package/ios/{AppLovinMAXAdViewManager.m → AppLovinMAXAdViewManager.mm} +3 -2
  21. package/ios/{AppLovinMAXAdViewUIComponent.m → AppLovinMAXAdViewUIComponent.mm} +2 -1
  22. package/ios/AppLovinMAXNativeAdView.h +15 -4
  23. package/ios/AppLovinMAXNativeAdView.mm +745 -0
  24. package/ios/AppLovinMAXNativeAdViewManager.mm +116 -0
  25. package/lib/commonjs/AdView.js +102 -142
  26. package/lib/commonjs/AdView.js.map +1 -1
  27. package/lib/commonjs/AppLovinMAX.js +49 -34
  28. package/lib/commonjs/AppLovinMAX.js.map +1 -1
  29. package/lib/commonjs/AppOpenAd.js +8 -10
  30. package/lib/commonjs/AppOpenAd.js.map +1 -1
  31. package/lib/commonjs/BannerAd.js +19 -21
  32. package/lib/commonjs/BannerAd.js.map +1 -1
  33. package/lib/commonjs/ErrorCode.js +27 -36
  34. package/lib/commonjs/ErrorCode.js.map +1 -1
  35. package/lib/commonjs/EventEmitter.js +24 -5
  36. package/lib/commonjs/EventEmitter.js.map +1 -1
  37. package/lib/commonjs/InterstitialAd.js +8 -10
  38. package/lib/commonjs/InterstitialAd.js.map +1 -1
  39. package/lib/commonjs/MRecAd.js +14 -16
  40. package/lib/commonjs/MRecAd.js.map +1 -1
  41. package/lib/commonjs/Privacy.js +3 -5
  42. package/lib/commonjs/Privacy.js.map +1 -1
  43. package/lib/commonjs/RewardedAd.js +8 -10
  44. package/lib/commonjs/RewardedAd.js.map +1 -1
  45. package/lib/commonjs/Utils.js +43 -0
  46. package/lib/commonjs/Utils.js.map +1 -0
  47. package/lib/commonjs/nativeAd/NativeAdView.js +84 -50
  48. package/lib/commonjs/nativeAd/NativeAdView.js.map +1 -1
  49. package/lib/commonjs/nativeAd/NativeAdViewComponents.js +129 -82
  50. package/lib/commonjs/nativeAd/NativeAdViewComponents.js.map +1 -1
  51. package/lib/commonjs/nativeAd/NativeAdViewProvider.js +67 -8
  52. package/lib/commonjs/nativeAd/NativeAdViewProvider.js.map +1 -1
  53. package/lib/commonjs/nativeAd/img/blank_icon.png +0 -0
  54. package/lib/commonjs/specs/AppLovinMAXAdViewNativeComponent.js +41 -0
  55. package/lib/commonjs/specs/AppLovinMAXAdViewNativeComponent.js.map +1 -0
  56. package/lib/commonjs/specs/AppLovinMAXNativeAdViewNativeComponent.js +37 -0
  57. package/lib/commonjs/specs/AppLovinMAXNativeAdViewNativeComponent.js.map +1 -0
  58. package/lib/commonjs/specs/NativeAppLovinMAXModule.js +16 -0
  59. package/lib/commonjs/specs/NativeAppLovinMAXModule.js.map +1 -0
  60. package/lib/commonjs/types/AdInfo.js +13 -16
  61. package/lib/commonjs/types/AdInfo.js.map +1 -1
  62. package/lib/module/AdView.js +98 -139
  63. package/lib/module/AdView.js.map +1 -1
  64. package/lib/module/AppLovinMAX.js +47 -32
  65. package/lib/module/AppLovinMAX.js.map +1 -1
  66. package/lib/module/AppOpenAd.js +1 -4
  67. package/lib/module/AppOpenAd.js.map +1 -1
  68. package/lib/module/BannerAd.js +1 -4
  69. package/lib/module/BannerAd.js.map +1 -1
  70. package/lib/module/ErrorCode.js +25 -35
  71. package/lib/module/ErrorCode.js.map +1 -1
  72. package/lib/module/EventEmitter.js +24 -5
  73. package/lib/module/EventEmitter.js.map +1 -1
  74. package/lib/module/InterstitialAd.js +2 -5
  75. package/lib/module/InterstitialAd.js.map +1 -1
  76. package/lib/module/MRecAd.js +1 -4
  77. package/lib/module/MRecAd.js.map +1 -1
  78. package/lib/module/Privacy.js +1 -4
  79. package/lib/module/Privacy.js.map +1 -1
  80. package/lib/module/RewardedAd.js +2 -5
  81. package/lib/module/RewardedAd.js.map +1 -1
  82. package/lib/module/Utils.js +35 -0
  83. package/lib/module/Utils.js.map +1 -0
  84. package/lib/module/nativeAd/NativeAdView.js +83 -47
  85. package/lib/module/nativeAd/NativeAdView.js.map +1 -1
  86. package/lib/module/nativeAd/NativeAdViewComponents.js +134 -83
  87. package/lib/module/nativeAd/NativeAdViewComponents.js.map +1 -1
  88. package/lib/module/nativeAd/NativeAdViewProvider.js +69 -9
  89. package/lib/module/nativeAd/NativeAdViewProvider.js.map +1 -1
  90. package/lib/module/nativeAd/img/blank_icon.png +0 -0
  91. package/lib/module/specs/AppLovinMAXAdViewNativeComponent.js +35 -0
  92. package/lib/module/specs/AppLovinMAXAdViewNativeComponent.js.map +1 -0
  93. package/lib/module/specs/AppLovinMAXNativeAdViewNativeComponent.js +31 -0
  94. package/lib/module/specs/AppLovinMAXNativeAdViewNativeComponent.js.map +1 -0
  95. package/lib/module/specs/NativeAppLovinMAXModule.js +12 -0
  96. package/lib/module/specs/NativeAppLovinMAXModule.js.map +1 -0
  97. package/lib/module/types/AdInfo.js +13 -16
  98. package/lib/module/types/AdInfo.js.map +1 -1
  99. package/lib/typescript/src/AdView.d.ts +38 -32
  100. package/lib/typescript/src/AdView.d.ts.map +1 -1
  101. package/lib/typescript/src/AppLovinMAX.d.ts +22 -21
  102. package/lib/typescript/src/AppLovinMAX.d.ts.map +1 -1
  103. package/lib/typescript/src/AppOpenAd.d.ts.map +1 -1
  104. package/lib/typescript/src/BannerAd.d.ts.map +1 -1
  105. package/lib/typescript/src/ErrorCode.d.ts +24 -31
  106. package/lib/typescript/src/ErrorCode.d.ts.map +1 -1
  107. package/lib/typescript/src/EventEmitter.d.ts +16 -0
  108. package/lib/typescript/src/EventEmitter.d.ts.map +1 -1
  109. package/lib/typescript/src/InterstitialAd.d.ts.map +1 -1
  110. package/lib/typescript/src/MRecAd.d.ts.map +1 -1
  111. package/lib/typescript/src/Privacy.d.ts.map +1 -1
  112. package/lib/typescript/src/RewardedAd.d.ts.map +1 -1
  113. package/lib/typescript/src/Utils.d.ts +31 -0
  114. package/lib/typescript/src/Utils.d.ts.map +1 -0
  115. package/lib/typescript/src/nativeAd/NativeAdView.d.ts +15 -7
  116. package/lib/typescript/src/nativeAd/NativeAdView.d.ts.map +1 -1
  117. package/lib/typescript/src/nativeAd/NativeAdViewComponents.d.ts +65 -1
  118. package/lib/typescript/src/nativeAd/NativeAdViewComponents.d.ts.map +1 -1
  119. package/lib/typescript/src/nativeAd/NativeAdViewProvider.d.ts +31 -5
  120. package/lib/typescript/src/nativeAd/NativeAdViewProvider.d.ts.map +1 -1
  121. package/lib/typescript/src/specs/AppLovinMAXAdViewNativeComponent.d.ts +130 -0
  122. package/lib/typescript/src/specs/AppLovinMAXAdViewNativeComponent.d.ts.map +1 -0
  123. package/lib/typescript/src/specs/AppLovinMAXNativeAdViewNativeComponent.d.ts +131 -0
  124. package/lib/typescript/src/specs/AppLovinMAXNativeAdViewNativeComponent.d.ts.map +1 -0
  125. package/lib/typescript/src/specs/NativeAppLovinMAXModule.d.ts +142 -0
  126. package/lib/typescript/src/specs/NativeAppLovinMAXModule.d.ts.map +1 -0
  127. package/lib/typescript/src/types/AdEvent.d.ts +10 -4
  128. package/lib/typescript/src/types/AdEvent.d.ts.map +1 -1
  129. package/lib/typescript/src/types/AdInfo.d.ts +79 -86
  130. package/lib/typescript/src/types/AdInfo.d.ts.map +1 -1
  131. package/lib/typescript/src/types/AdProps.d.ts +16 -17
  132. package/lib/typescript/src/types/AdProps.d.ts.map +1 -1
  133. package/lib/typescript/src/types/AdViewProps.d.ts +28 -29
  134. package/lib/typescript/src/types/AdViewProps.d.ts.map +1 -1
  135. package/lib/typescript/src/types/AppLovinMAX.d.ts +50 -53
  136. package/lib/typescript/src/types/AppLovinMAX.d.ts.map +1 -1
  137. package/lib/typescript/src/types/BannerAd.d.ts +22 -17
  138. package/lib/typescript/src/types/BannerAd.d.ts.map +1 -1
  139. package/lib/typescript/src/types/CMPError.d.ts +7 -4
  140. package/lib/typescript/src/types/CMPError.d.ts.map +1 -1
  141. package/lib/typescript/src/types/Configuration.d.ts +12 -14
  142. package/lib/typescript/src/types/Configuration.d.ts.map +1 -1
  143. package/lib/typescript/src/types/FullscreenAd.d.ts +39 -46
  144. package/lib/typescript/src/types/FullscreenAd.d.ts.map +1 -1
  145. package/lib/typescript/src/types/MRecAd.d.ts +7 -3
  146. package/lib/typescript/src/types/MRecAd.d.ts.map +1 -1
  147. package/lib/typescript/src/types/NativeAd.d.ts +15 -10
  148. package/lib/typescript/src/types/NativeAd.d.ts.map +1 -1
  149. package/lib/typescript/src/types/NativeAdViewProps.d.ts +4 -3
  150. package/lib/typescript/src/types/NativeAdViewProps.d.ts.map +1 -1
  151. package/lib/typescript/src/types/Privacy.d.ts +13 -6
  152. package/lib/typescript/src/types/Privacy.d.ts.map +1 -1
  153. package/lib/typescript/src/types/RewardedAd.d.ts +7 -5
  154. package/lib/typescript/src/types/RewardedAd.d.ts.map +1 -1
  155. package/lib/typescript/src/types/ViewAd.d.ts +46 -50
  156. package/lib/typescript/src/types/ViewAd.d.ts.map +1 -1
  157. package/package.json +9 -1
  158. package/react-native-applovin-max.podspec +3 -3
  159. package/src/AdView.tsx +100 -183
  160. package/src/AppLovinMAX.ts +42 -33
  161. package/src/AppOpenAd.ts +1 -3
  162. package/src/BannerAd.ts +1 -3
  163. package/src/ErrorCode.ts +25 -34
  164. package/src/EventEmitter.ts +22 -5
  165. package/src/InterstitialAd.ts +2 -4
  166. package/src/MRecAd.ts +1 -3
  167. package/src/Privacy.ts +1 -3
  168. package/src/RewardedAd.ts +2 -4
  169. package/src/Utils.ts +45 -0
  170. package/src/nativeAd/NativeAdView.tsx +83 -73
  171. package/src/nativeAd/NativeAdViewComponents.tsx +120 -89
  172. package/src/nativeAd/NativeAdViewProvider.tsx +60 -12
  173. package/src/nativeAd/img/blank_icon.png +0 -0
  174. package/src/specs/AppLovinMAXAdViewNativeComponent.ts +157 -0
  175. package/src/specs/AppLovinMAXNativeAdViewNativeComponent.ts +153 -0
  176. package/src/specs/NativeAppLovinMAXModule.ts +228 -0
  177. package/src/types/AdEvent.ts +10 -4
  178. package/src/types/AdInfo.ts +79 -86
  179. package/src/types/AdProps.ts +16 -17
  180. package/src/types/AdViewProps.ts +28 -29
  181. package/src/types/AppLovinMAX.ts +50 -53
  182. package/src/types/BannerAd.ts +22 -17
  183. package/src/types/CMPError.ts +7 -4
  184. package/src/types/Configuration.ts +12 -14
  185. package/src/types/FullscreenAd.ts +39 -46
  186. package/src/types/MRecAd.ts +7 -3
  187. package/src/types/NativeAd.ts +16 -10
  188. package/src/types/NativeAdViewProps.ts +4 -3
  189. package/src/types/Privacy.ts +13 -6
  190. package/src/types/RewardedAd.ts +7 -5
  191. package/src/types/ViewAd.ts +46 -50
  192. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXAdViewManager.java +0 -149
  193. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXNativeAdViewManager.java +0 -163
  194. package/ios/AppLovinMAXAdView.m +0 -325
  195. package/ios/AppLovinMAXNativeAdView.m +0 -432
  196. package/ios/AppLovinMAXNativeAdViewManager.m +0 -64
@@ -19,8 +19,9 @@ import com.applovin.mediation.nativeAds.MaxNativeAdLoader;
19
19
  import com.applovin.mediation.nativeAds.MaxNativeAdView;
20
20
  import com.facebook.react.bridge.Arguments;
21
21
  import com.facebook.react.bridge.ReactContext;
22
- import com.facebook.react.bridge.ReadableMap;
22
+ import com.facebook.react.bridge.ReadableArray;
23
23
  import com.facebook.react.bridge.WritableMap;
24
+ import com.facebook.react.uimanager.UIManagerHelper;
24
25
  import com.facebook.react.uimanager.events.RCTEventEmitter;
25
26
  import com.facebook.react.views.view.ReactViewGroup;
26
27
 
@@ -44,6 +45,7 @@ public class AppLovinMAXNativeAdView
44
45
  private static final int ADVERTISER_VIEW_TAG = 8;
45
46
 
46
47
  private final ReactContext reactContext;
48
+ private final int surfaceId;
47
49
  @Nullable
48
50
  private MaxNativeAdLoader adLoader;
49
51
  @Nullable
@@ -76,6 +78,7 @@ public class AppLovinMAXNativeAdView
76
78
  {
77
79
  super( context );
78
80
  reactContext = (ReactContext) context;
81
+ surfaceId = UIManagerHelper.getSurfaceId( context );
79
82
  }
80
83
 
81
84
  public void destroy()
@@ -108,37 +111,44 @@ public class AppLovinMAXNativeAdView
108
111
  customData = value;
109
112
  }
110
113
 
111
- public void setExtraParameters(@Nullable final ReadableMap readableMap)
114
+ public void setExtraParameters(@Nullable final ReadableArray extraParameters)
112
115
  {
113
- if ( readableMap != null )
114
- {
115
- extraParameters = readableMap.toHashMap();
116
- }
116
+ this.extraParameters = AppLovinMAXUtils.convertReadbleArrayToHashMap( extraParameters );
117
117
  }
118
118
 
119
- public void setLocalExtraParameters(@Nullable final ReadableMap readableMap)
119
+ public void setLocalExtraParameters(@Nullable final ReadableArray localExtraParameters)
120
120
  {
121
- if ( readableMap != null )
121
+ Map<String, Object> localExtraParametersMap = AppLovinMAXUtils.convertReadbleArrayToHashMap( localExtraParameters );
122
+
123
+ if ( localExtraParametersMap == null ) return;
124
+
125
+ // Accumulate the result since this function may be called multiple times
126
+ // to handle different value types, including string, number, boolean, and null.
127
+ if ( this.localExtraParameters != null )
128
+ {
129
+ this.localExtraParameters.putAll( localExtraParametersMap );
130
+ }
131
+ else
122
132
  {
123
- localExtraParameters = readableMap.toHashMap();
133
+ this.localExtraParameters = localExtraParametersMap;
124
134
  }
125
135
  }
126
136
 
127
137
  public void loadAd()
128
138
  {
129
- if ( AppLovinMAXModule.getInstance().getSdk() == null )
139
+ if ( AppLovinMAXModuleImpl.getInstance().getSdk() == null )
130
140
  {
131
- AppLovinMAXModule.logUninitializedAccessError( "AppLovinMAXNativeAdView.loadAd" );
141
+ AppLovinMAXModuleImpl.logUninitializedAccessError( "AppLovinMAXNativeAdView.loadAd" );
132
142
  return;
133
143
  }
134
144
 
135
145
  if ( isLoading.compareAndSet( false, true ) )
136
146
  {
137
- AppLovinMAXModule.d( "Loading a native ad for Ad Unit ID: " + adUnitId + "..." );
147
+ AppLovinMAXModuleImpl.d( "Loading a native ad for Ad Unit ID: " + adUnitId + "..." );
138
148
 
139
149
  if ( adLoader == null || !adUnitId.equals( adLoader.getAdUnitId() ) )
140
150
  {
141
- adLoader = new MaxNativeAdLoader( adUnitId, AppLovinMAXModule.getInstance().getSdk(), reactContext );
151
+ adLoader = new MaxNativeAdLoader( adUnitId, AppLovinMAXModuleImpl.getInstance().getSdk(), reactContext );
142
152
  adLoader.setRevenueListener( this );
143
153
  adLoader.setNativeAdListener( new NativeAdListener() );
144
154
  }
@@ -166,8 +176,47 @@ public class AppLovinMAXNativeAdView
166
176
  }
167
177
  else
168
178
  {
169
- AppLovinMAXModule.e( "Ignoring request to load native ad for Ad Unit ID " + adUnitId + ", another ad load in progress" );
179
+ AppLovinMAXModuleImpl.e( "Ignoring request to load native ad for Ad Unit ID " + adUnitId + ", another ad load in progress" );
180
+ }
181
+ }
182
+
183
+ public void updateAssetView(final int assetViewTag, final String assetViewName)
184
+ {
185
+ if ( "TitleView".equals( assetViewName ) )
186
+ {
187
+ setTitleView( assetViewTag );
188
+ }
189
+ else if ( "AdvertiserView".equals( assetViewName ) )
190
+ {
191
+ setAdvertiserView( assetViewTag );
192
+ }
193
+ else if ( "BodyView".equals( assetViewName ) )
194
+ {
195
+ setBodyView( assetViewTag );
196
+ }
197
+ else if ( "CallToActionView".equals( assetViewName ) )
198
+ {
199
+ setCallToActionView( assetViewTag );
200
+ }
201
+ else if ( "IconView".equals( assetViewName ) )
202
+ {
203
+ setIconView( assetViewTag );
170
204
  }
205
+ else if ( "OptionsView".equals( assetViewName ) )
206
+ {
207
+ setOptionsView( assetViewTag );
208
+ }
209
+ else if ( "MediaView".equals( assetViewName ) )
210
+ {
211
+ setMediaView( assetViewTag );
212
+ }
213
+ }
214
+
215
+ public void renderNativeAd()
216
+ {
217
+ // Renders the ad only after the last asset view is set
218
+ renderNativeAdHandler.removeCallbacksAndMessages( null );
219
+ renderNativeAdHandler.postDelayed( renderNativeAdTask, 50 );
171
220
  }
172
221
 
173
222
  /// Ad Loader Listener
@@ -178,16 +227,16 @@ public class AppLovinMAXNativeAdView
178
227
  @Override
179
228
  public void onNativeAdLoaded(@Nullable final MaxNativeAdView nativeAdView, @NonNull final MaxAd ad)
180
229
  {
181
- AppLovinMAXModule.d( "Native ad loaded: " + ad );
230
+ AppLovinMAXModuleImpl.d( "Native ad loaded: " + ad );
182
231
 
183
232
  // Log a warning if it is a template native ad returned - as our plugin will be responsible for re-rendering the native ad's assets
184
233
  if ( nativeAdView != null )
185
234
  {
186
235
  isLoading.set( false );
187
236
 
188
- AppLovinMAXModule.e( "Native ad is of template type, failing ad load..." );
237
+ AppLovinMAXModuleImpl.e( "Native ad is of template type, failing ad load..." );
189
238
 
190
- WritableMap loadFailedInfo = AppLovinMAXModule.getInstance().getAdLoadFailedInfo( adUnitId, null );
239
+ WritableMap loadFailedInfo = AppLovinMAXModuleImpl.getInstance().getAdLoadFailedInfo( adUnitId, null );
191
240
  reactContext.getJSModule( RCTEventEmitter.class ).receiveEvent( getId(), AppLovinMAXAdEvents.ON_AD_LOAD_FAILED_EVENT, loadFailedInfo );
192
241
 
193
242
  return;
@@ -208,17 +257,17 @@ public class AppLovinMAXNativeAdView
208
257
  {
209
258
  isLoading.set( false );
210
259
 
211
- AppLovinMAXModule.e( "Failed to load native ad for Ad Unit ID " + adUnitId + " with error: " + error );
260
+ AppLovinMAXModuleImpl.e( "Failed to load native ad for Ad Unit ID " + adUnitId + " with error: " + error );
212
261
 
213
- WritableMap loadFailedInfo = AppLovinMAXModule.getInstance().getAdLoadFailedInfo( adUnitId, error );
214
- reactContext.getJSModule( RCTEventEmitter.class ).receiveEvent( getId(), AppLovinMAXAdEvents.ON_AD_LOAD_FAILED_EVENT, loadFailedInfo );
262
+ WritableMap loadFailedInfo = AppLovinMAXModuleImpl.getInstance().getAdLoadFailedInfo( adUnitId, error );
263
+ AppLovinMAXModuleImpl.getInstance().sendReactNativeViewEvent( surfaceId, getId(), AppLovinMAXAdEvents.ON_AD_LOAD_FAILED_EVENT, loadFailedInfo );
215
264
  }
216
265
 
217
266
  @Override
218
267
  public void onNativeAdClicked(@NonNull final MaxAd ad)
219
268
  {
220
- WritableMap adInfo = AppLovinMAXModule.getInstance().getAdInfo( ad );
221
- reactContext.getJSModule( RCTEventEmitter.class ).receiveEvent( getId(), AppLovinMAXAdEvents.ON_AD_CLICKED_EVENT, adInfo );
269
+ WritableMap adInfo = AppLovinMAXModuleImpl.getInstance().getAdInfo( ad );
270
+ AppLovinMAXModuleImpl.getInstance().sendReactNativeViewEvent( surfaceId, getId(), AppLovinMAXAdEvents.ON_AD_CLICKED_EVENT, adInfo );
222
271
  }
223
272
  }
224
273
 
@@ -227,8 +276,8 @@ public class AppLovinMAXNativeAdView
227
276
  @Override
228
277
  public void onAdRevenuePaid(@NonNull final MaxAd ad)
229
278
  {
230
- WritableMap adInfo = AppLovinMAXModule.getInstance().getAdInfo( ad );
231
- reactContext.getJSModule( RCTEventEmitter.class ).receiveEvent( getId(), AppLovinMAXAdEvents.ON_AD_REVENUE_PAID_EVENT, adInfo );
279
+ WritableMap adInfo = AppLovinMAXModuleImpl.getInstance().getAdInfo( ad );
280
+ AppLovinMAXModuleImpl.getInstance().sendReactNativeViewEvent( surfaceId, getId(), AppLovinMAXAdEvents.ON_AD_REVENUE_PAID_EVENT, adInfo );
232
281
  }
233
282
 
234
283
  /// Native Ad Component Methods
@@ -240,7 +289,7 @@ public class AppLovinMAXNativeAdView
240
289
  View view = findViewById( tag );
241
290
  if ( view == null )
242
291
  {
243
- AppLovinMAXModule.e( "Cannot find a title view with tag \"" + tag + "\" for " + adUnitId );
292
+ AppLovinMAXModuleImpl.e( "Cannot find a title view with tag \"" + tag + "\" for " + adUnitId );
244
293
  return;
245
294
  }
246
295
 
@@ -256,7 +305,7 @@ public class AppLovinMAXNativeAdView
256
305
  View view = findViewById( tag );
257
306
  if ( view == null )
258
307
  {
259
- AppLovinMAXModule.e( "Cannot find an advertiser view with tag \"" + tag + "\" for " + adUnitId );
308
+ AppLovinMAXModuleImpl.e( "Cannot find an advertiser view with tag \"" + tag + "\" for " + adUnitId );
260
309
  return;
261
310
  }
262
311
 
@@ -272,7 +321,7 @@ public class AppLovinMAXNativeAdView
272
321
  View view = findViewById( tag );
273
322
  if ( view == null )
274
323
  {
275
- AppLovinMAXModule.e( "Cannot find a body view with tag \"" + tag + "\" for " + adUnitId );
324
+ AppLovinMAXModuleImpl.e( "Cannot find a body view with tag \"" + tag + "\" for " + adUnitId );
276
325
  return;
277
326
  }
278
327
 
@@ -288,7 +337,7 @@ public class AppLovinMAXNativeAdView
288
337
  View view = findViewById( tag );
289
338
  if ( view == null )
290
339
  {
291
- AppLovinMAXModule.e( "Cannot find a callToAction view with tag \"" + tag + "\" for " + adUnitId );
340
+ AppLovinMAXModuleImpl.e( "Cannot find a callToAction view with tag \"" + tag + "\" for " + adUnitId );
292
341
  return;
293
342
  }
294
343
 
@@ -320,7 +369,7 @@ public class AppLovinMAXNativeAdView
320
369
  ImageView view = findViewById( tag );
321
370
  if ( view == null )
322
371
  {
323
- AppLovinMAXModule.e( "Cannot find an icon image with tag \"" + tag + "\" for " + adUnitId );
372
+ AppLovinMAXModuleImpl.e( "Cannot find an icon image with tag \"" + tag + "\" for " + adUnitId );
324
373
  return;
325
374
  }
326
375
 
@@ -337,14 +386,6 @@ public class AppLovinMAXNativeAdView
337
386
  view.setImageDrawable( icon.getDrawable() );
338
387
  }
339
388
  }
340
- else
341
- {
342
- ImageView iconView = (ImageView) nativeAd.getNativeAd().getIconView();
343
- if ( iconView != null )
344
- {
345
- view.setImageDrawable( iconView.getDrawable() );
346
- }
347
- }
348
389
  }
349
390
 
350
391
  public void setOptionsView(final int tag)
@@ -355,7 +396,7 @@ public class AppLovinMAXNativeAdView
355
396
  ViewGroup view = findViewById( tag );
356
397
  if ( view == null )
357
398
  {
358
- AppLovinMAXModule.e( "Cannot find an options view with tag \"" + tag + "\" for " + adUnitId );
399
+ AppLovinMAXModuleImpl.e( "Cannot find an options view with tag \"" + tag + "\" for " + adUnitId );
359
400
  return;
360
401
  }
361
402
 
@@ -383,7 +424,7 @@ public class AppLovinMAXNativeAdView
383
424
  ViewGroup view = findViewById( tag );
384
425
  if ( view == null )
385
426
  {
386
- AppLovinMAXModule.e( "Cannot find a media view with tag \"" + tag + "\" for " + adUnitId );
427
+ AppLovinMAXModuleImpl.e( "Cannot find a media view with tag \"" + tag + "\" for " + adUnitId );
387
428
  return;
388
429
  }
389
430
 
@@ -448,12 +489,6 @@ public class AppLovinMAXNativeAdView
448
489
  {
449
490
  loadAd();
450
491
  }
451
- else
452
- {
453
- // Renders the ad only after the last asset view is set
454
- renderNativeAdHandler.removeCallbacksAndMessages( null );
455
- renderNativeAdHandler.postDelayed( renderNativeAdTask, 50 );
456
- }
457
492
  }
458
493
 
459
494
  @Override
@@ -516,9 +551,6 @@ public class AppLovinMAXNativeAdView
516
551
  nativeAdInfo.putBoolean( "isOptionsViewAvailable", ( ad.getOptionsView() != null ) );
517
552
  nativeAdInfo.putBoolean( "isMediaViewAvailable", ( ad.getMediaView() != null ) );
518
553
 
519
- WritableMap adInfo = AppLovinMAXModule.getInstance().getAdInfo( nativeAd );
520
- adInfo.putMap( "nativeAd", nativeAdInfo );
521
-
522
554
  // 2. NativeAd for `AppLovinNativeAdView.js` to render the views
523
555
 
524
556
  WritableMap jsNativeAd = Arguments.createMap();
@@ -544,20 +576,16 @@ public class AppLovinMAXNativeAdView
544
576
  jsNativeAd.putBoolean( "image", true );
545
577
  }
546
578
  }
547
- else if ( ad.getIconView() != null )
548
- {
549
- jsNativeAd.putBoolean( "image", true );
550
- }
551
579
 
552
580
  jsNativeAd.putBoolean( "isOptionsViewAvailable", ( ad.getOptionsView() != null ) );
553
581
  jsNativeAd.putBoolean( "isMediaViewAvailable", ( ad.getMediaView() != null ) );
554
582
 
555
- WritableMap arg = Arguments.createMap();
556
- arg.putMap( "adInfo", adInfo );
557
- arg.putMap( "nativeAd", jsNativeAd );
583
+ WritableMap adInfo = AppLovinMAXModuleImpl.getInstance().getAdInfo( nativeAd );
584
+ adInfo.putMap( "nativeAd", nativeAdInfo );
585
+ adInfo.putMap( "nativeAdImpl", jsNativeAd );
558
586
 
559
587
  // Send to `AppLovinNativeAdView.js`
560
- reactContext.getJSModule( RCTEventEmitter.class ).receiveEvent( getId(), AppLovinMAXAdEvents.ON_AD_LOADED_EVENT, arg );
588
+ AppLovinMAXModuleImpl.getInstance().sendReactNativeViewEvent( surfaceId, getId(), AppLovinMAXAdEvents.ON_AD_LOADED_EVENT, adInfo );
561
589
  }
562
590
 
563
591
  private void maybeDestroyCurrentAd()
@@ -0,0 +1,101 @@
1
+ package com.applovin.reactnative;
2
+
3
+ import com.facebook.react.bridge.ReadableArray;
4
+ import com.facebook.react.common.MapBuilder;
5
+ import com.facebook.react.uimanager.ThemedReactContext;
6
+
7
+ import java.util.Map;
8
+
9
+ import androidx.annotation.NonNull;
10
+ import androidx.annotation.Nullable;
11
+
12
+ public class AppLovinMAXNativeAdViewManagerImpl
13
+ {
14
+ public static final String NAME = "AppLovinMAXNativeAdView";
15
+
16
+ private static final int COMMAND_LOAD_AD = 1;
17
+
18
+ public static AppLovinMAXNativeAdView createViewInstance(@NonNull final ThemedReactContext reactContext)
19
+ {
20
+ return new AppLovinMAXNativeAdView( reactContext );
21
+ }
22
+
23
+ public static Map<String, Object> getExportedCustomDirectEventTypeConstants()
24
+ {
25
+ // mapping Android events to JavaScript events
26
+ return MapBuilder.<String, Object>builder()
27
+ .put( AppLovinMAXAdEvents.ON_AD_LOADED_EVENT, MapBuilder.of( "registrationName", AppLovinMAXAdEvents.ON_AD_LOADED_EVENT ) )
28
+ .put( AppLovinMAXAdEvents.ON_AD_LOAD_FAILED_EVENT, MapBuilder.of( "registrationName", AppLovinMAXAdEvents.ON_AD_LOAD_FAILED_EVENT ) )
29
+ .put( AppLovinMAXAdEvents.ON_AD_CLICKED_EVENT, MapBuilder.of( "registrationName", AppLovinMAXAdEvents.ON_AD_CLICKED_EVENT ) )
30
+ .put( AppLovinMAXAdEvents.ON_AD_REVENUE_PAID_EVENT, MapBuilder.of( "registrationName", AppLovinMAXAdEvents.ON_AD_REVENUE_PAID_EVENT ) )
31
+ .build();
32
+ }
33
+
34
+ public static void receiveCommand(final AppLovinMAXNativeAdView view, final String commandId, @Nullable final ReadableArray args)
35
+ {
36
+ if ( commandId.equals( "loadAd" ) )
37
+ {
38
+ loadAd( view );
39
+ }
40
+ else if ( commandId.equals( "updateAssetView" ) )
41
+ {
42
+ int assetViewTag = args.getInt( 0 );
43
+ String assetViewName = args.getString( 1 );
44
+ updateAssetView( view, assetViewTag, assetViewName );
45
+ }
46
+ else if ( commandId.equals( "renderNativeAd" ) )
47
+ {
48
+ renderNativeAd( view );
49
+ }
50
+ }
51
+
52
+ public static void setAdUnitId(final AppLovinMAXNativeAdView view, final String value)
53
+ {
54
+ view.setAdUnitId( value );
55
+ }
56
+
57
+ public static void setPlacement(final AppLovinMAXNativeAdView view, @Nullable final String value)
58
+ {
59
+ view.setPlacement( value );
60
+ }
61
+
62
+ public static void setCustomData(final AppLovinMAXNativeAdView view, @Nullable final String value)
63
+ {
64
+ view.setCustomData( value );
65
+ }
66
+
67
+ public static void setExtraParameters(final AppLovinMAXNativeAdView view, @Nullable final ReadableArray value)
68
+ {
69
+ view.setExtraParameters( value );
70
+ }
71
+
72
+ public static void setLocalExtraParameters(final AppLovinMAXNativeAdView view, @Nullable final ReadableArray value)
73
+ {
74
+ view.setLocalExtraParameters( value );
75
+ }
76
+
77
+ public static void onSetProps(final AppLovinMAXNativeAdView view)
78
+ {
79
+ view.onSetProps();
80
+ }
81
+
82
+ public static void destroy(final AppLovinMAXNativeAdView view)
83
+ {
84
+ view.destroy();
85
+ }
86
+
87
+ public static void loadAd(final AppLovinMAXNativeAdView view)
88
+ {
89
+ view.loadAd();
90
+ }
91
+
92
+ public static void updateAssetView(final AppLovinMAXNativeAdView view, final int assetViewTag, final String assetViewName)
93
+ {
94
+ view.updateAssetView( assetViewTag, assetViewName );
95
+ }
96
+
97
+ public static void renderNativeAd(final AppLovinMAXNativeAdView view)
98
+ {
99
+ view.renderNativeAd();
100
+ }
101
+ }
@@ -1,35 +1,68 @@
1
1
  package com.applovin.reactnative;
2
2
 
3
- import com.facebook.react.ReactPackage;
3
+ import com.facebook.react.TurboReactPackage;
4
4
  import com.facebook.react.bridge.NativeModule;
5
5
  import com.facebook.react.bridge.ReactApplicationContext;
6
+ import com.facebook.react.module.model.ReactModuleInfo;
7
+ import com.facebook.react.module.model.ReactModuleInfoProvider;
6
8
  import com.facebook.react.uimanager.ViewManager;
7
9
 
8
10
  import java.util.ArrayList;
11
+ import java.util.HashMap;
9
12
  import java.util.List;
13
+ import java.util.Map;
10
14
 
11
15
  import androidx.annotation.NonNull;
16
+ import androidx.annotation.Nullable;
12
17
 
13
18
  /**
14
19
  * Created by Thomas So on July 11 2020
15
20
  */
16
21
  public class AppLovinMAXPackage
17
- implements ReactPackage
22
+ extends TurboReactPackage
18
23
  {
24
+ @NonNull
19
25
  @Override
20
- public @NonNull List<NativeModule> createNativeModules(@NonNull final ReactApplicationContext reactContext)
21
- {
22
- List<NativeModule> module = new ArrayList<>( 1 );
23
- module.add( new AppLovinMAXModule( reactContext ) );
24
- return module;
25
- }
26
-
27
- @Override
28
- public @NonNull List<ViewManager> createViewManagers(@NonNull final ReactApplicationContext reactContext)
26
+ public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext)
29
27
  {
30
28
  List<ViewManager> viewManagers = new ArrayList<>( 2 );
31
29
  viewManagers.add( new AppLovinMAXAdViewManager() );
32
30
  viewManagers.add( new AppLovinMAXNativeAdViewManager() );
33
31
  return viewManagers;
34
32
  }
33
+
34
+ @Override
35
+ public ReactModuleInfoProvider getReactModuleInfoProvider()
36
+ {
37
+ return () -> {
38
+ final Map<String, ReactModuleInfo> moduleInfos = new HashMap<>();
39
+ boolean isTurboModule = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
40
+ moduleInfos.put(
41
+ AppLovinMAXModuleImpl.NAME,
42
+ new ReactModuleInfo(
43
+ AppLovinMAXModuleImpl.NAME,
44
+ AppLovinMAXModuleImpl.NAME,
45
+ false, // canOverrideExistingModule
46
+ false, // needsEagerInit
47
+ true, // hasConstants
48
+ false, // isCxxModule
49
+ isTurboModule // isTurboModule
50
+ ) );
51
+ return moduleInfos;
52
+ };
53
+ }
54
+
55
+ @Nullable
56
+ @Override
57
+ public NativeModule getModule(String name, @NonNull ReactApplicationContext reactContext)
58
+ {
59
+ if ( name.equals( AppLovinMAXModuleImpl.NAME ) )
60
+ {
61
+ return new AppLovinMAXModule( reactContext );
62
+ }
63
+ else
64
+ {
65
+ return null;
66
+ }
67
+ }
35
68
  }
@@ -0,0 +1,56 @@
1
+ package com.applovin.reactnative;
2
+
3
+ import com.applovin.sdk.AppLovinSdkUtils;
4
+ import com.facebook.react.bridge.Dynamic;
5
+ import com.facebook.react.bridge.ReadableArray;
6
+ import com.facebook.react.bridge.ReadableMap;
7
+ import com.facebook.react.bridge.ReadableType;
8
+
9
+ import java.util.HashMap;
10
+ import java.util.Map;
11
+
12
+ import androidx.annotation.Nullable;
13
+
14
+ class AppLovinMAXUtils
15
+ {
16
+ public static Map<String, Object> convertReadbleArrayToHashMap(@Nullable final ReadableArray readableArray)
17
+ {
18
+ if ( readableArray == null || readableArray.size() == 0 ) return null;
19
+
20
+ Map<String, Object> hashMap = new HashMap<>();
21
+
22
+ for ( int i = 0; i < readableArray.size(); i++ )
23
+ {
24
+ ReadableMap readableMap = readableArray.getMap( i );
25
+
26
+ String key = readableMap.getString( "key" );
27
+
28
+ if ( !AppLovinSdkUtils.isValidString( key ) ) continue;
29
+
30
+ if ( readableMap.hasKey( "value" ) )
31
+ {
32
+ Dynamic value = readableMap.getDynamic( "value" );
33
+ ReadableType type = readableMap.getType( "value" );
34
+
35
+ if ( type == ReadableType.String )
36
+ {
37
+ hashMap.put( key, value.asString() );
38
+ }
39
+ else if ( type == ReadableType.Number )
40
+ {
41
+ hashMap.put( key, value.asDouble() );
42
+ }
43
+ else if ( type == ReadableType.Boolean )
44
+ {
45
+ hashMap.put( key, value.asBoolean() );
46
+ }
47
+ else if ( type == ReadableType.Null )
48
+ {
49
+ hashMap.put( key, null );
50
+ }
51
+ }
52
+ }
53
+
54
+ return hashMap;
55
+ }
56
+ }