package Ġcom . yg oul ar . commit reader . ui . adapter Ċ Ċ import Ġandroid . animation . Object Animator Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . squareup . pic asso . Pic asso Ċ import Ġcom . yg oul ar . commit reader . R Ċ import Ġcom . yg oul ar . commit reader . model . Commit Ċ import Ġkotlinx . android . synt hetic . main . commit _ item . view .* ĊĊ Ċ class ĠCommit Adapter Ġ: ĠList Adapter < Commit , ĠCommit Adapter . Commit Holder >( DIFF _ CALLBACK ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDIFF _ CALLBACK Ġ= Ġobject Ġ: ĠDiff Util . Item Callback < Commit >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠCommit , Ġnew Item : ĠCommit ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . m Sha 1 Ġ== Ġnew Item . m Sha 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠCommit , Ġnew Item : ĠCommit ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . m Author Ġ== Ġnew Item . m Author ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġold Item . m Author Avatar Url Ġ== Ġnew Item . m Author Avatar Url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġold Item . m Title Ġ== Ġnew Item . m Title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġold Item . m Message Ġ== Ġnew Item . m Message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġcommit Ġmessage Ġtakes Ġmore Ġthan Ġ 6 0 Ġlines Ġto Ġbe Ġdisplayed , Ġit Ġwon 't Ġbe Ġfully Ġdisplayed ĊĠĠĠĠĠĠĠ Ġ// Ġby Ġchoice ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠEX PAN DED _ VALUE Ġ= Ġ 6 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠS HR INK ED _ VALUE Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠIMAGE _ SIZE Ġ= Ġ 1 8 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAN IM ATION _ DURATION Ġ= Ġ 5 0 0 L ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ LINES _ PROPERTY Ġ= Ġ" max Lines " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠCommit Holder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠCommit Holder ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ). inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . commit _ item , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠCommit Holder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( getItem ( position )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . m Commit Sha 1 . text Ġ= Ġm Sha 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . m Commit Author . text Ġ= Ġm Author ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . m Commit Title . text Ġ= Ġm Title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . m Commit Message . text Ġ= Ġm Message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpic asso Ġ= ĠPic asso . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Author Avatar Url . isNotEmpty ()) Ġ{ Ġ// ĠPlace holder Ġimage Ġotherwise ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpic asso . load ( m Author Avatar Url ). resize ( IMAGE _ SIZE , ĠIMAGE _ SIZE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( holder . m Commit Avatar ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠCommit Holder ( m View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( m View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġm Commit Sha 1 : ĠTextView Ġ= Ġm View . text _ sha _ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġm Commit Author : ĠTextView Ġ= Ġm View . text _ author ĊĠĠĠĠĠĠĠ Ġvar Ġm Commit Title : ĠTextView Ġ= Ġm View . text _ title ĊĠĠĠĠĠĠĠ Ġvar Ġm Commit Message : ĠTextView Ġ= Ġm View . text _ message ĊĠĠĠĠĠĠĠ Ġvar Ġm Commit Avatar : ĠImageView Ġ= Ġm View . image _ avatar ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠExpand / Shrink Ġanimation Ġwhen Ġclicking Ġon Ġan Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( adapter Position Ġ!= ĠRecyclerView . NO _ POSITION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m View . text _ message . line Count Ġ== ĠS HR INK ED _ VALUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimate New Max Lines ( m View , ĠEX PAN DED _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimate New Max Lines ( m View , ĠS HR INK ED _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġanimate New Max Lines ( m View : ĠView , Ġmax Lines : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanimation Ġ= ĠObject Animator . of Int ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm View . text _ message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMAX _ LINES _ PROPERTY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Lines ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation . duration Ġ= ĠAN IM ATION _ DURATION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation . start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }