/* Ċ Ġ* ĠModule : Ġr 2 - test app - kotlin Ċ Ġ* ĠDevelopers : ĠA fer d ita ĠM uri qi , ĠMost aph a ĠI doub i hi , ĠPaul ĠSto ica Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 . ĠEuropean ĠDigital ĠReading ĠLab . ĠAll Ġrights Ġreserved . Ċ Ġ* ĠLicensed Ġto Ġthe ĠRead ium ĠFoundation Ġunder Ġone Ġor Ġmore Ġcontributor Ġlicense Ġagreements . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġa ĠBSD - style Ġlicense Ġwhich Ġis Ġdetailed Ġin Ġthe Ċ Ġ* ĠLICENSE Ġfile Ġpresent Ġin Ġthe Ġproject Ġrepository Ġwhere Ġthis Ġsource Ġcode Ġis Ġmaintained . Ċ Ġ*/ Ċ Ċ package Ġorg . read ium . r 2 . test app Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget .* Ċ import Ġkotlinx . android . synt hetic . main . activity _ outline _ container .* Ċ import Ġkotlinx . android . synt hetic . main . bookmark _ item . view .* Ċ import Ġkotlinx . android . synt hetic . main . nav content _ item . view .* Ċ import Ġorg . joda . time . DateTime Ċ import Ġorg . joda . time . format . DateTime Format Ċ import Ġorg . read ium . r 2 . shared . Link Ċ import Ġorg . read ium . r 2 . shared . Publication Ċ import Ġkotlin . math . round ToInt Ċ import Ġandroid . widget . TextView Ċ import Ġcom . mc xiao ke . ko i . ext . timestamp Ċ import Ġorg . read ium . r 2 . shared . Locations Ċ import Ġorg . read ium . r 2 . shared . Locator ĊĊ Ċ class ĠR 2 Outline Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpreferences : SharedPreferences ĊĠĠĠ Ġlateinit Ġvar Ġbookmark DB : ĠBook marks Database ĊĠĠĠ Ġlateinit Ġvar Ġpositions DB : ĠPosition s Database ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ outline _ container ) ĊĠĠĠĠĠĠĠ Ġpreferences Ġ= Ġget SharedPreferences (" org . read ium . r 2 . settings ", ĠContext . MODE _ PRIVATE ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtab Host Ġ= ĠfindViewById < Tab Host >( R . id . tab host ) ĊĠĠĠĠĠĠĠ Ġtab Host . setup () ĊĊĠĠĠĠĠĠĠ Ġval Ġpublication Ġ= Ġintent . get Serializable Extra (" publication ") Ġas ĠPublic ation ĊĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġpublication . metadata . title ĊĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠ Ġ* ĠRetrieve Ġthe ĠTable Ġof ĠContent ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtable Of Contents : ĠMutable List < Link > Ġ= Ġpublication . table Of Contents ĊĠĠĠĠĠĠĠ Ġval Ġall Elements Ġ= Ġmutable ListOf < Link >() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( link Ġin Ġtable Of Contents ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġchildren Of ( link ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAppend Ġparent . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Elements . add ( link ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAppend Ġchildren , Ġand Ġtheir Ġchildren ... Ġrecursive . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Elements . addAll ( children ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtoc Adapter Ġ= ĠNavigation Adapter ( this , Ġall Elements ) ĊĊĠĠĠĠĠĠĠ Ġtoc _ list . adapter Ġ= Ġtoc Adapter ĊĊĠĠĠĠĠĠĠ Ġtoc _ list . setOn ItemClickListener Ġ{ Ġ_, Ġ_, Ġposition , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Link Ġto Ġthe Ġresource Ġin Ġthe Ġpublication ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoc Item Uri Ġ= Ġall Elements [ position ]. href ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoc Item Uri ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( toc Item Uri . indexOf ("# ") Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġtoc Item Uri . substring ( toc Item Uri . indexOf ('# ')) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" locator ", ĠLoc ator ( toc Item Uri , Ġtimestamp (), Ġpublication . metadata . title , ĠLoc ations ( id Ġ= Ġid ), null )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" locator ", ĠLoc ator ( toc Item Uri , Ġtimestamp (), Ġpublication . metadata . title , ĠLoc ations ( progress ion Ġ= Ġ 0 . 0 ), null )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ OK , Ġintent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠ Ġ* ĠRetrieve Ġthe Ġlist Ġof Ġbook marks ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġbookmark DB Ġ= ĠBook marks Database ( this ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbook ID Ġ= Ġintent . getLong Extra (" book Id ", Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġbook marks Ġ= Ġbookmark DB . bookmarks . list ( book ID ). sorted With ( compare By ({ it . resource Index },{ Ġit . location . progress ion Ġ})). to Mutable List () ĊĊĠĠĠĠĠĠĠ Ġval Ġbook marks Adapter Ġ= ĠBook Marks Adapter ( this , Ġbook marks , Ġall Elements ) ĊĊĠĠĠĠĠĠĠ Ġbookmark _ list . adapter Ġ= Ġbook marks Adapter ĊĊĊĠĠĠĠĠĠĠ Ġbookmark _ list . setOn ItemClickListener Ġ{ Ġ_, Ġ_, Ġposition , Ġ_ Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Link Ġto Ġthe Ġresource Ġin Ġthe Ġpublication ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbookmark Uri Ġ= Ġbook marks [ position ]. resource Href ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Progress ion Ġof Ġthe Ġselected Ġbookmark ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbookmark Progress ion Ġ= Ġbook marks [ position ]. location . progress ion ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" locator ", ĠLoc ator ( bookmark Uri , Ġtimestamp (), Ġpublication . metadata . title , ĠLoc ations ( progress ion Ġ= Ġbookmark Progress ion ), null )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ OK , Ġintent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠ Ġ* ĠRetrieve Ġthe Ġpage Ġlist ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpositions DB Ġ= ĠPosition s Database ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġpage List : ĠMutable List < Link > Ġ= Ġpublication . page List ĊĊĠĠĠĠĠĠĠ Ġif Ġ( page List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage ListAdapter Ġ= ĠNavigation Adapter ( this , Ġpage List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage _ list . adapter Ġ= Ġpage ListAdapter ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage _ list . setOn ItemClickListener Ġ{ Ġ_, Ġ_, Ġposition , Ġ_ Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Link Ġto Ġthe Ġresource Ġin Ġthe Ġpublication ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage Uri Ġ= Ġpage List [ position ]. href ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" locator ", ĠLoc ator ( page Uri !! , Ġtimestamp (), Ġpublication . metadata . title , ĠLoc ations ( progress ion Ġ= Ġ 0 . 0 ), null )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ OK , Ġintent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( positions DB . positions . has ( book ID )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Page List Ġ= Ġpositions DB . positions . getS ynt hetic Page List ( book ID ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsynthetic Page List Ġ= ĠPosition . from JSON ( json Page List !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsynthetic Page ListAdapter Ġ= ĠSynt hetic Page ListAdapter ( this , Ġsynthetic Page List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage _ list . adapter Ġ= Ġsynthetic Page ListAdapter ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage _ list . setOn ItemClickListener Ġ{ Ġ_, Ġ_, Ġposition , Ġ_ Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Link Ġto Ġthe Ġresource Ġin Ġthe Ġpublication ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage Uri Ġ= Ġsynthetic Page List [ position ]. href ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage Progress ion Ġ= Ġsynthetic Page List [ position ]. progress ion ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" locator ", ĠLoc ator ( page Uri !! , Ġtimestamp (), Ġpublication . metadata . title , ĠLoc ations ( progress ion Ġ= Ġpage Progress ion ), Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ OK , Ġintent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠ Ġ* ĠRetrieve Ġthe Ġland marks ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġland marks : ĠMutable List < Link > Ġ= Ġpublication . land marks ĊĊĠĠĠĠĠĠĠ Ġval Ġland marks Adapter Ġ= ĠNavigation Adapter ( this , Ġland marks ) ĊĠĠĠĠĠĠĠ Ġland marks _ list . adapter Ġ= Ġland marks Adapter ĊĊĠĠĠĠĠĠĠ Ġland marks _ list . setOn ItemClickListener Ġ{ Ġ_, Ġ_, Ġposition , Ġ_ Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Link Ġto Ġthe Ġresource Ġin Ġthe Ġpublication ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġland mark Uri Ġ= Ġland marks [ position ]. href ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" locator ", ĠLoc ator ( land mark Uri !! , Ġtimestamp (), Ġpublication . metadata . title , ĠLoc ations ( progress ion Ġ= Ġ 0 . 0 ), null )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ OK , Ġintent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġaction Bar ?. set Display Home As Up Enabled ( true ) ĊĊĊĠĠĠĠĠĠĠ Ġ// ĠSetting Ġup Ġtabs ĊĊĠĠĠĠĠĠĠ Ġval Ġtab TOC : ĠTab Host . Tab Spec Ġ= Ġtab Host . new Tab Spec (" Content ") ĊĠĠĠĠĠĠĠ Ġtab TOC . set Indicator ( tab TOC . tag ) ĊĠĠĠĠĠĠĠ Ġtab TOC . setContent ( R . id . toc _ tab ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġtab Book marks : ĠTab Host . Tab Spec Ġ= Ġtab Host . new Tab Spec (" Book marks ") ĊĠĠĠĠĠĠĠ Ġtab Book marks . set Indicator ( tab Book marks . tag ) ĊĠĠĠĠĠĠĠ Ġtab Book marks . setContent ( R . id . bookmarks _ tab ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġtab Page List : ĠTab Host . Tab Spec Ġ= Ġtab Host . new Tab Spec (" Page ĠList ") ĊĠĠĠĠĠĠĠ Ġtab Page List . set Indicator ( tabPage List . tag ) ĊĠĠĠĠĠĠĠ Ġtab Page List . setContent ( R . id . page lists _ tab ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġtab Land marks : ĠTab Host . Tab Spec Ġ= Ġtab Host . new Tab Spec (" Land marks ") ĊĠĠĠĠĠĠĠ Ġtab Land marks . set Indicator ( tab Land marks . tag ) ĊĠĠĠĠĠĠĠ Ġtab Land marks . setContent ( R . id . land marks _ tab ) ĊĊĊĠĠĠĠĠĠĠ Ġtab Host . add Tab ( tab TOC ) ĊĠĠĠĠĠĠĠ Ġtab Host . add Tab ( tab Book marks ) ĊĠĠĠĠĠĠĠ Ġtab Host . add Tab ( tabPage List ) ĊĠĠĠĠĠĠĠ Ġtab Host . add Tab ( tab Land marks ) ĊĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġprivate Ġfun Ġchildren Of ( parent : ĠLink ): ĠMutable List < Link > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġmutable ListOf < Link >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( link Ġin Ġparent . children ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . add ( link ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . addAll ( children Of ( link )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġchildren ĊĠĠĠ Ġ} ĊĊĊĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠAdapter Ġfor Ġnavigation Ġlinks Ġ( Table Ġof ĠContents , ĠPage Ġlists Ġ& ĠLand marks ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinner Ġclass ĠNavigation Adapter ( context : ĠContext , Ġusers : ĠMutable List < Link >) Ġ: ĠArray Adapter < Link >( context , ĠR . layout . nav content _ item , Ġusers ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġinner Ġclass ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġvar Ġnavigation TextView : ĠTextView ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget View ( position : ĠInt , ĠconvertView : ĠView ?, Ġparent : ĠViewGroup ): ĠView Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmy View Ġ= ĠconvertView ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠgetItem ( position ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠviewHolder : ĠViewHolder Ġ// Ġview Ġlookup Ġcache Ġstored Ġin Ġtag ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my View Ġ== Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder Ġ= ĠViewHolder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy View Ġ= Ġinflater . inflate ( R . layout . nav content _ item , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder . navigation TextView Ġ= Ġmy View !!. navigation _ textView Ġas ĠTextView ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy View . tag Ġ= ĠviewHolder ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder Ġ= Ġmy View . tag Ġas ĠViewHolder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder . navigation TextView !!. text Ġ= Ġitem !!. title ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmy View ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠSynt hetic Page ListAdapter ( context : ĠContext , Ġpage List : ĠMutable List < Position >) Ġ: ĠArray Adapter < Position >( context , ĠR . layout . nav content _ item , Ġpage List ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġinner Ġclass ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġvar Ġnavigation TextView : ĠTextView ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget View ( position : ĠInt , ĠconvertView : ĠView ?, Ġparent : ĠViewGroup ): ĠView Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmy View Ġ= ĠconvertView ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠgetItem ( position ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠviewHolder : ĠViewHolder Ġ// Ġview Ġlookup Ġcache Ġstored Ġin Ġtag ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my View Ġ== Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder Ġ= ĠViewHolder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy View Ġ= Ġinflater . inflate ( R . layout . nav content _ item , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder . navigation TextView Ġ= Ġmy View !!. navigation _ textView Ġas ĠTextView ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy View . tag Ġ= ĠviewHolder ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder Ġ= Ġmy View . tag Ġas ĠViewHolder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder . navigation TextView !!. text Ġ= Ġ" Page Ġ${ item . pageNumber }" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmy View ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinner Ġclass ĠBook Marks Adapter ( val Ġcontext : ĠContext , Ġprivate Ġval Ġloc ators : ĠMutable List < Bookmark >, Ġprivate Ġval Ġelements : ĠMutable List < Link >) Ġ: ĠBase Adapter () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġinner Ġclass ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġvar Ġb mk Chapter : ĠTextView ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġvar Ġb mk Progress ion : ĠTextView ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġvar Ġb mk Timestamp : ĠTextView ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġvar Ġb mk Overflow : ĠImageView ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget View ( position : ĠInt , ĠconvertView : ĠView ?, Ġparent : ĠViewGroup ?): ĠView Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbookmark View Ġ= ĠconvertView ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠviewHolder : ĠViewHolder ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( bookmark View Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder Ġ= ĠViewHolder () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbookmark View Ġ= Ġinflater . inflate ( R . layout . bookmark _ item , Ġparent , Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder . b mk Chapter Ġ= Ġbookmark View !!. b mk _ chapter Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder . b mk Progress ion Ġ= Ġbookmark View . b mk _ progress ion Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder . b mk Timestamp Ġ= Ġbookmark View . b mk _ timestamp Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder . b mk Overflow Ġ= Ġbookmark View . overflow Ġas ĠImageView ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbookmark View . tag Ġ= ĠviewHolder ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder Ġ= Ġbookmark View . tag Ġas ĠViewHolder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbookmark Ġ= ĠgetItem ( position ) Ġas ĠBook mark ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtitle Ġ= Ġget Book Sp ine Item ( bookmark . resource Href ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( title . isNull OrEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ"* Title ĠMissing *" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatted Progress ion Ġ= Ġ"${ (( bookmark . location . progress ion !! Ġ* Ġ 1 0 0 ). round ToInt ()) }% Ġthrough Ġresource " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatted Date Ġ= ĠDateTime ( bookmark . creation Date ). toString ( DateTime Format . short DateTime ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder . b mk Chapter !!. text Ġ= Ġtitle ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder . b mk Progress ion !!. text Ġ= Ġformatted Progress ion ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder . b mk Timestamp !!. text Ġ= Ġformatted Date ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder . b mk Overflow ?. setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpopup Menu Ġ= ĠPopup Menu ( parent ?. context , ĠviewHolder . b mk Chapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Menu . menu Inflater . inflate ( R . menu . menu _ bookmark , Ġpopup Menu . menu ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Menu . show () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Menu . setOn MenuItem ClickListener Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . itemId Ġ== ĠR . id . delete ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbookmark DB . bookmarks . delete ( loc ators [ position ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloc ators . remove At ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbookmark View ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġloc ators . size ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem ( position : ĠInt ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġloc ators [ position ] ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Book Sp ine Item ( href : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( link Ġin Ġelements ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( link . href Ġ== Ġhref ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlink . title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġposition . to Long () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ } ĊĊ