package Ġdev . max si om in . lib pass . activity Ċ Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġandroidx . fragment . app . Dialog Fragment Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġcom . google . firebase . analytics . Firebase Analytics Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġdev . max si om in . lib pass . AP K _ LOCATION Ċ import Ġdev . max si om in . lib pass . Build Config Ċ import Ġdev . max si om in . lib pass . R Ċ import Ġdev . max si om in . lib pass . extensions . open In Browser Ċ import Ġdev . max si om in . lib pass . util . Shared Prefs Config . DATE _ UPDATE _ SU G GEST ED Ċ import Ġjava . time . LocalDate Ċ import Ġjavax . inject . Inject Ċ Ċ @ Android EntryPoint Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠUp dater Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġanalytics : ĠFirebase Analytics ĊĊĠĠĠ Ġprivate Ġval Ġm ViewModel Ġby Ġview Models < Main ViewModel >() ĊĊĠĠĠ Ġprivate Ġval Ġnav Controller : ĠNav Controller Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Nav Controller ( R . id . fragment Container ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġm ViewModel . check For Updates Ġ{ Ġlatest Version Name Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuggest Updating ( latest Version Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . overflow _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . my _ lib passes Ġ-> Ġgo To My Lib passes () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . info Ġ-> Ġgo To Info () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . settings Ġ-> Ġgo To Settings () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . export Ġ-> Ġgo To Export () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . import _ fragment Ġ-> Ġgo To Import () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgo To My Lib passes () Ġ{ ĊĠĠĠĠĠĠĠ Ġnav Controller . navigate ( R . id . passes Fragment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgo To Info () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( nav Controller . current Destination !!. id Ġ== ĠR . id . info Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġnav Controller . navigate ( R . id . info Fragment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgo To Settings () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( nav Controller . current Destination !!. id Ġ== ĠR . id . settings Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġnav Controller . navigate ( R . id . settings Fragment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgo To Export () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( nav Controller . current Destination !!. id Ġ== ĠR . id . export Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġnav Controller . navigate ( R . id . export Fragment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgo To Import () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( nav Controller . current Destination !!. id Ġ== ĠR . id . import Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġnav Controller . navigate ( R . id . import Fragment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsuggest Updating ( latest Version Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSave Ġwhen Ġupdate Ġwas Ġsuggested Ġlast Ġtime ĊĠĠĠĠĠĠĠ Ġm ViewModel . shared Prefs . edit (). putString ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDATE _ UPDATE _ SU G GEST ED , ĠLocalDate . now (). toString () ĊĠĠĠĠĠĠĠ Ġ). apply () ĊĊĠĠĠĠĠĠĠ ĠUpdate Dialog . newInstance ( latest Version Name ). show ( support FragmentManager ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOpen s Ġdirect Ġuri Ġto Ġ. apk Ġin Ġbrowser . Ġ. apk Ġshould Ġbe Ġautomatically Ġdownloaded ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġopen In Browser ( AP K _ LOCATION ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠUpdate Dialog Ġ: ĠDialog Fragment () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġupdater Ġget () Ġ= Ġrequire Activity () Ġas ĠUp dater ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate Dialog ( savedInstanceState : ĠBundle ?): ĠDialog Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Version Name Ġ= ĠBuild Config . VERSION _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlatest Version Name Ġ= Ġrequire Arguments (). getString ( LATE ST _ VERSION _ NAME ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠDialog Builder ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( getString ( R . string . update _ app , Ġcurrent Version Name , Ġlatest Version Name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( R . string . no _ thanks ) Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . update ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdater . update () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . set Canceled On Touch Outside ( false ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdialog ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġshow ( manager : ĠFragment Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow ( manager , ĠTAG ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" Update Dialog " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĠKey Ġfor Ġargs Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠL ATE ST _ VERSION _ NAME Ġ= Ġ" latest Version " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠPut s Ġ[ latest Version Name ] Ġto Ġargs ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( latest Version Name : ĠString ) Ġ= ĠUpdate Dialog (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= Ġbundle Of ( LATE ST _ VERSION _ NAME Ġto Ġlatest Version Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ type alias ĠDialog Builder Ġ= ĠAlertDialog . Builder Ċ Ċ interface ĠUp dater Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġuser Ġsubmit s Ġthey 'd Ġlike Ġto Ġupdate ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupdate () Ċ } Ċ