package Ġcom . google . nor in ori 6 7 9 1 . cyc led o . ui . edit Ċ Ċ import Ġandroidx . databinding . Observable Boolean Ċ import Ġandroidx . databinding . Observable Field Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . google . nor in ori 6 7 9 1 . cyc led o . model . data . Tag Ċ import Ġcom . google . nor in ori 6 7 9 1 . cyc led o . model . data . Task Ċ import Ġcom . google . nor in ori 6 7 9 1 . cyc led o . model . enum . Cycle Term Ċ import Ġcom . google . nor in ori 6 7 9 1 . cyc led o . model . realm . Realm Tag Ċ import Ġcom . google . nor in ori 6 7 9 1 . cyc led o . model . repository . Tag Item Ċ import Ġcom . google . nor in ori 6 7 9 1 . cyc led o . model . repository . Tag Items Ċ import Ġcom . google . nor in ori 6 7 9 1 . cyc led o . model . repository . Task Item Ċ import Ġio . realm . Realm Results Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* ĊĊ Ċ class ĠEdit ViewModel Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġrepository Ġ= ĠTag Items () ĊĊĠĠĠ Ġvar Ġtask : ĠTask ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġtitle Ġ= ĠObservable Field < String >(" ") ĊĠĠĠ Ġvar Ġcontent : ĠString ? Ġ= Ġ"" ĊĠĠĠ Ġvar Ġundo Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġredo Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġbold Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġitalic Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġsub Script Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġsuper Script Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġstrike through Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġunderline Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġheading 1 Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġheading 2 Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġheading 3 Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġheading 4 Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġheading 5 Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġheading 6 Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar ĠtextColor Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġbg Color Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġindent Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġout dent Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġalign Left Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġalign Center Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġalign Right Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġinsert Bullet s Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġinsert Numbers Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġblock Quote Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġinsert Image Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġinsert Link Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġinsert CheckBox Ġ= ĠMutable LiveData < Boolean >() ĊĊĠĠĠ Ġvar Ġshow Edit Menu Ġ= ĠObservable Boolean ( false ) ĊĠĠĠ Ġvar Ġinput Tag Ġ= ĠObservable Field < String >(" ") ĊĠĠĠ Ġvar ĠonComplete Add Task Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġon Reset Cycle All Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġon Reset Cycle Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar ĠonSelect Tag Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġis Selected Tags Ġ= ĠObservable Boolean ( false ) ĊĠĠĠ Ġvar Ġselected Tag : ĠMutable List < Tag > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġvar Ġall Tags : ĠMutable List < Tag > Ġ= Ġget Tags () ĊĠĠĠ Ġvar Ġinitial All Tag : ĠMutable List < Tag > Ġ= Ġget Tags () ĊĊĠĠĠ Ġfun Ġstart Select Tag (){ ĊĠĠĠĠĠĠĠ ĠonSelect Tag . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Tags (): ĠMutable List < Tag >{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrealm Result To Tag List ( repository . getAll Tags ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrealm Result To Tag List ( realm Results : ĠRealm Results < Realm Tag >): ĠMutable List < Tag >{ ĊĠĠĠĠĠĠĠ Ġvar Ġtags : ĠMutable List < Tag > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġrealm Results . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtag Ġ= ĠTag ( it . unique Id , Ġit . deleted , Ġit . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtags . add ( tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtags ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Selected Tag ( tag : ĠTag ){ ĊĠĠĠĠĠĠĠ Ġif ( selected Tag . contains ( tag )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Tag . remove ( tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( selected Tag . size Ġ== Ġ 0 ) Ġis Selected Tags . set ( false ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Tag . add ( tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( selected Tag . size Ġ> Ġ 0 ) Ġis Selected Tags . set ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġget Update Tag (){ ĊĠĠĠĠĠĠĠ Ġinput Tag . get ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it . isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtmp Ġ= Ġinput Tag . get ()?. split (" Ġ", Ġ" ãĢĢ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( isNot Tag Exist ( it )){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Tags . add ( 0 , ĠTag ( null , Ġ 0 , Ġit )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( isNot Selected Tag Exist ( it )){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Tag . add ( Tag ( null , Ġ 0 , Ġit )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Tag . set ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( selected Tag . size Ġ> Ġ 0 ) Ġis Selected Tags . set ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonSelect Tag . post Value ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Not Tag Exist ( tag : String ): ĠBoolean { ĊĠĠĠĠĠĠĠ Ġall Tags ?. forEach { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it . name Ġ== Ġtag ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Not Selected Tag Exist ( tag : String ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġselected Tag ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it . name Ġ== Ġtag ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġend Select Tag (){ ĊĠĠĠĠĠĠĠ ĠonSelect Tag . post Value ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset Cycle ( task : ĠTask ){ ĊĠĠĠĠĠĠĠ Ġvar Ġterm Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġpre Term Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor ( cycle Term Ġin ĠCycle Term . values ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( cycle Term . term Ġ< Ġtask . status ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpre Term Ġ= Ġcycle Term . term ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġterm Ġ= Ġtask . status Ġ- Ġcycle Term . term ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( term Ġ> ĠCycle Term . TW ENT Y . term ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġterm Ġ= ĠCycle Term . TW ENT Y . term ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsd Format Ġ= ĠSimpleDateFormat (" yyyy / MM / dd / Ġhh : mm : ss ") ĊĠĠĠĠĠĠĠ Ġvar Ġtask Date Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġtask Date . time Ġ= Ġsd Format . parse ( task . startDate ) ĊĠĠĠĠĠĠĠ Ġtask Date . add ( Calendar . DATE , Ġterm ) ĊĊĠĠĠĠĠĠĠ Ġtask . status Ġ= Ġpre Term ĊĠĠĠĠĠĠĠ Ġtask . startDate Ġ= Ġsd Format . format ( task Date . time ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtask Item Ġ= ĠTask Item () ĊĠĠĠĠĠĠĠ Ġtask Item . update Reset Cycle ( task ) ĊĠĠĠĠĠĠĠ Ġon Reset Cycle . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset Cycle All ( task : ĠTask ){ ĊĠĠĠĠĠĠĠ Ġval Ġtask Item Ġ= ĠTask Item () ĊĠĠĠĠĠĠĠ Ġtask Item . update Reset Cycle All ( task ) ĊĠĠĠĠĠĠĠ Ġon Reset Cycle All . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchange Edit Menu ( has Focus : ĠBoolean ){ ĊĠĠĠĠĠĠĠ Ġshow Edit Menu . set ( has Focus ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Add Tag ( tag : ĠTag ): ĠBoolean { ĊĠĠĠĠĠĠĠ Ġinitial All Tag ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it . name Ġ== Ġtag . name ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Task (){ ĊĠĠĠĠĠĠĠ Ġval Ġtask Item Ġ= ĠTask Item () ĊĠĠĠĠĠĠĠ Ġval Ġtag Item Ġ= ĠTag Item () ĊĠĠĠĠĠĠĠ Ġselected Tag ?. forEach { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( is Add Tag ( it )) Ġtag Item . insert Tag ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( task Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinsert Task Ġ= ĠTask ("", Ġ 0 , Ġtitle . get (), Ġcontent , Ġnull , Ġ 0 , Ġnull , Ġnull , Ġnull , Ġselected Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Item . insert Task ( insert Task ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdate Task Ġ= Ġtask ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Task ?. title Ġ= Ġtitle . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Task ?. content Ġ= Ġcontent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Task ?. tags Ġ= Ġselected Tag ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Item . update Task ( update Task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠonComplete Add Task . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Content ( text : ĠString ){ ĊĠĠĠĠĠĠĠ Ġcontent Ġ= Ġtext ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġclick Undo (){ ĊĠĠĠĠĠĠĠ Ġundo . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Redo (){ ĊĠĠĠĠĠĠĠ Ġredo . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Bold (){ ĊĠĠĠĠĠĠĠ Ġbold . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Italic (){ ĊĠĠĠĠĠĠĠ Ġitalic . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Sub script (){ ĊĠĠĠĠĠĠĠ Ġsub Script . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Sup erscript (){ ĊĠĠĠĠĠĠĠ Ġsuper Script . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Stri ke through (){ ĊĠĠĠĠĠĠĠ Ġstrike through . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Underline (){ ĊĠĠĠĠĠĠĠ Ġunderline . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Heading 1 (){ ĊĠĠĠĠĠĠĠ Ġheading 1 . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Heading 2 (){ ĊĠĠĠĠĠĠĠ Ġheading 2 . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Heading 3 (){ ĊĠĠĠĠĠĠĠ Ġheading 3 . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Heading 4 (){ ĊĠĠĠĠĠĠĠ Ġheading 4 . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Heading 5 (){ ĊĠĠĠĠĠĠĠ Ġheading 5 . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Heading 6 (){ ĊĠĠĠĠĠĠĠ Ġheading 6 . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick TextColor (){ ĊĠĠĠĠĠĠĠ Ġif ( textColor . value Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextColor . value Ġ?: ĠtextColor . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( textColor . value !! ) textColor . post Value ( false ) ĊĠĠĠĠĠĠĠ Ġif (! textColor . value !! ) textColor . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Back Ground Color (){ ĊĠĠĠĠĠĠĠ Ġif ( bgColor . value Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbg Color . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( bgColor . value !! ) bgColor . post Value ( false ) ĊĠĠĠĠĠĠĠ Ġif (! bgColor . value !! ) bgColor . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Indent (){ ĊĠĠĠĠĠĠĠ Ġindent . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Out dent (){ ĊĠĠĠĠĠĠĠ Ġout dent . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Align Left (){ ĊĠĠĠĠĠĠĠ Ġalign Left . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Align Center (){ ĊĠĠĠĠĠĠĠ Ġalign Center . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Align Right (){ ĊĠĠĠĠĠĠĠ Ġalign Right . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Insert Bullet s (){ ĊĠĠĠĠĠĠĠ Ġinsert Bullet s . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Insert Numbers (){ ĊĠĠĠĠĠĠĠ Ġinsert Numbers . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Block Quote (){ ĊĠĠĠĠĠĠĠ Ġblock Quote . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Insert Image (){ ĊĠĠĠĠĠĠĠ Ġinsert Image . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Insert Link (){ ĊĠĠĠĠĠĠĠ Ġinsert Link . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclick Insert Checkbox (){ ĊĠĠĠĠĠĠĠ Ġinsert CheckBox . post Value ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Initialize ( initial Task : ĠTask ){ ĊĠĠĠĠĠĠĠ Ġtask Ġ= Ġinitial Task ĊĠĠĠĠĠĠĠ Ġtitle . set ( initial Task . title ) ĊĠĠĠĠĠĠĠ Ġcontent Ġ= Ġinitial Task . content ĊĠĠĠĠĠĠĠ Ġinitial Task . tags ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it . size Ġ> Ġ 0 ) Ġis Selected Tags . set ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Tag Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }