package Ġcom . example . todo Ċ Ċ import Ġandroid . arch . lifecycle . ViewModel Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . design . widget . Snackbar Ċ import Ġandroid . support . v 7 . app . AppCompatActivity ; Ċ import Ġandroid . util . Json Writer Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . reflect . Type Token Ċ Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġkotlinx . android . synt hetic . main . content _ main .* Ċ import Ġjava . io .* Ċ import Ġjava . time . LocalDateTime Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġadding Task Handler : Ġ( Task ) Ġ-> ĠUnit Ġ= Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠ Ġf rg mt . task List . add ( task ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfab . show () ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġshowing Adding Task Ġ= Ġfalse ĊĠĠĠ Ġlateinit Ġvar Ġf rg mt Ġ: ĠList Fragment ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Show Title Enabled ( false ) ĊĠĠĠĠĠĠĠ Ġfab . setOnClickListener Ġ{ Ġview Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( view , Ġ" Replace Ġwith Ġyour Ġown Ġaction ", ĠSn ackbar . LENGTH _ LONG ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction (" Action ", Ġnull ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Adding Task Fragment () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Manager Ġ= Ġsupport FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Transaction Ġ= Ġfragment Manager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= ĠList Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf rg mt Ġ= Ġfragment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Transaction . add ( R . id . frame Layout , Ġfragment , Ġ" list Fragment ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Transaction . commit () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf rg mt Ġ= Ġsupport FragmentManager . find Fragment By Tag (" list Fragment ") Ġas ĠList Fragment ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( show ing Adding Task ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfab . hide () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( files Dir ," tasks . json ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġobject Ġ: ĠType Token < Mutable List < Task >>() {}. type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf rg mt . task List . addAll ( gson . fromJson ( FileReader ( file ), type )) ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠFileNotFoundException ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Adding Task Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġfab . hide () ĊĠĠĠĠĠĠĠ Ġval Ġfragment Manager Ġ= Ġsupport FragmentManager ĊĠĠĠĠĠĠĠ Ġval Ġfragment Transaction Ġ= Ġfragment Manager . beginTransaction () ĊĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= ĠAdding Task () ĊĠĠĠĠĠĠĠ Ġfragment . adding Task Handler Ġ= Ġadding Task Handler ĊĠĠĠĠĠĠĠ Ġshowing Adding Task Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġfragment Transaction . replace ( R . id . frame Layout , Ġfragment , Ġ" adding Task ") ĊĠĠĠĠĠĠĠ Ġfragment Transaction . addTo Back Stack ( null ) ĊĠĠĠĠĠĠĠ Ġfragment Transaction . commit () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġshowing Adding Task Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġfab . show () ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġmenu ; Ġthis Ġadds Ġitems Ġto Ġthe Ġaction Ġbar Ġif Ġit Ġis Ġpresent . ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ main , Ġmenu ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsort ings Ġ= ĠlistOf < Pair < String , Ġ( Task ) Ġ-> ĠInt >>( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" color " Ġto Ġ{ Ġtask Ġ: ĠTask Ġ-> Ġtask . color Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" deadline " Ġto Ġ{ Ġtask Ġ: ĠTask Ġ-> Ġtask . deadline . year + task . deadline . month Value + task . deadline . hour + task . deadline . minute Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" priority " Ġto Ġ{ Ġtask Ġ: ĠTask Ġ-> Ġtask . priority Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" image " Ġto Ġ{ Ġtask Ġ: ĠTask Ġ-> Ġtask . image Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġvar Ġcmp Counter Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsort Tasks ( menuItem : ĠMenuItem ) Ġ{ ĊĠĠĠĠĠĠĠ Ġf rg mt . task List . sortBy Descending Ġ{ Ġsort ings [ cmp Counter ]. second . invoke ( it )} ĊĠĠĠĠĠĠĠ ĠLog . i (" xD ", f rg mt . task List . toString ()) ĊĠĠĠĠĠĠĠ Ġf rg mt . re cyclerView 2 . adapter ?. notify DataSet Changed () ĊĠĠĠĠĠĠĠ ĠSn ackbar . make ( coordinator Layout , Ġ" Sorting Ġby Ġ${ sort ings [ cmp Counter ]. first }", ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction (" Action ", Ġnull ). show () ĊĠĠĠĠĠĠĠ Ġcmp Counter ++ ĊĠĠĠĠĠĠĠ Ġcmp Counter Ġ= Ġcmp Counter . rem ( sort ings . size Ġ- Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠHandle Ġaction Ġbar Ġitem Ġclicks Ġhere . ĠThe Ġaction Ġbar Ġwill ĊĠĠĠĠĠĠĠ Ġ// Ġautomatically Ġhandle Ġclicks Ġon Ġthe ĠHome / Up Ġbutton , Ġso Ġlong ĊĠĠĠĠĠĠĠ Ġ// Ġas Ġyou Ġspecify Ġa Ġparent Ġactivity Ġin ĠAndroid Manifest . xml . ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ settings Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġgson . toJson ( f rg mt . task List ) ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( files Dir ," tasks . json ") ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠBuffered Writer ( FileWriter ( file , false )) ĊĠĠĠĠĠĠĠ Ġwriter . append ( str ) ĊĠĠĠĠĠĠĠ Ġwriter . flush () ĊĠĠĠĠĠĠĠ Ġwriter . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġif Ġ( show ing Adding Task ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrag m Ġ= Ġsupport FragmentManager . find Fragment By Tag (" adding Task ") Ġas ĠAdding Task ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrag m . adding Task Handler Ġ= Ġadding Task Handler ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Restore InstanceState ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsavedInstanceState ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshowing Adding Task Ġ= Ġit . getBoolean (" shown ig Adding Task ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( show ing Adding Task ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfab . hide () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġout State ?. put Boolean (" shown ig Adding Task ", show ing Adding Task ) ĊĊĠĠĠ Ġ} Ċ } Ċ