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

Side by Side Diff: adblockplussbrowser/src/main/java/org/adblockplus/sbrowser/contentblocker/engine/Engine.java

Issue 29673565: Issue 6066 - Implement 'force update' functionality for subscriptions (Closed)
Patch Set: Fixes Created Jan. 23, 2018, 3:12 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
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
(...skipping 25 matching lines...) Expand all
36 import java.util.HashMap; 36 import java.util.HashMap;
37 import java.util.List; 37 import java.util.List;
38 import java.util.Map; 38 import java.util.Map;
39 import java.util.Set; 39 import java.util.Set;
40 import java.util.TreeSet; 40 import java.util.TreeSet;
41 import java.util.concurrent.LinkedBlockingQueue; 41 import java.util.concurrent.LinkedBlockingQueue;
42 import java.util.concurrent.TimeUnit; 42 import java.util.concurrent.TimeUnit;
43 import java.util.concurrent.locks.ReentrantLock; 43 import java.util.concurrent.locks.ReentrantLock;
44 44
45 import org.adblockplus.adblockplussbrowser.R; 45 import org.adblockplus.adblockplussbrowser.R;
46 import org.adblockplus.sbrowser.contentblocker.util.ConnectivityUtils;
46 import org.adblockplus.sbrowser.contentblocker.util.SharedPrefsUtils; 47 import org.adblockplus.sbrowser.contentblocker.util.SharedPrefsUtils;
47 import org.adblockplus.sbrowser.contentblocker.util.SubscriptionUtils; 48 import org.adblockplus.sbrowser.contentblocker.util.SubscriptionUtils;
48 49
49 import android.content.Context; 50 import android.content.Context;
50 import android.content.Intent; 51 import android.content.Intent;
51 import android.content.pm.PackageInfo; 52 import android.content.pm.PackageInfo;
52 import android.content.pm.PackageManager; 53 import android.content.pm.PackageManager;
53 import android.content.pm.ResolveInfo; 54 import android.content.pm.ResolveInfo;
54 import android.net.ConnectivityManager; 55 import android.net.ConnectivityManager;
55 import android.net.NetworkInfo; 56 import android.net.NetworkInfo;
56 import android.net.Uri; 57 import android.net.Uri;
57 import android.os.Handler; 58 import android.os.Handler;
58 import android.os.Looper; 59 import android.os.Looper;
59 import android.text.TextUtils; 60 import android.text.TextUtils;
60 import android.text.format.DateUtils; 61 import android.text.format.DateUtils;
61 import android.util.Log; 62 import android.util.Log;
63 import android.widget.Toast;
62 64
63 public final class Engine 65 public final class Engine
64 { 66 {
65 private static final String TAG = Engine.class.getSimpleName(); 67 private static final String TAG = Engine.class.getSimpleName();
66 68
67 public static final String USER_FILTERS_TITLE = "__filters"; 69 public static final String USER_FILTERS_TITLE = "__filters";
68 public static final String USER_EXCEPTIONS_TITLE = "__exceptions"; 70 public static final String USER_EXCEPTIONS_TITLE = "__exceptions";
69 71
70 public static final String SBROWSER_APP_ID = "com.sec.android.app.sbrowser"; 72 public static final String SBROWSER_APP_ID = "com.sec.android.app.sbrowser";
71 public static final String EASYLIST_URL = "https://easylist-downloads.adblockp lus.org/easylist.txt"; 73 public static final String EASYLIST_URL = "https://easylist-downloads.adblockp lus.org/easylist.txt";
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 public void run() 191 public void run()
190 { 192 {
191 final Intent intent = new Intent(); 193 final Intent intent = new Intent();
192 intent.setAction(ACTION_UPDATE); 194 intent.setAction(ACTION_UPDATE);
193 intent.setData(Uri.parse("package:" + Engine.this.serviceContext.getPack ageName())); 195 intent.setData(Uri.parse("package:" + Engine.this.serviceContext.getPack ageName()));
194 Engine.this.serviceContext.sendBroadcast(intent); 196 Engine.this.serviceContext.sendBroadcast(intent);
195 } 197 }
196 }); 198 });
197 } 199 }
198 200
199 boolean canUseInternet() 201 boolean canUseInternet(final boolean allowMetered)
200 { 202 {
201 final ConnectivityManager connManager = (ConnectivityManager) this.serviceCo ntext 203 // allow a metered connection to update default subscriptions at the first r un.
202 .getSystemService(Context.CONNECTIVITY_SERVICE); 204 // See https://issues.adblockplus.org/ticket/5237
203 final NetworkInfo current = connManager.getActiveNetworkInfo(); 205 return ConnectivityUtils.canUseInternet(serviceContext, allowMetered || wasF irstRun());
204 if (current == null) 206 }
207
208 public void forceUpdateSubscriptions(final boolean allowMetered)
209 {
210 try
205 { 211 {
206 return false; 212 subscriptions.checkForUpdates(true, allowMetered);
213 Toast.makeText(serviceContext, serviceContext.getText(R.string.updating_su bscriptions), Toast.LENGTH_LONG).show();
207 } 214 }
208 215 catch (IOException e)
209 if (wasFirstRun())
210 { 216 {
211 return true; 217 Log.e(TAG, "Failed checking for updates", e);
212 } 218 }
213
214 final boolean wifiOnly = "1".equals(SharedPrefsUtils.getString(
215 this.serviceContext, R.string.key_automatic_updates , "1"));
216
217 if (wifiOnly)
218 {
219 if (current.isConnected() && !current.isRoaming())
220 {
221 switch (current.getType())
222 {
223 case ConnectivityManager.TYPE_BLUETOOTH:
224 case ConnectivityManager.TYPE_ETHERNET:
225 case ConnectivityManager.TYPE_WIFI:
226 case ConnectivityManager.TYPE_WIMAX:
227 return true;
228 default:
229 return false;
230 }
231 }
232 return false;
233 }
234 return current.isConnected();
235 } 219 }
236 220
237 public List<SubscriptionInfo> getListedSubscriptions() 221 public List<SubscriptionInfo> getListedSubscriptions()
238 { 222 {
239 return this.subscriptions.getSubscriptions(this); 223 return this.subscriptions.getSubscriptions(this);
240 } 224 }
241 225
242 public void changeSubscriptionState(final String id, final boolean enabled) 226 public void changeSubscriptionState(final String id, final boolean enabled)
243 { 227 {
244 if (this.subscriptionUpdateCallback != null) 228 if (this.subscriptionUpdateCallback != null)
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after
682 Log.d(TAG, "Unhandled type: " + event.getType()); 666 Log.d(TAG, "Unhandled type: " + event.getType());
683 break; 667 break;
684 } 668 }
685 } 669 }
686 670
687 final long currentTime = System.currentTimeMillis(); 671 final long currentTime = System.currentTimeMillis();
688 if (currentTime > nextUpdateCheck) 672 if (currentTime > nextUpdateCheck)
689 { 673 {
690 nextUpdateCheck = currentTime + UPDATE_CHECK_INTERVAL; 674 nextUpdateCheck = currentTime + UPDATE_CHECK_INTERVAL;
691 675
692 this.engine.subscriptions.checkForUpdates(); 676 this.engine.subscriptions.checkForUpdates(false, false);
693 } 677 }
694 678
695 if (currentTime > this.engine.nextUpdateBroadcast) 679 if (currentTime > this.engine.nextUpdateBroadcast)
696 { 680 {
697 this.engine.nextUpdateBroadcast = Long.MAX_VALUE; 681 this.engine.nextUpdateBroadcast = Long.MAX_VALUE;
698 Log.d(TAG, "Sending update broadcast"); 682 Log.d(TAG, "Sending update broadcast");
699 this.engine.writeFileAndSendUpdateBroadcast(); 683 this.engine.writeFileAndSendUpdateBroadcast();
700 } 684 }
701 } 685 }
702 finally 686 finally
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
769 this.id = id; 753 this.id = id;
770 this.responseCode = responseCode; 754 this.responseCode = responseCode;
771 this.response = response; 755 this.response = response;
772 if (headers != null) 756 if (headers != null)
773 { 757 {
774 this.headers.putAll(headers); 758 this.headers.putAll(headers);
775 } 759 }
776 } 760 }
777 } 761 }
778 762
779 public void enqueueDownload(final Subscription sub, final boolean forced) thro ws IOException 763 public void enqueueDownload(final Subscription sub, final boolean forced,
764 final boolean allowMetered) throws IOException
780 { 765 {
781 if (sub.getURL() != null && sub.shouldUpdate(forced)) 766 if (sub.getURL() != null && sub.shouldUpdate(forced))
782 { 767 {
783 final HashMap<String, String> headers = new HashMap<>(); 768 final HashMap<String, String> headers = new HashMap<>();
784 if (sub.isMetaDataValid() && sub.isFiltersValid()) 769 if (sub.isMetaDataValid() && sub.isFiltersValid())
785 { 770 {
786 final String lastModified = sub.getMeta(Subscription.KEY_HTTP_LAST_MODIF IED); 771 final String lastModified = sub.getMeta(Subscription.KEY_HTTP_LAST_MODIF IED);
787 if (!TextUtils.isEmpty(lastModified)) 772 if (!TextUtils.isEmpty(lastModified))
788 { 773 {
789 headers.put("If-Modified-Since", lastModified); 774 headers.put("If-Modified-Since", lastModified);
790 } 775 }
791 final String etag = sub.getMeta(Subscription.KEY_HTTP_ETAG); 776 final String etag = sub.getMeta(Subscription.KEY_HTTP_ETAG);
792 if (!TextUtils.isEmpty(etag)) 777 if (!TextUtils.isEmpty(etag))
793 { 778 {
794 headers.put("If-None-Match", etag); 779 headers.put("If-None-Match", etag);
795 } 780 }
796 } 781 }
797 Log.d(TAG, headers.toString()); 782 Log.d(TAG, headers.toString());
798 this.downloader.enqueueDownload(this.createDownloadURL(sub), sub.getId(), headers); 783 this.downloader.enqueueDownload(this.createDownloadURL(sub), sub.getId(), headers, allowMetered);
799 } 784 }
800 } 785 }
801 786
802 public void connectivityChanged() 787 public void connectivityChanged()
803 { 788 {
804 this.downloader.connectivityChanged(); 789 this.downloader.connectivityChanged();
805 } 790 }
806 791
807 public interface SubscriptionUpdateCallback 792 public interface SubscriptionUpdateCallback
808 { 793 {
809 void subscriptionUpdateRequested(boolean enabled); 794 void subscriptionUpdateRequested(boolean enabled);
810 void subscriptionUpdatedApplied(); 795 void subscriptionUpdatedApplied();
811 } 796 }
812 797
813 public interface SubscriptionAddedCallback 798 public interface SubscriptionAddedCallback
814 { 799 {
815 void subscriptionAdded(); 800 void subscriptionAdded();
816 } 801 }
817 } 802 }
OLDNEW

Powered by Google App Engine
This is Rietveld