package Ġcz . j ose f adam c ik . track on tr akt . home Ċ Ċ import Ġandroid . support . v 7 . util . Diff Util Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . view . View Ċ import Ġcz . j ose f adam c ik . track on tr akt . data . api . model . History Item Ċ import Ġcz . j ose f adam c ik . track on tr akt . data . api . model . Watch ing Ċ import Ġorg . th reet en . bp . format . DateTime Formatter Ċ import Ġorg . th reet en . bp . format . Format Style Ċ Ċ sealed Ġclass ĠRow Item Model ( val Ġview Type : ĠInt ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠVIEW _ TYPE _ HISTORY Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval ĠVIEW _ TYPE _ P AGER Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval ĠVIEW _ TYPE _ HEADER Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġval ĠVIEW _ TYPE _ WATCH ING Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġval ĠdateFormat : ĠDateTime Formatter Ġ= ĠDateTime Formatter . of Localized DateTime ( Format Style . SHORT ) ĊĠĠĠĠĠĠĠ Ġval Ġtime Format : ĠDateTime Formatter Ġ= ĠDateTime Formatter . of Localized Time ( Format Style . SHORT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġbind ViewHolder ( holder : ĠHistory Adapter . ViewHolder ) ĊĊĠĠĠ Ġclass ĠHistory Row Item ( val Ġhistory Item : ĠHistory Item ) Ġ: ĠRow Item Model ( VIEW _ TYPE _ HISTORY ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbind ViewHolder ( holder : ĠHistory Adapter . ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠHistory Adapter . History ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . title . text Ġ= Ġhistory Item . title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( history Item . subtitle )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . subtitle . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . subtitle . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . subtitle . text Ġ= Ġhistory Item . subtitle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . date . text Ġ= ĠdateFormat . format ( history Item . w atched _ at ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . choose TypeInfo Icon And Text ( history Item . type , Ġhistory Item . year ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Ġas ĠHistory Row Item ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( history Item Ġ!= Ġother . history Item ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġhistory Item . hashCode () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠP ager Row Item ( val ĠisLoading : ĠBoolean ) Ġ: ĠRow Item Model ( VIEW _ TYPE _ P AGER ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbind ViewHolder ( holder : ĠHistory Adapter . ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠHistory Adapter . Pager ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . pager Progress . visibility Ġ= Ġif Ġ( isLoading ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . choose Text ( isLoading ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Ġas ĠP ager Row Item ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isLoading Ġ!= Ġother . isLoading ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠisLoading . hashCode () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠHeader Row Item ( val Ġtime : ĠRelative Watch Time ) Ġ: ĠRow Item Model ( VIEW _ TYPE _ HEADER ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbind ViewHolder ( holder : ĠHistory Adapter . ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠHistory Adapter . Header ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . format Relative Watch Time ( time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Ġas ĠHeader Row Item ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ!= Ġother . time ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtime . hashCode () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠWatch ing Row Item ( val Ġwatching : ĠWatch ing . Something ) Ġ: ĠRow Item Model ( VIEW _ TYPE _ WATCH ING ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbind ViewHolder ( holder : ĠHistory Adapter . ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠHistory Adapter . History ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . title . text Ġ= Ġwatching . title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( watch ing . subtitle )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . subtitle . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . subtitle . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . subtitle . text Ġ= Ġwatching . subtitle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . date . text Ġ= ĠString . format ("% s Ġ(% s Ġ- Ġ% s )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatching . action , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Format . format ( watch ing . started _ at ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Format . format ( watch ing . expires _ at ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . choose TypeInfo Icon And Text ( watch ing . type , Ġwatching . year ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Ġas ĠWatch ing Row Item ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( watch ing Ġ!= Ġother . watch ing ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwatching . hashCode () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠDiff Util Callback ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġold List : ĠList < Row Item Model >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġnew List : ĠList < Row Item Model >) Ġ: ĠDiff Util . Callback () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item Position : ĠInt , Ġnew Item Position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Item Ġ= Ġold List [ old Item Position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Item Ġ= Ġnew List [ new Item Position ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( old Item Ġis ĠRow Item Model . Pager Row Item Ġ&& Ġnew Item Ġis ĠRow Item Model . Pager Row Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġ( old Item Ġis ĠRow Item Model . Watch ing Row Item Ġ&& Ġnew Item Ġis ĠRow Item Model . Watch ing Row Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġ( old Item Ġis ĠRow Item Model . Header Row Item Ġ&& Ġnew Item Ġis ĠRow Item Model . Header Row Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġ( old Item Ġis ĠRow Item Model . History Row Item Ġ&& Ġnew Item Ġis ĠRow Item Model . History Row Item Ġ&& Ġold Item . history Item . id Ġ== Ġnew Item . history Item . id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Old List Size (): ĠInt Ġ= Ġold List . size ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget New List Size (): ĠInt Ġ= Ġnew List . size ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item Position : ĠInt , Ġnew Item Position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Item Ġ= Ġold List [ old Item Position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Item Ġ= Ġnew List [ new Item Position ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item Ġ== Ġnew Item Ġ// data Ġclasses Ġhave Ġimplemented Ġequals ... ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }