package Ġcom . j ess i . webview . rem ot ew eb view . command dispatcher čĊč Ċ import Ġandroid . content . Context č Ċ import Ġandroid . util . Log č Ċ import Ġandroid . webkit . WebView č Ċ import Ġcom . google . gson . Gson č Ċ import Ġcom . j ess i . webview . IC allback From Main To Web č Ċ import Ġcom . j ess i . webview . I Web To Main č Ċ import Ġcom . j ess i . webview . command . Commands Manager č Ċ import Ġcom . j ess i . webview . command . Result Back č Ċ import Ġcom . j ess i . webview . rem ot ew eb view . Base WebView č Ċ import Ġcom . j ess i . webview . utils . Main Looper č Ċ import Ġcom . j ess i . webview . utils . NATIVE 2 WEB _ CALLBACK č Ċ import Ġkotlin . concurrent . thread čĊčĊč Ċ /** čĊ Ġ* ĠWebView Ġè¯·æ±Ĥ åĪĨ åıĳ čĊ Ġ*/ č Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" Command Dispatcher " č Ċ object ĠCommand Dispatcher Ġ{ čĊĠĠĠ Ġ// Ġ è·¨ è¿Ľç¨ĭ éĢļä¿¡ æİ¥åı£ čĊĠĠĠ Ġvar Ġweb A idl Interface Ġ: ĠI Web To Main ? Ġ= Ġnull čĊčĊĠĠĠ Ġprivate Ġval Ġgson Ġ= ĠGson () čĊčĊĠĠĠ Ġfun Ġinit A idl Connect ( context Ġ: ĠContext ){ čĊĠĠĠĠĠĠĠ Ġif Ġ( web A idl Interface Ġ!= Ġnull ){ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġthread Ġ( start Ġ= Ġtrue ){ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" A IDL ", Ġ" Begin Ġto Ġconnect Ġwith Ġmain Ġprocess ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb A idl Interface Ġ= ĠI Web To Main . Stub . as Interface ( Main Process Connector . instance ( context ). get I Web A idl Interface ()) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" A IDL ", Ġ" Connect Ġsuccess Ġwith Ġmain Ġprocess ") čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġexec ( context : ĠContext , Ġcmd Ġ: ĠString , Ġparams Ġ: ĠString , ĠwebView : ĠWebView ){ čĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" exec : ĠĠ Ġcommand Ġ: Ġ$ cmd ĠĠ Ġparams Ġ: Ġ$ params Ġ") čĊĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Commands Manager . is WebView Process Command ( cmd )){ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Params Ġ= Ġgson . fromJson ( params , ĠMutable Map :: class . java ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommands Manager . exec WebView Process Command ( context , Ġcmd , Ġmap Params , Ġobject Ġ: ĠResult Back { čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Result ( status : ĠInt , Ġaction : ĠString , Ġresult : ĠAny ?) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Callback ( status , Ġaction , Ġgson . toJson ( result ), ĠwebView ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweb A idl Interface ?. handle Web Action ( cmd , Ġparams , Ġobject Ġ: ĠI Callback From Main To Web . Stub (){ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Result ( response Code : ĠInt , Ġaction Name : ĠString ?, Ġresponse : ĠString ?) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Callback ( response Code , Ġaction Name , Ġresponse , ĠwebView ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Command Ġexec Ġerror !!!! ", Ġe ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġprivate Ġfun Ġhandle Callback ( response Code Ġ: ĠInt , Ġaction Name Ġ: ĠString ?, Ġresponse Ġ: ĠString ?, ĠwebView : ĠWebView ){ čĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" handle Callback : Ġ Ġaction Ġ: Ġ$ action Name , Ġresponse Ġ: Ġ$ response ") čĊĠĠĠĠĠĠĠ ĠMain Looper . instance . run On Ui Thread ( Runnable Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠGson (). fromJson ( response , ĠMutable Map :: class . java ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( params [ NATIVE 2 WEB _ CALLBACK ]?. toString ()?. isNotEmpty () Ġ== Ġtrue ){ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( web View Ġis ĠBase WebView ){ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . handle Callback ( response ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠ Ġ} čĊčĊč Ċ }