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

Side by Side Diff: mobile/android/thirdparty/org/adblockplus/browser/SubscriptionContainer.java

Issue 29588596: Issue 5919 - Adjust our code to the new messaging system (Closed)
Patch Set: Created Oct. 25, 2017, 11:39 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « mobile/android/thirdparty/org/adblockplus/browser/MoreSubscriptionsPreferenceGroup.java ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * This file is part of Adblock Plus <https://adblockplus.org/>, 2 * This file is part of Adblock Plus <https://adblockplus.org/>,
3 * Copyright (C) 2006-present eyeo GmbH 3 * Copyright (C) 2006-present eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details. 12 * GNU General Public License for more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License 14 * You should have received a copy of the GNU General Public License
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
16 */ 16 */
17 17
18 package org.adblockplus.browser; 18 package org.adblockplus.browser;
19 19
20 import java.io.IOException; 20 import java.io.IOException;
21 import java.io.StringReader; 21 import java.io.StringReader;
22 import java.lang.ref.WeakReference; 22 import java.lang.ref.WeakReference;
23 import java.util.ArrayList; 23 import java.util.ArrayList;
24 import java.util.HashMap; 24 import java.util.HashMap;
25 import java.util.Iterator; 25 import java.util.Iterator;
26 import java.util.List; 26 import java.util.List;
27 import java.util.concurrent.ConcurrentHashMap; 27 import java.util.concurrent.ConcurrentHashMap;
28 import java.util.concurrent.Semaphore; 28 import java.util.concurrent.Semaphore;
29 29
30 import org.mozilla.gecko.util.NativeJSObject; 30 import org.mozilla.gecko.util.GeckoBundle;
31 import org.mozilla.gecko.util.ThreadUtils; 31 import org.mozilla.gecko.util.ThreadUtils;
32 import org.xmlpull.v1.XmlPullParser; 32 import org.xmlpull.v1.XmlPullParser;
33 import org.xmlpull.v1.XmlPullParserException; 33 import org.xmlpull.v1.XmlPullParserException;
34 34
35 import android.util.Log; 35 import android.util.Log;
36 import android.util.Xml; 36 import android.util.Xml;
37 37
38 final class SubscriptionContainer implements AdblockPlusApiCallback 38 final class SubscriptionContainer implements AdblockPlusApiCallback
39 { 39 {
40 private static final String TAG = SubscriptionContainer.class.getName(); 40 private static final String TAG = SubscriptionContainer.class.getName();
41 private final ConcurrentHashMap<String, Boolean> enableState = new ConcurrentH ashMap<>(); 41 private final ConcurrentHashMap<String, Boolean> enableState = new ConcurrentH ashMap<>();
42 private final Semaphore entriesReady = new Semaphore(0); 42 private final Semaphore entriesReady = new Semaphore(0);
43 private final List<SubscriptionContainer.Subscription> entries = new ArrayList <>(); 43 private final List<SubscriptionContainer.Subscription> entries = new ArrayList <>();
44 private final HashMap<String, SubscriptionContainer.Subscription> urlMap = new HashMap<>(); 44 private final HashMap<String, SubscriptionContainer.Subscription> urlMap = new HashMap<>();
45 private final List<WeakReference<SubscriptionListener>> subscriptionListeners = new ArrayList<>(); 45 private final List<WeakReference<SubscriptionListener>> subscriptionListeners = new ArrayList<>();
46 46
47 private SubscriptionContainer() 47 private SubscriptionContainer()
48 { 48 {
49 // prevent external instantiation 49 // prevent external instantiation
50 } 50 }
51 51
52 public final static SubscriptionContainer create() 52 public final static SubscriptionContainer create()
53 { 53 {
54 return create(true); 54 return create(true);
55 } 55 }
56 56
57 public final static SubscriptionContainer create(final boolean refresh) 57 public final static SubscriptionContainer create(final boolean refresh)
58 { 58 {
59 final SubscriptionContainer sc = new SubscriptionContainer(); 59 final SubscriptionContainer sc = new SubscriptionContainer();
60 AddOnBridge.queryValue(sc, "subscriptionsXml"); 60 AddOnBridge.queryValue("subscriptionsXml", sc);
61 sc.entriesReady.acquireUninterruptibly(); 61 sc.entriesReady.acquireUninterruptibly();
62 62
63 for (final SubscriptionContainer.Subscription e : sc.entries) 63 for (final SubscriptionContainer.Subscription e : sc.entries)
64 { 64 {
65 sc.urlMap.put(e.url, e); 65 sc.urlMap.put(e.url, e);
66 sc.enableState.put(e.url, Boolean.FALSE); 66 sc.enableState.put(e.url, Boolean.FALSE);
67 } 67 }
68 68
69 if (refresh) 69 if (refresh)
70 { 70 {
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 } 146 }
147 } 147 }
148 148
149 if (shouldAddListener) 149 if (shouldAddListener)
150 { 150 {
151 this.subscriptionListeners.add(new WeakReference<>(listener)); 151 this.subscriptionListeners.add(new WeakReference<>(listener));
152 } 152 }
153 } 153 }
154 154
155 @Override 155 @Override
156 public void onApiRequestSucceeded(NativeJSObject jsObject) 156 public void onApiRequestSucceeded(GeckoBundle bundle)
157 { 157 {
158 final XmlPullParser parser = Xml.newPullParser(); 158 final XmlPullParser parser = Xml.newPullParser();
159 try 159 try
160 { 160 {
161 parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); 161 parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
162 parser.setInput(new StringReader(AddOnBridge.getStringFromJsObject(jsObjec t, "value", ""))); 162 parser.setInput(new StringReader(bundle.getString("value", "")));
163 parser.nextTag(); 163 parser.nextTag();
164 parser.require(XmlPullParser.START_TAG, null, "subscriptions"); 164 parser.require(XmlPullParser.START_TAG, null, "subscriptions");
165 while (parser.next() != XmlPullParser.END_TAG) 165 while (parser.next() != XmlPullParser.END_TAG)
166 { 166 {
167 if (parser.getEventType() != XmlPullParser.START_TAG) 167 if (parser.getEventType() != XmlPullParser.START_TAG)
168 { 168 {
169 continue; 169 continue;
170 } 170 }
171 if ("subscription".equals(parser.getName())) 171 if ("subscription".equals(parser.getName()))
172 { 172 {
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 final SubscriptionChangeAction.Mode mode) 228 final SubscriptionChangeAction.Mode mode)
229 { 229 {
230 return new SubscriptionChangeAction(subscription, parent, mode).post(); 230 return new SubscriptionChangeAction(subscription, parent, mode).post();
231 } 231 }
232 232
233 public SubscriptionContainer.SubscriptionChangeAction post() 233 public SubscriptionContainer.SubscriptionChangeAction post()
234 { 234 {
235 switch (this.mode) 235 switch (this.mode)
236 { 236 {
237 case QUERY_SUBSCRIPTION_ENABLED: 237 case QUERY_SUBSCRIPTION_ENABLED:
238 AddOnBridge.querySubscriptionListStatus(this, this.subscription.url); 238 AddOnBridge.querySubscriptionListStatus(this.subscription.url, this);
239 break; 239 break;
240 case ENABLE_SUBSCRIPTION: 240 case ENABLE_SUBSCRIPTION:
241 AddOnBridge.addSubscription(this, this.subscription.url, this.subscrip tion.title); 241 AddOnBridge.addSubscription(this.subscription.url, this.subscription.t itle, this);
242 break; 242 break;
243 case DISABLE_SUBSCRIPTION: 243 case DISABLE_SUBSCRIPTION:
244 AddOnBridge.removeSubscription(this, this.subscription.url); 244 AddOnBridge.removeSubscription(this.subscription.url, this);
245 break; 245 break;
246 default: 246 default:
247 break; 247 break;
248 } 248 }
249 return this; 249 return this;
250 } 250 }
251 251
252 @Override 252 @Override
253 public void onApiRequestSucceeded(NativeJSObject jsObject) 253 public void onApiRequestSucceeded(GeckoBundle bundle)
254 { 254 {
255 switch (this.mode) 255 switch (this.mode)
256 { 256 {
257 case QUERY_SUBSCRIPTION_ENABLED: 257 case QUERY_SUBSCRIPTION_ENABLED:
258 try 258 try
259 { 259 {
260 this.parent.enableState.put(this.subscription.url, 260 this.parent.enableState.put(this.subscription.url, bundle.getBoolean ("value"));
261 Boolean.valueOf(AddOnBridge.getBooleanFromJsObject(jsObject, "va lue", false)));
262 } 261 }
263 finally 262 finally
264 { 263 {
265 this.parent.entriesReady.release(); 264 this.parent.entriesReady.release();
266 } 265 }
267 break; 266 break;
268 case ENABLE_SUBSCRIPTION: 267 case ENABLE_SUBSCRIPTION:
269 case DISABLE_SUBSCRIPTION: 268 case DISABLE_SUBSCRIPTION:
270 this.parent.enableState.put(this.subscription.url, this.mode == Mode.E NABLE_SUBSCRIPTION); 269 this.parent.enableState.put(this.subscription.url, this.mode == Mode.E NABLE_SUBSCRIPTION);
271 final Iterator<WeakReference<SubscriptionListener>> iterator = this.pa rent.subscriptionListeners.iterator(); 270 final Iterator<WeakReference<SubscriptionListener>> iterator = this.pa rent.subscriptionListeners.iterator();
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 { 331 {
333 return this.specialization + " (" + this.title + ") @ " + this.url; 332 return this.specialization + " (" + this.title + ") @ " + this.url;
334 } 333 }
335 } 334 }
336 335
337 public interface SubscriptionListener 336 public interface SubscriptionListener
338 { 337 {
339 void onSubscriptionUpdated(); 338 void onSubscriptionUpdated();
340 } 339 }
341 } 340 }
OLDNEW
« no previous file with comments | « mobile/android/thirdparty/org/adblockplus/browser/MoreSubscriptionsPreferenceGroup.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld