package Ġcom . int ell is rc . universal remote adapter . ui Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . Menu Inflater Ċ import Ġandroid . view . MenuItem Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġbutter knife . B utter Kn ife Ċ import Ġcom . int ell is rc . universal remote adapter . R Ċ import Ġcom . int ell is rc . universal remote adapter . di . Injector Ċ import Ġcom . int ell is rc . universal remote adapter . ui . base . Base Activity Ċ import Ġcom . int ell is rc . universal remote adapter . ui . base . Base Key Ċ import Ġcom . int ell is rc . universal remote adapter . ui . main . Bluetooth Connection Fragment Key Ċ import Ġcom . int ell is rc . universal remote adapter . ui . remote _ controller . Remote Controller Fragment Key Ċ import Ġcom . int ell is rc . universal remote adapter . utils . Back stack Holder Ċ import Ġcom . int ell is rc . universal remote adapter . utils . Rx Bus Ċ import Ġcom . int ell is rc . universal remote adapter . utils . ServiceProvider Ċ import Ġcom . zh u inden . simple stack . Back stack Delegate Ċ import Ġcom . zh u inden . simple stack . History Ċ import Ġcom . zh u inden . simple stack . StateChange Ċ import Ġcom . zh u inden . simple stack . State Ch anger Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠMainActivity Ġ: ĠBase Activity (), ĠState Ch anger , ĠLifecycle Owner Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmenu Item : ĠMenuItem ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġback stack Delegate Ġ= ĠBack stack Delegate () ĊĠĠĠĠĠĠĠ Ġback stack Delegate . set Scoped Services ( this , ĠService Provider ()) ĊĠĠĠĠĠĠĠ Ġback stack Delegate . onCreate ( savedInstanceState , Ġlast Custom Non Configuration Instance , ĠHistory . single ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRemote Controller Fragment Key . create )) ĊĠĠĠĠĠĠĠ Ġback stack Delegate . register For Lifecycle Callbacks ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġback stack Holder : ĠBack stack Holder Ġ= ĠInject or . get (). back stack Holder ĊĠĠĠĠĠĠĠ Ġback stack Holder . set Back stack ( back stack Delegate . back stack ) Ġ// Ġ<-- Ġmake ĠBack stack Ġglobally Ġavailable Ġthrough ĠD agger ĊĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( bottom AppBar ) ĊĊĠĠĠĠĠĠĠ ĠB utter Kn ife . bind ( this ) ĊĠĠĠĠĠĠĠ ĠInject or . get (). inject ( this ) ĊĊĠĠĠĠĠĠĠ Ġfragment State Ch anger Ġ= ĠFragment State Ch anger ( this , Ġsupport FragmentManager , ĠR . id . container ) ĊĠĠĠĠĠĠĠ Ġback stack Delegate . setState Ch anger ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Views ForKey ( key : ĠBase Key <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( key . should Show Up ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// val Ġfragment : ĠFragment ? Ġ= Ġsupport FragmentManager . find Fragment By Tag ( key . get Fragment Tag ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle StateChange ( ĊĠĠĠĠĠĠĠ Ġstate Change : ĠState Change , ĊĠĠĠĠĠĠĠ Ġcompletion Callback : ĠState Ch anger . Callback ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! state Change . is Top New Key EqualTo Previous ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment State Ch anger . handle StateChange ( state Change ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Views ForKey ( state Change . top New Key ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġtitle : ĠString Ġ= Ġstate Change . top New Key < Base Key <* >> (). title ( resources ) !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcompletion Callback . state Change Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmenu Inflater Ġ= Ġmenu Inflater ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . bottom _ app _ bar _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġget Bluetooth Connection () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . app _ bar _ bluetooth Ġ-> Ġback stack . goTo ( Bluetooth Connection Fragment Key . create ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Bluetooth Connection () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmenu Item Ġ= Ġbottom AppBar . menu . getItem ( 0 ) ĊĠĠĠĠĠĠĠ ĠRx Bus . subscribe (( Rx Bus . BL U ETO OTH _ CONNECTION _ STATE ), Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġis ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . toString () Ġ== Ġ" CONNECTED ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item . icon Ġ= Ġresources . get Drawable ( R . drawable . ic _ bluetooth _ connected _ menu ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( it . toString () Ġ== Ġ" DIS CONNECTED ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item . icon Ġ= Ġresources . get Drawable ( R . drawable . ic _ bluetooth _ menu ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġbluetooth Connection Fragment ViewModel . get Bluetooth Connection Status . remove Observer s ( this @ MainActivity ) ĊĠĠĠĠĠĠĠ ĠRx Bus . unregister ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! back stack Delegate . back stack . go Back ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" MainActivity " ĊĠĠĠ Ġ} Ċ } Ċ