| Index: src/org/adblockplus/sbrowser/contentblocker/engine/Engine.java |
| =================================================================== |
| --- a/src/org/adblockplus/sbrowser/contentblocker/engine/Engine.java |
| +++ b/src/org/adblockplus/sbrowser/contentblocker/engine/Engine.java |
| @@ -44,16 +44,17 @@ import android.content.Intent; |
| import android.content.SharedPreferences; |
| 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.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( |
| @@ -72,17 +73,17 @@ public final class Engine |
| public static final String USER_EXCEPTIONS_TITLE = "__exceptions"; |
| 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"; |
| public static final String SUBSCRIPTIONS_EXCEPTIONSURL = "subscriptions_exceptionsurl"; |
| - private static final String URL_ENCODE_CHARSET = "UTF-8"; |
| + public static final String CHARSET_UTF_8 = "UTF-8"; |
| 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; |
| @@ -435,28 +436,28 @@ public final class Engine |
| engine.downloader = Downloader.create(context, engine); |
| return engine; |
| } |
| public static String readFileAsString(InputStream instream) throws IOException |
| { |
| final StringBuilder sb = new StringBuilder(); |
| - final BufferedReader r = new BufferedReader(new InputStreamReader(instream, "UTF-8")); |
| + final BufferedReader r = new BufferedReader(new InputStreamReader(instream, CHARSET_UTF_8)); |
| for (int ch = r.read(); ch != -1; ch = r.read()) |
| { |
| sb.append((char) ch); |
| } |
| return sb.toString(); |
| } |
| public static List<String> readLines(InputStream instream) throws IOException |
| { |
| final ArrayList<String> list = new ArrayList<String>(); |
| - final BufferedReader r = new BufferedReader(new InputStreamReader(instream, "UTF-8")); |
| + final BufferedReader r = new BufferedReader(new InputStreamReader(instream, CHARSET_UTF_8)); |
| for (String line = r.readLine(); line != null; line = r.readLine()) |
| { |
| list.add(line); |
| } |
| return list; |
| } |
| public static File getOrCreateCachedFilterFile(Context context) throws IOException |
| @@ -470,17 +471,17 @@ public final class Engine |
| Log.d(TAG, "Cached filter file not found. Using dummy filter file"); |
| final File dummyFilterFile = getDummyFilterFile(context); |
| if (!dummyFilterFile.exists()) |
| { |
| Log.d(TAG, "Creating dummy filter file..."); |
| dummyFilterFile.getParentFile().mkdirs(); |
| final BufferedWriter writer = new BufferedWriter( |
| - new OutputStreamWriter(new FileOutputStream(dummyFilterFile), "UTF-8")); |
| + new OutputStreamWriter(new FileOutputStream(dummyFilterFile), CHARSET_UTF_8)); |
| try |
| { |
| writeFilterHeaders(writer); |
| } |
| finally |
| { |
| writer.close(); |
| } |
| @@ -531,27 +532,27 @@ public final class Engine |
| sb.append('&'); |
| } |
| else |
| { |
| sb.append('?'); |
| } |
| sb.append("addonName="); |
| - sb.append(URLEncoder.encode(this.appInfo.addonName, URL_ENCODE_CHARSET)); |
| + sb.append(URLEncoder.encode(this.appInfo.addonName, CHARSET_UTF_8)); |
| sb.append("&addonVersion="); |
| - sb.append(URLEncoder.encode(this.appInfo.addonVersion, URL_ENCODE_CHARSET)); |
| + sb.append(URLEncoder.encode(this.appInfo.addonVersion, CHARSET_UTF_8)); |
| sb.append("&application="); |
| - sb.append(URLEncoder.encode(this.appInfo.application, URL_ENCODE_CHARSET)); |
| + sb.append(URLEncoder.encode(this.appInfo.application, CHARSET_UTF_8)); |
| sb.append("&applicationVersion="); |
| - sb.append(URLEncoder.encode(this.appInfo.applicationVersion, URL_ENCODE_CHARSET)); |
| + sb.append(URLEncoder.encode(this.appInfo.applicationVersion, CHARSET_UTF_8)); |
| sb.append("&platform="); |
| - sb.append(URLEncoder.encode(this.appInfo.platform, URL_ENCODE_CHARSET)); |
| + sb.append(URLEncoder.encode(this.appInfo.platform, CHARSET_UTF_8)); |
| sb.append("&platformVersion="); |
| - sb.append(URLEncoder.encode(this.appInfo.platformVersion, URL_ENCODE_CHARSET)); |
| + sb.append(URLEncoder.encode(this.appInfo.platformVersion, CHARSET_UTF_8)); |
| sb.append("&lastVersion="); |
| sb.append(sub.getVersion()); |
| sb.append("&downloadCount="); |
| final long downloadCount = sub.getDownloadCount(); |
| if (downloadCount < 5) |
| { |
| sb.append(downloadCount); |
| } |
| @@ -706,25 +707,28 @@ public final class Engine |
| } |
| } |
| public void enqueueDownload(final Subscription sub, final boolean forced) throws IOException |
| { |
| if (sub.getURL() != null && sub.shouldUpdate(forced)) |
| { |
| final HashMap<String, String> headers = new HashMap<String, String>(); |
| - final String lastModified = sub.getMeta(Subscription.KEY_HTTP_LAST_MODIFIED); |
| - if (lastModified != null) |
| + if (sub.isMetaDataValid() && sub.isFiltersValid()) |
| { |
| - headers.put("If-Modified-Since", lastModified); |
| - } |
| - final String etag = sub.getMeta(Subscription.KEY_HTTP_ETAG); |
| - if (etag != null) |
| - { |
| - headers.put("If-None-Match", etag); |
| + final String lastModified = sub.getMeta(Subscription.KEY_HTTP_LAST_MODIFIED); |
| + if (!TextUtils.isEmpty(lastModified)) |
| + { |
| + headers.put("If-Modified-Since", lastModified); |
| + } |
| + final String etag = sub.getMeta(Subscription.KEY_HTTP_ETAG); |
| + if (!TextUtils.isEmpty(etag)) |
| + { |
| + headers.put("If-None-Match", etag); |
| + } |
| } |
| Log.d(TAG, headers.toString()); |
| this.downloader.enqueueDownload(this.createDownloadURL(sub), sub.getId(), headers); |
| } |
| } |
| public void connectivityChanged() |
| { |