package Ġfm . per em en . android Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġfm . per em en . android . databinding . Activity Main Binding Ċ import Ġfm . per em en . android . utils . has G ps Permission Ċ import Ġfm . per em en . android . utils . is G ps Explanation Shown Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġview Models < Main ViewModel >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠData Binding Util . set ContentView < Activity Main Binding >( this , ĠR . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= ĠviewModel ĊĠĠĠĠĠĠĠ Ġbinding . button View . setOnClickListener Ġ{ ĠviewModel . on Button Click () Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . button Share . setOnClickListener Ġ{ Ġshare () Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . button Info . setOnClickListener Ġ{ Ġshow Info Dialog () Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġensure Location Permission () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshare () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Link Ġ= ĠgetString ( R . string . share _ link ) ĊĠĠĠĠĠĠĠ Ġval Ġmessage Text Ġ= ĠgetString ( R . string . share _ text , Ġmessage Link ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsend Intent : ĠIntent Ġ= ĠIntent (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠIntent . ACTION _ SEND ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( Intent . EXTRA _ TEXT , Ġmessage Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" text / plain " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġshare Intent Ġ= ĠIntent . create Chooser ( send Intent , Ġnull ) ĊĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĠstartActivity ( share Intent ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Info Dialog () Ġ{ ĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . dialog _ info _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( R . layout . dialog _ info ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġensure Location Permission () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has G ps Permission ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġshared Preferences Ġ= ĠPreference Manager . getDefault SharedPreferences ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġis G ps Explanation Shown Ġ= Ġshared Preferences . is G ps Explanation Shown ĊĠĠĠĠĠĠĠ Ġval Ġshould Show Request Permission R ationale Ġ= Ġshould Show Request Permission R ationale ( Manifest . permission . ACCESS _ F INE _ LOCATION ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! is G ps Explanation Shown Ġ|| Ġshould Show Request Permission R ationale ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocation Permission Explanation Dialog (). show ( support FragmentManager , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . is G ps Explanation Shown Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrequest Permissions ( array Of ( Manifest . permission . ACCESS _ F INE _ LOCATION ), Ġ 0 ) ĊĠĠĠ Ġ} Ċ } Ċ