package Ġcom . p all aw . firebase gallery . ui . gallery Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġcom . google . firebase . storage . Firebase Storage Ċ import Ġcom . google . firebase . storage . Storage Reference Ċ import Ġcom . p all aw . firebase gallery . R Ċ import Ġcom . p all aw . firebase gallery . Util . Log Tags Ċ import Ġcom . p all aw . firebase gallery . data . resources . Photo Ċ import Ġcom . p all aw . firebase gallery . data . resources . Photo List Ċ import Ġcom . p all aw . firebase gallery . view model . Photo ViewModel Ċ import Ġcom . p all aw . firebase gallery . view model . factory . Photo ViewModel Factory Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġkotlinx . android . synt hetic . main . fragment _ gallery .* Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . net . Connect Exception Ċ import Ġjava . net . Unknown Host Exception Ċ Ċ class ĠGallery Grid Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġgallery Grid Adapter : ĠGallery Grid Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠPhoto ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Storage Ref : ĠStorage Reference ĊĠĠĠ Ġval Ġcomposite Disposable Ġ= ĠComposite Disposable () ĊĠĠĠ Ġval Ġphoto List : ĠArrayList < Photo > Ġ= Ġarray ListOf () ĊĊĠĠĠ Ġprivate Ġvar Ġlistener : Ġon Gallery ItemClickListener ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġm Storage Ref Ġ= ĠFirebase Storage . getInstance (). reference ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ gallery , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// init Ġview model ĊĠĠĠĠĠĠĠ Ġinit ViewModel () ĊĊĠĠĠĠĠĠĠ Ġ// update Ġtitle ĊĠĠĠĠĠĠĠ Ġupdate Toolbar () ĊĊĠĠĠĠĠĠĠ Ġ// setup Ġphoto Ġlist ĊĠĠĠĠĠĠĠ Ġsetup Photo List () ĊĊĠĠĠĠĠĠĠ Ġ// fetch Ġphoto Ġlist ĊĠĠĠĠĠĠĠ Ġfetch Photos () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Photos () Ġ{ ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . getAll Photos () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( Log Tags . PH OTO ). d (" Received ĠUI Model Ġ$ it Ġphotos .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Photos ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( Log Tags . PH OTO ). w ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . update Title ( getString ( R . string . g all ary _ fragment _ label )) ĊĠĠĠĠĠĠĠ ĠviewModel . enable Fab ( true ) ĊĠĠĠĠĠĠĠ ĠviewModel . enable Back Button ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Error () Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" Error Ġin Ġfetching Ġphotos ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Photos ( data : ĠPhoto List ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data . error Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphoto List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphoto List . addAll ( data . photos ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgallery Grid Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( data . error Ġis ĠConnect Exception Ġ|| Ġdata . error Ġis ĠUnknown Host Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( Log Tags . PH OTO ). d (" No Ġinternet Ġconnection , Ġcached Ġdata Ġis Ġbeing Ġshown ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . viewModel Store , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPhoto ViewModel Factory ( it . application ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). get ( Photo ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Photo List () Ġ{ ĊĠĠĠĠĠĠĠ Ġgallery Grid Adapter Ġ= ĠGallery Grid Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphoto List , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġwith ( photo _ list ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠGrid LayoutManager ( context , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġgallery Grid Adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġis Ġon Gallery ItemClickListener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( context . toString () Ġ+ Ġ" Ġmust Ġimplement ĠOn List Fragment Interaction Listener ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detach () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detach () ĊĠĠĠĠĠĠĠ Ġlistener Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface Ġon Gallery ItemClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Gallery Item Clicked ( item : ĠPhoto ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ