/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 Ġg par ap Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġg par ap . apps . todo _ list . adapter Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . CheckBox Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . navigation . Navigation Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġg par ap . apps . todo _ list . R Ċ import Ġg par ap . apps . todo _ list . adapter . ToDo Adapter . ToDo ViewHolder Ċ import Ġg par ap . apps . todo _ list . data . ToDo Database . Companion . getInstance Ċ import Ġg par ap . apps . todo _ list . data . ToDo Model Ċ import Ġg par ap . apps . todo _ list . data . ToDo Repository Ċ import Ġg par ap . apps . todo _ list . ui . todo _ list . ToDo List Fragment Directions Ċ import Ġg par ap . apps . todo _ list . utils . Utils Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . util .* Ċ Ċ class ĠTo Do Adapter Ġ: ĠRecyclerView . Adapter < ToDo ViewHolder >() Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġtodos List : ĠList < ToDo Model > ĊĠĠĠ Ġprivate Ġvar Ġcontext : ĠContext ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġtodos List Ġ= ĠArrayList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget ToDo List (): ĠList < ToDo Model > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtodos List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Todos List ( todos List : ĠList < ToDo Model >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . todos List Ġ= Ġtodos List ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget ToDo At Position ( position : ĠInt ): ĠTo Do Model Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtodos List [ position ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠTo Do ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext Ġ= Ġparent . context ĊĊĠĠĠĠĠĠĠ Ġ// create Ġnew Ġto - do Ġlist Ġview ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( parent . context ). inflate ( R . layout . todo _ view , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠTo Do ViewHolder ( view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠTo Do ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// bind ĠViewHolder Ġcontents Ġwith Ġlist Ġelements ĊĠĠĠĠĠĠĠ Ġholder . textView ToDo . text Ġ= Ġtodos List [ position ]. todo ĊĠĠĠĠĠĠĠ Ġholder . textView Deadline . text Ġ= Ġtodos List [ position ]. deadline TimeStamp ĊĠĠĠĠĠĠĠ Ġholder . checkBox Done . isChecked Ġ= Ġtodos List [ position ]. is Done ĊĊĠĠĠĠĠĠĠ Ġ// handle Ġvisibility Ġof Ġ" deadline " Ġtimestamp Ġand Ġlabel ĊĠĠĠĠĠĠĠ Ġ// Ġ( based Ġon Ġif Ġthere Ġis Ġa Ġdate Ġand / or Ġtime Ġstamp ) ĊĠĠĠĠĠĠĠ Ġif Ġ( holder . textView Deadline . text . isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . textView Deadline . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . textView Deadline Label . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . textView Deadline . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . textView Deadline Label . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// helper Ġfor Ġb rev ity ĊĠĠĠĠĠĠĠ Ġvar Ġis Done Ġ= Ġholder . checkBox Done . isChecked ĊĊĠĠĠĠĠĠĠ Ġstrike Through ToDo Text If Done ( holder , Ġis Done ) ĊĊĠĠĠĠĠĠĠ Ġ// update Ġdatabase Ġwith Ġthe ĠTo _ Do 's Ġ" is Done " Ġcheckbox Ġvalue ĊĠĠĠĠĠĠĠ Ġval Ġdatabase Ġ= ĠgetInstance ( context !! ) ĊĠĠĠĠĠĠĠ Ġval Ġdao Ġ= Ġdatabase . ToDo Dao () ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠTo Do Repository ( dao ) ĊĠĠĠĠĠĠĠ Ġholder . checkBox Done . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// update Ġdatabase ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Done Ġ= Ġtodos List [ position ]. is Done ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . edit ToDo ( todos List [ position ]. id , Ġ! is Done ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstrike Through ToDo Text If Done ( holder , Ġ! is Done ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIndex OutOfBoundsException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// navigate Ġto Ġedit Ġfragment Ġand Ġpass Ġexisting Ġto - do ĊĠĠĠĠĠĠĠ Ġholder . item View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnav Action Ġ= ĠTo Do List Fragment Directions . action ToDo List Fragment To Edit ToDo Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtodos List [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation . find Nav Controller ( it ). navigate ( nav Action ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġ// get Ġnumber Ġof Ġtodos ĊĠĠĠĠĠĠĠ Ġreturn Ġtodos List . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstrike Through ToDo Text If Done ( holder : ĠTo Do ViewHolder , Ġis Done : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠUtils . strike Text ( holder . textView ToDo , Ġis Done ) ĊĠĠĠĠĠĠĠ ĠUtils . strike Text ( holder . textView Deadline , Ġis Done ) ĊĠĠĠĠĠĠĠ ĠUtils . strike Text ( holder . textView Deadline Label , Ġis Done ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDescri bes Ġthe Ġview Ġ( and Ġits Ġwidgets ) Ġinside Ġthe ĠRecyclerView . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠTo Do ViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// get Ġview Ġwidgets ĊĠĠĠĠĠĠĠ Ġvar ĠtextView ToDo : ĠTextView Ġ= ĠitemView . findViewById ( R . id . textView Todo ) ĊĠĠĠĠĠĠĠ Ġvar ĠtextView Deadline : ĠTextView Ġ= ĠitemView . findViewById ( R . id . textView Deadline ) ĊĠĠĠĠĠĠĠ Ġvar ĠtextView Deadline Label : ĠTextView Ġ= ĠitemView . findViewById ( R . id . textView Deadline Label ) ĊĠĠĠĠĠĠĠ Ġvar ĠcheckBox Done : ĠCheckBox Ġ= ĠitemView . findViewById ( R . id . checkBox Done ) ĊĠĠĠ Ġ} Ċ }