/* Ċ Licensed Ġto Ġthe ĠApache ĠSoftware ĠFoundation Ġ( ASF ) Ġunder Ġone ĊĠ Ġor Ġmore Ġcontributor Ġlicense Ġagreements . Ġ ĠSee Ġthe ĠNOTICE Ġfile ĊĠ Ġdistributed Ġwith Ġthis Ġwork Ġfor Ġadditional Ġinformation ĊĠ Ġregarding Ġcopyright Ġownership . Ġ ĠThe ĠASF Ġlicenses Ġthis Ġfile ĊĠ Ġto Ġyou Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the ĊĠ Ġ" License "); Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance ĊĠ Ġwith Ġthe ĠLicense . Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat ĊĊĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 ĊĊĠ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , ĊĠ Ġsoftware Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan ĊĠ Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĊĠ ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe ĊĠ Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations ĊĠ Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . example . bump ify Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . preference . Preference Manager Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . example . bump ify . repository . Repository Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . annotations . SerializedName Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . os md roid . config . Configuration .* Ċ import Ġorg . os md roid . tile provider . tile source . Tile Source Factory Ċ import Ġorg . os md roid . util . Geo Point Ċ import Ġorg . os md roid . views . MapView Ċ import Ġorg . os md roid . views . overlay . Marker Ċ import Ġorg . os md roid . views . overlay . my location . G ps My Location Provider Ċ import Ġorg . os md roid . views . overlay . my location . My Location New Overlay Ċ import Ġjava . io . File Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . time . DayOfWeek Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjava . util .* ĊĊ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġval ĠF INE _ LOCATION _ PERMISSION S _ CODE Ġ= Ġ 3 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmap Ġ: ĠMap View ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Location Overlay : ĠMy Location New Overlay ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrunnable : ĠRunnable ĊĠĠĠ Ġprivate Ġvar Ġflag Ġ= Ġtrue Ġ// Se Ġoc up a Ġpara Ġinter r ump ir Ġlas Ġllam adas Ġa Ġla ĠAPI Ġcuando Ġse Ġde see . ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrunnable B linking : ĠRunnable ĊĠĠĠ Ġprivate Ġvar Ġcolor String : ĠString Ġ= Ġ" FFFFFF " ĊĠĠĠ Ġprivate Ġval Ġtypes Ġ Ġ= ĠarrayOf (" As al to "," B ache "," Ob st Ã¡c ulo "," A ses in ato "," Cho que ") Ġ// Se Ġoc up a Ġpara Ġacc eder Ġa Ġlos Ġnom bres Ġde Ġlos Ġeventos ĠmÃ¡s ĠfÃ¡ cil mente ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠMain ViewModel ĊĊĠĠĠ Ġ// Mode los Ġdon de Ġse Ġguard an Ġlos Ġdatos Ġresult antes Ġde Ġlas Ġllam adas Ġa Ġla ĠAPI ĊĠĠĠ Ġdata Ġclass ĠReq (@ SerializedName (" data ") Ġval Ġdata : ĠArray < Point >, @ SerializedName (" danger Level ") Ġval Ġdanger : ĠDouble ) ĊĠĠĠ Ġdata Ġclass ĠPoint (@ SerializedName (" coords ") Ġval Ġco or : ĠArray < Double >, @ SerializedName (" type ") Ġval Ġtype : ĠInt ,@ SerializedName (" desc ") Ġval Ġdesc : ĠString ,@ SerializedName (" date ") Ġval Ġdate : ĠDate ,@ SerializedName (" votes Num ") Ġval Ġvotes : ĠInt ) ĊĊĠĠĠ Ġ// Cre a Ġel Ġmenu Ġ" 3 Ġdot Ġoptions " Ġpara Ġpoder Ġhacer Ġlog Ġout Ġen Ġla ĠaplicaciÃ³n ĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Func ion Ġque Ġse Ġinicial iza Ġal Ġseleccion ar Ġuna Ġop ciÃ³n Ġdel Ġmen Ãº Ġde Ġ 3 Ġpunto s . ĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid : ĠInt Ġ= Ġitem . getItem Id () ĊĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== ĠR . id . logout _ menu ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflag = false ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ToFile () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠLog In Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . finish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// Ver ific aciÃ³n Ġde Ġlos Ġper misos Ġantes Ġque Ġse Ġc ree Ġel Ġmap a ĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . READ _ EXTERNAL _ STORAGE ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" You Ġhave Ġalready Ġgranted Ġthis Ġpermission !", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ). show (); ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Location Permission (); ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// C argar Ġla ĠconfiguraciÃ³n Ġinicial Ġde Ġos md roid ĊĠĠĠĠĠĠĠ ĠgetInstance (). load ( this , ĠPreference Manager . getDefault SharedPreferences ( this )) ĊĊĠĠĠĠĠĠĠ Ġ// Cre ar Ġel Ġmap a ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( findViewById ( R . id . my Toolbar )) ĊĊĊĠĠĠĠĠĠĠ Ġ// Configur aciones Ġdel Ġmap a ĊĠĠĠĠĠĠĠ Ġmap Ġ= ĠfindViewById < MapView >( R . id . map ) ĊĠĠĠĠĠĠĠ Ġmap . min Zoom Level Ġ= Ġ 1 6 . 0 ĊĠĠĠĠĠĠĠ Ġmap . max Zoom Level Ġ= Ġ 1 8 . 0 ĊĠĠĠĠĠĠĠ Ġmap . set Tile Source ( Tile Source Factory . MAP NI K ) ĊĠĠĠĠĠĠĠ Ġmap . set Multi Touch Controls ( true ) ĊĊĠĠĠĠĠĠĠ Ġ// Ob t ener Ġy Ġmostrar Ġpos iciÃ³n Ġdel Ġusuario ĊĠĠĠĠĠĠĠ Ġm Location Overlay Ġ= ĠMy Location New Overlay ( G ps My Location Provider ( application Context ), Ġmap ) ĊĠĠĠĠĠĠĠ Ġm Location Overlay . enable My Location () ĊĠĠĠĠĠĠĠ Ġm Location Overlay . enable Follow Location () ĊĠĠĠĠĠĠĠ Ġmap . overlay s . add ( m Location Overlay ) ĊĠĠĠĠĠĠĠ Ġmap . zoom To BoundingBox ( m Location Overlay . bounds , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġmap . invalidate () ĊĊĠĠĠĠĠĠĠ Ġ// Snackbar Ġque Ġa visa Ġsi Ġel Ġreport e Ġf ue Ġguard ado Ġcorrect amente . ĊĠĠĠĠĠĠĠ Ġvar Ġintent Ġ= Ġintent ĊĠĠĠĠĠĠĠ Ġif ( intent . has Extra (" mensaje ")){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġm ensaje Ġ= Ġintent . getString Extra (" mensaje ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext o Ġ= ĠfindViewById < View >( R . id . main activity container ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsn ack Ġ= ĠSn ackbar . make ( context o , Ġm ensaje . toString (), ĠSn ackbar . LENGTH _ IN DEFIN ITE ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsn ack . setAction (" A cept ar ", ĠView . OnClickListener Ġ{ Ġsn ack . dismiss () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsn ack . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPed ir Ġper misos Ġal Ġusuario Ġpara Ġusar Ġel ĠGPS Ġy Ġacc eder Ġa Ġsu Ġpos iciÃ³n . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġrequest Location Permission () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Activity Compat . should Show Request Permission R ationale ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Cre a Ġuna Ġalert a Ġde Ġdialog o Ġpara Ġpoder Ġinform ar Ġpor Ġqu Ã© Ġse Ġneces ita Ġlos Ġper misos Ġde Ġ ubic aciÃ³n ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroidx . appcompat . app . AlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Per misos Ġde Ġ ubic aciÃ³n Ġneces ario ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" Us are mos Ġtu Ġ ubic aciÃ³n Ġpara Ġpoder Ġ ubic ar Ġcorrect amente Ġlos Ġincident es Ġque Ġreport es ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" ok ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Interface . OnClickListener Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ MainActivity , ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĠF INE _ LOCATION _ PERMISSION S _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button (" cancel ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Interface . OnClickListener Ġ{ Ġdialog , Ġwhich Ġ-> Ġdialog . dismiss () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create (). show () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Manifest . permission . ACCESS _ F INE _ LOCATION ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF INE _ LOCATION _ PERMISSION S _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// Met odo Ġpara Ġgest ion ar Ġcuando Ġrec ib imos Ġel Ġresultado Ġdel Ġper miso ĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < String ? >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠF INE _ LOCATION _ PERMISSION S _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . size Ġ> Ġ 0 Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Toast . makeText ( this , Ġ" Permission ĠG RAN TED ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Permission ĠD EN IED ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSe Ġenc arga Ġde Ġhacer Ġllam adas Ġa Ġla ĠAPI Ġy Ġproces ar Ġla ĠinformaciÃ³n Ġpara Ġmostrar la Ġen Ġel Ġmap a . ĊĠĠĠĠ Ġ* ĠSe Ġh ace Ġuna Ġllam ada Ġcada Ġ 5 Ġseg und os Ġy Ġse Ġenv ÃŃa Ġla Ġpos iciÃ³n Ġactual . ĊĠĠĠĠ Ġ* ĠLa ĠAPI Ġret orna Ġtodos Ġlos Ġeventos Ġque Ġse Ġenc uent ren Ġen Ġun Ġradio Ġde Ġ 5 km Ġal re ded or Ġde Ġla Ġperson a . ĊĠĠĠĠ Ġ* ĠD ich os Ġeventos Ġse Ġcl as ific an Ġy Ġse Ġag reg an Ġcomo ĠMark ers Ġal Ġmap a . ĊĠĠĠĠ Ġ* ĠSe Ġcalcul a Ġel Ġn ivel Ġde Ġpel ig ro Ġdepend i endo Ġde Ġla Ġcantidad Ġde Ġeventos Ġpel ig ros os Ġcer can os Ġa Ġla Ġperson a . ĊĠĠĠĠ Ġ* ĠEl Ġradar Ġde Ġpel ig ro Ġtiene Ġ 5 0 0 m Ġde Ġdi Ã¡ metro . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcomp ro bar (){ ĊĊĠĠĠĠĠĠĠ Ġvar Ġm Handler B linking Ġ= ĠHandler () ĊĊĠĠĠĠĠĠĠ Ġvar Ġalpha Var Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġincr Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġview : ĠView Ġ= Ġthis . findViewById < View >( R . id . map ). root View ĊĠĠĠĠĠĠĠ Ġvar Ġr Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġg Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġb Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġvar Ġcal Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġvar Ġdate format Ġ= ĠSimpleDateFormat (" dd / MM / yyyy \ nh h : mm Ġa ") ĊĊĠĠĠĠĠĠĠ Ġ// Par p ade o Ġdel Ġcolor Ġen Ġel Ġbor de Ġdel Ġmap a Ġque Ġindic a Ġel Ġn ivel Ġde Ġpel ig ro . ĊĠĠĠĠĠĠĠ Ġ// Se Ġcamb ia Ġel Ġbr illo Ġdel Ġcolor . ĊĠĠĠĠĠĠĠ Ġrunnable B linking Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( flag ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr Ġ= Ġ"" + color String [ 0 ]+ color String [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg Ġ= Ġ"" + color String [ 2 ]+ color String [ 3 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= Ġ"" + color String [ 4 ]+ color String [ 5 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . set BackgroundColor ( Color . rgb ( r . toInt ( 1 6 )+ alpha Var , g . toInt ( 1 6 )+ alpha Var , b . toInt ( 1 6 )+ alpha Var )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( incr ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalpha Var Ġ+= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( alpha Var Ġ>= Ġ 3 0 ) Ġincr = false ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalpha Var Ġ-= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( alpha Var Ġ<= Ġ 0 ) Ġincr = true ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler B linking . post Delayed ( run nable B linking , 1 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Handler B linking . post Delayed ( run nable B linking , 1 0 0 L ) ĊĊĠĠĠĠĠĠĠ Ġ// Cre aciÃ³n Ġde Ġlos Ġobjetos Ġde ĠRet rofit ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRepository () ĊĠĠĠĠĠĠĠ Ġval ĠviewModel Factory Ġ= ĠMain ViewModel Factory ( repository ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( this , ĠviewModel Factory ). get ( Main ViewModel :: class . java ) ĊĊĊĠĠĠĠĠĠĠ Ġ// L lam ada Ġa Ġla ĠAPI Ġcada Ġ 5 Ġseg und os . ĠSe Ġenv ÃŃa Ġlat itud Ġy Ġlong itud Ġactual . ĊĠĠĠĠĠĠĠ Ġvar Ġm Handler Ġ= ĠHandler () ĊĠĠĠĠĠĠĠ Ġrunnable Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( flag ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . getPost ("{ \" lat \": Ġ"+ m Location Overlay . my Location . latitude +", Ġ\" lon \": Ġ"+ m Location Overlay . my Location . longitude + "} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler . post Delayed ( run nable , 5 0 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Si Ġel Ġm Location Overlay . my Location . latitude Ġy Ġ. longitude Ġno Ġest Ã¡n Ġdentro Ġde Ġrun On First Fix Ġno Ġret orn an Ġla Ġpos iciÃ³n Ġactual . ĊĠĠĠĠĠĠĠ Ġm Location Overlay . run On First Fix ( run nable ) ĊĊĠĠĠĠĠĠĠ Ġval Ġreport btn : ĠView Ġ= ĠfindViewById ( R . id . report ) ĊĊĠĠĠĠĠĠĠ Ġ// Man e jo Ġde Ġlos Ġdatos Ġrec ib idos Ġde Ġla ĠAPI ĊĠĠĠĠĠĠĠ ĠviewModel . my Response . observe ( this , Ġ{ Ġresponse Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// La Ġresp uesta Ġde Ġla ĠAPI Ġse Ġguard a Ġen Ġel Ġmodelo Ġdefin ido Ġal Ġinicio Ġdel Ġarchivo . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoints : ĠReq Ġ= ĠGson (). fromJson ( response . points , ĠReq :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextView : ĠTextView Ġ= ĠfindViewById ( R . id . tv _ danger ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// C Ã¡ lc ulo Ġdel Ġn ivel Ġde Ġpel ig ro ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( points . danger Ġ<= Ġ 2 . 0 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġ" SE GU RO " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setTextColor ( Color . parse Color ("# 0 0 6 8 c 9 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor String =" 0 0 6 8 c 9 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġif ( points . danger Ġ> Ġ 2 . 0 0 Ġ&& Ġpoints . danger Ġ<= Ġ 5 . 0 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġ" MAY OR MENT E ĠSE GU RO " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setTextColor ( Color . parse Color ("# 0 0 a 3 3 6 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor String =" 0 0 a 3 3 6 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġif ( points . danger Ġ> Ġ 5 . 0 0 Ġ&& Ġpoints . danger Ġ<= Ġ 8 . 0 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġ" MO DER ADO " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setTextColor ( Color . parse Color ("# e 6 da 0 0 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor String =" e 6 da 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġif ( points . danger Ġ> Ġ 8 . 0 0 Ġ&& Ġpoints . danger Ġ<= Ġ 1 1 . 0 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġ" PO CO ĠSE GU RO " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setTextColor ( Color . parse Color ("# e 0 6 c 0 0 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor String =" e 0 6 c 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġif ( points . danger Ġ> Ġ 1 1 . 0 0 Ġ&& Ġpoints . danger Ġ<= Ġ 1 6 . 0 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġ" IN SE GU RO " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setTextColor ( Color . parse Color ("# c 4 0 7 0 0 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor String =" c 4 0 7 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġif ( points . danger Ġ> Ġ 1 6 . 0 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġ" BU ZO ĠQ UE ĠSE ĠM U ERE " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setTextColor ( Color . parse Color ("# 4 0 0 9 0 9 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor String =" 4 0 0 9 0 9 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Se Ġbor ran Ġlos Ġmarkers Ġcon Ġcada Ġllam ada Ġusando Ġsu ĠID . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . overlay s . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠMarker Ġ&& Ġit . id Ġ== Ġ" Marker ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . overlay s . remove ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Se Ġco loc an Ġlos ĠMark ers Ġnue v os Ġy Ġse Ġag reg an Ġlos ĠÃŃ con os Ġcustom izados . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( p Ġin Ġpoints . data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmarker Ġ= ĠMarker ( map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarker . position Ġ= ĠGeo Point ( p . co or [ 1 ], Ġp . co or [ 0 ]) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( p . type ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġmarker . icon Ġ= ĠContext Compat . get Drawable ( this , ĠR . mip map . lad ron _ marker ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġmarker . icon Ġ= ĠContext Compat . get Drawable ( this , ĠR . mip map . b ache _ marker ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġmarker . icon Ġ= ĠContext Compat . get Drawable ( this , ĠR . mip map . ob st ac ulo _ marker ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> Ġmarker . icon Ġ= ĠContext Compat . get Drawable ( this , ĠR . mip map . ases in ato _ marker ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 Ġ-> Ġmarker . icon Ġ= ĠContext Compat . get Drawable ( this , ĠR . mip map . cho que _ marker ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcal . time Ġ= Ġp . date ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcal . add ( Calendar . HOUR ,- 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Info Window Ġque Ġse Ġve Ġal Ġdar Ġclick Ġa Ġcada ĠMarker ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarker . title Ġ= Ġ" Ġ- Ġ"+ types [ p . type - 1 ] +" Ġ- Ġ\ n "+ Ġ( if ( p . desc . isNotEmpty ()) Ġp . desc Ġelse Ġ" Sin Ġdescri pciÃ³n ") +"\ n Ġ\ n "+ Ġdate format . format ( cal . time )+" \ n Ġ\ n V otos : Ġ"+ Ġp . votes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarker . id Ġ= Ġ" Marker " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarker . set Anchor ( Marker . AN CH OR _ CENTER , ĠMarker . AN CH OR _ BOTTOM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . overlay s . add ( marker ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! report btn . isEnabled ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport btn . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĊĠĠĠĠĠĠĠ Ġ// this Ġwill Ġrefresh Ġthe Ġos md roid Ġconfiguration Ġon Ġres uming . ĊĠĠĠĠĠĠĠ Ġ// if Ġyou Ġmake Ġchanges Ġto Ġthe Ġconfiguration , Ġuse ĊĠĠĠĠĠĠĠ Ġ// SharedPreferences Ġprefs Ġ= ĠPreference Manager . getDefault SharedPreferences ( this ); ĊĠĠĠĠĠĠĠ Ġ// Configuration . getInstance (). load ( this , ĠPreference Manager . getDefault SharedPreferences ( this )); ĊĠĠĠĠĠĠĠ Ġmap . on Resume () Ġ// needed Ġfor Ġcomp ass , Ġmy Ġlocation Ġoverlay s , Ġv 6 . 0 . 0 Ġand Ġup ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġ// this Ġwill Ġrefresh Ġthe Ġos md roid Ġconfiguration Ġon Ġres uming . ĊĠĠĠĠĠĠĠ Ġ// if Ġyou Ġmake Ġchanges Ġto Ġthe Ġconfiguration , Ġuse ĊĠĠĠĠĠĠĠ Ġ// SharedPreferences Ġprefs Ġ= ĠPreference Manager . getDefault SharedPreferences ( this ); ĊĠĠĠĠĠĠĠ Ġ// Configuration . getInstance (). save ( this , Ġprefs ); ĊĠĠĠĠĠĠĠ Ġmap . on Pause () Ġ Ġ// needed Ġfor Ġcomp ass , Ġmy Ġlocation Ġoverlay s , Ġv 6 . 0 . 0 Ġand Ġup ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĊĠĠĠĠĠĠĠ Ġval Ġlocation btn : ĠView Ġ= ĠfindViewById ( R . id . my location ) ĊĠĠĠĠĠĠĠ Ġval Ġreport btn : ĠView Ġ= ĠfindViewById ( R . id . report ) ĊĠĠĠĠĠĠĠ Ġreport btn . isEnabled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġflag = true ĊĠĠĠĠĠĠĠ Ġcomp ro bar () ĊĠĠĠĠĠĠĠ Ġlocation btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Location Overlay . enable Follow Location () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Location Permission () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmap . invalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĊĠĠĠĠĠĠĠ Ġflag Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAb rir ĠActivity Ġpara Ġreport ar Ġincident es . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġab rir Reporte ( v : ĠView ){ ĊĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠOptions Activity :: class . java ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" latitude ", Ġm Location Overlay . my Location . latitude ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" longitude ", Ġm Location Overlay . my Location . longitude ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠE limin ar Ġla ĠsesiÃ³n Ġactual Ġal Ġdar Ġclick Ġen Ġel Ġbot Ã³n Ġde Ġcerr ar ĠsesiÃ³n . ĊĠĠĠĠ Ġ* ĠSe Ġelim ina Ġel Ġarchivo Ġdon de Ġse Ġguard a Ġel Ġnombre Ġde Ġusuario . ĊĠĠĠĠ Ġ* ĠSe Ġcre arÃ¡ Ġuno Ġnuevo Ġal Ġvol ver Ġa Ġin iciar ĠsesiÃ³n . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġwrite ToFile () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdir Ġ= ĠFile ( files Dir , Ġ" my dir ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdir . mkdir () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" TAG ", Ġdir . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg px file old Ġ= ĠFile ( dir , Ġ" se sion . txt ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg px file old . delete () ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ