package Ġapp . sp idy . k ook ab ur ra . controllers Ċ Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . net . http . Ssl Error Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Message Ċ import Ġandroid . util . Log Ċ import Ġandroid . webkit .* Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġapp . sp idy . k ook ab ur ra . R Ċ import Ġapp . sp idy . kotlin utils . toast Ċ import Ġjava . net . URI Ċ import Ġjava . net . UR ISyntaxException Ċ import Ġjava . net . URL Encoder ĊĊ Ċ class ĠWeb Client ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġbrowser : ĠBrowser , ĊĠĠĠ Ġprivate Ġval Ġactivity : ĠFragment Activity ? Ċ ) Ġ: ĠWebView Client () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġlast Url : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonLoad Resource ( view : ĠWebView ?, Ġurl : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( last Url Ġ== Ġnull Ġ|| Ġ! view ?. url . equals ( last Url )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view ?. url Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpretty Url Ġ= Ġif Ġ( view . url . endsWith ('/ ')) Ġview . url . trim End ('/') Ġelse Ġview . url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Url Ġ= Ġview . url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . set Url ( view , Ġpretty Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . tab Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . ssl Er rored Domains . contains ( URI ( URL Encoder . encode ( url , Ġ" UTF - 8 ")). host ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . protocol Image ?. setImage Drawable ( Context Compat . get Drawable ( view . context , ĠR . drawable . browser _ protocol _ error )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . url . startsWith (" https :// ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . protocol Image ?. setImage Drawable ( Context Compat . get Drawable ( view . context , ĠR . drawable . browser _ protocol _ secure )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . protocol Image ?. setImage Drawable ( Context Compat . get Drawable ( view . context , ĠR . drawable . browser _ protocol _ info )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . browser Listener ?. on New Url ( view , Ġpretty Url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull Ġ&& Ġurl Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . browser Listener ?. on Load Resource ( view , Ġurl ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Load Resource ( view , Ġurl ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Page Started ( view : ĠWebView ?, Ġurl : ĠString ?, Ġfav icon : ĠBitmap ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Page Started ( view , Ġurl , Ġfav icon ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! Network Util . is Network Available ( view ?. context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. context ?. toast (" Network Ġunavailable !", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbrowser . isLoading Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbrowser . current Tab ?. fav Icon Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġbrowser . show ProgressBar () ĊĠĠĠĠĠĠĠ Ġview ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . save State ( browser . current Tab ?. tab Id . toString (), Ġview ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . menu Refresh Image ?. setImage Drawable ( Context Compat . get Drawable ( view . context , ĠR . drawable . browser _ ic _ close )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( browser . current Tab Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . update Tab ( browser . current Tab !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull Ġ&& Ġurl Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . browser Listener ?. on Page Started ( view , Ġurl , Ġfav icon ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Page Finished ( view : ĠWebView ?, Ġurl : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Page Finished ( view , Ġurl ) ĊĠĠĠĠĠĠĠ Ġview ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . save State ( browser . current Tab ?. tab Id . toString (), Ġview ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . menu Refresh Image ?. setImage Drawable ( Context Compat . get Drawable ( view . context , ĠR . drawable . browser _ refresh _ icon )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( browser . current Tab Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . update Tab ( browser . current Tab !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbrowser . isLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbrowser . hide ProgressBar () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull Ġ&& Ġurl Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . browser Listener ?. on Page Finished ( view , Ġurl ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshould Override Url Loading ( view : ĠWebView ?, Ġrequest : ĠWeb Resource Request ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġrequest ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . url . toString (). startsWith (" intent :// ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext : ĠContext Ġ= Ġview !!. context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent . parse Uri ( it . url . toString (), ĠIntent . URI _ INT ENT _ SCHEME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . stop Loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpackage Manager : ĠPackage Manager Ġ= Ġcontext . package Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= Ġpackage Manager . resolve Activity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPackage Manager . MATCH _ DEFAULT _ ONLY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( info Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . flags Ġ= ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfallback Url Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . getString Extra (" browser _ fallback _ url ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . load Url ( fallback Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUR ISyntaxException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" debug _ exception ", Ġ" Can 't Ġresolve Ġintent :// ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull Ġ&& Ġrequest Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . browser Listener ?. should Override Url Loading ( view , Ġrequest ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . should Override Url Loading ( view , Ġrequest ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Received Error ( ĊĠĠĠĠĠĠĠ Ġview : ĠWebView ?, ĊĠĠĠĠĠĠĠ Ġrequest : ĠWeb Resource Request ?, ĊĠĠĠĠĠĠĠ Ġerror : ĠWeb Resource Error ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. context ?. toast (" An Ġerror Ġoccurred Ġ: Ġ${ error ?. errorCode }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull Ġ&& Ġrequest Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . browser Listener ?. on Received Error ( view , Ġrequest , Ġerror ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Received Error ( view , Ġrequest , Ġerror ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Received Ssl Error ( view : ĠWebView ?, Ġhandler : ĠS sl ErrorHandler ?, Ġerror : ĠS sl Error ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull Ġ&& Ġhandler Ġ!= Ġnull Ġ&& Ġerror Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . browser Listener ?. on Received Ssl Error ( view , Ġhandler , Ġerror ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Received Ssl Error ( view , Ġhandler , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġalert Dialog Ġ= ĠAlertDialog . Builder ( context ). create () ĊĠĠĠĠĠĠĠ Ġalert Dialog . set Cancel able ( false ) ĊĠĠĠĠĠĠĠ Ġalert Dialog . setTitle ( view . context . getString ( R . string . ssl _ error _ title )) ĊĠĠĠĠĠĠĠ Ġalert Dialog . setMessage ( view . context . getString ( R . string . ssl _ error _ message )) ĊĠĠĠĠĠĠĠ Ġalert Dialog . set Button ( AlertDialog . BUTTON _ NE UT R AL , Ġview . context . getString ( R . string . ssl _ error _ back _ btn )) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Received Ssl Error ( view , Ġhandler , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġalert Dialog . set Button ( AlertDialog . BUTTON _ NEGATIVE , Ġview . context . getString ( R . string . ssl _ error _ proceed _ btn )) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler ?. proceed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror ?. url ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . ssl Er rored Domains . add ( URI ( it ). host ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġalert Dialog . show () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġshould Intercept Request ( view : ĠWebView ?, Ġrequest : ĠWeb Resource Request ?): ĠWeb Resource Response ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġrequest ?. url ?. toString () ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull Ġ&& Ġurl Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . browser Listener ?. should Intercept Request ( view , Ġactivity , Ġurl , Ġrequest ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . should Intercept Request ( view , Ġrequest ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Form Res ub mission ( view : ĠWebView ?, Ġdont Res end : ĠMessage ?, Ġres end : ĠMessage ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull Ġ&& Ġdont Res end Ġ!= Ġnull Ġ&& Ġres end Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . browser Listener ?. on Form Res ub mission ( view , Ġdont Res end , Ġres end ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Form Res ub mission ( view , Ġdont Res end , Ġres end ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Page Commit Visible ( view : ĠWebView ?, Ġurl : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull Ġ&& Ġurl Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . browser Listener ?. on Page Commit Visible ( view , Ġurl ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Page Commit Visible ( view , Ġurl ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Received Client Cert Request ( view : ĠWebView ?, Ġrequest : ĠClient Cert Request ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull Ġ&& Ġrequest Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . browser Listener ?. on Received Client Cert Request ( view , Ġrequest ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Received Client Cert Request ( view , Ġrequest ) ĊĠĠĠ Ġ} Ċ }