package Ġcom . li or hass . android . med s stock tracker . med ic inel ist Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġandroidx . recyclerview . selection . Item Details Lookup Ċ import Ġandroidx . recyclerview . selection . Selection Tracker Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . recyclerview . widget . RecyclerView . Adapter Ċ import Ġcom . li or hass . android . med s stock tracker . R Ċ import Ġcom . li or hass . android . med s stock tracker . database . Med icine Ċ import Ġcom . li or hass . android . med s stock tracker . databinding . Fragment Med icine ListItem Binding Ċ import Ġcom . li or hass . android . med s stock tracker . model .* Ċ import Ġjava . util .* Ċ Ċ class ĠMed icine ListAdapter ( val ĠviewModel : ĠMed icine List ViewModel , Ġval Ġcontext : ĠContext ) Ġ: ĊĠĠĠ ĠAdapter < Med icine ListAdapter . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġ// ĠCache Ġimages Ġso Ġwe Ġdon 't Ġhave Ġto Ġcreate Ġthe ĠDrawable Ġevery Ġtime ĊĠĠĠ Ġprivate Ġvar Ġimage Status Ok : ĠDrawable ? Ġ= ĠContext Compat . get Drawable ( context , ĠR . drawable . ic _ check _ circle _ outline _ green _ 4 8 dp ) ĊĠĠĠ Ġprivate Ġvar Ġimage Status Warn : ĠDrawable ? Ġ= ĠContext Compat . get Drawable ( context , ĠR . drawable . ic _ information _ outline _ orange _ 4 8 dp ) ĊĠĠĠ Ġprivate Ġvar Ġimage Status Alert : ĠDrawable ? Ġ= ĠContext Compat . get Drawable ( context , ĠR . drawable . ic _ alert _ outline _ red _ 4 8 dp ) ĊĊĠĠĠ Ġprivate Ġvar Ġdata : ĠList < Med icine > Ġ= ĠlistOf () Ġ// ĠInject ed Ġby Ġcalling Ġour Ġset Med ic ines () Ġfunction ĊĠĠĠ Ġvar Ġselection Tracker : ĠSelection Tracker < Long >? Ġ= Ġnull Ġ Ġ// ĠBuild Ġby Ġthe Ġfragment Ġand Ġinjected Ġhere ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Has Stable Ids ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠFragment Med icine ListItem Binding . inflate ( in flater , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= ĠviewModel ĊĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( binding ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmedic ine Ġ= Ġdata [ position ] ĊĠĠĠĠĠĠĠ Ġholder . bind ( med icine , selection Tracker ?. isSelected ( med icine . id ) Ġ?: Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġdata . size ĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ= Ġdata [ position ]. id ĊĊĠĠĠ Ġ// ĊĠĠĠ Ġ// ĠViewHolder ĊĠĠĠ Ġ// ĊĠĠĠ Ġinner Ġclass ĠViewHolder ( private Ġval Ġbinding : ĠFragment Med icine ListItem Binding ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġbind ( med icine : ĠMed icine , Ġis Activated : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . med icine Ġ= Ġmedic ine ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . notes Line . visibility Ġ= Ġif Ġ( med icine . notes . isBlank ()) ĠView . GONE Ġelse ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( med icine . calculate Med icine Status ( context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMed icine Status . STATUS _ OK Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . status Image . setImage Drawable ( image Status Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . status Image . content Description Ġ= Ġcontext . getString ( R . string . status _ ok ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMed icine Status . STATUS _ WARN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . status Image . setImage Drawable ( image Status Warn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . status Image . content Description Ġ= Ġcontext . getString ( R . string . status _ warning ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMed icine Status . STATUS _ CRITICAL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . status Image . setImage Drawable ( image Status Alert ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . status Image . content Description Ġ= Ġcontext . getString ( R . string . status _ critical ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root . is Activated Ġ= Ġis Activated ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRequired Ġfor Ġsupporting Ġselections ĊĠĠĠĠĠĠĠ Ġfun ĠgetItem Details (): Ġ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 Ġ= ĠitemId ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġin Selection Hot spot ( e : ĠMotion Event ): ĠBoolean Ġ= Ġfalse Ġ// ĠNo Ġselection - hot spot Ġin Ġour Ġitems ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġin Drag Region ( e : ĠMotion Event ): ĠBoolean Ġ= Ġtrue Ġ// ĠNo Ġmouse Ġdriven Ġband - selection Ġin Ġour Ġitems ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Med ic ines ( med ic ines List : ĠList < Med icine >) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġ= Ġsort Med icine List ( med ic ines List ) ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () Ġ// ĠNotify Ġthe ĠRecyclerView Ġthat Ġthe Ġdata Ġhas Ġchanged Ġtodo : Ġreplace Ġwith Ġdiff ing ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġre Sort Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġ= Ġsort Med icine List ( data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġlocale Ġ= ĠLocale . getDefault () ĊĠĠĠ Ġprivate Ġfun Ġsort Med icine List ( orig List : ĠList < Med icine >): ĠList < Med icine > Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠsortBy Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPreference Manager . getDefault SharedPreferences ( context ). getInt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . pref _ med icine _ sort _ key ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMed icine List Fragment . SORT _ BY _ UR GEN CY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( sortBy Ġ== ĠMed icine List Fragment . SORT _ BY _ UR GEN CY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorig List . sorted By Ġ{ it . expected Run Out Date And Time } ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorig List . sorted By Ġ{ it . name . toLowerCase ( locale )} Ġ// ĠSort Ġcase - ins ensitive ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }