package Ġcom . dom burg . new note Ċ Ċ import Ġandroid . content . Content Resolver Ċ import Ġandroid . content . Context Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . net . Uri Ċ import Ġandroid . provider . Documents Contract Ċ import Ġandroid . widget . Toast Ċ import Ġcom . dom burg . new note . utils . Fast File Ċ import Ġjava . util .* Ċ Ċ class ĠBook List ( val Ġdir : ĠFast File , Ġval Ġresolver : ĠContent Resolver ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġshow Message ( ctx : ĠContext , Ġmsg Ġ: ĠString ) Ġ= ĠToast . makeText ( ctx , Ġmsg , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ class ĠBook ( val Ġbook Dir : ĠFast File , Ġval Ġpages : ĠList < Fast File >, Ġval Ġbg Image : ĠFast File ?) Ġ{ ĊĠĠĠ Ġfun Ġadd Page () Ġ: ĠBook Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġpage Ġname Ġstart Ġform Ġ 0 ! ĊĠĠĠĠĠĠĠ Ġval Ġpng File Ġ= ĠBook Page . create Empty File ( book Dir , Ġpages . size ) ĊĠĠĠĠĠĠĠ Ġreturn ĠBook ( book Dir , Ġpages Ġ+ Ġpng File , Ġbg Image ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Page ( idx : ĠInt ) Ġ= ĠBook Page ( pages [ idx ], Ġidx ) ĊĊĠĠĠ Ġ// ĠAssign Ġdummy Ġsize Ġso Ġthat Ġfile . isEmpty Ġbecomes Ġfalse . ĊĠĠĠ Ġ// ĠWe Ġdoesn 't Ġcare Ġactual Ġsize , Ġjust Ġcheck Ġwhether Ġit 's Ġempty Ġor Ġnot . ĊĠĠĠ Ġ// ĠSo Ġassign Ġnon - zero Ġvalue Ġis Ġenough Ġfor Ġour Ġpurpose . ĊĠĠĠ Ġfun Ġassign Non Empty ( page Idx : ĠInt ): ĠBook Ġ{ ĊĠĠĠĠĠĠĠ Ġif (! getPage ( page Idx ). file . isEmpty ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ Ġpages . map Indexed Ġ{ Ġidx , Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( idx Ġ!= Ġpage Idx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . copy ( size = 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ}. toList (). let Ġ{ ĠBook ( book Dir , Ġit , Ġbg Image ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġname Ġ: ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbook Dir . name Ċ } ĊĊ Ċ data Ġclass ĠBook Page ( val Ġfile : ĠFast File , Ġval Ġidx : ĠInt ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġnew Page Name ( page Idx : ĠInt ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"% 0 4 d . png ". format ( page Idx ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Empty File ( book Dir : ĠFast File , Ġidx : ĠInt ) Ġ: ĠFast File Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġnew Page Name ( idx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbook Dir . create File (" image / png ", ĠfileName ) Ġ?: Ġthrow ĠException (" Can 't Ġcreate Ġfile Ġ$ fileName ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠBook IO ( private Ġval Ġresolver : ĠContent Resolver ) Ġ{ ĊĠĠĠ Ġprivate Ġfun Ġload Bitmap ( file : ĠFast File ) Ġ: ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġresolver . open FileDescriptor ( file . uri , Ġ" r "). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Factory . decode FileDescriptor ( it !!. file Descriptor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Thumbnail ( ĊĠĠĠĠĠĠĠ Ġbook Dir : ĠFast File , ĊĠĠĠĠĠĠĠ ĠdisplayName : ĠString ĊĠĠĠ Ġ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbook Dir . find File ( displayName )?. let Ġ{ Ġload Bitmap Thumbnail ( it , Ġ 3 ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Thumbnail ( book Dir : ĠFast File ) Ġ: ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġload Thumbnail ( book Dir , Ġ" 0 0 0 0 . png ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Bg Thumbnail ( book Dir : ĠFast File ) Ġ: ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġload Thumbnail ( book Dir , Ġ" background . png ") ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġload Page Thumbnail ( file : ĠFast File ) Ġ= Ġload Bitmap Thumbnail ( file , Ġ 4 ) ĊĠĠĠ Ġfun Ġload Bg For Grid ( book Dir : ĠFast File ) Ġ= Ġbook Dir . find File (" background . png ") ?. let Ġ{ Ġload Bitmap Thumbnail ( it , Ġ 4 ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Bitmap Thumbnail ( file : ĠFast File , Ġsample Size : ĠInt ) Ġ: Bitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġresolver . open FileDescriptor ( file . uri , Ġ" r "). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoption Ġ= ĠBitmap Factory . Options (). apply Ġ{ Ġin Sample Size Ġ= Ġsample Size Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Factory . decode FileDescriptor ( it !!. file Descriptor , Ġnull , Ġoption ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠisEmpty ( file : ĠFast File ) Ġ= Ġfile . isEmpty ĊĊĠĠĠ Ġfun Ġis Page Empty ( page : ĠBook Page ) Ġ= ĠisEmpty ( page . file ) ĊĠĠĠ Ġfun Ġload Bitmap ( page : ĠBook Page ) Ġ= Ġload Bitmap ( page . file ) ĊĊĠĠĠ Ġfun Ġload Bitmap OrNull ( page : ĠBook Page ) Ġ= Ġif ( is Page Empty ( page )) Ġnull Ġelse Ġload Bitmap ( page ) ĊĊĠĠĠ Ġfun Ġload Bg OrNull ( book : ĠBook ) Ġ= Ġbook . bg Image ?. let Ġ{ Ġload Bitmap ( it ) Ġ} ĊĊĠĠĠ Ġfun Ġsave Bitmap ( page : ĠBook Page , Ġbitmap : ĠBitmap ) Ġ{ ĊĠĠĠĠĠĠĠ Ġresolver . open OutputStream ( page . file . uri , Ġ" wt "). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . compress ( Bitmap . Compress Format . PNG , Ġ 8 0 , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġex . Ġ 0 0 0 9 . png ĊĠĠĠ Ġprivate Ġval Ġpage Name Pat Ġ= Ġ" ([ 0 - 9 ][ 0 - 9 ][ 0 - 9 ][ 0 - 9 ]) \\. png ". to Regex () ĊĊĠĠĠ Ġfun Ġload Book ( book Dir : ĠFast File ) Ġ: ĠBook Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpage Map Ġ= Ġbook Dir . list Files () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ file Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Name Pat . matches ( file . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. map Ġ{ file Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġpage Name Pat . find ( file . name ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage Idx Ġ= Ġres . group Values [ 1 ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( page Idx , Ġfile ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toMap () ĊĠĠĠĠĠĠĠ Ġval Ġlast Page Idx Ġ= Ġif ( page Map . isEmpty ()) Ġ 0 Ġelse Ġpage Map . max Of Ġ{ Ġit . key Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpages Ġ= Ġ( 0 Ġ.. Ġlast Page Idx ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage Map [ it ] Ġ?: ĠBook Page . create Empty File ( book Dir , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbg File Ġ= Ġbook Dir . find File (" background . png ") ĊĠĠĠĠĠĠĠ Ġreturn ĠBook ( book Dir , Ġpages , Ġbg File ) ĊĠĠĠ Ġ} ĊĊ Ċ }