package Ġcom . rag todo Ċ Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . EditText Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġorg . apache . commons . io . FileUtils Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . nio . charset . Charset Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġvar ĠlistOf Items Ġ= Ġmutable ListOf < String >() ĊĠĠĠ Ġlateinit Ġvar Ġadapter : ĠTask Item Adapter ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġval Ġon Long ClickListener Ġ= Ġobject Ġ: ĠTask Item Adapter . On Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Long Clicked ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRemove Ġthe Ġitem Ġfrom Ġthe Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Items . remove At ( position ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNotify Ġthe Ġadapter Ġthat Ġour Ġdata Ġhas Ġchanged ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSave Ġitems Ġto Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Items () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠLoad Ġsaved Ġitems ĊĠĠĠĠĠĠĠ Ġload Items () ĊĊĠĠĠĠĠĠĠ Ġ// ĠLookup Ġthe Ġre cycler view Ġin Ġactivity Ġlayout ĊĠĠĠĠĠĠĠ Ġval Ġre cyclerView Ġ= ĠfindViewById < RecyclerView >( R . id . re cyclerView ) ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġadapter Ġpassing Ġin Ġthe Ġsample Ġuser Ġdata ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠTask Item Adapter ( listOf Items , Ġon Long ClickListener ) ĊĠĠĠĠĠĠĠ Ġ// ĠAttach Ġthe Ġadapter Ġto Ġthe Ġre cycler view Ġto Ġpopulate Ġitems ĊĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġlayout Ġmanager Ġto Ġposition Ġthe Ġitems ĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinput TextField Ġ= ĠfindViewById < EditText >( R . id . addItem Field ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġa Ġreference Ġto Ġthe Ġbutton ĊĠĠĠĠĠĠĠ Ġ// Ġand Ġthen Ġset Ġan Ġonclick Ġlistener ĊĠĠĠĠĠĠĠ ĠfindViewById < Button >( R . id . button ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Added Item Ġ= Ġinput TextField . text . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe ĠString Ġto Ġour Ġlist Ġof Ġtasks : ĠlistOf Tasks ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Items . add ( user Added Item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNotify Ġthe Ġadapter Ġthat Ġour Ġdata Ġhas Ġbeen Ġupdated ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify Item Inserted ( listOf Items . size Ġ- Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReset Ġtext Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput TextField . setText ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSave Ġitems Ġto Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Items () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠSave Ġthe Ġdata Ġuser Ġhas Ġinput ted ĊĠĠĠ Ġ// ĠSave Ġdata Ġby Ġwriting Ġand Ġreading Ġfrom Ġa Ġfile ĊĊĠĠĠ Ġ// ĠGet Ġthe Ġfile Ġwe Ġneed ĊĠĠĠ Ġfun ĠgetData File (): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠEvery Ġline Ġis Ġgoing Ġto Ġrepresent Ġa Ġspecific Ġtask Ġin Ġour Ġlist Ġof Ġtasks ĊĠĠĠĠĠĠĠ Ġreturn ĠFile ( files Dir , Ġ" rag todo . txt ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠLoad Ġthe Ġtasks Ġby Ġreading Ġevery Ġline Ġin Ġthe Ġdata Ġfile ĊĠĠĠ Ġfun Ġload Items () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Items Ġ= ĠFileUtils . read Lines ( getData File (), ĠCharset . default Charset ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( io Exception : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġio Exception . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Save Ġtasks Ġby Ġwriting Ġitems Ġinto Ġthe Ġdata Ġfile ĊĠĠĠ Ġfun Ġsave Items () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils . write Lines ( getData File (), ĠlistOf Items ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( io Exception : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġio Exception . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }