package Ġcom . next inger . bin ancer . ui Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . coordinator layout . widget . Coordinator Layout Ċ import Ġandroidx . core . view . Gravity Compat Ċ import Ġandroidx . drawer layout . widget . Drawer Layout Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġandroidx . navigation . fragment . Nav Host Fragment Ċ import Ġandroidx . navigation . ui . AppBar Configuration Ċ import Ġandroidx . navigation . ui . navigate Up Ċ import Ġandroidx . navigation . ui . setup ActionBar With Nav Controller Ċ import Ġandroidx . navigation . ui . setup With Nav Controller Ċ import Ġcom . next inger . bin ancer . R Ċ import Ġcom . next inger . bin ancer . data . objects . Content State Ċ import Ġcom . next inger . bin ancer . data . objects . enums . State Ċ import Ġcom . next inger . bin ancer . databinding . Activity Main Binding Ċ import Ġcom . next inger . bin ancer . models . Main ViewModel Ċ import Ġcom . next inger . bin ancer . utils . Animation Utils Ċ import Ġcom . next inger . bin ancer . utils . backdrop . Back drop Behavior Ċ import Ġdagger . h ilt . android . Android EntryPoint ĊĊ Ċ @ Android EntryPoint Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Main Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġapp Bar Configuration : ĠApp Bar Configuration ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdrawer : ĠDraw er Layout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġback drop Behavior : ĠBack drop Behavior ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠMain ViewModel ĊĊĠĠĠ Ġprivate Ġvar Ġstate : ĠState ? Ġ= Ġnull ĊĠĠĠ Ġ// ĠTODO Ġfigure Ġout Ġbetter Ġsolution ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontent Layout : ĠView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġno Result Layout : ĠView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġprogress Layout : ĠView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġerror Layout : ĠView ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Main Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( this )[ Main ViewModel :: class . java ] ĊĠĠĠĠĠĠĠ Ġcontent Layout Ġ= Ġbinding . app Bar Main . content . nav Host Fragment ĊĠĠĠĠĠĠĠ Ġno Result Layout Ġ= Ġbinding . app Bar Main . content . no Result Layout ĊĠĠĠĠĠĠĠ Ġprogress Layout Ġ= Ġbinding . app Bar Main . content . progress Layout ĊĠĠĠĠĠĠĠ Ġerror Layout Ġ= Ġbinding . app Bar Main . content . error Layout ĊĊĠĠĠĠĠĠĠ ĠviewModel . content State . observe ( this , Ġ{ Ġcontent State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Content State ( content State ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġdrawer Ġ= Ġbinding . drawer Layout ĊĠĠĠĠĠĠĠ Ġval Ġtoolbar Ġ= Ġbinding . app Bar Main . toolbar ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĠĠĠĠĠĠĠ Ġtoolbar . set Navigation Icon ( R . drawable . ic _ menu ) ĊĊĠĠĠĠĠĠĠ Ġtoolbar . set Navigation OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . open Drawer ( Gravity Compat . START ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnav Host Fragment Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . find Fragment ById ( R . id . nav _ host _ fragment ) Ġas ĠNav Host Fragment ĊĠĠĠĠĠĠĠ Ġval Ġbottom Nav Controller Ġ= Ġnav Host Fragment . nav Controller ĊĠĠĠĠĠĠĠ Ġval Ġbottom AppBar Configuration Ġ= ĠApp Bar Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . navigation _ ticker , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . navigation _ spot _ wallet , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . navigation _ order _ history , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . navigation _ trade _ history ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġsetup ActionBar With Nav Controller ( bottom Nav Controller , Ġbottom AppBar Configuration ) ĊĠĠĠĠĠĠĠ Ġbinding . app Bar Main . bottom Nav View . setup With Nav Controller ( bottom Nav Controller ) ĊĠĠĠĠĠĠĠ Ġ// Ġinitialize Ġback drop ĊĠĠĠĠĠĠĠ Ġback drop Behavior Ġ= Ġbinding . app Bar Main . content . content . find Behavior () ĊĠĠĠĠĠĠĠ Ġwith ( backdrop Behavior ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattach Back Layout ( R . id . back Layout ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . drop _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Support Navigate Up (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Controller Ġ= Ġfind Nav Controller ( R . id . nav _ host _ fragment ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnav Controller . navigate Up ( app Bar Configuration ) Ġ|| Ġsuper . on Support Navigate Up () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . is Drawer Open ( Gravity Compat . START ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . close Drawer ( Gravity Compat . START ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġback drop Behavior . isOpen () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback drop Behavior . close ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġdropdown Ġfilter Ġfragment ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Dropdown Settings Fragment ( fragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( backdrop Behavior . isOpen ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġback drop Behavior . close ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsupport FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( R . id . settings _ container , Ġfragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFind Ġback drop Ġbehavior ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠCoord inator Layout . Behavior <* >> ĠView . find Behavior (): ĠT Ġ= Ġlayout Params . run Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ! is ĠCoord inator Layout . LayoutParams ) Ġthrow ĠIllegalArgumentException (" View 's Ġlayout Ġparams Ġshould Ġbe ĠCoord inator Layout . LayoutParams ") ĊĊĠĠĠĠĠĠĠ Ġ( layout Params Ġas ĠCoord inator Layout . LayoutParams ). behavior Ġas ? ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Layout 's Ġbehavior Ġis Ġnot Ġcurrent Ġbehavior ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandle Ġcontent Ġstate ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġhandle Content State ( content State : ĠContent State ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== Ġcontent State . state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġupdate Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠState . LOADING Ġ-> Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠState . NO _ RESULT Ġ-> Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠState . ERROR Ġ-> Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġhandle Ġprevious Ġstate ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . CONTENT Ġ-> ĠAnimation Utils . fadeOut ( content Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . LOADING Ġ-> ĠAnimation Utils . fadeOut ( progress Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . NO _ RESULT Ġ-> ĠAnimation Utils . fadeOut ( no Result Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . ERROR Ġ-> ĠAnimation Utils . fadeOut ( error Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġ{} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstate Ġ= Ġcontent State . state ĊĊĠĠĠĠĠĠĠ Ġ// Ġhandle Ġcurrent Ġstate ĊĠĠĠĠĠĠĠ Ġwhen Ġ( content State . state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . CONTENT Ġ-> ĠAnimation Utils . fadeIn ( content Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . LOADING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Utils . fadeIn ( progress Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . NO _ RESULT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Utils . start Gif Animation Once ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . app Bar Main . content . no Result ImageView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . raw . anim _ conf used _ tr av ol ta _ meme , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Utils . fadeIn ( no Result Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . app Bar Main . content . no Result TextView . text Ġ= Ġcontent State . message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . ERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Utils . start Gif Animation Once ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . app Bar Main . content . error ImageView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . raw . anim _ sad _ kid _ meme , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Utils . fadeIn ( error Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . app Bar Main . content . error TextView . text Ġ= Ġcontent State . message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }