package Ġcom . mars . co . lift metrics . ui . work out . create Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . google . android . material . text field . TextInput EditText Ċ import Ġcom . ibm . icu . text . Rule Based NumberFormat Ċ import Ġcom . mars . co . lift metrics . R Ċ import Ġcom . mars . co . lift metrics . data . model . Series Ċ import Ġcom . mars . co . lift metrics . databinding . Series Input Item Binding Ċ import Ġjava . util .* Ċ import Ġkotlin . properties . Deleg ates Ċ import Ġkotlin . properties . Observable Property Ċ Ċ class ĠTrain Series RecyclerView Adapter ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġseries : ĠMutable List < Series >, ĊĠĠĠ Ġprivate Ġval Ġchange H app ened : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġprivate Ġval Ġdelete Series : Ġ( Long ) Ġ-> ĠUnit Ċ ) Ġ: ĠRecyclerView . Adapter < Train Series RecyclerView Adapter . Series ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġordinal Formatter Ġ= ĠRule Based NumberFormat ( Locale . US , ĠRule Based NumberFormat . ORD IN AL ) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠSeries ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSeries ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSeries Input Item Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠSeries ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġitem : ĠSeries ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġis Confirmed Ġ= Ġposition Ġ< Ġseries . size ĊĠĠĠĠĠĠĠ Ġif Ġ( is Confirmed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ= Ġseries [ position ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwith ( holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Editing (! is Confirmed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnumber Ġ= Ġposition Ġ% Ġ( series . size Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Position . text Ġ= Ġordinal Formatter . format ( number Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Re ps . setText ( item ?. repe ats ?. toString () Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Weight . setText ( item ?. weight ?. toString () Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfirm . visibility Ġ= Ġif Ġ(! is Confirmed ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfirm . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġedit Position Ġ= Ġif Ġ( is Editing ) Ġposition Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Confirm ( this , Ġedit Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Weight . setOn Editor ActionListener Ġ{ Ġ_, Ġaction , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhandled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Ġ== ĠEditor Info . IME _ ACTION _ DONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġedit Position Ġ= Ġif Ġ( is Editing ) Ġposition Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Confirm ( this , Ġedit Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Editing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Series ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Confirm ( ĊĠĠĠĠĠĠĠ Ġholder : ĠSeries ViewHolder , ĊĠĠĠĠĠĠĠ Ġposition : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrepe ats Ġ= Ġholder . input Re ps . text . toString (). to Long OrNull () ĊĠĠĠĠĠĠĠ Ġval Ġweight Ġ= Ġholder . input Weight . text . toString (). toDouble OrNull () ĊĠĠĠĠĠĠĠ Ġif Ġ( repe ats Ġ== Ġnull Ġ|| Ġweight Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , ĠR . string . set _ error _ message , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġchange H app ened () ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseries . add ( Series ( repe ats , Ġweight )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Inserted ( series . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Input Ġrow Ġneeds Ġto Ġbe Ġupdated ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( series . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġseries [ position ] Ġ= Ġseries [ position ]. copy With ( repe ats , Ġweight , Ġnull ) ĊĠĠĠĠĠĠĠ Ġnotify Item Changed ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Series ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchange H app ened () ĊĠĠĠĠĠĠĠ Ġval Ġset Ġ= Ġseries . remove At ( position ) ĊĠĠĠĠĠĠĠ Ġif Ġ( set . series Id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Series ( set . series Id !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnotify Item Removed ( position ) ĊĠĠĠĠĠĠĠ Ġnotify Item Range Changed ( position , Ġseries . size Ġ+ Ġ 1 Ġ- Ġposition ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġseries . size Ġ+ Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠSeries ViewHolder ( binding : ĠSeries Input Item Binding ) Ġ: ĊĠĠĠĠĠĠĠ ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġset Position Ġ= Ġbinding . setPosition ĊĠĠĠĠĠĠĠ Ġval Ġinput Re ps Ġ= Ġbinding . set Repeat Input ĊĠĠĠĠĠĠĠ Ġval Ġinput Weight Ġ= Ġbinding . set Weight Input ĊĠĠĠĠĠĠĠ Ġval Ġconfirm Ġ= Ġbinding . set Confirm ĊĠĠĠĠĠĠĠ Ġval Ġedit Ġ= Ġbinding . set Edit ĊĠĠĠĠĠĠĠ Ġval Ġremove Ġ= Ġbinding . set Remove ĊĠĠĠĠĠĠĠ Ġvar Ġis Editing : ĠBoolean Ġby ĠDeleg ates . observable ( false ) Ġ{ Ġ_, Ġ_, ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Editing ( newValue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġhandle Editing ( is Editing : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Editing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfirm . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Re ps . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Weight . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Re ps . request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfirm . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Re ps . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Weight . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }