package Ġcar . pace . co fu . ui . main Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . view . Gravity Compat Ċ import Ġandroidx . drawer layout . widget . Drawer Layout Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġandroidx . navigation . fragment . Nav Host Fragment Ċ import Ġcar . pace . co fu . R Ċ import Ġcar . pace . co fu . core . events . Activity Event Ċ import Ġcar . pace . co fu . core . events . Close Drawer Ċ import Ġcar . pace . co fu . core . events . Show Sn ack Ċ import Ġcar . pace . co fu . core . mv vm . Base Activity Ċ import Ġcar . pace . co fu . databinding . Activity Main Binding Ċ import Ġcar . pace . co fu . ui . home . Home Fragment Directions Ċ import Ġcloud . pace . sdk . app kit . App Kit Ċ import Ġcom . google . android . gms . oss . licenses . O ss License s Menu Activity Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ Ċ // ĠWork around Ġfor Ġhttps :// github . com / google / d agger / issues / 1 9 0 4 Ċ abstract Ġclass ĠBase MainActivity Ġ: ĠBase Activity < Activity Main Binding , ĠMain ViewModel >( ĊĠĠĠ ĠR . layout . activity _ main , ĊĠĠĠ ĠMain ViewModel :: class Ċ ) Ċ Ċ @ Android EntryPoint Ċ class ĠMainActivity Ġ: ĠBase MainActivity () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġstart Ġdestination Ġdepending Ġon Ġwhether Ġon boarding Ġis Ġdone ĊĠĠĠĠĠĠĠ Ġval Ġnav Host Fragment Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( support FragmentManager . find Fragment ById ( R . id . fragment _ container ) Ġas ĠNav Host Fragment ) ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= Ġnav Host Fragment . nav Controller . nav Inflater ĊĠĠĠĠĠĠĠ Ġval Ġgraph Ġ= Ġinflater . inflate ( R . navigation . nav _ graph _ main ) ĊĠĠĠĠĠĠĠ Ġgraph . start Destination Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . on boarding Done ) ĠR . id . fragment _ home Ġelse ĠR . id . fragment _ on boarding ĊĠĠĠĠĠĠĠ Ġnav Host Fragment . nav Controller . graph Ġ= Ġgraph ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġval Ġbinding Ġget () Ġ= Ġget Binding < Activity Main Binding >() ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( binding ?. drawer Layout ?. is Drawer Open ( Gravity Compat . START ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Drawer () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġsets Ġwhether Ġor Ġnot Ġthe Ġuser Ġcan Ġopen Ġthe Ġdrawer Ġmenu Ġby Ġsw ip ing Ġfrom Ġthe Ġedge ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġmenu Sw ip ing Active : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbinding ?. drawer Layout ?. get Drawer Lock Mode ( Gravity Compat . START ) Ġ== ĠDraw er Layout . LOCK _ MODE _ LOCK ED _ CLOSED ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmode Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value ) ĠDraw er Layout . LOCK _ MODE _ UNLOCK ED Ġelse ĠDraw er Layout . LOCK _ MODE _ LOCK ED _ CLOSED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. drawer Layout ?. set Drawer Lock Mode ( mode , ĠGr avity Compat . START ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġopens Ġthe Ġdrawer Ġmenu Ġwhen Ġit 's Ġclosed Ġand Ġvice Ġvers a ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtoggle Menu () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( binding ?. drawer Layout ?. is Drawer Open ( Gravity Compat . START ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. drawer Layout ?. close Drawer ( Gravity Compat . START ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. drawer Layout ?. open Drawer ( Gravity Compat . START ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcloses Ġthe Ġnavigation Ġdrawer Ġmenu ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġhide Drawer () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding ?. drawer Layout ?. close Drawer ( Gravity Compat . START ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Handle Activity Event ( event : ĠActivity Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠClose Drawer Ġ-> Ġhide Drawer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMain ViewModel . MenuItem Click Event Ġ-> Ġon MenuItem Click ( event . menu ItemId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Handle Activity Event ( event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon MenuItem Click ( menu ItemId : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhide Drawer () ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( menu ItemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . menu _ item _ imp ress um Ġ-> Ġopen WebView (" imp ress um . html ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . menu _ item _ privacy Ġ-> Ġopen WebView (" privacy . html ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . menu _ item _ licenses Ġ-> Ġshow License Screen () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . menu _ item _ fuel _ type Ġ-> Ġopen Fuel Type Settings () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . menu _ item _ payment Ġ-> ĠApp Kit . open Payment App ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . menu _ item _ history Ġ-> ĠApp Kit . open Transactions ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . menu _ item _ logout Ġ-> Ġshow Logout Confirmation () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġnav Controller : ĠNav Controller ? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Container Ġ= Ġbinding ?. fragment Container Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfind Nav Controller ( fragment Container . id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Logout Confirmation () Ġ{ ĊĠĠĠĠĠĠĠ Ġnav Controller ?. navigate ( Home Fragment Directions . open Logout Confirmation ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Fuel Type Settings () Ġ{ ĊĠĠĠĠĠĠĠ Ġnav Controller ?. navigate ( Home Fragment Directions . open Fuel Type Settings ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen WebView ( filename : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnav Controller ?. navigate ( Home Fragment Directions . open Web view ( filename )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow License Screen () Ġ{ ĊĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠO ss License s Menu Activity :: class . java )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent Snackbar : ĠSn ackbar ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Show Message ( show Sn ack : ĠShow Sn ack ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhost Ġ= Ġget Binding < Activity Main Binding >() ?. coordinator Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġshow Sn ack . message Res ?. let Ġ{ ĠgetString ( it ) Ġ} Ġ?: Ġshow Sn ack . message Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġcurrent Snackbar ?. dismiss () ĊĊĠĠĠĠĠĠĠ Ġval Ġsn ackBar Ġ= ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost , Ġtext , Ġif Ġ( show Sn ack . action Listener Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ IN DEFIN ITE Ġelse ĠSn ackbar . LENGTH _ LONG ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval ĠtextView Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackBar . view . findViewById < TextView >( com . google . android . material . R . id . sn ackbar _ text ) ĊĠĠĠĠĠĠĠ ĠtextView . max Lines Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ ĠtextView . setTextColor ( Context Compat . getColor ( this , Ġshow Sn ack . type . textColor Res )) ĊĊĠĠĠĠĠĠĠ Ġsn ackBar . view . background Ġ= ĠContext Compat . get Drawable ( this , Ġshow Sn ack . type . background Res ) ĊĊĠĠĠĠĠĠĠ Ġshow Sn ack . action Listener ?. let Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackBar . setAction TextColor ( Context Compat . getColor ( this , Ġshow Sn ack . type . action Color Res )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackBar . setAction ( show Sn ack . action Text ) Ġ{ Ġsn ackBar . dismiss (); Ġaction . invoke () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsn ackBar . show () ĊĠĠĠĠĠĠĠ Ġcurrent Snackbar Ġ= Ġsn ackBar ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdismiss Sn ack bars () Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Snackbar ?. dismiss () ĊĠĠĠĠĠĠĠ Ġcurrent Snackbar Ġ= Ġnull ĊĠĠĠ Ġ} Ċ }