package Ġcom . example . android . polit ical prepared ness . ui . represent ative Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . location . Geo coder Ċ import Ġandroid . location . Location Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroidx . constraint layout . motion . widget . Debug . getLocation Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . example . android . polit ical prepared ness . Build Config Ċ import Ġcom . example . android . polit ical prepared ness . database . E lection Database Ċ 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 . repository . Polit ical Prepared ness Repository Ċ import Ġcom . example . android . polit ical prepared ness . ui . represent ative . adapter . Represent ative ListAdapter Ċ import Ġcom . example . android . polit ical prepared ness . ui . represent ative . adapter . Represent ative Listener Ċ import Ġcom . google . android . gms . location . F used Location Provider Client Ċ import Ġcom . google . android . gms . location . Location Services Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġjava . util .* Ċ Ċ class ĠDetail Fragment Ġ: ĠFragment (), ĠRepresent ative Listener Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// DONE : ĠAdd ĠConstant Ġfor ĠLocation Ġrequest ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠREQUEST _ CODE _ LOCATION _ PERMISSION Ġ= Ġ 1 ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġf used Location Provider Client : ĠF used Location Provider Client ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Represent ative Binding ĊĠĠĠ Ġ// DONE : ĠDeclare ĠViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠRepresent ative ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠRepresent ative ListAdapter ĊĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġdatabase Ġ= ĠE lection Database . getInstance ( require Context ()) ĊĠĠĠĠĠĠĠ Ġval Ġrepresentative ViewModel Factory Ġ= ĠRepresent ative ViewModel Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPol it ical Prepared ness Repository ( database ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// DONE : ĠEst ablish Ġbindings ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Represent ative Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġthis ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( this , Ġrepresentative ViewModel Factory ). get ( Represent ative ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= ĠviewModel ĊĊĠĠĠĠĠĠĠ Ġ// DONE : ĠDefine Ġand Ġassign ĠRepresent ative Ġadapter ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠRepresent ative ListAdapter ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . rv Represent atives . adapter Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠ Ġ// DONE : ĠPopulate ĠRepresent ative Ġadapter ĊĠĠĠĠĠĠĠ ĠviewModel . represent atives . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit List ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĊĠĠĠĠĠĠĠ ĠviewModel . address . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Represent atives ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// DONE : ĠEst ablish Ġbutton Ġlisteners Ġfor Ġfield Ġand Ġlocation Ġsearch ĊĊĠĠĠĠĠĠĠ Ġbinding . button Location . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Location Permissions ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetCurrent Location () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . button Search . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Line 1 Ġ= Ġbinding . address Line 1 . text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Line 2 Ġ= Ġbinding . address Line 2 . text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġbinding . state . getItem At Position ( binding . state . selected Item Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcity Ġ= Ġbinding . city . text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġzip Ġ= Ġbinding . zip . text ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġ"$ address Line 2 Ġ$ address Line 1 , Ġ$ city , Ġ$ state , Ġ$ zip " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Represent atives ( address ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < out ĠString >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ Ġ// DONE : ĠHandle Ġlocation Ġpermission Ġresult Ġto Ġget Ġlocation Ġon Ġpermission Ġgranted ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ CODE _ LOCATION _ PERMISSION Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results . isNotEmpty () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Location () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( require View (), Ġ" You Ġneed ĠPermission !", ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction (" Settings ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠSettings . ACTION _ APPLICATION _ DETAILS _ SETTINGS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠUri . from Parts (" package ", ĠBuild Config . APPLICATION _ ID , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġprivate Ġfun Ġcheck Location Permissions (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Permission Granted ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( array Of ( Manifest . permission . ACCESS _ F INE _ LOCATION ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE _ LOCATION _ PERMISSION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Permission Granted () Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// DONE : ĠCheck Ġif Ġpermission Ġis Ġalready Ġgranted Ġand Ġreturn Ġ( true Ġ= Ġgranted , Ġfalse Ġ= Ġdenied / other ) ĊĠĠĠĠĠĠĠ Ġreturn ĠContext Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġprivate Ġfun ĠgetCurrent Location () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Location Permissions ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// DONE : ĠThe Ġgeo Code Location Ġmethod Ġis Ġa Ġhelper Ġfunction Ġto Ġchange Ġthe Ġlat / long Ġlocation Ġto Ġa Ġhuman Ġreadable Ġstreet Ġaddress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocation Services . getF used Location Provider Client ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. last Location . add On Success Listener Ġ{ Ġlocation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . getAddress ( geo Code Location ( location )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Represent atives ( viewModel . address . value . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( array Of ( Manifest . permission . ACCESS _ F INE _ LOCATION ), ĠREQUEST _ CODE _ LOCATION _ PERMISSION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSecurity Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( require View (), Ġ" Permission ĠDen ied ", ĠSn ackbar . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġ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 Ġhide Keyboard () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimm Ġ= Ġactivity ?. getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠĠĠĠĠ Ġimm . hide Soft Input From Window ( view !!. window Token , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnavigate To Browser ( url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW , ĠUri . parse ( url )) ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠ Ġ} ĊĊĊ Ċ }