package Ġcom . v ko ch enk ov . image search . presentation . fragment Ċ Ċ import Ġandroid . content . Intent Ċ 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 . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . v ko ch enk ov . image search . di . App Ċ import Ġcom . v ko ch enk ov . image search . R Ċ import Ġcom . v ko ch enk ov . image search . data . db . Db State Ċ import Ġcom . v ko ch enk ov . image search . data . model . Image Item Ċ import Ġcom . v ko ch enk ov . image search . presentation . activity . Image Activity Ċ import Ġcom . v ko ch enk ov . image search . presentation . adapter . ImageView Holder Ċ import Ġcom . v ko ch enk ov . image search . presentation . adapter . Images Adapter Ċ import Ġcom . v ko ch enk ov . image search . presentation . adapter . ItemClickListener Ċ import Ġcom . v ko ch enk ov . image search . presentation . show Toast Ċ import Ġcom . v ko ch enk ov . image search . presentation . view _ model . F avour ites ViewModel Ċ import Ġcom . v ko ch enk ov . image search . presentation . view _ model . ViewModel Factory Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠF avour ites Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Factory ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfavour ites RecyclerView : ĠRecyclerView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġempty List Tv : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠprogressBar : ĠProgress Bar ĊĊĠĠĠ Ġprivate Ġval Ġfavour ites ViewModel : ĠF avour ites ViewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( require Activity (), ĠviewModel Factory ). get ( F avour ites 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 ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġinflater . inflate ( R . layout . fragment _ fav our ites , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġinit Views ( root ) ĊĠĠĠĠĠĠĠ Ġinit RecyclerView ( root ) ĊĠĠĠĠĠĠĠ Ġinit LiveData Observer s () ĊĠĠĠĠĠĠĠ Ġreturn Ġroot ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġfavour ites ViewModel . on Resume () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġfavour ites ViewModel . first First Visible Recycler Position Ġ= Ġ( fav our ites RecyclerView . layout Manager Ġas ĠGrid LayoutManager ). findFirst Visible Item Position () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġif Ġ( fav our ites ViewModel . first First Visible Recycler Position Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( fav our ites RecyclerView . layout Manager Ġas ĠGrid LayoutManager ). scrollTo Position With Offset ( fav our ites ViewModel . first First Visible Recycler Position Ġas ĠInt , 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Views ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠprogressBar Ġ= Ġview . findViewById ( R . id . fav our ites _ progress ) ĊĠĠĠĠĠĠĠ Ġempty List Tv Ġ= Ġview . findViewById ( R . id . fav our ites _ empty _ tv ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit LiveData Observer s () Ġ{ ĊĠĠĠĠĠĠĠ Ġfavour ites ViewModel . db State . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List Tv . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDb State . GET TING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List Tv . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDb State . GET TING _ ERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( R . string . load _ db _ error _ text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDb State . SUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġfavour ites ViewModel . fav our ites List . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( fav our ites RecyclerView . adapter Ġas ĠImages Adapter ). set Items List ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( fav our ites RecyclerView . adapter Ġas ĠImages Adapter ). notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Items List Size () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Items List Size () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( fav our ites ViewModel . fav our ites List . value ?. size Ġ== Ġ 0 Ġ|| Ġfavour ites ViewModel . fav our ites List . value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List Tv . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List Tv . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit RecyclerView ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfavour ites RecyclerView Ġ= Ġview . findViewById ( R . id . fav our ites _ recycler ) ĊĠĠĠĠĠĠĠ Ġif Ġ( this . resources . configuration . orientation Ġ== ĠConfiguration . OR IENTATION _ POR TRA IT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfavour ites RecyclerView . layout Manager Ġ= ĠGrid LayoutManager ( view . context , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfavour ites RecyclerView . layout Manager Ġ= ĠGrid LayoutManager ( view . context , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfavour ites RecyclerView . adapter Ġ= ĠImages Adapter ( object Ġ: ĠItem ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item CL ick ( holder : ĠImage ViewHolder , Ġitem : ĠImage Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( activity , ĠImage Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( App . IMAGE _ ITEM , Ġitem ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }