package Ġcom . example . fragment . library . base . utils Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Mutable Context Wrapper Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Looper Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . ViewGroup . LayoutParams . MATCH _ PARENT Ċ import Ġandroidx . webkit . Web Settings Compat Ċ import Ġandroidx . webkit . Web Settings Compat . FORCE _ DARK _ OFF Ċ import Ġandroidx . webkit . Web Settings Compat . FORCE _ DARK _ ON Ċ import Ġandroidx . webkit . WebView Feature Ċ import Ġcom . example . fragment . library . base . http . HttpRequest Ċ import Ġcom . example . fragment . library . base . http . download Ċ import Ġcom . example . fragment . library . base . utils . Inject Utils . inject V Console Js Ċ import Ġcom . example . fragment . library . base . utils . UI Mode Utils . is Night Mode Ċ import Ġcom . tencent . smt t . export . external . interfaces . IX 5 Web Settings Ċ import Ġcom . tencent . smt t . export . external . interfaces . Web Resource Request Ċ import Ġcom . tencent . smt t . export . external . interfaces . Web Resource Response Ċ import Ġcom . tencent . smt t . sdk .* Ċ import Ġcom . tencent . smt t . sdk . WebView . Hit TestResult . IMAGE _ TYPE Ċ import Ġcom . tencent . smt t . sdk . WebView . Hit TestResult . SRC _ IMAGE _ AN CH OR _ TYPE Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġok io . ByteString . Companion . encode Utf 8 Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ Ċ class ĠWebView Helper Ġprivate Ġconstructor ( parent : ĠViewGroup ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġwith ( parent : ĠViewGroup ): ĠWebView Helper Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠWebView Helper ( parent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠwebView Ġ= ĠWebView Manager . obtain ( parent . context ) ĊĊĠĠĠ Ġprivate Ġvar Ġon Page Changed Listener : ĠOn Page Changed Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġinject State Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġinject V Console Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġoriginal Url Ġ= Ġ" about : blank " ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġparent . addView ( web View , ĠViewGroup . LayoutParams ( MATCH _ PARENT , ĠMATCH _ PARENT )) ĊĠĠĠĠĠĠĠ ĠwebView . web View Client Ġ= Ġobject Ġ: ĠWebView Client () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshould Override Url Loading ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠWebView ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest : ĠWeb Resource Request ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġrequest ?. url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull Ġ&& Ġuri Ġ!= Ġnull Ġ&& Ġ! (" http " Ġ== Ġuri . scheme Ġ|| Ġ" https " Ġ== Ġuri . scheme )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . context . startActivity ( Intent ( Intent . ACTION _ VIEW , Ġuri )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshould Intercept Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠWebView ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest : ĠWeb Resource Request ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠWeb Resource Response ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull Ġ&& Ġrequest Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Assets Resource ( request ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġassets Resource Request ( view . context , Ġrequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Cache Resource ( request ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcache Resource Request ( view . context , Ġrequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . should Intercept Request ( view , Ġrequest ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Started ( view : ĠWebView ?, Ġurl : ĠString ?, Ġfav icon : ĠBitmap ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Page Started ( view , Ġurl , Ġfav icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Page Changed Listener ?. on Page Started ( view , Ġurl , Ġfav icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinject State Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Finished ( view : ĠWebView ?, Ġurl : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Page Finished ( view , Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Page Changed Listener ?. on Page Finished ( view , Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinject State Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠwebView . web Chrome Client Ġ= Ġobject Ġ: ĠWeb Chrome Client () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( view : ĠWebView ?, Ġnew Progress : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Progress Changed ( view , Ġnew Progress ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Page Changed Listener ?. on Progress Changed ( view , Ġnew Progress ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Progress Ġ> Ġ 8 0 Ġ&& Ġinject V Console Ġ&& Ġ! inject State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. apply Ġ{ Ġevaluate Javascript ( context . inject V Console Js ()) Ġ{} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinject State Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠwebView . set Download Listener Ġ{ Ġurl , Ġ_, Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW , ĠUri . parse ( url )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . add Category ( Intent . CATEGORY _ BRO WS ABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . context . startActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠwebView . setOn Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠwebView . hit TestResult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIMAGE _ TYPE , ĠSRC _ IMAGE _ AN CH OR _ TYPE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( result . extra ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġis App Dark Mode Ġ= ĠwebView . context . is Night Mode () ĊĠĠĠĠĠĠĠ Ġif Ġ( WebView Feature . is Feature Supported ( WebView Feature . FORCE _ DARK )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQ b Sdk . force Sys WebView () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠwebView . view ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Ġis Ġandroid . webkit . WebView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġforce Dark Mode Ġ= Ġif Ġ( is App Dark Mode ) ĠFOR CE _ DARK _ ON Ġelse ĠFOR CE _ DARK _ OFF ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeb Settings Compat . set Force Dark ( view . settings , Ġforce Dark Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQ b Sdk . un Force Sys WebView () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . set Day Or Night (! is App Dark Mode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġevaluate Javascript ( js : ĠString , Ġcallback : Ġ( String ) Ġ-> ĠUnit ): ĠWebView Helper Ġ{ ĊĠĠĠĠĠĠĠ ĠwebView . evaluate Javascript ( js , Ġcallback ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinject V Console ( inject : ĠBoolean ): ĠWebView Helper Ġ{ ĊĠĠĠĠĠĠĠ Ġinject V Console Ġ= Ġinject ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Page Changed Listener ( on Page Changed Listener : ĠOn Page Changed Listener ?): ĠWebView Helper Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Page Changed Listener Ġ= Ġon Page Changed Listener ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcan Go Back (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcan Back Ġ= ĠwebView . can Go Back () ĊĠĠĠĠĠĠĠ Ġif Ġ( can Back ) ĠwebView . go Back () ĊĠĠĠĠĠĠĠ Ġval Ġback Forward List Ġ= ĠwebView . copy Back Forward List () ĊĠĠĠĠĠĠĠ Ġval ĠcurrentIndex Ġ= Ġback Forward List . currentIndex ĊĠĠĠĠĠĠĠ Ġif Ġ( currentIndex Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Url Ġ= Ġback Forward List . currentItem . url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Host Ġ= ĠUri . parse ( current Url ). host ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// æłĪ åºķ ä¸įæĺ¯ éĵ¾æİ¥ åĪĻ çĽ´æİ¥ è¿ĶåĽŀ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Host . isNull Or Blank ()) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// æłĪ åºķ éĵ¾æİ¥ ä¸įæĺ¯ åİŁå§ĭ éĵ¾æİ¥ åĪĻ çĽ´æİ¥ è¿ĶåĽŀ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( original Url Ġ!= Ġcurrent Url ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcan Back ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcan Go Forward (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcan Forward Ġ= ĠwebView . can Go Forward () ĊĠĠĠĠĠĠĠ Ġif Ġ( can Forward ) ĠwebView . go Forward () ĊĠĠĠĠĠĠĠ Ġreturn Ġcan Forward ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Url ( url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠwebView . load Url ( url ) ĊĠĠĠĠĠĠĠ Ġoriginal Url Ġ= Ġurl ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreload () Ġ{ ĊĠĠĠĠĠĠĠ ĠwebView . reload () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ ĠwebView . on Resume () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ ĠwebView . on Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ ĠWebView Manager . recycle ( web View ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcan Assets Resource ( web Request : ĠWeb Resource Request ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġweb Request . url . toString () ĊĠĠĠĠĠĠĠ Ġreturn Ġurl . startsWith (" file :/// android _ asset /") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcan Cache Resource ( web Request : ĠWeb Resource Request ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġweb Request . url . toString () ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġget Extension From Url ( url ) ĊĠĠĠĠĠĠĠ Ġreturn Ġextension Ġ== Ġ" ico " Ġ|| Ġextension Ġ== Ġ" bmp " Ġ|| Ġextension Ġ== Ġ" gif " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġextension Ġ== Ġ" jpeg " Ġ|| Ġextension Ġ== Ġ" jpg " Ġ|| Ġextension Ġ== Ġ" png " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġextension Ġ== Ġ" svg " Ġ|| Ġextension Ġ== Ġ" webp " Ġ|| Ġextension Ġ== Ġ" css " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġextension Ġ== Ġ" js " Ġ|| Ġextension Ġ== Ġ" json " Ġ|| Ġextension Ġ== Ġ" e ot " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġextension Ġ== Ġ" ot f " Ġ|| Ġextension Ġ== Ġ" ttf " Ġ|| Ġextension Ġ== Ġ" woff " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassets Resource Request ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġweb Request : ĠWeb Resource Request ĊĠĠĠ Ġ): ĠWeb Resource Response ? Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġweb Request . url . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilename Index Ġ= Ġurl . lastIndexOf ("/") Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilename Ġ= Ġurl . substring ( filename Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuffix Index Ġ= Ġurl . lastIndexOf (".") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuffix Ġ= Ġurl . substring ( suffix Index Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweb Resource Response Ġ= ĠWeb Resource Response () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb Resource Response . mime Type Ġ= Ġget MimeType From Url ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb Resource Response . encoding Ġ= Ġ" UTF - 8 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb Resource Response . data Ġ= Ġcontext . assets . open ("$ suffix /$ filename ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb Resource Response . response Headers Ġ= Ġmap Of (" access - control - allow - origin " Ġto Ġ"* ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġweb Resource Response ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcache Resource Request ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġweb Request : ĠWeb Resource Request ĊĠĠĠ Ġ): ĠWeb Resource Response ? Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġweb Request . url . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcache Path Ġ= ĠCache Utils . getCache DirPath ( context , Ġ" web _ cache ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfilePath Name Ġ= Ġcache Path Ġ+ ĠFile . separator Ġ+ Ġurl . encode Utf 8 (). md 5 (). hex () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( filePath Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! file . exists () Ġ|| Ġ! file . isFile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload ( HttpRequest ( url ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweb Request . request Headers . forEach Ġ{ Ġput Header ( it . key , Ġit . value ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĠfilePath Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . exists () Ġ&& Ġfile . isFile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweb Resource Response Ġ= ĠWeb Resource Response () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweb Resource Response . mime Type Ġ= Ġget MimeType From Url ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweb Resource Response . encoding Ġ= Ġ" UTF - 8 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweb Resource Response . data Ġ= Ġfile . inputStream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweb Resource Response . response Headers Ġ= Ġmap Of (" access - control - allow - origin " Ġto Ġ"* ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġweb Resource Response ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Extension From Url ( url : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( url . isNotBlank () Ġ&& Ġurl Ġ!= Ġ" null ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġurl ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. substring Before Last ('# ') Ġ// ĠStrip Ġthe Ġfragment . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. substring Before Last (' ?') Ġ// ĠStrip Ġthe Ġquery . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. substring After Last ('/') Ġ// ĠGet Ġthe Ġlast Ġpath Ġsegment . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. substring After Last ('.', Ġmissing Delimiter Value Ġ= Ġ"") Ġ// ĠGet Ġthe Ġfile Ġextension . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMime TypeMap . getFile Extension From Url ( extension ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget MimeType From Url ( url : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġget Extension From Url ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extension . isNotBlank () Ġ&& Ġextension Ġ!= Ġ" null ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extension Ġ== Ġ" json ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" application / json " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMime TypeMap . get Singleton (). get MimeType From Extension ( extension ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"* /* " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn Page Changed Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Page Started ( view : ĠWebView ?, Ġurl : ĠString ?, Ġfav icon : ĠBitmap ?) ĊĠĠĠĠĠĠĠ Ġfun Ġon Page Finished ( view : ĠWebView ?, Ġurl : ĠString ?) ĊĠĠĠĠĠĠĠ Ġfun Ġon Progress Changed ( view : ĠWebView ?, Ġnew Progress : ĠInt ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Suppress Lint (" Set JavaScript Enabled ") Ċ class ĠWebView Manager Ġprivate Ġconstructor () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Volatile ĊĠĠĠĠĠĠĠ Ġprivate Ġvar ĠINSTANCE : ĠWebView Manager ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġinstance () Ġ= ĠINSTANCE Ġ?: Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINSTANCE Ġ?: ĠWebView Manager (). also Ġ{ ĠINSTANCE Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġprepare ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance (). prepare ( context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġobtain ( context : ĠContext ): ĠWebView Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance (). obtain ( context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġre cycle ( web View : ĠWebView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance (). recycle ( web View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance (). destroy () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠwebView Cache : ĠMutable List < WebView > Ġ= ĠArrayList ( 1 ) ĊĊĠĠĠ Ġprivate Ġfun Ġcreate ( context : ĠContext ): ĠWebView Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠwebView Ġ= ĠWebView ( context ) ĊĠĠĠĠĠĠĠ ĠwebView . set BackgroundColor ( Color . TRANSP ARENT ) ĊĠĠĠĠĠĠĠ ĠwebView . view . set BackgroundColor ( Color . TRANSP ARENT ) ĊĠĠĠĠĠĠĠ ĠwebView . over Scroll Mode Ġ= ĠWebView . OVER _ SCROLL _ NE VER ĊĠĠĠĠĠĠĠ ĠwebView . view . over Scroll Mode Ġ= ĠWebView . OVER _ SCROLL _ NE VER ĊĠĠĠĠĠĠĠ Ġval Ġweb Setting Ġ= ĠwebView . settings ĊĠĠĠĠĠĠĠ Ġweb Setting . allow File Access Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġweb Setting . set App Cache Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġweb Setting . cache Mode Ġ= ĠWeb Settings . LOAD _ DEFAULT ĊĠĠĠĠĠĠĠ Ġweb Setting . dom Storage Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġweb Setting . set Geo location Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġweb Setting . java Script Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġweb Setting . load With Overview Mode Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġweb Setting . set Support Zoom ( true ) ĊĠĠĠĠĠĠĠ Ġweb Setting . display Zoom Controls Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġweb Setting . use Wide View Port Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb Setting . mixed Content Mode Ġ= Ġandroid . webkit . Web Settings . MIX ED _ CONTENT _ ALWAYS _ ALLOW ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCookie Manager . getInstance (). set Accept Third Party Cookies ( web View , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠwebView . settings Extension ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Content Cache Enable ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Page Cache Capacity ( IX 5 Web Settings . DEFAULT _ CACHE _ CAP ACITY ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠwebView ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprepare ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( web View Cache . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠL ooper . my Queue (). add Idle Handler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView Cache . add ( create ( Mutable Context Wrapper ( context ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġobtain ( context : ĠContext ): ĠWebView Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( web View Cache . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView Cache . add ( create ( Mutable Context Wrapper ( context ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠwebView Ġ= ĠwebView Cache . remove First () ĊĠĠĠĠĠĠĠ Ġval Ġcontext Wrapper Ġ= ĠwebView . context Ġas ĠMutable Context Wrapper ĊĠĠĠĠĠĠĠ Ġcontext Wrapper . base Context Ġ= Ġcontext ĊĠĠĠĠĠĠĠ ĠwebView . clear History () ĊĠĠĠĠĠĠĠ ĠwebView . resume Timers () ĊĠĠĠĠĠĠĠ Ġreturn ĠwebView ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġre cycle ( web View : ĠWebView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . stop Loading () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . load Data With Base URL ( null , Ġ"", Ġ" text / html ", Ġ" utf - 8 ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . clear History () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . pause Timers () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . web Chrome Client Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . web View Client Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= ĠwebView . parent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( parent Ġas ĠViewGroup ). remove View ( web View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! web View Cache . contains ( web View )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView Cache . add ( web View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView Cache . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . removeAll Views () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView Cache . remove ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }