package Ġandroid . print Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Parcel FileDescriptor Ċ import Ġandroid . util . Log Ċ import Ġandroid . webkit . WebView Ċ import Ġandroid . webkit . WebView Client Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġorg . erg flow . activity . C ACHED _ REPORT Ċ import Ġorg . erg flow . activity . REPORT _ TIMESTAMP Ċ import Ġorg . erg flow . activity . WEB VIEW _ URL Ċ import Ġorg . erg flow . activity . databinding . Ef Activity Web view Binding Ċ import Ġjava . io . File Ċ Ċ const Ġval ĠWRITE _ REQUEST _ CODE Ġ= Ġ 1 0 1 Ċ const Ġval ĠTAG Ġ= Ġ" WebView Activity " Ċ Ċ /*** Ċ Ġ* ĠActivity Ġfor Ġdisplaying Ġthe Ġhtml Ġreports . Ċ Ġ*/ Ċ class ĠWebView Activity Ġ: ĠActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠE f Activity Web view Binding ĊĠĠĠ Ġprivate Ġvar Ġreport Timestamp : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcached Html Report Path : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcached Pdf Report Path : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġval Ġpdf Print Attrs : ĠPrint Attributes Ġ= ĠPrint Attributes . Builder () ĊĠĠĠĠĠĠĠ Ġ. set Media Size ( Print Attributes . Media Size . NA _ GO VT _ LET TER . as Land scape ()) ĊĠĠĠĠĠĠĠ Ġ. set Resolution ( Print Attributes . Resolution (" RESOL UTION _ ID ", Ġ" RESOL UTION _ ID ", Ġ 6 0 0 , Ġ 6 0 0 )) ĊĠĠĠĠĠĠĠ Ġ. set Min Margins ( Print Attributes . Margins . NO _ M ARG INS ) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġprivate Ġval Ġoutput FileDescriptor : ĠParcel FileDescriptor ? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpdf File Ġ= ĠFile ( cached Pdf Report Path !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpdf File . createNew File () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠParcel FileDescriptor . open ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpdf File , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParcel FileDescriptor . MODE _ TRUNC ATE Ġor ĠParcel FileDescriptor . MODE _ READ _ WRITE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Failed Ġto Ġopen ĠParcel FileDescriptor ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠE f Activity Web view Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ Ġval ĠwebView Ġ= Ġbinding . root ĊĠĠĠĠĠĠĠ ĠwebView . web View Client Ġ= Ġobject Ġ: ĠWebView Client () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Finished ( view : ĠWebView , Ġurl : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocument Adapter Ġ= ĠwebView . create Print Document Adapter (" E rg Flow ĠReport ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocument Adapter . on Layout ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpdf Print Attrs , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠPrint Document Adapter . Layout Result Callback () Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocument Adapter . on Write ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Page Range . ALL _ PAGES ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput FileDescriptor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠPrint Document Adapter . Write Result Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Write Finished ( pages : ĠArray < Page Range >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Finished Ġwriting Ġ${ pages . size } Ġpages ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠsetContentView ( web View ) ĊĠĠĠĠĠĠĠ Ġval Ġsettings Ġ= ĠwebView . settings ĊĠĠĠĠĠĠĠ Ġsettings . allow File Access Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠĠĠĠĠ Ġsettings . allow File Access FromFile URLs Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠĠĠĠĠ Ġsettings . allow Universal Access FromFile URLs Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġsettings . built In Zoom Controls Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġsettings . display Zoom Controls Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġsettings . load With Overview Mode Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġsettings . use Wide View Port Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠwebView . setInitial Scale ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġintent . getString Extra ( WEB VIEW _ URL ) ĊĠĠĠĠĠĠĠ Ġreport Timestamp Ġ= Ġintent . getString Extra ( REPORT _ TIMESTAMP ) ĊĠĠĠĠĠĠĠ Ġcached Html Report Path Ġ= Ġintent . getString Extra ( C ACHED _ REPORT ) ĊĠĠĠĠĠĠĠ Ġcached Pdf Report Path Ġ= Ġcached Html Report Path ?. replace (" html ", Ġ" pdf ") ĊĠĠĠĠĠĠĠ ĠwebView . load Url (" file :// $ path ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠ Ġbuilder . setMessage (" Save Ġreport ?") ĊĊĠĠĠĠĠĠĠ Ġbuilder . set Positive Button (" Yes ") Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Save Ġreport Ġ$ report Timestamp ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ CREATE _ DOCUMENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . add Category ( Intent . CATEGORY _ OP ENABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . type Ġ= Ġ" application / pdf " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Intent . EXTRA _ TITLE , Ġ" E rg Flow Report _$ report Timestamp . pdf ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠWRITE _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbuilder . set Negative Button (" No ") Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Cancel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Cached Report () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbuilder . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Cached Report () Ġ{ ĊĠĠĠĠĠĠĠ Ġcached Html Report Path ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( this ). delete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠWRITE _ REQUEST _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRESULT _ OK Ġ-> Ġdata ?. data ?. let Ġ{ Ġuri Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcached Pdf Report Path ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠFile ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( source . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Saving Ġ${ source . absolute Path } Ġto Ġ$ uri ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver ?. open OutputStream ( uri )?. use Ġ{ Ġout Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource . inputStream (). use Ġ{ Ġit . copy To ( out ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource . parent File ?. delete Re cursively () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Source Ġ${ source . absolute Path } Ġdoes Ġnot Ġexist ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" Unable Ġto Ġsave Ġthe Ġreport ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRESULT _ C ANCE LED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShows Ġa Ġ[ Toast ] Ġon Ġthe ĠUI Ġthread . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtext ĠThe Ġmessage Ġto Ġshow ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġshow Toast (@ Suppress (" Same Parameter Value ") Ġtext : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĠToast . makeText ( this , Ġtext , ĠToast . LENGTH _ SHORT ). show () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠTag Ġfor Ġthe Ġ[ Log ]. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" WebView Activity " ĊĠĠĠ Ġ} Ċ } Ċ