package Ġdid . chr is . alt . ui . constraint ui . tracker List Ċ Ċ import Ġandroid . graphics . Point Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . support . v 7 . widget . Grid LayoutManager Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġdid . chr is . alt . R Ċ import Ġdid . chr is . alt . base . Base Fragment Ċ import Ġdid . chr is . alt . data . response . market Summary . Market Summary Response Ċ import Ġdid . chr is . alt . data . tracker ListItem . Tracker ListItem Ċ import Ġdid . chr is . alt . layout Coord ination . home Ċ import Ġdid . chr is . alt . layout Coord ination . search To Tracker Ċ import Ġdid . chr is . alt . layout Coord ination . tracker To Search Ċ import Ġdid . chr is . alt . ui . constraint ui . add Coin . Add Coin Dialog Fragment Ċ import Ġdid . chr is . alt . ui . constraint ui . layout Coordinator . Layout Coord in atable Ċ import Ġdid . chr is . alt . ui . constraint ui . tracker Entry Detail . Tracker Detail Dialog Ċ import Ġdid . chr is . alt . ui . constraint ui . tracker List . tracker ListAdapter . Tracker Adapter Contract View Ċ import Ġdid . chr is . alt . ui . constraint ui . tracker List . tracker ListAdapter . Tracker ListAdapter Ċ import Ġdid . chr is . alt . ui . interfaces . Filter View Ċ import Ġdid . chr is . alt . ui . interfaces . List Scroll Controller Ċ import Ġdid . chr is . alt . ui . search . Search Summary Callback Ċ Ċ class ĠTracker List Fragment Ġ: ĠBase Fragment (), ĠTracker Contract View , ĠFilter View , ĠList Scroll Controller Ġ{ ĊĊĠĠĠ Ġ// ĠProperties ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġviews : ĠTracker Fragment View holder ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtracker Presenter : ĠTracker Contract Presenter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtracker ListAdapter : ĠTracker Adapter Contract View ĊĊĠĠĠ Ġ// ĠLifecycle ĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġinflater . inflate ( R . layout . fragment _ tracker _ list , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġtracker Presenter Ġ= Ġget Presenter Component (). provide Tracker Presenter () ĊĠĠĠĠĠĠĠ Ġtracker Presenter . attach View ( this ) ĊĠĠĠĠĠĠĠ Ġattach Presenter ( tracker Presenter ) ĊĠĠĠĠĠĠĠ Ġthis . views Ġ= ĠTracker Fragment View holder ( view ) ĊĠĠĠĠĠĠĠ Ġviews . summary Search Bar . initial ise ( require Context ()) ĊĠĠĠĠĠĠĠ Ġinitialise Back Button () ĊĠĠĠĠĠĠĠ Ġtracker Presenter . initial ise () ĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġtracker ListAdapter . on Destroy () ĊĠĠĠĠĠĠĠ Ġtracker Presenter . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠOverrides ĊĠĠĠ Ġoverride Ġfun Ġinitialise Tracker List () Ġ{ ĊĠĠĠĠĠĠĠ Ġviews . no Entries Message . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġtracker ListAdapter Ġ= ĠTracker ListAdapter ( get Presenter Component (), Ġget Screen Width ()) ĊĠĠĠĠĠĠĠ Ġviews . tracker Recycler . layout Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid LayoutManager ( context , Ġ 2 , ĠGrid LayoutManager . VERTICAL , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġviews . tracker Recycler . adapter Ġ= Ġtracker ListAdapter Ġas ĠTracker ListAdapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinitialise Tracker List Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġtracker ListAdapter . on Tracker Entry Selected (). subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Tracker Entry Dialog For ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsubscription Ġ= Ġtracker ListAdapter . on No Entries Present () ĊĠĠĠĠĠĠĠ Ġsubscription . first . subscribe Ġ{ Ġno Entries Present Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtracker Presenter . handle Tracker Entries Change ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno Entries Present ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtracker Presenter . handle Tracker Entries Change ( subscription . second ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinitialise Refresh Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrefresh Colour Ġ= ĠContext Compat . getColor ( require Context (), ĠR . color . color Accent ) ĊĠĠĠĠĠĠĠ Ġviews . swipe Refresh . setColor Scheme Colors ( refresh Colour ) ĊĠĠĠĠĠĠĠ Ġviews . swipe Refresh . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtracker Presenter . refresh Cache () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinitialise Add Entry Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġviews . add Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Add Coin Dialog () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinitialise Search Bar () Ġ{ ĊĠĠĠĠĠĠĠ Ġviews . summary Search Bar . set Callback ( object Ġ: ĠSearch Summary Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġkeyboard Requested () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġkeyboard Dis missed ( window Token : ĠI Binder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Keyboard ( window Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsearch State Requested () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠLayout Coord in atable ). update Layout ( tracker To Search ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcancel Search Requested () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠLayout Coord in atable ). update Layout ( search To Tracker ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Search Query ( query : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtracker ListAdapter . filter For ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdisplay Market Summary ( market Summary : ĠMarket Summary Response ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġviews . summary Search Bar . display Market Summary ( require Context (), Ġmarket Summary ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhide Progress Spinner () Ġ{ ĊĠĠĠĠĠĠĠ Ġviews . swipe Refresh . visibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow No Tracker Entries Message () Ġ{ ĊĠĠĠĠĠĠĠ Ġviews . swipe Refresh . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġviews . no Entries Message . visibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhide No Tracker Entries Message () Ġ{ ĊĠĠĠĠĠĠĠ Ġviews . swipe Refresh . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġviews . no Entries Message . visibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfilter For ( input : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtracker ListAdapter . filter For ( input ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġviews . swipe Refresh . is Refresh ing Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhide Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġviews . swipe Refresh . is Refresh ing Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop List Scroll () Ġ{ ĊĠĠĠĠĠĠĠ Ġviews . tracker Recycler . stop Scroll () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠPrivate ĠFunctions ĊĠĠĠ Ġprivate Ġfun Ġshow Tracker Entry Dialog For ( item : ĠTracker ListItem ) Ġ{ ĊĠĠĠĠĠĠĠ Ġremove Dialog With Tag (" Tracker Entry Detail ") ĊĠĠĠĠĠĠĠ Ġval Ġnew Coin Detail Ġ= ĠTracker Detail Dialog . getInstance For ( item ) ĊĠĠĠĠĠĠĠ Ġval Ġfragment Manager Ġ= Ġactivity ?. fragment Manager ĊĠĠĠĠĠĠĠ Ġnew Coin Detail . show ( fragment Manager , Ġ" Tracker Entry Detail ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Add Coin Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġremove Dialog With Tag (" Add Coin Dialog ") ĊĠĠĠĠĠĠĠ Ġval Ġnew Coin Detail Ġ= ĠAdd Coin Dialog Fragment . getInstance For ( null ) ĊĠĠĠĠĠĠĠ Ġval Ġfragment Manager Ġ= Ġactivity ?. fragment Manager ĊĠĠĠĠĠĠĠ Ġnew Coin Detail . show ( fragment Manager , Ġ" Add Coin Dialog ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Dialog With Tag ( tag : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfragment Manager Ġ= Ġactivity ?. fragment Manager ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġfragment Manager ?. find Fragment By Tag ( tag ) ĊĠĠĠĠĠĠĠ Ġdialog ?. let Ġ{ Ġshown Dialog Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Manager . beginTransaction (). remove ( shown Dialog ). commit () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialise Back Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġviews . back Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠLayout Coord in atable ). update Layout ( home ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Screen Width (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Ġ= Ġactivity ?. window Manager ?. default Display ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= ĠPoint () ĊĠĠĠĠĠĠĠ Ġdisplay ?. getSize ( size ) ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġsize . x ĊĠĠĠĠĠĠĠ Ġval Ġpadding Ġ= Ġviews . swipe Refresh . padding Start Ġ* Ġ 3 ĊĠĠĠĠĠĠĠ Ġreturn Ġwidth Ġ- Ġpadding ĊĠĠĠ Ġ} Ċ } Ċ