package Ġcom . example . android . polit ical prepared ness . represent ative Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Sender Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . location . Geo coder Ċ import Ġandroid . location . Location Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . widget . Spinner Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . activity . result . Intent Sender Request Ċ import Ġandroidx . activity . result . contract . Activity Result Contracts Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . example . android . polit ical prepared ness . R Ċ import Ġcom . example . android . polit ical prepared ness . data . Result Ċ import Ġcom . example . android . polit ical prepared ness . databinding . Fragment Represent ative Binding Ċ import Ġcom . example . android . polit ical prepared ness . network . models . Address Ċ import Ġcom . example . android . polit ical prepared ness . represent ative . adapter . Represent ative ListAdapter Ċ import Ġcom . example . android . polit ical prepared ness . util . Internet Connection Ċ import Ġcom . google . android . gms . common . api . Res olvable ApiException Ċ import Ġcom . google . android . gms . location . Location Request Ċ import Ġcom . google . android . gms . location . Location Services Ċ import Ġcom . google . android . gms . location . Location Settings Request Ċ import Ġcom . google . android . gms . tasks . CancellationToken Source Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel Ċ import Ġjava . util .* Ċ Ċ class ĠRepresent ative Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠRepresent ative ViewModel Ġby ĠviewModel () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Represent ative Binding ĊĊĠĠĠ Ġprivate Ġval Ġrequest Foreground Location Permission Launcher Ġ= Ġregister For Activity Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Result Contracts . Request Permission ()) Ġ{ Ġis Granted Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( is Granted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Represent atives With Device Location () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( binding . root , ĠgetString ( R . string . sn ackbar _ permission _ den ied ), ĠSn ackbar . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġrequest Location Settings Launcher Ġ= Ġregister For Activity Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Result Contracts . Start Intent Sender For Result ()) Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( result . result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Represent atives With Device Location ( true ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast No Location () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView Ġ{ ĊĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Represent ative Binding . inflate ( in flater ) ĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= ĠviewModel ĊĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠRepresent ative ListAdapter () ĊĊĠĠĠĠĠĠĠ Ġbinding . represent atives List . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . layout Manager Ġ= ĠLinearLayoutManager ( require Context ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . represent atives . observe ( view Lifecycle Owner , Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit List ( result . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . represent ative ProgressBar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . represent ative ProgressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), ĠgetString ( R . string . represent atives _ not _ found ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . represent ative ProgressBar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġbinding . button Search . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Represent atives With Entered Data () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . button Use My Location . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Represent atives With Device Location () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġload Represent atives With Entered Data () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . set Address ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . address Line 1 . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . address Line 2 . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . city . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . state . item Or Not Selected (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . zip . text . toString () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! viewModel . is Address Valid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), ĠgetString ( R . string . represent ative _ address _ not _ valid ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Internet Connection . isConnected ( require Context ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . load Represent atives () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast No Internet Connection () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Represent atives With Device Location ( is Location On : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Permission Granted ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Location Permission () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Location On ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Location Settings () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Internet Connection . isConnected ( require Context ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Location And Load Represent atives () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast No Internet Connection () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Location Permission () Ġ{ ĊĠĠĠĠĠĠĠ Ġrequest Foreground Location Permission Launcher ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch ( Manifest . permission . ACCESS _ F INE _ LOCATION ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Permission Granted (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPackage Manager . PERMISSION _ GRAN TED Ġ== ĠContext Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĠManifest . permission . ACCESS _ F INE _ LOCATION ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Location Settings () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation Request Ġ= ĠLocation Request . create (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpriority Ġ= ĠLocation Request . PRIORITY _ BAL ANCED _ POWER _ AC CUR ACY ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠLocation Settings Request . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Location Request ( location Request ) ĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠLocation Services . get Settings Client ( require Context ()) ĊĠĠĠĠĠĠĠ Ġval Ġtask Ġ= Ġclient . check Location Settings ( builder . build ()) ĊĊĠĠĠĠĠĠĠ Ġtask . add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Represent atives With Device Location ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtask . add On Failure Listener Ġ{ Ġexception Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( exception Ġis ĠRes olvable ApiException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Sender Request Ġ= ĠIntent Sender Request . Builder ( exception . resolution ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Location Settings Launcher . launch ( intent Sender Request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( send Ex : ĠIntent Sender . Send Intent Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġignore ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġprivate Ġfun Ġget Location And Load Represent atives () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠShow Ġa Ġloading Ġindicator Ġwhile Ġgetting Ġlocation ĊĠĠĠĠĠĠĠ ĠviewModel . set Loading State () ĊĊĠĠĠĠĠĠĠ Ġval Ġf used Location Provider Client Ġ= ĠLocation Services . getF used Location Provider Client ( require Context ()) ĊĠĠĠĠĠĠĠ Ġf used Location Provider Client . getCurrent Location ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocation Request . PRIORITY _ BAL ANCED _ POWER _ AC CUR ACY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCancellationToken Source (). token ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ Ġlocation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( location Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġgeo Code Location ( location ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . set Address ( address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . load Represent atives () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast No Location () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . setError State () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast No Location () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . setError State () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgeo Code Location ( location : ĠLocation ): ĠAddress Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgeo coder Ġ= ĠGeo coder ( context , ĠLocale . getDefault ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġgeo coder . get From Location ( location . latitude , Ġlocation . longitude , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġaddress Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAddress ( address . th orough f are Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress . sub Th orough f are Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress . locality Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress . admin Area Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress . postal Code Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠSp inner . item Or Not Selected (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( this . selected Item Position Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . selected Item . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Keyboard () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimm Ġ= Ġactivity ?. getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠĠĠĠĠ Ġimm . hide Soft Input From Window ( require View (). window Token , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Toast No Location () Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . represent ative _ location _ not _ available ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Toast No Internet Connection () Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), ĠgetString ( R . string . error _ no _ internet _ connection ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} Ċ Ċ }