Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: adblockplussbrowser/src/main/java/org/adblockplus/sbrowser/contentblocker/engine/Engine.java

Issue 29673565: Issue 6066 - Implement 'force update' functionality for subscriptions (Closed)
Patch Set: Fixes Created Jan. 23, 2018, 3:12 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: adblockplussbrowser/src/main/java/org/adblockplus/sbrowser/contentblocker/engine/Engine.java
===================================================================
--- a/adblockplussbrowser/src/main/java/org/adblockplus/sbrowser/contentblocker/engine/Engine.java
+++ b/adblockplussbrowser/src/main/java/org/adblockplus/sbrowser/contentblocker/engine/Engine.java
@@ -38,32 +38,34 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;
import org.adblockplus.adblockplussbrowser.R;
+import org.adblockplus.sbrowser.contentblocker.util.ConnectivityUtils;
import org.adblockplus.sbrowser.contentblocker.util.SharedPrefsUtils;
import org.adblockplus.sbrowser.contentblocker.util.SubscriptionUtils;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
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.text.TextUtils;
import android.text.format.DateUtils;
import android.util.Log;
+import android.widget.Toast;
public final class Engine
{
private static final String TAG = Engine.class.getSimpleName();
public static final String USER_FILTERS_TITLE = "__filters";
public static final String USER_EXCEPTIONS_TITLE = "__exceptions";
@@ -191,52 +193,34 @@ public final class Engine
final Intent intent = new Intent();
intent.setAction(ACTION_UPDATE);
intent.setData(Uri.parse("package:" + Engine.this.serviceContext.getPackageName()));
Engine.this.serviceContext.sendBroadcast(intent);
}
});
}
- boolean canUseInternet()
+ boolean canUseInternet(final boolean allowMetered)
{
- final ConnectivityManager connManager = (ConnectivityManager) this.serviceContext
- .getSystemService(Context.CONNECTIVITY_SERVICE);
- final NetworkInfo current = connManager.getActiveNetworkInfo();
- if (current == null)
- {
- return false;
- }
-
- if (wasFirstRun())
- {
- return true;
- }
-
- final boolean wifiOnly = "1".equals(SharedPrefsUtils.getString(
- this.serviceContext, R.string.key_automatic_updates , "1"));
+ // allow a metered connection to update default subscriptions at the first run.
+ // See https://issues.adblockplus.org/ticket/5237
+ return ConnectivityUtils.canUseInternet(serviceContext, allowMetered || wasFirstRun());
+ }
- if (wifiOnly)
+ public void forceUpdateSubscriptions(final boolean allowMetered)
+ {
+ try
{
- if (current.isConnected() && !current.isRoaming())
- {
- switch (current.getType())
- {
- case ConnectivityManager.TYPE_BLUETOOTH:
- case ConnectivityManager.TYPE_ETHERNET:
- case ConnectivityManager.TYPE_WIFI:
- case ConnectivityManager.TYPE_WIMAX:
- return true;
- default:
- return false;
- }
- }
- return false;
+ subscriptions.checkForUpdates(true, allowMetered);
+ Toast.makeText(serviceContext, serviceContext.getText(R.string.updating_subscriptions), Toast.LENGTH_LONG).show();
}
- return current.isConnected();
+ catch (IOException e)
+ {
+ Log.e(TAG, "Failed checking for updates", e);
+ }
}
public List<SubscriptionInfo> getListedSubscriptions()
{
return this.subscriptions.getSubscriptions(this);
}
public void changeSubscriptionState(final String id, final boolean enabled)
@@ -684,17 +668,17 @@ public final class Engine
}
}
final long currentTime = System.currentTimeMillis();
if (currentTime > nextUpdateCheck)
{
nextUpdateCheck = currentTime + UPDATE_CHECK_INTERVAL;
- this.engine.subscriptions.checkForUpdates();
+ this.engine.subscriptions.checkForUpdates(false, false);
}
if (currentTime > this.engine.nextUpdateBroadcast)
{
this.engine.nextUpdateBroadcast = Long.MAX_VALUE;
Log.d(TAG, "Sending update broadcast");
this.engine.writeFileAndSendUpdateBroadcast();
}
@@ -771,17 +755,18 @@ public final class Engine
this.response = response;
if (headers != null)
{
this.headers.putAll(headers);
}
}
}
- public void enqueueDownload(final Subscription sub, final boolean forced) throws IOException
+ public void enqueueDownload(final Subscription sub, final boolean forced,
+ final boolean allowMetered) throws IOException
{
if (sub.getURL() != null && sub.shouldUpdate(forced))
{
final HashMap<String, String> headers = new HashMap<>();
if (sub.isMetaDataValid() && sub.isFiltersValid())
{
final String lastModified = sub.getMeta(Subscription.KEY_HTTP_LAST_MODIFIED);
if (!TextUtils.isEmpty(lastModified))
@@ -790,17 +775,17 @@ public final class Engine
}
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);
+ this.downloader.enqueueDownload(this.createDownloadURL(sub), sub.getId(), headers, allowMetered);
}
}
public void connectivityChanged()
{
this.downloader.connectivityChanged();
}

Powered by Google App Engine
This is Rietveld