package Ġorg . ion project . android . main Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Alarm Manager Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . app . Search Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . Activity Info Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . System Clock Ċ import Ġandroid . provider . Search Recent Suggestions Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . activity . add Callback Ċ import Ġandroidx . appcompat . widget . Search View Ċ import Ġandroidx . fragment . app . Dialog Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . Nav Options Ċ 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 _ main .* Ċ import Ġkotlinx . android . synt hetic . main . toolbar _ main . toolbar _ main Ċ import Ġorg . ion project . android . Exception Handling Activity Ċ import Ġorg . ion project . android . R Ċ import Ġorg . ion project . android . Shared ViewModel Ċ import Ġorg . ion project . android . Shared ViewModel Provider Ċ import Ġorg . ion project . android . common . Ion Application Ċ import Ġorg . ion project . android . common . add Gradient Background Ċ import Ġorg . ion project . android . common . model . Root Ċ import Ġorg . ion project . android . loading . Loading Activity Ċ import Ġorg . ion project . android . search . Search Suggestions Provider Ċ import Ġorg . ion project . android . user API . Alarm Receiver Ċ Ċ const Ġval ĠMAIN _ ACTIVITY _ ROOT _ EXTRA Ġ= Ġ" MainActivity . Root . Extra " Ċ const Ġval ĠMAIN _ ACTIVITY _ ST ALE _ TOKEN _ EXTRA Ġ= Ġ" MainActivity . Token . Extra " Ċ Ċ class ĠMainActivity Ġ: ĠException Handling Activity (), ĊĠĠĠ ĠDelete Suggestions Dialog Fragment . On Delete Suggestions Dialog Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġalarm Intent : ĠIntent ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpending Intent : ĠPending Intent ĊĊĠĠĠ Ġprivate Ġvar Ġsearch View Item : ĠMenuItem ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġalarm Manager : ĠAlarm Manager ĊĊĠĠĠ Ġ/** ĊĠĠĠ ĠThis Ġflag Ġis Ġused Ġto Ġlet Ġthe ĠMain ĠActivity Ġknow Ġif Ġthe Ġuser Ġhad Ġto Ġgo Ġthrough Ġthe ĊĠĠĠ Ġauthentication Ġprocess Ġor Ġif Ġthey Ġwere Ġalready Ġlogged Ġin . ĊĊĠĠĠ ĠTrue : Ġtoken Ġwas Ġstale Ġ( ar lead y Ġlogged Ġin ) ĊĠĠĠ ĠFalse : Ġfresh Ġtoken Ġ( had Ġto Ġlogin ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġstale Token Flag : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġprivate Ġval Ġnav Controller : ĠNav Controller Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Nav Controller ( R . id . 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 () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġshared ViewModel : ĠShared ViewModel Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠShared ViewModel Provider () ĊĠĠĠĠĠĠĠ Ġ) [ Shared ViewModel :: class . java ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠMain ViewModel Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMain ViewModel Provider () ĊĠĠĠĠĠĠĠ Ġ) [ Main ViewModel :: class . java ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdelete Suggestions Dialog Fragment : ĠDelete Suggestions Dialog Fragment Ġby Ġlazy ( ĊĠĠĠĠĠĠĠ ĠLazy Thread Safety Mode . NONE ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDelete Suggestions Dialog Fragment () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġroot Ġintent Ġis Ġnull , Ġit Ġmeans Ġthe Ġapp Ġis Ġoutdated ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠCreates Ġinstances Ġof Ġthe Ġalarm Intent Ġand Ġpending Intent Ġrequired Ġfor Ġthe ĠAlarm Manager ĊĠĠĠĠ Ġ* Ġthat Ġref res hes Ġthe ĠAccess Token Ġevery Ġ 2 0 Ġminutes ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAlso Ġsync s Ġthe Ġremote Ġfavor ites Ġlist Ġwith Ġthe Ġlocal Ġfavor ites Ġlist Ġwhen Ġthe Ġapp Ġis Ġstarting Ġup ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġmain _ activity . add Gradient Background () ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġintent . get Parcelable Extra < Root >( MAIN _ ACTIVITY _ ROOT _ EXTRA ) ĊĊĠĠĠĠĠĠĠ Ġstale Token Flag Ġ= Ġintent . getBoolean Extra ( MAIN _ ACTIVITY _ ST ALE _ TOKEN _ EXTRA , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( root Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared ViewModel . root Ġ= Ġroot ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Top Bar Behaviour () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Bottom Bar Behaviour () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Back Button () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġalarm Intent Ġ= ĠIntent ( this , ĠAlarm Receiver :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpending Intent Ġ= ĠPending Intent . get Broadcast ( this , Ġ 0 , Ġalarm Intent , Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . sync Local F avorites With Remote F avorites () ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Root Ġis Ġmissing ! ĠCannot Ġload Ġmain Ġactivity Ġwithout Ġroot .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStarts Ġob serving Ġthe Ġdevice Ġconnectivity ĊĠĠĠĠ Ġ* Ġand Ġshows Ġdialog Ġwhen Ġits Ġlost ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġobserve Connectivity () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnectivity Lost Dialog Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( resources . getString ( R . string . title _ warning _ all )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( resources . getString ( R . string . label _ no _ connectivity _ main )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĊĠĠĠĠĠĠĠ ĠviewModel . observe Connectivity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnectivity Lost Dialog . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStart Ġob serving Ġthe Ġconnection Ġand Ġsetup Ġthe Ġalarm Ġfor Ġaccess Ġtoken Ġrefresh ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠCreate Ġan Ġalarm Ġmanager Ġto Ġrefresh Ġthe Ġtoken Ġevery Ġ 3 0 Ġminutes ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġobserve Connectivity () ĊĊĠĠĠĠĠĠĠ Ġalarm Manager Ġ= Ġget System Service ( Context . ALARM _ SERVICE ) Ġas ĠAlarm Manager ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSet Ġup Ġan Ġalarm Ġto Ġrefresh Ġthe Ġtoken Ġevery Ġ 2 0 Ġminutes ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġalarm Manager . set Repe ating ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlarm Manager . EL AP SED _ REAL TIME _ WAKE UP , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Clock . elapsed Realtime () Ġ+ Ġ( 3 0 Ġ* Ġ 6 0 Ġ* Ġ 1 0 0 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 3 0 Ġ* Ġ 6 0 Ġ* Ġ 1 0 0 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpending Intent ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSto ps Ġob serving Ġthe Ġdevice Ġconnectivity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ ĠIon Application . connectivity Observable . stop Ob serving () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ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 () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ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 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInstanti ates Ġthe Ġmenu ĠXML Ġfile Ġ@ menu / top _ bar _ menu . xml Ġinto Ġa ĠMenu Ġobject . ĊĠĠĠĠ Ġ* ĠConfig ures Ġthe Ġsearch Ġview Ġby Ġenabling Ġass isted Ġsearch Ġand Ġadding Ġa Ġsearch ĊĠĠĠĠ Ġ* Ġsubmit Ġbutton ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġis Ġcalled Ġby Ġthe Ġframework Ġafter ĠOn Create Ġbut Ġbefore Ġit Ġfinishes ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . top _ bar _ menu , Ġmenu ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsearch View Item Ġ= Ġmenu . find Item ( R . id . action _ search ) ĊĠĠĠĠĠĠĠ Ġval Ġdelete Suggestions Item Ġ= Ġmenu . find Item ( R . id . action _ delete _ suggestions ) ĊĠĠĠĠĠĠĠ Ġval Ġlogout Item Ġ= Ġmenu . find Item ( R . id . action _ logout ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf ĠRoot Ġdid Ġnot Ġbring Ġthe Ġsearch Uri Ġwe Ġdon 't Ġadd Ġthe Ġfunctionality ĊĠĠĠĠĠĠĠ Ġ// Ġand Ġwe Ġhide Ġall Ġthe Ġbuttons ĊĠĠĠĠĠĠĠ Ġif Ġ( shared ViewModel . root ?. search Uri Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View Item . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Suggestions Item . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe ĠSearch View Ġand Ġset Ġthe Ġsearch able Ġconfiguration . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Manager Ġ= Ġget System Service ( Context . SEARCH _ SERVICE ) Ġas ĠSearch Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . search View Item Ġ= Ġsearch View Item ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch View Ġ= Ġsearch View Item ?. action View Ġas ? ĠSearch View ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġsearch Ġmenu Ġitem Ġbehaviour ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Search able Info ( search Manager . get Search able Info ( component Name )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġsearch Ġsubmit Ġbutton ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Submit Button Enabled Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠWe Ġmust Ġre define Ġthe Ġ[ setOn Query Text Listener ] Ġin Ġorder Ġto Ġget Ġquery Ġintroduced ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġby Ġthe Ġuser Ġand Ġpass Ġit Ġto Ġthe Ġ[ SearchResults Fragment ]. ĠThis Ġis Ġa Ġfragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġresponsible Ġto Ġpresent Ġinformation Ġdepending Ġon Ġthe Ġquery . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset On Query Text Listener ( object Ġ: ĠSearch View . On Query Text Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Text Submit Behaviour ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( new Text : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠWe Ġmust Ġre define Ġthe Ġ[ setOn Suggestion Listener ] Ġin Ġorder Ġto Ġget Ġthe Ġsuggestion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġquery Ġfrom Ġthe Ġsearch Ġview Ġcursor 's Ġadapter Ġto Ġdeliver Ġit Ġto Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ[ SearchResults Fragment ]. ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset On Suggestion Listener ( object Ġ: ĠSearch View . On Suggestion Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Suggestion Select ( position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Suggestion Click ( position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġsearch View . suggestions Adapter . cursor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . moveTo Position ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuggestion : ĠString Ġ= Ġcursor . getString ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View . set Query ( suggestion , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġdelete Suggestions Ġmenu Ġitem Ġbehaviour ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Suggestions Item . setOn MenuItem ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Suggestions Dialog Fragment . show ( support FragmentManager , Ġ" Delete ĠSuggest ions ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** Ġremove Ġthe Ġuser Ġcredentials Ġand Ġredirect Ġto Ġthe Ġloading Ġactivity ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġcancel Ġthe Ġalarm Ġfor Ġtoken Ġrefresh ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġre voke Ġthe Ġaccess Ġtoken Ġin Ġthe ĠAPI ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogout Item . setOn MenuItem ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ). setMessage ( R . string . are _ you _ sure _ logout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" Ok ") Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalarm Manager . cancel ( pending Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . revoke AccessToken () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIon Application . preferences . save AccessToken ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIon Application . preferences . save RefreshToken ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠLoading Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . startActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġuser Ġsubmit s Ġa Ġsearch . ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġexists Ġbecause Ġotherwise ĠonCreate Options Menu ĊĠĠĠĠ Ġ* Ġbecomes Ġtoo Ġlarge Ġand Ġlo ses Ġleg ibility . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġquery ĠThe Ġquery Ġto Ġsearch ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġquery Text Submit Behaviour ( query : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurr Destination Ġ= Ġnav Controller . current Destination ?. id ĊĠĠĠĠĠĠĠ Ġif Ġ( curr Destination Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( curr Destination Ġ!= ĠR . id . navigation _ search _ results ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ ĠNavig ating Ġto Ġthe ĠSearch Results Fragment Ġand Ġensuring ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġthat Ġwhen Ġthe Ġuser Ġp resses Ġthe Ġback Ġbutton Ġit Ġreturns Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġthe Ġdestination Ġfrom Ġwhich Ġsearch Ġwas Ġcalled . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . navigation _ search _ results , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNav Options . Builder (). set Pop Up To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurr Destination , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPass ing Ġquery Ġtext Ġto Ġ[ SearchResults Fragment ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared ViewModel . set Search Text ( query ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠWhen Ġthis Ġmethod Ġis Ġcalled Ġthe Ġback stack Ġis Ġnever Ġempty Ġbecause Ġwe Ġalways Ġhave Ġa Ġfragment Ġon Ġdisplay ĊĠĠĠĠĠĠĠĠ Ġ* Ġwithin Ġthe Ġnav _ host . ĠIn Ġthe Ġworst Ġcase Ġonly Ġthe Ġhome Ġfragment Ġis Ġin Ġthe Ġstack . ĠThis Ġmeans Ġthat Ġif Ġthis Ġexception ĊĠĠĠĠĠĠĠĠ Ġ* Ġis Ġthrown Ġsomething Ġreally Ġbad Ġmust Ġhave Ġhappened . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Navigation Ġback Ġstack Ġis Ġempty !") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ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 ( toolbar _ main ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġback Ġbutton Ġsupport ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠEns ures Ġthat Ġthe Ġbuttons Ġin Ġthe Ġbottom Ġnavigation Ġview Ġwork Ġwith Ġthe Ġnavigation Ġcontroller ĊĠĠĠĠ Ġ* Ġ Ġso Ġthat Ġwhen Ġan Ġitem Ġis Ġselected Ġthe Ġfragment Ġcontainer Ġis Ġupdated Ġwith Ġthe Ġaccording ĊĠĠĠĠ Ġ* Ġ Ġdestination Ġfrom Ġthe Ġnavigation Ġgraph . ĠIt Ġalso Ġguarantees Ġthat Ġthe Ġtitle Ġin Ġthe Ġaction ĊĠĠĠĠ Ġ* Ġ Ġbar Ġis Ġupdated Ġwith Ġthe Ġname Ġof Ġthe Ġselected Ġbottom Ġbar Ġitem . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ ĠNote Ġ: ĠThe Ġcode Ġinside Ġthis Ġmethod Ġcame Ġwith Ġthe Ġtemplate Ġactivity Ġwith Ġbottom Ġnavigation ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġ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 . navigation _ favorites , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . navigation _ home , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . navigation _ schedule ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ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 . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġbottom nav view _ main . setup With Nav Controller ( nav Controller ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIf Ġuser Ġwants Ġto Ġdelete Ġall Ġsearch Ġsuggestions , Ġthis Ġmethod Ġwill Ġbe Ġcalled . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Confirm Listener ( dialog : ĠDialog Fragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDelete Ġall Ġrecent Ġsuggestion Ġqueries ĊĠĠĠĠĠĠĠ ĠSearch Recent Suggestions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Suggestions Provider . AUTH ORITY , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Suggestions Provider . MODE ĊĠĠĠĠĠĠĠ Ġ). clear History () ĊĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . toast _ search _ suggestions _ deleted _ message _ main ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} Ċ Ċ } Ċ