package Ġcom . web add ict ed . kotlin project . view . activity Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . view . KeyEvent Ċ import Ġandroid . view . View Ċ import Ġandroid . webkit .* Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . databinding . ViewData Binding Ċ import Ġcom . web add ict ed . kotlin project . R Ċ import Ġcom . web add ict ed . kotlin project . databinding . Activity Web view Binding Ċ import Ġcom . web add ict ed . kotlin project . global . common .* Ċ import Ġcom . web add ict ed . kotlin project . global . misc . Web Chrome Client Test Ċ import Ġcom . web add ict ed . kotlin project . view . base . Base Activity ĊĊ Ċ class ĠWebView Activity Ġ: ĠBase Activity ( R . layout . activity _ webview ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġurl : ĠString Ġ= Ġ" http :// www . google . com " ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Binding : ĠActivity Web view Binding ĊĠĠĠ Ġval ĠINPUT _ FILE _ REQUEST _ CODE Ġ= Ġ 1 ĊĠĠĠ Ġvar Ġm Upload Message : ĠValue Callback < Array < Uri >> ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġm Camera Photo Path : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠTAG Ġ= ĠWebView Activity :: class . qualified Name ĊĠĠĠĠĠĠĠ Ġfun Ġnew Intent ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( Intent ( context , ĠWebView Activity :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind To ( binding : ĠView Data Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Binding Ġ= Ġbinding Ġas ĠActivity Web view Binding ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠĠĠĠĠ Ġclick Listener () ĊĠĠĠĠĠĠĠ Ġcheck Storage Permission () ĊĠĠĠĠĠĠĠ Ġnormal WebView ( m Binding . webview ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Binding . toolbar . img Back . visible () ĊĠĠĠĠĠĠĠ Ġm Binding . toolbar . txt Toolbar Title . text Ġ= Ġresources . getString ( R . string . webview _ title ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclick Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Binding . toolbar . img Back . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġm Binding . btn Normal Web view . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġm Binding . btn Web Click . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġm Binding . btn Web File Choose . setOnClickListener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onClick ( v ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( v . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . img _ back Ġ-> Ġon Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . btn _ normal _ webview Ġ-> Ġnormal WebView ( m Binding . webview ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . btn _ web _ click Ġ-> Ġweb Interface ( m Binding . webview ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . btn _ web _ file _ choose Ġ-> Ġchoose Image WebView Url ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . webview , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// en . img bb . com /" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon KeyDown ( keyCode : ĠInt , Ġevent : ĠKeyEvent ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( keyCode Ġ== ĠKeyEvent . KEYCODE _ BACK Ġ&& Ġthis . m Binding . webview . can Go Back ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Binding . webview . go Back () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on KeyDown ( keyCode , Ġevent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnormal WebView ( web View : ĠWebView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠwebView . settings . java Script Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠwebView . settings . load With Overview Mode Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠwebView . settings . use Wide View Port Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠwebView . is Scrollbar F ading Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠwebView . is Vertical ScrollBar Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠwebView . web View Client Ġ= Ġmy Test Browser () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . load Url ( url ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġweb Interface ( web View : ĠWebView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Binding . toolbar . img Back . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġm Binding . toolbar . txt Toolbar Title . text Ġ= Ġresources . getString ( R . string . webview _ title ) ĊĠĠĠĠĠĠĠ ĠwebView . settings . loads Images Autom atically Ġ= Ġtrue Ċ // ĠĠĠĠĠĠĠ ĠwebView . settings . set UserAgent String (" android "); ĊĠĠĠĠĠĠĠ ĠwebView . scroll Bar Style Ġ= ĠView . SCROLL BAR S _ INS IDE _ OVER LAY ĊĠĠĠĠĠĠĠ ĠwebView . settings . java Script Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠwebView . settings . load With Overview Mode Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠwebView . settings . use Wide View Port Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠwebView . is Scrollbar F ading Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠwebView . is Vertical ScrollBar Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠwebView . add Javascript Interface ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeb App Interface ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġ" android " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠwebView . web View Client Ġ= Ġmy Test Browser () ĊĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġ"< ! DOCTYPE Ġhtml >\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< html >\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< body >\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< h 2 > Sample ĠHTML ĠPage </ h 2 >\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< input Ġtype =\" button \" Ġvalue =\" Say Ġhello \" ĠonClick =\" show Android Toast (' Hello ĠAndroid !') \" Ġ/>\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< script Ġtype =\" text / javascript \">\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġfunction Ġshow Android Toast ( toast ) Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġandroid . show Toast ( toast );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ}\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"</ script >\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"</ body >\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"</ html >" ĊĠĠĠĠĠĠĠ ĠwebView . load Data ( str , Ġ" text / html ", Ġ" utf - 8 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass Ġmy Test Browser Ġ: ĠWebView Client () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshould Override Url Loading ( view : ĠWebView , Ġurl : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . load Url ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Started ( view : ĠWebView ?, Ġurl : ĠString ?, Ġfav icon : ĠBitmap ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . progress Bar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Page Started ( view , Ġurl , Ġfav icon ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Finished ( view : ĠWebView ?, Ġurl : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . progress Bar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Page Finished ( view , Ġurl ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠInstantiate Ġthe Ġinterface Ġand Ġset Ġthe Ġcontext Ġ Ġ*/ ĊĠĠĠ Ġclass ĠWeb App Interface ( private Ġval ĠmContext : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠShow Ġa Ġtoast Ġfrom Ġthe Ġweb Ġpage Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Javascript Interface ĊĠĠĠĠĠĠĠ Ġfun Ġshow Toast ( toast : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( mContext , Ġtoast , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġshow Ġresponse Ġurl Ġon Ġweb view ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠwebView ĠĠĠ Ġview ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent Url Ġweb view Ġurl ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġchoose Image WebView Url ( activity : ĠActivity ?, ĠwebView : ĠWebView , Ġcontent Url : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcookie Manager Ġ= ĠCookie Manager . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcookie Manager . removeAll Cookies ( Value Callback < Boolean > Ġ{ Ġa Boolean Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġa Ġcallback Ġwhich Ġis Ġexecuted Ġwhen Ġthe Ġcookies Ġhave Ġbeen Ġremoved Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( Fragment Activity . TAG , Ġ" Cookie Ġremoved : Ġ" Ġ+ Ġa Boolean !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcookie Manager . removeAll Cookie () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . settings . java Script Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . settings . load With Overview Mode Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . settings . use Wide View Port Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . is Scrollbar F ading Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . is Vertical ScrollBar Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . settings . userAgent String Ġ= Ġ" android " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . settings . set App Cache Enabled ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . settings . dom Storage Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . clear Cache ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . settings . plugin State Ġ= ĠWeb Settings . Plugin State . ON ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . settings . set Support Zoom ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . settings . allow File Access Ġ= Ġ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . settings . allow Content Access Ġ= Ġ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . set Layer Type ( View . LAYER _ TYPE _ HARD WARE , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . get Settings (). Access Ġ= Ġ( true ); ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . web Chrome Client Ġ= ĠWeb Chrome Client Test ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . web View Client Ġ= Ġmy Test Browser () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Url ?. let Ġ{ ĠwebView . load Url ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ!= ĠINPUT _ FILE _ REQUEST _ CODE Ġ|| Ġm Upload Message Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Utility . print ( TAG , Ġ" when Ġuser Ġcancel Ġthen Ġreset Ġweb Ġchrome Ġclient ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . webview . web Chrome Client Ġ= ĠWeb Chrome Client Test ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Upload Message ?. on Receive Value ( array Of ( Uri . parse (" "))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data ?. data Ġ!= Ġnull Ġ|| Ġdata ?. clip Data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfiles Ġ= ĠMedia Picker Helper (). getData ( this , Ġdata ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarray Lists Ġ= ĠArray ( files . size ) Ġ{ Ġi Ġ-> ĠUri . from File ( files [ i ]) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" selected Ġimage Ġsize Ġ- Ġ" Ġ+ Ġfiles . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Upload Message ?. on Receive Value ( array Lists ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Upload Message ?. on Receive Value ( array Of ( Uri . parse ( m Camera Photo Path ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" captured Ġimage Ġ- Ġ$ m Camera Photo Path ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠL g . e (" Error !", Ġ" Error Ġwhile Ġopening Ġimage Ġfile : Ġ${ e . localized Message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Upload Message ?. on Receive Value ( array Of ( Uri . parse (" "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Upload Message Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Upload Message Ġ= Ġnull ĊĠĠĠ Ġ} Ċ } ĊĊ