package Ġru . job 4 j . tod olist . store Ċ Ċ import Ġandroid . content . Context Ċ import Ġru . job 4 j . tod olist . Task Ċ import Ġjava . io .* Ċ import Ġjava . util .* Ċ import Ġjava . util . stream . Collectors Ċ Ċ class ĠFile Store Ġprivate Ġconstructor ( private Ġval Ġcontext : ĠContext ) Ġ: ĠI Store Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġcounter Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġtasks : ĠMutable List < Task > Ġ= ĠArrayList () ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Store () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġall Files Ġ= ĠFile ( context . files Dir . toString ()). list Files () ĊĠĠĠĠĠĠĠ Ġall Files ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBufferedReader ( FileReader ( it )). use Ġ{ Ġ` in ` Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Ġ= ĠTask (` in `. readLine (). toInt (), Ġ` in `. readLine (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` in `. readLine (), Ġ` in `. readLine (), Ġ` in `. readLine (), Ġ` in `. readLine ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . closed Ġ== Ġ"") Ġtask . closed Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtasks . add ( task ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( all Files Ġ!= Ġnull Ġ&& Ġall Files . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter Ġ= Ġall Files [ all Files . size Ġ- Ġ 1 ]. name . split ("\\ .". to Regex ()). to Typed Array ()[ 0 ]. toInt () Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Tasks (): ĠList < Task > Ġ= Ġtasks ĊĊĠĠĠ Ġoverride Ġfun Ġget Filtered Tasks ( filter : ĠString ): ĠList < Task > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtasks . stream (). filter Ġ{ Ġ(_, Ġname , Ġdesc , Ġcreated ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname . toLowerCase (). contains ( filter . toLowerCase ()) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesc . toLowerCase (). contains ( filter . toLowerCase ()) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreated . toLowerCase (). contains ( filter . toLowerCase ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. collect ( Collectors . toList ()) ĊĊĠĠĠ Ġoverride Ġfun Ġadd Task ( name : ĠString , Ġdescription : ĠString , Ġcreated : ĠString , Ġphoto : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( context . files Dir , Ġ"$ counter . txt ") ĊĠĠĠĠĠĠĠ ĠPrintWriter ( Buffered Writer ( FileWriter ( file ))). use Ġ{ Ġout Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( counter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( description ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( created ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( photo ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtasks . add ( Task ( counter ++, Ġname , Ġdescription , Ġcreated , Ġnull , Ġphoto )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġedit Task ( id : ĠInt , Ġname : ĠString , Ġdescription : ĠString , Ġclosed : ĠString , Ġphoto : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( context . files Dir , Ġ"$ id . txt ") ĊĠĠĠĠĠĠĠ Ġfind Task ByID ( id )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrintWriter ( Buffered Writer ( FileWriter ( file ))). use Ġ{ Ġout Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( this . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( created ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( closed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( photo ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . name Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . desc Ġ= Ġdescription ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . closed Ġ= Ġclosed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . photo Ġ= Ġphoto ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose Or Re open Task ( id : ĠInt , Ġclosed : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( context . files Dir , Ġ"$ id . txt ") ĊĠĠĠĠĠĠĠ Ġfind Task ByID ( id )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrintWriter ( Buffered Writer ( FileWriter ( file ))). use Ġ{ Ġout Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( this . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( desc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( created ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( closed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( photo ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . closed Ġ= Ġclosed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Task ( id : ĠInt ): ĠInt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtasks . indexOf ( find Task ByID ( id )). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( context . files Dir , Ġ"$ id . txt "). delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtasks . remove At ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġdelete All Tasks (): ĠUnit Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( context . files Dir . toString ()). list Files ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . forEach Ġ{ Ġfile Ġ-> Ġfile . delete () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtasks . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} !! ĊĊĠĠĠ Ġoverride Ġfun Ġfind Task ByID ( id : ĠInt ): ĠTask ? Ġ= Ġtasks . first OrNull Ġ{ Ġtask Ġ-> Ġtask . id Ġ== Ġid Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar ĠINST : ĠFile Store ĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance ( context : ĠContext ): ĠFile Store Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! this :: INST . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINST Ġ= ĠFile Store ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINST . update Store () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠINST ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }