| 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 41 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 52 import android.content.pm.PackageInfo; | 52 import android.content.pm.PackageInfo; | 
| 53 import android.content.pm.PackageManager; | 53 import android.content.pm.PackageManager; | 
| 54 import android.content.pm.ResolveInfo; | 54 import android.content.pm.ResolveInfo; | 
| 55 import android.net.ConnectivityManager; | 55 import android.net.ConnectivityManager; | 
| 56 import android.net.NetworkInfo; | 56 import android.net.NetworkInfo; | 
| 57 import android.net.Uri; | 57 import android.net.Uri; | 
| 58 import android.os.Handler; | 58 import android.os.Handler; | 
| 59 import android.os.Looper; | 59 import android.os.Looper; | 
| 60 import android.preference.PreferenceManager; | 60 import android.preference.PreferenceManager; | 
| 61 import android.text.TextUtils; | 61 import android.text.TextUtils; | 
|  | 62 import android.text.format.DateUtils; | 
| 62 import android.util.Log; | 63 import android.util.Log; | 
| 63 | 64 | 
| 64 public final class Engine | 65 public final class Engine | 
| 65 { | 66 { | 
| 66   private static final String TAG = Engine.class.getSimpleName(); | 67   private static final String TAG = Engine.class.getSimpleName(); | 
| 67 | 68 | 
| 68   // TODO make use of this regex's | 69   // TODO make use of this regex's | 
| 69   public static final Pattern RE_SUBSCRIPTION_HEADER = Pattern.compile( | 70   public static final Pattern RE_SUBSCRIPTION_HEADER = Pattern.compile( | 
| 70       "\\[Adblock(?:\\s*Plus\\s*([\\d\\.]+)?)?\\]", Pattern.CASE_INSENSITIVE); | 71       "\\[Adblock(?:\\s*Plus\\s*([\\d\\.]+)?)?\\]", Pattern.CASE_INSENSITIVE); | 
| 71   public static final Pattern RE_FILTER_META = Pattern.compile("^\\s*!\\s*(\\w+)
     \\s*:\\s*(.*)"); | 72   public static final Pattern RE_FILTER_META = Pattern.compile("^\\s*!\\s*(\\w+)
     \\s*:\\s*(.*)"); | 
| 72   public static final Pattern RE_FILTER_ELEMHIDE = Pattern | 73   public static final Pattern RE_FILTER_ELEMHIDE = Pattern | 
| 73       .compile("^([^\\/\\*\\|\\@\"!]*?)#(\\@)?(?:([\\w\\-]+|\\*)((?:\\([\\w\\-]+
     (?:[$^*]?=[^\\(\\)\"]*)?\\))*)|#([^{}]+))$"); | 74       .compile("^([^\\/\\*\\|\\@\"!]*?)#(\\@)?(?:([\\w\\-]+|\\*)((?:\\([\\w\\-]+
     (?:[$^*]?=[^\\(\\)\"]*)?\\))*)|#([^{}]+))$"); | 
| 74   public static final Pattern RE_FILTER_REGEXP = Pattern | 75   public static final Pattern RE_FILTER_REGEXP = Pattern | 
| 75       .compile("^(@@)?\\/.*\\/(?:\\$~?[\\w\\-]+(?:=[^,\\s]+)?(?:,~?[\\w\\-]+(?:=
     [^,\\s]+)?)*)?$"); | 76       .compile("^(@@)?\\/.*\\/(?:\\$~?[\\w\\-]+(?:=[^,\\s]+)?(?:,~?[\\w\\-]+(?:=
     [^,\\s]+)?)*)?$"); | 
| 76   public static final Pattern RE_FILTER_OPTIONS = Pattern | 77   public static final Pattern RE_FILTER_OPTIONS = Pattern | 
| 77       .compile("\\$(~?[\\w\\-]+(?:=[^,\\s]+)?(?:,~?[\\w\\-]+(?:=[^,\\s]+)?)*)$")
     ; | 78       .compile("\\$(~?[\\w\\-]+(?:=[^,\\s]+)?(?:,~?[\\w\\-]+(?:=[^,\\s]+)?)*)$")
     ; | 
| 78   public static final Pattern RE_FILTER_CSSPROPERTY = Pattern | 79   public static final Pattern RE_FILTER_CSSPROPERTY = Pattern | 
| 79       .compile("\\[\\-abp\\-properties=([\"'])([^\"']+)\\1\\]"); | 80       .compile("\\[\\-abp\\-properties=([\"'])([^\"']+)\\1\\]"); | 
| 80 | 81 | 
| 81   public static final String USER_FILTERS_TITLE = "__filters"; | 82   public static final String USER_FILTERS_TITLE = "__filters"; | 
| 82   public static final String USER_EXCEPTIONS_TITLE = "__exceptions"; | 83   public static final String USER_EXCEPTIONS_TITLE = "__exceptions"; | 
| 83 | 84 | 
| 84   public static final String SBROWSER_APP_ID = "com.sec.android.app.sbrowser"; | 85   public static final String SBROWSER_APP_ID = "com.sec.android.app.sbrowser"; | 
| 85   public static final String ACTION_OPEN_SETTINGS = "com.samsung.android.sbrowse
     r.contentBlocker.ACTION_SETTING"; | 86   private static final String ACTION_OPEN_SETTINGS = "com.samsung.android.sbrows
     er.contentBlocker.ACTION_SETTING"; | 
| 86   public static final String ACTION_UPDATE = "com.samsung.android.sbrowser.conte
     ntBlocker.ACTION_UPDATE"; | 87   private static final String ACTION_UPDATE = "com.samsung.android.sbrowser.cont
     entBlocker.ACTION_UPDATE"; | 
| 87   public static final String EASYLIST_URL = "https://easylist-downloads.adblockp
     lus.org/easylist.txt"; | 88   private static final String EASYLIST_URL = "https://easylist-downloads.adblock
     plus.org/easylist.txt"; | 
| 88 | 89 | 
| 89   public static final String SUBSCRIPTIONS_EXCEPTIONSURL = "subscriptions_except
     ionsurl"; | 90   public static final String SUBSCRIPTIONS_EXCEPTIONSURL = "subscriptions_except
     ionsurl"; | 
| 90 | 91 | 
| 91   private static final String PREFS_KEY_PREVIOUS_VERSION = "key_previous_version
     "; | 92   private static final String PREFS_KEY_PREVIOUS_VERSION = "key_previous_version
     "; | 
| 92 | 93 | 
| 93   // The value below specifies an interval of [x, 2*x[, where x = | 94   // The value below specifies an interval of [x, 2*x[, where x = | 
| 94   // INITIAL_UPDATE_CHECK_DELAY_SECONDS | 95   // INITIAL_UPDATE_CHECK_DELAY | 
| 95   private static final long INITIAL_UPDATE_CHECK_DELAY_SECONDS = 5; | 96   private static final long INITIAL_UPDATE_CHECK_DELAY = 5 * DateUtils.SECOND_IN
     _MILLIS; | 
| 96   private static final long UPDATE_CHECK_INTERVAL_MINUTES = 30; | 97   private static final long UPDATE_CHECK_INTERVAL = 30 * DateUtils.MINUTE_IN_MIL
     LIS; | 
| 97   private static final long BROADCAST_COMBINATION_DELAY_MILLIS = 2500; | 98   private static final long BROADCAST_COMBINATION_DELAY = 2500; | 
| 98 |  | 
| 99   public static final long MILLIS_PER_SECOND = 1000; |  | 
| 100   public static final long MILLIS_PER_MINUTE = 60 * MILLIS_PER_SECOND; |  | 
| 101   public static final long MILLIS_PER_HOUR = 60 * MILLIS_PER_MINUTE; |  | 
| 102   public static final long MILLIS_PER_DAY = 24 * MILLIS_PER_HOUR; |  | 
| 103 | 99 | 
| 104   private static final int NO_FLAG = 0; | 100   private static final int NO_FLAG = 0; | 
| 105   private static final int OLDEST_SAMSUNG_INTERNET_5_VERSIONCODE = 500000000; | 101   private static final int OLDEST_SAMSUNG_INTERNET_5_VERSIONCODE = 500000000; | 
| 106 | 102 | 
| 107   private final ReentrantLock accessLock = new ReentrantLock(); | 103   private final ReentrantLock accessLock = new ReentrantLock(); | 
| 108   private DefaultSubscriptions defaultSubscriptions; | 104   private DefaultSubscriptions defaultSubscriptions; | 
| 109   private Subscriptions subscriptions; | 105   private Subscriptions subscriptions; | 
| 110   private JSONPrefs jsonPrefs; | 106   private JSONPrefs jsonPrefs; | 
| 111   private AppInfo appInfo; | 107   private AppInfo appInfo; | 
| 112   private LinkedBlockingQueue<EngineEvent> engineEvents = new LinkedBlockingQueu
     e<>(); | 108   private final LinkedBlockingQueue<EngineEvent> engineEvents = new LinkedBlocki
     ngQueue<>(); | 
| 113   private Thread handlerThread; | 109   private Thread handlerThread; | 
| 114   private Downloader downloader; | 110   private Downloader downloader; | 
| 115   private final Context serviceContext; | 111   private final Context serviceContext; | 
| 116   private boolean wasFirstRun = false; | 112   private boolean wasFirstRun = false; | 
| 117   private long nextUpdateBroadcast = Long.MAX_VALUE; | 113   private long nextUpdateBroadcast = Long.MAX_VALUE; | 
| 118 | 114 | 
| 119   private Engine(final Context context) | 115   private Engine(final Context context) | 
| 120   { | 116   { | 
| 121     this.serviceContext = context; | 117     this.serviceContext = context; | 
| 122   } | 118   } | 
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 187       Log.d(TAG, "No compatible Samsung Browser found.", e); | 183       Log.d(TAG, "No compatible Samsung Browser found.", e); | 
| 188       return false; | 184       return false; | 
| 189     } | 185     } | 
| 190   } | 186   } | 
| 191 | 187 | 
| 192   public void requestUpdateBroadcast() | 188   public void requestUpdateBroadcast() | 
| 193   { | 189   { | 
| 194     this.lock(); | 190     this.lock(); | 
| 195     try | 191     try | 
| 196     { | 192     { | 
| 197       this.nextUpdateBroadcast = System.currentTimeMillis() + BROADCAST_COMBINAT
     ION_DELAY_MILLIS; | 193       this.nextUpdateBroadcast = System.currentTimeMillis() + BROADCAST_COMBINAT
     ION_DELAY; | 
| 198     } | 194     } | 
| 199     finally | 195     finally | 
| 200     { | 196     { | 
| 201       this.unlock(); | 197       this.unlock(); | 
| 202     } | 198     } | 
| 203   } | 199   } | 
| 204 | 200 | 
| 205   private void writeFileAndSendUpdateBroadcast() | 201   private void writeFileAndSendUpdateBroadcast() | 
| 206   { | 202   { | 
| 207     createAndWriteFile(); | 203     createAndWriteFile(); | 
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 436       } | 432       } | 
| 437 | 433 | 
| 438       Log.d(TAG, "Added " + additional + " additional default/built-in subscript
     ions"); | 434       Log.d(TAG, "Added " + additional + " additional default/built-in subscript
     ions"); | 
| 439       engine.subscriptions.persistSubscriptions(); | 435       engine.subscriptions.persistSubscriptions(); | 
| 440     } | 436     } | 
| 441 | 437 | 
| 442     engine.handlerThread = new Thread(new EventHandler(engine)); | 438     engine.handlerThread = new Thread(new EventHandler(engine)); | 
| 443     engine.handlerThread.setDaemon(true); | 439     engine.handlerThread.setDaemon(true); | 
| 444     engine.handlerThread.start(); | 440     engine.handlerThread.start(); | 
| 445 | 441 | 
| 446     engine.downloader = Downloader.create(context, engine); | 442     engine.downloader = Downloader.create(engine); | 
| 447 | 443 | 
| 448     final File cachedFilterFile = getCachedFilterFile(context); | 444     final File cachedFilterFile = getCachedFilterFile(context); | 
| 449     if (cachedFilterFile == null || !cachedFilterFile.exists()) | 445     if (cachedFilterFile == null || !cachedFilterFile.exists()) | 
| 450     { | 446     { | 
| 451       engine.writeFileAndSendUpdateBroadcast(); | 447       engine.writeFileAndSendUpdateBroadcast(); | 
| 452     } | 448     } | 
| 453 | 449 | 
| 454     return engine; | 450     return engine; | 
| 455   } | 451   } | 
| 456 | 452 | 
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 621     { | 617     { | 
| 622       this.engine = engine; | 618       this.engine = engine; | 
| 623     } | 619     } | 
| 624 | 620 | 
| 625     @Override | 621     @Override | 
| 626     public void run() | 622     public void run() | 
| 627     { | 623     { | 
| 628       Log.d(TAG, "Handler thread started"); | 624       Log.d(TAG, "Handler thread started"); | 
| 629       boolean interrupted = false; | 625       boolean interrupted = false; | 
| 630       long nextUpdateCheck = System.currentTimeMillis() | 626       long nextUpdateCheck = System.currentTimeMillis() | 
| 631           + (long) ((1 + Math.random()) * INITIAL_UPDATE_CHECK_DELAY_SECONDS * M
     ILLIS_PER_SECOND); | 627           + (long) ((1 + Math.random()) * INITIAL_UPDATE_CHECK_DELAY); | 
| 632       while (!interrupted) | 628       while (!interrupted) | 
| 633       { | 629       { | 
| 634         try | 630         try | 
| 635         { | 631         { | 
| 636           final EngineEvent event = this.engine.engineEvents.poll(100, TimeUnit.
     MILLISECONDS); | 632           final EngineEvent event = this.engine.engineEvents.poll(100, TimeUnit.
     MILLISECONDS); | 
| 637           engine.lock(); | 633           engine.lock(); | 
| 638           try | 634           try | 
| 639           { | 635           { | 
| 640             if (event != null) | 636             if (event != null) | 
| 641             { | 637             { | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
| 659                 } | 655                 } | 
| 660                 default: | 656                 default: | 
| 661                   Log.d(TAG, "Unhandled type: " + event.getType()); | 657                   Log.d(TAG, "Unhandled type: " + event.getType()); | 
| 662                   break; | 658                   break; | 
| 663               } | 659               } | 
| 664             } | 660             } | 
| 665 | 661 | 
| 666             final long currentTime = System.currentTimeMillis(); | 662             final long currentTime = System.currentTimeMillis(); | 
| 667             if (currentTime > nextUpdateCheck) | 663             if (currentTime > nextUpdateCheck) | 
| 668             { | 664             { | 
| 669               nextUpdateCheck = currentTime + UPDATE_CHECK_INTERVAL_MINUTES * MI
     LLIS_PER_MINUTE; | 665               nextUpdateCheck = currentTime + UPDATE_CHECK_INTERVAL; | 
| 670 | 666 | 
| 671               this.engine.subscriptions.checkForUpdates(); | 667               this.engine.subscriptions.checkForUpdates(); | 
| 672             } | 668             } | 
| 673 | 669 | 
| 674             if (currentTime > this.engine.nextUpdateBroadcast) | 670             if (currentTime > this.engine.nextUpdateBroadcast) | 
| 675             { | 671             { | 
| 676               this.engine.nextUpdateBroadcast = Long.MAX_VALUE; | 672               this.engine.nextUpdateBroadcast = Long.MAX_VALUE; | 
| 677               Log.d(TAG, "Sending update broadcast"); | 673               Log.d(TAG, "Sending update broadcast"); | 
| 678               this.engine.writeFileAndSendUpdateBroadcast(); | 674               this.engine.writeFileAndSendUpdateBroadcast(); | 
| 679             } | 675             } | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
| 701   { | 697   { | 
| 702     public enum EngineEventType | 698     public enum EngineEventType | 
| 703     { | 699     { | 
| 704       CHANGE_ENABLED_STATE, | 700       CHANGE_ENABLED_STATE, | 
| 705       FORCE_DOWNLOAD, | 701       FORCE_DOWNLOAD, | 
| 706       DOWNLOAD_FINISHED | 702       DOWNLOAD_FINISHED | 
| 707     } | 703     } | 
| 708 | 704 | 
| 709     private final EngineEventType type; | 705     private final EngineEventType type; | 
| 710 | 706 | 
| 711     protected EngineEvent(final EngineEventType type) | 707     EngineEvent(final EngineEventType type) | 
| 712     { | 708     { | 
| 713       this.type = type; | 709       this.type = type; | 
| 714     } | 710     } | 
| 715 | 711 | 
| 716     public EngineEventType getType() | 712     public EngineEventType getType() | 
| 717     { | 713     { | 
| 718       return this.type; | 714       return this.type; | 
| 719     } | 715     } | 
| 720   } | 716   } | 
| 721 | 717 | 
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 776       Log.d(TAG, headers.toString()); | 772       Log.d(TAG, headers.toString()); | 
| 777       this.downloader.enqueueDownload(this.createDownloadURL(sub), sub.getId(), 
     headers); | 773       this.downloader.enqueueDownload(this.createDownloadURL(sub), sub.getId(), 
     headers); | 
| 778     } | 774     } | 
| 779   } | 775   } | 
| 780 | 776 | 
| 781   public void connectivityChanged() | 777   public void connectivityChanged() | 
| 782   { | 778   { | 
| 783     this.downloader.connectivityChanged(); | 779     this.downloader.connectivityChanged(); | 
| 784   } | 780   } | 
| 785 } | 781 } | 
| OLD | NEW | 
|---|