package Ġcom . ak rist ic . simple last quake Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġkotlinx . coroutines .* Ċ Ċ class ĠEarth quake ViewModel ( application : ĠApplication ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġfilter Ġ= ĠFilter Holder () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠU SG S _ REQUEST _ URL Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// earth quake . us gs . gov / fd sn ws / event / 1 / query ? format = geojson & orderby = time & limit = 1 0 0 " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠQUERY _ MAIN Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// earth quake . us gs . gov / fd sn ws / event / 1 / query ? format = geojson " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠQUERY _ ORDER _ TIME Ġ= Ġ"& orderby = time " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠQUERY _ LIMIT _ 1 0 0 Ġ= Ġ"& limit = 1 0 0 " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠQUERY _ MIN _ MAG Ġ= Ġ"& min magnitude =" ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠQUERY _ MAX RADIUS Ġ= Ġ"& max radius = 5 " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠE MSC _ QUERY _ URL Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// www . se ism ic portal . eu / fd sn ws / event / 1 / query ? format = json & limit = 1 0 0 & orderby = time " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġload Data Job : ĠJob Ġ= ĠJob () ĊĠĠĠ Ġprivate Ġval Ġui Scope Ġ= ĠCor outine Scope ( Dispatch ers . Main Ġ+ Ġload Data Job ) ĊĠĠĠ Ġval Ġ_ earth qu akes Ġ= ĠMutable LiveData < List < Earth quake ? >>() ĊĠĠĠ Ġval Ġearth qu akes : ĠLive Data < List < Earth quake ? >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ earth qu akes ĊĠĠĠ Ġval Ġ_ request Query Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġrequest Query : ĠLive Data < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ request Query ĊĊĠĠĠ Ġ/* ĠSo Ġwe Ġcan Ġadd Ġit Ġto Ġquery ĊĠĠĠ Ġ"& min magnitude = 3 " Ġexample Ġof Ġstring ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġ_ magnitude Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġmagnitude : ĠLive Data < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ magnitude ĊĊĠĠĠ Ġ// Ġlang itude Ġand Ġlongitude Ġsaved Ġin Ġstring Ġready Ġto Ġbe Ġadded Ġto Ġquery ĊĠĠĠ Ġ// "& latitude = 4 1 . 8 1 5 8 7 7 7 7 & longitude = 1 6 . 1 5 8 8 8 8 8 8 " Ġlooks Ġlike Ġthis ĊĠĠĠ Ġval Ġ_ location Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġlocation : ĠLive Data < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ location ĊĊĊĠĠĠ Ġ// for Ġshowing Ġdata Ġloader Ġand Ġhiding Ġit ĊĠĠĠ Ġval Ġ_ loading Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġloading : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ loading ĊĊĠĠĠ Ġ// location Ġswitch ĊĠĠĠ Ġval Ġ_ near _ me _ is _ on Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġnear _ me _ is _ on : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ near _ me _ is _ on ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġserver ĠAmerica ĠU SG S Ġ= Ġ 1 ĊĠĠĠ Ġserver ĠEurope ĠE MSC Ġ= Ġ 2 Ġ// default ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġ_ server Name Ġ= ĠMutable LiveData < Int >() ĊĠĠĠ Ġval Ġserver Name : ĠLive Data < Int > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ server Name ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ request Query . value Ġ= ĠU SG S _ REQUEST _ URL ĊĠĠĠĠĠĠĠ Ġ_ magnitude . value Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ_ location . value Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ_ server Name . value Ġ= Ġ 2 Ġ// default Ġis Ġset ĠEurope ĊĠĠĠĠĠĠĠ Ġ_ near _ me _ is _ on . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset Query () ĊĠĠĠĠĠĠĠ Ġget Earth qu akes () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Earth qu akes () Ġ{ ĊĠĠĠĠĠĠĠ Ġui Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ earth qu akes . value Ġ= Ġget Earth qu akes From Internet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Earth qu akes From Internet (): ĠList < Earth quake >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Utils . fetch Earth quake Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Query . value Ġ?: ĠU SG S _ REQUEST _ URL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserver Name . value Ġ?: Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Filter Changed ( filter : ĠString , Ġis Checked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . filter . update ( filter , Ġis Checked )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ magnitude . value Ġ= ĠQUERY _ MIN _ MAG Ġ+ Ġfilter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( server Name . value Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ request Query . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQUERY _ MAIN Ġ+ ĠQUERY _ ORDER _ TIME Ġ+ ĠQUERY _ LIMIT _ 1 0 0 Ġ+ Ġmagnitude . value Ġ+ Ġlocation . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( server Name . value Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ request Query . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE MSC _ QUERY _ URL Ġ+ Ġmagnitude . value Ġ+ Ġlocation . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Earth qu akes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ magnitude . value Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( server Name . value Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ request Query . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQUERY _ MAIN Ġ+ ĠQUERY _ ORDER _ TIME Ġ+ ĠQUERY _ LIMIT _ 1 0 0 Ġ+ Ġlocation . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( server Name . value Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ request Query . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE MSC _ QUERY _ URL Ġ+ Ġlocation . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Earth qu akes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon EM SC Data Changed () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ server Name . value Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġset Query () ĊĠĠĠĠĠĠĠ Ġget Earth qu akes () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon US GS Data Changed () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ server Name . value Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġset Query () ĊĠĠĠĠĠĠĠ Ġget Earth qu akes () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Location Changed ( lat : ĠString , Ġlon : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ near _ me _ is _ on . value Ġ= Ġ! near _ me _ is _ on . value !! ĊĠĠĠĠĠĠĠ Ġif Ġ( near _ me _ is _ on . value !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ location . value Ġ= Ġ"& latitude =" Ġ+ Ġlat Ġ+ Ġ"& longitude =" Ġ+ Ġlon Ġ+ ĠQUERY _ MAX RADIUS ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ location . value Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Query () ĊĠĠĠĠĠĠĠ Ġget Earth qu akes () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Query (){ ĊĠĠĠĠĠĠĠ Ġif Ġ( server Name . value Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ request Query . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQUERY _ MAIN Ġ+ ĠQUERY _ ORDER _ TIME Ġ+ ĠQUERY _ LIMIT _ 1 0 0 Ġ+ Ġmagnitude . value Ġ+ Ġlocation . value ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( server Name . value Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ request Query . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE MSC _ QUERY _ URL Ġ+ Ġmagnitude . value Ġ+ Ġlocation . value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġclass ĠFilter Holder Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Value : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠĠĠĠĠ Ġfun Ġupdate ( changed Filter : ĠString , Ġis Checked : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Value Ġ= Ġchanged Filter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( current Value Ġ== Ġchanged Filter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Value Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }