Index: src/org/adblockplus/android/AdblockPlus.java |
diff --git a/src/org/adblockplus/android/AdblockPlus.java b/src/org/adblockplus/android/AdblockPlus.java |
index 61d9cb7ad056b118f47aeccbfe6104749925f8f7..5ce5a8d9f44372a822174bf630f94d5cbeafc3e1 100755 |
--- a/src/org/adblockplus/android/AdblockPlus.java |
+++ b/src/org/adblockplus/android/AdblockPlus.java |
@@ -33,6 +33,8 @@ import java.util.regex.Pattern; |
import org.adblockplus.android.updater.AlarmReceiver; |
+import com.github.rjeschke.neetutils.Strings; |
+ |
import android.app.ActivityManager; |
import android.app.ActivityManager.RunningServiceInfo; |
import android.app.AlarmManager; |
@@ -55,7 +57,7 @@ import android.util.Log; |
public class AdblockPlus extends Application |
{ |
- private final static String TAG = "Application"; |
+ private final static String TAG = Utils.getTag(AdblockPlus.class); |
private final static Pattern RE_JS = Pattern.compile(".*\\.js$", Pattern.CASE_INSENSITIVE); |
private final static Pattern RE_CSS = Pattern.compile(".*\\.css$", Pattern.CASE_INSENSITIVE); |
@@ -64,9 +66,13 @@ public class AdblockPlus extends Application |
private final static Pattern RE_HTML = Pattern.compile(".*\\.html?$", Pattern.CASE_INSENSITIVE); |
/** |
+ * Update notification id. |
+ */ |
+ public final static int UPDATE_NOTIFICATION_ID = R.string.app_name + 1; |
Felix Dahlke
2014/04/16 15:24:25
Should be "static final", not "final" static, acco
René Jeschke
2014/04/16 17:51:47
Done.
|
+ /** |
* Broadcasted when filtering is enabled or disabled. |
*/ |
- public static final String BROADCAST_FILTERING_CHANGE = "org.adblockplus.android.filtering.status"; |
+ public final static String BROADCAST_FILTERING_CHANGE = "org.adblockplus.android.filtering.status"; |
/** |
* Broadcasted when subscription status changes. |
*/ |
@@ -75,12 +81,10 @@ public class AdblockPlus extends Application |
* Broadcasted when filter match check is performed. |
*/ |
public final static String BROADCAST_FILTER_MATCHES = "org.adblockplus.android.filter.matches"; |
- |
/** |
* Cached list of recommended subscriptions. |
*/ |
private Subscription[] subscriptions; |
- |
/** |
* Indicates whether filtering is enabled or not. |
*/ |
@@ -92,8 +96,8 @@ public class AdblockPlus extends Application |
private static class ReferrerMappingCache extends LinkedHashMap<String, String> |
{ |
- private static final long serialVersionUID = 1L; |
- private static final int MAX_SIZE = 5000; |
+ private final static long serialVersionUID = 1L; |
+ private final static int MAX_SIZE = 5000; |
public ReferrerMappingCache() |
{ |
@@ -101,13 +105,13 @@ public class AdblockPlus extends Application |
} |
@Override |
- protected boolean removeEldestEntry(Map.Entry<String, String> eldest) |
+ protected boolean removeEldestEntry(final Map.Entry<String, String> eldest) |
{ |
- return size() > MAX_SIZE; |
+ return this.size() > MAX_SIZE; |
Felix Dahlke
2014/04/16 15:24:25
Same as in other files, also below.
René Jeschke
2014/04/16 17:51:47
Done.
|
} |
}; |
- private ReferrerMappingCache referrerMapping = new ReferrerMappingCache(); |
+ private final ReferrerMappingCache referrerMapping = new ReferrerMappingCache(); |
/** |
* Returns pointer to itself (singleton pattern). |
@@ -122,10 +126,10 @@ public class AdblockPlus extends Application |
int buildNumber = -1; |
try |
{ |
- PackageInfo pi = getPackageManager().getPackageInfo(getPackageName(), 0); |
+ final PackageInfo pi = this.getPackageManager().getPackageInfo(this.getPackageName(), 0); |
buildNumber = pi.versionCode; |
} |
- catch (NameNotFoundException e) |
+ catch (final NameNotFoundException e) |
{ |
// ignore - this shouldn't happen |
Log.e(TAG, e.getMessage(), e); |
@@ -136,26 +140,17 @@ public class AdblockPlus extends Application |
/** |
* Opens Android application settings |
*/ |
- public static void showAppDetails(Context context) |
+ public static void showAppDetails(final Context context) |
{ |
- String packageName = context.getPackageName(); |
- Intent intent = new Intent(); |
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) |
- { |
- // above 2.3 |
- intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); |
- Uri uri = Uri.fromParts("package", packageName, null); |
- intent.setData(uri); |
- } |
- else |
- { |
- // below 2.3 |
- final String appPkgName = (Build.VERSION.SDK_INT == Build.VERSION_CODES.FROYO ? "pkg" : "com.android.settings.ApplicationPkgName"); |
- intent.setAction(Intent.ACTION_VIEW); |
- intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails"); |
- intent.putExtra(appPkgName, packageName); |
- } |
+ final String packageName = context.getPackageName(); |
+ |
+ final Intent intent = new Intent(); |
+ intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); |
+ |
+ final Uri uri = Uri.fromParts("package", packageName, null); |
+ intent.setData(uri); |
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
+ |
context.startActivity(intent); |
} |
@@ -164,48 +159,45 @@ public class AdblockPlus extends Application |
*/ |
public static String getDeviceName() |
{ |
- String manufacturer = Build.MANUFACTURER; |
- String model = Build.MODEL; |
+ final String manufacturer = Build.MANUFACTURER; |
+ final String model = Build.MODEL; |
if (model.startsWith(manufacturer)) |
- return capitalize(model); |
+ { |
Felix Dahlke
2014/04/16 15:24:25
Same as in other files, also below.
René Jeschke
2014/04/16 17:51:47
Done.
|
+ return Utils.capitalizeString(model); |
+ } |
else |
- return capitalize(manufacturer) + " " + model; |
+ { |
+ return Utils.capitalizeString(manufacturer) + " " + model; |
+ } |
} |
- public static void appendRawTextFile(Context context, StringBuilder text, int id) |
+ public static void appendRawTextFile(final Context context, final StringBuilder text, final int id) |
{ |
- InputStream inputStream = context.getResources().openRawResource(id); |
- InputStreamReader in = new InputStreamReader(inputStream); |
- BufferedReader buf = new BufferedReader(in); |
+ // TODO: What about closing the resources? |
+ final InputStream inputStream = context.getResources().openRawResource(id); |
+ final InputStreamReader in = new InputStreamReader(inputStream); |
+ final BufferedReader buf = new BufferedReader(in); |
String line; |
try |
{ |
while ((line = buf.readLine()) != null) |
+ { |
text.append(line); |
+ } |
} |
- catch (IOException e) |
+ catch (final IOException e) |
{ |
+ // TODO: How about real logging? |
e.printStackTrace(); |
} |
} |
- private static String capitalize(String s) |
- { |
- if (s == null || s.length() == 0) |
- return ""; |
- char first = s.charAt(0); |
- if (Character.isUpperCase(first)) |
- return s; |
- else |
- return Character.toUpperCase(first) + s.substring(1); |
- } |
- |
/** |
* Checks if device has a WiFi connection available. |
*/ |
- public static boolean isWiFiConnected(Context context) |
+ public static boolean isWiFiConnected(final Context context) |
{ |
- ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); |
Felix Dahlke
2014/04/16 15:24:25
Why remove the space after the cast? More common/c
|
+ final ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); |
NetworkInfo networkInfo = null; |
if (connectivityManager != null) |
{ |
@@ -221,12 +213,15 @@ public class AdblockPlus extends Application |
*/ |
public boolean isServiceRunning() |
{ |
- ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); |
+ final ActivityManager manager = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE); |
+ |
// Actually it returns not only running services, so extra check is required |
- for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) |
+ for (final RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) |
{ |
if (service.service.getClassName().equals(ProxyService.class.getCanonicalName()) && service.pid > 0) |
+ { |
return true; |
+ } |
} |
return false; |
} |
@@ -236,14 +231,14 @@ public class AdblockPlus extends Application |
*/ |
public boolean checkWriteExternalPermission() |
{ |
- String permission = "android.permission.WRITE_EXTERNAL_STORAGE"; |
- int res = checkCallingOrSelfPermission(permission); |
+ final String permission = "android.permission.WRITE_EXTERNAL_STORAGE"; |
+ final int res = this.checkCallingOrSelfPermission(permission); |
return res == PackageManager.PERMISSION_GRANTED; |
} |
public boolean isFirstRun() |
{ |
- return abpEngine.isFirstRun(); |
+ return this.abpEngine.isFirstRun(); |
} |
/** |
@@ -251,9 +246,12 @@ public class AdblockPlus extends Application |
*/ |
public Subscription[] getRecommendedSubscriptions() |
{ |
- if (subscriptions == null) |
- subscriptions = abpEngine.getRecommendedSubscriptions(); |
- return subscriptions; |
+ // TODO: Why don't we re-check? |
+ if (this.subscriptions == null) |
+ { |
+ this.subscriptions = this.abpEngine.getRecommendedSubscriptions(); |
+ } |
+ return this.subscriptions; |
} |
/** |
@@ -261,7 +259,7 @@ public class AdblockPlus extends Application |
*/ |
public Subscription[] getListedSubscriptions() |
{ |
- return abpEngine.getListedSubscriptions(); |
+ return this.abpEngine.getListedSubscriptions(); |
} |
/** |
@@ -270,14 +268,9 @@ public class AdblockPlus extends Application |
* @param url |
* URL of subscription to add |
*/ |
- public void setSubscription(String url) |
+ public void setSubscription(final String url) |
{ |
- Subscription[] subscriptions = abpEngine.getListedSubscriptions(); |
- for (Subscription subscription : subscriptions) |
- { |
- abpEngine.removeSubscription(subscription.url); |
- } |
- abpEngine.addSubscription(url); |
+ this.abpEngine.setSubscription(url); |
} |
/** |
@@ -285,40 +278,36 @@ public class AdblockPlus extends Application |
*/ |
public void refreshSubscriptions() |
{ |
- Subscription[] subscriptions = abpEngine.getListedSubscriptions(); |
- for (Subscription subscription : subscriptions) |
- { |
- abpEngine.refreshSubscription(subscription.url); |
- } |
+ this.abpEngine.refreshSubscriptions(); |
} |
/** |
* Enforces subscription status update. |
* |
- * @param url Subscription url |
+ * @param url |
+ * Subscription url |
Felix Dahlke
2014/04/16 15:24:25
Why this weird break? Same below.
|
*/ |
- public void actualizeSubscriptionStatus(String url) |
+ public void updateSubscriptionStatus(final String url) |
{ |
- abpEngine.actualizeSubscriptionStatus(url); |
+ this.abpEngine.updateSubscriptionStatus(url); |
} |
- |
/** |
* Enables or disables Acceptable Ads |
*/ |
- public void setAcceptableAdsEnabled(boolean enabled) |
+ public void setAcceptableAdsEnabled(final boolean enabled) |
{ |
- abpEngine.setAcceptableAdsEnabled(enabled); |
+ this.abpEngine.setAcceptableAdsEnabled(enabled); |
} |
public String getAcceptableAdsUrl() |
{ |
- final String documentationLink = abpEngine.getDocumentationLink(); |
- final String locale = getResources().getConfiguration().locale.toString().replace("_", "-"); |
+ final String documentationLink = this.abpEngine.getDocumentationLink(); |
+ final String locale = this.getResources().getConfiguration().locale.toString().replace("_", "-"); |
return documentationLink.replace("%LINK%", "acceptable_ads").replace("%LANG%", locale); |
} |
- public void setNotifiedAboutAcceptableAds(boolean notified) |
+ public void setNotifiedAboutAcceptableAds(final boolean notified) |
{ |
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); |
final Editor editor = preferences.edit(); |
@@ -335,25 +324,29 @@ public class AdblockPlus extends Application |
/** |
* Returns ElemHide selectors for domain. |
* |
- * @param domain The domain |
+ * @param domain |
+ * The domain |
* @return A list of CSS selectors |
*/ |
public String[] getSelectorsForDomain(final String domain) |
{ |
- /* We need to ignore element hiding rules here to work around two bugs: |
+ /* |
+ * We need to ignore element hiding rules here to work around two bugs: |
+ * |
* 1. CSS is being injected even when there's an exception rule with $elemhide |
+ * |
* 2. The injected CSS causes blank pages in Chrome for Android |
* |
- * Starting with 1.1.2, we ignored element hiding rules after download anyway, to keep the |
- * memory usage down. Doing this with libadblockplus is trickier, but would be the clean |
- * solution. */ |
+ * |
+ * Starting with 1.1.2, we ignored element hiding rules after download anyway, to keep the memory usage down. Doing this with libadblockplus is |
Felix Dahlke
2014/04/16 15:24:25
As before, please don't make code that adheres to
René Jeschke
2014/04/16 17:51:47
Done.
|
+ * trickier, but would be the clean solution. |
+ */ |
return null; |
-/* |
- if (!filteringEnabled) |
- return null; |
- |
- return abpEngine.getSelectorsForDomain(domain); |
-*/ |
+ /* |
Felix Dahlke
2014/04/16 15:24:25
We don't want to leave commented out code around,
René Jeschke
2014/04/16 17:51:47
Done.
|
+ * if (!filteringEnabled) return null; |
+ * |
+ * return abpEngine.getSelectorsForDomain(domain); |
+ */ |
} |
/** |
@@ -370,59 +363,80 @@ public class AdblockPlus extends Application |
* @return true if matched filter was found |
* @throws Exception |
*/ |
- public boolean matches(String url, String query, String referrer, String accept) |
+ public boolean matches(final String url, final String query, final String referrer, final String accept) |
{ |
final String fullUrl = !"".equals(query) ? url + "?" + query : url; |
if (referrer != null) |
- referrerMapping.put(fullUrl, referrer); |
+ { |
+ this.referrerMapping.put(fullUrl, referrer); |
+ } |
- if (!filteringEnabled) |
+ if (!this.filteringEnabled) |
+ { |
return false; |
+ } |
String contentType = null; |
if (accept != null) |
{ |
if (accept.contains("text/css")) |
+ { |
contentType = "STYLESHEET"; |
+ } |
else if (accept.contains("image/*")) |
+ { |
contentType = "IMAGE"; |
+ } |
else if (accept.contains("text/html")) |
+ { |
contentType = "SUBDOCUMENT"; |
+ } |
} |
if (contentType == null) |
{ |
if (RE_JS.matcher(url).matches()) |
+ { |
contentType = "SCRIPT"; |
+ } |
else if (RE_CSS.matcher(url).matches()) |
+ { |
contentType = "STYLESHEET"; |
+ } |
else if (RE_IMAGE.matcher(url).matches()) |
+ { |
contentType = "IMAGE"; |
+ } |
else if (RE_FONT.matcher(url).matches()) |
+ { |
contentType = "FONT"; |
+ } |
else if (RE_HTML.matcher(url).matches()) |
+ { |
contentType = "SUBDOCUMENT"; |
+ } |
} |
if (contentType == null) |
+ { |
contentType = "OTHER"; |
+ } |
- final List<String> referrerChain = buildReferrerChain(referrer); |
+ final List<String> referrerChain = this.buildReferrerChain(referrer); |
Log.d("Referrer chain", fullUrl + ": " + referrerChain.toString()); |
- String[] referrerChainArray = referrerChain.toArray(new String[referrerChain.size()]); |
- return abpEngine.matches(fullUrl, contentType, referrerChainArray); |
+ final String[] referrerChainArray = referrerChain.toArray(new String[referrerChain.size()]); |
+ return this.abpEngine.matches(fullUrl, contentType, referrerChainArray); |
} |
private List<String> buildReferrerChain(String url) |
{ |
final List<String> referrerChain = new ArrayList<String>(); |
- // We need to limit the chain length to ensure we don't block indefinitely if there's |
- // a referrer loop. |
+ // We need to limit the chain length to ensure we don't block indefinitely if there's a referrer loop. |
final int maxChainLength = 10; |
for (int i = 0; i < maxChainLength && url != null; i++) |
{ |
referrerChain.add(0, url); |
- url = referrerMapping.get(url); |
+ url = this.referrerMapping.get(url); |
} |
return referrerChain; |
} |
@@ -432,28 +446,27 @@ public class AdblockPlus extends Application |
*/ |
public boolean isFilteringEnabled() |
{ |
- return filteringEnabled; |
+ return this.filteringEnabled; |
} |
/** |
* Enables or disables filtering. |
*/ |
- public void setFilteringEnabled(boolean enable) |
+ public void setFilteringEnabled(final boolean enable) |
{ |
- filteringEnabled = enable; |
- sendBroadcast(new Intent(BROADCAST_FILTERING_CHANGE).putExtra("enabled", filteringEnabled)); |
+ this.filteringEnabled = enable; |
+ this.sendBroadcast(new Intent(BROADCAST_FILTERING_CHANGE).putExtra("enabled", this.filteringEnabled)); |
} |
/** |
- * Starts ABP engine. It also initiates subscription refresh if it is enabled |
- * in user settings. |
+ * Starts ABP engine. It also initiates subscription refresh if it is enabled in user settings. |
*/ |
public void startEngine() |
{ |
- if (abpEngine == null) |
+ if (this.abpEngine == null) |
{ |
- File basePath = getFilesDir(); |
- abpEngine = new ABPEngine(this, basePath.getAbsolutePath()); |
+ final File basePath = this.getFilesDir(); |
+ this.abpEngine = ABPEngine.create(AdblockPlus.getApplication(), ABPEngine.generateAppInfo(this), basePath.getAbsolutePath()); |
} |
} |
@@ -462,10 +475,10 @@ public class AdblockPlus extends Application |
*/ |
public void stopEngine() |
{ |
- if (abpEngine != null) |
+ if (this.abpEngine != null) |
{ |
- abpEngine.release(); |
- abpEngine = null; |
+ this.abpEngine.dispose(); |
+ this.abpEngine = null; |
Log.i(TAG, "stopEngine"); |
} |
} |
@@ -475,20 +488,18 @@ public class AdblockPlus extends Application |
*/ |
public void checkUpdates() |
{ |
- abpEngine.checkUpdates(); |
+ this.abpEngine.checkForUpdates(); |
} |
/** |
- * Sets Alarm to call updater after specified number of minutes or after one |
- * day if |
- * minutes are set to 0. |
+ * Sets Alarm to call updater after specified number of minutes or after one day if minutes are set to 0. |
* |
* @param minutes |
* number of minutes to wait |
*/ |
- public void scheduleUpdater(int minutes) |
+ public void scheduleUpdater(final int minutes) |
{ |
- Calendar updateTime = Calendar.getInstance(); |
+ final Calendar updateTime = Calendar.getInstance(); |
if (minutes == 0) |
{ |
@@ -499,17 +510,17 @@ public class AdblockPlus extends Application |
// ...next day |
updateTime.add(Calendar.HOUR_OF_DAY, 24); |
// Spread out the “mass downloading” for 6 hours |
- updateTime.add(Calendar.MINUTE, (int) (Math.random() * 60 * 6)); |
+ updateTime.add(Calendar.MINUTE, (int)(Math.random() * 60 * 6)); |
} |
else |
{ |
updateTime.add(Calendar.MINUTE, minutes); |
} |
- Intent updater = new Intent(this, AlarmReceiver.class); |
- PendingIntent recurringUpdate = PendingIntent.getBroadcast(this, 0, updater, PendingIntent.FLAG_CANCEL_CURRENT); |
+ final Intent updater = new Intent(this, AlarmReceiver.class); |
+ final PendingIntent recurringUpdate = PendingIntent.getBroadcast(this, 0, updater, PendingIntent.FLAG_CANCEL_CURRENT); |
// Set non-waking alarm |
- AlarmManager alarms = (AlarmManager) getSystemService(Context.ALARM_SERVICE); |
+ final AlarmManager alarms = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE); |
alarms.set(AlarmManager.RTC, updateTime.getTimeInMillis(), recurringUpdate); |
} |
@@ -522,33 +533,36 @@ public class AdblockPlus extends Application |
// Check for crash report |
try |
{ |
- InputStreamReader reportFile = new InputStreamReader(openFileInput(CrashHandler.REPORT_FILE)); |
- final char[] buffer = new char[0x1000]; |
- StringBuilder out = new StringBuilder(); |
+ final InputStreamReader reportFile = new InputStreamReader(this.openFileInput(CrashHandler.REPORT_FILE)); |
+ final char[] buffer = new char[4096]; |
Felix Dahlke
2014/04/16 15:24:25
Why this? Hex is not that hard to read.
René Jeschke
2014/04/16 17:51:47
Because is totally does not make any sense here. W
|
+ final StringBuilder out = new StringBuilder(); |
int read; |
+ |
Felix Dahlke
2014/04/16 15:24:25
Empty lines are also arguably an unrelated change,
René Jeschke
2014/04/16 17:51:47
Done.
|
do |
{ |
read = reportFile.read(buffer, 0, buffer.length); |
if (read > 0) |
+ { |
out.append(buffer, 0, read); |
+ } |
} |
while (read >= 0); |
- String report = out.toString(); |
- if (!"".equals(report)) |
+ |
+ final String report = out.toString(); |
+ if (!Strings.isEmpty(report)) |
{ |
final Intent intent = new Intent(this, CrashReportDialog.class); |
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
intent.putExtra("report", report); |
- startActivity(intent); |
+ this.startActivity(intent); |
} |
} |
- catch (FileNotFoundException e) |
+ catch (final FileNotFoundException e) |
{ |
// ignore |
} |
- catch (IOException e) |
+ catch (final IOException e) |
{ |
- // TODO Auto-generated catch block |
Log.e(TAG, e.getMessage(), e); |
} |
@@ -556,6 +570,6 @@ public class AdblockPlus extends Application |
Thread.setDefaultUncaughtExceptionHandler(new CrashHandler(this)); |
// Initiate update check |
- scheduleUpdater(0); |
+ this.scheduleUpdater(0); |
} |
} |