| 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() | 
| { |