package Ġcom . v ko ch enk ov . wa if up ictures . presentation . fragment Ċ Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . swiper ef resh layout . widget . Swipe Refresh Layout Ċ import Ġcom . google . android . material . floating action button . Floating ActionButton Ċ import Ġcom . v ko ch enk ov . wa if up ictures . R Ċ import Ġcom . v ko ch enk ov . wa if up ictures . data . api . Network State Ċ import Ġcom . v ko ch enk ov . wa if up ictures . data . api . Network Storage Ċ import Ġcom . v ko ch enk ov . wa if up ictures . data . model . Picture Item Ċ import Ġcom . v ko ch enk ov . wa if up ictures . di . App Ċ import Ġcom . v ko ch enk ov . wa if up ictures . presentation . adapter . ItemClickListener Ċ import Ġcom . v ko ch enk ov . wa if up ictures . presentation . adapter . pictures . P ictures Adapter Ċ import Ġcom . v ko ch enk ov . wa if up ictures . presentation . adapter . pictures . Picture ItemClickListener Impl Ċ import Ġcom . v ko ch enk ov . wa if up ictures . presentation . adapter . pictures . Reload ViewHolder Ċ import Ġcom . v ko ch enk ov . wa if up ictures . presentation . dialog . Change Category Bottom Sheet Dialog Ċ import Ġcom . v ko ch enk ov . wa if up ictures . presentation . show Toast Ċ import Ġcom . v ko ch enk ov . wa if up ictures . presentation . view _ model . P ictures ViewModel Ċ import Ġcom . v ko ch enk ov . wa if up ictures . presentation . view _ model . ViewModel Factory Ċ Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠP ictures Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Factory ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpictures RecyclerView : ĠRecyclerView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġempty List Tv : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠprogressBar : ĠProgress Bar ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġswipe Refresh Layout : ĠSw ipe Refresh Layout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfloating Change Btn : ĠFloating ActionButton ĊĊĠĠĠ Ġprivate Ġval Ġpictures ViewModel : ĠP ictures ViewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( require Activity (), ĠviewModel Factory ). get ( P ictures ViewModel :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠApp . app Component . inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġpictures ViewModel . onCreate View () ĊĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġinflater . inflate ( R . layout . fragment _ pictures , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġinit Views ( root ) ĊĠĠĠĠĠĠĠ Ġinit RecyclerView ( root ) ĊĠĠĠĠĠĠĠ Ġinit LiveData Observer s () ĊĠĠĠĠĠĠĠ Ġset Listeners () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġroot ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġ( activity Ġas ĠAppCompatActivity ). support ActionBar ?. title Ġ= ĠNetwork Storage . last Changed Category . text ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġpictures ViewModel . first First Visible Recycler Position Ġ= Ġ( pictures RecyclerView . layout Manager Ġas ĠGrid LayoutManager ). findFirst Visible Item Position () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġswipe Refresh Layout . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpictures ViewModel . on Swipe Refresh () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( pictures RecyclerView . adapter Ġas ĠP ictures Adapter ). notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Layout . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfloating Change Btn . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchange Category Bottom Sheet Dialog Ġ= ĠChange Category Bottom Sheet Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Category Bottom Sheet Dialog . show ( require Activity (). support FragmentManager , Ġ" Change Category Bottom Sheet Dialog ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Views ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠprogressBar Ġ= Ġview . findViewById ( R . id . pictures _ progress ) ĊĠĠĠĠĠĠĠ Ġempty List Tv Ġ= Ġview . findViewById ( R . id . pictures _ empty _ tv ) ĊĠĠĠĠĠĠĠ Ġswipe Refresh Layout Ġ= Ġview . findViewById ( R . id . images _ swipe _ refresh ) ĊĠĠĠĠĠĠĠ Ġswipe Refresh Layout . setColor Scheme Resources ( R . color . teal _ 2 0 0 ) ĊĠĠĠĠĠĠĠ Ġfloating Change Btn Ġ= Ġview . findViewById ( R . id . pictures _ floating _ change _ btn ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit LiveData Observer s () Ġ{ ĊĠĠĠĠĠĠĠ Ġpictures ViewModel . network State . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork State . LOADING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List Tv . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork State . LOADING _ ERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Items List Size () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( R . string . load _ network _ error _ text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork State . NO _ INTER NET _ CONNECTION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Items List Size () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( R . string . no _ network _ error _ text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork State . SUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List Tv . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġpictures ViewModel . items List . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( pictures RecyclerView . adapter Ġas ĠP ictures Adapter ). set Items List ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( pictures RecyclerView . adapter Ġas ĠP ictures Adapter ). notify DataSet Changed () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pictures ViewModel . first First Visible Recycler Position Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( pictures RecyclerView . layout Manager Ġas ĠGrid LayoutManager ). scrollTo Position With Offset ( pictures ViewModel . first First Visible Recycler Position Ġas ĠInt , 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Items List Size () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( pictures ViewModel . items List . value ?. size Ġ== Ġ 0 Ġ|| Ġpictures ViewModel . items List . value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List Tv . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List Tv . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit RecyclerView ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpictures RecyclerView Ġ= Ġview . findViewById ( R . id . pictures _ recycler ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . resources . configuration . orientation Ġ== ĠConfiguration . OR IENTATION _ POR TRA IT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpictures RecyclerView . layout Manager Ġ= ĠGrid LayoutManager ( view . context , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpictures RecyclerView . layout Manager Ġ= ĠGrid LayoutManager ( view . context , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpictures RecyclerView . adapter Ġ= ĠP ictures Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPicture ItemClickListener Impl ( activity ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠItem ClickListener < Reload ViewHolder , ĠPicture Item > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item CL ick ( holder : ĠRe load ViewHolder , Ġitem : ĠPicture Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpictures ViewModel . on Reload Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }