/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠK ort i Ċ Ġ* Ċ Ġ* ĠĠĠ ĠLicensed Ġ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 Ġio . k ort i . m uffle . view model Ċ Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . google . android . gms . maps . model . Circle Ċ import Ġio . k ort i . m uffle . M uffle Point Manager Ċ import Ġio . k ort i . m uffle . database . dao . M uffle Point Dao Ċ import Ġio . k ort i . m uffle . database . entity . M uffle Point Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjavax . inject . Inject Ċ import Ġkotlin . math . atan Ċ Ċ class ĠEdit M uffle Point Activity ViewModel Ġ@ Inject Ġconstructor ( private Ġval Ġm uffle Point Dao : ĠM uffle Point Dao , Ġprivate Ġval Ġm uffle Point Manager : ĠM uffle Point Manager ) Ġ: ĊĠĠĠ ĠViewModel () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠEdit M uffle Point Activity ViewModel :: class . java . simple Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġm uffle Point Ġ= ĠMutable LiveData < M uffle Point >() ĊĠĠĠ Ġval Ġmap Circle Ġ= ĠMutable LiveData < Circle >() ĊĠĠĠ Ġval Ġmap Zoom Ġ= ĠMutable LiveData < Float >() ĊĊĠĠĠ Ġfun Ġload M uffle Point ( m uffle Point Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm uffle Point Ġ= Ġm uffle Point Dao . getById ( m uffle Point Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Zoom . value Ġ= Ġget Zoom Level ( m uffle Point . radius . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Edit M uffle Point Activity ViewModel . m uffle Point . value Ġ= Ġm uffle Point ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave M uffle Point ( ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġimage : ĠBitmap , ĊĠĠĠĠĠĠĠ Ġenabled : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġring tone Volume : ĠInt , ĊĠĠĠĠĠĠĠ Ġmedia Volume : ĠInt , ĊĠĠĠĠĠĠĠ Ġnotification Volume : ĠInt , ĊĠĠĠĠĠĠĠ Ġalarm Volume : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġradius Ġ= Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġradius Ġ= Ġmap Circle . value !!. radius ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase 6 4 Image Ġ= ĠM uffle Point . bitmap To Base 6 4 ( image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm uffle Point Ġ= Ġthis @ Edit M uffle Point Activity ViewModel . m uffle Point . value ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm uffle Point ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( this . radius Ġ!= Ġradius ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . image Ġ= Ġbase 6 4 Image ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . radius Ġ= Ġradius ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( status Ġ!= ĠM uffle Point . Status . ACTIVE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( status Ġ>= ĠM uffle Point . Status . ENABLE Ġ&& Ġenabled . not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠM uffle Point . Status . DISABLED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( status Ġ== ĠM uffle Point . Status . DISABLED Ġ&& Ġenabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠM uffle Point . Status . ENABLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . name Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ring tone Volume Ġ= Ġring tone Volume ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . media Volume Ġ= Ġmedia Volume ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . notification Volume Ġ= Ġnotification Volume ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . alarm Volume Ġ= Ġalarm Volume ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m uffle Point Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( m uffle Point . status Ġ== ĠM uffle Point . Status . ACTIVE Ġ&& Ġenabled . not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Disable Ġactive Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm uffle Point Manager . enable Disable M uffle Point ( m uffle Point ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm uffle Point . status Ġ= ĠM uffle Point . Status . DISABLED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm uffle Point Dao . update ( m uffle Point ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete M uffle Point () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm uffle Point Ġ= Ġm uffle Point . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( m uffle Point Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m uffle Point . status Ġ== ĠM uffle Point . Status . ACTIVE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm uffle Point Manager . enable Disable M uffle Point ( m uffle Point ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm uffle Point Dao . delete ( m uffle Point ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Radius ( radius : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Radius Ġ= Ġradius . toDouble () Ġ+ Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġzoom Level Ġ= Ġget Zoom Level ( radius ) ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Current ĠRadius : Ġ${ map Circle . value ?. radius }, ĠCurrent ĠZoom : Ġ${ map Zoom . value }") ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Radius : Ġ$ new Radius , ĠZoom : Ġ$ zoom Level ") ĊĠĠĠĠĠĠĠ Ġmap Circle . value ?. radius Ġ= Ġnew Radius ĊĠĠĠĠĠĠĠ Ġmap Zoom . value Ġ= Ġzoom Level ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Zoom Level ( radius : ĠInt ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 1 5 F Ġ- Ġ( 2 . 2 0 1 F Ġ* Ġatan ( radius Ġ/ Ġ 4 0 0 . 0 ). toFloat ()) ĊĠĠĠ Ġ} Ċ Ċ }