package Ġat . ict 4 d . ict 4 d news . extensions Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . annotation . Drawable Res Ċ import Ġandroidx . annotation . Id Res Ċ import Ġandroidx . browser . custom tabs . Custom Tabs Intent Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . databinding . Binding Adapter Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . Nav Directions Ċ import Ġandroidx . navigation . Nav Options Ċ import Ġandroidx . navigation . fragment . Fragment Navigator Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . swiper ef resh layout . widget . Swipe Refresh Layout Ċ import Ġat . ict 4 d . ict 4 d news . R Ċ import Ġat . ict 4 d . ict 4 d news . utils . G lide App Ċ import Ġat . ict 4 d . ict 4 d news . utils . G lide Request Ċ import Ġat . ict 4 d . ict 4 d news . utils . record Action Breadcrumb Ċ import Ġcom . bump tech . glide . load . DataSource Ċ import Ġcom . bump tech . glide . load . engine . G lide Exception Ċ import Ġcom . bump tech . glide . request . RequestListener Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġcom . simple city apps . recyclerview _ fast scroll . interfaces . On Fast Scroll State ChangeListener Ċ import Ġcom . simple city apps . recyclerview _ fast scroll . views . Fast Scroll RecyclerView Ċ import Ġorg . js oup . J soup Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjava . util . Locale Ċ Ċ fun ĠContext . browse Custom Tab ( url : ĠString ?) Ġ{ ĊĠĠĠ Ġrecord Action Breadcrumb (" browse Custom Tab ", Ġthis , Ġmap Of (" url " Ġto Ġ"$ url ")) ĊĊĠĠĠ Ġurl ?. let Ġ{ ĊĠĠĠĠĠĠĠ ĠCustom Tabs Intent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Toolbar Color ( Context Compat . getColor ( this , ĠR . color . color Primary )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch Url ( this , ĠUri . parse ( it )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠLocalDateTime . extract Date (): ĠString Ġ= Ġthis . format ( DateTime Formatter . of Pattern (" dd . MM . yyyy ", ĠLocale . getDefault ())) Ċ Ċ fun ĠString . to LocalDateTime From RFC String (): ĠLocalDateTime ? Ġ= ĊĠĠĠ ĠLocalDateTime . parse ( this , ĠDateTime Formatter . RFC _ 1 1 2 3 _ DATE _ TIME ) Ġ?: Ġnull Ċ Ċ @ Binding Adapter ( value Ġ= Ġ[" load From Res ", Ġ" placeholder ", Ġ" error ", Ġ" round "], Ġrequire All Ġ= Ġfalse ) Ċ fun ĠImageView . load From URL ( ĊĠĠĠ Ġ@ Drawable Res ĊĠĠĠ Ġdrawable Res : ĠInt , ĊĠĠĠ Ġ@ Drawable Res ĊĠĠĠ Ġplaceholder : ĠInt Ġ= ĠR . drawable . ic _ refresh _ black _ 2 4 dp , ĊĠĠĠ Ġ@ Drawable Res ĊĠĠĠ Ġerror : ĠInt Ġ= ĠR . drawable . ic _ broken _ image _ black _ 2 4 dp , ĊĠĠĠ Ġround : ĠBoolean Ġ= Ġfalse Ċ ) Ġ= ĠsetUp G lide And Load ( this , ĠG lide App . with ( context ). load ( drawable Res ), Ġplaceholder , Ġerror , Ġround ) Ċ Ċ @ Binding Adapter ( value Ġ= Ġ[" load From URL ", Ġ" placeholder ", Ġ" error ", Ġ" round "], Ġrequire All Ġ= Ġfalse ) Ċ fun ĠImageView . load From URL ( ĊĠĠĠ Ġurl : ĠString ?, ĊĠĠĠ Ġ@ Drawable Res ĊĠĠĠ Ġplaceholder : ĠInt Ġ= ĠR . drawable . ic _ refresh _ black _ 2 4 dp , ĊĠĠĠ Ġ@ Drawable Res ĊĠĠĠ Ġerror : ĠInt Ġ= ĠR . drawable . ic _ broken _ image _ black _ 2 4 dp , ĊĠĠĠ Ġround : ĠBoolean Ġ= Ġfalse Ċ ) Ġ= ĠsetUp G lide And Load ( this , ĠG lide App . with ( context ). load ( url ), Ġplaceholder , Ġerror , Ġround ) Ċ Ċ private Ġfun ĠsetUp G lide And Load ( ĊĠĠĠ ĠimageView : ĠImageView , ĊĠĠĠ Ġg lide : ĠG lide Request < Drawable >, ĊĠĠĠ Ġ@ Drawable Res ĊĠĠĠ Ġplaceholder : ĠInt Ġ= ĠR . drawable . ic _ refresh _ black _ 2 4 dp , ĊĠĠĠ Ġ@ Drawable Res ĊĠĠĠ Ġerror : ĠInt Ġ= ĠR . drawable . ic _ broken _ image _ black _ 2 4 dp , ĊĠĠĠ Ġround : ĠBoolean Ċ ) Ġ{ ĊĠĠĠ Ġif Ġ( round ) Ġ{ ĊĠĠĠĠĠĠĠ Ġg lide . apply ( RequestOptions . circle Crop Transform ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġimage Placeholder Ġ= Ġplaceholder ĊĠĠĠ Ġif Ġ( image Placeholder Ġ== Ġ 0 ) Ġ{ Ġ// Ġis Ġ 0 Ġwhen Ġnot Ġset Ġthrough ĠXML ĊĠĠĠĠĠĠĠ Ġimage Placeholder Ġ= ĠR . drawable . ic _ refresh _ black _ 2 4 dp ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġimage Error Placeholder Ġ= Ġerror ĊĠĠĠ Ġif Ġ( image Error Placeholder Ġ== Ġ 0 ) Ġ{ Ġ// Ġis Ġ 0 Ġwhen Ġnot Ġset Ġthrough ĠXML ĊĠĠĠĠĠĠĠ Ġimage Error Placeholder Ġ= ĠR . drawable . ic _ broken _ image _ black _ 2 4 dp ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġg lide ĊĠĠĠĠĠĠĠ Ġ. placeholder ( image Placeholder ) ĊĠĠĠĠĠĠĠ Ġ. error ( image Error Placeholder ) ĊĠĠĠĠĠĠĠ Ġ. listener ( object Ġ: ĠRequest Listener < Drawable > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad Failed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe : ĠG lide Exception ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel : ĠAny ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : Ġcom . bump tech . glide . request . target . Target < Drawable > ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis First Resource : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( model Ġ!= Ġnull Ġ&& Ġmodel . toString (). isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w ( e , Ġ" Failed Ġto Ġload Ġimage Ġwith Ġ$ model ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Resource Ready ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource : ĠDrawable ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel : ĠAny ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : Ġcom . bump tech . glide . request . target . Target < Drawable > ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdataSource : ĠDataSource ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis First Resource : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ. into ( imageView ) Ċ } Ċ Ċ fun ĠString . strip Html (): ĠString Ġ= ĠJ soup . parse ( this ). text () Ċ Ċ fun ĠRecyclerView . moveTo Top ( moveTo Position : ĠInt Ġ= Ġ 0 ) Ġ= Ġsmooth Scroll To Position ( moveTo Position ) Ċ Ċ fun ĠNav Controller . navigate Safe ( ĊĠĠĠ Ġ@ Id Res Ġcurrent Destination : ĠInt , ĊĠĠĠ Ġaction : ĠNav Directions ? Ġ= Ġnull , ĊĠĠĠ Ġ@ Id Res Ġdestination Id : ĠInt ? Ġ= Ġnull , ĊĠĠĠ Ġalternate Current Dest inations : ĠList < Int > Ġ= Ġempty List (), ĊĠĠĠ Ġextras : ĠFragment Navigator . Extras ? Ġ= Ġnull , ĊĠĠĠ Ġnav Options : ĠNav Options ? Ġ= Ġnull , ĊĠĠĠ Ġargs : ĠBundle ? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġthis . current Destination ?. id ?. let Ġ{ Ġid Ġ-> ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== Ġcurrent Destination Ġ|| Ġalternate Current Dest inations . contains ( id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extras Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate ( action , Ġextras ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate ( action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( destination Id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate ( destination Id , Ġargs , Ġnav Options , Ġextras ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Binding Adapter (" toggle Swipe Refresh On Fast Scroll ") Ċ fun Ġset RecyclerView Fast Scroll Listener ( ĊĠĠĠ Ġfast Scroll RecyclerView : ĠFast Scroll RecyclerView , ĊĠĠĠ Ġswipe Refresh Layout : ĠSw ipe Refresh Layout Ċ ) Ġ{ ĊĠĠĠ Ġfast Scroll RecyclerView . setOn Fast Scroll State ChangeListener ( object Ġ: ĠOn Fast Scroll State ChangeListener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Fast Scroll Stop () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! swipe Refresh Layout . is Refresh ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Layout . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Fast Scroll Start () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! swipe Refresh Layout . is Refresh ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Layout . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) Ċ } Ċ Ċ fun Ġ< T > ĠMutable LiveData < T >. trigger () Ġ{ ĊĠĠĠ Ġvalue Ġ= Ġvalue Ċ } Ċ