package Ġau . org . library forall . updater . app Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . Menu Inflater Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . recyclerview . widget . Simple Item Animator Ċ import Ġcom . blue lin el abs . cond uctor . Controller Ċ import Ġcom . blue lin el abs . cond uctor . Router Transaction Ċ import Ġcom . blue lin el abs . cond uctor . change handler . Horizontal Change Handler Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġone . lf a . updater . inventory . api . Inventory Event Ċ import Ġone . lf a . updater . inventory . api . Inventory Event . Inventory Repository Event . Inventory Repository Item Event . Item B ec ame In visible Ċ import Ġone . lf a . updater . inventory . api . Inventory Event . Inventory Repository Event . Inventory Repository Item Event . Item B ec ame Visible Ċ import Ġone . lf a . updater . inventory . api . Inventory Event . Inventory Repository Event . Inventory Repository Item Event . Item Changed Ċ import Ġone . lf a . updater . inventory . api . Inventory Event . Inventory Repository Event . Repository Changed Ċ import Ġone . lf a . updater . inventory . api . Inventory Failure Report Ċ import Ġone . lf a . updater . inventory . api . Inventory Item Result Ċ import Ġone . lf a . updater . inventory . api . Inventory Repository ItemType Ċ import Ġone . lf a . updater . inventory . api . Inventory Repository State Ċ import Ġone . lf a . updater . inventory . api . Inventory Repository Type Ċ import Ġone . lf a . updater . inventory . api . Inventory Task Step Ċ import Ġone . lf a . updater . inventory . api . Inventory Type Ċ import Ġone . lf a . updater . services . api . Services Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . util . TreeMap Ċ import Ġjava . util . UUID Ċ Ċ class ĠRepository ViewController ( arguments : ĠBundle ) Ġ: ĠController ( arguments ) Ġ{ ĊĊĠ Ġconstructor ( repository : ĠUUID ) Ġ: Ġthis ( bundle Arguments ( repository )) ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġfun Ġbundle Arguments ( repository : ĠUUID ): ĠBundle Ġ{ ĊĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠ Ġbundle . put Serializable (" repository UUID ", Ġrepository ) ĊĠĠĠĠĠ Ġreturn Ġbundle ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Repository ViewController :: class . java ) ĊĠ Ġprivate Ġvar Ġrepository Event Subscription : ĠDis posable ? Ġ= Ġnull ĊĠ Ġprivate Ġval Ġrepository UUID : ĠUUID Ġ= Ġarguments . get Serializable (" repository UUID ") Ġas ĠUUID ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġthis . set Has Options Menu ( true ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġlateinit Ġvar Ġinventory : ĠInventory Type ĊĠ Ġprivate Ġlateinit Ġvar Ġlist Adapter : ĠInventory ListAdapter ĊĠ Ġprivate Ġlateinit Ġvar Ġlist Packages : ĠMutable List < Inventory Repository ItemType > ĊĠ Ġprivate Ġlateinit Ġvar Ġpro ge ss : ĠProgress Bar ĊĠ Ġprivate Ġlateinit Ġvar Ġprogress Error : ĠImageView ĊĠ Ġprivate Ġlateinit Ġvar Ġre cyclerView : ĠRecyclerView ĊĠ Ġprivate Ġlateinit Ġvar Ġrepository : ĠInventory Repository Type ĊĠ Ġprivate Ġlateinit Ġvar Ġtitle : ĠTextView ĊĊĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠ Ġcontainer : ĠViewGroup , ĊĠĠĠ Ġsaved ViewState : ĠBundle ? ĊĠ Ġ): ĠView Ġ{ ĊĠĠĠ Ġval Ġlayout Ġ= ĊĠĠĠĠĠ Ġinflater . inflate ( R . layout . inventory _ repository , Ġcontainer , Ġfalse ) ĊĊĠĠĠ Ġthis . pro ge ss Ġ= ĊĠĠĠĠĠ Ġlayout . findViewById ( R . id . inventory Progress ) ĊĠĠĠ Ġthis . progress Error Ġ= ĊĠĠĠĠĠ Ġlayout . findViewById ( R . id . inventory Progress Error ) ĊĠĠĠ Ġthis . re cyclerView Ġ= ĊĠĠĠĠĠ Ġlayout . findViewById ( R . id . inventory Package List ) ĊĠĠĠ Ġthis . title Ġ= ĊĠĠĠĠĠ Ġlayout . findViewById ( R . id . inventory Title ) ĊĊĠĠĠ Ġreturn Ġlayout ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠ Ġinflater . inflate ( R . menu . repository , Ġmenu ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠ ĠR . id . menuItem Repository Reload Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Selected Reload () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ ĠR . id . menuItem Repository Delete Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Selected Delete () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġon Selected Delete () Ġ{ ĊĠĠĠ ĠAlertDialog . Builder ( this . activity !! ) ĊĠĠĠĠĠ Ġ. setTitle ( R . string . repository _ delete _ confirm _ title ) ĊĠĠĠĠĠ Ġ. setMessage ( R . string . repository _ delete _ confirm ) ĊĠĠĠĠĠ Ġ. set Positive Button ( R . string . repository _ delete ) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠ Ġthis . inventory . inventory Repository Remove ( this . repository UUID ) ĊĠĠĠĠĠĠĠ Ġthis . router . pop Current Controller () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ. show () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġon Selected Reload () Ġ{ ĊĠĠĠ Ġval Ġrepository Ġ= ĊĠĠĠĠĠ Ġthis . inventory . inventory Repository Select ( this . repository UUID ) ĊĊĠĠĠ Ġif Ġ( repository Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġthis . router . pop Current Controller () ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrepository . update () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Attach ( view : ĠView ) Ġ{ ĊĠĠĠ Ġsuper . on Attach ( view ) ĊĊĠĠĠ Ġval Ġservice Directory Ġ= ĊĠĠĠĠĠ ĠServices . service Directory () ĊĠĠĠ Ġthis . inventory Ġ= ĊĠĠĠĠĠ Ġservice Directory . require Service ( Inventory Type :: class . java ) ĊĊĠĠĠ Ġ( this . activity Ġas ĠAppCompatActivity ). support ActionBar ?. title Ġ= ĊĠĠĠĠĠ Ġview . context . resources . getString ( R . string . repository ) ĊĠĠĠ Ġthis . set Options Menu Hidden ( false ) ĊĊĠĠĠ Ġval Ġcurrent Repository Ġ= ĊĠĠĠĠĠ Ġthis . inventory . inventory Repository Select ( this . repository UUID ) ĊĊĠĠĠ Ġif Ġ( current Repository Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġthis . router . pop Current Controller () ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġthis . repository Ġ= Ġcurrent Repository ĊĊĠĠĠ Ġthis . title . text Ġ= Ġthis . repository . title ĊĊĠĠĠ Ġthis . list Packages Ġ= Ġmutable ListOf () ĊĠĠĠ Ġthis . list Packages . addAll ( this . repository . items ) ĊĠĠĠ Ġthis . list Adapter Ġ= ĊĠĠĠĠĠ ĠInventory ListAdapter ( ĊĠĠĠĠĠĠĠ Ġcontext Ġ= Ġthis . activity !! , ĊĠĠĠĠĠĠĠ Ġpackages Ġ= Ġthis . list Packages , ĊĠĠĠĠĠĠĠ Ġon Show Failure Details Ġ= Ġthis @ Repository ViewController :: show Repository Package Failure ) ĊĊĠĠĠ Ġthis . re cyclerView . set Has Fixed Size ( true ) ĊĠĠĠ Ġthis . re cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( view . context ) ĊĠĠĠ Ġthis . re cyclerView . adapter Ġ= Ġthis . list Adapter ĊĠĠĠ Ġ( this . re cyclerView . item Animator Ġas ĠSimple Item Animator ). supports Change Animations Ġ= Ġfalse ĊĊĠĠĠ Ġthis . pro ge ss . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠ Ġthis . repository Event Subscription Ġ= Ġthis . repository . events . subscribe ( this :: on Repository Event ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġshow Repository Package Failure ( ĊĠĠĠ Ġrepository Package : ĠInventory Repository ItemType , ĊĠĠĠ Ġresult : ĠInventory Item Result ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġthis . router . push Controller ( ĊĠĠĠĠĠ ĠRouter Transaction . with ( Inventory Failure ViewController ( ĊĠĠĠĠĠĠĠ Ġthis . bundle Repository Package Failure ( repository Package , Ġresult ))) ĊĠĠĠĠĠĠĠ Ġ. push Change Handler ( Horizontal Change Handler ()) ĊĠĠĠĠĠĠĠ Ġ. pop Change Handler ( Horizontal Change Handler ())) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġbundle Repository Package Failure ( ĊĠĠĠ Ġrepository Package : ĠInventory Repository ItemType , ĊĠĠĠ Ġresult : ĠInventory Item Result ): ĠInventory Failure Report Ġ{ ĊĊĠĠĠ Ġval Ġresources Ġ= Ġthis . application Context !!. resources ĊĠĠĠ Ġval Ġattributes Ġ= ĠTreeMap < String , ĠString >() ĊĊĠĠĠ Ġattributes [ resources . getString ( R . string . install _ failure _ repository )] Ġ= ĊĠĠĠĠĠ Ġresult . repository Id . toString () ĊĠĠĠ Ġattributes [ resources . getString ( R . string . install _ failure _ package )] Ġ= ĊĠĠĠĠĠ Ġ"${ repository Package . item . id } Ġ${ repository Package . item . version Name } Ġ(${ repository Package . item . version Code })" ĊĠĠĠ Ġattributes [ resources . getString ( R . string . install _ failure _ package _ uri )] Ġ= ĊĠĠĠĠĠ Ġrepository Package . item . source . toString () ĊĊĠĠĠ Ġreturn ĠInventory Failure Report ( ĊĠĠĠĠĠ Ġtitle Ġ= Ġresources . getString ( R . string . install _ failure _ title ), ĊĠĠĠĠĠ Ġattributes Ġ= Ġattributes . to Sorted Map (), ĊĠĠĠĠĠ Ġtask Steps Ġ= Ġresult . steps ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġon Repository Event ( event : ĠInventory Event ) Ġ{ ĊĠĠĠ Ġthis . logger . trace (" event : Ġ{}", Ġevent ) ĊĊĠĠĠ Ġreturn Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠ Ġis ĠInventory Event . Inventory Repository Event Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( event . repository Id Ġ== Ġthis . repository UUID ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠItem B ec ame Visible , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠItem Changed , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠItem B ec ame In visible Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUIT hread . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . list Packages . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . list Packages . addAll ( this . repository . items ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . list Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRepository Changed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUIT hread . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . on Repository Changed UI () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠInventory Event . Inventory StateChanged Ġ-> ĠUnit ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġon Repository Changed UI () Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( val Ġstate Ġ= Ġthis . repository . state ) Ġ{ ĊĠĠĠĠĠ Ġis ĠInventory Repository State . Repository Updating Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . pro ge ss . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġthis . progress Error . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġis ĠInventory Repository State . Repository Update Failed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . pro ge ss . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġthis . progress Error . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġthis . progress Error . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthis . show Repository Update Failure ( state . steps ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġis ĠInventory Repository State . Repository Idle Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . pro ge ss . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġthis . progress Error . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġbundle Repository Update Failure ( ĊĠĠĠ Ġsteps : ĠList < Inventory Task Step >): ĠInventory Failure Report Ġ{ ĊĊĠĠĠ Ġval Ġresources Ġ= Ġthis . application Context !!. resources ĊĠĠĠ Ġval Ġattributes Ġ= ĠTreeMap < String , ĠString >() ĊĊĠĠĠ Ġattributes [ resources . getString ( R . string . install _ failure _ repository )] Ġ= ĊĠĠĠĠĠ Ġthis . repository . id . toString () ĊĊĠĠĠ Ġreturn ĠInventory Failure Report ( ĊĠĠĠĠĠ Ġtitle Ġ= Ġresources . getString ( R . string . inventory _ repository _ update _ failed _ title ), ĊĠĠĠĠĠ Ġattributes Ġ= Ġattributes . to Sorted Map (), ĊĠĠĠĠĠ Ġtask Steps Ġ= Ġsteps ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġshow Repository Update Failure ( steps : ĠList < Inventory Task Step >) Ġ{ ĊĠĠĠ Ġthis . set Options Menu Hidden ( true ) ĊĊĠĠĠ Ġthis . router . push Controller ( ĊĠĠĠĠĠ ĠRouter Transaction . with ( Inventory Failure ViewController ( ĊĠĠĠĠĠĠĠ Ġthis . bundle Repository Update Failure ( steps ))) ĊĠĠĠĠĠĠĠ Ġ. push Change Handler ( Horizontal Change Handler ()) ĊĠĠĠĠĠĠĠ Ġ. pop Change Handler ( Horizontal Change Handler ())) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Detach ( view : ĠView ) Ġ{ ĊĠĠĠ Ġsuper . on Detach ( view ) ĊĊĠĠĠ Ġthis . repository Event Subscription ?. dispose () ĊĠ Ġ} Ċ } Ċ