package Ġcom . w ur uo ye . know . ui . edit . vm Ċ Ċ import Ġandroid . util . Array Map Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . w ur uo ye . know . util . Gson Factory Ċ import Ġcom . w ur uo ye . know . util . model . beans .* Ċ import Ġcom . w ur uo ye . know . util . orm . dao . Record Dao Ċ import Ġcom . w ur uo ye . know . util . orm . dao . Record Item Dao Ċ import Ġcom . w ur uo ye . know . util . orm . dao . Record Type Dao Ċ import Ġcom . w ur uo ye . know . util . orm . dao . Record View Dao Ċ import Ġcom . w ur uo ye . know . util . orm . table . Record Ċ import Ġcom . w ur uo ye . know . util . orm . table . Record Item Ċ import Ġcom . w ur uo ye . know . util . orm . table . Record Layout View Ċ import Ġcom . w ur uo ye . know . util . orm . table . Record View Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . json . JSONArray Ċ Ċ /** Ċ Ġ* ĠCreated Ġat Ġ 2 0 1 9 - 0 4 - 2 5 Ġ 1 1 : 3 8 Ġby Ġwur uo ye Ċ Ġ* ĠDescription : Ċ Ġ*/ Ċ class ĠRecord Show ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġrecord Dao : ĠRecord Dao , ĊĠĠĠ Ġprivate Ġval Ġrecord Type Dao : ĠRecord Type Dao , ĊĠĠĠ Ġprivate Ġval Ġrecord Item Dao : ĠRecord Item Dao , ĊĠĠĠ Ġprivate Ġval Ġrecord View Dao : ĠRecord View Dao Ċ ) Ġ: ĠViewModel (), ĠI Record Show VM Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġrecord Show : ĠMutable LiveData < Record Show With View > Ġ= ĊĠĠĠĠĠĠĠ ĠMutable LiveData () ĊĊĠĠĠ Ġoverride Ġval Ġdefault Show : ĠMutable LiveData < List < Record Show >> Ġ= ĊĠĠĠĠĠĠĠ ĠMutable LiveData () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġitem List : ĠArrayList < Record ListItem > ĊĠĠĠ Ġprivate Ġvar Ġcurrent : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġset ItemList ( item List : ĠArrayList < Record ListItem >, Ġcur : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . item List Ġ= Ġitem List ĊĊĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcur Ġ< Ġ 0 Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcur Ġ>= Ġitem List . size Ġ-> Ġitem List . size - 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġcur ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcu Ġ= ĠgetNext () !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Ġ= ĠgetNext () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList < Record Show >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( cu ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Ġ!= Ġnull ) Ġlist . add ( next ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Show . post Value ( list ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow In ViewGroup ( view Group : ĠViewGroup ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġif Ġ( current Ġ< Ġitem List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem List . remove At ( current ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem List . remove At ( item List . size - 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecord Show . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRecord Show With View ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Record Show ( item . record ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Group ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremember Record ( record : ĠRecord , Ġremember : ĠBoolean ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremember Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecord . review Num ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecord . last Review Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremember Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecord . rem Num ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecord . last Rem Review Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecord . fail Num ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecord . last Fail Review Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecord Dao . insert ( record ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetNext (): ĠRecord Show ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( item List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġif Ġ( current Ġ< Ġitem List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem List . remove At ( current ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem List . remove At ( item List . size - 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Record Show ( item . record ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġquery Record Show ( record : ĠRecord ): ĠRecord Show Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrecord Type Ġ= Ġquery Real Record Type ( record . type ) ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠArray Map < String , ĠRecord Item >() ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġrecord Item Dao . query By Record ( record . id !! ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [" ${ item . type }_${ item . type Id } "] Ġ= Ġitem ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠRecord Show ( record Type , Ġmap , Ġrecord ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġquery Real Record Type ( id : ĠLong ): ĠReal Record Type Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġrecord Type Dao . query ( id ) ĊĠĠĠĠĠĠĠ Ġval Ġitem List Ġ= Ġload Items ( type . items ) ĊĊĠĠĠĠĠĠĠ Ġval Ġviews Ġ= ĠArrayList < Record View >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġitem List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġrecord View Dao . query ( item . type , Ġitem . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Ġis ĠRecord Layout View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . add ( query Real Record Layout View ( view )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . add ( view !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠReal Record Type ( type , Ġviews ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġquery Real Record Layout View ( view : ĠRecord Layout View ): ĠReal Record Layout View Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem List Ġ= Ġload Items ( view . items ) ĊĊĠĠĠĠĠĠĠ Ġval Ġviews Ġ= ĠArrayList < Record View >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġitem List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġrecord View Dao . query ( item . type , Ġitem . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v Ġis ĠRecord Layout View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . add ( query Real Record Layout View ( v )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . add ( v !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠReal Record Layout View ( view , Ġviews ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Items ( text : ĠString ): ĠList < Record Type Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArrayList < Record Type Item >() ĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= ĠJSONArray ( text ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġarray . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGson Factory . s Instance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fromJson ( array . getString ( i ), ĠRecord Type Item :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġclass ĠFactory ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġrecord Dao : ĠRecord Dao , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġrecord Type Dao : ĠRecord Type Dao , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġrecord Item Dao : ĠRecord Item Dao , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġrecord View Dao : ĠRecord View Dao ĊĠĠĠ Ġ) Ġ: ĠViewModel Provider . New Instance Factory () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel ?> Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRecord Show ViewModel ( record Dao , Ġrecord Type Dao , Ġrecord Item Dao , Ġrecord View Dao ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }