/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠRead ium ĠFoundation . ĠAll Ġrights Ġreserved . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠBSD - style Ġlicense Ċ Ġ* Ġavailable Ġin Ġthe Ġtop - level ĠLICENSE Ġfile Ġof Ġthe Ġproject . Ċ Ġ*/ Ċ Ċ package Ġorg . read ium . r 2 . test app . outline Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . widget . PopupMenu Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . set Fragment Result Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġorg . joda . time . DateTime Ċ import Ġorg . joda . time . format . DateTime Format Ċ import Ġorg . read ium . r 2 . shared . publication . Publication Ċ import Ġorg . read ium . r 2 . test app . R Ċ import Ġorg . read ium . r 2 . test app . domain . model . Highlight Ċ import Ġorg . read ium . r 2 . test app . reader . Reader ViewModel Ċ import Ġorg . read ium . r 2 . test app . utils . extensions . outline Title Ċ Ċ class ĠHigh lights Fragment Ġ: ĠFragment ( R . layout . fragment _ list view ) Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġpublication : ĠPublic ation ĊĠĠĠ Ġlateinit Ġvar ĠviewModel : ĠReader ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġhighlight Adapter : ĠHighlight Adapter ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ ĠViewModel Provider ( require Activity ()). get ( Reader ViewModel :: class . java ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublication Ġ= Ġit . publication ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġhighlight Adapter Ġ= ĠHighlight Adapter ( publication , ĠonDelete Highlight Requested Ġ= Ġ{ Ġhighlight Ġ-> ĠviewModel . delete Highlight By Highlight Id ( highlight . highlight Id ) Ġ}, Ġon Highlight Selected Requested Ġ= Ġ{ Ġhighlight Ġ-> Ġon Highlight Selected ( highlight ) Ġ}) ĊĠĠĠĠĠĠĠ Ġview . findViewById < RecyclerView >( R . id . list _ view ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġhighlight Adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcomparator : ĠComparator < Highlight > Ġ= Ġcompare By ({ Ġit . resource Index Ġ}, Ġ{ Ġit . locator . locations . progress ion Ġ}) ĊĠĠĠĠĠĠĠ ĠviewModel . get Highlight s (). observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhighlight s Ġ= Ġit . sorted With ( comparator ). to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhighlight Adapter . submit List ( highlight s ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Highlight Selected ( highlight : ĠHighlight ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Fragment Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOut line Contract . REQUEST _ KEY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOut line Contract . create Result ( highlight . locator ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠHighlight Adapter ( private Ġval Ġpublication : ĠPublic ation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠonDelete Highlight Requested : Ġ( Highlight ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġon Highlight Selected Requested : Ġ( Highlight ) Ġ-> ĠUnit ) Ġ: ĊĠĠĠĠĠĠĠ ĠList Adapter < Highlight , ĠHighlight Adapter . ViewHolder >( Highlight s Diff ()) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Has Stable Ids ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠViewGroup , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Type : ĠInt ĊĠĠĠ Ġ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . item _ recycle _ highlight , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ= Ġposition . to Long () ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠgetItem ( position ) ĊĠĠĠĠĠĠĠ Ġholder . bind ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠViewHolder ( private Ġval Ġrow : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( row ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġhighlighted Text : ĠTextView Ġ= Ġrow . findViewById ( R . id . highlight _ text ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġhighlight Timestamp : ĠTextView Ġ= Ġrow . findViewById ( R . id . highlight _ time _ stamp ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġhighlight Chapter : ĠTextView Ġ= Ġrow . findViewById ( R . id . highlight _ chapter ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġhighlight Overflow : ĠImageView Ġ= Ġrow . findViewById ( R . id . highlight _ overflow ) ĊĠĠĠĠĠĠĠ Ġval Ġannotation : ĠTextView Ġ= Ġrow . findViewById ( R . id . annotation ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( highlight : ĠHighlight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhighlight Chapter . text Ġ= Ġget Highlight Sp ine Item ( highlight . resource Href ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhighlighted Text . text Ġ= Ġhighlight . locator . text . highlight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . text Ġ= Ġhighlight . annotation ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatted Date Ġ= ĠDateTime ( highlight . creation ). toString ( DateTime Format . short DateTime ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhighlight Timestamp . text Ġ= Ġformatted Date ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġhighlight Overflow . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpopup Menu Ġ= ĠPopup Menu ( highlight Overflow . context , Ġhighlight Overflow ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ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 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonDelete Highlight Requested ( highlight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrow . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Highlight Selected Requested ( highlight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Highlight Sp ine Item ( href : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( link Ġin Ġpublication . table Of Contents ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( link . href Ġ== Ġhref ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlink . outline Title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( link Ġin Ġpublication . reading Order ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( link . href Ġ== Ġhref ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlink . outline Title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠHigh lights Diff Ġ: ĠDiff Util . Item Callback < Highlight >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġare Items The Same ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Item : ĠHighlight , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Item : ĠHighlight ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġold Item . id Ġ== Ġnew Item . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġold Item . highlight Id Ġ== Ġnew Item . highlight Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Item : ĠHighlight , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Item : ĠHighlight ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġold Item . annotation Ġ== Ġnew Item . annotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġold Item . color Ġ== Ġnew Item . color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġold Item . annotation Mark Style Ġ== Ġnew Item . annotation Mark Style ĊĠĠĠ Ġ} Ċ } Ċ