/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . example . android . action opend ocument Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap . create Bitmap Ċ import Ġandroid . graphics . pdf . Pdf Renderer Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . core . net . to Uri Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġjava . io . FileDescriptor Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* ĠThis Ġfragment Ġhas Ġa Ġbig Ġ[ ImageView ] Ġthat Ġshows ĠPDF Ġpages , Ġand Ġ 2 Ġ[ Button ] s Ġto Ġmove Ġbetween Ġpages . Ċ Ġ* ĠWe Ġuse Ġa Ġ[ Pdf Renderer ] Ġto Ġrender ĠPDF Ġpages Ġas Ġ[ Bitmap ] s . Ċ Ġ*/ Ċ class ĠAction Open Document Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpdf Renderer : ĠPdf Renderer ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠcurrentPage : ĠPdf Renderer . Page ĊĠĠĠ Ġprivate Ġvar ĠcurrentPage Number : ĠInt Ġ= ĠINITIAL _ PAGE _ INDEX ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpdf Page View : ĠImageView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġprevious Button : ĠButton ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnext Button : ĠButton ĊĊĠĠĠ Ġval Ġpage Count Ġget () Ġ= Ġpdf Renderer . page Count ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDOCUMENT _ URI _ ARGUMENT Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" com . example . android . action opend ocument . args . DOCUMENT _ URI _ ARGUMENT " ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( document Uri : ĠUri ): ĠAction Open Document Fragment Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAction Open Document Fragment (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( DOCUMENT _ URI _ ARGUMENT , Ġdocument Uri . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ pdf _ renderer _ basic , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġpdf Page View Ġ= Ġview . findViewById ( R . id . image ) ĊĠĠĠĠĠĠĠ Ġprevious Button Ġ= Ġview . findViewById < Button >( R . id . previous ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Page ( currentPage . index Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnext Button Ġ= Ġview . findViewById < Button >( R . id . next ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Page ( currentPage . index Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthere Ġis Ġa ĠsavedInstanceState Ġ( screen Ġorient ations , Ġetc .), Ġwe Ġrestore Ġthe Ġpage Ġindex . ĊĠĠĠĠĠĠĠ ĠcurrentPage Number Ġ= ĠsavedInstanceState ?. getInt ( CURRENT _ PAGE _ INDEX _ KEY , ĠINITIAL _ PAGE _ INDEX ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠINITIAL _ PAGE _ INDEX ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĊĠĠĠĠĠĠĠ Ġval Ġdocument Uri Ġ= Ġarguments ?. getString ( DOCUMENT _ URI _ ARGUMENT )?. to Uri () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Renderer ( activity , Ġdocument Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Page ( currentPage Number ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( io Exception : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Exception Ġopening Ġdocument ", Ġio Exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Renderer () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( io Exception : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Exception Ġclosing Ġdocument ", Ġio Exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġout State . put Int ( CURRENT _ PAGE _ INDEX _ KEY , ĠcurrentPage . index ) ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġup Ġa Ġ[ Pdf Renderer ] Ġand Ġrelated Ġresources . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġopen Renderer ( context : ĠContext ?, Ġdocument Uri : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠIt Ġmay Ġbe Ġtemp ting Ġto Ġuse Ġ` use ` Ġhere , Ġbut Ġ[ Pdf Renderer ] Ġexpects Ġto Ġtake Ġownership ĊĠĠĠĠĠĠĠĠ Ġ* Ġof Ġthe Ġ[ FileDescriptor ], Ġand , Ġif Ġwe Ġdid Ġuse Ġ` use `, Ġit Ġwould Ġbe Ġauto - closed Ġat Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġend Ġof Ġthe Ġblock , Ġprevent ing Ġus Ġfrom Ġrendering Ġadditional Ġpages . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠfileDescriptor Ġ= Ġcontext . content Resolver . open FileDescriptor ( document Uri , Ġ" r ") Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġthe ĠPdf Renderer Ġwe Ġuse Ġto Ġrender Ġthe ĠPDF . ĊĠĠĠĠĠĠĠ Ġpdf Renderer Ġ= ĠPdf Renderer ( file Descriptor ) ĊĠĠĠĠĠĠĠ ĠcurrentPage Ġ= Ġpdf Renderer . open Page ( currentPage Number ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCloses Ġthe Ġ[ Pdf Renderer ] Ġand Ġrelated Ġresources . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIOException ĠWhen Ġthe ĠPDF Ġfile Ġcannot Ġbe Ġclosed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġclose Renderer () Ġ{ ĊĠĠĠĠĠĠĠ ĠcurrentPage . close () ĊĠĠĠĠĠĠĠ Ġpdf Renderer . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShows Ġthe Ġspecified Ġpage Ġof ĠPDF Ġto Ġthe Ġscreen . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġway Ġ[ Pdf Renderer ] Ġworks Ġis Ġthat Ġit Ġallows Ġfor Ġ" opening " Ġa Ġpage Ġwith Ġthe Ġmethod ĊĠĠĠĠ Ġ* Ġ[ Pdf Renderer . open Page ], Ġwhich Ġtakes Ġa Ġ( 0 Ġbased ) Ġpage Ġnumber Ġto Ġopen . ĠThis Ġreturns ĊĠĠĠĠ Ġ* Ġa Ġ[ Pdf Renderer . Page ] Ġobject , Ġwhich Ġrepresents Ġthe Ġcontent Ġof Ġthis Ġpage . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThere Ġare Ġtwo Ġways Ġto Ġrender Ġthe Ġcontent Ġof Ġa Ġ[ Pdf Renderer . Page ]. ĊĠĠĠĠ Ġ* Ġ[ Pdf Renderer . Page . RENDER _ MODE _ FOR _ PRINT ] Ġand Ġ[ Pdf Renderer . Page . RENDER _ MODE _ FOR _ DISPLAY ]. ĊĠĠĠĠ Ġ* ĠSince Ġwe 're Ġdisplaying Ġthe Ġdata Ġon Ġthe Ġscreen Ġof Ġthe Ġdevice , Ġwe 'll Ġuse Ġthe Ġlater . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġindex ĠThe Ġpage Ġindex . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġshow Page ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġ 0 Ġ|| Ġindex Ġ>= Ġpdf Renderer . page Count ) Ġreturn ĊĊĠĠĠĠĠĠĠ ĠcurrentPage . close () ĊĠĠĠĠĠĠĠ ĠcurrentPage Ġ= Ġpdf Renderer . open Page ( index ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠImport ant : Ġthe Ġdestination Ġbitmap Ġmust Ġbe ĠAR GB Ġ( not ĠRGB ). ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= Ġcreate Bitmap ( currentPage . width , ĠcurrentPage . height , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĊĠĠĠĠĠĠĠ ĠcurrentPage . render ( bitmap , Ġnull , Ġnull , ĠPdf Renderer . Page . RENDER _ MODE _ FOR _ DISPLAY ) ĊĠĠĠĠĠĠĠ Ġpdf Page View . setImage Bitmap ( bitmap ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpage Count Ġ= Ġpdf Renderer . page Count ĊĠĠĠĠĠĠĠ Ġprevious Button . isEnabled Ġ= Ġ( 0 Ġ!= Ġindex ) ĊĠĠĠĠĠĠĠ Ġnext Button . isEnabled Ġ= Ġ( index Ġ+ Ġ 1 Ġ< Ġpage Count ) ĊĠĠĠĠĠĠĠ Ġactivity ?. title Ġ= ĠgetString ( R . string . app _ name _ with _ index , Ġindex Ġ+ Ġ 1 , Ġpage Count ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠKey Ġstring Ġfor Ġsaving Ġthe Ġstate Ġof Ġcurrent Ġpage Ġindex . Ċ Ġ*/ Ċ private Ġconst Ġval ĠCURRENT _ PAGE _ INDEX _ KEY Ġ= ĊĠĠĠ Ġ" com . example . android . action opend ocument . state . CURRENT _ PAGE _ INDEX _ KEY " Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" Action Open Document Fragment " Ċ private Ġconst Ġval ĠINITIAL _ PAGE _ INDEX Ġ= Ġ 0 ĊĊ