You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.2 KiB
93 lines
2.2 KiB
11 years ago
|
package acr.browser.lightning;
|
||
|
|
||
|
import java.io.BufferedReader;
|
||
|
import java.io.IOException;
|
||
|
import java.io.InputStream;
|
||
|
import java.io.InputStreamReader;
|
||
|
import java.net.URI;
|
||
|
import java.net.URISyntaxException;
|
||
|
import java.util.TreeMap;
|
||
|
|
||
|
import android.content.Context;
|
||
|
import android.content.SharedPreferences;
|
||
|
import android.content.res.AssetManager;
|
||
|
|
||
|
public class AdBlock {
|
||
|
|
||
|
private static TreeMap<String, Integer> mAdBlockMap = null;
|
||
|
private SharedPreferences mPreferences;
|
||
|
private boolean mBlockAds = false;
|
||
|
|
||
|
public AdBlock(Context context) {
|
||
|
if (mAdBlockMap == null) {
|
||
|
mAdBlockMap = new TreeMap<String, Integer>(
|
||
|
String.CASE_INSENSITIVE_ORDER);
|
||
|
}
|
||
|
if (mAdBlockMap.isEmpty()) {
|
||
|
fillSearchTree(context);
|
||
|
}
|
||
|
mPreferences = context.getSharedPreferences(
|
||
|
PreferenceConstants.PREFERENCES, 0);
|
||
|
mBlockAds = mPreferences.getBoolean(PreferenceConstants.BLOCK_ADS,
|
||
|
false);
|
||
|
}
|
||
|
|
||
|
public void updatePreference() {
|
||
|
mBlockAds = mPreferences.getBoolean(PreferenceConstants.BLOCK_ADS,
|
||
|
false);
|
||
|
}
|
||
|
|
||
|
public void fillSearchTree(final Context context) {
|
||
|
Thread thread = new Thread(new Runnable() {
|
||
|
|
||
|
@Override
|
||
|
public void run() {
|
||
|
AssetManager asset = context.getAssets();
|
||
|
try {
|
||
|
InputStream input = asset.open("hosts.txt");
|
||
|
InputStreamReader read = new InputStreamReader(input);
|
||
|
BufferedReader reader = new BufferedReader(read);
|
||
|
String line = reader.readLine();
|
||
|
while (line != null) {
|
||
|
mAdBlockMap.put(line, 1);
|
||
|
line = reader.readLine();
|
||
|
}
|
||
|
} catch (IOException e) {
|
||
|
e.printStackTrace();
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
});
|
||
|
thread.start();
|
||
|
}
|
||
|
|
||
|
public boolean isAd(String url) {
|
||
|
if (!mBlockAds) {
|
||
|
return false;
|
||
|
}
|
||
|
String domain = "";
|
||
|
try {
|
||
|
domain = getDomainName(url);
|
||
|
} catch (URISyntaxException e) {
|
||
|
e.printStackTrace();
|
||
|
return false;
|
||
|
}
|
||
|
return mAdBlockMap.containsKey(domain);
|
||
|
}
|
||
|
|
||
|
private static String getDomainName(String url) throws URISyntaxException {
|
||
|
int index = url.indexOf("/", 8);
|
||
|
if (index != -1) {
|
||
|
url = url.substring(0, index);
|
||
|
}
|
||
|
URI uri = new URI(url);
|
||
|
String domain = uri.getHost();
|
||
|
if (domain == null) {
|
||
|
return url;
|
||
|
}
|
||
|
return domain.startsWith("www.") ? domain.substring(4) : domain;
|
||
|
}
|
||
|
|
||
|
}
|