| Index: adblockplussbrowser/src/org/adblockplus/sbrowser/contentblocker/engine/Engine.java | 
| =================================================================== | 
| --- a/adblockplussbrowser/src/org/adblockplus/sbrowser/contentblocker/engine/Engine.java | 
| +++ b/adblockplussbrowser/src/org/adblockplus/sbrowser/contentblocker/engine/Engine.java | 
| @@ -54,16 +54,17 @@ import android.content.pm.PackageManager | 
| import android.content.pm.ResolveInfo; | 
| import android.net.ConnectivityManager; | 
| import android.net.NetworkInfo; | 
| import android.net.Uri; | 
| import android.os.Handler; | 
| import android.os.Looper; | 
| import android.preference.PreferenceManager; | 
| import android.text.TextUtils; | 
| +import android.text.format.DateUtils; | 
| import android.util.Log; | 
|  | 
| public final class Engine | 
| { | 
| private static final String TAG = Engine.class.getSimpleName(); | 
|  | 
| // TODO make use of this regex's | 
| public static final Pattern RE_SUBSCRIPTION_HEADER = Pattern.compile( | 
| @@ -77,44 +78,39 @@ public final class Engine | 
| .compile("\\$(~?[\\w\\-]+(?:=[^,\\s]+)?(?:,~?[\\w\\-]+(?:=[^,\\s]+)?)*)$"); | 
| public static final Pattern RE_FILTER_CSSPROPERTY = Pattern | 
| .compile("\\[\\-abp\\-properties=([\"'])([^\"']+)\\1\\]"); | 
|  | 
| public static final String USER_FILTERS_TITLE = "__filters"; | 
| public static final String USER_EXCEPTIONS_TITLE = "__exceptions"; | 
|  | 
| public static final String SBROWSER_APP_ID = "com.sec.android.app.sbrowser"; | 
| -  public static final String ACTION_OPEN_SETTINGS = "com.samsung.android.sbrowser.contentBlocker.ACTION_SETTING"; | 
| -  public static final String ACTION_UPDATE = "com.samsung.android.sbrowser.contentBlocker.ACTION_UPDATE"; | 
| -  public static final String EASYLIST_URL = "https://easylist-downloads.adblockplus.org/easylist.txt"; | 
| +  private static final String ACTION_OPEN_SETTINGS = "com.samsung.android.sbrowser.contentBlocker.ACTION_SETTING"; | 
| +  private static final String ACTION_UPDATE = "com.samsung.android.sbrowser.contentBlocker.ACTION_UPDATE"; | 
| +  private static final String EASYLIST_URL = "https://easylist-downloads.adblockplus.org/easylist.txt"; | 
|  | 
| public static final String SUBSCRIPTIONS_EXCEPTIONSURL = "subscriptions_exceptionsurl"; | 
|  | 
| private static final String PREFS_KEY_PREVIOUS_VERSION = "key_previous_version"; | 
|  | 
| // The value below specifies an interval of [x, 2*x[, where x = | 
| -  // INITIAL_UPDATE_CHECK_DELAY_SECONDS | 
| -  private static final long INITIAL_UPDATE_CHECK_DELAY_SECONDS = 5; | 
| -  private static final long UPDATE_CHECK_INTERVAL_MINUTES = 30; | 
| -  private static final long BROADCAST_COMBINATION_DELAY_MILLIS = 2500; | 
| - | 
| -  public static final long MILLIS_PER_SECOND = 1000; | 
| -  public static final long MILLIS_PER_MINUTE = 60 * MILLIS_PER_SECOND; | 
| -  public static final long MILLIS_PER_HOUR = 60 * MILLIS_PER_MINUTE; | 
| -  public static final long MILLIS_PER_DAY = 24 * MILLIS_PER_HOUR; | 
| +  // INITIAL_UPDATE_CHECK_DELAY | 
| +  private static final long INITIAL_UPDATE_CHECK_DELAY = 5 * DateUtils.SECOND_IN_MILLIS; | 
| +  private static final long UPDATE_CHECK_INTERVAL = 30 * DateUtils.MINUTE_IN_MILLIS; | 
| +  private static final long BROADCAST_COMBINATION_DELAY = 2500; | 
|  | 
| private static final int NO_FLAG = 0; | 
| private static final int OLDEST_SAMSUNG_INTERNET_5_VERSIONCODE = 500000000; | 
|  | 
| private final ReentrantLock accessLock = new ReentrantLock(); | 
| private DefaultSubscriptions defaultSubscriptions; | 
| private Subscriptions subscriptions; | 
| private JSONPrefs jsonPrefs; | 
| private AppInfo appInfo; | 
| -  private LinkedBlockingQueue<EngineEvent> engineEvents = new LinkedBlockingQueue<>(); | 
| +  private final LinkedBlockingQueue<EngineEvent> engineEvents = new LinkedBlockingQueue<>(); | 
| private Thread handlerThread; | 
| private Downloader downloader; | 
| private final Context serviceContext; | 
| private boolean wasFirstRun = false; | 
| private long nextUpdateBroadcast = Long.MAX_VALUE; | 
|  | 
| private Engine(final Context context) | 
| { | 
| @@ -189,17 +185,17 @@ public final class Engine | 
| } | 
| } | 
|  | 
| public void requestUpdateBroadcast() | 
| { | 
| this.lock(); | 
| try | 
| { | 
| -      this.nextUpdateBroadcast = System.currentTimeMillis() + BROADCAST_COMBINATION_DELAY_MILLIS; | 
| +      this.nextUpdateBroadcast = System.currentTimeMillis() + BROADCAST_COMBINATION_DELAY; | 
| } | 
| finally | 
| { | 
| this.unlock(); | 
| } | 
| } | 
|  | 
| private void writeFileAndSendUpdateBroadcast() | 
| @@ -438,17 +434,17 @@ public final class Engine | 
| Log.d(TAG, "Added " + additional + " additional default/built-in subscriptions"); | 
| engine.subscriptions.persistSubscriptions(); | 
| } | 
|  | 
| engine.handlerThread = new Thread(new EventHandler(engine)); | 
| engine.handlerThread.setDaemon(true); | 
| engine.handlerThread.start(); | 
|  | 
| -    engine.downloader = Downloader.create(context, engine); | 
| +    engine.downloader = Downloader.create(engine); | 
|  | 
| final File cachedFilterFile = getCachedFilterFile(context); | 
| if (cachedFilterFile == null || !cachedFilterFile.exists()) | 
| { | 
| engine.writeFileAndSendUpdateBroadcast(); | 
| } | 
|  | 
| return engine; | 
| @@ -623,17 +619,17 @@ public final class Engine | 
| } | 
|  | 
| @Override | 
| public void run() | 
| { | 
| Log.d(TAG, "Handler thread started"); | 
| boolean interrupted = false; | 
| long nextUpdateCheck = System.currentTimeMillis() | 
| -          + (long) ((1 + Math.random()) * INITIAL_UPDATE_CHECK_DELAY_SECONDS * MILLIS_PER_SECOND); | 
| +          + (long) ((1 + Math.random()) * INITIAL_UPDATE_CHECK_DELAY); | 
| while (!interrupted) | 
| { | 
| try | 
| { | 
| final EngineEvent event = this.engine.engineEvents.poll(100, TimeUnit.MILLISECONDS); | 
| engine.lock(); | 
| try | 
| { | 
| @@ -661,17 +657,17 @@ public final class Engine | 
| Log.d(TAG, "Unhandled type: " + event.getType()); | 
| break; | 
| } | 
| } | 
|  | 
| final long currentTime = System.currentTimeMillis(); | 
| if (currentTime > nextUpdateCheck) | 
| { | 
| -              nextUpdateCheck = currentTime + UPDATE_CHECK_INTERVAL_MINUTES * MILLIS_PER_MINUTE; | 
| +              nextUpdateCheck = currentTime + UPDATE_CHECK_INTERVAL; | 
|  | 
| this.engine.subscriptions.checkForUpdates(); | 
| } | 
|  | 
| if (currentTime > this.engine.nextUpdateBroadcast) | 
| { | 
| this.engine.nextUpdateBroadcast = Long.MAX_VALUE; | 
| Log.d(TAG, "Sending update broadcast"); | 
| @@ -703,17 +699,17 @@ public final class Engine | 
| { | 
| CHANGE_ENABLED_STATE, | 
| FORCE_DOWNLOAD, | 
| DOWNLOAD_FINISHED | 
| } | 
|  | 
| private final EngineEventType type; | 
|  | 
| -    protected EngineEvent(final EngineEventType type) | 
| +    EngineEvent(final EngineEventType type) | 
| { | 
| this.type = type; | 
| } | 
|  | 
| public EngineEventType getType() | 
| { | 
| return this.type; | 
| } | 
|  |