/* ĊĊĠĠ ĠCopyright Ġ 2 0 1 5 ĠAnd reas ĠW Ã¼ rl ĊĊĠĠ Ġ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 Ġorg . bl itz ort ung . android . map Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . graphics . Point Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Gesture Detector Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġorg . bl itz ort ung . android . app . Main Ċ import Ġorg . bl itz ort ung . android . app . R Ċ import Ġorg . bl itz ort ung . android . app . view . Preference Key Ċ import Ġorg . bl itz ort ung . android . location . Location Handler Ċ import Ġorg . jetbrains . ank o . default SharedPreferences Ċ import Ġorg . os md roid . views . MapView ĊĊ Ċ class ĠOwn MapView ( context : ĠContext ) Ġ: ĠMap View ( context ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġgesture Detector : ĠGest ure Detector Ġ= ĠGest ure Detector ( context , ĠGest ure Listener ()) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġmin Zoom Level Ġ= Ġ 1 . 5 ĊĠĠĠĠĠĠĠ Ġmax Zoom Level Ġ= Ġ 1 5 . 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠGest ure Listener Ġ: ĠGest ure Detector . Simple On Gesture Listener () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpoint Ġ: ĠPoint Ġ= ĠPoint () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Double Tap ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Own MapView . remove View ( popup ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgeo Point Ġ= Ġthis . get Point ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Own MapView . projection . to Pixels ( geo Point , Ġpoint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontroller . zoom In Fix ing ( point . x , Ġpoint . y , ĠDEFAULT _ ZO OM _ SPEED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Point ( event : ĠMotion Event ) Ġ= Ġprojection . from Pixels ( event . x . toInt (), Ġevent . y . toInt ()) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Long Press ( event : ĠMotion Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint Ġ= Ġget Point ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlongitude Ġ= Ġpoint . longitude ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlatitude Ġ= Ġpoint . latitude ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( Main . LOG _ TAG , Ġ" Gesture Listener . on Long Press () Ġ$ point ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġthis @ Own MapView . context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Text Ġ= Ġcontext . resources . getString ( R . string . set _ manual _ location ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog ClickListener Ġ= ĠDialog Interface . OnClickListener Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( which ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Interface . BUTTON _ POSITIVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreferences Ġ= Ġcontext . default SharedPreferences ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . edit (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( Preference Key . LOCATION _ LONG IT UDE . toString (), Ġlongitude . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( Preference Key . LOCATION _ LAT IT UDE . toString (), Ġlatitude . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( Preference Key . LOCATION _ MODE . toString (), ĠLocation Handler . MAN UAL _ PROVIDER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Interface . BUTTON _ NEGATIVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ("% s : Ġ%. 4 f Ġ%. 4 f ? ". format ( location Text , Ġlongitude , Ġlatitude )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . yes , Ġdialog ClickListener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( android . R . string . no , Ġdialog ClickListener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgesture Detector . on Touch Event ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġperform Click (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . perform Click () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġpopup : ĠView Ġby Ġlazy Ġ{ ĠLayoutInflater . from ( context ). inflate ( R . layout . popup , Ġthis , Ġfalse ) Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ ZO OM _ SPEED Ġ= Ġ 5 0 0 L ĊĠĠĠ Ġ} Ċ } Ċ