package Ġeth iop ia . covid . android . ui . fragment Ċ Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . ViewGroup . Margin LayoutParams Ċ import Ġandroid . view . Window Insets Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . preference . Preference Manager . getDefault SharedPreferences Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . st f alcon . image viewer . St f alcon Image Viewer Ċ import Ġcom . st f alcon . image viewer . loader . Image Loader Ċ import Ġeth iop ia . covid . android . App . Companion . instance Ċ import Ġeth iop ia . covid . android . R Ċ import Ġeth iop ia . covid . android . data . News Item Ċ import Ġeth iop ia . covid . android . databinding . Content State Layout Binding Ċ import Ġeth iop ia . covid . android . databinding . News Fragment Binding Ċ import Ġeth iop ia . covid . android . network . API . On Item Ready Ċ import Ġeth iop ia . covid . android . ui . activity . MainActivity Ċ import Ġeth iop ia . covid . android . ui . adapter . News Item Recycler Adapter Ċ import Ġeth iop ia . covid . android . ui . adapter . News Item Recycler Adapter . On Last Item Reached Listener Ċ import Ġeth iop ia . covid . android . ui . adapter . On Image Item Clicked Ċ import Ġeth iop ia . covid . android . ui . fragment . Content State . change Error Dialog Visibility Ċ import Ġeth iop ia . covid . android . ui . fragment . Content State . change ProgressBar Visibility Ċ import Ġeth iop ia . covid . android . ui . fragment . Content State . set Refresh Button Action Ċ import Ġeth iop ia . covid . android . util . Constant . PREFER ENCE _ LATE ST _ NE WS Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġme . ibr ah im sn . lib . Badge Ċ import Ġme . ibr ah im sn . lib . Badge Type Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠBro ok MG Ġon Ġ 3 / 2 3 / 2 0 2 0 Ġin Ġeth iop ia . covid . android . ui . fragment Ċ Ġ* Ġinside Ġthe Ġproject ĠCo V id Et Ġ. Ċ Ġ*/ Ċ class ĠNews Fragment Ġ: ĠBase Fragment () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġ_ news Fragment Binding : ĠNews Fragment Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġnews Fragment Binding : ĠNews Fragment Binding ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ news Fragment Binding !! ĊĊĠĠĠ Ġprivate Ġvar Ġadapter : ĠNews Item Recycler Adapter ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Requires Api ( api Ġ= ĠBuild . VERSION _ CODES . KIT K AT _ WATCH ) ĊĠĠĠ Ġprivate Ġfun Ġhandle Window Insets ( re cyclerView : ĠRecyclerView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġre cyclerView ?. setOn Apply Window Insets Listener Ġ{ Ġ_: ĠView ?, Ġin sets : ĠWindow Insets Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmargin Params Ġ= Ġre cyclerView . layout Params Ġas ĠMargin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmargin Params . set Margins ( 0 , Ġin sets . system Window Inset Top , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . layout Params Ġ= Ġmargin Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin sets ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonLoad More News () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Last News Id Ġ= Ġadapter ?. id Of Last News () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( current Last News Id Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġinstance . main API . get Latest News ( current Last News Id , Ġobject Ġ: ĠOn Item Ready < List < News Item > ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item ( item : ĠList < News Item > ?, Ġerr : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( err ?. isNotEmpty () Ġ== Ġtrue ) ĠTim ber . e ( err ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter ?. load More On Bottom ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT _ WATCH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnews Fragment Binding . re cyclerView . request Apply Insets () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Window Insets ( news Fragment Binding . re cyclerView ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġ_ news Fragment Binding Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġadapter Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Re select () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Re select () ĊĠĠĠĠĠĠĠ Ġ// ĠGo Ġto Ġthe Ġtop Ġof Ġthe Ġre cycler Ġview ĊĠĠĠĠĠĠĠ Ġnews Fragment Binding . re cyclerView . smooth Scroll To Position ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ news Fragment Binding Ġ= ĠNews Fragment Binding . inflate ( layout Inflater ) ĊĊĠĠĠĠĠĠĠ Ġnews Fragment Binding . re cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( activity , ĠRecyclerView . VERTICAL , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġset Refresh Button Action ( news Fragment Binding . content State , ĠView . OnClickListener Ġ{ Ġrender News ( news Fragment Binding . content State ) Ġ}) ĊĠĠĠĠĠĠĠ Ġrender News ( news Fragment Binding . content State ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnews Fragment Binding . root ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġprivate Ġfun Ġrender News ( main View : ĠContent State Layout Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠNews Item Recycler Adapter ( ArrayList (), Ġobject Ġ: ĠOn Last Item Reached Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Last Item Reached () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonLoad More News () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġobject Ġ: ĠOn Image Item Clicked Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Image Clicked ( imageView : ĠImageView , Ġclicked Image Uri : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSt f alcon Image Viewer . Builder ( activity , Ġclicked Image Uri , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage Loader Ġ{ ĠimageView X : ĠImageView ?, Ġimage : ĠString ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( imageView X Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( imageView X ). load ( image ). into ( imageView X ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Transition From ( imageView ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġchange ProgressBar Visibility ( main View , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġchange Error Dialog Visibility ( main View , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġinstance . main API . get Latest News ( object Ġ: ĠOn Item Ready < List < News Item > ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item ( item : ĠList < News Item > ?, Ġerr : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item Ġ== Ġnull Ġ|| Ġitem . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange ProgressBar Visibility ( main View , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Error Dialog Visibility ( main View , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Default ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprevious Latest News Ġ= ĠgetDefault SharedPreferences ( instance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getInt ( PREFER ENCE _ LATE ST _ NE WS , Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġnews Ġis Ġnot Ġfound Ġin Ġthe Ġcurrent Ġincoming Ġlist Ġ... ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThat Ġmeans Ġthe Ġuser Ġmissed Ġmore Ġthan Ġ 1 0 Ġnews ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurrent News Position Ġ= Ġ 1 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġitem . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item [ i ]. id Ġ== Ġprevious Latest News ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent News Position Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetDefault SharedPreferences ( instance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. edit (). put Int ( PREFER ENCE _ LATE ST _ NE WS , Ġitem [ 0 ]. id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Badge ( current News Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( adapter Ġ!= Ġnull ) Ġadapter ?. populate News Items ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange ProgressBar Visibility ( main View , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġnews Fragment Binding . re cyclerView . adapter Ġ= Ġadapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Badge ( numberOf New News : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( numberOf New News Ġ<= Ġ 0 ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ( activity Ġas ? ĠMainActivity )?. set Badge ( 2 , ĠBadge ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf New News . coerce At Most ( 1 0 ). toString () Ġ+ Ġif Ġ( numberOf New News Ġ> Ġ 1 0 ) Ġ" +" Ġelse Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( activity Ġas ĠMainActivity , ĠR . color . yellow _ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . BLACK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 8 f , ĠBadge Type . BOX )) ĊĊĠĠĠĠĠĠĠ ĠHandler (). post Delayed ({ Ġ( activity Ġas ? ĠMainActivity )?. remove Badge ( 2 ) Ġ}, Ġ 1 0 0 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance (): ĠNews Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= ĠNews Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . arguments Ġ= Ġargs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfragment ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }