package Ġorg . ion project . android . offline Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . Activity Info Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroidx . activity . add Callback Ċ import Ġandroidx . appcompat . widget . Search View Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġandroidx . navigation . ui . AppBar Configuration Ċ import Ġandroidx . navigation . ui . setup ActionBar With Nav Controller Ċ import Ġandroidx . navigation . ui . setup With Nav Controller Ċ import Ġkotlinx . android . synt hetic . main . activity _ catalog _ main .* Ċ import Ġorg . ion project . android . Exception Handling Activity Ċ import Ġorg . ion project . android . R Ċ import Ġorg . ion project . android . common . Fetch Failure Ċ import Ġorg . ion project . android . common . Fetch Success Ċ import Ġorg . ion project . android . common . Ion Application Ċ import Ġorg . ion project . android . common . Ion Application . Companion . remote Config Repository Ċ import Ġorg . ion project . android . common . add Gradient Background Ċ import Ġorg . ion project . android . common . model . Root Ċ import Ġorg . ion project . android . main . MAIN _ ACTIVITY _ ROOT _ EXTRA Ċ import Ġorg . ion project . android . main . MainActivity Ċ import Ġjava . net . URI Ċ Ċ class ĠCatalog MainActivity Ġ: ĠException Handling Activity () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġsearch View Item : ĠMenuItem ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġshared ViewModel : ĠCatalog Shared ViewModel Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCatalog Shared ViewModel Provider () ĊĠĠĠĠĠĠĠ Ġ) [ Catalog Shared ViewModel :: class . java ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠCatalog MainActivity ViewModel Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCatalog MainActivity ViewModel Provider () ĊĠĠĠĠĠĠĠ Ġ) [ Catalog MainActivity ViewModel :: class . java ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġnav Controller : ĠNav Controller Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Nav Controller ( R . id . catalog _ fragment _ main _ nav host ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Destination Changed Listener Ġ{ Ġ_, Ġdestination , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCol lapse Ġsearch Ġview Ġif Ġfragment Ġdestination Ġis Ġnot ĠSearch ĠResults ĠFragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( destination . id Ġ!= ĠR . id . navigation _ search _ results ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View Item ?. collapse Action View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIon Application . global ExceptionHandler . un Register Curr ExceptionHandler () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ catalog _ main ) ĊĠĠĠĠĠĠĠ Ġactivity _ catalog _ main . add Gradient Background () ĊĊĠĠĠĠĠĠĠ Ġsetup Top Bar Behaviour () ĊĠĠĠĠĠĠĠ Ġsetup Bottom Bar Behaviour () ĊĠĠĠĠĠĠĠ Ġsetup Back Button () ĊĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ). setMessage ( R . string . catalog _ info _ warning ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" Ok ", Ġnull ). show () ĊĊĠĠĠĠĠĠĠ ĠviewModel . observe Root LiveData ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFetch Success < Root > Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠMainActivity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( MAIN _ ACTIVITY _ ROOT _ EXTRA , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . startActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFetch Failure < Root > Ġ-> Ġ{ Ġ// un successful Ġrequest Ġto Ġjson home ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ). setMessage ( R . string . catalog _ info _ warning ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" Ok ", Ġnull ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġa Ġcallback Ġto Ġthe Ġon Back Pressed Dispatcher Ġwhich Ġwill Ġbe Ġcalled ĊĠĠĠĠ Ġ* Ġwhen Ġthe Ġuser Ġclicks Ġthe Ġback Ġbutton . ĠThis Ġcallback Ġguarantees Ġthat ĊĠĠĠĠ Ġ* Ġwhen Ġthe Ġback Ġbutton Ġis Ġpressed Ġthe Ġnavigation Ġcontroller Ġnavig ates ĊĠĠĠĠ Ġ* Ġto Ġthe Ġprevious Ġdestination . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Source Locked Orientation Activity ") ĊĠĠĠ Ġprivate Ġfun Ġsetup Back Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġon Back Pressed Dispatcher . add Callback ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate Up () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠ ĠThis Ġensures Ġthat Ġif Ġthe Ġuser Ġclicks Ġthe Ġback Ġbutton Ġfrom Ġandroid Ġinstead Ġof ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe Ġback Ġbutton Ġinside Ġthe Ġschedule Ġfragment , Ġthe Ġtop Ġbar Ġand Ġbottom Ġbar ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġare Ġadded Ġagain . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Bar Ġ= Ġsupport ActionBar ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Bar Ġ!= Ġnull Ġ&& Ġ! action Bar . is Showing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Bar . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatalog _ bottom nav view _ main ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequested Orientation Ġ= ĠActivity Info . SCREEN _ OR IENTATION _ POR TRA IT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġis Ġcalled Ġwhenever Ġthe Ġuser Ġch oo ses Ġto Ġnavigate ĠUp Ġwithin Ġyour ĊĠĠĠĠ Ġ* Ġapplication 's Ġactivity Ġhierarchy Ġfrom Ġthe Ġaction Ġbar . ĊĠĠĠĠ Ġ* ĠWe Ġmust Ġoverride Ġit Ġbecause Ġwe Ġremoved Ġthe Ġdefault Ġaction Ġbar Ġfrom Ġthe Ġapplication ĊĠĠĠĠ Ġ* Ġand Ġadded Ġour Ġown Ġcustom Ġtoolbar . ĊĠĠĠĠ Ġ* ĠThe Ġmethod Ġon Back Pressed () Ġcalls Ġthe Ġcallbacks Ġadded Ġto Ġthe Ġon Back Pressed Disp acher ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Support Navigate Up (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġon Back Pressed () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . catalog _ top _ bar , Ġmenu ) ĊĊĠĠĠĠĠĠĠ Ġval Ġno Connectivity Ġ= Ġmenu . find Item ( R . id . no _ connection _ action ) ĊĊĠĠĠĠĠĠĠ Ġthis . search View Item Ġ= Ġmenu . find Item ( R . id . catalog _ action _ search ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsearch View Ġ= Ġsearch View Item ?. action View Ġas ? ĠSearch View ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠOnly Ġhave Ġthe Ġsearch Ġbar Ġvisible Ġif Ġthe Ġexam Ġschedule Ġfragment Ġis Ġvisible ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . catalog _ action _ search ). isVisible Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . find Fragment ById ( R . id . catalog _ exam _ schedule )?. isVisible Ġ== Ġtrue ĊĊĠĠĠĠĠĠĠ Ġsearch View ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Submit Button Enabled Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Query Text Listener ( object Ġ: ĠSearch View . On Query Text Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( new Text : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared ViewModel . set Search Text ( new Text Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠWhen Ġthe Ġuser Ġclicks Ġthe Ġno Ġconnection Ġbutton , Ġwe Ġtry Ġto Ġreach Ġthe ĠAPI Ġagain ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġno Connectivity . setOn MenuItem ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Json Home ( URI ( remote Config Repository . preferences . get WebApi Host ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe ĠTop Ġbar Ġas Ġa Ġcustom Ġtoolbar Ġespec ified Ġin Ġthe Ġres / layout / toolbar Ġlayout Ġfile ĊĠĠĠĠ Ġ* ĠEnables Ġthe Ġback Ġbutton Ġon Ġthe Ġtop Ġbar ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsetup Top Bar Behaviour () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSets Ġup Ġthe Ġtop Ġaction Ġbar Ġas Ġa Ġcustom Ġtoolbar ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( catalog _ toolbar _ main Ġas ĠToolbar ?) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġback Ġbutton Ġsupport ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Bottom Bar Behaviour () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠPass ing Ġeach Ġmenu ĠID Ġas Ġa Ġset Ġof ĠI ds Ġbecause Ġeach ĊĠĠĠĠĠĠĠĠ Ġ* Ġmenu Ġshould Ġbe Ġconsidered Ġas Ġtop Ġlevel Ġdest inations . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġapp Bar Configuration Ġ= ĠApp Bar Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . catalog _ program mes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . catalog _ Info ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠEns ures Ġthe Ġtitle Ġin Ġthe Ġaction Ġbar Ġis Ġupdated Ġaccording Ġto Ġthe Ġselected Ġitem ĊĠĠĠĠĠĠĠĠ Ġ* Ġin Ġthe Ġbottom Ġnavigation Ġbar ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġsetup ActionBar With Nav Controller ( nav Controller , Ġapp Bar Configuration ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSets Ġup Ġan Ġ{@ link ĠOn Destination Changed Listener } Ġon Ġthe Ġ{@ link ĠBottom Navigation View } Ġfor ĊĠĠĠĠĠĠĠĠ Ġ* Ġuse Ġwith Ġa Ġ{@ link ĠNav Controller }. ĠThis Ġwill Ġcall ĊĠĠĠĠĠĠĠĠ Ġ* Ġ{@ link Ġ# on Nav Destination Selected ( MenuItem , ĠNav Controller )} Ġwhen Ġa Ġmenu Ġitem Ġis Ġselected . ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġselected Ġitem Ġin Ġthe ĠBottom Navigation View Ġwill Ġautomatically Ġbe Ġupdated Ġwhen Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġdestination Ġchanges . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġcatalog _ bottom nav view _ main . setup With Nav Controller ( nav Controller ) ĊĠĠĠ Ġ} Ċ }