From 4437d7f3c45a56dd4014d79f414c6ee492f29b6f Mon Sep 17 00:00:00 2001 From: Andrew Grieve Date: Wed, 23 Oct 2013 22:01:50 -0400 Subject: [PATCH] CB-5191 Deprecate --- .../src/org/apache/cordova/PluginManager.java | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/framework/src/org/apache/cordova/PluginManager.java b/framework/src/org/apache/cordova/PluginManager.java index 514fa58e..9f636a84 100755 --- a/framework/src/org/apache/cordova/PluginManager.java +++ b/framework/src/org/apache/cordova/PluginManager.java @@ -19,9 +19,10 @@ package org.apache.cordova; import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; -import java.util.Map.Entry; +import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import org.apache.cordova.CordovaArgs; @@ -60,9 +61,9 @@ public class PluginManager { // Flag to track first time through private boolean firstRun; - // Map URL schemes like foo: to plugins that want to handle those schemes - // This would allow how all URLs are handled to be offloaded to a plugin - protected HashMap urlMap = new HashMap(); + // Stores mapping of Plugin Name -> values. + // Using is deprecated. + protected HashMap> urlMap = new HashMap>(); private AtomicInteger numPendingUiExecs; @@ -124,7 +125,12 @@ public class PluginManager { if (eventType == XmlResourceParser.START_TAG) { String strNode = xml.getName(); if (strNode.equals("url-filter")) { - this.urlMap.put(xml.getAttributeValue(null, "value"), service); + Log.w(TAG, "Plugin " + service + " is using deprecated tag "); + if (urlMap.get(service) == null) { + urlMap.put(service, new ArrayList(2)); + } + List filters = urlMap.get(service); + filters.add(xml.getAttributeValue(null, "value")); } else if (strNode.equals("feature")) { //Check for supported feature sets aka. plugins (Accelerometer, Geolocation, etc) @@ -369,11 +375,22 @@ public class PluginManager { * @return Return false to allow the URL to load, return true to prevent the URL from loading. */ public boolean onOverrideUrlLoading(String url) { - Iterator> it = this.urlMap.entrySet().iterator(); - while (it.hasNext()) { - HashMap.Entry pairs = it.next(); - if (url.startsWith(pairs.getKey())) { - return this.getPlugin(pairs.getValue()).onOverrideUrlLoading(url); + // Deprecated way to intercept URLs. (process tags). + // Instead, plugins should not include and instead ensure + // that they are loaded before this function is called (either by setting + // the onload or by making an exec() call to them) + for (PluginEntry entry : this.entries.values()) { + List urlFilters = urlMap.get(entry.service); + if (urlFilters != null) { + for (String s : urlFilters) { + if (url.startsWith(s)) { + return getPlugin(entry.service).onOverrideUrlLoading(url); + } + } + } else if (entry.plugin != null) { + if (entry.plugin.onOverrideUrlLoading(url)) { + return true; + } } } return false;