From 01abb3202544820f8ad821079e42fce7d2b6a711 Mon Sep 17 00:00:00 2001 From: Bryce Curtis Date: Mon, 14 May 2012 23:18:26 -0500 Subject: [PATCH] Update --- .../src/org/apache/cordova/GeoBroker.java | 185 +++++++++--------- 1 file changed, 93 insertions(+), 92 deletions(-) diff --git a/framework/src/org/apache/cordova/GeoBroker.java b/framework/src/org/apache/cordova/GeoBroker.java index 6a150b35..18d405b8 100755 --- a/framework/src/org/apache/cordova/GeoBroker.java +++ b/framework/src/org/apache/cordova/GeoBroker.java @@ -38,7 +38,7 @@ public class GeoBroker extends Plugin { private GPSListener gpsListener; private NetworkListener networkListener; private LocationManager locationManager; - + /** * Constructor. */ @@ -54,65 +54,65 @@ public class GeoBroker extends Plugin { * @return A PluginResult object with a status and message. */ public PluginResult execute(String action, JSONArray args, String callbackId) { - if (this.locationManager == null) { - this.locationManager = (LocationManager) this.ctx.getSystemService(Context.LOCATION_SERVICE); - this.networkListener = new NetworkListener(this.locationManager, this); - this.gpsListener = new GPSListener(this.locationManager, this); - } + if (this.locationManager == null) { + this.locationManager = (LocationManager) this.ctx.getActivity().getSystemService(Context.LOCATION_SERVICE); + this.networkListener = new NetworkListener(this.locationManager, this); + this.gpsListener = new GPSListener(this.locationManager, this); + } PluginResult.Status status = PluginResult.Status.NO_RESULT; String message = ""; PluginResult result = new PluginResult(status, message); result.setKeepCallback(true); - + try { if (action.equals("getLocation")) { - boolean enableHighAccuracy = args.getBoolean(0); - int maximumAge = args.getInt(1); - Location last = this.locationManager.getLastKnownLocation((enableHighAccuracy ? LocationManager.GPS_PROVIDER : LocationManager.NETWORK_PROVIDER)); - // Check if we can use lastKnownLocation to get a quick reading and use less battery - if ((System.currentTimeMillis() - last.getTime()) <= maximumAge) { - result = new PluginResult(PluginResult.Status.OK, this.returnLocationJSON(last)); - } else { - this.getCurrentLocation(callbackId, enableHighAccuracy); - } + boolean enableHighAccuracy = args.getBoolean(0); + int maximumAge = args.getInt(1); + Location last = this.locationManager.getLastKnownLocation((enableHighAccuracy ? LocationManager.GPS_PROVIDER : LocationManager.NETWORK_PROVIDER)); + // Check if we can use lastKnownLocation to get a quick reading and use less battery + if ((System.currentTimeMillis() - last.getTime()) <= maximumAge) { + result = new PluginResult(PluginResult.Status.OK, this.returnLocationJSON(last)); + } else { + this.getCurrentLocation(callbackId, enableHighAccuracy); + } } else if (action.equals("addWatch")) { - String id = args.getString(0); - boolean enableHighAccuracy = args.getBoolean(1); - this.addWatch(id, callbackId, enableHighAccuracy); + String id = args.getString(0); + boolean enableHighAccuracy = args.getBoolean(1); + this.addWatch(id, callbackId, enableHighAccuracy); } else if (action.equals("clearWatch")) { - String id = args.getString(0); - this.clearWatch(id); + String id = args.getString(0); + this.clearWatch(id); } } catch (JSONException e) { - result = new PluginResult(PluginResult.Status.JSON_EXCEPTION, e.getMessage()); + result = new PluginResult(PluginResult.Status.JSON_EXCEPTION, e.getMessage()); } return result; } private void clearWatch(String id) { - this.gpsListener.clearWatch(id); - this.networkListener.clearWatch(id); - } - - private void getCurrentLocation(String callbackId, boolean enableHighAccuracy) { - if (enableHighAccuracy) { - this.gpsListener.addCallback(callbackId); - } else { - this.networkListener.addCallback(callbackId); - } - } - - private void addWatch(String timerId, String callbackId, boolean enableHighAccuracy) { - if (enableHighAccuracy) { - this.gpsListener.addWatch(timerId, callbackId); - } else { - this.networkListener.addWatch(timerId, callbackId); - } + this.gpsListener.clearWatch(id); + this.networkListener.clearWatch(id); } - /** + private void getCurrentLocation(String callbackId, boolean enableHighAccuracy) { + if (enableHighAccuracy) { + this.gpsListener.addCallback(callbackId); + } else { + this.networkListener.addCallback(callbackId); + } + } + + private void addWatch(String timerId, String callbackId, boolean enableHighAccuracy) { + if (enableHighAccuracy) { + this.gpsListener.addWatch(timerId, callbackId); + } else { + this.networkListener.addWatch(timerId, callbackId); + } + } + + /** * Identifies if action to be executed returns a value and should be run synchronously. * * @param action The action to execute @@ -122,65 +122,66 @@ public class GeoBroker extends Plugin { // Starting listeners is easier to run on main thread, so don't run async. return true; } - + /** * Called when the activity is to be shut down. * Stop listener. */ public void onDestroy() { - this.networkListener.destroy(); - this.gpsListener.destroy(); + this.networkListener.destroy(); + this.gpsListener.destroy(); this.networkListener = null; this.gpsListener = null; } public JSONObject returnLocationJSON(Location loc) { - JSONObject o = new JSONObject(); - - try { - o.put("latitude", loc.getLatitude()); - o.put("longitude", loc.getLongitude()); - o.put("altitude", (loc.hasAltitude() ? loc.getAltitude() : null)); - o.put("accuracy", loc.getAccuracy()); - o.put("heading", (loc.hasBearing() ? (loc.hasSpeed() ? loc.getBearing() : null) : null)); - o.put("speed", loc.getSpeed()); - o.put("timestamp", loc.getTime()); - } catch (JSONException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - - return o; - } - public void win(Location loc, String callbackId) { - PluginResult result = new PluginResult(PluginResult.Status.OK, this.returnLocationJSON(loc)); - this.success(result, callbackId); - } - /** - * Location failed. Send error back to JavaScript. - * - * @param code The error code - * @param msg The error message - * @throws JSONException - */ - public void fail(int code, String msg, String callbackId) { - JSONObject obj = new JSONObject(); - String backup = null; - try { - obj.put("code", code); - obj.put("message", msg); - } catch (JSONException e) { - obj = null; - backup = "{'code':" + code + ",'message':'" + msg.replaceAll("'", "\'") + "'}"; - } - PluginResult result; - if (obj != null) { - result = new PluginResult(PluginResult.Status.ERROR, obj); - } else { - result = new PluginResult(PluginResult.Status.ERROR, backup); - } - - this.error(result, callbackId); - } + JSONObject o = new JSONObject(); + + try { + o.put("latitude", loc.getLatitude()); + o.put("longitude", loc.getLongitude()); + o.put("altitude", (loc.hasAltitude() ? loc.getAltitude() : null)); + o.put("accuracy", loc.getAccuracy()); + o.put("heading", (loc.hasBearing() ? (loc.hasSpeed() ? loc.getBearing() : null) : null)); + o.put("speed", loc.getSpeed()); + o.put("timestamp", loc.getTime()); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return o; + } + + public void win(Location loc, String callbackId) { + PluginResult result = new PluginResult(PluginResult.Status.OK, this.returnLocationJSON(loc)); + this.success(result, callbackId); + } + + /** + * Location failed. Send error back to JavaScript. + * + * @param code The error code + * @param msg The error message + * @throws JSONException + */ + public void fail(int code, String msg, String callbackId) { + JSONObject obj = new JSONObject(); + String backup = null; + try { + obj.put("code", code); + obj.put("message", msg); + } catch (JSONException e) { + obj = null; + backup = "{'code':" + code + ",'message':'" + msg.replaceAll("'", "\'") + "'}"; + } + PluginResult result; + if (obj != null) { + result = new PluginResult(PluginResult.Status.ERROR, obj); + } else { + result = new PluginResult(PluginResult.Status.ERROR, backup); + } + + this.error(result, callbackId); + } }