[ 
https://issues.apache.org/jira/browse/CB-1462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13457361#comment-13457361
 ] 

Sean Nikolai Fridman commented on CB-1462:
------------------------------------------

Alrighty, but that doesn't affect the issue I experienced with the native 
Android code. 

Android still won't know whether it can disable location update listeners on 
clearWatch because it will still have a callback id in its callback list. 
Eventually the callback will be called, and yeah, with this fix the success 
callback JS side won't be run, but GPS/NetworkLocation will still be running 
since it wasn't stopped on clearWatch.

I guess native could always check to shut off GPS on the win/fail callbacks? 
Would be curious to know how other native implementations do it. I still 
wonder: can native really handle the situation properly without knowing the 
callback is associated with a watch operation?
                
> False logic for native watchPosition/clearWatch
> -----------------------------------------------
>
>                 Key: CB-1462
>                 URL: https://issues.apache.org/jira/browse/CB-1462
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: Android, CordovaJS
>    Affects Versions: 2.0.0
>            Reporter: Sean Nikolai Fridman
>            Assignee: Filip Maj
>              Labels: clearwatch, geolocation, watchposition
>             Fix For: 2.2.0
>
>
> *Note:* This is a bug in Android's native geolocation implementation. I can't 
> speak to what happens on other platforms. However, I get the feeling that the 
> bug is symptomatic of the JS implementation so it might very well exist on 
> more platforms.
> *Description:* When watchPosition is called, it first calls 
> getCurrentLocation (resulting in a native call to getLocation), then makes a 
> native call to addWatch. In Android, addWatch callback ids and getLocation 
> callback ids are stored in separate data structures. The bug I'm seeing is, 
> when I call clearWatch before the watch operation's implicit 
> getCurrentLocation callback is invoked, the watch operation is 
> removed/stopped in native, but the corresponding getCurrentLocation operation 
> is not.  This is not compliant with the W3C spec, which states that that no 
> further callbacks for the watch operation should be invoked. Worse, this 
> causes a bug on Android where GPS is never shut off! clearWatch stops the 
> location listener *iff* {{callbacks.size + watches.size == 0}}, and so if the 
> callback hadn't been invoked yet...
> _(Actually, skimming back through the code, I'm not seeing anywhere where the 
> location listener is stopped after a getCurrentPosition. Which may be another 
> issue... not sure.)_
> *And the potential issue in Javascript is this:* if native has no knowledge 
> of which getCurrentLocation callbacks are part of a watch operation and which 
> are just normal independent ones, how can it possibly remove the callback id 
> for the implicit getCurrentLocation operation on clearWatch? And how can it 
> possibly know if it can really stop listening for location updates?

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to