package Ġcom . point w el ve . re ve aled . ui . post ĊĊ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . view . do On Pre Draw Ċ import Ġandroidx . databinding . Data Binding Component Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . transition . Transition Inflater Ċ import Ġcom . point w el ve . re ve aled . App Executors Ċ import Ġcom . point w el ve . re ve aled . Constants Ċ import Ġcom . point w el ve . re ve aled . R Ċ import Ġcom . point w el ve . re ve aled . binding . Fragment Data Binding Component Ċ import Ġcom . point w el ve . re ve aled . databinding . Post Fragment Binding Ċ import Ġcom . point w el ve . re ve aled . di . Injectable Ċ import Ġcom . point w el ve . re ve aled . ui . common . Retry Callback Ċ import Ġcom . point w el ve . re ve aled . util . views . auto Cle ared Ċ import Ġkotlinx . android . synt hetic . main . post _ fragment .* Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠPost Fragment Ġ: ĠFragment (), ĠInjectable Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Provider . Factory ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġapp Executors : ĠApp Executors ĊĊĠĠĠ Ġprivate Ġval Ġpost ViewModel : ĠPost ViewModel Ġby Ġview Models Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Factory ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġdata Binding Component : ĠData Binding Component Ġ= ĊĠĠĠĠĠĠĠ ĠFragment Data Binding Component ( this ) ĊĠĠĠ Ġvar Ġbinding Ġby Ġauto Cle ared < Post Fragment Binding >() ĊĠĠĠ Ġprivate Ġvar Ġadapter Ġby Ġauto Cle ared < Post Adapter >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Binding Ġ= ĠData Binding Util . inflate < Post Fragment Binding >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . post _ fragment , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdata Binding . retry Callback Ġ= Ġobject Ġ: ĠRetry Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġretry () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost ViewModel . retry () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding Ġ= Ġdata Binding ĊĠĠĠĠĠĠĠ Ġshared Element Return Transition Ġ= ĠTransition Inflater . from ( context ). inflate Transition ( R . transition . move ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdata Binding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġview Lifecycle Owner ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠPost Adapter ( data Binding Component , Ġapp Executors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠPost Fragment Directions . action Post Fragment To Post Detail Fragment ( post . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( action ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġbinding . posts Ġ= Ġpost ViewModel . posts ĊĠĠĠĠĠĠĠ Ġbinding . posts List . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġpost p one Enter Transition () ĊĠĠĠĠĠĠĠ Ġbinding . posts List . do On Pre Draw Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Post p oned Enter Transition () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinit Post List ( post ViewModel ) ĊĠĠĠĠĠĠĠ Ġcreate Post Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . action _ post Fragment _ to _ create Post Fragment ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). current Back Stack Entry ?. saved State Handle ?. get LiveData < Boolean >( Constants . post Created Key )?. observe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner Ġ, ĠObserver Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost ViewModel . retry () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . log Out Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost ViewModel . logout ( this . require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Post List ( viewModel : ĠPost ViewModel ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . retry () ĊĊĠĠĠĠĠĠĠ ĠviewModel . posts . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġlist Resource Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Resource ?. data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit List ( list Resource . data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit List ( emptyList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ