<!--
  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.
-->
<!-- saved from url=(0014)about:internet -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>SampleGeolocation.mxml</title>
<link rel="stylesheet" type="text/css" href="../SourceStyles.css"/>
</head>

<body>
<pre><span class="MXMLProcessing_Instruction">&lt;?xml version="1.0" encoding="utf-8"?&gt;</span>
<span class="MXMLComponent_Tag">&lt;s:View</span><span class="MXMLDefault_Text"> xmlns:fx="</span><span class="MXMLString">http://ns.adobe.com/mxml/2009</span><span class="MXMLDefault_Text">" viewActivate=&quot;view1_viewActivateHandler(event)&quot;
        xmlns:s="</span><span class="MXMLString">library://ns.adobe.com/flex/spark</span><span class="MXMLDefault_Text">" title="<span class="MXMLString">Geolocation</span></span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">&gt;</span>
    
    <span class="MXMLSpecial_Tag">&lt;fx:Script&gt;</span>
        &lt;![CDATA[
            <span class="ActionScriptReserved">import</span> <span class="ActionScriptDefault_Text">flash</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">sensors</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">Geolocation</span>;
            
            <span class="ActionScriptReserved">import</span> spark.components.supportClasses.StyleableTextField;
            <span class="ActionScriptReserved">import</span> spark.events.ViewNavigatorEvent;
            
            <span class="ActionScriptReserved">protected</span> <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">g</span>:<span class="ActionScriptDefault_Text">Geolocation</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptReserved">new</span> <span class="ActionScriptDefault_Text">Geolocation</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>;    
            
            <span class="ActionScriptReserved">protected</span> <span class="ActionScriptfunction">function</span> view1_viewActivateHandler(event:ViewNavigatorEvent):<span class="ActionScriptReserved">void</span>
            {
                <span class="ActionScriptReserved">if</span> (Geolocation.isSupported)
                {
                    <span class="ActionScriptComment">// Note: un-comment the muted check for android OS, however there is currently a bug on iOS where it will always return
</span>                    <span class="ActionScriptComment">//      muted and not update the location if left uncommented. 
</span>                    <span class="ActionScriptComment">/* if (g.muted)
                    {
                    log.text = "Access to GPS has been muted";
                    return;
                    } */</span>
                    
                    log.text = <span class="ActionScriptString">"Finding Location..."</span>;
                    g.addEventListener(GeolocationEvent.UPDATE, onUpdate);
                    addEventListener(ViewNavigatorEvent.REMOVING,onRemove);
                }
                <span class="ActionScriptReserved">else</span>
                {
                    currentState = <span class="ActionScriptString">"unsupported"</span>;
                    lblSupport.text = <span class="ActionScriptString">"Geolocation is not supported on this device."</span>;
                }    
            }</span>
            
            <span class="ActionScriptReserved">protected</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptDefault_Text">onUpdate</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">event</span>:<span class="ActionScriptDefault_Text">GeolocationEvent</span><span class="ActionScriptBracket/Brace">)</span>:<span class="ActionScriptReserved">void</span>
            <span class="ActionScriptBracket/Brace">{</span>
                <span class="ActionScripttrace">trace</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptString">"Update event called"</span><span class="ActionScriptBracket/Brace">)</span>;
                <span class="ActionScriptDefault_Text">log</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">text</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptString">"latitude = "</span> <span class="ActionScriptOperator">+</span> <span class="ActionScriptDefault_Text">event</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">latitude</span> <span class="ActionScriptOperator">+</span> 
                    <span class="ActionScriptString">"\nlongitude = "</span> <span class="ActionScriptOperator">+</span> <span class="ActionScriptDefault_Text">event</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">longitude</span> <span class="ActionScriptOperator">+</span>
                    <span class="ActionScriptString">"\naltitude = "</span> <span class="ActionScriptOperator">+</span> <span class="ActionScriptDefault_Text">event</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">altitude</span> <span class="ActionScriptOperator">+</span>
                    <span class="ActionScriptString">"\nverticalAccuracy = "</span> <span class="ActionScriptOperator">+</span> <span class="ActionScriptDefault_Text">event</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">verticalAccuracy</span> <span class="ActionScriptOperator">+</span>
                    <span class="ActionScriptString">"\nhorizontalAccuracy = "</span> <span class="ActionScriptOperator">+</span> <span class="ActionScriptDefault_Text">event</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">horizontalAccuracy</span> <span class="ActionScriptOperator">+</span>
                    <span class="ActionScriptString">"\nspeed = "</span> <span class="ActionScriptOperator">+</span> <span class="ActionScriptDefault_Text">event</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">speed</span> <span class="ActionScriptOperator">+</span>
                    <span class="ActionScriptString">"\nheading = "</span> <span class="ActionScriptOperator">+</span> <span class="ActionScriptDefault_Text">event</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">heading</span> <span class="ActionScriptOperator">+</span>
                    <span class="ActionScriptString">"\ntimestamp = "</span> <span class="ActionScriptOperator">+</span> <span class="ActionScriptDefault_Text">event</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">timestamp</span>;        
                <span class="ActionScriptComment">// auto-scroll the text area to the latest text
</span>                StyleableTextField(log.textDisplay).scrollV = StyleableTextField(log.textDisplay).scrollV+1;
            <span class="ActionScriptBracket/Brace">}</span>
            
            <span class="ActionScriptReserved">protected</span> <span class="ActionScriptfunction">function</span> onRemove(event:ViewNavigatorEvent):<span class="ActionScriptReserved">void</span>
            {
                g.removeEventListener(GeolocationEvent.UPDATE, onUpdate);                
            }</span>
        <span class="ActionScriptBracket/Brace">]</span><span class="ActionScriptBracket/Brace">]</span><span class="ActionScriptOperator">&gt;</span>
    <span class="MXMLSpecial_Tag">&lt;/fx:Script&gt;</span>
    <span class="MXMLComponent_Tag">&lt;s:states&gt;</span>
        <span class="MXMLComponent_Tag">&lt;s:State</span><span class="MXMLDefault_Text"> name="</span><span class="MXMLString">normal</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">/&gt;</span>
        <span class="MXMLComponent_Tag">&lt;s:State</span><span class="MXMLDefault_Text"> name="</span><span class="MXMLString">unsupported</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">/&gt;</span>
    <span class="MXMLComponent_Tag">&lt;/s:states&gt;</span>
    
    <span class="MXMLComponent_Tag">&lt;s:layout&gt;</span>
        <span class="MXMLComponent_Tag">&lt;s:VerticalLayout</span><span class="MXMLDefault_Text"> paddingTop="</span><span class="MXMLString">20</span><span class="MXMLDefault_Text">" paddingBottom="</span><span class="MXMLString">20</span><span class="MXMLDefault_Text">" paddingLeft="</span><span class="MXMLString">20</span><span class="MXMLDefault_Text">" paddingRight="</span><span class="MXMLString">20</span><span class="MXMLDefault_Text">" gap="</span><span class="MXMLString">40</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">/&gt;</span>
    <span class="MXMLComponent_Tag">&lt;/s:layout&gt;</span>
    
    <span class="MXMLComponent_Tag">&lt;s:Label</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">lblSupport</span><span class="MXMLDefault_Text">" includeIn="</span><span class="MXMLString">unsupported</span><span class="MXMLDefault_Text">" width="</span><span class="MXMLString">95%</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">/&gt;</span>
    <span class="MXMLComponent_Tag">&lt;s:TextArea</span><span class="MXMLDefault_Text"> width="</span><span class="MXMLString">98%</span><span class="MXMLDefault_Text">" enabled="</span><span class="MXMLString">false</span><span class="MXMLDefault_Text">"
                text="</span><span class="MXMLString">The Geolocation sample displays updates to the current geographical location of the device in the form of latitudinal and longitudinal coordinates.</span><span class="MXMLDefault_Text">" includeIn="</span><span class="MXMLString">normal</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">/&gt;</span>
    <span class="MXMLComponent_Tag">&lt;s:VGroup</span><span class="MXMLDefault_Text"> width="</span><span class="MXMLString">400</span><span class="MXMLDefault_Text">" includeIn="</span><span class="MXMLString">normal</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">&gt;</span>
        <span class="MXMLComponent_Tag">&lt;s:Label</span><span class="MXMLDefault_Text"> text="</span><span class="MXMLString">Event Log:</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">/&gt;</span>
        <span class="MXMLComponent_Tag">&lt;s:TextArea</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">log</span><span class="MXMLDefault_Text">" editable="</span><span class="MXMLString">false</span><span class="MXMLDefault_Text">" height="</span><span class="MXMLString">400</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">/&gt;</span>
    <span class="MXMLComponent_Tag">&lt;/s:VGroup&gt;</span>
    
<span class="MXMLComponent_Tag">&lt;/s:View&gt;</span></pre></body>
</html>
