/* ĊĠĠ ĠCopyright Ġ 2 0 2 1 ĠDavid ĠG anz ĊĊĠĠ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); ĊĠĠ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ */ Ċ Ċ package Ġde . sh arable . android . school _ planner . activities Ċ Ċ import Ġandroid . app . DatePicker Dialog Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . widget .* Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġde . sh arable . android . school _ planner . R Ċ import Ġde . sh arable . android . school _ planner . databinding . Activity Create Test Binding Ċ import Ġde . sh arable . android . school _ planner . sqlite . Database Interface Ċ import Ġde . sh arable . android . school _ planner . subjects . Subject Ċ import Ġde . sh arable . android . school _ planner . subjects . Subject s Ċ import Ġde . sh arable . android . school _ planner . tasks . Tasks Ċ import Ġde . sh arable . android . school _ planner . tasks . Test Entry Ċ import Ġde . sh arable . android . school _ planner . util . Constants Ċ import Ġde . sh arable . android . school _ planner . util . DatePicker Fragment Ċ import Ġde . sh arable . android . school _ planner . util . Select Subject Result Contract Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . format . DateTime Formatter Ċ Ċ class ĠCreate Test Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Create Test Binding ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdate Picker Fragment : ĠDate Picker Fragment ĊĊĠĠĠ Ġprivate Ġvar Ġdate : ĠLocalDate ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġsubject : ĠSubject ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġreminder Date : ĠLocalDate ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġreminder Index : ĠInt Ġ= Ġ- 1 ĊĊĠĠĠ Ġprivate Ġvar Ġreturn To Main : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġtest : ĠTest Entry ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġselect Subject Result Ġ= ĊĠĠĠĠĠĠĠ Ġregister For Activity Result ( Select Subject Result Contract ()) Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== Ġnull Ġ|| Ġresult Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ register For Activity Result ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubject Ġ= ĠSubject s . from ID ( result ) Ġ?: Ġthrow ĠException (" No Ġvalid Ġsubject Ġselected !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . test Subject Text . text Ġ= Ġsubject !!. name ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Create Test Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġreturn To Main Ġ= Ġintent . getBoolean Extra (" return To Main ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġtest Ġ= Ġintent . get Parcelable Extra (" task ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! return To Main Ġ&& Ġtest Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle : ĠTextView Ġ= ĠfindViewById ( R . id . headline ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle . text Ġ= Ġresources . getString ( R . string . create _ test _ headline _ edit mode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . add Test Button . text Ġ= Ġresources . getString ( R . string . general _ save ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġtest !!. due Date () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreminder Date Ġ= Ġtest !!. reminder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubject Ġ= Ġtest !!. subject () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . test Description . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEdit able . Factory . getInstance (). new Editable ( test !!. description ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . test Date Text . text Ġ= ĠConstants . long Formatter . format ( test !!. due Date ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreminder Copy : ĠLocalDate Ġ= Ġtest !!. reminder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠConstants . reminder Choice From LocalDate ( reminder Copy , Ġdate !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( choice , Ġindex ) Ġ= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . test Reminder Text . text Ġ= Ġchoice ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreminder Index Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . test Reminder Text . text Ġ= ĠConstants . long Formatter . format ( reminder Date !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . test Subject Text . text Ġ= Ġtest !!. subject (). name ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠConstants . load Reminder Choices ( resources ) ĊĊĠĠĠĠĠĠĠ Ġbinding . test Date Layout . setOnClickListener Ġ{ Ġselect Due At Date () Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . test Reminder Layout . setOnClickListener Ġ{ Ġselect Reminder () Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . test Subject Layout . setOnClickListener Ġ{ Ġselect Subject Result . launch ( null ) Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . add Test Button . setOnClickListener Ġ{ Ġadd Test () Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . back Button . setOnClickListener Ġ{ Ġgo Back () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ= Ġgo Back () ĊĊĠĠĠ Ġprivate Ġfun Ġgo Back () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠMainActivity :: class . java ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate DatePicker Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġdate Picker Fragment Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ!= Ġnull Ġ-> ĠDate Picker Fragment ( date ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠDate Picker Fragment ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselect Due At Date () Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate DatePicker Fragment () ĊĊĠĠĠĠĠĠĠ Ġdate Picker Fragment . new Listener ( DatePicker Dialog . On Date Set Listener Ġ{ Ġ_: ĠDate Picker , Ġyear : ĠInt , Ġmonth : ĠInt , Ġday OfMonth : ĠInt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Date Ġ= ĠLocalDate . of ( year , Ġmonth Ġ+ Ġ 1 , Ġday OfMonth ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( local Date . is Before ( LocalDate . now ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . create _ task _ date _ must be af tern ow _ error ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Date Set Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatter Ġ= ĠDateTime Formatter . of Pattern ( Constants . long DateFormat ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . test Date Text . text Ġ= Ġformatter . format ( local Date ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġlocal Date ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġdate Picker Fragment . show ( support FragmentManager , Ġ" date Picker ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselect Reminder () Ġ{ ĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( resources . getString ( R . string . create _ task _ reminder _ alert _ dialog _ title )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Neutral Button ( resources . getString ( R . string . general _ cancel )) Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Single Choice Items ( Constants . reminder Choices , Ġreminder Index ) Ġ{ Ġdialog , Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( date Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . create _ task _ reminder _ must select due at before _ error ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ set Single Choice Items ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== ĠConstants . reminder Choices . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate DatePicker Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Picker Fragment . new Listener ( DatePicker Dialog . On Date Set Listener Ġ{ Ġ_, Ġyear , Ġmonth , Ġday OfMonth Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Month : ĠInt Ġ= Ġmonth Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Date Ġ= ĠLocalDate . of ( year , Ġactual Month , Ġday OfMonth ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! date !!. is After ( local Date )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . create _ task _ reminder _ must be before _ error ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Date Set Listener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( local Date . is Before ( LocalDate . now ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . create _ task _ date _ must be af tern ow _ error ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Date Set Listener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreminder Date Ġ= Ġlocal Date ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreminder Index Ġ= Ġ- 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatter Ġ= ĠDateTime Formatter . of Pattern ( Constants . long DateFormat ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . test Reminder Text . text Ġ= Ġformatter . format ( local Date ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Picker Fragment . show ( support FragmentManager , Ġ" date Picker ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . test Reminder Text . text Ġ= ĠConstants . reminder Choices [ index ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreminder Date Ġ= Ġdate !!. minus Days ( Constants . reminder Days [ index ]. to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreminder Index Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdescription : ĠString Ġ= Ġbinding . test Description . text . trim (). toString () ĊĠĠĠĠĠĠĠ Ġvar Ġshould Return Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( date Ġ== Ġnull Ġ|| Ġreminder Date Ġ== Ġnull Ġ|| Ġsubject Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . create _ task _ information missing _ error ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould Return Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( should Return ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( return To Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDatabase Interface . insert Test ( description , Ġdate !! , Ġreminder Date !! , Ġsubject !!. id , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgo Back () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Test Entry ( description ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( test Ġ== Ġnull ) Ġthrow ĠException (" No Ġtest Ġavailable !") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠView Task Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" task ", Ġtest ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Test Entry ( description : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtest Ġ= ĠTest Entry ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest !!. database Id (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreminder Date !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubject !!. id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest !!. is Deleted () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠDatabase Interface . update Test ( test !! , Ġthis ) ĊĠĠĠĠĠĠĠ ĠTasks . load Tasks ( this ) ĊĠĠĠ Ġ} Ċ Ċ }