Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: mobile/android/base/java/org/adblockplus/browser/SubscriptionContainer.java

Issue 29863604: Issue 6865 - Update ABP dependency to version 3.2 (Closed)
Patch Set: Removing allowed contexts Created Aug. 28, 2018, 5:08 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mobile/android/base/java/org/adblockplus/browser/SubscriptionContainer.java
===================================================================
--- a/mobile/android/base/java/org/adblockplus/browser/SubscriptionContainer.java
+++ b/mobile/android/base/java/org/adblockplus/browser/SubscriptionContainer.java
@@ -12,58 +12,59 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
*/
package org.adblockplus.browser;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
import java.io.IOException;
-import java.io.StringReader;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Semaphore;
import org.mozilla.gecko.util.GeckoBundle;
import org.mozilla.gecko.util.ThreadUtils;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
+import android.content.Context;
import android.util.Log;
import android.util.Xml;
-final class SubscriptionContainer implements AdblockPlusApiCallback
+final class SubscriptionContainer
{
private static final String TAG = SubscriptionContainer.class.getName();
private final ConcurrentHashMap<String, Boolean> enableState = new ConcurrentHashMap<>();
private final Semaphore entriesReady = new Semaphore(0);
private final List<SubscriptionContainer.Subscription> entries = new ArrayList<>();
private final HashMap<String, SubscriptionContainer.Subscription> urlMap = new HashMap<>();
private final List<WeakReference<SubscriptionListener>> subscriptionListeners = new ArrayList<>();
- private SubscriptionContainer()
+ // prevent external instantiation
+ private SubscriptionContainer(final Context context)
{
- // prevent external instantiation
+ loadSubscriptions(context);
}
- public final static SubscriptionContainer create()
+ public final static SubscriptionContainer create(Context context)
{
- return create(true);
+ return create(context, true);
}
- public final static SubscriptionContainer create(final boolean refresh)
+ public final static SubscriptionContainer create(Context context, final boolean refresh)
{
- final SubscriptionContainer sc = new SubscriptionContainer();
- AddOnBridge.queryValue("subscriptionsXml", sc);
- sc.entriesReady.acquireUninterruptibly();
+ final SubscriptionContainer sc = new SubscriptionContainer(context);
for (final SubscriptionContainer.Subscription e : sc.entries)
{
sc.urlMap.put(e.url, e);
sc.enableState.put(e.url, Boolean.FALSE);
}
if (refresh)
@@ -147,24 +148,27 @@
}
if (shouldAddListener)
{
this.subscriptionListeners.add(new WeakReference<>(listener));
}
}
- @Override
- public void onApiRequestSucceeded(GeckoBundle bundle)
+ private void loadSubscriptions(Context context)
{
+
final XmlPullParser parser = Xml.newPullParser();
try
{
+ final BufferedReader reader = new BufferedReader(new InputStreamReader(
+ context.getAssets().open("extensions/subscriptions.xml")));
+
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
- parser.setInput(new StringReader(bundle.getString("value", "")));
+ parser.setInput(reader);
parser.nextTag();
parser.require(XmlPullParser.START_TAG, null, "subscriptions");
while (parser.next() != XmlPullParser.END_TAG)
{
if (parser.getEventType() != XmlPullParser.START_TAG)
{
continue;
}
@@ -181,27 +185,16 @@
catch (XmlPullParserException e)
{
Log.e(TAG, "Failed to parse subscriptions.xml: " + e.getMessage(), e);
}
catch (IOException e)
{
Log.e(TAG, "Failed to parse subscriptions.xml: " + e.getMessage(), e);
}
- finally
- {
- this.entriesReady.release();
- }
- }
-
- @Override
- public void onApiRequestFailed(String errorMessage)
- {
- Log.e(TAG, "Error: " + errorMessage);
- this.entriesReady.release();
}
private static class SubscriptionChangeAction implements AdblockPlusApiCallback
{
private static final String TAG = SubscriptionContainer.SubscriptionChangeAction.class.getName();
private final SubscriptionContainer.Subscription subscription;
private final SubscriptionContainer parent;
@@ -230,23 +223,23 @@
return new SubscriptionChangeAction(subscription, parent, mode).post();
}
public SubscriptionContainer.SubscriptionChangeAction post()
{
switch (this.mode)
{
case QUERY_SUBSCRIPTION_ENABLED:
- AddOnBridge.querySubscriptionListStatus(this.subscription.url, this);
+ ExtensionBridge.querySubscriptionListStatus(this.subscription.url, this);
break;
case ENABLE_SUBSCRIPTION:
- AddOnBridge.addSubscription(this.subscription.url, this.subscription.title, this);
+ ExtensionBridge.addSubscription(this.subscription.url, this.subscription.title, this);
break;
case DISABLE_SUBSCRIPTION:
- AddOnBridge.removeSubscription(this.subscription.url, this);
+ ExtensionBridge.removeSubscription(this.subscription.url, this);
break;
default:
break;
}
return this;
}
@Override
@@ -332,9 +325,9 @@
return this.specialization + " (" + this.title + ") @ " + this.url;
}
}
public interface SubscriptionListener
{
void onSubscriptionUpdated();
}
-}
+}

Powered by Google App Engine
This is Rietveld