package Ġcom . h arry j jac obs . mus iq . ui . sections . home Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . h arry j jac obs . mus iq . App Ċ import Ġcom . h arry j jac obs . mus iq . R Ċ import Ġcom . h arry j jac obs . mus iq . model . Play able ItemList Ċ import Ġcom . h arry j jac obs . mus iq . ui . lists . List Factory Ċ import Ġcom . h arry j jac obs . mus iq . ui . sections . search . Search Fragment Ċ Ċ /** Ċ Ġ* ĠThe Ġfragment Ġcontaining Ġthe Ġhome Ġview Ċ Ġ*/ Ċ class ĠHome Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠHome ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġloading Indicator : ĠProgress Bar ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġinflater . inflate ( R . layout . fragment _ home , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġlists Container Ġ= Ġroot . findViewById < LinearLayout >( R . id . lists _ container ) ĊĠĠĠĠĠĠĠ Ġloading Indicator Ġ= Ġroot . findViewById ( R . id . loading _ indicator ) ĊĠĠĠĠĠĠĠ Ġinit ViewModel () ĊĊĠĠĠĠĠĠĠ Ġ// ĠShow Ġthat Ġwe Ġare Ġloading Ġdata ĊĠĠĠĠĠĠĠ Ġshow Loading Indicator () ĊĊĠĠĠĠĠĠĠ Ġ// ĠFetch Ġlists Ġto Ġdisplay ĊĠĠĠĠĠĠĠ ĠviewModel . get Play able Item Lists (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd List ( it , Ġlists Container ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġroot ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHome ViewModel Factory ( App . spotify Repository ) ĊĠĠĠĠĠĠĠ Ġ). get ( Home ViewModel :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments ?. getInt ( ARG _ SECTION _ NUMBER )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Page Index ( it ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd List ( ĊĠĠĠĠĠĠĠ Ġplay able ItemList : ĠPlay able ItemList , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠLinearLayout ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠContainer Ġfor Ġthe Ġlist ĊĠĠĠĠĠĠĠ Ġval Ġfeatured Play ables Container Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠList Factory . create List Container ( require Context ()) ĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġcontainer Ġin Ġadvance Ġin Ġcase Ġwe Ġwant Ġto ĠTODO ( show Ġplaceholder Ġicons ) ĊĠĠĠĠĠĠĠ Ġcontainer . addView ( featured Play ables Container ) ĊĠĠĠĠĠĠĠ Ġ// ĠListen Ġfor Ġstate Ġchange Ġindicating Ġthat Ġthe Ġplay able Ġitems Ġhave Ġloaded ĊĠĠĠĠĠĠĠ Ġplay able ItemList . play able Items . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġplay ables Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFinished Ġloading Ġat Ġleast Ġa Ġbit Ġof Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Loading Indicator (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġand Ġput Ġthe Ġlist Ġin Ġit 's Ġplay ables Ġcontainer ĊĠĠĠĠĠĠĠĠĠĠĠ ĠList Factory . create Horizontal Play ables List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay ables Ġ= Ġplay ables , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer Ġ= Ġfeatured Play ables Container , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġplay able ItemList . list Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Loading Indicator () Ġ{ ĊĠĠĠĠĠĠĠ Ġloading Indicator . visibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Loading Indicator () Ġ{ ĊĠĠĠĠĠĠĠ Ġloading Indicator . visibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġfragment Ġargument Ġrepresenting Ġthe Ġsection Ġnumber Ġfor Ġthis ĊĠĠĠĠĠĠĠĠ Ġ* Ġfragment . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠARG _ SECTION _ NUMBER Ġ= Ġ" section _ number " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġnew Ġinstance Ġof Ġthis Ġfragment Ġfor Ġthe Ġgiven Ġsection ĊĠĠĠĠĠĠĠĠ Ġ* Ġnumber . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( section Number : ĠInt ): ĠHome Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHome Fragment (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Int ( ARG _ SECTION _ NUMBER , Ġsection Number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }