| OLD | NEW |
| 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-2016 Eyeo GmbH | 3 * Copyright (C) 2006-2016 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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 import android.content.Intent; | 49 import android.content.Intent; |
| 50 import android.content.pm.PackageInfo; | 50 import android.content.pm.PackageInfo; |
| 51 import android.content.pm.PackageManager; | 51 import android.content.pm.PackageManager; |
| 52 import android.content.pm.ResolveInfo; | 52 import android.content.pm.ResolveInfo; |
| 53 import android.net.ConnectivityManager; | 53 import android.net.ConnectivityManager; |
| 54 import android.net.NetworkInfo; | 54 import android.net.NetworkInfo; |
| 55 import android.net.Uri; | 55 import android.net.Uri; |
| 56 import android.os.Handler; | 56 import android.os.Handler; |
| 57 import android.os.Looper; | 57 import android.os.Looper; |
| 58 import android.text.TextUtils; | 58 import android.text.TextUtils; |
| 59 import android.text.format.DateUtils; |
| 59 import android.util.Log; | 60 import android.util.Log; |
| 60 | 61 |
| 61 public final class Engine | 62 public final class Engine |
| 62 { | 63 { |
| 63 private static final String TAG = Engine.class.getSimpleName(); | 64 private static final String TAG = Engine.class.getSimpleName(); |
| 64 | 65 |
| 65 public static final String USER_FILTERS_TITLE = "__filters"; | 66 public static final String USER_FILTERS_TITLE = "__filters"; |
| 66 public static final String USER_EXCEPTIONS_TITLE = "__exceptions"; | 67 public static final String USER_EXCEPTIONS_TITLE = "__exceptions"; |
| 67 | 68 |
| 68 public static final String SBROWSER_APP_ID = "com.sec.android.app.sbrowser"; | 69 public static final String SBROWSER_APP_ID = "com.sec.android.app.sbrowser"; |
| 69 public static final String ACTION_OPEN_SETTINGS = "com.samsung.android.sbrowse
r.contentBlocker.ACTION_SETTING"; | 70 private static final String ACTION_OPEN_SETTINGS = "com.samsung.android.sbrows
er.contentBlocker.ACTION_SETTING"; |
| 70 public static final String ACTION_UPDATE = "com.samsung.android.sbrowser.conte
ntBlocker.ACTION_UPDATE"; | 71 private static final String ACTION_UPDATE = "com.samsung.android.sbrowser.cont
entBlocker.ACTION_UPDATE"; |
| 71 public static final String EASYLIST_URL = "https://easylist-downloads.adblockp
lus.org/easylist.txt"; | 72 private static final String EASYLIST_URL = "https://easylist-downloads.adblock
plus.org/easylist.txt"; |
| 72 | 73 |
| 73 public static final String SUBSCRIPTIONS_EXCEPTIONSURL = "subscriptions_except
ionsurl"; | 74 public static final String SUBSCRIPTIONS_EXCEPTIONSURL = "subscriptions_except
ionsurl"; |
| 74 | 75 |
| 75 // The value below specifies an interval of [x, 2*x[, where x = | 76 // The value below specifies an interval of [x, 2*x[, where x = |
| 76 // INITIAL_UPDATE_CHECK_DELAY_SECONDS | 77 // INITIAL_UPDATE_CHECK_DELAY |
| 77 private static final long INITIAL_UPDATE_CHECK_DELAY_SECONDS = 5; | 78 private static final long INITIAL_UPDATE_CHECK_DELAY = 5 * DateUtils.SECOND_IN
_MILLIS; |
| 78 private static final long UPDATE_CHECK_INTERVAL_MINUTES = 30; | 79 private static final long UPDATE_CHECK_INTERVAL = 30 * DateUtils.MINUTE_IN_MIL
LIS; |
| 79 private static final long BROADCAST_COMBINATION_DELAY_MILLIS = 2500; | 80 private static final long BROADCAST_COMBINATION_DELAY = 2500; |
| 80 | |
| 81 public static final long MILLIS_PER_SECOND = 1000; | |
| 82 public static final long MILLIS_PER_MINUTE = 60 * MILLIS_PER_SECOND; | |
| 83 public static final long MILLIS_PER_HOUR = 60 * MILLIS_PER_MINUTE; | |
| 84 public static final long MILLIS_PER_DAY = 24 * MILLIS_PER_HOUR; | |
| 85 | 81 |
| 86 private static final int NO_FLAG = 0; | 82 private static final int NO_FLAG = 0; |
| 87 private static final int OLDEST_SAMSUNG_INTERNET_5_VERSIONCODE = 500000000; | 83 private static final int OLDEST_SAMSUNG_INTERNET_5_VERSIONCODE = 500000000; |
| 88 | 84 |
| 89 private final ReentrantLock accessLock = new ReentrantLock(); | 85 private final ReentrantLock accessLock = new ReentrantLock(); |
| 90 private DefaultSubscriptions defaultSubscriptions; | 86 private DefaultSubscriptions defaultSubscriptions; |
| 91 private Subscriptions subscriptions; | 87 private Subscriptions subscriptions; |
| 92 private JSONPrefs jsonPrefs; | 88 private JSONPrefs jsonPrefs; |
| 93 private AppInfo appInfo; | 89 private AppInfo appInfo; |
| 94 private LinkedBlockingQueue<EngineEvent> engineEvents = new LinkedBlockingQueu
e<>(); | 90 private final LinkedBlockingQueue<EngineEvent> engineEvents = new LinkedBlocki
ngQueue<>(); |
| 95 private Thread handlerThread; | 91 private Thread handlerThread; |
| 96 private Downloader downloader; | 92 private Downloader downloader; |
| 97 private SubscriptionUpdateCallback subscriptionUpdateCallback; | 93 private SubscriptionUpdateCallback subscriptionUpdateCallback; |
| 98 private final Context serviceContext; | 94 private final Context serviceContext; |
| 99 private boolean wasFirstRun = false; | 95 private boolean wasFirstRun = false; |
| 100 private long nextUpdateBroadcast = Long.MAX_VALUE; | 96 private long nextUpdateBroadcast = Long.MAX_VALUE; |
| 101 | 97 |
| 102 private Engine(final Context context) | 98 private Engine(final Context context) |
| 103 { | 99 { |
| 104 this.serviceContext = context; | 100 this.serviceContext = context; |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 } | 168 } |
| 173 } | 169 } |
| 174 | 170 |
| 175 public void setSubscriptionUpdateCallback(final SubscriptionUpdateCallback sub
scriptionUpdateCallback) | 171 public void setSubscriptionUpdateCallback(final SubscriptionUpdateCallback sub
scriptionUpdateCallback) |
| 176 { | 172 { |
| 177 this.subscriptionUpdateCallback = subscriptionUpdateCallback; | 173 this.subscriptionUpdateCallback = subscriptionUpdateCallback; |
| 178 } | 174 } |
| 179 | 175 |
| 180 public void requestUpdateBroadcast() | 176 public void requestUpdateBroadcast() |
| 181 { | 177 { |
| 182 this.nextUpdateBroadcast = System.currentTimeMillis() + BROADCAST_COMBINATIO
N_DELAY_MILLIS; | 178 this.nextUpdateBroadcast = System.currentTimeMillis() + BROADCAST_COMBINATIO
N_DELAY; |
| 183 } | 179 } |
| 184 | 180 |
| 185 private void writeFileAndSendUpdateBroadcast() | 181 private void writeFileAndSendUpdateBroadcast() |
| 186 { | 182 { |
| 187 createAndWriteFile(); | 183 createAndWriteFile(); |
| 188 | 184 |
| 189 runOnUiThread(new Runnable() | 185 runOnUiThread(new Runnable() |
| 190 { | 186 { |
| 191 @Override | 187 @Override |
| 192 public void run() | 188 public void run() |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 419 } | 415 } |
| 420 | 416 |
| 421 Log.d(TAG, "Added " + additional + " additional default/built-in subscript
ions"); | 417 Log.d(TAG, "Added " + additional + " additional default/built-in subscript
ions"); |
| 422 engine.subscriptions.persistSubscriptions(); | 418 engine.subscriptions.persistSubscriptions(); |
| 423 } | 419 } |
| 424 | 420 |
| 425 engine.handlerThread = new Thread(new EventHandler(engine)); | 421 engine.handlerThread = new Thread(new EventHandler(engine)); |
| 426 engine.handlerThread.setDaemon(true); | 422 engine.handlerThread.setDaemon(true); |
| 427 engine.handlerThread.start(); | 423 engine.handlerThread.start(); |
| 428 | 424 |
| 429 engine.downloader = Downloader.create(context, engine); | 425 engine.downloader = Downloader.create(engine); |
| 430 | 426 |
| 431 final File cachedFilterFile = getCachedFilterFile(context); | 427 final File cachedFilterFile = getCachedFilterFile(context); |
| 432 if (cachedFilterFile == null || !cachedFilterFile.exists()) | 428 if (cachedFilterFile == null || !cachedFilterFile.exists()) |
| 433 { | 429 { |
| 434 engine.writeFileAndSendUpdateBroadcast(); | 430 engine.writeFileAndSendUpdateBroadcast(); |
| 435 } | 431 } |
| 436 | 432 |
| 437 return engine; | 433 return engine; |
| 438 } | 434 } |
| 439 | 435 |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 601 { | 597 { |
| 602 this.engine = engine; | 598 this.engine = engine; |
| 603 } | 599 } |
| 604 | 600 |
| 605 @Override | 601 @Override |
| 606 public void run() | 602 public void run() |
| 607 { | 603 { |
| 608 Log.d(TAG, "Handler thread started"); | 604 Log.d(TAG, "Handler thread started"); |
| 609 boolean interrupted = false; | 605 boolean interrupted = false; |
| 610 long nextUpdateCheck = System.currentTimeMillis() | 606 long nextUpdateCheck = System.currentTimeMillis() |
| 611 + (long) ((1 + Math.random()) * INITIAL_UPDATE_CHECK_DELAY_SECONDS * M
ILLIS_PER_SECOND); | 607 + (long) ((1 + Math.random()) * INITIAL_UPDATE_CHECK_DELAY); |
| 612 while (!interrupted) | 608 while (!interrupted) |
| 613 { | 609 { |
| 614 try | 610 try |
| 615 { | 611 { |
| 616 final EngineEvent event = this.engine.engineEvents.poll(100, TimeUnit.
MILLISECONDS); | 612 final EngineEvent event = this.engine.engineEvents.poll(100, TimeUnit.
MILLISECONDS); |
| 617 engine.lock(); | 613 engine.lock(); |
| 618 try | 614 try |
| 619 { | 615 { |
| 620 if (event != null) | 616 if (event != null) |
| 621 { | 617 { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 639 } | 635 } |
| 640 default: | 636 default: |
| 641 Log.d(TAG, "Unhandled type: " + event.getType()); | 637 Log.d(TAG, "Unhandled type: " + event.getType()); |
| 642 break; | 638 break; |
| 643 } | 639 } |
| 644 } | 640 } |
| 645 | 641 |
| 646 final long currentTime = System.currentTimeMillis(); | 642 final long currentTime = System.currentTimeMillis(); |
| 647 if (currentTime > nextUpdateCheck) | 643 if (currentTime > nextUpdateCheck) |
| 648 { | 644 { |
| 649 nextUpdateCheck = currentTime + UPDATE_CHECK_INTERVAL_MINUTES * MI
LLIS_PER_MINUTE; | 645 nextUpdateCheck = currentTime + UPDATE_CHECK_INTERVAL; |
| 650 | 646 |
| 651 this.engine.subscriptions.checkForUpdates(); | 647 this.engine.subscriptions.checkForUpdates(); |
| 652 } | 648 } |
| 653 | 649 |
| 654 if (currentTime > this.engine.nextUpdateBroadcast) | 650 if (currentTime > this.engine.nextUpdateBroadcast) |
| 655 { | 651 { |
| 656 this.engine.nextUpdateBroadcast = Long.MAX_VALUE; | 652 this.engine.nextUpdateBroadcast = Long.MAX_VALUE; |
| 657 Log.d(TAG, "Sending update broadcast"); | 653 Log.d(TAG, "Sending update broadcast"); |
| 658 this.engine.writeFileAndSendUpdateBroadcast(); | 654 this.engine.writeFileAndSendUpdateBroadcast(); |
| 659 } | 655 } |
| (...skipping 21 matching lines...) Expand all Loading... |
| 681 { | 677 { |
| 682 public enum EngineEventType | 678 public enum EngineEventType |
| 683 { | 679 { |
| 684 CHANGE_ENABLED_STATE, | 680 CHANGE_ENABLED_STATE, |
| 685 FORCE_DOWNLOAD, | 681 FORCE_DOWNLOAD, |
| 686 DOWNLOAD_FINISHED | 682 DOWNLOAD_FINISHED |
| 687 } | 683 } |
| 688 | 684 |
| 689 private final EngineEventType type; | 685 private final EngineEventType type; |
| 690 | 686 |
| 691 protected EngineEvent(final EngineEventType type) | 687 EngineEvent(final EngineEventType type) |
| 692 { | 688 { |
| 693 this.type = type; | 689 this.type = type; |
| 694 } | 690 } |
| 695 | 691 |
| 696 public EngineEventType getType() | 692 public EngineEventType getType() |
| 697 { | 693 { |
| 698 return this.type; | 694 return this.type; |
| 699 } | 695 } |
| 700 } | 696 } |
| 701 | 697 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 762 { | 758 { |
| 763 this.downloader.connectivityChanged(); | 759 this.downloader.connectivityChanged(); |
| 764 } | 760 } |
| 765 | 761 |
| 766 public interface SubscriptionUpdateCallback | 762 public interface SubscriptionUpdateCallback |
| 767 { | 763 { |
| 768 void subscriptionUpdateRequested(boolean enabled); | 764 void subscriptionUpdateRequested(boolean enabled); |
| 769 void subscriptionUpdatedApplied(); | 765 void subscriptionUpdatedApplied(); |
| 770 } | 766 } |
| 771 } | 767 } |
| OLD | NEW |