package Ġas mnt . com . am oon . lm . ui . books ĊĊ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . databinding . library . Build Config Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġas mnt . com . am oon . lm . R Ċ import Ġas mnt . com . am oon . lm . data . remote . response . Status Ċ import Ġas mnt . com . am oon . lm . databinding . Fragment List Books Binding Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġjavax . inject . Inject Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġas mnt . com . am oon . lm . domain . model . Book Ċ import Ġdagger . android . support . D agger Fragment ĊĊĊ Ċ class ĠList Books Fragment Ġ: ĠD agger Fragment () Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Provider . Factory ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠList Books ViewModel ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment List Books Binding ĊĊĠĠĠ Ġval Ġdata : ĠMutable LiveData < List < Book >> Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Providers . of ( this , ĠviewModel Factory ). get ( List Books ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġobserve Loading Status () ĊĠĠĠĠĠĠĠ Ġobserve Response () ĊĠĠĠĠĠĠĠ ĠviewModel . load Data () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . inflate ( in flater , ĠR . layout . fragment _ list _ books , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġbinding . re cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( activity ) ĊĠĠĠĠĠĠĠ Ġbinding . swipe Container . setOn Refresh Listener ( viewModel :: load Data ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġobserve Ġloading Ġstatus Ġfor Ġusing Ġsw ip ĊĠĠĠ Ġprivate Ġfun Ġobserve Response () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . loading Status . observe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObserver Ġ{ ĠisLoading Ġ-> Ġbinding . swipe Container . is Refresh ing Ġ= ĠisLoading Ġ?: Ġfalse Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġobserve Ġresponse Ġand Ġbind Ġthem Ġto Ġthe Ġview ĊĠĠĠ Ġprivate Ġfun Ġobserve Loading Status () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . response . observe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObserver Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Ġ!= Ġnull Ġ&& Ġresponse . status Ġ== ĠStatus . SUCCESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . value Ġ= Ġresponse . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . books Ġ= Ġresponse . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . execute Pending Bindings () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( response Ġ!= Ġnull Ġ&& Ġresponse . status Ġ== ĠStatus . ERROR ) Ġ&& ĠBuild Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" get Ġbooks Ġerror ", Ġresponse . error . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( binding . root , ĠR . string . load _ data _ error , ĠSn ackbar . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġmethod Ġfor Ġsorting Ġbooks Ġascending ĊĠĠĠ Ġfun Ġsort Ranking Asc () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding ?. books Ġ= Ġdata . value ?. sorted By Ġ{ Ġit . rank Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . notify Change () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġmethod Ġfor Ġsorting Ġbooks Ġdescending ĊĠĠĠ Ġfun Ġsort Week s Des () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . books Ġ= Ġdata . value ?. sorted By Descending Ġ{ Ġit . week s _ on _ list Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . notify Change () ĊĠĠĠ Ġ} ĊĊ Ċ }