/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 5 Ġy vol k Ġ( Y uri ĠVol kov ), Ġhttp :// y ur iv olk ov . com Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . and status . app . timeline Ċ Ċ import Ġio . v avr . control . Try Ċ import Ġorg . and status . app . activity . Activity View Item Ċ import Ġorg . and status . app . actor . Actor View Item Ċ import Ġorg . and status . app . net . social . Actor Ċ import Ġorg . and status . app . note . Base Note View Item Ċ import Ġorg . and status . app . origin . Origin Ċ import Ġorg . and status . app . util . My Log Ċ import Ġorg . and status . app . util . My StringBuilder Ċ import Ġorg . and status . app . util . Try Utils Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġ@ author Ġy vol k @ y ur iv olk ov . com Ċ Ġ*/ Ċ open Ġclass ĠTimeline Data < T Ġ: ĠView Item < T >>( old Data : ĠTimeline Data < T > ?, Ġthis Page : ĠTimeline Page < T >) Ġ{ ĊĠĠĠ Ġ// ĠContains Ġat Ġleast Ġone ĠPage ĊĠĠĠ Ġval Ġpages : ĠMutable List < Timeline Page < T >> ĊĠĠĠ Ġval ĠupdatedAt Ġ= ĠMy Log . unique Current Time MS ĊĠĠĠ Ġval Ġparams : ĠTimeline Parameters ĊĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġprivate Ġvar Ġactor View Item : ĠActor View Item Ġ= ĠActor View Item . EMPTY ĊĊĠĠĠ Ġval Ġis Same Timeline : ĠBoolean ĊĠĠĠ Ġprivate Ġval Ġduplicates Col lap ser : ĠD uplicates Col lap ser < T > ĊĠĠĠ Ġprivate Ġfun Ġdrop Ex cess ive Page ( last Loaded Page : ĠTimeline Page < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( pages . size Ġ> ĠMAX _ PAGES _ COUNT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Loaded Page . params . which Page Ġ== ĠWhich Page . YO UN GER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpages . remove At ( pages . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpages . remove At ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd This Page ( page : ĠTimeline Page < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( page . params . which Page ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWhich Page . YO UN GEST Ġ-> Ġif Ġ( may Have Yo un ger Page ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpages . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpages . add ( page ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Duplicates With Ol der ( page , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! pages . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpages . remove At ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpages . add ( 0 , Ġpage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWhich Page . CURRENT , ĠWhich Page . TOP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpages . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpages . add ( page ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWhich Page . OLDER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Duplicates With Yo un ger ( page , Ġpages . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpages . add ( page ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWhich Page . YO UN GER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Duplicates With Ol der ( page , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpages . add ( 0 , Ġpage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġif Ġ( pages . size Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpages . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpages . add ( page ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfound Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġind Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( ind Ġ< Ġpages . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp : ĠTimeline Page < *> Ġ= Ġpages . get ( ind ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p . params . max Date Ġ== Ġpage . params . max Date ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġp . params . min Date Ġ== Ġpage . params . min Date ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Ġ= Ġind ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġind ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( found Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Duplicates With Yo un ger ( page , Ġfound Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Duplicates With Ol der ( page , Ġfound Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpages . remove At ( found ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpages . add ( found , Ġpage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpages . add ( page ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Duplicates With Yo un ger ( page : ĠTimeline Page < T >, Ġind Existing Page : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( ind Ġin ĠInteger . min ( ind Existing Page , Ġpages . size Ġ- Ġ 1 ) Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpages . get ( ind ). items . removeAll ( page . items ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmerge With Existing ( new Item : ĠT , Ġexisting Item : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠMerge Ġsomething ... ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Duplicates With Ol der ( page : ĠTimeline Page < T >, Ġind Existing Page : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( ind Ġin ĠInteger . max ( ind Existing Page , Ġ 0 ) Ġuntil Ġpages . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpages . get ( ind ). items . removeAll ( page . items ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠSee Ġhttp :// stackoverflow . com / questions / 3 0 0 5 2 2 / count - vs - length - vs - size - in - a - collection ĊĠĠĠ Ġopen Ġfun Ġsize (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( page Ġin Ġpages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ+= Ġpage . items . size ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcount ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun ĠgetItem ( position : ĠInt ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġfirst Position Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( page Ġin Ġpages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ< Ġfirst Position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ< Ġfirst Position Ġ+ Ġpage . items . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpage . items [ position Ġ- Ġfirst Position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Position Ġ+= Ġpage . items . size ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġget Empty Item () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġget ById ( itemId : ĠLong ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( itemId Ġ!= Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( page Ġin Ġpages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġpage . items ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . getId () Ġ== ĠitemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġget Empty Item () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Empty Item (): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpages . get ( 0 ). get Empty Item () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ return Ġ- 1 Ġif Ġnot Ġfound ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġget Position ById ( itemId : ĠLong ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġposition Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( itemId Ġ!= Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( page Ġin Ġpages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġpage . items ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . getId () Ġ== ĠitemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( item . is Collapsed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( child Ġin Ġitem . getChildren ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child . getId () Ġ== ĠitemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġmay Have Yo un ger Page (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpages . size Ġ== Ġ 0 Ġ|| Ġpages . get ( 0 ). params . may Have Yo un ger Page () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġmay Have Ol der Page (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpages . size Ġ== Ġ 0 Ġ|| Ġpages . get ( pages . size Ġ- Ġ 1 ). params . may Have Ol der Page () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder : ĠMy StringBuilder Ġ= ĠMy StringBuilder . Companion . of (" pages :" Ġ+ Ġpages . size Ġ+ Ġ", Ġtotal Ġitems :" Ġ+ Ġsize ()) ĊĠĠĠĠĠĠĠ Ġfor Ġ( page Ġin Ġpages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . at NewLine (" Page Ġsize :" Ġ+ Ġpage . items . size Ġ+ Ġ", Ġparams : Ġ" Ġ+ Ġpage . params ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠMy StringBuilder . Companion . format KeyValue ( this , Ġbuilder ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġis Collapse Duplicates (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġduplicates Col lap ser . is Collapse Duplicates () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġcan Be Collapsed ( position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġduplicates Col lap ser . can Be Collapsed ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFor Ġall Ġor Ġfor Ġonly Ġone Ġitem ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġupdate View ( view Parameters : ĠLoad able ListView Parameters ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Parameters . preferred Origin . isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Actor View Item ( view Parameters . preferred Origin . get ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġduplicates Col lap ser . collapse Duplicates ( view Parameters ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Actor View Item ( preferred Origin : ĠOrigin ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( params . timeline . has Actor Profile ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Actor View Item ( params . timeline . actor , Ġpreferred Origin ). on Success Ġ{ Ġa : ĠActor View Item Ġ-> Ġactor View Item Ġ= Ġa Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Actor View Item (): ĠActor View Item Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġactor View Item ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Actor View Item ( actor : ĠActor , Ġpreferred Origin : ĠOrigin ): ĠTry < Actor View Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( page Ġin Ġpages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġpage . items ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfound Ġ= Ġfind In One Item With Children ( item , Ġactor , Ġpreferred Origin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( found . is Success ()) Ġreturn Ġfound ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠTry Utils . not Found () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind In One Item With Children ( item : ĠT , Ġactor : ĠActor , Ġpreferred Origin : ĠOrigin ): ĠTry < Actor View Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfound Ġ= Ġfind In One Item ( item , Ġactor , Ġpreferred Origin ) ĊĠĠĠĠĠĠĠ Ġif Ġ( found . is Success ()) Ġreturn Ġfound ĊĠĠĠĠĠĠĠ Ġfor Ġ( child Ġin Ġitem . getChildren ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfound Child Ġ= Ġfind In One Item ( child , Ġactor , Ġpreferred Origin ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( found Child . is Success ()) Ġreturn Ġfound Child ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠTry Utils . not Found () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind In One Item ( item : ĠT , Ġactor : ĠActor , Ġpreferred Origin : ĠOrigin ): ĠTry < Actor View Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item Ġis ĠBase Note View Item <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfilter Same Actor At Origin ( actor , Ġpreferred Origin , Ġ( item Ġas ĠBase Note View Item < *> ). author ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( item Ġis ĠActivity View Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity View Item Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfilter Same Actor At Origin ( actor , Ġpreferred Origin , Ġactivity View Item . get Obj Actor Item ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. recover With ( NoSuch ElementException :: class . java ) Ġ{ Ġe : ĠNoSuch ElementException Ġ-> Ġfilter Same Actor At Origin ( actor , Ġpreferred Origin , Ġactivity View Item . note View Item . author ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. recover With ( NoSuch ElementException :: class . java ) Ġ{ Ġe : ĠNoSuch ElementException Ġ-> Ġfilter Same Actor At Origin ( actor , Ġpreferred Origin , Ġactivity View Item . actor ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠTry Utils . not Found () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfilter Same Actor At Origin ( actor : ĠActor , Ġorigin : ĠOrigin , Ġactor View Item : ĠActor View Item ): ĠTry < Actor View Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġother Actor Ġ= Ġactor View Item . actor ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( other Actor . origin Ġ== Ġorigin Ġ&& Ġother Actor . is Same ( actor )) ĠTry . success ( actor View Item ) Ġelse ĠTry Utils . not Found () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Preferred Origin (): ĠOrigin Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġduplicates Col lap ser . preferred Origin ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ PAGES _ COUNT Ġ= Ġ 5 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġparams Ġ= Ġthis Page . params ĊĠĠĠĠĠĠĠ Ġis Same Timeline Ġ= Ġold Data Ġ!= Ġnull Ġ&& Ġparams . getContent Uri () Ġ== Ġold Data . params . getContent Uri () ĊĠĠĠĠĠĠĠ Ġpages Ġ= Ġif Ġ( is Same Timeline Ġ&& Ġold Data Ġ!= Ġnull ) ĠArrayList ( old Data . pages ) Ġelse ĠArrayList () ĊĠĠĠĠĠĠĠ Ġval Ġold Col lap ser Ġ= Ġif Ġ( is Same Timeline Ġ&& Ġold Data Ġ!= Ġnull ) Ġold Data . duplicates Col lap ser Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġduplicates Col lap ser Ġ= ĠD uplicates Col lap ser ( this , Ġold Col lap ser ) ĊĠĠĠĠĠĠĠ Ġval Ġcollapsed Ġ= Ġis Collapse Duplicates () ĊĠĠĠĠĠĠĠ Ġif Ġ(! duplicates Col lap ser . individual Collapsed State Ids . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduplicates Col lap ser . collapse Duplicates ( Load able ListView Parameters . Companion . collapse Duplicates ( false )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd This Page ( this Page ) ĊĠĠĠĠĠĠĠ Ġif Ġ( collapsed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduplicates Col lap ser . collapse Duplicates ( Load able ListView Parameters . Companion . collapse Duplicates ( true )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdrop Ex cess ive Page ( this Page ) ĊĠĠĠĠĠĠĠ Ġactor View Item Ġ= Ġthis Page . actor View Item ĊĠĠĠĠĠĠĠ Ġif Ġ( get Preferred Origin (). non Empty Ġ&& Ġget Preferred Origin () Ġ!= Ġactor View Item . actor . origin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Actor View Item ( get Preferred Origin ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( old Col lap ser Ġ!= Ġnull Ġ&& Ġcollapsed Ġ== Ġold Col lap ser . collapse Duplicates Ġ&& Ġ! old Col lap ser . individual Collapsed State Ids . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduplicates Col lap ser . restore Collapsed States ( old Col lap ser ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ