/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠR az ew are ĠLLC Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠNot with standing Ġthe Ġfore going , Ġyou Ġmay Ġnot Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ċ Ġ* Ġdistribute , Ġsublicense , Ġcreate Ġa Ġderivative Ġwork , Ġand / or Ġsell Ġcopies Ġof Ġthe Ċ Ġ* ĠSoftware Ġin Ġany Ġwork Ġthat Ġis Ġdesigned , Ġintended , Ġor Ġmarket ed Ġfor Ġped ag og ical Ġor Ċ Ġ* Ġinstruction al Ġpurposes Ġrelated Ġto Ġprogramming , Ġcoding , Ġapplication Ġdevelopment , Ċ Ġ* Ġor Ġinformation Ġtechnology . Ġ ĠPermission Ġfor Ġsuch Ġuse , Ġcopying , Ġmodification , Ċ Ġ* Ġmer ger , Ġpublication , Ġdistribution , Ġsublic ensing , Ġcreation Ġof Ġderivative Ġworks , Ċ Ġ* Ġor Ġsale Ġis Ġexpress ly Ġwith held . Ċ Ġ* Ċ Ġ* ĠThis Ġproject Ġand Ġsource Ġcode Ġmay Ġuse Ġlibraries Ġor Ġframeworks Ġthat Ġare Ċ Ġ* Ġreleased Ġunder Ġvarious ĠOpen - Source Ġlicenses . ĠUse Ġof Ġthose Ġlibraries Ġand Ċ Ġ* Ġframeworks Ġare Ġgoverned Ġby Ġtheir Ġown Ġindividual Ġlicenses . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . ray w ender lich . android . brain dump . ui . adapters Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . recyclerview . selection . Item Details Lookup Ċ import Ġandroidx . recyclerview . selection . Selection Tracker Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . ray w ender lich . android . brain dump . R Ċ import Ġcom . ray w ender lich . android . brain dump . databinding . Item Note Binding Ċ import Ġcom . ray w ender lich . android . brain dump . model . Note Ċ import Ġcom . ray w ender lich . android . brain dump . timestamp ToDate Conversion Ċ Ċ class ĠMain Adapter Ġ: ĠList Adapter < Note , ĠMain Adapter . Notes ViewHolder >( ĊĠĠĠ ĠDiff Callback ()) Ġ{ ĊĊĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠItem Note Binding ĊĠ Ġvar Ġtracker : ĠSelection Tracker < Long >? Ġ= Ġnull ĊĊĠ Ġoverride Ġfun ĠonCreate ViewHolder ( view Group : ĠViewGroup , Ġposition : ĠInt ): ĠNotes ViewHolder Ġ{ ĊĠĠĠ Ġbinding Ġ= ĠItem Note Binding . inflate ( LayoutInflater . from ( view Group . context ), Ġview Group , Ġfalse ) ĊĠĠĠ Ġreturn ĠNotes ViewHolder ( binding ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Bind ViewHolder ( view Holder : ĠNotes ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġnote Ġ= ĠgetItem ( position ) ĊĠĠĠ ĠviewHolder . bind ( note ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġcurrent List . size ĊĠ Ġ} ĊĊĠ Ġprivate Ġclass ĠDiff Callback Ġ: ĠDiff Util . Item Callback < Note >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠNote , Ġnew Item : ĠNote ) Ġ= ĊĠĠĠĠĠĠĠ Ġold Item . timestamp Ġ== Ġnew Item . timestamp ĊĊĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠNote , Ġnew Item : ĠNote ) Ġ= ĊĠĠĠĠĠĠĠ Ġold Item Ġ== Ġnew Item ĊĠ Ġ} ĊĊĠ Ġinner Ġclass ĠNotes ViewHolder ( private Ġval Ġitem Binding : ĠItem Note Binding ) Ġ: ĠRecyclerView . ViewHolder ĊĠ Ġ( item Binding . root ) Ġ{ ĊĊĠĠĠ Ġfun Ġbind ( note : ĠNote ) Ġ{ ĊĠĠĠĠĠ Ġitem Binding . tv Note . text Ġ= Ġnote . content ĊĠĠĠĠĠ Ġitem Binding . tv Timestamp . text Ġ= Ġtimestamp ToDate Conversion ( note . timestamp ) ĊĊĠĠĠĠĠ Ġtracker ?. let Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( it . isSelected ( note . timestamp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġitem Binding . rl Container . set BackgroundColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( item Binding . rl Container . context , ĠR . color . color Primary 6 0 )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġitem Binding . rl Container . background Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Note (): ĠItem Details Lookup . Item Details < Long > Ġ= ĊĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠItem Details Lookup . Item Details < Long >() Ġ{ ĊĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Position (): ĠInt Ġ= Ġadapter Position ĊĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Selection Key (): ĠLong Ġ= ĠgetItem ( adapter Position ). timestamp ĊĠĠĠĠĠĠĠ Ġ} ĊĠ Ġ} Ċ }