package Ġcom . x raph . plugin . flutter _ unity _ widget Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . graphics . PixelFormat Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . ViewGroup . LayoutParams . MATCH _ PARENT Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . view . Surface ; Ċ import Ġandroid . view . Surface Holder ; Ċ import Ġandroid . view . Surface View ; Ċ import Ġandroid . graphics . Surface Texture ; Ċ import Ġandroid . view . Texture View ; Ċ import Ġcom . unity 3 d . player . I Unity Player Lifecycle Events Ċ import Ġcom . unity 3 d . player . Unity Player Ċ import Ġjava . util . concurrent . Copy On Write Array Set Ċ import Ġkotlin . jvm . java Class ; Ċ Ċ class ĠUnity Player Utils Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLOG _ TAG Ġ= Ġ" Unity Player Utils " ĊĊĠĠĠĠĠĠĠ Ġvar Ġactivity : ĠActivity ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġoptions : ĠFlutter Unity Widget Options Ġ= ĠFlutter Unity Widget Options () ĊĠĠĠĠĠĠĠ Ġvar Ġun ity Player : ĠUnity Player ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġvar Ġis Unity Ready : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġis Unity Paused : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġis Unity Loaded : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġis Unity In Background : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Unity Event Listeners Ġ= ĠCopy On Write Array Set < Unity EventListener >() ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreate Ġa Ġnew Ġun ity Ġplayer Ġwith Ġcallback ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate Player ( activity : ĠActivity , Ġ ule : ĠI Unity Player Lifecycle Events , Ġre Initialize : ĠBoolean , Ġcallback : ĠOn Create Unity View Callback ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( unity Player Ġ!= Ġnull Ġ&& Ġ! re Initialize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. on Ready () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler ( Looper . get Main Looper ()). post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! re Initialize ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . window . set Format ( PixelFormat . RGBA _ 8 8 8 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġactivity . window . set Format ( PixelFormat . TRANSP ARENT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun ity Player Ġ= ĠUnity Player ( activity , Ġ ule ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf Ġ= ĠUnity Player :: class . java . getDeclared Field (" m Gl View ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġf . get ( unity Player ) Ġas ĠSurface View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun ity Player !!. remove View ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġv . set Z Order Media Overlay ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġv . get Holder (). set Format ( PixelFormat . TRANSP ARENT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġv . set Z Order On Top ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġun ity Player !!. addView ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdate GL Display Ġ= ĠUnity Player :: class . java . getDeclared Method (" update GL Display ", ĠInt :: class . java , ĠSurface :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate GL Display . setAccessible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsend Surface Changed Event Ġ= ĠUnity Player :: class . java . getDeclared Method (" send Surface Changed Event ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Surface Changed Event . setAccessible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠTexture View ( activity ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . set Opaque ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . set Surface Texture Listener ( object Ġ: ĠTexture View . Surface Texture Listener { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Surface Texture Available ( surface : Surface Texture , Ġ Ġwidth : Int , Ġheight : Int ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun ity Player !!. display Changed ( 0 , ĠSurface ( surface )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate GL Display . invoke ( unity Player , Ġ 0 , ĠSurface ( surface )); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Surface Texture Destroyed ( surface : Surface Texture Ġ) Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( LOG _ TAG , Ġ" surface Ġtexture Ġdestroyed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate GL Display . invoke ( unity Player , Ġ 0 , Ġnull ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Surface Texture Size Changed ( surface : Surface Texture Ġ, Ġwidth : Int , Ġheight : Int ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( LOG _ TAG , Ġ" surface Ġtexture Ġsize Ġchanged ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġupdate GL Display . invoke ( unity Player , Ġ 0 , ĠSurface ( surface )); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun ity Player !!. remove View ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun ity Player !!. addView To Player ( view , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsend Surface Changed Event . invoke ( unity Player ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Surface Texture Updated ( surface : Surface Texture ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLog . e ( LOG _ TAG , Ġ" surface Ġtexture Ġupdated Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate GL Display . invoke ( unity Player , Ġ 0 , ĠSurface ( surface )); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Surface Changed Event . invoke ( unity Player ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun ity Player !!. addView To Player ( view , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! re Initialize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwait Ġa Ġmoment . Ġfix Ġun ity Ġcannot Ġstart Ġwhen Ġstartup . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 7 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstart Ġun ity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! re Initialize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Unity View To Background ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun ity Player !!. window Focus Changed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun ity Player !!. request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun ity Player !!. resume () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrestore Ġwindow Ġlayout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! options . fullscreen Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . window . add Flags ( WindowManager . LayoutParams . FLAG _ FORCE _ NOT _ FULL SCREEN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . window . clear Flags ( WindowManager . LayoutParams . FLAG _ FULL SCREEN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( android . os . Build . VERSION . SDK _ INT Ġ>= Ġandroid . os . Build . VERSION _ CODES . KIT K AT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . window . add Flags ( WindowManager . LayoutParams . FLAG _ TRANSL UC ENT _ STATUS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Unity Ready Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Unity Loaded Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. on Ready () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( LOG _ TAG , Ġe . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġpost Message ( gameObject : ĠString , ĠmethodName : ĠString , Ġmessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Unity Ready ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Unity Player Utils ", Ġ" Not Ġready !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnity Player . Unity SendMessage ( gameObject , ĠmethodName , Ġmessage ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġpause () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( unity Player Ġ!= Ġnull Ġ&& Ġis Unity Loaded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun ity Player !!. pause () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Unity Paused Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġresume () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( unity Player Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun ity Player !!. resume () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Unity Paused Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġun load () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( unity Player Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun ity Player !!. unload () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Unity Loaded Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġmove To Background () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( unity Player Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Unity In Background Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġquit Player () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( unity Player Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun ity Player !!. quit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Unity Loaded Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Unity Ready Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . message ?. let Ġ{ ĠLog . e ( LOG _ TAG , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠInvoke Ġby Ġun ity ĠC # ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġon Unity Scene Loaded ( name : ĠString , Ġbuild Index : ĠInt , Ġis Loaded : ĠBoolean , ĠisValid : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( LOG _ TAG , Ġ" Unity Ġscen el Ġo aded ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( listener Ġin Ġm Unity Event Listeners ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Scene Loaded ( name , Ġbuild Index , Ġis Loaded , ĠisValid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . message ?. let Ġ{ ĠLog . e ( LOG _ TAG , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠInvoke Ġby Ġun ity ĠC # ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġon Unity Message ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( LOG _ TAG , Ġ" UN ITY ĠMessage Ġ" Ġ+ Ġmessage ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( listener Ġin Ġm Unity Event Listeners ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Message ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . message ?. let Ġ{ ĠLog . e ( LOG _ TAG , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd Unity EventListener ( listener : ĠUnity EventListener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Unity Event Listeners . add ( listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġremove Unity EventListener ( listener : ĠUnity EventListener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Unity Event Listeners . remove ( listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd Unity View To Background ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( unity Player Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( unity Player !!. parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( unity Player !!. parent Ġas ĠViewGroup ). remove View ( unity Player ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun ity Player !!. z Ġ= Ġ- 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= ĠViewGroup . LayoutParams ( 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . add ContentView ( unity Player , Ġlayout Params ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Unity In Background Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġrestore Unity View From Background ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( unity Player Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( unity Player !!. parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( unity Player !!. parent Ġas ĠViewGroup ). addView ( unity Player ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun ity Player !!. z Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= ĠViewGroup . LayoutParams ( 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . add ContentView ( unity Player , Ġlayout Params ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Unity In Background Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd Unity View To Group ( group : ĠViewGroup ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( unity Player Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( unity Player !!. parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( unity Player !!. parent Ġas ĠViewGroup ). remove View ( unity Player ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= ĠViewGroup . LayoutParams ( MATCH _ PARENT , ĠMATCH _ PARENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup . addView ( unity Player , Ġ 0 , Ġlayout Params ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġun ity Player !!. window Focus Changed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun ity Player !!. request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun ity Player !!. resume () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }