diff --git a/framework/src/com/phonegap/BrowserKey.java b/framework/src/com/phonegap/BrowserKey.java index 2079e869..c3677d20 100644 --- a/framework/src/com/phonegap/BrowserKey.java +++ b/framework/src/com/phonegap/BrowserKey.java @@ -21,6 +21,7 @@ public class BrowserKey { BrowserKey(WebView view, DroidGap action) { bound = false; + mAction = action; } public void override() diff --git a/framework/src/com/phonegap/DroidGap.java b/framework/src/com/phonegap/DroidGap.java index 051d467b..1f505a43 100644 --- a/framework/src/com/phonegap/DroidGap.java +++ b/framework/src/com/phonegap/DroidGap.java @@ -105,9 +105,7 @@ public class DroidGap extends Activity { { appView.setWebChromeClient(new GapClient(this)); } - - appView.setWebViewClient(new GapViewClient(this)); - + appView.setInitialScale(100); appView.setVerticalScrollBarEnabled(false); @@ -181,63 +179,6 @@ public class DroidGap extends Activity { { appView.loadUrl(url); } - - public class GapViewClient extends WebViewClient { - - Context mCtx; - - public GapViewClient(Context ctx) - { - mCtx = ctx; - } - - /* - * (non-Javadoc) - * @see android.webkit.WebViewClient#shouldOverrideUrlLoading(android.webkit.WebView, java.lang.String) - * - * Note: Since we override it to make sure that we are using PhoneGap and not some other bullshit - * viewer that may or may not exist, we need to make sure that http:// and tel:// still work. - * - */ - - @Override - public boolean shouldOverrideUrlLoading(WebView view, String url) { - // TODO: See about using a switch statement - if (url.startsWith("http://")) - { - Intent browse = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); - startActivity(browse); - return true; - } - else if(url.startsWith("tel://")) - { - Intent dial = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); - startActivity(dial); - return true; - } - else if(url.startsWith("sms:")) - { - Uri smsUri = Uri.parse(url); - Intent intent = new Intent(Intent.ACTION_VIEW, smsUri); - intent.setType("vnd.android-dir/mms-sms"); - startActivity(intent); - return true; - } - else if(url.startsWith("mailto:")) - { - Intent mail = new Intent(Intent.ACTION_SENDTO, Uri.parse(url)); - startActivity(mail); - return true; - } - else - { - //We clear the back button state - mKey.reset(); - view.loadUrl(url); - return false; - } - } - } /** diff --git a/framework/src/com/phonegap/GeoBroker.java b/framework/src/com/phonegap/GeoBroker.java index 049bb2cc..2dbbbba8 100644 --- a/framework/src/com/phonegap/GeoBroker.java +++ b/framework/src/com/phonegap/GeoBroker.java @@ -16,6 +16,7 @@ public class GeoBroker { private WebView mAppView; private Context mCtx; private HashMap geoListeners; + private GeoListener global; public GeoBroker(WebView view, Context ctx) { @@ -25,13 +26,12 @@ public class GeoBroker { } public void getCurrentLocation() - { - GeoListener listener = new GeoListener("global", mCtx, 10000, mAppView); - Location loc = listener.getCurrentLocation(); - String params = loc.getLatitude() + "," + loc.getLongitude() + ", " + loc.getAltitude() + "," + loc.getAccuracy() + "," + loc.getBearing(); - params += "," + loc.getSpeed() + "," + loc.getTime(); - mAppView.loadUrl("javascript:navigator.geolocation.gotCurrentPosition(" + params + ")"); - listener.stop(); + { + //It's supposed to run async! + if(global == null) + global = new GeoListener("global", mCtx, 10000, mAppView); + else + global.start(10000); } public String start(int freq, String key) diff --git a/framework/src/com/phonegap/GeoListener.java b/framework/src/com/phonegap/GeoListener.java index 3fb8fe96..7a3ffce2 100644 --- a/framework/src/com/phonegap/GeoListener.java +++ b/framework/src/com/phonegap/GeoListener.java @@ -48,7 +48,12 @@ public class GeoListener { if(id != "global") { mAppView.loadUrl("javascript:navigator._geo.success(" + id + "," + params + ")"); - } + } + else + { + mAppView.loadUrl("javascript:navigator.geolocation.gotCurrentPosition(" + params + ")"); + this.stop(); + } } void fail() @@ -63,6 +68,19 @@ public class GeoListener { } } + void start(int interval) + { + if(mGps != null) + mGps.start(interval); + if(mNetwork != null) + mNetwork.start(interval); + if(mNetwork == null && mGps == null) + { + // Really, how the hell were you going to get the location??? + mAppView.loadUrl("javascript:navigator._geo.fail()"); + } + } + // This stops the listener void stop() { @@ -72,14 +90,4 @@ public class GeoListener { mNetwork.stop(); } - public Location getCurrentLocation() { - Location loc = null; - if (mGps != null) - loc = mGps.getLocation(); - if (loc == null && mNetwork != null) - loc = mNetwork.getLocation(); - if(loc == null) - loc = new Location(LocationManager.NETWORK_PROVIDER); - return loc; - } } diff --git a/framework/src/com/phonegap/GpsListener.java b/framework/src/com/phonegap/GpsListener.java index cad8f160..1b60a7df 100644 --- a/framework/src/com/phonegap/GpsListener.java +++ b/framework/src/com/phonegap/GpsListener.java @@ -41,9 +41,7 @@ public class GpsListener implements LocationListener { { owner = m; mCtx = ctx; - mLocMan = (LocationManager) mCtx.getSystemService(Context.LOCATION_SERVICE); - mLocMan.requestLocationUpdates(LocationManager.GPS_PROVIDER, interval, 0, this); - cLoc = mLocMan.getLastKnownLocation(LocationManager.GPS_PROVIDER); + this.start(interval); } public Location getLocation() @@ -92,6 +90,13 @@ public class GpsListener implements LocationListener { public boolean hasLocation() { return hasData; } + + public void start(int interval) + { + mLocMan = (LocationManager) mCtx.getSystemService(Context.LOCATION_SERVICE); + mLocMan.requestLocationUpdates(LocationManager.GPS_PROVIDER, interval, 0, this); + cLoc = mLocMan.getLastKnownLocation(LocationManager.GPS_PROVIDER); + } public void stop() { diff --git a/framework/src/com/phonegap/NetworkListener.java b/framework/src/com/phonegap/NetworkListener.java index 49e1b3bd..46d5246a 100644 --- a/framework/src/com/phonegap/NetworkListener.java +++ b/framework/src/com/phonegap/NetworkListener.java @@ -40,9 +40,7 @@ public class NetworkListener implements LocationListener { { owner = m; mCtx = ctx; - mLocMan = (LocationManager) mCtx.getSystemService(Context.LOCATION_SERVICE); - mLocMan.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, interval, 0, this); - cLoc = mLocMan.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); + this.start(interval); } public Location getLocation() @@ -94,6 +92,13 @@ public class NetworkListener implements LocationListener { cLoc = location; } + public void start(int interval) + { + mLocMan = (LocationManager) mCtx.getSystemService(Context.LOCATION_SERVICE); + mLocMan.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, interval, 0, this); + cLoc = mLocMan.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); + } + public void stop() { mLocMan.removeUpdates(this);