[ 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