package Ġcom . vin ic ius . github api . ui . detail . information Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . transition . Transition Manager Ċ import Ġbr . com . arch . toolkit . delegate . view Provider Ċ import Ġbr . com . arch . toolkit . state machine . View StateMachine Ċ import Ġbr . com . arch . toolkit . state machine . config Ċ import Ġbr . com . arch . toolkit . state machine . setup Ċ import Ġbr . com . arch . toolkit . state machine . state Ċ import Ġcom . facebook . shim mer . Sh im mer Frame Layout Ċ import Ġcom . vin ic ius . github api . R Ċ import Ġcom . vin ic ius . github api . ui . adapter . Issues Adapter Ċ import Ġcom . vin ic ius . github api . ui . adapter . Loader Adapter Ċ import Ġcom . vin ic ius . github api . ui . detail . REPOSITORY _ FULL _ NAME _ ARGS Ċ import Ġcom . vin ic ius . github api . ui . handle Exception Ċ import Ġcom . vin ic ius . github api . ui . widget . Error View Ċ import Ġkotlinx . coroutines . flow . collect Latest Ċ import Ġkotlinx . coroutines . flow . distinct Until Changed Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel Ċ Ċ class ĠIssues Fragment Ġ: ĠFragment ( R . layout . issues _ fragment ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġissues : ĠRecyclerView Ġby Ġview Provider ( R . id . issues ) ĊĠĠĠ Ġprivate Ġval Ġroot : ĠViewGroup Ġby Ġview Provider ( R . id . root ) ĊĠĠĠ Ġprivate Ġval Ġshim mer : ĠSh im mer Frame Layout Ġby Ġview Provider ( R . id . shim mer _ issues ) ĊĠĠĠ Ġprivate Ġval Ġerror View : ĠError View Ġby Ġview Provider ( R . id . error _ view ) ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠIssues ViewModel Ġby ĠviewModel () ĊĠĠĠ Ġprivate Ġval Ġadapter Ġ= ĠIssues Adapter () ĊĠĠĠ Ġprivate Ġval Ġview StateMachine Ġ= ĠView StateMachine () ĊĠĠĠ Ġprivate Ġval Ġstate Loading Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġstate Data Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġval Ġstate Error Ġ= Ġ 2 ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġsetup RecyclerView () ĊĠĠĠĠĠĠĠ Ġarguments ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrepository FullName : ĠString Ġ= Ġit . getString ( REPOSITORY _ FULL _ NAME _ ARGS ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . repo Ġ= Ġrepository FullName ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsetup View StateMachine () ĊĠĠĠĠĠĠĠ Ġsetup Error View () ĊĠĠĠĠĠĠĠ Ġload Issues () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup View StateMachine () Ġ{ ĊĠĠĠĠĠĠĠ Ġview StateMachine . setup Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinitialState Ġ= Ġstate Loading ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset OnChange State Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTransition Manager . begin Delayed Transition ( root ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate ( state Loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisible s ( shim mer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg ones ( issues , Ġerror View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate ( state Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisible s ( issues ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg ones ( shim mer , Ġerror View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate ( state Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisible s ( error View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg ones ( shim mer , Ġissues ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Error View () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . error . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror View . handle Exception ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview StateMachine . change State ( state Error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġerror View . setOn Button Error Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Issues () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġissues . layout Manager Ġ= ĠLinearLayoutManager ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĠLinearLayoutManager . VERTICAL , Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġissues . adapter Ġ= Ġadapter . with Load State Footer ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoader Adapter ( R . layout . issue _ item _ loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Issues () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġadapter . add On Pages Updated Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( view StateMachine . currentState Key Ġ!= Ġstate Data Ġ&& Ġview StateMachine . is Started ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview StateMachine . change State ( state Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Issues () Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview StateMachine . change State ( state Loading ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . issues Paging (). distinct Until Changed (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollect Latest Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit Data ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġissues . adapter Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġview StateMachine . shutdown () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠ Ġ} Ċ }