package Ġcom . example . inout 2 0 2 0 _ aim ers . bucket . Adapter Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . example . inout 2 0 2 0 _ aim ers . bucket . Database . Bucket Ċ import Ġcom . example . inout 2 0 2 0 _ aim ers . bucket . Database . List ViewModel Ċ import Ġcom . example . inout 2 0 2 0 _ aim ers . databinding . Item Bucket Binding Ċ import Ġco . mob i wise . material intro . shape . Focus Ċ import Ġco . mob i wise . material intro . shape . Focus Gravity Ċ import Ġco . mob i wise . material intro . shape . Shape Type Ċ import Ġco . mob i wise . material intro . view . Material Intro View Ċ Ċ class ĠBucket ListAdapter ( ĊĠĠĠ Ġval Ġlist ViewModel : ĠList ViewModel , ĊĠĠĠ Ġval Ġparent View : ĠView , ĊĠĠĠ Ġval Ġactivity : ĠFragment Activity ? Ċ ) Ġ: ĊĠĠĠ ĠList Adapter < Bucket , ĠBucket ListAdapter . ViewHolder >( ĊĠĠĠĠĠĠĠ ĠList Diff Callbacks () ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠ Ġvar Ġbucket List Ġ= ĠArrayList < Bucket >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Inflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠItem Bucket Binding . inflate ( layout Inflater , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( binding ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠgetItem ( position ) ĊĠĠĠĠĠĠĠ Ġholder . bind ( item , Ġlist ViewModel ) ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintro Delete ( holder . binding . item Text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠViewHolder ( val Ġbinding : ĠItem Bucket Binding ) Ġ: ĊĠĠĠĠĠĠĠ ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( item : ĠBucket , Ġlist ViewModel : ĠList ViewModel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . item Text . text Ġ= Ġitem . task ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . item Check . isChecked Ġ= Ġitem . check ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . item Check . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . check Ġ= Ġbinding . item Check . isChecked ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist ViewModel . update ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠList Diff Callbacks Ġ: ĠDiff Util . Item Callback < Bucket >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠBucket , Ġnew Item : ĠBucket ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . list Id Ġ== Ġnew Item . list Id ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠBucket , Ġnew Item : ĠBucket ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item Ġ== Ġnew Item ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun ĠgetList () Ġ= Ġbucket List ĊĊĠĠĠ Ġfun Ġremove item ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlist ViewModel . delete ( bucket List [ position ]) ĊĠĠĠĠĠĠĠ Ġnotify Item Removed ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrestore Item ( bucket : ĠBucket , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbucket List . add ( position , Ġbucket ) ĊĠĠĠĠĠĠĠ Ġnotify Item Changed ( position ) ĊĠĠĠĠĠĠĠ Ġlist ViewModel . insert ( bucket ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġintro Delete ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMaterial Intro View . Builder ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable Dot Animation ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable Icon ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Focus Gravity ( Focus Gravity . RIGHT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Focus Type ( Focus . MIN IMUM ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Delay Millis ( 4 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable Fade Animation ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform Click ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. dismiss On Touch ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Info Text (" Slide Ġthe Ġitem Ġtowards Ġleft Ġto Ġdelete Ġit ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Shape ( Shape Type . CIR CLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTarget ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Usage Id (" intro _ card _ 5 ") Ġ// ĠTHIS ĠSHO ULD ĠBE ĠUNIQUE ĠID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} Ċ }