package Ġcom . amplify framework . samples . core Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . amplify framework . core . Amp lify Ċ import Ġcom . amplify framework . core . model . Model Ċ Ċ abstract Ġclass ĠItem Adapter < T Ġ: ĠModel >() Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġitems Ġ= Ġmutable ListOf < T >() Ġ// ĠList Ġthat Ġgets Ġdisplayed Ġby ĠviewHolder ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġcont : ĠContext ĊĠĠĠĠĠĠĠ Ġfun Ġset Context ( con : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcont Ġ= Ġcon ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadapter Layout Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( get Layout (), Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġget ViewHolder ( adapter Layout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġitems [ position ] ĊĠĠĠĠĠĠĠ Ġ( holder Ġas ĠB inder < T >). bind ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠB inder < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġbind ( data : ĠT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠReturns Ġthe Ġsize Ġof Ġthe Ġlist ĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġitems . size ĊĊĠĠĠ Ġ// ĠReturns Ġthe ĠViewHolder ĊĠĠĠ Ġabstract Ġfun Ġget ViewHolder ( view : ĠView ): ĠRecyclerView . ViewHolder ĊĊĠĠĠ Ġ// ĠReturns Ġthe Ġlayout ĊĠĠĠ Ġabstract Ġfun Ġget Layout (): ĠInt ĊĊĠĠĠ Ġ// ĠReturns Ġthe Ġmodel Ġclass ĊĠĠĠ Ġabstract Ġfun ĠgetModel Class (): ĠClass < out ĠT > ĊĊĠĠĠ Ġ// ĠQueries Ġmodels Ġfrom ĠData store Ġinto Ġa Ġlist ĊĠĠĠ Ġopen Ġfun Ġquery () Ġ{ ĊĠĠĠĠĠĠĠ ĠAmp lify . DataStore . query ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetModel Class (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġresults Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( results . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġresults . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Tutorial ", Ġ" Item Ġloaded : Ġ${ item . id }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cont Ġis ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( cont Ġas ĠActivity ). run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠLog . e (" Tutorial ", Ġ" Query ĠFailed : Ġ$ it ") Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠS aves Ġmodels Ġinto ĠData store ĊĠĠĠ Ġfun Ġsave ( model : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAmp lify . DataStore . save ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠLog . i (" Tutorial ", Ġ" Saved Ġitem : Ġ${ model . id }") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠLog . e (" Tutorial ", Ġ" Could Ġnot Ġsave Ġitem Ġto ĠData Store ", Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠAdds Ġa Ġmodel Ġto ĠData Store Ġif Ġsave Ġis Ġtrue , Ġotherwise Ġonly Ġadds Ġmodel Ġto Ġlist ĊĠĠĠ Ġfun Ġadd Model ( model : ĠT , Ġsave : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . add ( model ) ĊĠĠĠĠĠĠĠ Ġif Ġ( save ) Ġsave ( model ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠDeletes Ġa Ġmodel Ġfrom ĠData store Ġand Ġlist ĊĠĠĠ Ġopen Ġfun Ġdelete Model ( position : ĠInt ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġremove Item From List ( position ) ĊĠĠĠĠĠĠĠ ĠAmp lify . DataStore . delete ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠLog . i (" Tutorial ", Ġ" deleted Ġitem ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠLog . e (" Tutorial ", Ġ" Could Ġnot Ġdelete Ġitem ") Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġitem ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠSets Ġa Ġmodel Ġat Ġa Ġcertain Ġposition Ġin Ġthe Ġlist ĊĠĠĠ Ġfun Ġset Model ( position : ĠInt , Ġmodel : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems [ position ] Ġ= Ġmodel ĊĠĠĠĠĠĠĠ Ġsave ( model ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠReturns Ġa Ġmodel Ġat Ġa Ġcertain Ġposition ĊĠĠĠ Ġfun ĠgetItem ( position : ĠInt ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems [ position ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠRemoves Ġa Ġmodel Ġat Ġa Ġcertain Ġposition ĊĠĠĠ Ġfun Ġremove Item From List ( position : ĠInt ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġitems [ position ] ĊĠĠĠĠĠĠĠ Ġitems . remove ( item ) ĊĠĠĠĠĠĠĠ Ġnotify Item Removed ( position ) ĊĠĠĠĠĠĠĠ Ġreturn Ġitem ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠApp ends Ġanother Ġlist Ġto Ġthis Ġlist ĊĠĠĠ Ġfun Ġappend List ( list : ĠList < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . addAll ( list ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠClear s Ġlist ĊĠĠĠ Ġfun Ġclear List () Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠReturns Ġlist ĊĠĠĠ Ġfun ĠgetList (): ĠMutable List < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠSets Ġlist Ġwith Ġanother Ġlist ĊĠĠĠ Ġfun Ġset List ( list : ĠMutable List < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems Ġ= Ġlist ĊĠĠĠ Ġ} Ċ } Ċ