package Ġio . ure f lect . app . activities Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . View Ċ import Ġcom . android . vol ley . Request Queue Ċ import Ġcom . android . vol ley . Response Ċ import Ġcom . android . vol ley . toolbox . Vol ley Ċ import Ġio . ure f lect . app . R Ċ import Ġio . ure f lect . app . adapters . Module Adapter Ċ import Ġio . ure f lect . app . models . Module Model Ċ import Ġio . ure f lect . app . models . Profile Model Ċ import Ġio . ure f lect . app . services . Api Ċ import Ġio . ure f lect . app . services . err Msg Ċ import Ġio . ure f lect . app . services . is Expired Ċ import Ġio . ure f lect . app . utils .* Ċ import Ġkotlinx . android . synt hetic . main . activity _ store .* Ċ Ċ fun ĠContext . store Intent ( profile Id : ĠLong ): ĠIntent Ġ= ĠIntent ( this , ĠStore :: class . java ). apply Ġ{ Ġput Extra ( Profile Model . TAG , Ġprofile Id ) Ġ} Ċ Ċ class ĠStore Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" Store Activity " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġqueue : ĠRequest Queue ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmodules : ĠArrayList < Module Model > ĊĠĠĠ Ġprivate Ġvar Ġprofile Id : ĠLong Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinstalled Modules : ĠArrayList < Module Model > ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ store ) ĊĠĠĠĠĠĠĠ ĠApi . log (" starting Ġstore Ġactivity ") ĊĊĠĠĠĠĠĠĠ Ġget Arg < Long >( Profile Model . TAG )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Id Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġfinish () ĊĊĠĠĠĠĠĠĠ Ġqueue Ġ= ĠVol ley . new Request Queue ( this ) ĊĠĠĠĠĠĠĠ Ġsetup UI () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġload Modules () ĊĊĠĠĠĠĠĠĠ Ġfrom Storage < ArrayList < Module Model >>( application , ĠModule Model . LIST _ TAG )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstalled Modules Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġqueue . cancel All ( TAG ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup UI () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpx Ġ= ĠTyped Value . apply Dimension ( Typed Value . COMPLEX _ UNIT _ DIP , Ġ 8 f , Ġresources . display Metrics ). toInt () ĊĠĠĠĠĠĠĠ Ġrv Modules . layout Manager Ġ= ĠLinearLayoutManager ( this , ĠLinearLayoutManager . VERTICAL , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġrv Modules . addItem Decoration ( Equal Spacing Item Decoration ( px , ĠEqual Spacing Item Decoration . VERTICAL )) ĊĊĠĠĠĠĠĠĠ Ġsv Search . setOn Query Text Listener ( object Ġ: Ġandroid . widget . Search View . On Query Text Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ?): ĠBoolean Ġ= Ġtrue . apply Ġ{ Ġload Modules () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( new Text : ĠString ?): ĠBoolean Ġ= Ġtrue . apply Ġ{ Ġload Modules () Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġbtn Retry . transformation Method Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġbtn Retry . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Modules () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġempty Search (): ĠBoolean Ġ= Ġsv Search . query . isEmpty () ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Query (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġif Ġ(! empty Search ()) Ġ" query =" Ġ+ Ġsv Search . query Ġ+ Ġ'& ' Ġelse Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġorder Ġ= Ġ" order = title " ĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ query $ order " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinstall Or Un install Module ( module : ĠModule Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( module . is _ installed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuninstall Module ( module ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstall Module ( module ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġuninstall Module ( module : ĠModule Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġloading . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġqueue . add ( Api . Module . uninstall ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule . ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUnit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Snackbar ( root ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule . is _ installed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstalled Modules . remove ( module ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstalled Modules . to Storage ( application , ĠModule Model . LIST _ TAG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv Modules . adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Error Listener Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error . is Expired ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre Login ( loading , Ġroot , Ġqueue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstall Module ( module ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Snackbar ( root , Ġerror . err Msg ( this , ĠgetString ( R . string . api _ parse _ error ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ Ġtag Ġ= ĠModule . TAG Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinstall Module ( module : ĠModule Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġloading . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġqueue . add ( Api . Module . install ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule . ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUnit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Snackbar ( root ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule . is _ installed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstalled Modules . add ( module ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstalled Modules . to Storage ( application , ĠModule Model . LIST _ TAG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv Modules . adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Error Listener Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error . is Expired ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre Login ( loading , Ġroot , Ġqueue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstall Module ( module ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Snackbar ( root , Ġerror . err Msg ( this , ĠgetString ( R . string . api _ parse _ error ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ Ġtag Ġ= ĠModule . TAG Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Modules () Ġ{ ĊĠĠĠĠĠĠĠ Ġloading . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġbtn Retry . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġqueue . add ( Api . Module . all ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Query (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Listener Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . data ?. let Ġ{ Ġmodules Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodules . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . is _ installed Ġ= Ġinstalled Modules . contains ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . modules Ġ= Ġmodules ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv Modules . adapter Ġ= ĠModule Adapter ( modules , Ġ{ Ġmodule : ĠModule Model ?, Ġ_: ĠView Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule ?. let Ġ{ ĠstartActivity ( module Intent ( module , Ġprofile Id )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġmodule : ĠModule Model ?, Ġ_: ĠView Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule ?. let Ġ{ Ġinstall Or Un install Module ( module ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Empty . visibility Ġ= Ġif Ġ( modules . isEmpty ()) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Retry . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Snackbar ( root , ĠgetString ( R . string . api _ parse _ error )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Error Listener Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Retry . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error . is Expired ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre Login ( loading , Ġroot , Ġqueue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Modules () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Snackbar ( root , Ġerror . err Msg ( this , ĠgetString ( R . string . api _ parse _ error ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ Ġtag Ġ= ĠTAG Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ