@@ -24,15 +24,15 @@ import com.unity3d.player.UnityPlayer
2424public  class  CrossDKBridge  {
2525    private  var  mUnityPlayerActivity:  Activity  =  UnityPlayer .currentActivity
2626    private  var  mOpenedOverlayFormat:  OverlayFormat  =  OverlayFormat .NONE 
27-     private  lateinit   var  mCrossDKView:  CrossDKView 
28-     private  lateinit   var  mCrossDKMidSizeView:  CrossDKMidSizeView 
29-     private  lateinit   var  mCrossDKInterstitialView:  CrossDKInterstitialView 
27+     private  var  mCrossDKView:  CrossDKView ?   =   null 
28+     private  var  mCrossDKMidSizeView:  CrossDKMidSizeView ?   =   null 
29+     private  var  mCrossDKInterstitialView:  CrossDKInterstitialView ?   =   null 
3030
3131    // /////////////////////////////////////////////////////////////////////////
3232    //  CONFIG
3333    // /////////////////////////////////////////////////////////////////////////
3434
35-     public  fun  config (appId :  String , apiKey :  String , userId :  String? , deviceId : String? ) {
35+     public  fun  config (appId :  String , apiKey :  String , userId :  String? , deviceId :   String? ) {
3636        CrossDKConfig .Builder ()
3737            .apiKey(apiKey)
3838            .appId(appId)
@@ -50,83 +50,52 @@ public class CrossDKBridge {
5050    //  DISPLAY
5151    // /////////////////////////////////////////////////////////////////////////
5252
53-     public  fun  displayOverlay (
53+     public  fun  loadOverlay (
5454        format :  Int ,
5555        position :  Int ,
5656        isCloseButtonVisible :  Boolean ,
5757        isRewarded :  Boolean 
5858    ) {
59-         val  crossDKContentCallback =  object  :  CrossDKContentCallback  {
60-             override  fun  onConfigurationError () {
61-                 unitySendOverlayError(" Overlay error: configuration error" 
62-             }
63- 
64-             override  fun  onNoRecommendation () {
65-                 unitySendOverlayError(" Overlay error: unavailable recommendation" 
66-             }
67- 
68-             override  fun  onShowContentError () {
69-                 unitySendOverlayError(" Overlay error: show content error" 
70-             }
71- 
72-             override  fun  onRecommendationDisplayed () {
73-                 overlayDidFinishPresentation()
74-             }
75- 
76-             override  fun  onRecommendationClicked () {
77-                 overlayShowsRecommendedAppInAppStore()
78-             }
79- 
80-             override  fun  onRecommendationClosed () {
81-                 overlayDidFinishDismissal()
82-                 destroyViews()
83-             }
84- 
85-             override  fun  onUnsupportedApiVersion () {
86-                 unitySendOverlayError(" Overlay error: unsupported Api version" 
59+         mUnityPlayerActivity.runOnUiThread {
60+             overlayWillStartPreload()
61+             mOpenedOverlayFormat =  OverlayFormat .fromInt(format)
62+             createFormat(position, isCloseButtonVisible, isRewarded)
63+             when  (mOpenedOverlayFormat) {
64+                 OverlayFormat .BANNER  ->  {
65+                     mCrossDKView?.load(getCrossDKLoadCallback())
66+                 }
67+                 OverlayFormat .MID_SIZE  ->  {
68+                     mCrossDKMidSizeView?.load(getCrossDKLoadCallback())
69+                 }
70+                 OverlayFormat .INTERSTITIAL  ->  {
71+                     mCrossDKInterstitialView?.load(getCrossDKLoadCallback())
72+                 }
73+                 else  ->  {
74+                     unitySendOverlayError(" Overlay error: unsupported format requested" 
75+                 }
8776            }
8877        }
78+     }
79+ 
80+     public  fun  displayOverlay (
81+         format :  Int ,
82+         position :  Int ,
83+         isCloseButtonVisible :  Boolean ,
84+         isRewarded :  Boolean 
85+     ) {
86+         overlayWillStartPresentation()
8987        mUnityPlayerActivity.runOnUiThread {
90-             if  (mOpenedOverlayFormat !=  OverlayFormat .NONE ) dismissOverlay()
91-             val  overlayFormat =  OverlayFormat .fromInt(format)
92-             mOpenedOverlayFormat =  overlayFormat
93-             overlayWillStartPresentation()
94-             when  (overlayFormat) {
88+             mOpenedOverlayFormat =  OverlayFormat .fromInt(format)
89+             createFormat(position, isCloseButtonVisible, isRewarded)
90+             when  (mOpenedOverlayFormat) {
9591                OverlayFormat .BANNER  ->  {
96-                     mCrossDKView =  CrossDKView (mUnityPlayerActivity)
97-                     mCrossDKView.setCrossDKContentCallback(crossDKContentCallback)
98-                     mCrossDKView.setCloseButtonVisibility(if  (isCloseButtonVisible) View .VISIBLE  else  View .INVISIBLE )
99-                     mUnityPlayerActivity.addContentView(mCrossDKView, getLayoutParams())
100-                     mCrossDKView.setPosition(if  (position ==  0 ) CrossDKPosition .BOTTOM  else  CrossDKPosition .BOTTOM_RAISED )
92+                     mCrossDKView?.show()
10193                }
10294                OverlayFormat .MID_SIZE  ->  {
103-                     mCrossDKMidSizeView =  CrossDKMidSizeView (mUnityPlayerActivity)
104-                     mCrossDKMidSizeView.setCrossDKContentCallback(crossDKContentCallback)
105-                     mCrossDKMidSizeView.setCloseButtonVisibility(if  (isCloseButtonVisible) View .VISIBLE  else  View .INVISIBLE )
106-                     mUnityPlayerActivity.addContentView(mCrossDKMidSizeView, getLayoutParams())
107-                     mCrossDKMidSizeView.setPosition(if  (position ==  0 ) CrossDKPosition .BOTTOM  else  CrossDKPosition .BOTTOM_RAISED )
95+                     mCrossDKMidSizeView?.show()
10896                }
10997                OverlayFormat .INTERSTITIAL  ->  {
110-                     mCrossDKInterstitialView =  CrossDKInterstitialView (mUnityPlayerActivity)
111-                     mCrossDKInterstitialView.setCrossDKContentCallback(crossDKContentCallback)
112-                     mCrossDKInterstitialView.setCloseButtonVisibility(if  (isCloseButtonVisible) View .VISIBLE  else  View .INVISIBLE )
113-                     mCrossDKInterstitialView.setRewarded(isRewarded,
114-                         object  :  CrossDKRewardedCallback  {
115-                             override  fun  onUserRewarded () {
116-                                 overlayDidFinishPlayingVideo()
117-                                 overlayDidRewardUserWithReward()
118-                             }
119-                         })
120-                     mUnityPlayerActivity.addContentView(mCrossDKInterstitialView, getLayoutParams())
121-                     mCrossDKInterstitialView.load(object  :  CrossDKLoadCallback  {
122-                         override  fun  onRecommendationLoaded () {
123-                             mCrossDKInterstitialView.show()
124-                         }
125- 
126-                         override  fun  onRecommendationLoadFailure () {
127-                             overlayDidFailToLoadWithError(java.lang.Exception (" Recommendation load failure" 
128-                         }
129-                     })
98+                     mCrossDKInterstitialView?.show()
13099                }
131100                else  ->  {
132101                    unitySendOverlayError(" Overlay error: unsupported format requested" 
@@ -140,18 +109,18 @@ public class CrossDKBridge {
140109        mUnityPlayerActivity.runOnUiThread {
141110            when  (mOpenedOverlayFormat) {
142111                OverlayFormat .BANNER  ->  {
143-                     mCrossDKView.dismissView(true )
112+                     mCrossDKView? .dismissView(true )
144113                    destroyViews()
145114                }
146115                OverlayFormat .MID_SIZE  ->  {
147-                     mCrossDKMidSizeView.dismissView(true )
116+                     mCrossDKMidSizeView? .dismissView(true )
148117                    destroyViews()
149118                }
150119                OverlayFormat .INTERSTITIAL  ->  {
151-                     mCrossDKInterstitialView.dismissView(true )
120+                     mCrossDKInterstitialView? .dismissView(true )
152121                    destroyViews()
153122                }
154-                 else  ->  {} 
123+                 OverlayFormat . NONE  ->  overlayDidFinishDismissal() 
155124            }
156125        }
157126    }
@@ -160,27 +129,30 @@ public class CrossDKBridge {
160129        mUnityPlayerActivity.runOnUiThread {
161130            when  (mOpenedOverlayFormat) {
162131                OverlayFormat .BANNER  ->  {
163-                     mCrossDKView.destroy()
164-                     val  parentView =  mCrossDKView.parent
132+                     mCrossDKView? .destroy()
133+                     val  parentView =  mCrossDKView? .parent
165134                    if  (parentView is  ViewGroup ) {
166135                        parentView.removeView(mCrossDKView)
167136                    }
137+                     mCrossDKView =  null 
168138                }
169139                OverlayFormat .MID_SIZE  ->  {
170-                     mCrossDKMidSizeView.destroy()
171-                     val  parentView =  mCrossDKMidSizeView.parent
140+                     mCrossDKMidSizeView? .destroy()
141+                     val  parentView =  mCrossDKMidSizeView? .parent
172142                    if  (parentView is  ViewGroup ) {
173143                        parentView.removeView(mCrossDKMidSizeView)
174144                    }
145+                     mCrossDKMidSizeView =  null 
175146                }
176147                OverlayFormat .INTERSTITIAL  ->  {
177-                     mCrossDKInterstitialView.destroy()
178-                     val  parentView =  mCrossDKInterstitialView.parent
148+                     mCrossDKInterstitialView? .destroy()
149+                     val  parentView =  mCrossDKInterstitialView? .parent
179150                    if  (parentView is  ViewGroup ) {
180151                        parentView.removeView(mCrossDKInterstitialView)
181152                    }
153+                     mCrossDKInterstitialView =  null 
182154                }
183-                 else  ->  {} 
155+                 else  ->  mOpenedOverlayFormat  =   OverlayFormat . NONE 
184156            }
185157            mOpenedOverlayFormat =  OverlayFormat .NONE 
186158        }
@@ -190,6 +162,18 @@ public class CrossDKBridge {
190162    //  LISTENERS
191163    // /////////////////////////////////////////////////////////////////////////
192164
165+     private  fun  overlayWillStartPreload () {
166+         unitySendMessage(" OverlayWillStartPreload" " Overlay will start preload" 
167+     }
168+ 
169+     private  fun  overlayDidFinishedPreload () {
170+         unitySendMessage(" OverlayDidFinishPreload" " Overlay did finish preload" 
171+     }
172+ 
173+     private  fun  overlayPreloadExpired () {
174+         unitySendMessage(" OverlayPreloadExpired" " Overlay preload expired" 
175+     }
176+ 
193177    private  fun  overlayWillStartPresentation () {
194178        unitySendMessage(" OverlayWillStartPresentation" " Overlay will start presentation" 
195179    }
@@ -240,6 +224,42 @@ public class CrossDKBridge {
240224    //  HELPERS
241225    // /////////////////////////////////////////////////////////////////////////
242226
227+     private  fun  createFormat (
228+         position :  Int ,
229+         isCloseButtonVisible :  Boolean ,
230+         isRewarded :  Boolean 
231+     ) {
232+         when  {
233+             mOpenedOverlayFormat ==  OverlayFormat .BANNER  &&  mCrossDKView ==  null  ->  {
234+                 mCrossDKView =  CrossDKView (mUnityPlayerActivity)
235+                 mCrossDKView?.setCrossDKContentCallback(getCrossDKContentCallback())
236+                 mCrossDKView?.setCloseButtonVisibility(if  (isCloseButtonVisible) View .VISIBLE  else  View .INVISIBLE )
237+                 mUnityPlayerActivity.addContentView(mCrossDKView, getLayoutParams())
238+                 mCrossDKView?.setPosition(if  (position ==  0 ) CrossDKPosition .BOTTOM  else  CrossDKPosition .BOTTOM_RAISED )
239+             }
240+             mOpenedOverlayFormat ==  OverlayFormat .MID_SIZE  &&  mCrossDKMidSizeView ==  null  ->  {
241+                 mCrossDKMidSizeView =  CrossDKMidSizeView (mUnityPlayerActivity)
242+                 mCrossDKMidSizeView?.setCrossDKContentCallback(getCrossDKContentCallback())
243+                 mCrossDKMidSizeView?.setCloseButtonVisibility(if  (isCloseButtonVisible) View .VISIBLE  else  View .INVISIBLE )
244+                 mUnityPlayerActivity.addContentView(mCrossDKMidSizeView, getLayoutParams())
245+                 mCrossDKMidSizeView?.setPosition(if  (position ==  0 ) CrossDKPosition .BOTTOM  else  CrossDKPosition .BOTTOM_RAISED )
246+             }
247+             mOpenedOverlayFormat ==  OverlayFormat .INTERSTITIAL  &&  mCrossDKInterstitialView ==  null  ->  {
248+                 mCrossDKInterstitialView =  CrossDKInterstitialView (mUnityPlayerActivity)
249+                 mCrossDKInterstitialView?.setCrossDKContentCallback(getCrossDKContentCallback())
250+                 mCrossDKInterstitialView?.setCloseButtonVisibility(if  (isCloseButtonVisible) View .VISIBLE  else  View .INVISIBLE )
251+                 mCrossDKInterstitialView?.setRewarded(isRewarded,
252+                     object  :  CrossDKRewardedCallback  {
253+                         override  fun  onUserRewarded () {
254+                             overlayDidFinishPlayingVideo()
255+                             overlayDidRewardUserWithReward()
256+                         }
257+                     })
258+                 mUnityPlayerActivity.addContentView(mCrossDKInterstitialView, getLayoutParams())
259+             }
260+         }
261+     }
262+ 
243263    private  fun  getLayoutParams (): FrameLayout .LayoutParams  {
244264        val  adParams =  FrameLayout .LayoutParams (
245265            FrameLayout .LayoutParams .MATCH_PARENT , FrameLayout .LayoutParams .WRAP_CONTENT 
@@ -266,4 +286,52 @@ public class CrossDKBridge {
266286            fun  fromInt (value :  Int ) =  values().first { it.value ==  value }
267287        }
268288    }
289+ 
290+     private  fun  getCrossDKLoadCallback () =  object  :  CrossDKLoadCallback  {
291+         override  fun  onRecommendationLoaded () {
292+             overlayDidFinishedPreload()
293+         }
294+ 
295+         override  fun  onRecommendationLoadFailure () {
296+             overlayDidFailToLoadWithError(java.lang.Exception (" Recommendation load failure" 
297+             destroyViews()
298+         }
299+ 
300+         override  fun  onRecommendationExpired () {
301+             overlayPreloadExpired()
302+             destroyViews()
303+         }
304+     }
305+ 
306+     private  fun  getCrossDKContentCallback () =  object  :  CrossDKContentCallback  {
307+         override  fun  onConfigurationError () {
308+             unitySendOverlayError(" Overlay error: configuration error" 
309+         }
310+ 
311+         override  fun  onNoRecommendation () {
312+             unitySendOverlayError(" Overlay error: unavailable recommendation" 
313+             destroyViews()
314+         }
315+ 
316+         override  fun  onShowContentError () {
317+             unitySendOverlayError(" Overlay error: show content error" 
318+         }
319+ 
320+         override  fun  onRecommendationDisplayed () {
321+             overlayDidFinishPresentation()
322+         }
323+ 
324+         override  fun  onRecommendationClicked () {
325+             overlayShowsRecommendedAppInAppStore()
326+         }
327+ 
328+         override  fun  onRecommendationClosed () {
329+             overlayDidFinishDismissal()
330+             destroyViews()
331+         }
332+ 
333+         override  fun  onUnsupportedApiVersion () {
334+             unitySendOverlayError(" Overlay error: unsupported Api version" 
335+         }
336+     }
269337}
0 commit comments