diff --git a/framework/assets/js/app.js b/framework/assets/js/app.js new file mode 100755 index 00000000..0d4978ad --- /dev/null +++ b/framework/assets/js/app.js @@ -0,0 +1,66 @@ +/* + * PhoneGap is available under *either* the terms of the modified BSD license *or* the + * MIT License (2008). See http://opensource.org/licenses/alphabetical for full text. + * + * Copyright (c) 2005-2010, Nitobi Software Inc. + * Copyright (c) 2010, IBM Corporation + */ + +/** + * Constructor + */ +function App() { +} + +/** + * Clear the resource cache. + */ +App.prototype.clearCache = function() { + PhoneGap.exec(null, null, "App", "clearCache", []); +}; + +/** + * Load the url into the webview. + * + * @param url The URL to load + * @param props Properties that can be passed in to the activity: + * wait: int => wait msec before loading URL + * loadingDialog: "Title,Message" => display a native loading dialog + * hideLoadingDialogOnPage: boolean => hide loadingDialog when page loaded instead of when deviceready event occurs. + * loadInWebView: boolean => cause all links on web page to be loaded into existing web view, instead of being loaded into new browser. + * loadUrlTimeoutValue: int => time in msec to wait before triggering a timeout error + * errorUrl: URL => URL to load if there's an error loading specified URL with loadUrl(). Should be a local URL such as file:///android_asset/www/error.html"); + * keepRunning: boolean => enable app to keep running in background + * + * Example: + * App app = new App(); + * app.loadUrl("http://server/myapp/index.html", {wait:2000, loadingDialog:"Wait,Loading App", loadUrlTimeoutValue: 60000}); + */ +App.prototype.loadUrl = function(url, props) { + PhoneGap.exec(null, null, "App", "loadUrl", [url, props]); +}; + +/** + * Cancel loadUrl that is waiting to be loaded. + */ +App.prototype.cancelLoadUrl = function() { + PhoneGap.exec(null, null, "App", "cancelLoadUrl", []); +}; + +/** + * Clear web history in this web view. + * Instead of BACK button loading the previous web page, it will exit the app. + */ +App.prototype.clearHistory = function() { + PhoneGap.exec(null, null, "App", "clearHistory", []); +}; + +/** + * Add a class that implements a service. + * + * @param serviceType + * @param className + */ +App.prototype.addService = function(serviceType, className) { + PhoneGap.exec(null, null, "App", "addService", [serviceType, className]); +}; diff --git a/framework/src/com/phonegap/App.java b/framework/src/com/phonegap/App.java new file mode 100755 index 00000000..4f88f30a --- /dev/null +++ b/framework/src/com/phonegap/App.java @@ -0,0 +1,135 @@ +/* + * PhoneGap is available under *either* the terms of the modified BSD license *or* the + * MIT License (2008). See http://opensource.org/licenses/alphabetical for full text. + * + * Copyright (c) 2005-2010, Nitobi Software Inc. + * Copyright (c) 2010, IBM Corporation + */ +package com.phonegap; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import com.phonegap.api.Plugin; +import com.phonegap.api.PluginResult; + +/** + * This class exposes methods in DroidGap that can be called from JavaScript. + */ +public class App extends Plugin { + + /** + * Executes the request and returns PluginResult. + * + * @param action The action to execute. + * @param args JSONArry of arguments for the plugin. + * @param callbackId The callback id used when calling back into JavaScript. + * @return A PluginResult object with a status and message. + */ + public PluginResult execute(String action, JSONArray args, String callbackId) { + PluginResult.Status status = PluginResult.Status.OK; + String result = ""; + + try { + if (action.equals("clearCache")) { + this.clearCache(); + } + else if (action.equals("loadUrl")) { + this.loadUrl(args.getString(0), args.optJSONObject(1)); + } + else if (action.equals("cancelLoadUrl")) { + this.cancelLoadUrl(); + } + else if (action.equals("clearHistory")) { + this.clearHistory(); + } + else if (action.equals("addService")) { + this.addService(args.getString(0), args.getString(1)); + } + return new PluginResult(status, result); + } catch (JSONException e) { + return new PluginResult(PluginResult.Status.JSON_EXCEPTION); + } + } + + //-------------------------------------------------------------------------- + // LOCAL METHODS + //-------------------------------------------------------------------------- + + /** + * Clear the resource cache. + */ + public void clearCache() { + ((DroidGap)this.ctx).clearCache(); + } + + /** + * Load the url into the webview. + * + * @param url + * @param props Properties that can be passed in to the DroidGap activity (i.e. loadingDialog, wait, ...) + * @throws JSONException + */ + public void loadUrl(String url, JSONObject props) throws JSONException { + System.out.println("App.loadUrl("+url+","+props+")"); + int wait = 0; + + // If there are properties, then set them on the Activity + 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); + } + } + + /** + * Cancel loadUrl before it has been loaded. + */ + public void cancelLoadUrl() { + ((DroidGap)this.ctx).cancelLoadUrl(); + } + + /** + * Clear web history in this web view. + */ + public void clearHistory() { + ((DroidGap)this.ctx).clearHistory(); + } + + /** + * Add a class that implements a service. + * + * @param serviceType + * @param className + */ + public void addService(String serviceType, String className) { + this.ctx.addService(serviceType, className); + } +} diff --git a/framework/src/com/phonegap/DroidGap.java b/framework/src/com/phonegap/DroidGap.java index 3dc8df89..88648768 100755 --- a/framework/src/com/phonegap/DroidGap.java +++ b/framework/src/com/phonegap/DroidGap.java @@ -255,6 +255,7 @@ public class DroidGap extends PhonegapActivity { appView.addJavascriptInterface(this.mKey, "BackButton"); appView.addJavascriptInterface(this.callbackServer, "CallbackServer"); + this.addService("App", "com.phonegap.App"); this.addService("Geolocation", "com.phonegap.GeoBroker"); this.addService("Device", "com.phonegap.Device"); this.addService("Accelerometer", "com.phonegap.AccelListener");