Add onReset to Plugin API, call on navigate.
Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/commit/9961d9e5 Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/tree/9961d9e5 Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/diff/9961d9e5 Branch: refs/heads/master Commit: 9961d9e54d09edfb25e38b0faa48b5d69af927b9 Parents: 3d62744 Author: Braden Shepherdson <bra...@chromium.org> Authored: Wed Sep 12 14:31:01 2012 -0400 Committer: Braden Shepherdson <bra...@chromium.org> Committed: Fri Sep 21 12:00:14 2012 -0400 ---------------------------------------------------------------------- .../org/apache/cordova/CordovaWebViewClient.java | 11 +++++------ framework/src/org/apache/cordova/api/IPlugin.java | 7 +++++++ framework/src/org/apache/cordova/api/Plugin.java | 12 ++++++++++++ .../src/org/apache/cordova/api/PluginManager.java | 14 ++++++++++++++ 4 files changed, 38 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/9961d9e5/framework/src/org/apache/cordova/CordovaWebViewClient.java ---------------------------------------------------------------------- diff --git a/framework/src/org/apache/cordova/CordovaWebViewClient.java b/framework/src/org/apache/cordova/CordovaWebViewClient.java index fe0e9e9..5f90763 100755 --- a/framework/src/org/apache/cordova/CordovaWebViewClient.java +++ b/framework/src/org/apache/cordova/CordovaWebViewClient.java @@ -23,20 +23,15 @@ import java.util.Hashtable; import org.apache.cordova.api.CordovaInterface; import org.apache.cordova.api.PluginResult; -import java.io.IOException; -import java.io.InputStream; - import org.apache.cordova.api.LOG; import org.json.JSONException; import org.json.JSONObject; import android.annotation.TargetApi; -import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; -import android.content.res.AssetManager; import android.graphics.Bitmap; import android.net.Uri; import android.net.http.SslError; @@ -44,7 +39,6 @@ import android.util.Log; import android.view.View; import android.webkit.HttpAuthHandler; import android.webkit.SslErrorHandler; -import android.webkit.WebResourceResponse; import android.webkit.WebView; import android.webkit.WebViewClient; @@ -269,6 +263,11 @@ public class CordovaWebViewClient extends WebViewClient { // Broadcast message that page has loaded this.appView.postMessage("onPageStarted", url); + + // Notify all plugins of the navigation, so they can clean up if necessary. + if (this.appView.pluginManager != null) { + this.appView.pluginManager.onReset(); + } } /** http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/9961d9e5/framework/src/org/apache/cordova/api/IPlugin.java ---------------------------------------------------------------------- diff --git a/framework/src/org/apache/cordova/api/IPlugin.java b/framework/src/org/apache/cordova/api/IPlugin.java index 870bb9e..a33a663 100755 --- a/framework/src/org/apache/cordova/api/IPlugin.java +++ b/framework/src/org/apache/cordova/api/IPlugin.java @@ -116,4 +116,11 @@ public interface IPlugin { * @return Return true to prevent the URL from loading. Default is false. */ boolean onOverrideUrlLoading(String url); + + /** + * Called when the WebView does a top-level navigation or refreshes. + * + * Plugins should stop any long-running processes and clean up internal state. + */ + void onReset(); } http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/9961d9e5/framework/src/org/apache/cordova/api/Plugin.java ---------------------------------------------------------------------- diff --git a/framework/src/org/apache/cordova/api/Plugin.java b/framework/src/org/apache/cordova/api/Plugin.java index 84b67e0..c27b1e5 100755 --- a/framework/src/org/apache/cordova/api/Plugin.java +++ b/framework/src/org/apache/cordova/api/Plugin.java @@ -23,6 +23,8 @@ import org.json.JSONArray; import org.json.JSONObject; import android.content.Intent; +import android.util.Log; + /** * Plugin interface must be implemented by any plugin classes. * @@ -215,4 +217,14 @@ public abstract class Plugin implements IPlugin { public void error(String message, String callbackId) { this.webView.sendPluginResult(new PluginResult(PluginResult.Status.ERROR, message), callbackId); } + + /** + * Called when the WebView does a top-level navigation or refreshes. + * + * Plugins should stop any long-running processes and clean up internal state. + * + * Does nothing by default. + */ + public void onReset() { + } } http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/9961d9e5/framework/src/org/apache/cordova/api/PluginManager.java ---------------------------------------------------------------------- diff --git a/framework/src/org/apache/cordova/api/PluginManager.java b/framework/src/org/apache/cordova/api/PluginManager.java index aef6302..aaf614d 100755 --- a/framework/src/org/apache/cordova/api/PluginManager.java +++ b/framework/src/org/apache/cordova/api/PluginManager.java @@ -397,6 +397,20 @@ public class PluginManager { return false; } + /** + * Called when the app navigates or refreshes. + */ + public void onReset() { + Iterator<PluginEntry> it = this.entries.values().iterator(); + while (it.hasNext()) { + IPlugin plugin = it.next().plugin; + if (plugin != null) { + plugin.onReset(); + } + } + } + + private void pluginConfigurationMissing() { LOG.e(TAG, "====================================================================================="); LOG.e(TAG, "ERROR: plugin.xml is missing. Add res/xml/plugins.xml to your project.");