package Ġcom . vj . andro phot og allery Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . paging . Experimental Paging Api Ċ import Ġcom . vj . andro phot og allery . databinding . Activity Main Binding Ċ import Ġcom . vj . andro phot og allery . presentation . bookmarks . Book marks Fragment Ċ import Ġcom . vj . andro phot og allery . presentation . phot og allery . Photo Gallery Fragment Ċ import Ġcom . vj . andro phot og allery . presentation . search photos . Search Photos Fragment Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ Ċ @ Android EntryPoint Ċ @ Experimental Paging Api Ċ @ Experimental Cor outines Api Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Main Binding ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġphoto Gallery Fragment : ĠPhoto Gallery Fragment ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsearch Fragment : ĠSearch Photos Fragment ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbook marks Fragment : ĠBook marks Fragment ĊĊĠĠĠ Ġprivate Ġval Ġfragments : ĠArray < Fragment > ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Gallery Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook marks Fragment ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġvar Ġselected Index Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġval Ġselected Fragment Ġget () Ġ= Ġfragments [ selectedIndex ] ĊĊĠĠĠ Ġprivate Ġfun Ġselect Fragment ( selected Fragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtransaction Ġ= Ġsupport FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠ Ġfragments . forEach Indexed Ġ{ Ġindex , Ġfragment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected Fragment Ġ== Ġfragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ= Ġtransaction . attach ( fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Index Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ= Ġtransaction . detach ( fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtransaction . commit () ĊĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġwhen Ġ( selected Fragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPhoto Gallery Fragment Ġ-> ĠgetString ( R . string . title _ photo _ gallery ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSearch Photos Fragment Ġ-> ĠgetString ( R . string . title _ search ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBook marks Fragment Ġ-> ĠgetString ( R . string . title _ bookmarks ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Main Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Gallery Fragment Ġ= ĠPhoto Gallery Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Fragment Ġ= ĠSearch Photos Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbook marks Fragment Ġ= ĠBook marks Fragment () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( R . id . fragment _ container , Ġphoto Gallery Fragment , ĠTAG _ PH OTO _ G ALL ERY _ FRAGMENT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( R . id . fragment _ container , Ġsearch Fragment , ĠTAG _ SEARCH _ FRAGMENT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( R . id . fragment _ container , Ġbook marks Fragment , ĠTAG _ BOOK MARK S _ FRAGMENT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Gallery Fragment Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . find Fragment By Tag ( TAG _ PH OTO _ G ALL ERY _ FRAGMENT ) Ġas ĠPhoto Gallery Fragment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Fragment Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . find Fragment By Tag ( TAG _ SEARCH _ FRAGMENT ) Ġas ĠSearch Photos Fragment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbook marks Fragment Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . find Fragment By Tag ( TAG _ BOOK MARK S _ FRAGMENT ) Ġas ĠBook marks Fragment ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Index Ġ= ĠsavedInstanceState . getInt ( KEY _ SELECTED _ INDEX , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġselect Fragment ( selected Fragment ) ĊĊĠĠĠĠĠĠĠ Ġbinding . bottom Nav . setOn Navigation ItemSelected Listener Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ photo _ gallery Ġ-> Ġphoto Gallery Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ search Ġ-> Ġsearch Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ bookmarks Ġ-> Ġbook marks Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Unexpected ĠitemId ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected Fragment Ġ=== Ġfragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fragment Ġis ĠOn Bottom Navigation Fragment Re selected Listener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . on Bottom Navigation Fragment Re selected () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect Fragment ( fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn Bottom Navigation Fragment Re selected Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Bottom Navigation Fragment Re selected () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( selectedIndex Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bottom Nav . selected ItemId Ġ= ĠR . id . nav _ photo _ gallery ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġout State . put Int ( KEY _ SELECTED _ INDEX , Ġselected Index ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġconst Ġval ĠTAG _ PH OTO _ G ALL ERY _ FRAGMENT Ġ= Ġ" TAG _ PH OTO _ G ALL ERY _ FRAGMENT " Ċ private Ġconst Ġval ĠTAG _ SEARCH _ FRAGMENT Ġ= Ġ" TAG _ SEARCH _ FRAGMENT " Ċ private Ġconst Ġval ĠTAG _ BOOK MARK S _ FRAGMENT Ġ= Ġ" TAG _ BOOK MARK S _ FRAGMENT " Ċ private Ġconst Ġval ĠKEY _ SELECTED _ INDEX Ġ= Ġ" KEY _ SELECTED _ INDEX "