diff --git a/example/index.html b/example/index.html
index a32ae9d5..59f0da52 100644
--- a/example/index.html
+++ b/example/index.html
@@ -5,7 +5,7 @@
PhoneGap
-
+
diff --git a/framework/AndroidManifest.xml b/framework/AndroidManifest.xml
index 53d7afb5..5b813bce 100644
--- a/framework/AndroidManifest.xml
+++ b/framework/AndroidManifest.xml
@@ -37,8 +37,11 @@
+
+
+
+
-
-
+
diff --git a/framework/assets/www/index.html b/framework/assets/www/index.html
index ff45efc3..69cd9963 100644
--- a/framework/assets/www/index.html
+++ b/framework/assets/www/index.html
@@ -1,7 +1,7 @@
-
+
diff --git a/framework/src/com/phonegap/App.java b/framework/src/com/phonegap/App.java
index cb3342bc..13aaaee5 100755
--- a/framework/src/com/phonegap/App.java
+++ b/framework/src/com/phonegap/App.java
@@ -12,6 +12,7 @@ import org.json.JSONException;
import org.json.JSONObject;
import com.phonegap.api.Plugin;
import com.phonegap.api.PluginResult;
+import java.util.HashMap;
/**
* This class exposes methods in DroidGap that can be called from JavaScript.
@@ -83,8 +84,11 @@ public class App extends Plugin {
public void loadUrl(String url, JSONObject props) throws JSONException {
System.out.println("App.loadUrl("+url+","+props+")");
int wait = 0;
-
+ boolean usePhoneGap = true;
+ boolean clearPrev = false;
+
// If there are properties, then set them on the Activity
+ HashMap params = new HashMap();
if (props != null) {
JSONArray keys = props.names();
for (int i=0; i 0) {
- ((DroidGap)this.ctx).loadUrl(url, wait);
- }
- else {
- ((DroidGap)this.ctx).loadUrl(url);
+ try {
+ synchronized(this) {
+ this.wait(wait);
+ }
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
}
+ ((DroidGap)this.ctx).showWebPage(url, usePhoneGap, clearPrev, params);
}
/**
diff --git a/framework/src/com/phonegap/Device.java b/framework/src/com/phonegap/Device.java
index 035058fe..ce69dff1 100755
--- a/framework/src/com/phonegap/Device.java
+++ b/framework/src/com/phonegap/Device.java
@@ -18,7 +18,7 @@ import android.provider.Settings;
public class Device extends Plugin {
- public static String phonegapVersion = "0.9.5"; // PhoneGap version
+ public static String phonegapVersion = "0.9.6"; // PhoneGap version
public static String platform = "Android"; // Device OS
public static String uuid; // Device UUID
diff --git a/framework/src/com/phonegap/DroidGap.java b/framework/src/com/phonegap/DroidGap.java
index b1323817..3830722e 100755
--- a/framework/src/com/phonegap/DroidGap.java
+++ b/framework/src/com/phonegap/DroidGap.java
@@ -7,6 +7,8 @@
*/
package com.phonegap;
+import java.util.HashMap;
+import java.util.Map.Entry;
import org.json.JSONArray;
import org.json.JSONException;
@@ -136,7 +138,7 @@ public class DroidGap extends PhonegapActivity {
private String urlFile;
// The base of the initial URL for our app
- private String baseUrl;
+ private String baseUrl = null;
// Plugin to call when activity result is received
protected Plugin activityResultCallback = null;
@@ -350,12 +352,14 @@ public class DroidGap extends PhonegapActivity {
System.out.println("loadUrl("+url+")");
this.urlFile = this.getUrlFile(url);
this.url = url;
- int i = url.lastIndexOf('/');
- if (i > 0) {
- this.baseUrl = url.substring(0, i);
- }
- else {
- this.baseUrl = this.url;
+ if (this.baseUrl == null) {
+ int i = url.lastIndexOf('/');
+ if (i > 0) {
+ this.baseUrl = url.substring(0, i+1);
+ }
+ else {
+ this.baseUrl = this.url + "/";
+ }
}
System.out.println("url="+url+" baseUrl="+baseUrl);
@@ -738,6 +742,59 @@ public class DroidGap extends PhonegapActivity {
int p3 = (p1 < p2) ? p1 : p2;
return url.substring(0, p3);
}
+
+ /**
+ * Display a new browser with the specified URL.
+ *
+ * NOTE: If usePhoneGap is set, only trusted PhoneGap URLs should be loaded,
+ * since any PhoneGap API can be called by the loaded HTML page.
+ *
+ * @param url The url to load.
+ * @param usePhoneGap Load url in PhoneGap webview.
+ * @param clearPrev Clear the activity stack, so new app becomes top of stack
+ * @param params DroidGap parameters for new app
+ * @throws android.content.ActivityNotFoundException
+ */
+ public void showWebPage(String url, boolean usePhoneGap, boolean clearPrev, HashMap params) throws android.content.ActivityNotFoundException {
+ Intent intent = null;
+ if (usePhoneGap) {
+ intent = new Intent().setClass(this, com.phonegap.DroidGap.class);
+ intent.putExtra("url", url);
+
+ // Add parameters
+ if (params != null) {
+ java.util.Set> s = params.entrySet();
+ java.util.Iterator> it = s.iterator();
+ while(it.hasNext()) {
+ Entry entry = it.next();
+ String key = entry.getKey();
+ Object value = entry.getValue();
+ if (value == null) {
+ }
+ else if (value.getClass().equals(String.class)) {
+ intent.putExtra(key, (String)value);
+ }
+ else if (value.getClass().equals(Boolean.class)) {
+ intent.putExtra(key, (Boolean)value);
+ }
+ else if (value.getClass().equals(Integer.class)) {
+ intent.putExtra(key, (Integer)value);
+ }
+ }
+
+ }
+ }
+ else {
+ intent = new Intent(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(url));
+ }
+ this.startActivity(intent);
+
+ // Finish current activity
+ if (clearPrev) {
+ this.finish();
+ }
+ }
/**
* Provides a hook for calling "alert" from javascript. Useful for
@@ -825,8 +882,11 @@ public class DroidGap extends PhonegapActivity {
*/
@Override
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
+
+ // Security check to make sure any requests are coming from the page initially
+ // loaded in webview and not another loaded in an iframe.
boolean reqOk = false;
- if (this.ctx.urlFile.equals(this.ctx.getUrlFile(url))) {
+ if (url.indexOf(this.ctx.baseUrl) == 0) {
reqOk = true;
}
@@ -1069,17 +1129,18 @@ public class DroidGap extends PhonegapActivity {
// All else
else {
- int i = url.lastIndexOf('/');
- String newBaseUrl = url;
- if (i > 0) {
- newBaseUrl = url.substring(0, i);
- }
-
// If our app or file:, then load into our webview
// NOTE: This replaces our app with new URL. When BACK is pressed,
// our app is reloaded and restarted. All state is lost.
- if (this.ctx.loadInWebView || url.startsWith("file://") || this.ctx.baseUrl.equals(newBaseUrl)) {
- this.ctx.appView.loadUrl(url);
+ if (this.ctx.loadInWebView || url.startsWith("file://") || url.indexOf(this.ctx.baseUrl) == 0) {
+ try {
+ HashMap params = new HashMap();
+ params.put("loadingDialog", "");
+ params.put("hideLoadingDialogOnPageLoad", true);
+ this.ctx.showWebPage(url, true, false, params);
+ } catch (android.content.ActivityNotFoundException e) {
+ System.out.println("Error loading url into DroidGap - "+url+":"+ e.toString());
+ }
}
// If not our application, let default viewer handle