/* Ċ Ġ* ĠUnless Ġexplicitly Ġstated Ġotherwise Ġall Ġfiles Ġin Ġthis Ġrepository Ġare Ġlicensed Ġunder Ġthe ĠApache ĠLicense ĠVersion Ġ 2 . 0 . Ċ Ġ* ĠThis Ġproduct Ġincludes Ġsoftware Ġdeveloped Ġat ĠDat adog Ġ( https :// www . datadog hq . com /). Ċ Ġ* ĠCopyright Ġ 2 0 1 6 - 2 0 1 9 ĠDat adog , ĠInc . Ċ Ġ*/ Ċ package Ġcom . datadog . android . sample . webview Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . net . http . Ssl Error Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . webkit . Console Message Ċ import Ġandroid . webkit . Js Result Ċ import Ġandroid . webkit . Ssl ErrorHandler Ċ import Ġandroid . webkit . Web Chrome Client Ċ import Ġandroid . webkit . Web Resource Error Ċ import Ġandroid . webkit . Web Resource Request Ċ import Ġandroid . webkit . Web Resource Response Ċ import Ġandroid . webkit . WebView Ċ import Ġandroid . webkit . WebView Client Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġcom . datadog . android . log . Logger Ċ import Ġcom . datadog . android . sample . Build Config Ċ import Ġcom . datadog . android . sample . R Ċ Ċ class ĠWeb Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠWeb ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠwebView : ĠWebView ĊĊĠĠĠ Ġprivate Ġval Ġlogger : ĠLogger Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ServiceName (" android - sample - kotlin ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Logger Name (" web _ fragment ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Network Info Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Log cat Logs Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Tag (" flavor ", ĠBuild Config . FL AV OR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Tag (" build _ type ", ĠBuild Config . BUILD _ TYPE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġregion ĠFragment ĠLifecycle ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot View Ġ= Ġinflater . inflate ( R . layout . fragment _ web , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ ĠwebView Ġ= Ġroot View . findViewById ( R . id . webview ) ĊĠĠĠĠĠĠĠ ĠwebView . web View Client Ġ= Ġm WebView Client ĊĠĠĠĠĠĠĠ ĠwebView . web Chrome Client Ġ= Ġweb Chrome Client ĊĠĠĠĠĠĠĠ Ġreturn Ġroot View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Providers . of ( this ). get ( Web ViewModel :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ ĠwebView . load Url ( viewModel . url ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġend region ĊĊĠĠĠ Ġ// Ġregion ĠWebView Client ĊĊĠĠĠ Ġprivate Ġval Ġm WebView Client : ĠWebView Client Ġ= Ġobject Ġ: ĠWebView Client () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Started ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠWebView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfav icon : ĠBitmap ? ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Page Started ( view , Ġurl , Ġfav icon ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" on Page Started ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" http . url " Ġto Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Finished ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠWebView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl : ĠString ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Page Finished ( view , Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" on Page Finished ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" http . url " Ġto Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad Resource ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠWebView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl : ĠString ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Load Resource ( view , Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" loading Ġresource ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" http . url " Ġto Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . M ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Received Error ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠWebView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest : ĠWeb Resource Request , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror : ĠWeb Resource Error ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Received Error ( view , Ġrequest , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" received Ġerror ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http . request . method " Ġto Ġrequest . method , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http . url " Ġto Ġrequest . url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http . error . code " Ġto Ġerror . errorCode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http . error . description " Ġto Ġerror . description ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . LO L LI POP ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Received Http Error ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠWebView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest : ĠWeb Resource Request , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Response : ĠWeb Resource Response ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Received Http Error ( view , Ġrequest , Ġerror Response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" received ĠHTTP Ġerror ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http . request . method " Ġto Ġrequest . method , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http . url " Ġto Ġrequest . url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http . error . code " Ġto Ġerror Response . statusCode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http . error . description " Ġto Ġerror Response . reason Phrase ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Received Ssl Error ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠWebView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler : ĠS sl ErrorHandler , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror : ĠS sl Error ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Received Ssl Error ( view , Ġhandler , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" received ĠSSL Ġerror ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http . url " Ġto Ġerror . url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http . error . code " Ġto Ġerror . primary Error ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġend region ĊĊĠĠĠ Ġ// Ġregion ĠWeb Chrome Client ĊĊĠĠĠ Ġprivate Ġval Ġweb Chrome Client : ĠWeb Chrome Client Ġ= Ġobject Ġ: ĠWeb Chrome Client () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠWebView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Progress : ĠInt ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Progress Changed ( view , Ġnew Progress ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . v (" on Progress Changed ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Received Title ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠWebView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle : ĠString ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Received Title ( view , Ġtitle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . v ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" on Received Title ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" webview . title " Ġto Ġtitle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Received Icon ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠWebView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon : ĠBitmap ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Received Icon ( view , Ġicon ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . v (" event : Ġon Received Icon ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Js Alert ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠWebView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult : ĠJs Result ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . w ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" on Js Alert ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http . url " Ġto Ġurl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" webview . alert . message " Ġto Ġmessage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" webview . alert . result " Ġto Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Js Alert ( view , Ġurl , Ġmessage , Ġresult ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Console Message ( console Message : ĠConsole Message ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlevel Ġ= Ġwhen Ġ( console Message . message Level ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConsole Message . Message Level . TIP Ġ-> ĠLog . INFO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConsole Message . Message Level . LOG Ġ-> ĠLog . VERBOSE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConsole Message . Message Level . WARNING Ġ-> ĠLog . WARN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConsole Message . Message Level . ERROR Ġ-> ĠLog . ERROR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConsole Message . Message Level . DEBUG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> ĠLog . DEBUG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . log ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" on Console Message ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" webview . console . message " Ġto Ġconsole Message . message ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Console Message ( console Message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġregion ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance (): ĠWeb Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠWeb Fragment () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ