diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 9b9b646..3038765 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,19 +1,20 @@ - + - + + + - - + + + + android:label="@string/app_name" > + android:launchMode="singleTask" + android:theme="@style/LightTheme" > @@ -59,11 +64,6 @@ @@ -103,37 +103,52 @@ + android:label="@string/settings" + android:theme="@style/LightTheme" > - + + android:label="@string/advanced" + android:theme="@style/LightTheme" > - + + android:label="@string/app_name" + android:launchMode="singleTask" + android:theme="@style/DarkTheme" + android:windowSoftInputMode="stateHidden" > - + + + + + + + + - + \ No newline at end of file diff --git a/BrowserActivity.apk b/BrowserActivity.apk index cddba4a..2d9b4f5 100644 Binary files a/BrowserActivity.apk and b/BrowserActivity.apk differ diff --git a/assets/baidu.png b/assets/baidu.png new file mode 100644 index 0000000..9fb8af0 Binary files /dev/null and b/assets/baidu.png differ diff --git a/assets/bing.png b/assets/bing.png new file mode 100644 index 0000000..1855e80 Binary files /dev/null and b/assets/bing.png differ diff --git a/assets/duckduckgo.png b/assets/duckduckgo.png new file mode 100644 index 0000000..a62119e Binary files /dev/null and b/assets/duckduckgo.png differ diff --git a/assets/google.png b/assets/google.png new file mode 100644 index 0000000..1974f31 Binary files /dev/null and b/assets/google.png differ diff --git a/assets/hosts.txt b/assets/hosts.txt new file mode 100644 index 0000000..9370eca --- /dev/null +++ b/assets/hosts.txt @@ -0,0 +1,18603 @@ +005.free-counter.co.uk +006.free-adult-counters.x-xtra.com +006.free-counter.co.uk +007.free-counter.co.uk +008.free-counter.co.uk +050003.voodoo.com +050005.voodoo.com +060810131024.c.mystat-in.net +08.185.87.0.liveadvert.com +08.185.87.00.liveadvert.com +08.185.87.01.liveadvert.com +08.185.87.02.liveadvert.com +08.185.87.03.liveadvert.com +08.185.87.04.liveadvert.com +08.185.87.05.liveadvert.com +08.185.87.06.liveadvert.com +08.185.87.07.liveadvert.com +08.185.87.08.liveadvert.com +08.185.87.09.liveadvert.com +08.185.87.1.liveadvert.com +08.185.87.10.liveadvert.com +08.185.87.100.liveadvert.com +08.185.87.101.liveadvert.com +08.185.87.103.liveadvert.com +08.185.87.104.liveadvert.com +08.185.87.105.liveadvert.com +08.185.87.106.liveadvert.com +08.185.87.107.liveadvert.com +08.185.87.108.liveadvert.com +08.185.87.109.liveadvert.com +08.185.87.11.liveadvert.com +08.185.87.110.liveadvert.com +08.185.87.111.liveadvert.com +08.185.87.113.liveadvert.com +08.185.87.114.liveadvert.com +08.185.87.115.liveadvert.com +08.185.87.116.liveadvert.com +08.185.87.117.liveadvert.com +08.185.87.118.liveadvert.com +08.185.87.119.liveadvert.com +08.185.87.13.liveadvert.com +08.185.87.130.liveadvert.com +08.185.87.131.liveadvert.com +08.185.87.133.liveadvert.com +08.185.87.134.liveadvert.com +08.185.87.135.liveadvert.com +08.185.87.136.liveadvert.com +08.185.87.137.liveadvert.com +08.185.87.138.liveadvert.com +08.185.87.139.liveadvert.com +08.185.87.14.liveadvert.com +08.185.87.140.liveadvert.com +08.185.87.141.liveadvert.com +08.185.87.143.liveadvert.com +08.185.87.144.liveadvert.com +08.185.87.145.liveadvert.com +08.185.87.146.liveadvert.com +08.185.87.147.liveadvert.com +08.185.87.148.liveadvert.com +08.185.87.149.liveadvert.com +08.185.87.15.liveadvert.com +08.185.87.150.liveadvert.com +08.185.87.151.liveadvert.com +08.185.87.153.liveadvert.com +08.185.87.154.liveadvert.com +08.185.87.155.liveadvert.com +08.185.87.156.liveadvert.com +08.185.87.157.liveadvert.com +08.185.87.158.liveadvert.com +08.185.87.159.liveadvert.com +08.185.87.16.liveadvert.com +08.185.87.160.liveadvert.com +08.185.87.161.liveadvert.com +08.185.87.163.liveadvert.com +08.185.87.164.liveadvert.com +08.185.87.165.liveadvert.com +08.185.87.166.liveadvert.com +08.185.87.167.liveadvert.com +08.185.87.168.liveadvert.com +08.185.87.169.liveadvert.com +08.185.87.17.liveadvert.com +08.185.87.170.liveadvert.com +08.185.87.171.liveadvert.com +08.185.87.173.liveadvert.com +08.185.87.174.liveadvert.com +08.185.87.175.liveadvert.com +08.185.87.176.liveadvert.com +08.185.87.177.liveadvert.com +08.185.87.178.liveadvert.com +08.185.87.179.liveadvert.com +08.185.87.18.liveadvert.com +08.185.87.180.liveadvert.com +08.185.87.181.liveadvert.com +08.185.87.183.liveadvert.com +08.185.87.184.liveadvert.com +08.185.87.185.liveadvert.com +08.185.87.186.liveadvert.com +08.185.87.187.liveadvert.com +08.185.87.188.liveadvert.com +08.185.87.189.liveadvert.com +08.185.87.19.liveadvert.com +08.185.87.190.liveadvert.com +08.185.87.191.liveadvert.com +08.185.87.193.liveadvert.com +08.185.87.194.liveadvert.com +08.185.87.195.liveadvert.com +08.185.87.196.liveadvert.com +08.185.87.197.liveadvert.com +08.185.87.198.liveadvert.com +08.185.87.199.liveadvert.com +08.185.87.3.liveadvert.com +08.185.87.30.liveadvert.com +08.185.87.31.liveadvert.com +08.185.87.33.liveadvert.com +08.185.87.34.liveadvert.com +08.185.87.35.liveadvert.com +08.185.87.36.liveadvert.com +08.185.87.37.liveadvert.com +08.185.87.38.liveadvert.com +08.185.87.39.liveadvert.com +08.185.87.4.liveadvert.com +08.185.87.40.liveadvert.com +08.185.87.41.liveadvert.com +08.185.87.43.liveadvert.com +08.185.87.44.liveadvert.com +08.185.87.45.liveadvert.com +08.185.87.46.liveadvert.com +08.185.87.47.liveadvert.com +08.185.87.48.liveadvert.com +08.185.87.49.liveadvert.com +08.185.87.5.liveadvert.com +08.185.87.50.liveadvert.com +08.185.87.51.liveadvert.com +08.185.87.53.liveadvert.com +08.185.87.54.liveadvert.com +08.185.87.55.liveadvert.com +08.185.87.56.liveadvert.com +08.185.87.57.liveadvert.com +08.185.87.58.liveadvert.com +08.185.87.59.liveadvert.com +08.185.87.6.liveadvert.com +08.185.87.60.liveadvert.com +08.185.87.61.liveadvert.com +08.185.87.63.liveadvert.com +08.185.87.64.liveadvert.com +08.185.87.65.liveadvert.com +08.185.87.66.liveadvert.com +08.185.87.67.liveadvert.com +08.185.87.68.liveadvert.com +08.185.87.69.liveadvert.com +08.185.87.7.liveadvert.com +08.185.87.70.liveadvert.com +08.185.87.71.liveadvert.com +08.185.87.73.liveadvert.com +08.185.87.74.liveadvert.com +08.185.87.75.liveadvert.com +08.185.87.76.liveadvert.com +08.185.87.77.liveadvert.com +08.185.87.78.liveadvert.com +08.185.87.79.liveadvert.com +08.185.87.8.liveadvert.com +08.185.87.80.liveadvert.com +08.185.87.81.liveadvert.com +08.185.87.83.liveadvert.com +08.185.87.84.liveadvert.com +08.185.87.85.liveadvert.com +08.185.87.86.liveadvert.com +08.185.87.87.liveadvert.com +08.185.87.88.liveadvert.com +08.185.87.89.liveadvert.com +08.185.87.9.liveadvert.com +08.185.87.90.liveadvert.com +08.185.87.91.liveadvert.com +08.185.87.93.liveadvert.com +08.185.87.94.liveadvert.com +08.185.87.95.liveadvert.com +08.185.87.96.liveadvert.com +08.185.87.97.liveadvert.com +08.185.87.98.liveadvert.com +08.185.87.99.liveadvert.com +0hna.com +0latfee.ero-advertising.com +1.im.cz +1.ptp22.com +1.servedby.netshelter.net +1.track234e6.com +10.6.87.194.dynamic.dol.ru +10.ptp22.com +100.6.87.194.dynamic.dol.ru +100webads.com +101.6.87.194.dynamic.dol.ru +102.112.2o7.net +102.122.2o7.net +102.6.87.194.dynamic.dol.ru +103.6.87.194.dynamic.dol.ru +1033.bitterstrawberry.com +104.6.87.194.dynamic.dol.ru +105.6.87.194.dynamic.dol.ru +106.6.87.194.dynamic.dol.ru +107.6.87.194.dynamic.dol.ru +10712824.qqc.co +108.6.87.194.dynamic.dol.ru +109.6.87.194.dynamic.dol.ru +10e2.linkexchange.ru +11.6.87.194.dynamic.dol.ru +11.ptp22.com +110.6.87.194.dynamic.dol.ru +111.6.87.194.dynamic.dol.ru +11163751.p.waymailtracker.com +112.6.87.194.dynamic.dol.ru +113.6.87.194.dynamic.dol.ru +114.6.87.194.dynamic.dol.ru +115.6.87.194.dynamic.dol.ru +116.6.87.194.dynamic.dol.ru +117.6.87.194.dynamic.dol.ru +118.6.87.194.dynamic.dol.ru +119.6.87.194.dynamic.dol.ru +12.ptp22.com +120.6.87.194.dynamic.dol.ru +120.duba.net +121.6.87.194.dynamic.dol.ru +1212.bitterstrawberry.com +122.6.87.194.dynamic.dol.ru +1221.bitterstrawberry.com +122807155757.c.mystat-in.net +123.6.87.194.dynamic.dol.ru +123.duba.net +123advertising.nl +123count.com +123counter.mycomputer.com +123counter.superstats.com +123counts.com +123stat.com +123webmarketing.com +124.6.87.194.dynamic.dol.ru +125.6.87.194.dynamic.dol.ru +126.6.87.194.dynamic.dol.ru +126.xg4ken.com +127.6.87.194.dynamic.dol.ru +128.6.87.194.dynamic.dol.ru +129.6.87.194.dynamic.dol.ru +13.6.87.194.dynamic.dol.ru +13.ptp22.com +130.6.87.194.dynamic.dol.ru +131.6.87.194.dynamic.dol.ru +132.6.87.194.dynamic.dol.ru +133.6.87.194.dynamic.dol.ru +134.6.87.194.dynamic.dol.ru +135.6.87.194.dynamic.dol.ru +136.6.87.194.dynamic.dol.ru +137.6.87.194.dynamic.dol.ru +138.6.87.194.dynamic.dol.ru +139.6.87.194.dynamic.dol.ru +14.6.87.194.dynamic.dol.ru +14.ptp22.com +140.6.87.194.dynamic.dol.ru +141.6.87.194.dynamic.dol.ru +142.6.87.194.dynamic.dol.ru +143.6.87.194.dynamic.dol.ru +144.6.87.194.dynamic.dol.ru +145.6.87.194.dynamic.dol.ru +146.6.87.194.dynamic.dol.ru +147.6.87.194.dynamic.dol.ru +148.6.87.194.dynamic.dol.ru +149.6.87.194.dynamic.dol.ru +15.6.87.194.dynamic.dol.ru +15.ptp22.com +150.6.87.194.dynamic.dol.ru +151.6.87.194.dynamic.dol.ru +152.6.87.194.dynamic.dol.ru +153.6.87.194.dynamic.dol.ru +154.6.87.194.dynamic.dol.ru +155.6.87.194.dynamic.dol.ru +156.6.87.194.dynamic.dol.ru +157.6.87.194.dynamic.dol.ru +158.6.87.194.dynamic.dol.ru +159.6.87.194.dynamic.dol.ru +16.6.87.194.dynamic.dol.ru +16.ptp22.com +160.6.87.194.dynamic.dol.ru +160tracker.com +161.6.87.194.dynamic.dol.ru +162.6.87.194.dynamic.dol.ru +163.6.87.194.dynamic.dol.ru +164.6.87.194.dynamic.dol.ru +165.6.87.194.dynamic.dol.ru +1651.bitterstrawberry.com +1652.bitterstrawberry.com +1653.bitterstrawberry.com +1655.bitterstrawberry.com +166.6.87.194.dynamic.dol.ru +167.6.87.194.dynamic.dol.ru +168.6.87.194.dynamic.dol.ru +169.6.87.194.dynamic.dol.ru +17.6.87.194.dynamic.dol.ru +17.ptp22.com +170.6.87.194.dynamic.dol.ru +171.6.87.194.dynamic.dol.ru +172.6.87.194.dynamic.dol.ru +173.6.87.194.dynamic.dol.ru +174.6.87.194.dynamic.dol.ru +175.6.87.194.dynamic.dol.ru +176.6.87.194.dynamic.dol.ru +177.6.87.194.dynamic.dol.ru +178.6.87.194.dynamic.dol.ru +179.6.87.194.dynamic.dol.ru +18.6.87.194.dynamic.dol.ru +18.ptp22.com +180.6.87.194.dynamic.dol.ru +181.6.87.194.dynamic.dol.ru +182.6.87.194.dynamic.dol.ru +1821.bitterstrawberry.com +1829.bitterstrawberry.com +183.6.87.194.dynamic.dol.ru +184.6.87.194.dynamic.dol.ru +1846.bitterstrawberry.com +185.6.87.194.dynamic.dol.ru +186.6.87.194.dynamic.dol.ru +187.6.87.194.dynamic.dol.ru +188.6.87.194.dynamic.dol.ru +189.6.87.194.dynamic.dol.ru +18clicks.com +19.6.87.194.dynamic.dol.ru +19.ptp22.com +190.6.87.194.dynamic.dol.ru +191.6.87.194.dynamic.dol.ru +192.168.112.2o7.net +192.6.87.194.dynamic.dol.ru +192.com +192com.112.2o7.net +193.6.87.194.dynamic.dol.ru +194.6.87.194.dynamic.dol.ru +1940.bitterstrawberry.com +195.6.87.194.dynamic.dol.ru +196.6.87.194.dynamic.dol.ru +197.6.87.194.dynamic.dol.ru +198.6.87.194.dynamic.dol.ru +199.6.87.194.dynamic.dol.ru +1ad.de +1au.cqcounter.com +1bm.cqcounter.com +1ca.cqcounter.com +1cash.net +1cgi.hitbox.com +1de.cqcounter.com +1es.cqcounter.com +1fr.cqcounter.com +1in.cqcounter.com +1jo.cqcounter.com +1nl.cqcounter.com +1no.cqcounter.com +1phads.com +1pt.cqcounter.com +1se.cqcounter.com +1streamline.go2cloud.org +1uk.cqcounter.com +1und1.ivwbox.de +1us.cqcounter.com +1xxx.cqcounter.com +2-adsbroker.net +2.livejasmin.com +2.ptp22.com +20.ptp22.com +200.6.87.194.dynamic.dol.ru +2000freetvchannels.com +2002.bitterstrawberry.com +201.6.87.194.dynamic.dol.ru +202.6.87.194.dynamic.dol.ru +202trackingsoft.com +203.6.87.194.dynamic.dol.ru +204.6.87.194.dynamic.dol.ru +204.bitterstrawberry.com +205.6.87.194.dynamic.dol.ru +2056.bitterstrawberry.com +206.6.87.194.dynamic.dol.ru +207.6.87.194.dynamic.dol.ru +208.185.87.1.liveadvert.com +208.185.87.10.liveadvert.com +208.185.87.100.liveadvert.com +208.185.87.101.liveadvert.com +208.185.87.102.liveadvert.com +208.185.87.103.liveadvert.com +208.185.87.104.liveadvert.com +208.185.87.105.liveadvert.com +208.185.87.106.liveadvert.com +208.185.87.107.liveadvert.com +208.185.87.108.liveadvert.com +208.185.87.109.liveadvert.com +208.185.87.11.liveadvert.com +208.185.87.110.liveadvert.com +208.185.87.111.liveadvert.com +208.185.87.112.liveadvert.com +208.185.87.113.liveadvert.com +208.185.87.114.liveadvert.com +208.185.87.115.liveadvert.com +208.185.87.116.liveadvert.com +208.185.87.117.liveadvert.com +208.185.87.118.liveadvert.com +208.185.87.119.liveadvert.com +208.185.87.12.liveadvert.com +208.185.87.120.liveadvert.com +208.185.87.121.liveadvert.com +208.185.87.122.liveadvert.com +208.185.87.123.liveadvert.com +208.185.87.124.liveadvert.com +208.185.87.125.liveadvert.com +208.185.87.126.liveadvert.com +208.185.87.127.liveadvert.com +208.185.87.128.liveadvert.com +208.185.87.129.liveadvert.com +208.185.87.13.liveadvert.com +208.185.87.130.liveadvert.com +208.185.87.131.liveadvert.com +208.185.87.132.liveadvert.com +208.185.87.133.liveadvert.com +208.185.87.134.liveadvert.com +208.185.87.135.liveadvert.com +208.185.87.136.liveadvert.com +208.185.87.137.liveadvert.com +208.185.87.138.liveadvert.com +208.185.87.139.liveadvert.com +208.185.87.14.liveadvert.com +208.185.87.140.liveadvert.com +208.185.87.141.liveadvert.com +208.185.87.142.liveadvert.com +208.185.87.143.liveadvert.com +208.185.87.144.liveadvert.com +208.185.87.145.liveadvert.com +208.185.87.146.liveadvert.com +208.185.87.147.liveadvert.com +208.185.87.148.liveadvert.com +208.185.87.149.liveadvert.com +208.185.87.15.liveadvert.com +208.185.87.150.liveadvert.com +208.185.87.151.liveadvert.com +208.185.87.152.liveadvert.com +208.185.87.153.liveadvert.com +208.185.87.154.liveadvert.com +208.185.87.155.liveadvert.com +208.185.87.156.liveadvert.com +208.185.87.157.liveadvert.com +208.185.87.158.liveadvert.com +208.185.87.159.liveadvert.com +208.185.87.16.liveadvert.com +208.185.87.160.liveadvert.com +208.185.87.161.liveadvert.com +208.185.87.162.liveadvert.com +208.185.87.163.liveadvert.com +208.185.87.164.liveadvert.com +208.185.87.165.liveadvert.com +208.185.87.166.liveadvert.com +208.185.87.167.liveadvert.com +208.185.87.168.liveadvert.com +208.185.87.169.liveadvert.com +208.185.87.17.liveadvert.com +208.185.87.170.liveadvert.com +208.185.87.171.liveadvert.com +208.185.87.172.liveadvert.com +208.185.87.173.liveadvert.com +208.185.87.174.liveadvert.com +208.185.87.175.liveadvert.com +208.185.87.176.liveadvert.com +208.185.87.177.liveadvert.com +208.185.87.178.liveadvert.com +208.185.87.179.liveadvert.com +208.185.87.18.liveadvert.com +208.185.87.180.liveadvert.com +208.185.87.181.liveadvert.com +208.185.87.182.liveadvert.com +208.185.87.183.liveadvert.com +208.185.87.184.liveadvert.com +208.185.87.185.liveadvert.com +208.185.87.186.liveadvert.com +208.185.87.187.liveadvert.com +208.185.87.188.liveadvert.com +208.185.87.189.liveadvert.com +208.185.87.19.liveadvert.com +208.185.87.190.liveadvert.com +208.185.87.191.liveadvert.com +208.185.87.192.liveadvert.com +208.185.87.193.liveadvert.com +208.185.87.194.liveadvert.com +208.185.87.195.liveadvert.com +208.185.87.196.liveadvert.com +208.185.87.197.liveadvert.com +208.185.87.198.liveadvert.com +208.185.87.199.liveadvert.com +208.185.87.2.liveadvert.com +208.185.87.20.liveadvert.com +208.185.87.200.liveadvert.com +208.185.87.201.liveadvert.com +208.185.87.202.liveadvert.com +208.185.87.203.liveadvert.com +208.185.87.204.liveadvert.com +208.185.87.205.liveadvert.com +208.185.87.206.liveadvert.com +208.185.87.207.liveadvert.com +208.185.87.208.liveadvert.com +208.185.87.209.liveadvert.com +208.185.87.21.liveadvert.com +208.185.87.210.liveadvert.com +208.185.87.211.liveadvert.com +208.185.87.212.liveadvert.com +208.185.87.213.liveadvert.com +208.185.87.214.liveadvert.com +208.185.87.215.liveadvert.com +208.185.87.216.liveadvert.com +208.185.87.217.liveadvert.com +208.185.87.218.liveadvert.com +208.185.87.219.liveadvert.com +208.185.87.22.liveadvert.com +208.185.87.220.liveadvert.com +208.185.87.221.liveadvert.com +208.185.87.222.liveadvert.com +208.185.87.223.liveadvert.com +208.185.87.224.liveadvert.com +208.185.87.225.liveadvert.com +208.185.87.226.liveadvert.com +208.185.87.227.liveadvert.com +208.185.87.228.liveadvert.com +208.185.87.229.liveadvert.com +208.185.87.23.liveadvert.com +208.185.87.230.liveadvert.com +208.185.87.231.liveadvert.com +208.185.87.232.liveadvert.com +208.185.87.233.liveadvert.com +208.185.87.234.liveadvert.com +208.185.87.235.liveadvert.com +208.185.87.236.liveadvert.com +208.185.87.237.liveadvert.com +208.185.87.238.liveadvert.com +208.185.87.239.liveadvert.com +208.185.87.24.liveadvert.com +208.185.87.240.liveadvert.com +208.185.87.241.liveadvert.com +208.185.87.242.liveadvert.com +208.185.87.243.liveadvert.com +208.185.87.244.liveadvert.com +208.185.87.245.liveadvert.com +208.185.87.246.liveadvert.com +208.185.87.247.liveadvert.com +208.185.87.248.liveadvert.com +208.185.87.249.liveadvert.com +208.185.87.25.liveadvert.com +208.185.87.250.liveadvert.com +208.185.87.251.liveadvert.com +208.185.87.252.liveadvert.com +208.185.87.253.liveadvert.com +208.185.87.254.liveadvert.com +208.185.87.26.liveadvert.com +208.185.87.27.liveadvert.com +208.185.87.28.liveadvert.com +208.185.87.29.liveadvert.com +208.185.87.3.liveadvert.com +208.185.87.30.liveadvert.com +208.185.87.31.liveadvert.com +208.185.87.32.liveadvert.com +208.185.87.33.liveadvert.com +208.185.87.34.liveadvert.com +208.185.87.35.liveadvert.com +208.185.87.36.liveadvert.com +208.185.87.37.liveadvert.com +208.185.87.38.liveadvert.com +208.185.87.39.liveadvert.com +208.185.87.4.liveadvert.com +208.185.87.40.liveadvert.com +208.185.87.41.liveadvert.com +208.185.87.42.liveadvert.com +208.185.87.43.liveadvert.com +208.185.87.44.liveadvert.com +208.185.87.45.liveadvert.com +208.185.87.46.liveadvert.com +208.185.87.47.liveadvert.com +208.185.87.48.liveadvert.com +208.185.87.49.liveadvert.com +208.185.87.5.liveadvert.com +208.185.87.50.liveadvert.com +208.185.87.51.liveadvert.com +208.185.87.52.liveadvert.com +208.185.87.53.liveadvert.com +208.185.87.54.liveadvert.com +208.185.87.55.liveadvert.com +208.185.87.56.liveadvert.com +208.185.87.57.liveadvert.com +208.185.87.58.liveadvert.com +208.185.87.59.liveadvert.com +208.185.87.6.liveadvert.com +208.185.87.60.liveadvert.com +208.185.87.61.liveadvert.com +208.185.87.62.liveadvert.com +208.185.87.63.liveadvert.com +208.185.87.64.liveadvert.com +208.185.87.65.liveadvert.com +208.185.87.66.liveadvert.com +208.185.87.67.liveadvert.com +208.185.87.68.liveadvert.com +208.185.87.69.liveadvert.com +208.185.87.7.liveadvert.com +208.185.87.70.liveadvert.com +208.185.87.71.liveadvert.com +208.185.87.72.liveadvert.com +208.185.87.73.liveadvert.com +208.185.87.74.liveadvert.com +208.185.87.75.liveadvert.com +208.185.87.76.liveadvert.com +208.185.87.77.liveadvert.com +208.185.87.78.liveadvert.com +208.185.87.79.liveadvert.com +208.185.87.8.liveadvert.com +208.185.87.80.liveadvert.com +208.185.87.81.liveadvert.com +208.185.87.82.liveadvert.com +208.185.87.83.liveadvert.com +208.185.87.84.liveadvert.com +208.185.87.85.liveadvert.com +208.185.87.86.liveadvert.com +208.185.87.87.liveadvert.com +208.185.87.88.liveadvert.com +208.185.87.89.liveadvert.com +208.185.87.9.liveadvert.com +208.185.87.90.liveadvert.com +208.185.87.91.liveadvert.com +208.185.87.92.liveadvert.com +208.185.87.93.liveadvert.com +208.185.87.94.liveadvert.com +208.185.87.95.liveadvert.com +208.185.87.96.liveadvert.com +208.185.87.97.liveadvert.com +208.185.87.98.liveadvert.com +208.185.87.99.liveadvert.com +208.6.87.194.dynamic.dol.ru +209.6.87.194.dynamic.dol.ru +210.6.87.194.dynamic.dol.ru +211.6.87.194.dynamic.dol.ru +212.6.87.194.dynamic.dol.ru +213.6.87.194.dynamic.dol.ru +214.6.87.194.dynamic.dol.ru +215.6.87.194.dynamic.dol.ru +2154.bitterstrawberry.com +2156.bitterstrawberry.com +216.6.87.194.dynamic.dol.ru +2161.bitterstrawberry.com +217.6.87.194.dynamic.dol.ru +218.6.87.194.dynamic.dol.ru +219.6.87.194.dynamic.dol.ru +220.6.87.194.dynamic.dol.ru +2200.bitterstrawberry.com +2205.bitterstrawberry.com +2207.bitterstrawberry.com +221.6.87.194.dynamic.dol.ru +222.6.87.194.dynamic.dol.ru +223.6.87.194.dynamic.dol.ru +22329-406.popunder.loading-delivery1.com +2233.bitterstrawberry.com +224.6.87.194.dynamic.dol.ru +225.6.87.194.dynamic.dol.ru +226.6.87.194.dynamic.dol.ru +227.6.87.194.dynamic.dol.ru +228.6.87.194.dynamic.dol.ru +229.6.87.194.dynamic.dol.ru +2297.bitterstrawberry.com +230.6.87.194.dynamic.dol.ru +231.6.87.194.dynamic.dol.ru +232.6.87.194.dynamic.dol.ru +232.bitterstrawberry.com +233.6.87.194.dynamic.dol.ru +233.bitterstrawberry.com +2336.bitterstrawberry.com +234.6.87.194.dynamic.dol.ru +235.6.87.194.dynamic.dol.ru +235.bitterstrawberry.com +236.6.87.194.dynamic.dol.ru +237.6.87.194.dynamic.dol.ru +237.bitterstrawberry.com +2370.bitterstrawberry.com +238.6.87.194.dynamic.dol.ru +239.6.87.194.dynamic.dol.ru +2398.bitterstrawberry.com +2400.bitterstrawberry.com +245.bitterstrawberry.com +247media.com +247media.net +247realmedia.com +247support.adtech.fr +247wsr.com +24x7adservice.com +253.bitterstrawberry.com +254.bitterstrawberry.com +256.bitterstrawberry.com +2565.bitterstrawberry.com +2573.bitterstrawberry.com +27.6.87.194.dynamic.dol.ru +2754.btrll.com +28.6.87.194.dynamic.dol.ru +29.6.87.194.dynamic.dol.ru +29rhino.go2cloud.org +2baners.ero-advertising.com +2cgi.hitbox.com +2ds.ero-advertising.com +2fbanners.ero-advertising.com +2fflatfee.ero-advertising.com +2fspeedclicks.ero-advertising.com +2o7.net +2spyware.us.intellitxt.com +3.ptp22.com +30.6.87.194.dynamic.dol.ru +306.bitterstrawberry.com +309.bitterstrawberry.com +31.6.87.194.dynamic.dol.ru +32.6.87.194.dynamic.dol.ru +33.6.87.194.dynamic.dol.ru +33qx.secoptim.com +34.6.87.194.dynamic.dol.ru +34245.hittail.com +343.bitterstrawberry.com +35.6.87.194.dynamic.dol.ru +350media.com +36.6.87.194.dynamic.dol.ru +360.yahoo.com +360ads.go2cloud.org +37.6.87.194.dynamic.dol.ru +38.6.87.194.dynamic.dol.ru +39.6.87.194.dynamic.dol.ru +390.bitterstrawberry.com +3c41ddc0.se +3dots.co.il +3ds.ero-advertising.com +3dstats.com +4.6.87.194.dynamic.dol.ru +4.ptp22.com +40.6.87.194.dynamic.dol.ru +404.a-signal.info +404.dummywebsitedatabase.com +41.6.87.194.dynamic.dol.ru +411affiliates.ca +42.6.87.194.dynamic.dol.ru +43.6.87.194.dynamic.dol.ru +44.6.87.194.dynamic.dol.ru +45.6.87.194.dynamic.dol.ru +46.6.87.194.dynamic.dol.ru +47.6.87.194.dynamic.dol.ru +47.xg4ken.com +48.6.87.194.dynamic.dol.ru +49.6.87.194.dynamic.dol.ru +49535.com +4affiliate.net +4anners.ero-advertising.com +4d5.net +4dogmedia.go2cloud.org +4players.ivwbox.de +4q.iperceptions.com +4qinvite.4q.iperceptions.com +4qsurvey.com +4web.cz +5.6.87.194.dynamic.dol.ru +5.ptp22.com +50.6.87.194.dynamic.dol.ru +51.6.87.194.dynamic.dol.ru +5123.ru +51yes.com +52.6.87.194.dynamic.dol.ru +53.6.87.194.dynamic.dol.ru +54.6.87.194.dynamic.dol.ru +55.6.87.194.dynamic.dol.ru +555fe0fa.qqc.co +56.6.87.194.dynamic.dol.ru +57.6.87.194.dynamic.dol.ru +58.6.87.194.dynamic.dol.ru +59.6.87.194.dynamic.dol.ru +592.bitterstrawberry.com +594.bitterstrawberry.com +5e5ff159.linkbucks.com +5starsupport.us.intellitxt.com +6.6.87.194.dynamic.dol.ru +6.ptp22.com +60.6.87.194.dynamic.dol.ru +600z.com +61.6.87.194.dynamic.dol.ru +62.6.87.194.dynamic.dol.ru +63.6.87.194.dynamic.dol.ru +63ads.go2cloud.org +64.6.87.194.dynamic.dol.ru +65.6.87.194.dynamic.dol.ru +66.6.87.194.dynamic.dol.ru +67.6.87.194.dynamic.dol.ru +68.6.87.194.dynamic.dol.ru +688.bitterstrawberry.com +69.6.87.194.dynamic.dol.ru +6f307e35.linkbucks.com +7.6.87.194.dynamic.dol.ru +7.ptp22.com +7.rotator.wigetmedia.com +70.6.87.194.dynamic.dol.ru +71.6.87.194.dynamic.dol.ru +718unlimited.com +72.6.87.194.dynamic.dol.ru +7263-7365-7072-7467.reporo.net +73.6.87.194.dynamic.dol.ru +74.6.87.194.dynamic.dol.ru +75.6.87.194.dynamic.dol.ru +76.6.87.194.dynamic.dol.ru +77.6.87.194.dynamic.dol.ru +78.6.87.194.dynamic.dol.ru +79.6.87.194.dynamic.dol.ru +7host.com +7sultans.com +8.6.87.194.dynamic.dol.ru +8.ptp22.com +80.6.87.194.dynamic.dol.ru +81.6.87.194.dynamic.dol.ru +82.6.87.194.dynamic.dol.ru +83.6.87.194.dynamic.dol.ru +84.6.87.194.dynamic.dol.ru +85.6.87.194.dynamic.dol.ru +86.6.87.194.dynamic.dol.ru +87.6.87.194.dynamic.dol.ru +8796.tctm.co +88.6.87.194.dynamic.dol.ru +89.6.87.194.dynamic.dol.ru +9.6.87.194.dynamic.dol.ru +9.ptp22.com +90.6.87.194.dynamic.dol.ru +900quickcash.com +91.6.87.194.dynamic.dol.ru +913.bitterstrawberry.com +92.6.87.194.dynamic.dol.ru +92x.tumblr.com +93.6.87.194.dynamic.dol.ru +94.6.87.194.dynamic.dol.ru +943.bitterstrawberry.com +95.6.87.194.dynamic.dol.ru +96.6.87.194.dynamic.dol.ru +968.bitterstrawberry.com +97.6.87.194.dynamic.dol.ru +9785216.log.optimizely.com +98.6.87.194.dynamic.dol.ru +99.6.87.194.dynamic.dol.ru +99x.com +9ata.ero-advertising.com +9d1a9742.qqc.co +9down.us.intellitxt.com +a-ads.com +a-counter.kiev.ua +a.ad-sys.com +a.admob.com +a.adorika.net +a.adroll.com +a.adtwirl.com +a.alimama.cn +a.applovin.com +a.chartboost.com +a.collective-media.net +a.consumer.net +a.ctasnet.com +a.facdn.net +a.fandango.com +a.glcdn.co +a.intentmedia.net +a.medialytics.com +a.mologiq.net +a.networkworld.com +a.oix.net +a.playlistmag.com +a.remarketstats.com +a.rfihub.com +a.rmgserving.com +a.stanzapub.com +a.suggestedconcept.com +a.thanksearch.com +a.thefreedictionary.com +a.thoughtleadr.com +a.total-media.net +a.tribalfusion.com +a.triggit.com +a.unanimis.co.uk +a.visualrevenue.com +a.vserv.mobi +a.walla.co.il +a.websponsors.com +a.xanga.com +a.zeroredirect.com +a.zeroredirect1.com +a1.cdnpark.com +a1.cdnprk.com +a1.interclick.com +a1.suntimes.com +a12.alphadomainservices.com +a12.alphagodaddy.com +a1388.m.akastream.net +a1599.g.akamai.net +a1873.m.akastream.net +a19.g.akamai.net +a2.cdnpark.com +a2.suntimes.com +a2.websponsors.com +a207.p.f.qz3.net +a3.suntimes.com +a3.websponsors.com +a344.m.akastream.net +a39.ac-images.myspacecdn.com +a4.suntimes.com +a4.websponsors.com +a40.suntimes.com +a4dtracker.com +a4dtrk.com +a5.suntimes.com +a5.websponsors.com +a50.suntimes.com +a51.suntimes.com +a52.suntimes.com +a53.suntimes.com +a54.suntimes.com +a55.suntimes.com +a556.g.ak.snap.com +a5b75231.qqc.co +a615.ac-images.myspacecdn.com +a6ba.com +a7.suntimes.com +a76.p.f.qz3.net +a885.ac-images.myspacecdn.com +a9.com +aa.adfarm1.adition.com +aa.connextra.com +aa.newsblock.dt00.net +aa.newsblock.dt07.net +aa.voice2page.com +aaa.piccash.net +aaa.vmsn.de +aan.atrinsic.com +aaotr.com +aarchives.ifriends.net +aata.ero-advertising.com +aax-us-east.amazon-adsystem.com +aax-us-west.amazon-adsystem.com +ab.goodsblock.dt00.net +abandonglare.8m.com +abbey-ackerman.us +abbey-norsworthy.us +abbie-surber.us +abby-clowers.us +abcjmp.com +abmr.org +abo.libertysurf.fr +about.netster.com +aboutads.quantcast.com +above-gw.liveadvert.com +abovetrack.com +abovetracking.com +abscbn.spinbox.net +abz.com +acac7.home4u.china.com +acbacb9c.ipt.aol.com +access.amberathome.com +accounting.livejasmin.com +accuprod.amobee.com +accurately-locate.com +ace.advertising.com +acecounter.com +acheven2.go2cloud.org +achmedia.com +acim.com +acookie.taobao.com +acotrk.com +acquinityinteractive.com +acspaces.ero-advertising.com +actforvictory.112.2o7.net +action.metaffiliation.com +active-advertising.com +activeagent.at +activeboard.com +actively-seek.com +activewin.us.intellitxt.com +activity.serving-sys.com +actonsoftware.com +actvtrack.com +acvs.mediaonenetwork.net +acvsrv.mediaonenetwork.net +acxiom.com +acxtrk.com +ad-411.com +ad-ace.doubleclick.net +ad-agent.com +ad-apac.doubleclick.net +ad-balancer.net +ad-blaster.com +ad-board.com +ad-cdn.technoratimedia.com +ad-clicks.com +ad-clix.com +ad-emea.doubleclick.net +ad-feeds.com +ad-flow.com +ad-g.doubleclick.net +ad-gbn.com +ad-groups.com +ad-guru.com +ad-help.com +ad-host.com +ad-images.suntimes.com +ad-incisive.grapeshot.co.uk +ad-indicator.com +ad-lister.co.uk +ad-listings.com +ad-lite.com +ad-maker.net +ad-media.org +ad-search.com +ad-server.co.za +ad-server.gulasidorna.se +ad-serverparc.nl +ad-solutions.com +ad-souk.com +ad-space.net +ad-sponsor.com +ad-srv.net +ad-staff.com +ad-style.com +ad-text.com +ad-u.com +ad-vice.biz +ad-visor.com +ad-x.com +ad.100.tbn.ru +ad.120.tbn.ru +ad.3322.net +ad.360yield.com +ad.37.com +ad.51yes.com +ad.71i.de +ad.860k.com +ad.a-ads.com +ad.a8.net +ad.abcnews.com +ad.abctv.com +ad.about.com +ad.aboutit.de +ad.aboutwebservices.com +ad.ad-srv.net +ad.adbull.com +ad.adc-serv.net +ad.aditic.net +ad.adition.de +ad.adition.net +ad.adlantis.jp +ad.adlegend.com +ad.admediaprovider.com +ad.adnet.biz +ad.adnetwork.com.br +ad.adnetwork.net +ad.adotsolution.com +ad.adperium.com +ad.adriver.ru +ad.adrttt.com +ad.ads.dk +ad.adserverplus.com +ad.adtegrity.net +ad.adtoma.com +ad.adultcheck.com +ad.adver.com.tw +ad.adverticum.net +ad.advertise.com +ad.advertstream.com +ad.adworx.at +ad.afy11.net +ad.agava.tbn.ru +ad.agilemedia.jp +ad.agorer.com +ad.allstar.cz +ad.altervista.org +ad.amgdgt.com +ad.anonymousads.com +ad.app-authority.com +ad.apps.fm +ad.ar.doubleclick.net +ad.at.doubleclick.net +ad.au.doubleclick.net +ad.bannerbank.ru +ad.bannerconnect.net +ad.bannerexchange.com +ad.bannernetwork.it +ad.bannerpoint.ru +ad.bb.ru +ad.be.doubleclick.net +ad.blamads.com +ad.blogdrive.com +ad.bnmla.com +ad.bol.bg +ad.bondage.com +ad.br.doubleclick.net +ad.brainbuzz.com +ad.ca.doubleclick.net +ad.candybar.co.kr +ad.cauly.co.kr +ad.cgi.cz +ad.ch.doubleclick.net +ad.chip.de +ad.cl.doubleclick.net +ad.clickhere.ru +ad.clix.pt +ad.clovenetwork.com +ad.cn.doubleclick.net +ad.co-co-co.co +ad.co.doubleclick.net +ad.collective-media.net +ad.connectionads.com +ad.crosswalk.com +ad.cz.doubleclick.net +ad.damnpervert.com +ad.de.doubleclick.net +ad.deviantart.com +ad.digitallook.com +ad.dimpact.co.il +ad.directaclick.com +ad.directrev.com +ad.distrigame.com +ad.dk.doubleclick.net +ad.dmpi.net +ad.domainfactory.de +ad.doubleclick.de +ad.doubleclick.net +ad.dyntracker.de +ad.e-kolay.net +ad.easyadcpc.org +ad.eg.doubleclick.net +ad.egloos.com +ad.ent400-2.tbn.ru +ad.ent400.tbn.ru +ad.ero.be +ad.ero.nl +ad.es.doubleclick.net +ad.ethicalads.net +ad.eurosport.com +ad.family.go.com +ad.fi.doubleclick.net +ad.flurry.com +ad.foxnetworks.com +ad.fr.doubleclick.net +ad.freefind.com +ad.globalinteractive.com +ad.globe7.com +ad.gmtracker.com +ad.go.com +ad.goo.mx +ad.goo.ne.jp +ad.gr.doubleclick.net +ad.grafika.cz +ad.gt.doubleclick.net +ad.harmony-central.com +ad.hinet.net +ad.hk.doubleclick.net +ad.hodomobile.com +ad.hornymatches.com +ad.howstuffworks.com +ad.hpg.com.br +ad.html.it +ad.hu.doubleclick.net +ad.hyena.cz +ad.ibest.com.br +ad.ie.doubleclick.net +ad.iinfo.cz +ad.il.doubleclick.net +ad.ilove.de +ad.in.doubleclick.net +ad.infoseek.com +ad.insightexpress.com +ad.investopedia.com +ad.ipredictive.com +ad.ir.ru +ad.is.doubleclick.net +ad.it.doubleclick.net +ad.ittoolbox.com +ad.jamba.net +ad.jamster.co.uk +ad.jetsoftware.com +ad.jp.ap.valuecommerce.com +ad.jp.doubleclick.net +ad.juksr.com +ad.kat.ph +ad.kataweb.it +ad.keenspace.com +ad.kr.doubleclick.net +ad.kw.doubleclick.net +ad.la.mediaplex.com +ad.lbb.org +ad.leadboltads.net +ad.leadboltapps.net +ad.letsbonus.com +ad.lfstmedia.com +ad.linkexchange.com +ad.linkexchange.net +ad.linksynergy.com +ad.linxcz.cz +ad.liveinternet.ru +ad.lolipop.jp +ad.lupa.cz +ad.m5prod.net +ad.ma.doubleclick.net +ad.madvertise.de +ad.mbn.bb.ru +ad.media-servers.net +ad.mediastorm.hu +ad.mediresource.com +ad.metanetwork.com +ad.mlnadvertising.com +ad.mo.doubleclick.net +ad.msn.co.il +ad.musicmatch.com +ad.mx.doubleclick.net +ad.my.doubleclick.net +ad.mylinea.com +ad.myrice.com +ad.n2434.doubleclick.net +ad.newmail.ru +ad.nifty.com +ad.nl.doubleclick.net +ad.no.doubleclick.net +ad.novasol.com +ad.nozonedata.com +ad.nttnavi.co.jp +ad.nz.doubleclick.net +ad.ohmynews.com +ad.orbitel.bg +ad.payclick.it +ad.paycount.com +ad.pbs.bb.ru +ad.ph.doubleclick.net +ad.pickadz.com +ad.pl.doubleclick.net +ad.playground.ru +ad.propellerads.com +ad.pt.doubleclick.net +ad.publicidees.com +ad.punto-informatico.it +ad.pupsik.ru +ad.rambler.ru +ad.realmedia.co.kr +ad.recursosgratis.com +ad.reduxmedia.com +ad.repubblica.it +ad.retargeter.com +ad.reunion.com +ad.rkads.com +ad.ro.doubleclick.net +ad.ru.doubleclick.net +ad.sa.doubleclick.net +ad.se.doubleclick.net +ad.search.ch +ad.sensismediasmart.com.au +ad.sexcount.de +ad.seznam.cz +ad.sg.doubleclick.net +ad.shinbiro.com +ad.shop.tbn.ru +ad.sid-ads.com +ad.simgames.net +ad.sk.doubleclick.net +ad.sma.punto.net +ad.smilemedia.co.il +ad.smowtion.com +ad.smxchange.com +ad.snv.mediaplex.com +ad.soft365.com +ad.spot200.com +ad.strict.tbn.ru +ad.subnet.dk +ad.targetingmarketplace.com +ad.tbn.ru +ad.technoratimedia.com +ad.tek.no +ad.tenderteen.com +ad.terra.doubleclick.net +ad.text.tbn.ru +ad.th.doubleclick.net +ad.thewheelof.com +ad.tom.com +ad.top50.to +ad.topstat.com +ad.tr.doubleclick.net +ad.trafficgate.net +ad.trafficjunky.net +ad.treiber.de +ad.turn.com +ad.tv2.no +ad.tw.doubleclick.net +ad.uk.doubleclick.net +ad.us.doubleclick.net +ad.usatoday.com +ad.utop.ir +ad.valencemedia.com +ad.valuecommerce.ne.jp +ad.ve.doubleclick.net +ad.virtualave.com +ad.vonna.com +ad.wap4dollars.in +ad.way.cz +ad.webadvertising.ch +ad.webm.tbn.ru +ad.webm120.tbn.ru +ad.wedoo.com +ad.where.com +ad.wz.cz +ad.xertive.com +ad.xtendmedia.com +ad.yadro.ru +ad.yahoo.com +ad.yam.com.tw +ad.yieldads.com +ad.yieldmanager.com +ad.yllix.com +ad.yourmedia.com +ad.yoyo.pl +ad.z5x.net +ad.za.doubleclick.net +ad.zanox.com +ad.zencudo.co.uk +ad0.adspaces.ero-advertising.com +ad0.api.ero-advertising.com +ad0.banners.ero-advertising.com +ad0.data.ero-advertising.com +ad0.data2.ero-advertising.com +ad0.haynet.com +ad0.hpg.com.br +ad0.paycount.com +ad00.hpg.com.br +ad00.paycount.com +ad01.adonspot.com +ad01.advertise.com +ad01.focalink.com +ad01.hpg.com.br +ad01.mediacorpsingapore.com +ad01.paycount.com +ad02.focalink.com +ad03.focalink.com +ad03.hpg.com.br +ad03.paycount.com +ad04.focalink.com +ad04.hpg.com.br +ad04.paycount.com +ad05.focalink.com +ad05.hpg.com.br +ad05.paycount.com +ad06.focalink.com +ad06.hpg.com.br +ad06.paycount.com +ad07.focalink.com +ad07.hpg.com.br +ad07.paycount.com +ad08.focalink.com +ad08.hpg.com.br +ad08.paycount.com +ad09.focalink.com +ad09.hpg.com.br +ad09.paycount.com +ad1.adfarm1.adition.com +ad1.adinfuse.com +ad1.ads.ero-advertising.com +ad1.adspaces.ero-advertising.com +ad1.api.ero-advertising.com +ad1.bannerbank.ru +ad1.banners.ero-advertising.com +ad1.bb.ru +ad1.dada.it +ad1.data.ero-advertising.com +ad1.denverpost.com +ad1.emediate.dk +ad1.ero-advertising.com +ad1.gamezone.de +ad1.hpg.com.br +ad1.icorp.net +ad1.kde.cz +ad1.pamedia.com.au +ad1.paycount.com +ad1.primorye.ru +ad1.radioreti.it +ad1.sbs.co.kr +ad1.searchmiracle.com +ad1.speedbit.com +ad1.trafficx.com +ad1.virtualave.com +ad1.yourmedia.com +ad10.bannerbank.ru +ad10.focalink.com +ad10.hpg.com.br +ad10.paycount.com +ad10.speedbit.com +ad100.hpg.com.br +ad100.paycount.com +ad101.hpg.com.br +ad101.paycount.com +ad102.hpg.com.br +ad102.paycount.com +ad103.hpg.com.br +ad103.paycount.com +ad104.hpg.com.br +ad104.paycount.com +ad105.hpg.com.br +ad105.paycount.com +ad106.hpg.com.br +ad106.paycount.com +ad107.hpg.com.br +ad107.paycount.com +ad108.hpg.com.br +ad108.paycount.com +ad109.hpg.com.br +ad109.paycount.com +ad11.bannerbank.ru +ad11.focalink.com +ad11.hpg.com.br +ad11.paycount.com +ad110.hpg.com.br +ad110.paycount.com +ad111.hpg.com.br +ad111.paycount.com +ad112.hpg.com.br +ad112.paycount.com +ad113.hpg.com.br +ad113.paycount.com +ad114.hpg.com.br +ad114.paycount.com +ad115.hpg.com.br +ad115.paycount.com +ad116.hpg.com.br +ad116.paycount.com +ad117.hpg.com.br +ad117.paycount.com +ad118.hpg.com.br +ad118.paycount.com +ad119.hpg.com.br +ad119.paycount.com +ad12.bannerbank.ru +ad12.focalink.com +ad12.hpg.com.br +ad12.paycount.com +ad120.hpg.com.br +ad120.paycount.com +ad121.hpg.com.br +ad121.paycount.com +ad122.hpg.com.br +ad122.paycount.com +ad123.hpg.com.br +ad123.paycount.com +ad124.hpg.com.br +ad124.paycount.com +ad125.hpg.com.br +ad125.paycount.com +ad126.hpg.com.br +ad126.paycount.com +ad127.hpg.com.br +ad127.paycount.com +ad128.hpg.com.br +ad128.paycount.com +ad129.hpg.com.br +ad129.paycount.com +ad13.bannerbank.ru +ad13.focalink.com +ad13.hpg.com.br +ad13.paycount.com +ad130.hpg.com.br +ad130.paycount.com +ad131.hpg.com.br +ad131.paycount.com +ad132.hpg.com.br +ad132.paycount.com +ad133.hpg.com.br +ad133.paycount.com +ad134.hpg.com.br +ad134.paycount.com +ad135.hpg.com.br +ad135.paycount.com +ad136.hpg.com.br +ad136.paycount.com +ad137.hpg.com.br +ad137.paycount.com +ad138.hpg.com.br +ad138.paycount.com +ad139.hpg.com.br +ad139.paycount.com +ad14.bannerbank.ru +ad14.focalink.com +ad14.hpg.com.br +ad14.paycount.com +ad140.hpg.com.br +ad140.paycount.com +ad141.hpg.com.br +ad141.paycount.com +ad142.hpg.com.br +ad142.paycount.com +ad143.hpg.com.br +ad143.paycount.com +ad144.hpg.com.br +ad144.paycount.com +ad145.hpg.com.br +ad145.paycount.com +ad146.hpg.com.br +ad146.paycount.com +ad147.hpg.com.br +ad147.paycount.com +ad148.hpg.com.br +ad148.paycount.com +ad149.hpg.com.br +ad149.paycount.com +ad15.bannerbank.ru +ad15.focalink.com +ad15.hpg.com.br +ad15.paycount.com +ad150.hpg.com.br +ad150.paycount.com +ad151.hpg.com.br +ad151.paycount.com +ad152.hpg.com.br +ad152.paycount.com +ad153.hpg.com.br +ad153.paycount.com +ad154.hpg.com.br +ad154.paycount.com +ad155.hpg.com.br +ad155.paycount.com +ad156.hpg.com.br +ad156.paycount.com +ad157.hpg.com.br +ad157.paycount.com +ad158.hpg.com.br +ad158.paycount.com +ad159.hpg.com.br +ad159.paycount.com +ad16.bannerbank.ru +ad16.focalink.com +ad16.hpg.com.br +ad16.paycount.com +ad160.hpg.com.br +ad160.paycount.com +ad161.hpg.com.br +ad161.paycount.com +ad162.hpg.com.br +ad162.paycount.com +ad163.hpg.com.br +ad163.paycount.com +ad164.hpg.com.br +ad164.paycount.com +ad165.hpg.com.br +ad165.paycount.com +ad166.hpg.com.br +ad166.paycount.com +ad167.hpg.com.br +ad167.paycount.com +ad168.hpg.com.br +ad168.paycount.com +ad169.hpg.com.br +ad169.paycount.com +ad17.bannerbank.ru +ad17.focalink.com +ad17.hpg.com.br +ad17.paycount.com +ad170.hpg.com.br +ad170.paycount.com +ad171.hpg.com.br +ad171.paycount.com +ad172.hpg.com.br +ad172.paycount.com +ad173.hpg.com.br +ad173.paycount.com +ad174.hpg.com.br +ad174.paycount.com +ad175.hpg.com.br +ad175.paycount.com +ad176.hpg.com.br +ad176.paycount.com +ad177.hpg.com.br +ad177.paycount.com +ad178.hpg.com.br +ad178.paycount.com +ad179.hpg.com.br +ad179.paycount.com +ad18.bannerbank.ru +ad18.focalink.com +ad18.hpg.com.br +ad18.paycount.com +ad180.hpg.com.br +ad180.paycount.com +ad181.hpg.com.br +ad181.paycount.com +ad182.hpg.com.br +ad182.paycount.com +ad183.hpg.com.br +ad183.paycount.com +ad184.hpg.com.br +ad184.paycount.com +ad185.hpg.com.br +ad185.paycount.com +ad186.hpg.com.br +ad186.paycount.com +ad187.hpg.com.br +ad187.paycount.com +ad188.hpg.com.br +ad188.paycount.com +ad189.hpg.com.br +ad189.paycount.com +ad19.bannerbank.ru +ad19.focalink.com +ad19.hpg.com.br +ad19.paycount.com +ad190.hpg.com.br +ad190.paycount.com +ad191.hpg.com.br +ad191.paycount.com +ad192.hpg.com.br +ad192.paycount.com +ad193.hpg.com.br +ad193.paycount.com +ad194.hpg.com.br +ad194.paycount.com +ad195.hpg.com.br +ad195.paycount.com +ad196.hpg.com.br +ad196.paycount.com +ad197.hpg.com.br +ad197.paycount.com +ad198.hpg.com.br +ad198.paycount.com +ad199.hpg.com.br +ad199.paycount.com +ad2.adcept.net +ad2.adfarm1.adition.com +ad2.adinfuse.com +ad2.adspaces.ero-advertising.com +ad2.advglobet.com +ad2.adxpansion.com +ad2.api.ero-advertising.com +ad2.bannerbank.ru +ad2.banners.ero-advertising.com +ad2.bb.ru +ad2.bbmedia.cz +ad2.billboard.cz +ad2.billboard.sk +ad2.data.ero-advertising.com +ad2.doubleclick.net +ad2.doublepimp.com +ad2.ero-advertising.com +ad2.firehousezone.com +ad2.hpg.com.br +ad2.ip.ro +ad2.linxcz.cz +ad2.lupa.cz +ad2.pamedia.com.au +ad2.paycount.com +ad2.pl.mediainter.net +ad2.rambler.ru +ad2.sbs.co.kr +ad2.speedbit.com +ad2.thumbs.ero-advertising.com +ad2.turn.com +ad2.yam.com +ad2.yam.com.tw +ad20.bannerbank.ru +ad20.hpg.com.br +ad20.net +ad20.paycount.com +ad200.hpg.com.br +ad200.paycount.com +ad2000.org +ad201.hpg.com.br +ad201.paycount.com +ad202.hpg.com.br +ad202.paycount.com +ad203.hpg.com.br +ad203.paycount.com +ad204.hpg.com.br +ad204.paycount.com +ad205.hpg.com.br +ad205.paycount.com +ad206.hpg.com.br +ad206.paycount.com +ad207.hpg.com.br +ad207.paycount.com +ad208.hpg.com.br +ad208.paycount.com +ad209.hpg.com.br +ad209.paycount.com +ad21.hpg.com.br +ad21.paycount.com +ad210.hpg.com.br +ad210.paycount.com +ad211.hpg.com.br +ad211.paycount.com +ad212.hpg.com.br +ad212.paycount.com +ad213.hpg.com.br +ad213.paycount.com +ad214.hpg.com.br +ad214.paycount.com +ad215.hpg.com.br +ad215.paycount.com +ad216.hpg.com.br +ad216.paycount.com +ad217.hpg.com.br +ad217.paycount.com +ad218.hpg.com.br +ad218.paycount.com +ad219.hpg.com.br +ad219.paycount.com +ad22.hpg.com.br +ad22.paycount.com +ad220.hpg.com.br +ad220.paycount.com +ad221.hpg.com.br +ad221.paycount.com +ad222.hpg.com.br +ad222.paycount.com +ad223.hpg.com.br +ad223.paycount.com +ad224.hpg.com.br +ad224.paycount.com +ad225.hpg.com.br +ad225.paycount.com +ad226.hpg.com.br +ad226.paycount.com +ad227.hpg.com.br +ad227.paycount.com +ad228.hpg.com.br +ad228.paycount.com +ad229.hpg.com.br +ad229.paycount.com +ad23.hpg.com.br +ad23.paycount.com +ad230.hpg.com.br +ad230.paycount.com +ad231.hpg.com.br +ad231.paycount.com +ad232.hpg.com.br +ad232.paycount.com +ad233.hpg.com.br +ad233.paycount.com +ad234.hpg.com.br +ad234.paycount.com +ad235.hpg.com.br +ad235.paycount.com +ad236.hpg.com.br +ad236.paycount.com +ad237.hpg.com.br +ad237.paycount.com +ad238.hpg.com.br +ad238.paycount.com +ad239.hpg.com.br +ad239.paycount.com +ad24.hpg.com.br +ad24.paycount.com +ad240.hpg.com.br +ad240.paycount.com +ad241.hpg.com.br +ad241.paycount.com +ad242.hpg.com.br +ad242.paycount.com +ad243.hpg.com.br +ad243.paycount.com +ad244.hpg.com.br +ad244.paycount.com +ad245.hpg.com.br +ad245.paycount.com +ad246.hpg.com.br +ad246.paycount.com +ad247.hpg.com.br +ad247.paycount.com +ad248.hpg.com.br +ad248.paycount.com +ad249.hpg.com.br +ad249.paycount.com +ad25.hpg.com.br +ad25.paycount.com +ad250.hpg.com.br +ad250.paycount.com +ad251.hpg.com.br +ad251.paycount.com +ad252.hpg.com.br +ad252.paycount.com +ad253.hpg.com.br +ad253.paycount.com +ad254.hpg.com.br +ad254.paycount.com +ad255.hpg.com.br +ad255.paycount.com +ad26.hpg.com.br +ad26.paycount.com +ad27.hpg.com.br +ad27.paycount.com +ad28.hpg.com.br +ad28.paycount.com +ad29.hpg.com.br +ad29.paycount.com +ad2adnetwork.biz +ad2click.go2cloud.org +ad2games.com +ad3.adcept.net +ad3.adfarm1.adition.com +ad3.adspaces.ero-advertising.com +ad3.api.ero-advertising.com +ad3.bannerbank.ru +ad3.banners.ero-advertising.com +ad3.bb.ru +ad3.data.ero-advertising.com +ad3.fpa.ero-advertising.com +ad3.hpg.com.br +ad3.pamedia.com.au +ad3.paycount.com +ad3.sbs.co.kr +ad3.sina.com.cn +ad3.speedbit.com +ad30.hpg.com.br +ad30.paycount.com +ad31.hpg.com.br +ad31.paycount.com +ad32.hpg.com.br +ad32.paycount.com +ad33.hpg.com.br +ad33.paycount.com +ad34.hpg.com.br +ad34.paycount.com +ad35.hpg.com.br +ad35.paycount.com +ad36.hpg.com.br +ad36.paycount.com +ad37.hpg.com.br +ad37.paycount.com +ad38.hpg.com.br +ad38.paycount.com +ad39.hpg.com.br +ad39.paycount.com +ad4.adfarm1.adition.com +ad4.adspaces.ero-advertising.com +ad4.api.ero-advertising.com +ad4.bannerbank.ru +ad4.banners.ero-advertising.com +ad4.bb.ru +ad4.enet.com.cn +ad4.hpg.com.br +ad4.layerads.ero-advertising.com +ad4.paycount.com +ad4.sina.com.cn +ad4.speedbit.com +ad4.thumbs.ero-advertising.com +ad40.hpg.com.br +ad40.paycount.com +ad41.hpg.com.br +ad41.paycount.com +ad42.hpg.com.br +ad42.paycount.com +ad43.hpg.com.br +ad43.paycount.com +ad44.hpg.com.br +ad44.paycount.com +ad45.hpg.com.br +ad45.paycount.com +ad46.hpg.com.br +ad46.paycount.com +ad47.hpg.com.br +ad47.paycount.com +ad48.hpg.com.br +ad48.paycount.com +ad49.hpg.com.br +ad49.paycount.com +ad4game.com +ad4partners.com +ad5.adfarm1.adition.com +ad5.adrevolver.com +ad5.adspaces.ero-advertising.com +ad5.bannerbank.ru +ad5.banners.ero-advertising.com +ad5.bb.ru +ad5.data.ero-advertising.com +ad5.fpa.ero-advertising.com +ad5.hpg.com.br +ad5.paycount.com +ad5.speedbit.com +ad50.hpg.com.br +ad50.paycount.com +ad51.hpg.com.br +ad51.paycount.com +ad52.hpg.com.br +ad52.paycount.com +ad53.hpg.com.br +ad53.paycount.com +ad54.hpg.com.br +ad54.paycount.com +ad55.hpg.com.br +ad55.paycount.com +ad56.hpg.com.br +ad56.paycount.com +ad57.hpg.com.br +ad57.paycount.com +ad58.hpg.com.br +ad58.paycount.com +ad59.hpg.com.br +ad59.paycount.com +ad6.adfarm1.adition.com +ad6.adspaces.ero-advertising.com +ad6.bannerbank.ru +ad6.banners.ero-advertising.com +ad6.bb.ru +ad6.data.ero-advertising.com +ad6.hpg.com.br +ad6.paycount.com +ad6.speedbit.com +ad60.hpg.com.br +ad60.paycount.com +ad61.hpg.com.br +ad61.paycount.com +ad62.hpg.com.br +ad62.paycount.com +ad63.hpg.com.br +ad63.paycount.com +ad64.hpg.com.br +ad64.paycount.com +ad65.hpg.com.br +ad65.paycount.com +ad66.hpg.com.br +ad66.paycount.com +ad67.hpg.com.br +ad67.paycount.com +ad68.hpg.com.br +ad68.paycount.com +ad69.hpg.com.br +ad69.paycount.com +ad6media.fr +ad7.adspaces.ero-advertising.com +ad7.api.ero-advertising.com +ad7.bannerbank.ru +ad7.banners.ero-advertising.com +ad7.bb.ru +ad7.data.ero-advertising.com +ad7.hpg.com.br +ad7.paycount.com +ad7.speedbit.com +ad7.thumbs.ero-advertising.com +ad70.hpg.com.br +ad70.paycount.com +ad71.hpg.com.br +ad71.paycount.com +ad72.hpg.com.br +ad72.paycount.com +ad73.hpg.com.br +ad73.paycount.com +ad74.hpg.com.br +ad74.paycount.com +ad75.hpg.com.br +ad75.paycount.com +ad76.hpg.com.br +ad76.paycount.com +ad77.hpg.com.br +ad77.paycount.com +ad78.hpg.com.br +ad78.paycount.com +ad79.hpg.com.br +ad79.paycount.com +ad8.adfarm1.adition.com +ad8.adspaces.ero-advertising.com +ad8.api.ero-advertising.com +ad8.bannerbank.ru +ad8.banners.ero-advertising.com +ad8.bb.ru +ad8.data.ero-advertising.com +ad8.hpg.com.br +ad8.paycount.com +ad8.speedbit.com +ad80.hpg.com.br +ad80.paycount.com +ad81.hpg.com.br +ad81.paycount.com +ad82.hpg.com.br +ad82.paycount.com +ad83.hpg.com.br +ad83.paycount.com +ad84.hpg.com.br +ad84.paycount.com +ad85.hpg.com.br +ad85.paycount.com +ad86.hpg.com.br +ad86.paycount.com +ad87.hpg.com.br +ad87.paycount.com +ad88.hpg.com.br +ad88.paycount.com +ad89.hpg.com.br +ad89.paycount.com +ad9.bannerbank.ru +ad9.bb.ru +ad9.hpg.com.br +ad9.paycount.com +ad9.speedbit.com +ad90.hpg.com.br +ad90.paycount.com +ad91.hpg.com.br +ad91.paycount.com +ad92.hpg.com.br +ad92.paycount.com +ad93.hpg.com.br +ad93.paycount.com +ad94.hpg.com.br +ad94.paycount.com +ad95.hpg.com.br +ad95.paycount.com +ad96.hpg.com.br +ad96.paycount.com +ad97.hpg.com.br +ad97.paycount.com +ad98.hpg.com.br +ad98.paycount.com +ad99.hpg.com.br +ad99.paycount.com +adacado.com +adaction.se +adadvisor.net +adagora.com +adam-rizer.us +adaos-ads.net +adap.tv +adaroo.go2cloud.org +adb.nikkei.co.jp +adbanner.cz +adbanner.mylinea.com +adbanner.ro +adbanners.bizland.com +adbard.net +adbest.com +adbest.net +adblade.com +adbonus.com +adboost.com +adboost.serverpower.net +adbooth.net +adbot.com +adbox.beweb.com +adbrands.co.il +adbrite.com +adbucks.com +adbull.com +adbureau.com +adbureau.net +adbutler.com +adbuyer.com +adbuyer2.lycos.com +adc.people-group.su +adcache.aftenposten.no +adcade.com +adcash.com +adcastplus.net +adcell.de +adcenter.mdf.se +adcentriconline.com +adchap.com +adchemical.com +adclick.com +adclick.de +adclick.g.doubleclick.net +adclick.lv +adclick.nl +adclick.pk +adclick.ru +adclickafrica.com +adclickmedia.com +adclient.163.com +adclient.detelefoongids.nl +adclient.uimserv.net +adclient1.tucows.com +adcloud.net +adcolo.com +adcomplete.com +adcontent.saymedia.com +adcount.in +adcounter.globeandmail.com +adcounter.theglobeandmail.com +adcron.com +adcycle.com +adcycle.everyone.net +adcycle.standard.net +addbags.com +addiply.com +addoer.com +addroid.com +addspro.go2cloud.org +addthis.com +addtosite.netster.com +addupp.com +addvaluemedia.go2cloud.org +addynamics.eu +addynamix.com +addynamo.net +adedy.com +adelement.com +adelina-ashman.us +adelina-strode.us +ademails.com +adengage.com +adengine.theglobe.net +adespresso.com +adexcite.com +adexit.com +adexit.de +adexprt.com +adexprts.com +adext.inkclub.com +adextent.com +adf.ero-advertising.com +adf.ly +adfactory88.com +adfarm.mediaplex.com +adfarm.snv.mediaplex.com +adfarm1.adition.com +adfishmedia.go2cloud.org +adfluence.net +adfoc.us +adfootprints.com +adforce.adtech.fr +adforce.com +adforgames.com +adfpaces.ero-advertising.com +adframesrc.com +adfrontiers.com +adfu.slashdot.org +adfuel.com +adfusion.com +adfux.com +adgaem.go2cloud.org +adgalax.com +adgatemedia.com +adgear.com +adgent007.com +adgine.net +adgitize.com +adgorithms.com +adgoto.com +adgroups.com +adhall.com +adhese.be +adhese.com +adhese.net +adhitprofits.com +adhitzads.com +adhood.com +adhost.com +adhostingsolutions.com +adhub.co.nz +adhubz.com +adi.mainichi.co.jp +adialy.go2cloud.org +adicate.com +adify.com +adigniter.org +adimage.asia1.com.sg +adimage.asiaone.com.sg +adimages.4sure.com +adimages.go.com +adimages.homestore.com +adimages.sanomawsoy.fi +adimages.sina.com.hk +adimages.tmpw.net +adimages.whowhere.com +adimg.activeadv.net +adimg.cnet.com +adimg.com.com +adimg.simmani.com +adimg.uimserv.net +adimg.virgilio.it +adimg.zdnet.com +adimg1.chosun.com +adimg1.chosun.net +adimgs.sapo.pt +adimise.com +adimpact.com +adimpression.net +adinch.com +adincl.gopher.com +adindigo.com +adinfinity.com.au +adinfuse.com +adinterax.com +adintop.go2cloud.org +adipics.com +adiqglobal.com +adireland.com +adisfy.com +adisn.com +adistas.go2cloud.org +adition.com +adition.net +adjal.com +adjector.com +adjug.com +adjuggler.com +adjungle.com +adjunky.com +adk2.com +adklip.com +adknowledge.com +adlayer.net +adlead.com +adlegend.com +adlermode.com +adlet.voice2page.com +adlev.neodatagroup.com +adlink.de +adlink.net +adlist.com +adloaded.com +adlock.in +adlog.cbsi.com +adlog.com.com +adlooxtracking.com +adlure.biz +adlure.net +adm.ad.asap-asp.net +adm.fwmrm.net +adm1.admarketplace.co.jp +admagnet.net +admailtiser.com +adman.gr +adman.medius.net +admanage.com +admanagement.ch +admanager.btopenworld.com +admarket.entireweb.com +admarketplace.co.jp +admarketplace.net +admarvel.com +admarvel.s3.amazonaws.com +admaster.candela.com.au +admaster.de +admaster.heyos.com +admax.go2cloud.org +admax.nexage.com +admaya.in +admaym.com +admazing.adfarm1.adition.com +admedia.com +admeld-match.dotomi.com +admeld.adnxs.com +admeld.com +admestate.ru +admeta.com +admex.com +admez.com +admicro1.vcmedia.vn +admicro2.vcmedia.vn +admin.appnext.com +admin.chartboost.com +admin.performancerevenues.com +admin.vserv.mobi +admin12.testandtarget.omniture.com +adminder.com +admission.net +admixer.net +admized.com +admngronline.com +admob.com +admonkey.dapper.net +admotion.com.ar +admpads.com +admulti.com +adnectar.com +adnet-media.net +adnet.asahi.com +adnet.biz +adnet.com +adnet.mediawhiz.com +adnet.ru +adnet.vn +adnetinternational.com +adnetwork.kataweb.it +adnetwork.nextgen.net +adnetworkme.com +adnetxchange.com +adnext.fr +adnimation.com +adnoble.com +adnooka.com +adnxs1.com +adoc.fr +adocean.pl +adonnetwork.com +adonweb.ru +adoptim.com +adorika.net +adotic.com +adotomy.com +adotsolution.com +adotube.com +adp.cplaza.ne.jp +adparad.net +adparlor.com +adpath.mobi +adpay.com +adperfect.com +adperium.com +adperiun.com +adphreak.com +adpick.switchboard.com +adpionier.de +adplans.info +adpop.theglobe.net +adppv.com +adprofit2share.com +adprofs.com +adproject.net +adprojekt.pl +adpron.com +adproper.info +adprotected.com +adprovi.de +adproxy.uimserv.net +adprs.net +adprudence.com +adprudence.rotator.hadj1.adjuggler.net +adprudence.rotator.hadj3.adjuggler.net +adprudence.rotator.hadj4.adjuggler.net +adprudence.rotator.hadj7.adjuggler.net +adq.nextag.com +adreactor.com +adready.com +adready.net +adreadytractions.com +adrent.net +adreporting.com +adres.internet.com +adresellers.com +adrevmedia.com +adrevolver.com +adriana-frausto.us +adriana-howlett.us +adriane-futch.us +adrianna-brumbelow.us +adrianna-kovacs.us +adrienne-atkin.us +adrienne-neihoff.us +adrise.de +adriver.ru +adrocket.com +adrolays.de +adroll.com +adrotator.com +adrotator.se +adrspain.go2cloud.org +adrtrklnk.com +adrunner.mycomputer.nl +adrunner.superstats.com +ads-aa.wunderground.com +ads-au.onelouder.com +ads-b.focalink.com +ads-by.madadsmedia.com +ads-c.focalink.com +ads-f.focalink.com +ads-i.focalink.com +ads-instrument.focalink.com +ads-links.com +ads-pd04.revsci.net +ads-ussj1.focalink.com +ads-ussnv2.focalink.com +ads.100megswebhosting.com +ads.118.lv +ads.123m.valueclick.net +ads.160tracker.com +ads.180solutions.com +ads.247wsr.com +ads.51.net +ads.5ci.lt +ads.5hitshost.net +ads.8833.com +ads.aceweb.net +ads.ad-center.com +ads.ad4game.com +ads.adbrite.com +ads.addesktop.com +ads.adflight.com +ads.adgoto.com +ads.adhood.com +ads.adhostcenter.com +ads.adiquity.com +ads.adk2.com +ads.admarvel.com +ads.admoda.com +ads.adohana.com +ads.adonion.com +ads.adpulse.com +ads.adpv.com +ads.adshub.net +ads.adsonar.com +ads.adtegrity.net +ads.adtiger.de +ads.adultfriendfinder.com +ads.advance.de +ads.advance.net +ads.adverline.com +ads.advertise.net +ads.advertisingz.com +ads.adviva.net +ads.adwitserver.com +ads.adworldnetwork.com +ads.adxpansion.com +ads.affbuzzads.com +ads.affiliates.match.com +ads.ahds.ac.uk +ads.aim4media.com +ads.alchevsk.org +ads.allaboutvision.com +ads.allotraffic.com +ads.alt.com +ads.alwayson-network.com +ads.amarillo.com +ads.amateurmatch.com +ads.amdmb.com +ads.amusive.com +ads.anm.co.uk +ads.aol.com +ads.apollo.lv +ads.app-authority.com +ads.appia.com +ads.applelinks.com +ads.appsgeyser.com +ads.arcuspubblicita.it +ads.as4x.tmcs.net +ads.as4x.tmcs.ticketmaster.com +ads.asap-asp.net +ads.asexstories.com +ads.asia1.com.sg +ads.asiafriendfinder.com +ads.ask.com +ads.aspalliance.com +ads.aspectgroup.co.uk +ads.astroadvice.com +ads.auctionads.com +ads.auctioncity.co.nz +ads.auctions.yahoo.com +ads.autotrader.com +ads.avazu.net +ads.baazee.com +ads.bangkokpost.co.th +ads.banner-link.com.br +ads.banner.dk +ads.beliefnet.com +ads.belointeractive.com +ads.berrynet.com +ads.betanews.com +ads.bianca.net +ads.bidclix.com +ads.bidvertiser.com +ads.bigasia.com +ads.bigfoot.com +ads.bitservices.no +ads.blamads.com +ads.bleepingcomputer.com +ads.blogdrive.com +ads.bloomberg.com +ads.blueadvertise.com +ads.bluelithium.com +ads.bluemongoose.com +ads.bluemountain.com +ads.bmais.net +ads.bonnint.net +ads.bootcampmedia.com +ads.brainerddispatch.com +ads.brazzers.com +ads.bullseye.co.uk +ads.burstnet.com +ads.businessweek.com +ads.buysell.com +ads.buysellads.com +ads.buzzcity.net +ads.byggahus.se +ads.camrecord.com +ads.canoe-inc.com +ads.canoe.ca +ads.cars.com +ads.cashsurfers.com +ads.cbc.ca +ads.cc-dt.com +ads.cdfreaks.com +ads.celtra.com +ads.centerstage.net +ads.centraliprom.com +ads.cgchannel.com +ads.cgnetworks.com +ads.channel4.com +ads.chickclick.com +ads.christianity.com +ads.cimedia.com +ads.clearchannel.com +ads.click2paid.com +ads.clickability.com +ads.clicksor.com +ads.clicmanager.fr +ads.clubplanet.com +ads.cnbc.com +ads.cnet.com +ads.cnn.com +ads.collegclub.com +ads.columbian.com +ads.com.com +ads.comicbookresources.com +ads.communitech.net +ads.communityserver.org +ads.computer.org +ads.consolemul.com +ads.contactmusic.com +ads.contentabc.com +ads.corky.net +ads.cos.com +ads.cpxadroit.com +ads.creafi-online-media.com +ads.creative-serving.com +ads.criticalmass.nl +ads.ctasnet.com +ads.cyberfight.ru +ads.cyberprog.net +ads.cybersales.cz +ads.dada.it +ads.dai.org +ads.danni.com +ads.datinggold.com +ads.datingyes.com +ads.dealnews.com +ads.delfi.ee +ads.deliads.com +ads.deltha.hu +ads.dennisnet.co.uk +ads.denverbroncos.com +ads.depositfiles.com +ads.deskwizz.com +ads.detelefoongids.nl +ads.deviantart.com +ads.devx.com +ads.digital-digest.com +ads.digitalmedianet.com +ads.digitalpoint.com +ads.dinclinx.com +ads.dir.bg +ads.directionsmag.com +ads.discovery.com +ads.doclix.com +ads.doctors.co.il +ads.doktoronline.no +ads.doublemax.net +ads.downloadaccelerator.com +ads.drf.com +ads.drugs.com +ads.dvdreview.com +ads.e-planning.net +ads.economist.com +ads.educationworld.com +ads.einmedia.com +ads.epatra.com +ads.ero-advertising.com +ads.eromarkt.de +ads.erotism.nl +ads.esmas.com +ads.ethicalads.net +ads.eu.msn.com +ads.everyplay.com +ads.exactdrive.com +ads.examiner.net +ads.exchange-it.com +ads.exhedra.com +ads.exoclick.com +ads.expedia.com +ads.expotv.com +ads.expressindia.com +ads.ezboard.com +ads.ezcybersearch.com +ads.facebook.com +ads.fairfax.com.au +ads.fansonly.com +ads.filez.nl +ads.filmup.com +ads.finance.yahoo.com +ads.flabber.nl +ads.flashtrack.net +ads.flightsim.com +ads.flooble.com +ads.focalink.com +ads.fool.com +ads.footar.com +ads.forbes.com +ads.forbes.net +ads.fortunecity.com +ads.fortunecity.de +ads.foxkidseurope.net +ads.fredericksburg.com +ads.free-banners.com +ads.freearcade.com +ads.freecity.de +ads.freshmeat.net +ads.friendfinder.com +ads.ft.com +ads.gamecity.net +ads.gameforgeads.de +ads.gamershell.com +ads.gamesbannernet.com +ads.gamespyid.com +ads.gamigo.de +ads.gawker.com +ads.gemscool.com +ads.genericlink.com +ads.glispa.com +ads.globeandmail.com +ads.globo.com +ads.gltrkk.com +ads.gmtracker.com +ads.goyk.com +ads.greatoutdoors.com +ads.gree.net +ads.grindinggears.com +ads.grupozeta.es +ads.guardian.co.uk +ads.guardianunlimited.co.uk +ads.gumgum.com +ads.guru3d.com +ads.hamtonroads.com +ads.harpers.org +ads.hbv.de +ads.hdn.valueclick.net +ads.heartlight.org +ads.heias.com +ads.herald-mail.com +ads.hexasoft.com.my +ads.heyu.net +ads.hitbox.com +ads.hitcents.com +ads.hnet.valueclick.net +ads.hollandsentinel.com +ads.hollywood.com +ads.home.net +ads.hooqy.com +ads.hornymatches.com +ads.hotbar.com +ads.hpg.com.br +ads.huma.valueclick.net +ads.iac-online.de +ads.iafrica.com +ads.iambic.com +ads.iawsnetwork.com +ads.icq.com +ads.ign.com +ads.iknowthatgirl.com +ads.imdb.nl +ads.imdb.org +ads.img.co.za +ads.inbox.lv +ads.indians.com +ads.indiatimes.com +ads.inet.co.th +ads.inet1.com +ads.ineveryimage.com +ads.infi.net +ads.infonet-thueringen.de +ads.ino.com +ads.intergi.com +ads.internic.co.il +ads.internova.de +ads.ioam.de +ads.iol.co.il +ads.ipowerweb.com +ads.isat-tech.com +ads.islamica.biz +ads.isoftmarketing.com +ads.itmcash.com +ads.itv.com +ads.iweb.cortica.com +ads.iwon.com +ads.jacksonville.com +ads.jobclicks.net +ads.jp.msn.com +ads.jpost.com +ads.juicyads.com +ads.kentonline.co.uk +ads.keywordblocks.com +ads.kinobox.cz +ads.kinxxx.com +ads.komli.com +ads.konsollguiden.no +ads.ksl.com +ads.lacoctelera.com +ads.lanistaads.com +ads.leovegas.com +ads.lfstmedia.com +ads.linkbucks.com +ads.linuxjournal.com +ads.live365.com +ads.livescore.com +ads.luno.net +ads.lx.hu +ads.lycos.de +ads.lycos.fr +ads.lzjl.com +ads.mail3x.com +ads.mainetoday.com +ads.mammanett.no +ads.mariuana.it +ads.masbuchin.com +ads.matchbin.com +ads.matomymobile.com +ads.mayoclinic.com +ads.mcafee.com +ads.mdotm.com +ads.mediacapital.pt +ads.mediaodyssey.com +ads.mediaturf.net +ads.medscape.com +ads.metromanager.com +ads.mgmt.somee.com +ads.mgnetwork.com +ads.mindsetnetwork.com +ads.miniclip.com +ads.mixtraffic.com +ads.mm.ap.org +ads.mmania.com +ads.mobclix.com +ads.mobgold.com +ads.mobilityware.com +ads.mobygames.com +ads.mocean.mobi +ads.models.com +ads.mofos.com +ads.mojiva.com +ads.mojiva.com.edgesuite.net +ads.monstermoving.com +ads.mopub.com +ads.mouseplanet.com +ads.mp.mydas.mobi +ads.mp3.com +ads.mplx.valueclick.net +ads.msn-ppe.com +ads.msn.co.il +ads.msn.com +ads.multimania.lycos.fr +ads.musicfans.com +ads.musicmatch.com +ads.mustangworks.com +ads.mweb.co.th +ads.mytelus.com +ads.myx.net +ads.n-ws.org +ads.nationalenquirer.com +ads.nedmax.com +ads.netmechanic.com +ads.netsol.com +ads.nettsnakk.no +ads.networksolutions.com +ads.networkwcs.net +ads.newdream.net +ads.newline.aol.com +ads.newmedia.cz +ads.newsgeek.co.il +ads.newsint.co.uk +ads.newsland.it +ads.newsquest.co.uk +ads.nexage.com +ads.ninemsn.com +ads.ninemsn.com.au +ads.ninemsn.net +ads.nit.firstream.net +ads.nj.com +ads.nobuffer.info +ads.nola.com +ads.nordichardware.se +ads.norindex.no +ads.northjersey.com +ads.nwsource.com +ads.nyi.net +ads.nytimes.com +ads.nzcity.co.nz +ads.odigo.com +ads.ole.com +ads.omaha.com +ads.one.co.il +ads.onecenter.com +ads.oneplace.com +ads.ontheweb.com +ads.ookla.com +ads.opera.com +ads.optusnet.com.au +ads.orbitz.com +ads.p161.net +ads.passion.com +ads.pennet.com +ads.pennnet.com +ads.pervsonpatrol.com +ads.photosight.ru +ads.phpclasses.org +ads.pixfuture.net +ads.planet.nl +ads.playnet.com +ads.pni.com +ads.poconorecord.com +ads.pointroll.com +ads.pojonews.com +ads.porncash.tv +ads.powerpage.org +ads.powweb.com +ads.predictad.com +ads.premiereinteractive.com +ads.pressdemo.com +ads.primaryclick.com +ads.prisacom.com +ads.pro-market.net +ads.proboards.com +ads.program3.com +ads.pub-fit.com +ads.pubmatic.com +ads.purefuck.com +ads.qadabra.com +ads.qcns.valueclick.net +ads.quantserve.com +ads.quasaraffiliates.com +ads.queendom.com +ads.rampidads.com +ads.rcgroups.com +ads.realmedia.de +ads.realmedia.ro +ads.realslutparty.com +ads.recoletos.es +ads.rediff.com +ads.redtube.com +ads.reelhd.com +ads.regiedepub.com +ads.revmob.com +ads.revsci.net +ads.rkads.com +ads.rmla.com.ar +ads.roar.com +ads.rottentomatoes.com +ads.royalmail.com +ads.rpmseek.com +ads.rubiconproject.com +ads.satyamonline.com +ads.savannahnow.com +ads.saymedia.com +ads.scabee.com +ads.scifi.com +ads.seattletimes.com +ads.seniorfriendfinder.com +ads.sexier.com +ads.sexspaces.com +ads.sexspaces.net +ads.sexspaces.nl +ads.sextip.de +ads.sf.net +ads.shizmoo.com +ads.sid-ads.com +ads.sify.com +ads.sina.com +ads.sitemeter.com +ads.skyhookwireless.com +ads.smartdevicemedia.com +ads.smowtion.com +ads.softure.com +ads.sohh.com +ads.sol.no +ads.sonobi.com +ads.sourceforge.net +ads.southbendtribune.com +ads.space.com +ads.spaceports.com +ads.spaceports.net +ads.sptimes.com +ads.spymac.net +ads.sritis.net +ads.starbanner.com +ads.startext.net +ads.stationplay.com +ads.stephensmedia.com +ads.stepstone.be +ads.stepstone.no +ads.stickyadstv.com +ads.stockbanners.com +ads.sublimedirectory.com +ads.sun.com +ads.svnt.com +ads.swirve.com +ads.switchboard.com +ads.syracuse.com +ads.tackyworld.com +ads.taiphanmem.org +ads.techtv.com +ads.telegraph.co.uk +ads.terra.com.br +ads.thecrimson.com +ads.thedieselstop.com +ads.theglobeandmail.com +ads.theindependent.com +ads.theolympian.com +ads.thestar.com +ads.thewebfreaks.com +ads.thumbr.com +ads.timesdaily.com +ads.timesunion.com +ads.tinet.ie +ads.tlvmedia.com +ads.tmcs.net +ads.top500.org +ads.topcities.com +ads.toronto.com +ads.totallyfreestuff.com +ads.townhall.com +ads.track.net +ads.traderonline.com +ads.traffichunt.com +ads.trafficjunky.net +ads.tribalfusion.com +ads.trinitymirror.co.uk +ads.tripod.com +ads.tripod.lycos.co.uk +ads.tripod.lycos.de +ads.tripod.lycos.es +ads.tripod.lycos.it +ads.tripod.lycos.nl +ads.tripod.spray.se +ads.truongton.net +ads.tweetmeme.com +ads.ucomics.com +ads.undertone.com +ads.unixathome.org +ads.uol.com.ar +ads.us.e-planning.net +ads.usatoday.com +ads.utopiad.com +ads.v3.com +ads.valuead.com +ads.vegas.com +ads.veloxia.com +ads.vitalix.net +ads.vserv.mobi +ads.w3hoster.de +ads.wamba.com +ads.wave.si +ads.wazooweb.com +ads.weather.ca +ads.web.aol.com +ads.web.compuserve.com +ads.web.cs.com +ads.web.de +ads.web.nl +ads.web21.de +ads.webcash.nl +ads.webhosting.info +ads.webindia123.com +ads.webmd.com +ads.webme.com +ads.webnetad.com +ads.webshots.com +ads.websponsors.com +ads.whaleads.com +ads.whi.co.nz +ads.wicked.com +ads.winneronline.com +ads.wnd.com +ads.worldemail.com +ads.worldpages.com +ads.wunderground.com +ads.x10.com +ads.xbiz.com +ads.xhamster.com +ads.xl.pt +ads.xlxtra.com +ads.xpg.com.br +ads.xpics.com +ads.xtargeting.com +ads.xtra.co.nz +ads.xxxad.net +ads.yahoo.com +ads.yeshanews.com +ads.yieldads.com +ads.yimg.com +ads.yllix.com +ads.ynot.com +ads.yourfreedvds.com +ads.yupimsn.com +ads.zazazizoo.com +ads.zchat.no +ads.zdnet.com +ads.zdnet.de +ads.zedo.com +ads.zynga.com +ads0.hpg.com.br +ads00.hpg.com.br +ads01.com +ads01.focalink.com +ads01.hpg.com.br +ads02.focalink.com +ads03.focalink.com +ads03.hpg.com.br +ads04.focalink.com +ads04.hpg.com.br +ads05.focalink.com +ads05.hpg.com.br +ads06.focalink.com +ads06.hpg.com.br +ads07.focalink.com +ads07.hpg.com.br +ads08.focalink.com +ads08.hpg.com.br +ads09.focalink.com +ads09.hpg.com.br +ads1.advance.de +ads1.ami-admin.com +ads1.canoe.ca +ads1.condenet.com +ads1.ero-advertising.com +ads1.focalink.com +ads1.gccx.com +ads1.hpg.com.br +ads1.iweb.cortica.com +ads1.mediacapital.pt +ads1.mocean.mobi +ads1.msn.com +ads1.powerpage.org +ads1.qadabra.com +ads1.searchmiracle.com +ads1.speedbit.com +ads1.spiderware.com +ads1.theglobeandmail.com +ads1.tripod.com +ads1.utopiad.com +ads10.focalink.com +ads10.hpg.com.br +ads10.speedbit.com +ads100.hpg.com.br +ads101.hpg.com.br +ads102.hpg.com.br +ads103.hpg.com.br +ads104.hpg.com.br +ads105.hpg.com.br +ads106.hpg.com.br +ads107.hpg.com.br +ads108.hpg.com.br +ads109.hpg.com.br +ads11.focalink.com +ads11.hpg.com.br +ads110.hpg.com.br +ads111.hpg.com.br +ads112.hpg.com.br +ads113.hpg.com.br +ads114.hpg.com.br +ads115.hpg.com.br +ads116.hpg.com.br +ads117.hpg.com.br +ads118.hpg.com.br +ads119.hpg.com.br +ads12.focalink.com +ads12.hpg.com.br +ads120.hpg.com.br +ads121.hpg.com.br +ads122.hpg.com.br +ads123.hpg.com.br +ads124.hpg.com.br +ads125.hpg.com.br +ads126.hpg.com.br +ads127.hpg.com.br +ads128.hpg.com.br +ads129.hpg.com.br +ads13.focalink.com +ads13.hpg.com.br +ads130.hpg.com.br +ads131.hpg.com.br +ads132.hpg.com.br +ads133.hpg.com.br +ads134.hpg.com.br +ads135.hpg.com.br +ads136.hpg.com.br +ads137.hpg.com.br +ads138.hpg.com.br +ads139.hpg.com.br +ads14.focalink.com +ads14.hpg.com.br +ads140.hpg.com.br +ads141.hpg.com.br +ads142.hpg.com.br +ads143.hpg.com.br +ads144.hpg.com.br +ads145.hpg.com.br +ads146.hpg.com.br +ads147.hpg.com.br +ads148.hpg.com.br +ads149.hpg.com.br +ads15.focalink.com +ads15.hpg.com.br +ads150.hpg.com.br +ads151.hpg.com.br +ads152.hpg.com.br +ads153.hpg.com.br +ads154.hpg.com.br +ads155.hpg.com.br +ads156.hpg.com.br +ads157.hpg.com.br +ads158.hpg.com.br +ads159.hpg.com.br +ads16.focalink.com +ads16.hpg.com.br +ads160.hpg.com.br +ads161.hpg.com.br +ads162.hpg.com.br +ads163.hpg.com.br +ads164.hpg.com.br +ads165.hpg.com.br +ads166.hpg.com.br +ads167.hpg.com.br +ads168.hpg.com.br +ads169.hpg.com.br +ads17.focalink.com +ads17.hpg.com.br +ads170.hpg.com.br +ads171.hpg.com.br +ads172.hpg.com.br +ads173.hpg.com.br +ads174.hpg.com.br +ads175.hpg.com.br +ads176.hpg.com.br +ads177.hpg.com.br +ads178.hpg.com.br +ads179.hpg.com.br +ads18.focalink.com +ads18.hpg.com.br +ads180.hpg.com.br +ads181.hpg.com.br +ads182.hpg.com.br +ads183.hpg.com.br +ads184.hpg.com.br +ads185.hpg.com.br +ads186.hpg.com.br +ads187.hpg.com.br +ads188.hpg.com.br +ads189.hpg.com.br +ads19.focalink.com +ads19.hpg.com.br +ads190.hpg.com.br +ads191.hpg.com.br +ads192.hpg.com.br +ads193.hpg.com.br +ads194.hpg.com.br +ads195.hpg.com.br +ads196.hpg.com.br +ads197.hpg.com.br +ads198.hpg.com.br +ads199.hpg.com.br +ads2.advance.de +ads2.backads.com +ads2.brazzers.com +ads2.callwave.com +ads2.clearchannel.com +ads2.collegclub.com +ads2.collegeclub.com +ads2.condenet.com +ads2.contentabc.com +ads2.delfi.ee +ads2.ero-advertising.com +ads2.exhedra.com +ads2.focalink.com +ads2.gamecity.net +ads2.greystripe.com +ads2.hermoment.com +ads2.hpg.com.br +ads2.iweb.cortica.com +ads2.iwon.com +ads2.jubii.dk +ads2.mediaarmor.com +ads2.medianord.de +ads2.mocean.mobi +ads2.mweb.co.th +ads2.oneplace.com +ads2.playnet.com +ads2.qadabra.com +ads2.rp.pl +ads2.searchmiracle.com +ads2.speedbit.com +ads2.ucomics.com +ads2.utopiad.com +ads2.vortexmediagroup.com +ads20.focalink.com +ads20.hpg.com.br +ads200.focalink.com +ads200.hpg.com.br +ads2000.hw.net +ads201.hpg.com.br +ads202.hpg.com.br +ads203.hpg.com.br +ads204.hpg.com.br +ads205.hpg.com.br +ads206.hpg.com.br +ads207.focalink.com +ads207.hpg.com.br +ads208.hpg.com.br +ads209.hpg.com.br +ads21.focalink.com +ads21.hpg.com.br +ads210.hpg.com.br +ads211.hpg.com.br +ads212.hpg.com.br +ads213.hpg.com.br +ads214.hpg.com.br +ads215.hpg.com.br +ads216.hpg.com.br +ads217.hpg.com.br +ads218.hpg.com.br +ads219.hpg.com.br +ads22.focalink.com +ads22.hpg.com.br +ads220.hpg.com.br +ads221.hpg.com.br +ads222.hpg.com.br +ads223.hpg.com.br +ads224.hpg.com.br +ads225.hpg.com.br +ads226.hpg.com.br +ads227.hpg.com.br +ads228.hpg.com.br +ads229.hpg.com.br +ads23.focalink.com +ads23.hpg.com.br +ads230.hpg.com.br +ads231.hpg.com.br +ads232.hpg.com.br +ads233.hpg.com.br +ads234.hpg.com.br +ads235.hpg.com.br +ads236.hpg.com.br +ads237.hpg.com.br +ads238.hpg.com.br +ads239.hpg.com.br +ads24.focalink.com +ads24.hpg.com.br +ads240.hpg.com.br +ads241.hpg.com.br +ads242.hpg.com.br +ads243.hpg.com.br +ads244.hpg.com.br +ads245.hpg.com.br +ads246.hpg.com.br +ads247.hpg.com.br +ads248.hpg.com.br +ads249.hpg.com.br +ads25.focalink.com +ads25.hpg.com.br +ads250.hpg.com.br +ads251.hpg.com.br +ads252.hpg.com.br +ads253.hpg.com.br +ads254.hpg.com.br +ads255.hpg.com.br +ads26.focalink.com +ads26.hpg.com.br +ads27.focalink.com +ads27.hpg.com.br +ads28.focalink.com +ads28.hpg.com.br +ads29.focalink.com +ads29.hpg.com.br +ads2ads.net +ads2srv.com +ads3.advance.de +ads3.bigasia.com +ads3.condenet.com +ads3.focalink.com +ads3.gamecity.net +ads3.hpg.com.br +ads3.mocean.mobi +ads3.qadabra.com +ads3.searchmiracle.com +ads3.speedbit.com +ads3.ucomics.com +ads3.utopiad.com +ads3.wunderground.com +ads30.focalink.com +ads30.hpg.com.br +ads303.focalink.com +ads304.focalink.com +ads305.focalink.com +ads31.hpg.com.br +ads311.focalink.com +ads316.focalink.com +ads317.focalink.com +ads32.hpg.com.br +ads320.focalink.com +ads33.hpg.com.br +ads34.hpg.com.br +ads35.hpg.com.br +ads36.hpg.com.br +ads37.hpg.com.br +ads38.hpg.com.br +ads39.hpg.com.br +ads4.advance.de +ads4.bigasia.com +ads4.clearchannel.com +ads4.condenet.com +ads4.focalink.com +ads4.gamecity.net +ads4.hpg.com.br +ads4.mocean.mobi +ads4.speedbit.com +ads4.utopiad.com +ads40.hpg.com.br +ads41.hpg.com.br +ads42.hpg.com.br +ads43.hpg.com.br +ads44.hpg.com.br +ads45.hpg.com.br +ads46.hpg.com.br +ads47.hpg.com.br +ads48.hpg.com.br +ads49.hpg.com.br +ads4homes.com +ads4links.com +ads5.bigasia.com +ads5.canoe.ca +ads5.focalink.com +ads5.hpg.com.br +ads5.mocean.mobi +ads5.speedbit.com +ads5.utopiad.com +ads50.hpg.com.br +ads51.hpg.com.br +ads52.hpg.com.br +ads53.hpg.com.br +ads54.hpg.com.br +ads55.hpg.com.br +ads56.hpg.com.br +ads57.hpg.com.br +ads58.hpg.com.br +ads59.hpg.com.br +ads6.focalink.com +ads6.gamecity.net +ads6.hpg.com.br +ads6.mocean.mobi +ads6.speedbit.com +ads6.utopiad.com +ads60.hpg.com.br +ads61.hpg.com.br +ads62.hpg.com.br +ads63.hpg.com.br +ads64.hpg.com.br +ads65.hpg.com.br +ads66.hpg.com.br +ads67.hpg.com.br +ads68.hpg.com.br +ads69.hpg.com.br +ads7.c.no1.asap-asp.net +ads7.focalink.com +ads7.gamecity.net +ads7.hpg.com.br +ads7.inet1.com +ads7.mocean.mobi +ads7.speedbit.com +ads70.hpg.com.br +ads71.hpg.com.br +ads72.hpg.com.br +ads73.hpg.com.br +ads74.hpg.com.br +ads75.hpg.com.br +ads76.hpg.com.br +ads77.hpg.com.br +ads78.hpg.com.br +ads79.hpg.com.br +ads8.c.no1.asap-asp.net +ads8.com +ads8.focalink.com +ads8.hpg.com.br +ads8.mocean.mobi +ads8.speedbit.com +ads8.utopiad.com +ads8.utopiad.comcb3.utopiad.com +ads80.hpg.com.br +ads81.hpg.com.br +ads82.hpg.com.br +ads83.hpg.com.br +ads84.hpg.com.br +ads85.hpg.com.br +ads86.hpg.com.br +ads87.hpg.com.br +ads88.hpg.com.br +ads89.hpg.com.br +ads9.focalink.com +ads9.hpg.com.br +ads9.mocean.mobi +ads9.speedbit.com +ads90.hpg.com.br +ads91.hpg.com.br +ads92.hpg.com.br +ads93.hpg.com.br +ads94.hpg.com.br +ads95.hpg.com.br +ads96.hpg.com.br +ads97.hpg.com.br +ads98.hpg.com.br +ads99.hpg.com.br +adsadvertisement.org +adsafeprotected.com +adsalvo.com +adsances.ero-advertising.com +adsatt.abcnews.starwave.com +adsatt.disney.starwave.com +adsatt.espn.go.com +adsatt.espn.starwave.com +adsatt.go.starwave.com +adsaturation.com +adsbookie.com +adsbrokermirror1.info +adsbrokermirror2.info +adsbrokermirror3.info +adsbrokermirror4.info +adsbrokermirror5.info +adsbrook.com +adscale.de +adscampaign.net +adscendmedia.com +adsclickingnetwork.com +adscontent.indiatimes.com +adscpm.com +adsdaq.com +adsdelight.com +adsdk.com +adsdot.ph +adsearch.adkontekst.pl +adsenger.com +adsensecamp.com +adsenzia.solution.weborama.fr +adserv.680180.net +adserv.adbonus.com +adserv.arrow.com +adserv.brandaffinity.net +adserv.bravenet.com +adserv.de +adserv.entriq.net +adserv.floppybank.com +adserv.gamezone.de +adserv.iafrica.com +adserv.net +adserv.quality-channel.com +adserv.quality-channel.de +adserv.sapo.pt +adserv.usps.com +adserv001.adtech.fr +adserv002.adtech.fr +adserv003.adtech.fr +adserv004.adtech.fr +adserv005.adtech.fr +adserv006.adtech.fr +adserv007.adtech.fr +adserv008.adtech.fr +adserv2.bravenet.com +adserv3.bravenet.com +adserv8.com +adserve.adtoll.com +adserve.advertising.com +adserve.bizrate.com +adserve.gogreece.com +adserve.ph +adserver-2.ig.com.br +adserver-4.ig.com.br +adserver-5.ig.com.br +adserver-fx.com +adserver.00web.com +adserver.100free.com +adserver.2618.com +adserver.71i.de +adserver.ad-space.net +adserver.adreactor.com +adserver.ads.com.ph +adserver.adtech.de +adserver.adtech.fr +adserver.adtechus.com +adserver.adultfriendfinder.com +adserver.advertist.com +adserver.affiliation.com +adserver.airmiles.ca +adserver.aphrodite.tweakers.net +adserver.barrapunto.com +adserver.bizland-inc.net +adserver.bluewin.ch +adserver.brandilitynetwork.de +adserver.cash4webmaster.de +adserver.click4cash.de +adserver.co.il +adserver.cyberpresse.ca +adserver.cz.cc +adserver.directforce.net +adserver.dnps.com +adserver.dotcommedia.de +adserver.dotmusic.com +adserver.download3000.com +adserver.fmpub.net +adserver.freecity.de +adserver.freenet.de +adserver.friendfinder.com +adserver.gameparty.net +adserver.gamigo.de +adserver.hardwareanalysis.com +adserver.harktheherald.com +adserver.hellasnet.gr +adserver.hk.outblaze.com +adserver.ig.com.br +adserver.ilmessaggero.it +adserver.inetzone.com +adserver.infotiger.com +adserver.interfree.it +adserver.inwind.it +adserver.ision.de +adserver.itsfogo.com +adserver.janes.com +adserver.janes.org +adserver.juicyads.com +adserver.kimia.es +adserver.lanacion.com.ar +adserver.libero.it +adserver.lunarpages.com +adserver.matchcraft.com +adserver.mindshare.de +adserver.monstersandcritics.com +adserver.mylinea.com +adserver.news.com.au +adserver.ngz-network.de +adserver.nydailynews.com +adserver.phatmax.net +adserver.phillyburbs.com +adserver.planet-multiplayer.de +adserver.plhb.com +adserver.portal.pl +adserver.portalofevil.com +adserver.portugalmail.net +adserver.portugalmail.pt +adserver.radio-canada.ca +adserver.sanomawsoy.fi +adserver.sextracker.com +adserver.sharewareonline.com +adserver.singnet.com +adserver.skyhookwireless.com +adserver.snowball.com +adserver.softonic.com +adserver.te.pt +adserver.terra.com.br +adserver.theknot.com +adserver.theonering.net +adserver.thisislondon.co.uk +adserver.tilted.net +adserver.trader.ca +adserver.trafficsyndicate.com +adserver.trellian.com +adserver.tweakers.net +adserver.ubiyoo.com +adserver.ugo.com +adserver.ukplus.co.uk +adserver.us.outblaze.com +adserver.veruta.com +adserver.virgin.net +adserver.weakgame.com +adserver.web.de +adserver.webads.nl +adserver.x3.hu +adserver.yahoo.com +adserver.zencudo.co.uk +adserver.zylom.com +adserver1-images.backbeatmedia.com +adserver1.backbeatmedia.com +adserver1.harvestadsdepot.com +adserver1.hookyouup.com +adserver1.ogilvy-interactive.de +adserver1.realtracker.com +adserver1.shareconnector.com +adserver1.sonymusiceurope.com +adserver2.popdata.de +adserver2.realtracker.com +adserverplus.com +adserverpub.com +adserversolutions.com +adserverstatus.com +adservice.everyone.com +adservice.everyone.net +adserving.autotrader.com +adserving.budsinc.com +adserving.cpxadroit.com +adserving.cpxinteractive.com +adserving.flagcpc.com +adservinginternational.com +adservingnetwork.com +adservpi.com +adservr.de +adservr.net +adsexpand.go2cloud.org +adsfac.net +adsfac.us +adsfast.com +adsforindians.com +adsfundi.com +adsfundi.net +adsfuse.com +adsgangsta.com +adshiftmedia.com +adshooter.com +adshopping.com +adshost1.com +adshost2.com +adshot.de +adshuffle.com +adshuh.com +adsignals.com +adsinimages.com +adsintl.starwave.com +adskeeper.co.uk +adsl-71-138-149-62.dsl.pltn13.pacbell.net +adslidango.com +adslingers.com +adsmania.biz +adsmarket.co.il +adsmarket.es +adsmarketgroup.com +adsmarketlatam.com +adsmart.com +adsmart.de +adsmart.net +adsmart.ru +adsmile.biz +adsmobil.go2cloud.org +adsmoon.com +adsnext.net +adsniper.ru +adsoldier.com +adsolutions.co.il +adsolutions.nl +adson.awempire.com +adsonar.com +adsoogle.com +adsopedia.go2cloud.org +adsopx.com +adsovo.com +adspacds.ero-advertising.com +adspace.ro +adspaces.ero-ades.ero-advertising.com +adspaces.ero-advertising.com +adspaces.ero-apaces.ero-advertising.com +adspaces2.ero-advertising.com +adspaes.ero-advertising.com +adspages.ero-advertising.com +adspaper.org +adspcces.ero-advertising.com +adspdbl.com +adspeed.com +adsphinx.com +adspics.com +adspinner.com +adspirit.de +adsplay.in +adspynet.com +adsring.com +adsrv.dispatch.com +adsrv.hpg.com.br +adsrv.ilife.com +adsrv.iol.co.za +adsrv.tuscaloosanews.com +adsrv.us +adsrv.wilmingtonstar.com +adsrv1.tapad.com +adsrv2.gainesvillesun.com +adsrv2.theledger.com +adsrv2.wilmingtonstar.com +adsrvmedia.com +adsrvr.org +adssl01.adtech.fr +adssl02.adtech.fr +adsspaces.ero-advertising.com +adstaces.ero-advertising.com +adstats.adviva.net +adstil.indiatimes.com +adstoclick.com +adstream.cardboardfish.com +adsupermarket.com +adsuperstar.com +adsupervisor.com +adsupply.com +adsurve.com +adsvert.com +adsview.com +adsvr.adknowledge.com +adsvr.taipeilink.net +adswap.com +adsweb.tiscali.de +adsweb.tiscali.it +adswizz.com +adsx.greystripe.com +adsx.greystripe.com +adsxgm.com +adsymptotic.com +adsynergy.com +adsys.townnews.com +adsyst.biz +adtag.msn.ca +adtag.sympatico.ca +adtagger.com +adtaily.com +adtaily.eu +adtarget.ro +adtecc.com +adtech.de +adtegrity.com +adtegrity.net +adtegrity.spinbox.net +adtendant.weatherforyou.com +adteractive.com +adtest.aim4media.com +adtgs.com +adtiger.de +adtimes.nytimes.com +adtlgc.com +adtoadd.com +adtoll.com +adtology1.com +adtology2.com +adtology3.com +adtoma.com +adtoox.com +adtotal.pl +adtpix.com +adtrack.cimedia.net +adtrack.king.com +adtrack.ministerial5.com +adtrack.pichunter.com +adtrack.right-ads.com +adtrack.trafficwave.net +adtracker.inmobi.com +adtracking.asia +adtracking.vinden.nl +adtrade.net +adtrading.de +adtraffic.org +adtransfer.net +adtrix.com +adtrovert.com +adtruism.com +adtwirl.com +aduacni.com +aducash.com +adult-adv.com +adult-banner-ads.com +adultbannerexchange.de +adultfriendfinder.com +adultmoda.com +adulttubetraffic.com +adv-adserver.com +adv-banner.iol.it +adv-banner.libero.it +adv-g009.us.intellitxt.com +adv-plus.com +adv.247realmedia.com +adv.abv.bg +adv.aport.ru +adv.bannercity.ru +adv.blogupp.com +adv.co.il +adv.domaindirect.it +adv.freeonline.it +adv.gazeta.pl +adv.h2porn.com +adv.hwupgrade.it +adv.ilsole24ore.it +adv.lampsplus.com +adv.neto.net.il +adv.noblepoker.com +adv.pconline.com.cn +adv.quipo.it +adv.sexcounter.com +adv.surinter.net +adv.virgilio.it +adv.webmd.com +adv.wp.pl +adv.yo.cz +adv0052.247realmedia.com +adv01.interfree.it +adv1.opportunityads.net +adv2.absoluteagency.com +adv777.com +adv9.net +advancecashloans.com +advancedad.com +advancedadapters.com +advancedsoftwaresupport.com +advantageglobalmarketing.com +advconversion.com +adveng.hiasys.com +adventory.com +adventuresinnetmarketing.com +advenueplatform.com +adverline.com +adverline.fr +adversaldisplay.com +adversalservers.com +advert.bayarea.com +advert.e-se.ru +advert.exaccess.ru +advert.hpg.com.br +advert.trainingtools.com +advert.uloz.to +advert.webdifusao-server.com +advert0.hpg.com.br +advert1.hpg.com.br +advert18.hpg.com.br +advert19.hpg.com.br +advert218.hpg.com.br +advert219.hpg.com.br +advert220.hpg.com.br +advert221.hpg.com.br +advert222.hpg.com.br +advert223.hpg.com.br +advert224.hpg.com.br +advert225.hpg.com.br +advert226.hpg.com.br +advert227.hpg.com.br +advert228.hpg.com.br +advert229.hpg.com.br +advert230.hpg.com.br +advert231.hpg.com.br +advert232.hpg.com.br +advert233.hpg.com.br +advert234.hpg.com.br +advert235.hpg.com.br +advert236.hpg.com.br +advert237.hpg.com.br +advert238.hpg.com.br +advert239.hpg.com.br +advert240.hpg.com.br +advert241.hpg.com.br +advert242.hpg.com.br +advert243.hpg.com.br +advert244.hpg.com.br +advert245.hpg.com.br +advert246.hpg.com.br +advert247.hpg.com.br +advert248.hpg.com.br +advert249.hpg.com.br +advert250.hpg.com.br +advert251.hpg.com.br +advert252.hpg.com.br +advert253.hpg.com.br +advert254.hpg.com.br +advert255.hpg.com.br +advert3.hpg.com.br +advert30.hpg.com.br +advert31.hpg.com.br +advert33.hpg.com.br +advert34.hpg.com.br +advert35.hpg.com.br +advert36.hpg.com.br +advert37.hpg.com.br +advert38.hpg.com.br +advert39.hpg.com.br +advert4.hpg.com.br +advert40.hpg.com.br +advert41.hpg.com.br +advert43.hpg.com.br +advert44.hpg.com.br +advert45.hpg.com.br +advert46.hpg.com.br +advert47.hpg.com.br +advert48.hpg.com.br +advert49.hpg.com.br +advert5.hpg.com.br +advert50.hpg.com.br +advert51.hpg.com.br +advert53.hpg.com.br +advert54.hpg.com.br +advert55.hpg.com.br +advert6.hpg.com.br +advert7.hpg.com.br +advert8.hpg.com.br +advert9.hpg.com.br +advertarium.com.ua +advertbox.us +adverteerdirect.nl +advertex.media-vertex.com +adverticum.com +adverticum.net +adverticus.de +advertis.go2cloud.org +advertise.about.com +advertise.com +advertise.tucows.com +advertiseforfree.co.za +advertisegame.com +advertiseireland.com +advertisementbanners.com +advertiser.adknowledge.com +advertiser.edintorni.net +advertiser.microad.jp +advertiser.net +advertiser.superstats.com +advertiserjob.com +advertisers.doubleclick.com +advertisers.doubleclick.net +advertiserwanted.com +advertisespace.com +advertiseyourgame.com +advertising-software.com +advertising-world.com +advertising.christiansunite.com +advertising.com +advertising.cz +advertising.de +advertising.dk +advertising.entensity.net +advertising.gammae.com +advertising.gfxartist.com +advertising.hardwarezone.com +advertising.hiasys.com +advertising.ie +advertising.lycos.com +advertising.mortgagebankers.org +advertising.net +advertising.palltalk.com +advertising.paltalk.com +advertising.spreadomat.net +advertising365.com +advertisingbanners.com +advertisingiq.com +advertisingpath.net +advertisingsex.com +advertisingvalue.info +advertizer-test1.asap-asp.net +advertjunction.com +advertlead.net +advertlets.com +advertmarket.com +advertmarketing.com +advertmedia.de +advertmedias.com +advertpay.net +advertpro.sitepoint.com +advertpro2.babymedia.no +adverts.archant.co.uk +adverts.creativemark.co.uk +adverts.digitalspy.co.uk +adverts.freeloader.com +advertserve.com +advertstream.com +advglobet.com +advgoogle.com +advido.com +adview.ppro.de +adviews-sponsor.de +advision.webevents.yahoo.com +adviva.com +adviva.net +advm10.com +advmania.com +advmedia.go2cloud.org +advmedialtd.com +advokat-grodno.com +advolution.de +advombat.ru +advprotraffic.com +advrtice.com +advt.webindia123.com +adw.ero-advertising.com +adwaver.de +adweb.hornymatches.com +adweb1.hornymatches.com +adweb2.hornymatches.com +adwhirl.com +adwired.mobi +adwires.com +adwords.immortalnight.com +adworkmedia.com +adworkmedia.net +adworks.rediff.com +adworldmedia.com +adworldmedia.net +adwpaces.ero-advertising.com +adx.allstar.cz +adx.arip.co.th +adx.atnext.com +adx.metanetwork.com +adxite.com +adxmarket.com +adxpansion.com +adxpose.com +adxpower.com +adxregie.com +adyoulike.com +adyoz.com +adzerk.net +adzerver.com +adzhub.com +adzly.com +adzmob.com +adzone.stltoday.com +adzones.com +adzonk.com +adzouk.com +adztopia.com +aehistory.112.2o7.net +aesxo.com +aetv.112.2o7.net +afe.specificclick.net +aff.clickon.co.il +aff.netordersys.com +aff.ringtonepartner.com +aff.zoomtrader.com +affbanners.bizland.com +affbuzzads.com +affcloud.go2cloud.org +affguru.go2cloud.org +affilcrtopcolle.112.2o7.net +affili24.com +affili24.net +affiliate.1800flowers.com +affiliate.365adsolutions.com +affiliate.7host.com +affiliate.a4dtracker.com +affiliate.ab1trk.com +affiliate.admtracker.com +affiliate.aol.com +affiliate.baazee.com +affiliate.c2mclicks.com +affiliate.casinorewards.com +affiliate.ckmtracker.com +affiliate.cpavhits.com +affiliate.distrigame.com +affiliate.domaindirect.net +affiliate.doteasy.com +affiliate.doubleyourdating.com +affiliate.dtiserv.com +affiliate.everyone.net +affiliate.free-banners.com +affiliate.friendsearch.com +affiliate.gamestop.com +affiliate.glbtracker.com +affiliate.gmtracker.com +affiliate.gwmtracker.com +affiliate.hcatracker.com +affiliate.icdsoft.com +affiliate.idritracker.com +affiliate.landsend.com +affiliate.mediaclicktrker.com +affiliate.ncbuy.com +affiliate.no.espotting.com +affiliate.oastracker.com +affiliate.plugnpay.com +affiliate.suntrck.com +affiliate.tfntracker.com +affiliate.thedatingnetwork.com +affiliate.travelnow.com +affiliate.trk4.com +affiliate.viator.com +affiliate.yeahmobi.com +affiliate.zap.co.il +affiliateads.go2cloud.org +affiliateclick.com +affiliatedave.com +affiliatefuel.com +affiliategateways.go2cloud.org +affiliategateways.hasoffers.com +affiliateharvest.com +affiliatehub.skybet.com +affiliatekeeper.com +affiliatemarketing.directtrack.com +affiliatematch.com +affiliatequality.com +affiliates.about.com +affiliates.allposters.com +affiliates.bfast.com +affiliates.bigdoggie.net +affiliates.cherryaffiliates.omarsys.com +affiliates.coolonlineoffers.com +affiliates.de +affiliates.eaglewebassets.com +affiliates.esellerate.net +affiliates.galapartners.co.uk +affiliates.globat.com +affiliates.internationaljock.com +affiliates.kissmyads.com +affiliates.kliks.nl +affiliates.loanpush.com +affiliates.macromedia.com +affiliates.market-ace.com +affiliates.matchmaker.com +affiliates.net +affiliates.nl +affiliates.org +affiliates.powweb.com +affiliates.quintura.com +affiliates.reunion.com +affiliates.tyroodr.com +affiliates.umaxsearch.com +affiliates.valuepass.com +affiliates.vcommission.com +affiliates.wintingo.com +affiliates.worldhot.com +affiliateshop.com +affiliatetalk.net +affiliatetracking.com +affiliatetracking.net +affiliation.rueducommerce.fr +affiliaweb.eu +affilitracker.biz +affina.com +affinitytracking.go2cloud.org +affscout.go2cloud.org +afftrack.com +afftracker.info +afftrackinglinks.com +afiliati.ro +afreehome.com +africandevelopmentbank.com +afs.ero-advertising.com +afterdawn.us.intellitxt.com +afterdownload.com +aftp.linksynergy.com +aftrk.com +ag.travelocity.com.edgesuite.net +agata-lillard.us +agata-wadlington.us +agmedia.go2cloud.org +agmtrk.com +agnstaging.com +agnvbmaus.112.2o7.net +agpaffiliates.go2cloud.org +ags.beta.advertising.com +ahomedia.zxfactory.nl +ahyea.com +ai.hitbox.com +ai.net +ai.pricegrabber.com +ai.yimg.jp +aim-charts.pf.aol.com +aimtoday.aol.com +aimtop100.com +aio.lp.mydas.mobi +airpush.com +aj.600z.com +aj.adjungle.com +ajcclassifieds.com +ajim.delphibbs.com +ak.imgfarm.com +ak.linkstorm.net +ak.pipoffers.apnpartners.com +ak.tfag.de +ak.toolbar.mywebsearch.com +ak1.abmr.net +aka-cdn-ns.adtech.de +aka-cdn-ns.adtechus.com +aka.p80.net +akaads-abc.starwave.com +akaads-espn.starwave.com +akamai.bizrate.com +akamai.smartadserver.com +akmnetwork.com +aktrack.pubmatic.com +akway.com +al.myrice.com +alaina-hain.us +alana-chao.us +alana-yancy.us +albanytimesunion.122.2o7.net +albert-mcalpine.us +albinoblacksheep.us.intellitxt.com +alea.adam.daum.net +aleah-wilfong.us +alexa-gunther.us +alexa-harrod.us +alexa.com +alexandra-bangs.us +alexandra-kraatz.us +alexandra-magruder.us +alexandria-domingo.us +alexandria-pang.us +alexandria-willems.us +alexis-logston.us +alice-christenson.us +alice-crim.us +alice-gentile.us +alice-marcum.us +alicia-bodenhamer.us +alicia-ching.us +alicia-hepp.us +alisa-durgin.us +alisa-green.us +alisa-rake.us +alissa-blanchard.us +alivelocal.com +all.7pk.com +alladream.go2cloud.org +allhiphop.us.intellitxt.com +allie-cunha.us +allie-hobdy.us +allison-anton.us +allison-gobeil.us +allison-lundeen.us +allosponsor.com +alloydigital.com +allsolutionsnetwork.com +allwords.com +allyes.com +alogin.linksynergy.com +alphagirlz.mobi +alpventures.bravejournal.com +alt.bugsense.appspot.com +alt.bugsense.com +alyse-bolster.us +alyse-cram.us +alyse-mccully.us +alysia-lenoir.us +alysia-toon.us +alyson-canaday.us +alyson-klein.us +amateur.xxxcounter.com +amazingcounters.com +amber-arendt.us +amch.questionmarket.com +amclicks.com +ami-goncalves.us +amica.ivwbox.de +amie-koepke.us +amoffers.go2cloud.org +amoffers.hasoffers.com +ams1.ib.adnxs.com +ams10.ib.adnxs.com +ams2.ib.adnxs.com +ams3.ib.adnxs.com +ams4.ib.adnxs.com +ams5.ib.adnxs.com +ams6.ib.adnxs.com +ams7.ib.adnxs.com +ams8.ib.adnxs.com +ams9.ib.adnxs.com +amscdn.btrll.com +amtracking01.com +amusive.com +amy-stahr.us +an.adhood.com +an.blamads.com +an.tacoda.net +an.yandex.ru +anad.tacoda.net +analytics-news.seevolution.com +analytics.1and1.com +analytics.1und1.de +analytics.admob.com +analytics.adspaces.ero-advertising.com +analytics.archive.org +analytics.argonfiles.com +analytics.aweber.com +analytics.ero-advertising.com +analytics.localytics.com +analytics.matchbin.com +analytics.tbm-ntwk.com +analyzer.liveads.no +analyzer.pasta.dianxinos.com +anastasia-bale.us +anastasia-okelley.us +anastasiaaffiliate.go2cloud.org +ancestrymsn.112.2o7.net +andpop.us.intellitxt.com +andre-larimore.us +andria-beebe.us +andria-tabarez.us +android-sdk31.transpera.com +android.bcfads.com +android.mobpartner.mobi +android.revmob.com +androidsdk.ads.mp.mydas.mobi +angebot0.ivwbox.de +angelia-malave.us +angelina-mckernan.us +angelina-roberts.us +angelina-stacey.us +angelique-luis.us +angiba.112.2o7.net +angie-tapp.us +angmar.112.2o7.net +angpar.112.2o7.net +angtr.112.2o7.net +angts.112.2o7.net +angvac.112.2o7.net +animediablo.com +anioffers.com +anita-fey.us +anita-hubbs.us +anita-magana.us +anlt.dnsdynamic.com +anm.intelli-direct.com +ann-graziani.us +ann-morford.us +ann-selfridge.us +anna-honea.us +anna-lovin.us +anne-kennison.us +anners.ero-advertising.com +annette-levin.us +annette-schacher.us +annie-canipe.us +annika-tolleson.us +annonser.dagbladet.no +annuncio.com.do +anon.doubleclick.speedera.net +anonymousads.com +answers.us.intellitxt.com +antenne.ivwbox.de +antoinette-cowles.us +antoinette-grabowski.us +antoinette-hanlon.us +antoinette-meisner.us +anya-rigby.us +anymanga.com +aol.ivwbox.de +aoldmoz.122.2o7.net +aolsvc.aol.com +aolturnercnnmoney.112.2o7.net +aolturnersi.122.2o7.net +aolwpmq.112.2o7.net +aolwpmqnoban.112.2o7.net +aolwpnscom.112.2o7.net +aolwpnswhatsnew.112.2o7.net +ap.adoori.com +ap.lookout.com +ap.xad.com +ap1.alphagirlz.mobi +ap2.alphagirlz.mobi +apachestat.cimedia.net +apdigitalorg.112.2o7.net +api-tansoapps.com +api.140proof.com +api.ad.ly +api.airpush.com +api.analytics.omgpop.com +api.applifier.com +api.atdmt.com +api.bizographics.com +api.chartboost.com +api.choicestream.com +api.citygridmedia.com +api.crashlytics.com +api.crittercism.com +api.demandbase.com +api.elasticemail.com +api.ero-advertising.com +api.flurry.com +api.geosrv.info +api.intensifier.de +api.kissmetrics.com +api.mixpanel.com +api.mobpartner.mobi +api.optimizely.com +api.revmob.com +api.skyhookwireless.com +api.solvemedia.com +api.superfish.com +api.tapfortap.com +api.thetrafficstat.net +api.v2.sslsecure1.com +api.v2.sslsecure10.com +api.v2.sslsecure2.com +api.v2.sslsecure3.com +api.v2.sslsecure4.com +api.v2.sslsecure5.com +api.v2.sslsecure6.com +api.v2.sslsecure7.com +api.v2.sslsecure8.com +api.v2.sslsecure9.com +api.value-bit.com +api.viglink.com +api.yeahmobi.com +api.yp.com +api1.intellicontact.com +api28.thetrafficstat.net +api31.thetrafficstat.net +apkquery.ksmobile.net +apo.ero-advertising.com +app-authority.com +app.app-authority.com +app.cocolog-nifty.com +app.compete.com +app.cooleremail.com +app.crittercism.com +app.crowdscience.com +app.desktop.ak-networks.com +app.icontact.com +app.kissmetrics.com +app.lfstmedia.com +app.mlcampaignru.com +app.mlnewsletterru.com +app.qualaroo.com +app.sgiz.mobi +app.sgizmo.com +app.simplycast.com +appflood.com +appia.com +appleglobal.112.2o7.net +applestoreus.112.2o7.net +appliedsemantics.com +applifier.com +applift.com +apps.buzzcity.net +apps.crashlytics.com +apps.crittercism.com +apps.fm +apps.leadbolt.com +apps.livejasmin.com +apps.mobilityware.com +apptornado.com +april-blackburn.us +april-leclaire.us +april-tindell.us +april-wilcoxon.us +aproegroup.go2cloud.org +apromoweb.com +apture.com +apu04c0.audientia.net +apu0640.audientia.net +apx.avazutracking.net +apx.internal-redirect.avazutracking.net +aqua.7eer.net +aquantive.com +aquasoft.us.intellitxt.com +aqueduct.com +ar.2.cqcounter.com +ar.voicefive.com +ar1.atwola.com +ar2.atwola.com +ar3.atwola.com +ar4.atwola.com +ar5.atwola.com +ar6.atwola.com +ar7.atwola.com +ar8.atwola.com +ar9.atwola.com +arabyads.go2cloud.org +araceli-crabtree.us +arachne.cz +aragonadvertising.go2cloud.org +arc1.msn.com +arc10.msn.com +arc11.msn.com +arc2.msn.com +arc3.msn.com +arc4.msn.com +arc5.msn.com +arc6.msn.com +arc7.msn.com +arc8.msn.com +arc9.msn.com +archive01.ixn.vmsn.de +ard.ihookup.com +ard.xxxblackbook.com +ard.yahoo.co.jp +ardboers.ivwbox.de +areasnap.com +areport.linksynergy.com +arianna-bowerman.us +arianna-chaput.us +aribo.net +arielle-younkin.us +ariva.ivwbox.de +arizona-marketplace.com +arlene-scalia.us +arlequin0.levillage.org +arlequin01.levillage.org +arlequin02.levillage.org +armadasearch.com +arscounter.com +arthur-vallecillo.us +article19.com +artistdirectcollect.247realmedia.com +artwork.aim4media.com +aru.index.hu +arztzeit.ivwbox.de +as.adfonic.net +as.adwave.com +as.casalemedia.com +as.chango.com +as.gostats.com +as.innity.com +as.sexad.net +as5000.wunderground.com +ashely-colmenero.us +ashely-felts.us +ashlee-pavon.us +ashleigh-shellenbarger.us +ashley-marchan.us +ashly-legette.us +ashlyn-socha.us +ashlyn-tarin.us +ashwebmail.createsend.com +asiarevenue.go2cloud.org +askcm.com +askjolene.ero-advertising.com +askmen.us.intellitxt.com +askmen2.us.intellitxt.com +askspecifically.com +asotrack1.fluentmobile.com +ass4all.com +assests.resultspage.com +assets.backtype.com +assets.bravenet.com +assets.cntdy.mobi +assets.devx.com +assets.matchbin.com +assets.pinterest.com +associatedcontent.112.2o7.net +associateprograms.com +associmage.match.com +associmg.com +ast.adiquity.com +astrowo.ivwbox.de +at.netster.com +ata.ero-advertising.com +atdmt.com +athena-dirksen.us +atinternet.com +atlasdmt.com +atti.velti.com +attrack.ientrynetwork.net +au-cdn.effectivemeasure.net +au-ssl.effectivemeasure.net +au.2.cqcounter.com +au.adserver.yahoo.com +au.effectivemeasure.net +au.link.decideinteractive.com +au.static.planet49.com +au.track.decideinteractive.com +au.www.sabela.com +aubrey-kutz.us +aubrey-oyola.us +auctionads.com +aud.pubmatic.com +audi-club.ru +audio.iad.cimedia.net +audiode.ivwbox.de +audiopal.com +audit.median.hu +audit.webinform.hu +audit1.median.hu +audit2.median.hu +audit3.median.hu +auditonline.hu +audra-parsons.us +audra-talbott.us +augsallg.ivwbox.de +aumospo.ivwbox.de +aureate.com +aurora-musso.us +aurora-pickett.us +aurora-wilhelm.us +austin2011.appstores.com +austria1.adverserve.net +auth.livejasmin.com +auto-ping.com +auto.ivwbox.de +autobild.ivwbox.de +autobytel.112.2o7.net +autocontext.begun.ru +autohits.dk +automatically-find.com +automaticsystem.com +autopub.misterbot.com +autosurfpro.com +autoweb.112.2o7.net +autumn-chamberland.us +ava-meader.us +avatar.truongton.net +avatarcash.com +avatraffic.com +avazudsp.net +avenuea.com +avgtechnologies.112.2o7.net +avp.innity.com +awardspace.de.intellitxt.com +awarenessbaby.com +away.us.intellitxt.com +aweber.com +awin2.com +awjul1.radar11ab.co.uk +awjul10.radar11ab.co.uk +awjul11.radar11ab.co.uk +awjul12.radar11ab.co.uk +awjul13.radar11ab.co.uk +awjul14.radar11ab.co.uk +awjul15.radar11ab.co.uk +awjul16.radar11ab.co.uk +awjul17.radar11ab.co.uk +awjul18.radar11ab.co.uk +awjul19.radar11ab.co.uk +awjul2.radar11ab.co.uk +awjul20.radar11ab.co.uk +awjul3.radar11ab.co.uk +awjul4.radar11ab.co.uk +awjul5.radar11ab.co.uk +awjul6.radar11ab.co.uk +awjul7.radar11ab.co.uk +awjul8.radar11ab.co.uk +awjul9.radar11ab.co.uk +ax10.a.cocolog-nifty.com +axad.shinobi.jp +axf8.net +axis7.go2cloud.org +axp.zedo.com +az.trackword.net +azads.net +aznmedia.go2cloud.org +azubi.adition.com +azweb.ivwbox.de +b-online.de +b.admedia.com +b.ads1.msn.com +b.c8.net.ua +b.casalemedia.com +b.chartboost.com +b.rmgserving.com +b.scorecardresearch.com +b.techcrunch.com +b.thanksearch.com +b.zeroredirect.com +b.zeroredirect1.com +b1.boards2go.com +b1d.org +b2.boards2go.com +b23.ru +b2blinkshare.com +b3-uk.mookie1.com +b3.mookie1.com +babes.go2cloud.org +babycentercom.112.2o7.net +babylon.netseer.com +baciotti.com +backlink.dichthuat.org +backtype.com +backup01.ixn.local.vmsn.de +backup01.ixn.vmsn.de +backup02.dus.local.vmsn.de +backups.crittercism.com +baden24.ivwbox.de +badge.stumbleupon.com +badges.instagram.com +badoink.com +badzeit.ivwbox.de +bakler.net +ban.affiliatetraction.com +ban3ers.ero-advertising.com +ban4ers.ero-advertising.com +bangmedia.go2cloud.org +bango.co.uk +bango.com +bango.info +bango.net +bangtuoc.vn +banjers.ero-advertising.com +bank-38.ads.mp.mydas.mobi +bank01.clicks.mp.mydas.mobi +bank01.mi.ads.mp.mydas.mobi +bank01.mi.clicks.mp.mydas.mobi +bank02.clicks.mp.mydas.mobi +bank02.mi.ads.mp.mydas.mobi +bank03.clicks.mp.mydas.mobi +bank03.mi.ads.mp.mydas.mobi +bank03.mi.clicks.mp.mydas.mobi +bank04.clicks.mp.mydas.mobi +bank04.mi.ads.mp.mydas.mobi +bank05.clicks.mp.mydas.mobi +bank05.mi.ads.mp.mydas.mobi +bank06.clicks.mp.mydas.mobi +bank06.mi.ads.mp.mydas.mobi +bank07.clicks.mp.mydas.mobi +bank07.mi.ads.mp.mydas.mobi +bank08.clicks.mp.mydas.mobi +bank08.mi.ads.mp.mydas.mobi +bank09.clicks.mp.mydas.mobi +bank09.mi.ads.mp.mydas.mobi +bank1.clicks.mp.mydas.mobi +bank10.clicks.mp.mydas.mobi +bank10.mi.ads.mp.mydas.mobi +bank11.clicks.mp.mydas.mobi +bank11.mi.ads.mp.mydas.mobi +bank12.clicks.mp.mydas.mobi +bank12.mi.ads.mp.mydas.mobi +bank13.clicks.mp.mydas.mobi +bank13.mi.ads.mp.mydas.mobi +bank14.clicks.mp.mydas.mobi +bank14.mi.ads.mp.mydas.mobi +bank15.clicks.mp.mydas.mobi +bank15.mi.ads.mp.mydas.mobi +bank15.mi.clicks.mp.mydas.mobi +bank16.clicks.mp.mydas.mobi +bank16.mi.ads.mp.mydas.mobi +bank17.clicks.mp.mydas.mobi +bank17.mi.ads.mp.mydas.mobi +bank18.clicks.mp.mydas.mobi +bank18.mi.ads.mp.mydas.mobi +bank19.clicks.mp.mydas.mobi +bank19.mi.ads.mp.mydas.mobi +bank20.clicks.mp.mydas.mobi +bank20.mi.ads.mp.mydas.mobi +bank21.clicks.mp.mydas.mobi +bank21.mi.ads.mp.mydas.mobi +bank22.clicks.mp.mydas.mobi +bank22.mi.ads.mp.mydas.mobi +bank23.clicks.mp.mydas.mobi +bank23.mi.ads.mp.mydas.mobi +bank24.clicks.mp.mydas.mobi +bank24.mi.ads.mp.mydas.mobi +bank25.clicks.mp.mydas.mobi +bank25.mi.ads.mp.mydas.mobi +bank26.clicks.mp.mydas.mobi +bank26.mi.ads.mp.mydas.mobi +bank27.clicks.mp.mydas.mobi +bank27.mi.ads.mp.mydas.mobi +bank28.clicks.mp.mydas.mobi +bank28.mi.ads.mp.mydas.mobi +bank29.clicks.mp.mydas.mobi +bank29.mi.ads.mp.mydas.mobi +bank30.clicks.mp.mydas.mobi +bank30.mi.ads.mp.mydas.mobi +bank31.clicks.mp.mydas.mobi +bank31.mi.ads.mp.mydas.mobi +bank32.clicks.mp.mydas.mobi +bank32.mi.ads.mp.mydas.mobi +bank33.clicks.mp.mydas.mobi +bank33.mi.ads.mp.mydas.mobi +bank34.mi.ads.mp.mydas.mobi +bank35.clicks.mp.mydas.mobi +bank35.mi.ads.mp.mydas.mobi +bank36.clicks.mp.mydas.mobi +bank36.mi.ads.mp.mydas.mobi +bank37.ads.mp.mydas.mobi +bank37.clicks.mp.mydas.mobi +bank37.mi.ads.mp.mydas.mobi +bank38.clicks.mp.mydas.mobi +bank38.mi.ads.mp.mydas.mobi +bank39.clicks.mp.mydas.mobi +bank39.mi.ads.mp.mydas.mobi +bank40.clicks.mp.mydas.mobi +bank40.mi.ads.mp.mydas.mobi +bank41.clicks.mp.mydas.mobi +bank41.mi.ads.mp.mydas.mobi +bank42.clicks.mp.mydas.mobi +bank42.mi.ads.mp.mydas.mobi +bank43.ads.mp.mydas.mobi +bank43.clicks.mp.mydas.mobi +bank43.mi.ads.mp.mydas.mobi +bank44.ads.mp.mydas.mobi +bank44.clicks.mp.mydas.mobi +bank44.mi.ads.mp.mydas.mobi +bank45.mi.ads.mp.mydas.mobi +bank46.mi.ads.mp.mydas.mobi +bank47.mi.ads.mp.mydas.mobi +bank48.mi.ads.mp.mydas.mobi +bank49.mi.ads.mp.mydas.mobi +bank50.mi.ads.mp.mydas.mobi +bank51.mi.ads.mp.mydas.mobi +bank52.mi.ads.mp.mydas.mobi +bank53.mi.ads.mp.mydas.mobi +bank54.mi.ads.mp.mydas.mobi +bank55.mi.ads.mp.mydas.mobi +bank56.mi.ads.mp.mydas.mobi +bank57.mi.ads.mp.mydas.mobi +bank58.mi.ads.mp.mydas.mobi +bank59.mi.ads.mp.mydas.mobi +bank60.mi.ads.mp.mydas.mobi +bank61.mi.ads.mp.mydas.mobi +bank62.mi.ads.mp.mydas.mobi +bank63.mi.ads.mp.mydas.mobi +bank64.mi.ads.mp.mydas.mobi +bank65.mi.ads.mp.mydas.mobi +bank66.mi.ads.mp.mydas.mobi +bank67.mi.ads.mp.mydas.mobi +bank68.mi.ads.mp.mydas.mobi +bank69.mi.ads.mp.mydas.mobi +bank70.mi.ads.mp.mydas.mobi +bank71.mi.ads.mp.mydas.mobi +bank72.mi.ads.mp.mydas.mobi +bank73.mi.ads.mp.mydas.mobi +bank74.mi.ads.mp.mydas.mobi +bank75.mi.ads.mp.mydas.mobi +bank76.mi.ads.mp.mydas.mobi +bank77.mi.ads.mp.mydas.mobi +bank78.mi.ads.mp.mydas.mobi +bank79.mi.ads.mp.mydas.mobi +bank80.mi.ads.mp.mydas.mobi +bank81.mi.ads.mp.mydas.mobi +bank82.mi.ads.mp.mydas.mobi +bank83.mi.ads.mp.mydas.mobi +bank84.mi.ads.mp.mydas.mobi +bank85.mi.ads.mp.mydas.mobi +bank86.mi.ads.mp.mydas.mobi +bank87.mi.ads.mp.mydas.mobi +bank88.mi.ads.mp.mydas.mobi +bank89.mi.ads.mp.mydas.mobi +bank90.mi.ads.mp.mydas.mobi +bank91.mi.ads.mp.mydas.mobi +bank92.mi.ads.mp.mydas.mobi +bank93.mi.ads.mp.mydas.mobi +bank94.mi.ads.mp.mydas.mobi +bank95.mi.ads.mp.mydas.mobi +bank96.mi.ads.mp.mydas.mobi +bank97.mi.ads.mp.mydas.mobi +bank98.mi.ads.mp.mydas.mobi +bank99.mi.ads.mp.mydas.mobi +banken.ivwbox.de +bankiru.go2cloud.org +banman.isoftmarketing.com +bann12s.ero-advertising.com +bann13s.ero-advertising.com +bann14s.ero-advertising.com +bann1rs.ero-advertising.com +banne2s.ero-advertising.com +banne3s.ero-advertising.com +banne4s.ero-advertising.com +banner-exchange.nl +banner-farm.com +banner-mania.com +banner-net.com +banner.0catch.com +banner.50megs.com +banner.ad.nu +banner.adlink.de +banner.betwwts.com +banner.bingofantasy.com +banner.blogranking.net +banner.bpaserver.net +banner.buempliz-online.ch +banner.casino.net +banner.casinodelrio.com +banner.casinoking.com +banner.casinolasvegas.com +banner.casinotropez.com +banner.catho.com.br +banner.cdpoker.com +banner.cityclubcasino.com +banner.clickerotico.com +banner.clickfinders.com +banner.clickme.com.br +banner.clubdicecasino.com +banner.com +banner.commissionpartner.com +banner.coza.com +banner.crossclicks.net +banner.cz +banner.date.com +banner.de +banner.dk +banner.easyspace.com +banner.elisa.fi +banner.elisa.net +banner.eresmas.com +banner.ero-advertising.com +banner.euroads.no +banner.europacasino.com +banner.freeservers.com +banner.freeservers.net +banner.glopro.com +banner.goldenpalace.com +banner.grandonline.com +banner.grupos.com.br +banner.hyl.no +banner.i-3.de +banner.img.co.za +banner.inyourpocket.com +banner.itweb.co.za +banner.jobsahead.com +banner.jobsdb.com +banner.kiev.ua +banner.lasvegasusacasino.com +banner.linkexchange.com +banner.linkexchange.net +banner.linksynergy.com +banner.linux.se +banner.list.ru +banner.listinus.de +banner.maido3.com +banner.maxximum.org +banner.mindshare.de +banner.missingkids.com +banner.nixnet.cz +banner.northsky.com +banner.nttnavi.co.jp +banner.oddcast.com +banner.orb.net +banner.penguin.cz +banner.pethobbyist.com +banner.relcom.ru +banner.royaldice.com +banner.scasino.com +banner.sunpalacecasino.com +banner.supereva.it +banner.surfree.com +banner.svitonline.com +banner.tanto.de +banner.technorail.com +banner.tpage.com +banner.trifle.net +banner.tripple.at +banner1.50megs.com +banner2tausch.de +banner3.a411.com +bannerads.communitech.net +bannerads.de +bannerads.nl +bannerads.zwire.com +banneradvertising.adclickmedia.com +bannerbank.com +bannerbank.hu +bannerbank.ru +bannercampaign.com +bannercash.com.cz +bannercash.de +bannercash.net +bannercast.com +bannercenter.net +bannercity.ru +bannerco-op.com +bannercommunity.de +bannerconnect.net +bannerdoctors.com +bannerexchange.com +bannerexchange.klikklik.nl +bannerexchange.mycomputer.com +bannerfarm.ace.advertising.com +bannerforge.com +bannergifmedia.net +bannerimages.0catch.com +bannerlandia.com +bannerlandia.com.ar +bannermall.com +bannermarkt.nl +bannermaster.com +bannermat.com +bannernetwork.cearchives.com +bannerpoint.ru +bannerport.net +bannerpower.com +bannerpro.tk +bannerpromotion.it +banners.4d5.net +banners.adcontrol.com +banners.adultfriendfinder.com +banners.adzones.com +banners.affiliatefuel.com +banners.affiliatefuture.com +banners.aftrk.com +banners.alt.com +banners.amigos.com +banners.anunciweb.pt +banners.asiafriendfinder.com +banners.babylon-x.com +banners.bigmobileads.com +banners.bizportal.co.il +banners.blogexplosion.com +banners.bluehill.com +banners.bol.com.br +banners.buscarsexo.com +banners.celebritybling.com +banners.citygridmedia.com +banners.cj.com +banners.classmates.com +banners.clubseventeen.com +banners.cm.ru +banners.com +banners.copyscape.com +banners.crack.ru +banners.czi.cz +banners.de.clara.net +banners.dmarie.com +banners.dollarmachine.com +banners.driving4dollars.com +banners.e-dologic.co.il +banners.easydns.com +banners.easysolutions.be +banners.ebay.com +banners.empoweredcomms.com.au +banners.ero-advertising.com +banners.eroadvertising.com +banners.estaminas.com.br +banners.expressindia.com +banners.fitmd.com +banners.freerun.com +banners.freett.com +banners.friendfinder.com +banners.friendpages.com +banners.geotarget.info +banners.getiton.com +banners.guns.ru +banners.home.lv +banners.hosting-il.com +banners.hotlinks.net +banners.hpg.com.br +banners.images.streamray.com +banners.img.uol.com.br +banners.impactfive.com +banners.ims.nl +banners.inetfast.com +banners.interclimax.com +banners.intergal.com +banners.interq.or.jp +banners.iop.org +banners.iq.pl +banners.isoftmarketing.com +banners.ix.se +banners.kanoodle.com +banners.kappa.ro +banners.ksl.com +banners.leadingedgecash.com +banners.lifeserv.com +banners.linkbuddies.com +banners.moreniche.com +banners.moviegoods.com +banners.mydailydigest.com +banners.naughtycash.com +banners.nbcupromotes.com +banners.news1.co.il +banners.no1free.com +banners.officialauctions.com +banners.outster.com +banners.passion.com +banners.pornscooter.com +banners.primaryclick.com +banners.psychicrealm.com +banners.resultonline.com +banners.searchingbooth.com +banners.sexsearch.com +banners.sextracker.be +banners.sextracker.com +banners.softreklam.com +banners.sponsoradulto.com +banners.svnt.com +banners.teengush.com +banners.tibiabr.com +banners.toteme.com +banners.truecash.com +banners.valuead.com +banners.victor.com +banners.webmasterplan.com +banners.winanylotto.com +banners.winfire.com +banners.xxxwebhosting.com +banners.zhurnal.ru +banners0.hpg.com.br +banners00.hpg.com.br +banners01.hpg.com.br +banners03.hpg.com.br +banners04.hpg.com.br +banners05.hpg.com.br +banners06.hpg.com.br +banners07.hpg.com.br +banners08.hpg.com.br +banners09.hpg.com.br +banners1.ero-advertising.com +banners1.hpg.com.br +banners10.hpg.com.br +banners100.hpg.com.br +banners101.hpg.com.br +banners102.hpg.com.br +banners103.hpg.com.br +banners104.hpg.com.br +banners105.hpg.com.br +banners106.hpg.com.br +banners107.hpg.com.br +banners108.hpg.com.br +banners109.hpg.com.br +banners11.hpg.com.br +banners110.hpg.com.br +banners111.hpg.com.br +banners112.hpg.com.br +banners113.hpg.com.br +banners114.hpg.com.br +banners115.hpg.com.br +banners116.hpg.com.br +banners117.hpg.com.br +banners118.hpg.com.br +banners119.hpg.com.br +banners12.hpg.com.br +banners120.hpg.com.br +banners121.hpg.com.br +banners122.hpg.com.br +banners123.hpg.com.br +banners124.hpg.com.br +banners125.hpg.com.br +banners126.hpg.com.br +banners127.hpg.com.br +banners128.hpg.com.br +banners129.hpg.com.br +banners13.hpg.com.br +banners130.hpg.com.br +banners131.hpg.com.br +banners132.hpg.com.br +banners133.hpg.com.br +banners134.hpg.com.br +banners135.hpg.com.br +banners136.hpg.com.br +banners137.hpg.com.br +banners138.hpg.com.br +banners139.hpg.com.br +banners14.hpg.com.br +banners140.hpg.com.br +banners141.hpg.com.br +banners142.hpg.com.br +banners143.hpg.com.br +banners144.hpg.com.br +banners145.hpg.com.br +banners146.hpg.com.br +banners147.hpg.com.br +banners148.hpg.com.br +banners149.hpg.com.br +banners15.hpg.com.br +banners150.hpg.com.br +banners151.hpg.com.br +banners152.hpg.com.br +banners153.hpg.com.br +banners154.hpg.com.br +banners155.hpg.com.br +banners156.hpg.com.br +banners157.hpg.com.br +banners158.hpg.com.br +banners159.hpg.com.br +banners16.hpg.com.br +banners160.hpg.com.br +banners161.hpg.com.br +banners162.hpg.com.br +banners163.hpg.com.br +banners164.hpg.com.br +banners165.hpg.com.br +banners166.hpg.com.br +banners167.hpg.com.br +banners168.hpg.com.br +banners169.hpg.com.br +banners17.hpg.com.br +banners170.hpg.com.br +banners171.hpg.com.br +banners172.hpg.com.br +banners173.hpg.com.br +banners174.hpg.com.br +banners175.hpg.com.br +banners176.hpg.com.br +banners177.hpg.com.br +banners178.hpg.com.br +banners179.hpg.com.br +banners18.hpg.com.br +banners180.hpg.com.br +banners181.hpg.com.br +banners182.hpg.com.br +banners183.hpg.com.br +banners184.hpg.com.br +banners185.hpg.com.br +banners186.hpg.com.br +banners187.hpg.com.br +banners188.hpg.com.br +banners189.hpg.com.br +banners19.hpg.com.br +banners190.hpg.com.br +banners191.hpg.com.br +banners192.hpg.com.br +banners193.hpg.com.br +banners194.hpg.com.br +banners195.hpg.com.br +banners196.hpg.com.br +banners197.hpg.com.br +banners198.hpg.com.br +banners199.hpg.com.br +banners2.ero-advertising.com +banners2.hpg.com.br +banners2.sponsoradulto.com +banners20.hpg.com.br +banners200.hpg.com.br +banners201.hpg.com.br +banners202.hpg.com.br +banners203.hpg.com.br +banners204.hpg.com.br +banners205.hpg.com.br +banners206.hpg.com.br +banners207.hpg.com.br +banners208.hpg.com.br +banners209.hpg.com.br +banners21.hpg.com.br +banners210.hpg.com.br +banners211.hpg.com.br +banners212.hpg.com.br +banners213.hpg.com.br +banners214.hpg.com.br +banners215.hpg.com.br +banners216.hpg.com.br +banners217.hpg.com.br +banners218.hpg.com.br +banners219.hpg.com.br +banners22.hpg.com.br +banners220.hpg.com.br +banners221.hpg.com.br +banners222.hpg.com.br +banners223.hpg.com.br +banners224.hpg.com.br +banners225.hpg.com.br +banners226.hpg.com.br +banners227.hpg.com.br +banners228.hpg.com.br +banners229.hpg.com.br +banners23.hpg.com.br +banners230.hpg.com.br +banners231.hpg.com.br +banners232.hpg.com.br +banners233.hpg.com.br +banners234.hpg.com.br +banners235.hpg.com.br +banners236.hpg.com.br +banners237.hpg.com.br +banners238.hpg.com.br +banners239.hpg.com.br +banners24.hpg.com.br +banners240.hpg.com.br +banners241.hpg.com.br +banners242.hpg.com.br +banners243.hpg.com.br +banners244.hpg.com.br +banners245.hpg.com.br +banners246.hpg.com.br +banners247.hpg.com.br +banners248.hpg.com.br +banners249.hpg.com.br +banners25.hpg.com.br +banners250.hpg.com.br +banners251.hpg.com.br +banners252.hpg.com.br +banners253.hpg.com.br +banners254.hpg.com.br +banners255.hpg.com.br +banners26.hpg.com.br +banners27.hpg.com.br +banners28.hpg.com.br +banners29.hpg.com.br +banners3.hpg.com.br +banners30.hpg.com.br +banners31.hpg.com.br +banners32.hpg.com.br +banners33.hpg.com.br +banners34.hpg.com.br +banners35.hpg.com.br +banners36.hpg.com.br +banners37.hpg.com.br +banners38.hpg.com.br +banners39.hpg.com.br +banners4.hpg.com.br +banners40.hpg.com.br +banners41.hpg.com.br +banners42.hpg.com.br +banners43.hpg.com.br +banners44.hpg.com.br +banners45.hpg.com.br +banners46.hpg.com.br +banners47.hpg.com.br +banners48.hpg.com.br +banners49.hpg.com.br +banners5.hpg.com.br +banners50.hpg.com.br +banners51.hpg.com.br +banners52.hpg.com.br +banners53.hpg.com.br +banners54.hpg.com.br +banners55.hpg.com.br +banners56.hpg.com.br +banners57.hpg.com.br +banners58.hpg.com.br +banners59.hpg.com.br +banners6.hpg.com.br +banners60.hpg.com.br +banners61.hpg.com.br +banners62.hpg.com.br +banners63.hpg.com.br +banners64.hpg.com.br +banners65.hpg.com.br +banners66.hpg.com.br +banners67.hpg.com.br +banners68.hpg.com.br +banners69.hpg.com.br +banners7.hpg.com.br +banners70.hpg.com.br +banners71.hpg.com.br +banners72.hpg.com.br +banners73.hpg.com.br +banners74.hpg.com.br +banners75.hpg.com.br +banners76.hpg.com.br +banners77.hpg.com.br +banners78.hpg.com.br +banners79.hpg.com.br +banners8.hpg.com.br +banners80.hpg.com.br +banners81.hpg.com.br +banners82.hpg.com.br +banners83.hpg.com.br +banners84.hpg.com.br +banners85.hpg.com.br +banners86.hpg.com.br +banners87.hpg.com.br +banners88.hpg.com.br +banners89.hpg.com.br +banners9.hpg.com.br +banners90.hpg.com.br +banners91.hpg.com.br +banners92.hpg.com.br +banners93.hpg.com.br +banners94.hpg.com.br +banners95.hpg.com.br +banners96.hpg.com.br +banners97.hpg.com.br +banners98.hpg.com.br +banners99.hpg.com.br +bannersandpopups.com +bannerselect.com +bannerserver.com +bannersgomlm.buildreferrals.com +bannersgomlm.com +bannersng.yell.com +bannerspace.com +bannersponsor.com +bannerswap.com +bannersworld.com +bannervip.webjump.com +bannerware.com +bannerweb.com +bannerwebservice.zvz.co.il +bannevs.ero-advertising.com +bar.hit-counter.udub.com +barbara-seevers.us +barbara-vasques.us +bardzomedia.com +bargainpda.us.intellitxt.com +barry-hoskinson.us +bart.ixn.local.vmsn.de +bavners2.ero-advertising.com +baypops.com +bb.connextra.com +bbca.channelfinder.net +bbcnewscouk.112.2o7.net +bbn.img.com.ua +bbpntg3.homestead.com +bbs.duba.net +bcp.crwdcntrl.net +bdbaffiliates.go2cloud.org +bdv.bidvertiser.com +be.nedstat.net +be.sitestat.com +bea4.v.fwmrm.net +beacon-6.newrelic.com +beacon.shazam.com +beatrice-mccollister.us +becausebabes.go2cloud.org +becca-wyse.me +becontext.com +bellca.112.2o7.net +bellevue.ivwbox.de +bellserviceeng.112.2o7.net +belstat.be +benchbrands.com +berater.adition.com +bergenstidende.112.2o7.net +berlinol.ivwbox.de +bernadette-durrett.us +bernadette-gines.us +bernadette-stefanski.us +beseen.com +bestaffiliates.go2cloud.org +bestweb.com +beta-old.superstats.com +beta.ace.advertising.com +beta.adition.com +beta.crashlytics.com +beta.easyhitcounters.com +beta.kissinsights.com +beta.superstats.com +betaadvertisers.doubleclick.net +betanews.us.intellitxt.com +betareportcentral.doubleclick.com +betareportcentral.doubleclick.net +betatest.adition.com +betcollect.247realmedia.com +bethany-wentz.us +betsy-folkes.us +better-counter.com +betterhg.112.2o7.net +bettermail.ca +betty-cendejas.us +beyond.go2cloud.org +beyourownaffiliate.com +bfd.secureintl.com +bgsurveys.go2cloud.org +bh.contextweb.com +bhconsulting.go2cloud.org +bhgmarketing.112.2o7.net +bi-three.wooga.com +bi.installcore.com +bi.softservers.net +bianca-geiger.us +bianca-middleton.us +bianca-rhoton.us +bidhere.go2cloud.org +bidsystem.adknowledge.com +bidtraffic.com +bidvertiser.com +bigads.guj.de +bigasia.com +bigbangads.go2cloud.org +bigbangmedia.com +bigbanners.com +bigclicks.com +bigfatbaby.com +bigmobileads.com +bilbob.com +bild.ivwbox.de +bill-info.com +bill-swank.us +billboard.cz +bimm.in +binaryoffers.go2cloud.org +binaryperform.go2cloud.org +bingocabin.com +birogud.info +bitburg.adtech.fr +bitcast-a.bitgravity.com +bitcoinadvertisers.com +bitlk.us +bitlnk.us +bitsonthewire.com +bitterstrawberry.com +bitvisitor.com +bizad.nikkeibp.co.jp +bizzclick.com +blacklightimages.com +blacksheep.go2cloud.org +blair-carder.us +blair-railey.us +blamads-assets.s3.amazonaws.com +blamads.com +blanca-malmberg.us +blankrefer.com +blankreferrer.com +blast4traffic.com +blatfee.ero-advertising.com +bleepingcomputer.us.intellitxt.com +blindferretmedia.go2cloud.org +blinkx.com +blm.bz +blog-hits.com +blog.adspaces.ero-advertising.com +blog.chartboost.com +blog.crashlytics.com +blog.data.ero-advertising.com +blog.destiny-hiebert.us +blog.destiny-lindenberg.us +blog.duba.net +blog.ero-advertising.com +blog.intext.ero-advertising.com +blog.ivwbox.de +blog.kissmetrics.com +blog.leadbolt.com +blog.mobpartner.com +blog.qualaroo.com +blog.skyhookwireless.com +blogads.com +bloggannonser.no +blogimagehost.net +blogrankings.com +blueflameelite.go2cloud.org +blueheart.org +bluerazormedia.go2cloud.org +blueseek.com +bluesq.com +bmi.go2cloud.org +bnbaz.eb2a.com +bnkr8dev.112.2o7.net +bnmq.com +bo.jumptap.com +boards2go.com +bob01.bob.local.vmsn.de +bob01.bob.vmsn.de +bob01.con.local.vmsn.de +bob01.con.vmsn.de +bob02.bob.local.vmsn.de +bob02.bob.vmsn.de +bob02.con.local.vmsn.de +bob02.con.vmsn.de +bob03.bob.local.vmsn.de +bob03.bob.vmsn.de +bob03.con.local.vmsn.de +bob03.con.vmsn.de +bob04.bob.local.vmsn.de +bob04.con.local.vmsn.de +bob05.bob.local.vmsn.de +bob05.con.local.vmsn.de +bobgw.bob.vmsn.de +bobgw.con.vmsn.de +bobgw01.bob.local.vmsn.de +bobgw01.con.local.vmsn.de +bobgw02.bob.local.vmsn.de +bobgw02.con.local.vmsn.de +bobgwtmp.vmsn.de +bobtv.ivwbox.de +boerseon.ivwbox.de +boingdragon.com +boldcenter.com +boldchat.com +bolt.us.intellitxt.com +bomek.com +bongacash.com +bonnie-schrecengost.us +book-mark.net +boom.ro +bos-tapreq01.jumptap.com +bos-tapreq02.jumptap.com +bos-tapreq03.jumptap.com +bos-tapreq04.jumptap.com +bos-tapreq05.jumptap.com +bos-tapreq06.jumptap.com +bos-tapreq07.jumptap.com +bos-tapreq08.jumptap.com +bos-tapreq09.jumptap.com +bos-tapreq10.jumptap.com +bos-tapreq11.jumptap.com +bos-tapreq12.jumptap.com +bos-tapreq13.jumptap.com +bos-tapreq14.jumptap.com +bos-tapreq15.jumptap.com +bos-tapreq16.jumptap.com +bos-tapreq17.jumptap.com +bos-tapreq18.jumptap.com +bos-tapreq19.jumptap.com +bos-tapreq20.jumptap.com +bose.emailb.biz +bosecom.112.2o7.net +bounceexchange.com +boutique.telecharger.com +box296.ivwbox.de +bp.specificclick.net +bpath.com +bptracking.com +br.naked.com +br.rk.com +brain.cubi.me +braincash.com +brainteasers.freestats.com +brandedoffersaff.go2cloud.org +brandi-haskins.us +brandie-guillen.us +brawnmill.go2cloud.org +breanne-saterfiel.us +bree-wile.us +brenda-allred.us +brenda-eyman.us +brenna-kalish.us +brianna-rick.us +brianne-crofoot.us +brianne-dearing.us +brianne-garten.us +bride.ru +bridge.admarketplace.net +bridge2.admarketplace.net +bridget-brumback.us +bridgett-schulz.us +bridgette-ammon.us +bridgette-laura.us +brightshare.com +brigitte-burtch.us +brigitte.ivwbox.de +britany-timothy.us +britney-kelly.us +britni-bridges.us +britni-kremer.us +brittani-killgore.us +brittanie-lever.us +brittanie-loch.us +brittany-cherry.us +brittany-froehlich.us +brittany-linch.us +brittany-mcguffin.us +brittney-larimer.us +brittney-riner.us +brittney-rosenfeld.us +brittny-hintze.us +brittny-vargas.us +broadjump.com +broadwords.com +broker.adobe.com +brokertraffic.com +brook-durante.us +brook-rosen.us +brooke-sheahan.us +brusmedia.go2cloud.org +bs.serving-sys.com +bs.yandex.ru +bsch.serving-sys.com +bsitevisitor.com +bsitm3.com +btg.mtvnservices.com +btw.ero-advertising.com +bucketsofbanners.com +bucksense.go2cloud.org +bugstest.adition.com +builder.com +buildtraffic.com +buildtrafficx.com +buldog-stats.com +bullseye-media.net +bullseye-network.com +bullseye-network.net +bumerang.hurriyet.com.tr +bumperich.ru +bunchofads.com +bunitd.com +buongiorno.go2cloud.org +burns.adtech.fr +burns.ixn.local.vmsn.de +burstly.com +burstmedia.com +business.ivwbox.de +business.realtracker.com +businessweekpoc.112.2o7.net +buttcandy.com +button.clickability.com +buy2.go2cloud.org +buyhitscheap.com +buystream.com +buytraf.ru +buzz.igg.com +buzzreferrals.go2cloud.org +bwin90.com +bx.clickmedia.ro +bxsql.clickmedia.ro +by.advertising.com +bytecenter.com +c-on-text.com +c.admob.com +c.adroll.com +c.am11.ru +c.amazon-adsystem.com +c.aol.com +c.atdmt.com +c.bigmir.net +c.casalemedia.com +c.chango.com +c.chartboost.com +c.cnzz.com +c.cpa6.ru +c.dr.cyberwing.co.jp +c.greystripe.com +c.gumgum.com +c.hit.ua +c.medialytics.com +c.mobpartner.mobi +c.moreover.com +c.msnbc.com +c.ns.inbox.lv +c.ratix.no +c.rmgserving.com +c.spiegel.de +c.svlu.net +c.teromil.com +c.thanksearch.com +c.uarating.com +c.vrvm.com +c.vserv.mobi +c.w.inmobi.com +c.wen.ru +c.ypcdn.com +c.zeroredirect.com +c.zeroredirect1.com +c01.smaato.net +c02.smaato.net +c1.adform.net +c1.amazingcounters.com +c1.gostats.com +c1.nowlinux.com +c1.outster.com +c1.popads.net +c1.statcounter.com +c1.web-visor.com +c1.xxxcounter.com +c1.zedo.com +c10.statcounter.com +c11.statcounter.com +c12.statcounter.com +c13.statcounter.com +c13.zedo.com +c14.statcounter.com +c15.statcounter.com +c16.statcounter.com +c17.statcounter.com +c2.amazingcounters.com +c2.edapebaf.com +c2.gostats.com +c2.outster.com +c2.popads.net +c2.statcounter.com +c2.xxxcounter.com +c2.zedo.com +c22i.categoria.hpg.com.br +c28.statcounter.com +c2path.com +c3.amazingcounters.com +c3.gostats.com +c3.outster.com +c3.statcounter.com +c3.xxxcounter.com +c3.zedo.com +c32.statcounter.com +c3onlinemarketing.com +c4.amazingcounters.com +c4.gostats.com +c4.statcounter.com +c4.zedo.com +c41.statcounter.com +c44.statcounter.com +c479636.r36.cf2.rackcdn.com +c479842.r42.cf2.rackcdn.com +c4tracking01.com +c5.amazingcounters.com +c5.gostats.com +c5.statcounter.com +c5.zedo.com +c6.amazingcounters.com +c6.statcounter.com +c6.zedo.com +c60.smaato.net +c7.amazingcounters.com +c7.statcounter.com +c7.zedo.com +c753738.r38.cf2.rackcdn.com +c8.amazingcounters.com +c8.statcounter.com +c8.zedo.com +c9.amazingcounters.com +c97a-b910-eb5b-b0b8.reporo.net +ca.2.cqcounter.com +ca.cqcounter.com +ca.livestat.com +caartoonnetwork.com +caasco.go2cloud.org +cache-ssl.celtra.com +cache.adviva.net +cache.bizrate.com +cache.blogads.com +cache.btrll.com +cache.celtra.com +cache.enic.cc +cache.fashionista.com +cache.microad.jp +cache.opt.fimserve.com +cache.scbih.com +cache.ultramercial.com +cache.unicast.com.edgesuite.net +cache01.bob.local.vmsn.de +cache01.con.local.vmsn.de +cache02.bob.local.vmsn.de +cache02.con.local.vmsn.de +cache03.bob.local.vmsn.de +cache03.con.local.vmsn.de +cachebanners.toteme.com +cait-ruggieri.us +caitlin-spry.us +caitlyn-peet.us +calendar.adition.com +calendar.apptornado.com +calendar.chartboost.com +calendar.crashlytics.com +calendar.kissmetrics.com +calendar.performancerevenues.com +callie-degree.us +cameron-wolter.us +camille-drennen.us +camille-gaytan.us +campaign-tapad.s3.amazonaws.com +campaignheroes.go2cloud.org +campaignmonitor.com +campaigns.f2.com.au +campaigns.interclick.com +campaigntracking01.com +camz.tintel.nl +candi-bowker.us +candi-nolen.us +canwest.112.207.net +canwest.112.2o7.net +caprewards.go2cloud.org +cara-jeffery.us +carbonads.com +careers.112.2o7.net +caren-cady.us +caren-jerry.us +carey-haner.us +cari-miguel.us +carina-galaviz.us +carina-lacey.us +carissa-tarwater.us +carleton.com +carley-custard.us +carly-villeneuve.us +carmen-krohn.us +carmunity.de +carol-goings.us +carol-kanode.us +carol-saldana.us +carolina-breeze.us +carolina-fullwood.us +caroline-beckman.us +carolyn-deckard.us +cars.ign.us.intellitxt.com +cartonetwork.com +cartoonnrtwork.com +cas.criteo.com +casandra-quintana.us +casandra-zane.us +casey-fifer.us +cash.atkcash.com +cash2002.de +cash4banner.de +cash4creatives.com +cash4views.de +cash4webmaster.de +cashadsllc.go2cloud.org +cashassociate.com +cashcount.com +cashcount.de +cashcounter.com +cashfiesta.com +cashforclicks.com +cashforsurveys.com +cashforsurveys.net +cashlayer.com +cashmylinks.com +cashpile.com +cashspace.com +cashtrafic.com +casie-landry.us +casie-mcbryde.us +casie-patterson.us +casie-seamons.us +cassandra-klima.us +cassandra-schillinger.us +cata.ero-advertising.com +catalina-lafond.us +catharon.com +catherine-ake.us +cathleen-rooker.us +cathy-adams.us +catoonetwork.com +catrina-mccoin.us +catrina-mcrae.us +cb.adprofile.net +cb.amazingcounters.com +cb1.counterbot.com +cbanners.virtuagirlhd.com +cbaol.112.2o7.net +cbeckads.com +cben1.net +cbird.sextracker.com +cbird4.sextracker.com +cbird6.sextracker.com +cbmsn.112.2o7.net +cbsmarket.com +cbsncaasports.112.2o7.net +cbsnfl.112.2o7.net +cbspgatour.112.2o7.net +cbsspln.112.2o7.net +cc.amazingcounters.com +cc.connextra.com +ccamholdings.go2cloud.org +ccas.clearchannel.com +ccc01.opinionlab.com +ccran.com +ccstatic.highwebmedia.com +cdmagurus.us.intellitxt.com +cdn-i.dmdentertainment.com +cdn-static.liverail.com +cdn-www.madblast.com +cdn.addelive.com +cdn.adf.ly +cdn.adfoc.us +cdn.adk2.com +cdn.adkreator.com +cdn.adnxs.com +cdn.adrolays.de +cdn.adsrvmedia.com +cdn.adworkmedia.com +cdn.allegedmedia.com +cdn.assets.craveonline.com +cdn.atdmt.com +cdn.behavioralengine.com +cdn.bidvertiser.com +cdn.blinkx.com +cdn.brcdn.com +cdn.buysellads.com +cdn.cdnco.us +cdn.celtra.com +cdn.complexmedianetwork.com +cdn.cpnscdn.com +cdn.creative.medialytics.com +cdn.digitalcity.com +cdn.doubleverify.com +cdn.dsultra.com +cdn.effectivemeasure.net +cdn.engine.4dsply.com +cdn.epom.com +cdn.escalatenetwork.com +cdn.eyewonder.com +cdn.fastclick.net +cdn.feeds.videosz.com +cdn.flashtalking.com +cdn.hadj7.adjuggler.net +cdn.hyperpromote.com +cdn.iasrv.com +cdn.innity.com +cdn.insights.gravity.com +cdn.livechatinc.com +cdn.media.net +cdn.nearbyad.com +cdn.onescreen.net +cdn.onlinecountdowns.com +cdn.optimizely.com +cdn.popcash.net +cdn.rooktemplate.com +cdn.snapsitemap.com +cdn.staticstor.com +cdn.technoratimedia.com +cdn.trafficforce.com +cdn.triggertag.gorillanation.com +cdn.turn.com +cdn.undertone.com +cdn.us.goldspotmedia.com +cdn.valueclick.net +cdn.vdopia.com +cdn.viglink.com +cdn.voscast.com +cdn.zopim.com +cdn1-ref.landing.comcontent.net +cdn1.ads.contentabc.com +cdn1.appia.com +cdn1.bnmla.com +cdn1.clkbid.com +cdn1.clkrev.com +cdn1.crispadvertising.com +cdn1.e5.mydirtyhobby.com +cdn1.flash.shareadult.com +cdn1.inner-active.mobi +cdn1.smartadserver.com +cdn1.tribalfusion.com +cdn10-ref.landing.comcontent.net +cdn11-ref.landing.comcontent.net +cdn12-ref.landing.comcontent.net +cdn13-ref.landing.comcontent.net +cdn14-ref.landing.comcontent.net +cdn15-ref.landing.comcontent.net +cdn16-ref.landing.comcontent.net +cdn17-ref.landing.comcontent.net +cdn18-ref.landing.comcontent.net +cdn19-ref.landing.comcontent.net +cdn2-ref.landing.comcontent.net +cdn2.adsdk.com +cdn2.crispadvertising.com +cdn20-ref.landing.comcontent.net +cdn3-ref.landing.comcontent.net +cdn3.adexprts.com +cdn4-ref.landing.comcontent.net +cdn5-ref.landing.comcontent.net +cdn5.tribalfusion.com +cdn6-ref.landing.comcontent.net +cdn7-ref.landing.comcontent.net +cdn8-ref.landing.comcontent.net +cdn9-ref.landing.comcontent.net +cdnapi.kaltura.com +cdneu.alcoholsoftcdn.com +cdneu.filefactscdn.com +cdns.brsrvr.com +cdnus.alcoholsoftcdn.com +cdnus.filefactscdn.com +cdnx.tribalfusion.com +cecilia-boatwright.us +cedemailtracker.com +celeb-ads.com +celebrity-image.com +celeste-rehkop.us +celia-chance.us +celia-lacoste.us +celia-shrader.us +cellularphones.com +centerpoint.hitbox.com +centinela.sofistic.net +centralad.com +certified-email.com +cetrk.com +cf.adcloud.net +cf.addthis.com +cf.ads.kontextua.com +cf.cdn.inmobi.com +cfcdn.fhserve.com +cfrfa.112.2o7.net +cgi.hotstat.nl +cgi.netscape.com +cgicounter.onlinehome.de +cgicounter.puretec.de +ch.questionmarket.com +chanelle-okeefe.us +chanelle-silcox.us +chango.com +chantel-duquette.us +chantel-jauregui.us +chantelle-hedden.us +chapdyn.bidsystem.com +chargecards.com +charlene-kohl.us +charlotte-thornell.us +chart.superstats.com +chartboost.com +chasity-oceguera.us +chastity-kitterman.us +chastity-stoltenberg.us +chat.adspaces.ero-advertising.com +chat.ero-advertising.com +chaya-cissell.us +cheatcc.us.intellitxt.com +cheatingdome.us.intellitxt.com +checkm8.com +checkstat.com +checkstat.net +checkstat.nl +chelsea-figueiredo.us +chelsea-neveu.us +chelsey-benes.us +chelsey-lessard.us +chelsie-barile.us +cheri-bruening.us +cherie-mutchler.us +cherie-short.us +cherish-wehr.us +cherryaffiliates.omarsys.com +cheryl-edelstein.us +china.inmobi.com +chinaads.net +chip.ivwbox.de +christa-delreal.us +christi-lipson.us +christie-hanlon.us +christie-pearlman.us +christin-alejandro.us +christine-channell.us +christine-coffin.us +christine-rumfelt.us +christine-winfrey.us +chronicads.com +chrystal-asbury.us +chrystal-beehler.us +chrystal-kirkham.us +ci.categoria.hpg.com.br +ciao.ivwbox.de +cimedia.com +cindy-malott.us +cinema.ivwbox.de +cinestar.ivwbox.de +cinthya-hanks.us +cinthya-sipe.us +citi.bridgetrack.com +citrix.tradedoubler.com +city-ads.de +cityads.ru +cityads.telus.net +cj.dotomi.com +cj.net +cjbmanagement.com +ck.jp.ap.valuecommerce.com +ck.juicyads.com +cktrk.net +cl.cnn.com +cl.exct.net +claire-bonelli.us +clare-pouncy.us +clarissa-kapoor.us +clarissa-kriner.us +classic.bannerbank.hu +classifieds.atspace.com +classmates.com +classmatescom.112.2o7.net +claudia-mckelvey.us +cleangamemedia.go2cloud.org +clear-reports.com +clearlinkmedia.go2cloud.org +clearspring.com +clearwebstats.com +cleco.jag.vmsn.de +clic-exchange.com +click-123.com +click-fr.com +click-here-to-listen.com +click-ice.com +click-linking.com +click-under.info +click.202trackingsoft.com +click.absoluteagency.com +click.adknowledge.com +click.atdmt.com +click.buzzcity.net +click.cashengines.com +click.clickcommander.com +click.dagbladet.no +click.dtiserv2.com +click.ewebse.com +click.eyk.net +click.fastlinkfinder.com +click.findthewebsiteyouneed.com +click.fool.com +click.holland-billing.com +click.hotlog.ru +click.icetraffic.com +click.icptrack.com +click.igg.com +click.investopedia.com +click.ipc.ru +click.kmindex.ru +click.linkstattrack.com +click.linkstorm.net +click.linksynergy.com +click.m.codefuel.com +click.netpondcash.com +click.news2.v3.email-publisher.com +click.oxcash.com +click.payserve.com +click.pdl1tracking.com +click.safe-sender.co.uk +click.scour.com +click.silvercash.com +click.tck-3005-12.pl +click.topica.com +click.your-farmers-market.com +click168.com +click202.com +click2bank.net +click2boost.com +click2clicktracker.com +click2jump.com +click2net.nl +click2paid.com +click2site.co +click4cash.de +click4free.info +clickability.com +clickability.net +clickability.org +clickable.com +clickad.com.pl +clickad.pl +clickagy.com +clickauditor.net +clickbangpop.com +clickbet88.com +clickbooth.com +clickboothlnk.com +clickbrokers.com +clickbubbles.net +clickbug.com +clickcash.com +clickcash.webpower.com +clickcashmoney.com +clickcertain.com +clickdealer.go2cloud.org +clickdensity.com +clickdough.com +clickedyclick.com +clickeight.com +clickequations.net +clickerotico.com +clickexperts.net +clickey.com +clickfirms.go2cloud.org +clickflow.com +clickforasurprise.com +clickfuse.com +clickheretofind.com +clickice.com +clickintext.com +clickit.com +clickkingdom.net +clickmarks.com +clickmedia.ro +clickmonsters.com +clicknano.com +clicknvote.com +clickon.co.il +clickosmedia.com +clickpapa.com +clickquick.com +clickriver.com +clicks.about.com +clicks.aweber.com +clicks.equantum.com +clicks.ientrymail.com +clicks.igg.com +clicks.m4n.nl +clicks.net +clicks.oxcash.com +clicks.stripsaver.com +clicks.toteme.com +clicks.virtuagirl.com +clicks.walla.co.il +clicks2.oxcash.com +clicks2you.com +clicksales.com +clicksandclients.go2cloud.org +clickserv.sitescout.com +clickserv2.sitescout.com +clickserve.cc-dt.com +clickshare.com +clickshield.net +clicksite.com +clicksor.com +clicksor.net +clicksvenue.com +clicktale.pantherssl.com +clicktalecdn.sslcs.cdngc.net +clicktaxi.com +clickthrough.com +clickthrucash.com +clickthruhost.com +clickthruserver.com +clickthrutraffic.com +clicktrack.wnu.com +clicktracksolutions.com +clicktrade.linkexchange.net +clicktrade.net +clicktrakr.com +clicktraq.mtree.com +clicktripz.com +clicktv.com +clickupto.com +clickv.com +clickvacations.com +clickwinks.com +clickxchange.com +clicshop.com +clictrafic.com +clicz.com +clientconfig.passport.net +clients.bluecava.com +clients.tbo.com +cliqtrac.com +clixgalore.com +cliximages.com +clixsense.com +clixstrackers.com +clixtrac.com +clixx.sitescout.netdna-cdn.com +clixzen1.go2cloud.org +clk.adgatemedia.com +clk.atdmt.com +clk.relestar.com +clkads.com +clkde.tradedoubler.com +clkmon.com +clkrev.com +clkuk.tradedoubler.com +clnk.me +cloud-q.duba.net +cloud.cashtrafic.info +cloud.video.unrulymedia.com +cloudhot.net +cloveads.go2cloud.org +cltomedia.info +cluster-03.topbucks.com +cluster.adultadworld.com +cluster.vilumirian.biz +clvrtrkr.go2cloud.org +clz3.net +cm-cl35.fresheye.com +cm.ac3.msn.com +cm.adkmob.com +cm.g.doubleclick.net +cm.npc-lee.overture.com +cm.npc-mcclatchy.overture.com +cmail1.com +cmail2.com +cmail5.com +cmfads.com +cml1234.com +cmllk1.info +cmltrk.info +cmn1lsm2.beliefnet.com +cmn1lsm3.beliefnet.com +cmn1lsm4.beliefnet.com +cmp.us.intellitxt.com +cmpdotnetjunkiescom.112.2o7.net +cmpglobalvista.112.2o7.net +cmpmiami.com +cms2.net +cn.adserver.yahoo.com +cn.clickable.net +cn01.dwstat.cn +cncdn.9966.org +cnetnews.112.2o7.net +cnettech.112.2o7.net +cnetzdnet.112.2o7.net +cnheagletribune.112.2o7.net +cnn.122.2o7.net +cnn.dyn.cnn.com +cnn.entertainment.printthis.clickability.com +cnn.looksmart.com +cnnfn.emailthis.clickability.com +cnnfn.printthis.clickability.com +cnnfn.savethis.clickability.com +cnnglobal.122.2o7.net +cnt.diary.ne.jp +cnt.my +cnt1.pocitadlo.cz +cntdy.mobi +cntrrx1.com +cntrtr.com +cnzz.mmstat.com +coadvertise.com +cobrands.mailermailer.com +code.37cs.com +code.directadvert.ru +code.fastclick.net +code.kissmetrics.com +code.new.arbocontext.ro +code.superstats.com +codice.shinystat.com +codice.shinystat.it +codiceisp.shinystat.it +codicepro.shinystat.it +cogtree.com +cohortdigital.go2cloud.org +coinurl.com +coinvisitor.com +coldfusion.affiliateshop.com +colette-connell.us +colette-filson.us +colette-ybarra.us +collectionssearch.com +collector.deepmetrix.com +collector.statowl.com +collector.stats.webs.com +colleen-kelso.us +colonize.com +comclick.com +comclick.net +comics.ign.us.intellitxt.com +commerce.cimedia.com +commerce.cimedia.net +commissionmonster.com +commonssearch.com +compareyourclicks.com +compart.ivwbox.de +compatdb.us.intellitxt.com +compete.com +competeinc.com +compnet.us.intellitxt.com +composer.local.vmsn.de +compteur.com +compteur.francite.com +compu3.com +computershopper.uk.intellitxt.com +computershopper.zdnet.com +computerwoche.de.intellitxt.com +compwoch.ivwbox.de +comscore.com +con.thetrafficstat.net +concours.fr +concours.hit-parade.com +conductedresearch.com +conduit-banners.com +conference.carmunity.de +config.broadcastpc.tv +config.ioam.de +confluence.kissmetrics.com +congdongtinhoc.info +connect.appflood.com +connect.ivwbox.de +connectionads.com +connectlinking1.com +connectlinking10.com +connectlinking12.com +connectlinking2.com +connectlinking3.com +connectlinking4.com +connectlinking5.com +connectlinking6.com +connectlinking7.com +connectlinking8.com +connectlinking9.com +connexionsecure.com +connextra.com +connie-barto.us +console.revmob.com +consors.ivwbox.de +constance-polen.us +constantlyseek.com +consumerinfo.com +consumerreview.us.intellitxt.com +contador-de-visitas.com +content-cooperation.com +content.acc-hd.de +content.ad +content.adprofile.net +content.adriver.ru +content.app-authority.com +content.applift.com +content.bannerconnect.net +content.bitsontherun.com +content.clipster.ws +content.complex.com +content.cpxinteractive.com +content.directadvert.ru +content.dl-rms.com +content.dollarrevenue.com +content.netvenda.com +content.tucows.com +content.uclick.com +content.wt.net +content.yieldmanager.com +content.yieldmanager.edgesuite.net +contentlockingnetworks.com +contentserv.brandaffinity.net +context3.kanoodle.com +context6.kanoodle.com +contextlinks.netseer.com +contextuads.com +contextual.media.net +continuingresearch.com +controlcenter.superstats.com +controlodequalidade.com +controlroom.netmining.com +contxmedia.go2cloud.org +conv.adengage.com +conversion-tracker.com +conversionruler.com +cookex.amp.yahoo.com +cookie.monster.com +coolpaysite.com +coolshader.com +coop.crwdcntrl.net +cora-grell.us +corba.adtech.fr +cori-borne.us +cori-stogner.us +corinne-gump.us +corp.kaltura.com +corrie-deloney.us +corrie-mchale.us +corrine-scroggins.us +cortoonnetwork.com +cossette.com +coull.go2cloud.org +count.51yes.com +count.be +count.channeladvisor.com +count.de +count.exitexchange.com +count.freeyellow.com +count.paycounter.com +count.rbc.ru +count.rin.ru +count.rubylane.com +count.xhit.com +count1.51yes.com +count10.51yes.com +count100.51yes.com +count1000.51yes.com +count101.51yes.com +count102.51yes.com +count103.51yes.com +count104.51yes.com +count105.51yes.com +count106.51yes.com +count107.51yes.com +count108.51yes.com +count109.51yes.com +count11.51yes.com +count110.51yes.com +count111.51yes.com +count112.51yes.com +count113.51yes.com +count114.51yes.com +count115.51yes.com +count116.51yes.com +count117.51yes.com +count118.51yes.com +count119.51yes.com +count12.51yes.com +count120.51yes.com +count121.51yes.com +count122.51yes.com +count123.51yes.com +count124.51yes.com +count125.51yes.com +count126.51yes.com +count127.51yes.com +count128.51yes.com +count129.51yes.com +count13.51yes.com +count130.51yes.com +count131.51yes.com +count132.51yes.com +count133.51yes.com +count134.51yes.com +count135.51yes.com +count136.51yes.com +count137.51yes.com +count138.51yes.com +count139.51yes.com +count14.51yes.com +count140.51yes.com +count141.51yes.com +count142.51yes.com +count143.51yes.com +count144.51yes.com +count145.51yes.com +count146.51yes.com +count147.51yes.com +count148.51yes.com +count149.51yes.com +count15.51yes.com +count150.51yes.com +count151.51yes.com +count152.51yes.com +count153.51yes.com +count154.51yes.com +count155.51yes.com +count156.51yes.com +count157.51yes.com +count158.51yes.com +count159.51yes.com +count16.51yes.com +count160.51yes.com +count161.51yes.com +count162.51yes.com +count163.51yes.com +count164.51yes.com +count165.51yes.com +count166.51yes.com +count167.51yes.com +count168.51yes.com +count169.51yes.com +count17.51yes.com +count170.51yes.com +count171.51yes.com +count172.51yes.com +count173.51yes.com +count174.51yes.com +count175.51yes.com +count176.51yes.com +count177.51yes.com +count178.51yes.com +count179.51yes.com +count18.51yes.com +count180.51yes.com +count181.51yes.com +count182.51yes.com +count183.51yes.com +count184.51yes.com +count185.51yes.com +count186.51yes.com +count187.51yes.com +count188.51yes.com +count189.51yes.com +count19.51yes.com +count190.51yes.com +count191.51yes.com +count192.51yes.com +count193.51yes.com +count194.51yes.com +count195.51yes.com +count196.51yes.com +count197.51yes.com +count198.51yes.com +count199.51yes.com +count2.51yes.com +count20.51yes.com +count200.51yes.com +count201.51yes.com +count202.51yes.com +count203.51yes.com +count204.51yes.com +count205.51yes.com +count206.51yes.com +count207.51yes.com +count208.51yes.com +count209.51yes.com +count21.51yes.com +count210.51yes.com +count211.51yes.com +count212.51yes.com +count213.51yes.com +count214.51yes.com +count215.51yes.com +count216.51yes.com +count217.51yes.com +count218.51yes.com +count219.51yes.com +count22.51yes.com +count220.51yes.com +count221.51yes.com +count222.51yes.com +count223.51yes.com +count224.51yes.com +count225.51yes.com +count226.51yes.com +count227.51yes.com +count228.51yes.com +count229.51yes.com +count23.51yes.com +count230.51yes.com +count231.51yes.com +count232.51yes.com +count233.51yes.com +count234.51yes.com +count235.51yes.com +count236.51yes.com +count237.51yes.com +count238.51yes.com +count239.51yes.com +count24.51yes.com +count240.51yes.com +count241.51yes.com +count242.51yes.com +count243.51yes.com +count244.51yes.com +count245.51yes.com +count246.51yes.com +count247.51yes.com +count248.51yes.com +count249.51yes.com +count25.51yes.com +count250.51yes.com +count251.51yes.com +count252.51yes.com +count253.51yes.com +count254.51yes.com +count255.51yes.com +count256.51yes.com +count257.51yes.com +count258.51yes.com +count259.51yes.com +count26.51yes.com +count260.51yes.com +count261.51yes.com +count262.51yes.com +count263.51yes.com +count264.51yes.com +count265.51yes.com +count266.51yes.com +count267.51yes.com +count268.51yes.com +count269.51yes.com +count27.51yes.com +count270.51yes.com +count271.51yes.com +count272.51yes.com +count273.51yes.com +count274.51yes.com +count275.51yes.com +count276.51yes.com +count277.51yes.com +count278.51yes.com +count279.51yes.com +count28.51yes.com +count280.51yes.com +count281.51yes.com +count282.51yes.com +count283.51yes.com +count284.51yes.com +count285.51yes.com +count286.51yes.com +count287.51yes.com +count288.51yes.com +count289.51yes.com +count29.51yes.com +count290.51yes.com +count291.51yes.com +count292.51yes.com +count293.51yes.com +count294.51yes.com +count295.51yes.com +count296.51yes.com +count297.51yes.com +count298.51yes.com +count299.51yes.com +count3.51yes.com +count30.51yes.com +count300.51yes.com +count301.51yes.com +count302.51yes.com +count303.51yes.com +count304.51yes.com +count305.51yes.com +count306.51yes.com +count307.51yes.com +count308.51yes.com +count309.51yes.com +count31.51yes.com +count310.51yes.com +count311.51yes.com +count312.51yes.com +count313.51yes.com +count314.51yes.com +count315.51yes.com +count316.51yes.com +count317.51yes.com +count318.51yes.com +count319.51yes.com +count32.51yes.com +count320.51yes.com +count321.51yes.com +count322.51yes.com +count323.51yes.com +count324.51yes.com +count325.51yes.com +count326.51yes.com +count327.51yes.com +count328.51yes.com +count329.51yes.com +count33.51yes.com +count330.51yes.com +count331.51yes.com +count332.51yes.com +count333.51yes.com +count334.51yes.com +count335.51yes.com +count336.51yes.com +count337.51yes.com +count338.51yes.com +count339.51yes.com +count34.51yes.com +count340.51yes.com +count341.51yes.com +count342.51yes.com +count343.51yes.com +count344.51yes.com +count345.51yes.com +count346.51yes.com +count347.51yes.com +count348.51yes.com +count349.51yes.com +count35.51yes.com +count350.51yes.com +count351.51yes.com +count352.51yes.com +count353.51yes.com +count354.51yes.com +count355.51yes.com +count356.51yes.com +count357.51yes.com +count358.51yes.com +count359.51yes.com +count36.51yes.com +count360.51yes.com +count361.51yes.com +count362.51yes.com +count363.51yes.com +count364.51yes.com +count365.51yes.com +count366.51yes.com +count367.51yes.com +count368.51yes.com +count369.51yes.com +count37.51yes.com +count370.51yes.com +count371.51yes.com +count372.51yes.com +count373.51yes.com +count374.51yes.com +count375.51yes.com +count376.51yes.com +count377.51yes.com +count378.51yes.com +count379.51yes.com +count38.51yes.com +count380.51yes.com +count381.51yes.com +count382.51yes.com +count383.51yes.com +count384.51yes.com +count385.51yes.com +count386.51yes.com +count387.51yes.com +count388.51yes.com +count389.51yes.com +count39.51yes.com +count390.51yes.com +count391.51yes.com +count392.51yes.com +count393.51yes.com +count394.51yes.com +count395.51yes.com +count396.51yes.com +count397.51yes.com +count398.51yes.com +count399.51yes.com +count4.51yes.com +count40.51yes.com +count400.51yes.com +count401.51yes.com +count402.51yes.com +count403.51yes.com +count404.51yes.com +count405.51yes.com +count406.51yes.com +count407.51yes.com +count408.51yes.com +count409.51yes.com +count41.51yes.com +count410.51yes.com +count411.51yes.com +count412.51yes.com +count413.51yes.com +count414.51yes.com +count415.51yes.com +count416.51yes.com +count417.51yes.com +count418.51yes.com +count419.51yes.com +count42.51yes.com +count420.51yes.com +count421.51yes.com +count422.51yes.com +count423.51yes.com +count424.51yes.com +count425.51yes.com +count426.51yes.com +count427.51yes.com +count428.51yes.com +count429.51yes.com +count43.51yes.com +count430.51yes.com +count431.51yes.com +count432.51yes.com +count433.51yes.com +count434.51yes.com +count435.51yes.com +count436.51yes.com +count437.51yes.com +count438.51yes.com +count439.51yes.com +count44.51yes.com +count440.51yes.com +count441.51yes.com +count442.51yes.com +count443.51yes.com +count444.51yes.com +count445.51yes.com +count446.51yes.com +count447.51yes.com +count448.51yes.com +count449.51yes.com +count45.51yes.com +count450.51yes.com +count451.51yes.com +count452.51yes.com +count453.51yes.com +count454.51yes.com +count455.51yes.com +count456.51yes.com +count457.51yes.com +count458.51yes.com +count459.51yes.com +count46.51yes.com +count460.51yes.com +count461.51yes.com +count462.51yes.com +count463.51yes.com +count464.51yes.com +count465.51yes.com +count466.51yes.com +count467.51yes.com +count468.51yes.com +count469.51yes.com +count47.51yes.com +count470.51yes.com +count471.51yes.com +count472.51yes.com +count473.51yes.com +count474.51yes.com +count475.51yes.com +count476.51yes.com +count477.51yes.com +count478.51yes.com +count479.51yes.com +count48.51yes.com +count480.51yes.com +count481.51yes.com +count482.51yes.com +count483.51yes.com +count484.51yes.com +count485.51yes.com +count486.51yes.com +count487.51yes.com +count488.51yes.com +count489.51yes.com +count49.51yes.com +count490.51yes.com +count491.51yes.com +count492.51yes.com +count493.51yes.com +count494.51yes.com +count495.51yes.com +count496.51yes.com +count497.51yes.com +count498.51yes.com +count499.51yes.com +count4all.com +count5.51yes.com +count50.51yes.com +count500.51yes.com +count501.51yes.com +count502.51yes.com +count503.51yes.com +count504.51yes.com +count505.51yes.com +count506.51yes.com +count507.51yes.com +count508.51yes.com +count509.51yes.com +count51.51yes.com +count510.51yes.com +count511.51yes.com +count512.51yes.com +count513.51yes.com +count514.51yes.com +count515.51yes.com +count516.51yes.com +count517.51yes.com +count518.51yes.com +count519.51yes.com +count52.51yes.com +count520.51yes.com +count521.51yes.com +count522.51yes.com +count523.51yes.com +count524.51yes.com +count525.51yes.com +count526.51yes.com +count527.51yes.com +count528.51yes.com +count529.51yes.com +count53.51yes.com +count530.51yes.com +count531.51yes.com +count532.51yes.com +count533.51yes.com +count534.51yes.com +count535.51yes.com +count536.51yes.com +count537.51yes.com +count538.51yes.com +count539.51yes.com +count54.51yes.com +count540.51yes.com +count541.51yes.com +count542.51yes.com +count543.51yes.com +count544.51yes.com +count545.51yes.com +count546.51yes.com +count547.51yes.com +count548.51yes.com +count549.51yes.com +count55.51yes.com +count550.51yes.com +count551.51yes.com +count552.51yes.com +count553.51yes.com +count554.51yes.com +count555.51yes.com +count556.51yes.com +count557.51yes.com +count558.51yes.com +count559.51yes.com +count56.51yes.com +count560.51yes.com +count561.51yes.com +count562.51yes.com +count563.51yes.com +count564.51yes.com +count565.51yes.com +count566.51yes.com +count567.51yes.com +count568.51yes.com +count569.51yes.com +count57.51yes.com +count570.51yes.com +count571.51yes.com +count572.51yes.com +count573.51yes.com +count574.51yes.com +count575.51yes.com +count576.51yes.com +count577.51yes.com +count578.51yes.com +count579.51yes.com +count58.51yes.com +count580.51yes.com +count581.51yes.com +count582.51yes.com +count583.51yes.com +count584.51yes.com +count585.51yes.com +count586.51yes.com +count587.51yes.com +count588.51yes.com +count589.51yes.com +count59.51yes.com +count590.51yes.com +count591.51yes.com +count592.51yes.com +count593.51yes.com +count594.51yes.com +count595.51yes.com +count596.51yes.com +count597.51yes.com +count598.51yes.com +count599.51yes.com +count6.51yes.com +count60.51yes.com +count600.51yes.com +count601.51yes.com +count602.51yes.com +count603.51yes.com +count604.51yes.com +count605.51yes.com +count606.51yes.com +count607.51yes.com +count608.51yes.com +count609.51yes.com +count61.51yes.com +count610.51yes.com +count611.51yes.com +count612.51yes.com +count613.51yes.com +count614.51yes.com +count615.51yes.com +count616.51yes.com +count617.51yes.com +count618.51yes.com +count619.51yes.com +count62.51yes.com +count620.51yes.com +count621.51yes.com +count622.51yes.com +count623.51yes.com +count624.51yes.com +count625.51yes.com +count626.51yes.com +count627.51yes.com +count628.51yes.com +count629.51yes.com +count63.51yes.com +count630.51yes.com +count631.51yes.com +count632.51yes.com +count633.51yes.com +count634.51yes.com +count635.51yes.com +count636.51yes.com +count637.51yes.com +count638.51yes.com +count639.51yes.com +count64.51yes.com +count640.51yes.com +count641.51yes.com +count642.51yes.com +count643.51yes.com +count644.51yes.com +count645.51yes.com +count646.51yes.com +count647.51yes.com +count648.51yes.com +count649.51yes.com +count65.51yes.com +count650.51yes.com +count651.51yes.com +count652.51yes.com +count653.51yes.com +count654.51yes.com +count655.51yes.com +count656.51yes.com +count657.51yes.com +count658.51yes.com +count659.51yes.com +count66.51yes.com +count660.51yes.com +count661.51yes.com +count662.51yes.com +count663.51yes.com +count664.51yes.com +count665.51yes.com +count666.51yes.com +count667.51yes.com +count668.51yes.com +count669.51yes.com +count67.51yes.com +count670.51yes.com +count671.51yes.com +count672.51yes.com +count673.51yes.com +count674.51yes.com +count675.51yes.com +count676.51yes.com +count677.51yes.com +count678.51yes.com +count679.51yes.com +count68.51yes.com +count680.51yes.com +count681.51yes.com +count682.51yes.com +count683.51yes.com +count684.51yes.com +count685.51yes.com +count686.51yes.com +count687.51yes.com +count688.51yes.com +count689.51yes.com +count69.51yes.com +count690.51yes.com +count691.51yes.com +count692.51yes.com +count693.51yes.com +count694.51yes.com +count695.51yes.com +count696.51yes.com +count697.51yes.com +count698.51yes.com +count699.51yes.com +count7.51yes.com +count70.51yes.com +count700.51yes.com +count701.51yes.com +count702.51yes.com +count703.51yes.com +count704.51yes.com +count705.51yes.com +count706.51yes.com +count707.51yes.com +count708.51yes.com +count709.51yes.com +count71.51yes.com +count710.51yes.com +count711.51yes.com +count712.51yes.com +count713.51yes.com +count714.51yes.com +count715.51yes.com +count716.51yes.com +count717.51yes.com +count718.51yes.com +count719.51yes.com +count72.51yes.com +count720.51yes.com +count721.51yes.com +count722.51yes.com +count723.51yes.com +count724.51yes.com +count725.51yes.com +count726.51yes.com +count727.51yes.com +count728.51yes.com +count729.51yes.com +count73.51yes.com +count730.51yes.com +count731.51yes.com +count732.51yes.com +count733.51yes.com +count734.51yes.com +count735.51yes.com +count736.51yes.com +count737.51yes.com +count738.51yes.com +count739.51yes.com +count74.51yes.com +count740.51yes.com +count741.51yes.com +count742.51yes.com +count743.51yes.com +count744.51yes.com +count745.51yes.com +count746.51yes.com +count747.51yes.com +count748.51yes.com +count749.51yes.com +count75.51yes.com +count750.51yes.com +count751.51yes.com +count752.51yes.com +count753.51yes.com +count754.51yes.com +count755.51yes.com +count756.51yes.com +count757.51yes.com +count758.51yes.com +count759.51yes.com +count76.51yes.com +count760.51yes.com +count761.51yes.com +count762.51yes.com +count763.51yes.com +count764.51yes.com +count765.51yes.com +count766.51yes.com +count767.51yes.com +count768.51yes.com +count769.51yes.com +count77.51yes.com +count770.51yes.com +count771.51yes.com +count772.51yes.com +count773.51yes.com +count774.51yes.com +count775.51yes.com +count776.51yes.com +count777.51yes.com +count778.51yes.com +count779.51yes.com +count78.51yes.com +count780.51yes.com +count781.51yes.com +count782.51yes.com +count783.51yes.com +count784.51yes.com +count785.51yes.com +count786.51yes.com +count787.51yes.com +count788.51yes.com +count789.51yes.com +count79.51yes.com +count790.51yes.com +count791.51yes.com +count792.51yes.com +count793.51yes.com +count794.51yes.com +count795.51yes.com +count796.51yes.com +count797.51yes.com +count798.51yes.com +count799.51yes.com +count8.51yes.com +count80.51yes.com +count800.51yes.com +count801.51yes.com +count802.51yes.com +count803.51yes.com +count804.51yes.com +count805.51yes.com +count806.51yes.com +count807.51yes.com +count808.51yes.com +count809.51yes.com +count81.51yes.com +count810.51yes.com +count811.51yes.com +count812.51yes.com +count813.51yes.com +count814.51yes.com +count815.51yes.com +count816.51yes.com +count817.51yes.com +count818.51yes.com +count819.51yes.com +count82.51yes.com +count820.51yes.com +count821.51yes.com +count822.51yes.com +count823.51yes.com +count824.51yes.com +count825.51yes.com +count826.51yes.com +count827.51yes.com +count828.51yes.com +count829.51yes.com +count83.51yes.com +count830.51yes.com +count831.51yes.com +count832.51yes.com +count833.51yes.com +count834.51yes.com +count835.51yes.com +count836.51yes.com +count837.51yes.com +count838.51yes.com +count839.51yes.com +count84.51yes.com +count840.51yes.com +count841.51yes.com +count842.51yes.com +count843.51yes.com +count844.51yes.com +count845.51yes.com +count846.51yes.com +count847.51yes.com +count848.51yes.com +count849.51yes.com +count85.51yes.com +count850.51yes.com +count851.51yes.com +count852.51yes.com +count853.51yes.com +count854.51yes.com +count855.51yes.com +count856.51yes.com +count857.51yes.com +count858.51yes.com +count859.51yes.com +count86.51yes.com +count860.51yes.com +count861.51yes.com +count862.51yes.com +count863.51yes.com +count864.51yes.com +count865.51yes.com +count866.51yes.com +count867.51yes.com +count868.51yes.com +count869.51yes.com +count87.51yes.com +count870.51yes.com +count871.51yes.com +count872.51yes.com +count873.51yes.com +count874.51yes.com +count875.51yes.com +count876.51yes.com +count877.51yes.com +count878.51yes.com +count879.51yes.com +count88.51yes.com +count880.51yes.com +count881.51yes.com +count882.51yes.com +count883.51yes.com +count884.51yes.com +count885.51yes.com +count886.51yes.com +count887.51yes.com +count888.51yes.com +count889.51yes.com +count89.51yes.com +count890.51yes.com +count891.51yes.com +count892.51yes.com +count893.51yes.com +count894.51yes.com +count895.51yes.com +count896.51yes.com +count897.51yes.com +count898.51yes.com +count899.51yes.com +count9.51yes.com +count90.51yes.com +count900.51yes.com +count901.51yes.com +count902.51yes.com +count903.51yes.com +count904.51yes.com +count905.51yes.com +count906.51yes.com +count907.51yes.com +count908.51yes.com +count909.51yes.com +count91.51yes.com +count910.51yes.com +count911.51yes.com +count912.51yes.com +count913.51yes.com +count914.51yes.com +count915.51yes.com +count916.51yes.com +count917.51yes.com +count918.51yes.com +count919.51yes.com +count92.51yes.com +count920.51yes.com +count921.51yes.com +count922.51yes.com +count923.51yes.com +count924.51yes.com +count925.51yes.com +count926.51yes.com +count927.51yes.com +count928.51yes.com +count929.51yes.com +count93.51yes.com +count930.51yes.com +count931.51yes.com +count932.51yes.com +count933.51yes.com +count934.51yes.com +count935.51yes.com +count936.51yes.com +count937.51yes.com +count938.51yes.com +count939.51yes.com +count94.51yes.com +count940.51yes.com +count941.51yes.com +count942.51yes.com +count943.51yes.com +count944.51yes.com +count945.51yes.com +count946.51yes.com +count947.51yes.com +count948.51yes.com +count949.51yes.com +count95.51yes.com +count950.51yes.com +count951.51yes.com +count952.51yes.com +count953.51yes.com +count954.51yes.com +count955.51yes.com +count956.51yes.com +count957.51yes.com +count958.51yes.com +count959.51yes.com +count96.51yes.com +count960.51yes.com +count961.51yes.com +count962.51yes.com +count963.51yes.com +count964.51yes.com +count965.51yes.com +count966.51yes.com +count967.51yes.com +count968.51yes.com +count969.51yes.com +count97.51yes.com +count970.51yes.com +count971.51yes.com +count972.51yes.com +count973.51yes.com +count974.51yes.com +count975.51yes.com +count976.51yes.com +count977.51yes.com +count978.51yes.com +count979.51yes.com +count98.51yes.com +count980.51yes.com +count981.51yes.com +count982.51yes.com +count983.51yes.com +count984.51yes.com +count985.51yes.com +count986.51yes.com +count987.51yes.com +count988.51yes.com +count989.51yes.com +count99.51yes.com +count990.51yes.com +count991.51yes.com +count992.51yes.com +count993.51yes.com +count994.51yes.com +count995.51yes.com +count996.51yes.com +count997.51yes.com +count998.51yes.com +count999.51yes.com +counted.de +counter.adultcheck.com +counter.adultrevenueservice.com +counter.aport.ru +counter.awempire.com +counter.bizland.com +counter.bloke.com +counter.caliro.de +counter.cnw.cz +counter.cz +counter.digits.com +counter.dreamhost.com +counter.execpc.com +counter.fatcow.com +counter.fateback.com +counter.gamespy.com +counter.goingup.com +counter.gorodmsk.ru +counter.hitbox.com +counter.hitslink.com +counter.hitslinks.com +counter.htmlvalidator.com +counter.inetusa.com +counter.kmindex.ru +counter.monkeybanana3.com +counter.mtree.com +counter.mycomputer.com +counter.nope.dk +counter.nowlinux.com +counter.pax.com +counter.pcgames.de +counter.rambler.ru +counter.rapidcounter.com +counter.relmaxtop.com +counter.rootsweb.com +counter.russiansubmitter.com +counter.search.bg +counter.sexsuche.tv +counter.sparklit.com +counter.spylog.com +counter.superstats.com +counter.times.lv +counter.top.dkd.it +counter.topping.com.ua +counter.tripod.com +counter.w3open.com +counter.webmedia.pl +counter.xeanon.com +counter.yadro.ru +counter.zone.ee +counter1.bravenet.com +counter1.sextracker.be +counter1.sextracker.com +counter10.bravenet.com +counter10.sextracker.be +counter10.sextracker.com +counter11.bravenet.com +counter11.sextracker.be +counter11.sextracker.com +counter12.bravenet.com +counter12.sextracker.be +counter12.sextracker.com +counter13.bravenet.com +counter13.sextracker.be +counter13.sextracker.com +counter14.bravenet.com +counter14.sextracker.be +counter14.sextracker.com +counter15.bravenet.com +counter15.sextracker.be +counter15.sextracker.com +counter16.bravenet.com +counter16.sextracker.be +counter16.sextracker.com +counter160.com +counter17.bravenet.com +counter18.bravenet.com +counter19.bravenet.com +counter2.bravenet.com +counter2.freeware.de +counter2.hitbox.com +counter2.hitslink.com +counter2.sextracker.be +counter2.sextracker.com +counter20.bravenet.com +counter21.bravenet.com +counter22.bravenet.com +counter23.bravenet.com +counter24.bravenet.com +counter25.bravenet.com +counter26.bravenet.com +counter27.bravenet.com +counter28.bravenet.com +counter29.bravenet.com +counter3.bravenet.com +counter3.sextracker.be +counter3.sextracker.com +counter30.bravenet.com +counter31.bravenet.com +counter32.bravenet.com +counter33.bravenet.com +counter34.bravenet.com +counter35.bravenet.com +counter36.bravenet.com +counter37.bravenet.com +counter38.bravenet.com +counter39.bravenet.com +counter4.bravenet.com +counter4.sextracker.be +counter4.sextracker.com +counter40.bravenet.com +counter41.bravenet.com +counter42.bravenet.com +counter43.bravenet.com +counter44.bravenet.com +counter45.bravenet.com +counter46.bravenet.com +counter47.bravenet.com +counter48.bravenet.com +counter49.bravenet.com +counter4all.de +counter5.bravenet.com +counter5.sextracker.be +counter5.sextracker.com +counter50.bravenet.com +counter6.bravenet.com +counter6.sextracker.be +counter6.sextracker.com +counter7.bravenet.com +counter7.sextracker.be +counter7.sextracker.com +counter8.bravenet.com +counter8.sextracker.be +counter8.sextracker.com +counter9.bravenet.com +counter9.sextracker.be +counter9.sextracker.com +counterad.de +counteraport.spylog.com +counterattack.com +counterbot.com +counters.auctionhelper.com +counters.auctionwatch.com +counters.auctiva.com +counters.honesty.com +counters.xaraonline.com +counters4u.com +counterservis.com +counterstrike.server.us +counting4free.com +countit.ch +countmaster.com +countmaster.superstats.com +countmyvisitors.com +countomat.com +countonline3.de +counts.tucows.com +countt.51yes.com +countus.editeurjavascript.com +countus1.editeurjavascript.com +countus2.editeurjavascript.com +countus3.editeurjavascript.com +countus4.editeurjavascript.com +countz.com +couponcraze.com +coupondiscounts.com +coupondunia.go2cloud.org +coupons-inc.com +coupons4humanity.go2cloud.org +courseseat.com +courtney-jacobi.us +courtney-werner.us +covusaffiliates.go2cloud.org +coxds.com +coxnetmasterglobal.112.2o7.net +coxnews.cimedia.com +coxpalmbeachpost.112.2o7.net +cp.surf-town.net +cpa.ly +cpaaltima.go2cloud.org +cpabrasil.go2cloud.org +cpadna1.com +cpadoc.com +cpadom.com +cpafull.go2cloud.org +cpagrip.com +cpainfinity.com +cpajizz.go2cloud.org +cparevenue.go2cloud.org +cparussia.go2cloud.org +cpasaw.go2cloud.org +cpaswag.go2cloud.org +cpatrac.com +cpatrackr.com +cpaway.afftrack.com +cpcadnet.com +cpcserve.clickbooth.com +cpd8.net +cpfclassifieds.com +cplpro.go2cloud.org +cpm-plus.com +cpm.biz +cpm.tz4.com +cpmfun.com +cpvads.com +cpvadvertise.com +cpvmarketplace.info +cpx.go2cloud.org +cpxcenter.com +cpxinteractive.com +cpxmobile.go2cloud.org +cqcounter.com +crashlytics.com +crd1.bannerbank.ru +createsend.com +createsend1.com +createsend3.com +createsend4.com +createsend5.com +creative.360yield.com +creative.ak.fbcdn.net +creative.apn.co.nz +creative.clicksor.com +creative.digitaltargetmarketing.com +creative.whi.co.nz +creative.xtendmedia.com +creative1cdn.mobfox.com +creativeby1.unicast.com +creativeproxy.uimserv.net +creatives.as4x.tmcs.net +creatives.doubleclick.net +creatives.livejasmin.com +creativestuff.com +credit-cards.com +credit-cards.de +credit-cards.nl +credit-cards.org +creoads.com +crispads.com +crista-lentz.us +cristin-esquibel.us +cristin-shank.us +cristy-barcomb.us +cristy-baty.us +crittercism.com +crm.3dots.co.il +crowdcontrol.lotame.com +crowdscience.com +crunchroll.com +crunkedtracking.com +crushads.com +crwdcntrl.net +crystal-eisenberg.us +crystal-skaggs.us +cs.sexcounter.com +cs.shopperreports.com +cs.traffichold.com +cs1.livetex.ru +cs10.livetex.ru +cs11.livetex.ru +cs12.livetex.ru +cs13.livetex.ru +cs14.livetex.ru +cs15.livetex.ru +cs16.livetex.ru +cs17.livetex.ru +cs18.livetex.ru +cs19.livetex.ru +cs2.livetex.ru +cs20.livetex.ru +cs3.livetex.ru +cs4.livetex.ru +cs5.livetex.ru +cs6.livetex.ru +cs7.livetex.ru +cs8.livetex.ru +cs9.livetex.ru +csc.beap.bc.yahoo.com +csi.gstatic.com +csnation.us.intellitxt.com +csstatic.com +cstrk.net +ct.buzzfeed.com +ct.cnet-ssa.cnet.com +ct2.comclick.com +ct3.addthis.com +ct4.addthis.com +ct5.addthis.com +ctc.japaneseanime.com +ctn.go2cloud.org +ctnetwork.hu +ctvsmokinggun.112.2o7.net +cube.ign.us.intellitxt.com +cubegroup.go2cloud.org +culvercountry.com +cupidplc.go2cloud.org +cur.lv +curtis-keim.us +custom.exoclick.com +custom.mobpartner.mobi +custom.serving-sys.com +customad.cnn.com +customads.net +customds.serving-sys.com +customize.netster.com +custommediainc.go2cloud.org +cutestuf.com +cutterbuck.com +cvt.mydas.mobi +cx.atdmt.com +cxdigitalmedia.com +cyberclick.net +cyberwavemedia.com +cyclops.prod.untd.com +cyhners.ero-advertising.com +cynthia-tomas.us +cyonix.to +cyprusads.info +d.addelive.com +d.adroll.com +d.adsbyisocket.com +d.afdads.com +d.applovin.com +d.chango.com +d.delivery45.com +d.delivery47.com +d.delivery49.com +d.foxadd.com +d.mobpartner.mobi +d.moreover.com +d.recomendedsite.com +d.rmgserving.com +d.skimresources.com +d.thanksearch.com +d.turn.com +d.unanimis.co.uk +d.xp1.ru4.com +d.zeroredirect.com +d.zeroredirect1.com +d1.c6.b3.a0.top.list.ru +d1.zedo.com +d16.net +d18q5nc9wflibl.cloudfront.net +d1l6p2sc9645hc.cloudfront.net +d1nkcqm1nusqof.cloudfront.net +d1rdh3xxuqlqfo.cloudfront.net +d2.zedo.com +d2bgg7rjywcwsy.cloudfront.net +d2gi7ultltnc2u.cloudfront.net +d3.zedo.com +d31qbv1cthcecs.cloudfront.net +d3anogn3pbtk4v.cloudfront.net +d3oltyb66oj2v8.cloudfront.net +d4.zedo.com +d5.zedo.com +d5nxst8fruw4z.cloudfront.net +d6.zedo.com +d7.zedo.com +d8.zedo.com +d9.zedo.com +da.feedsportal.com +daaa.ero-advertising.com +dadegid.ru +daea.ero-advertising.com +daia.ero-advertising.com +daily-traffic.com +daisy-blanch.us +dana-frenette.us +dana-goodnight.us +dana-whitty.us +danelle-free.us +daniela-gilbertson.us +daniela-silva.us +danielle-guo.us +danielle-hartin.us +danieltan.evplayer.com +daniweb.us.intellitxt.com +danyelle-cha.us +daoblocks.com +daoxml.com +daphne-alsup.us +daphne-jared.us +dara-tolliver.us +darci-dimarco.us +darcy-austria.us +darla-blakely.us +darla-rumfelt.us +darla-salmons.us +darlene-goff.us +dash.scorpiointeractive.com +dashboard.chartboost.com +dashboard.gumgum.com +dashboard.optify.net +dashboard.trafficforce.com +dat2.ero-advertising.com +data-ero-advertising.com +data-eroadvertising.com +data.adexda.com +data.alexa.com +data.appflood.com +data.audiencerate.com +data.captifymedia.com +data.coremetrics.com +data.ero-advertising.com +data.flurry.com +data.mobclix.com +data2.ero-advertising.com +data3.perf.overture.com +datab01.dus.local.vmsn.de +database.revmob.com +datais.com +date.ero-advertising.com +dating-banners.com +dating-exchange.com +datingadnetwork.com +dats.ero-advertising.com +datt.ero-advertising.com +daua.ero-advertising.com +daum.net +dava.ero-advertising.com +dawa.ero-advertising.com +daylogs.com +dayna-cadet.us +dayna-hesson.us +daz.com +db0.net-filter.com +db0.sitestats.com +db01.ixn.local.vmsn.de +db02.ixn.local.vmsn.de +db03.ixn.local.vmsn.de +db04.ixn.local.vmsn.de +db1.sitestats.com +db2.net-filter.com +db2.sitestats.com +db3.net-filter.com +db3.sitestats.com +db4.net-filter.com +db4.sitestats.com +db5.net-filter.com +db5.sitestats.com +db6.net-filter.com +db6.sitestats.com +db7.net-filter.com +db7.sitestats.com +db8.net-filter.com +db8.sitestats.com +db9.sitestats.com +dbase01.jag.vmsn.de +dbase03.jag.vmsn.de +dbi1.surf-town.net +dbltb.vmsn.de +dbltb02.vmsn.de +dbltb03.vmsn.de +dbox.mobi +dbs.advertising.com +dbt.adition.com +dbta.ero-advertising.com +dburl.us +dcs.wtlive.com +dd.connextra.com +ddi2.com +ddos.bob.local.vmsn.de +ddos.con.local.vmsn.de +de.2.cqcounter.com +de.adition.com +de.adserver.yahoo.com +de.intellitxt.com +de.nedstat.net +de.static.planet49.com +dealcatcher.com +dealchicken.go2cloud.org +dealofadayonline.com +dealsfor.me +deana-harpster.us +deana-messing.us +deanna-forrester.us +deanna-husband.us +deardrocher.com +debbie-carmen.us +debbie-clifton.us +debra-schuyler.us +debra-strom.us +debsfunpages.com +debug.adfarm1.adition.com +debug.adition.com +debug.ivwbox.de +dedicatedads.go2cloud.org +deena-mchugh.us +deepcom.com +default-homepage-network.com +definitely-find.com +definitelyfind.com +deirdre-dahl.us +deirdre-houchens.us +deirdre-lupien.us +deirdre-rinker.us +delfinproject.go2cloud.org +delia-comes.us +delia-galvin.us +delia-verduzco.us +deliberatelyseek.com +delilah-gearhart.us +delishows.com +deliver.aadsrv.com +delivere.com +delivery.hornyspots.com +delivery.ipvertising.com +delivery.sid-ads.com +delivery.swid.switchads.com +delivery.trafficbroker.com +delivery.trafficforce.com +delivery.trafficjunky.net +delivery.uasdel.com +delivery1.trafficjunky.net +delivery2.trafficjunky.net +delivery3.trafficjunky.net +delivery4.trafficjunky.net +delivery5.trafficjunky.net +delivery6.trafficjunky.net +delivery7.trafficjunky.net +delivery8.trafficjunky.net +delivery9.trafficjunky.net +delta223.homestead.com +deltarad.ivwbox.de +demandbase.com +demarketing.go2cloud.org +demetria-bunch.us +demetria-tickle.us +demo.advertising.com +demo.doubleclick.net +demo.idg.com.au +demo.kissmetrics.com +demo.yeahmobi.com +demo57.247realmedia.com +denisse-baity.us +denisse-sequeira.us +denverpost.112.2o7.net +dermadoctoraffiliates.com +derstand.oewabox.at +desiree-dane.us +desiree-goggans.us +desiree-novotny.us +desiree-pettigrew.us +desiree-raskin.us +desiree-wold.us +destiny-lindenberg.us +deta.ero-advertising.com +detik.serving-sys.com +dev.ajc.cimedia.com +dev.alphagirlz.mobi +dev.ap1.alphagirlz.mobi +dev.ap2.alphagirlz.mobi +dev.appia.com +dev.flurry.com +dev.mundomediainc.com +dev.palmbeachpost.cimedia.com +dev.skyhookwireless.com +dev.statesman.cimedia.com +dev.visualwebsiteoptimizer.com +dev01.bob.local.vmsn.de +dev01.bob.vmsn.de +dev01.con.local.vmsn.de +dev01.con.vmsn.de +dev02.bob.local.vmsn.de +dev02.con.local.vmsn.de +devadmin.cimedia.com +devel.superfish.com +devel01.jag.vmsn.de +developer.anscamobile.com +devices.revmob.com +devil.go2cloud.org +devshed.us.intellitxt.com +dewezet.ivwbox.de +dfp.doubleclick.net +dfpreports.doubleclick.net +dg.specificclick.net +dhd.ivwbox.de +dhsmarthouse.122.2o7.net +di1.shopping.com +diana-buchheit.us +diana-mettler.us +diana-pelley.us +dianna-gannon.us +dibmarketing.go2cloud.org +didhddacmbghikt.yosoda.net +didit.com +didtal.com +diff.smartadserver.com +diff2.smartadserver.com +diff3.smartadserver.com +digi-net.com +digi.adhostcenter.com +digiaffiliate.go2cloud.org +digibrand.go2cloud.org +digitalone.go2cloud.org +digitalsalesmedia.go2cloud.org +digits.com +digitymedia.net +digiwebmarketing.go2cloud.org +digiwebtracking.go2cloud.org +dihitt.com +dimpact.co.il +dina-mulkey.us +dina-rish.us +dinclinx.com +dineoutfreetoday.com +direct-stats.com +direct.apptornado.com +directads.mcafee.com +directadvert.ru +directbrand.com +directcoupons.com +directfreebies.com +directfwd.com +directoryreferences.com +directstuff.com +directtrack.com +directvalue.nl +dirtcheapadvertising.com +dis.criteo.com +dis.us.criteo.com +dischannel.112.2o7.net +discover-facts.com +discoverapps.appia.com +discoverexactly.com +discoverhidden.com +display-img.g.atti.com +display.provenpixel.com +distribution.cimedia.com +ditly.us +ditmu.us +diturl.us +diversifymarketing.go2cloud.org +dk.adserver.yahoo.com +dkonline.ivwbox.de +dl.adshooter.com +dl.alphagirlz.mobi +dl.coolonlineoffers.com +dl.webprodcdn.com +dlvr.readserver.net +dm-online.de +dm.vmsn.de +dmexco.adition.com +dmgt.grapeshot.co.uk +dmpnetwork.go2cloud.org +dmtracker.com +dmtracking01.com +dn.adzerver.com +dna.metavertizer.com +dna1.mookie1.com +dna2.mookie1.com +dna3.mookie1.com +dnads.directnic.com +dnb.doubleclick.net +dnn506yrbagrg.cloudfront.net +dns-01.ns.aol.com +dns1.burstnet.com +dns1.schoffstall.com +dns2.burstnet.com +dnsstat.com +dntx.com +docs.adition.com +docs.applifier.com +docs.apptornado.com +docs.chartboost.com +docs.crashlytics.com +docs.performancerevenues.com +dogcustom-works.com +dogpile.112.2o7.net +doll.home.ro +dollarade.com +dolores-mace.us +dolores-parra.us +dolores-vanallen.us +domain.gabia.com +domainhop.com +domainsponsor.com +domainsponsor.oversee.net +domdex.com +dominika-cosey.us +dompark.dadapro.com +donkeymails.com +donna-borst.us +donval.112.2o7.net +doreen-weidner.us +doris-taplin.us +dorothy-carrero.us +dot.idot.cz +dotcom-monitor.com +dotcomemail.com +dotcommedia.de +dottier.cdngate.biz +doubleclick.com +doubleclick.d4p.net +doubleclick.de +doubleclick.ne.jp +doubleclick.net +doubleclick.shockwave.com +doubleclicks.me +doug1izaerwt3.cloudfront.net +download-manager--installation.com +download.crashlytics.com +download.hitbox.com +download.templatemo.com +downloadcounter.de +downloads.default-homepage-network.com +downloads.kissmetrics.com +downloads.superfish.com +dox.abv.bg +dpm.demdex.net +dqs001.adtech.fr +dragon1.visits.lt +dragon145.visits.lt +dragonballzhomeland.com +dramafever.go2cloud.org +drd.hauchi.com.tw +dreamlands.net +dreammates.112.2o7.net +drivelinemedia.com +driver.skyhookwireless.com +driving4dollars.com +drops.ads.visionweb.no +drredir.com +drtserver.com +drugscom.us.intellitxt.com +ds-cc.serving-sys.com +ds-vn.serving-sys.com +ds.eyeblaster.com +ds.ign.us.intellitxt.com +ds.serving-sys.com +dsm.doubleclick.net +dsmmadvantage.com +dsmreports.doubleclick.net +dsnr-portal.info +dsnr.net +dsnrmg.com +dsp.adfarm1.adition.com +dsp.bnmla.com +dspads.sitescout.netdna-cdn.com +dspcluster.adfarm1.adition.com +dsply.com +dt.adsafeprotected.com +dtta.ero-advertising.com +duba.net +dublinca.org +dummywebsitedatabase.com +durre.freestats.com +dv.bitterstrawberry.com +dv1970.freestats.com +dynamic.aol.com +dynamic.fmpub.net +dyntraq.mtree.com +e-2dj6wfk4ggdzkbo.stats.esomniture.com +e-2dj6wfkikjd5glq.stats.esomniture.com +e-2dj6wfkiokc5odp.stats.esomniture.com +e-2dj6wflicocjklo.stats.esomniture.com +e-2dj6wflikgdpodo.stats.esomniture.com +e-2dj6wfloenczmkq.stats.esomniture.com +e-2dj6wjk4amd5mfp.stats.esomniture.com +e-2dj6wjkowjajcbo.stats.esomniture.com +e-2dj6wjkyandpogq.stats.esomniture.com +e-2dj6wjkycpdzckp.stats.esomniture.com +e-2dj6wjkyqmdzcgo.stats.esomniture.com +e-2dj6wjkysndzigp.stats.esomniture.com +e-2dj6wjl4qhd5kdo.stats.esomniture.com +e-2dj6wjliehcjglp.stats.esomniture.com +e-2dj6wjlignajgaq.stats.esomniture.com +e-2dj6wjlyamdpogo.stats.esomniture.com +e-2dj6wjnyagcpkko.stats.esomniture.com +e-2dj6wjnyeocpcdo.stats.esomniture.com +e-2dj6wjnygidjskq.stats.esomniture.com +e-2dj6wjnyqkajabp.stats.esomniture.com +e-bannerx.com +e-communications.insidebandwidth.com +e-hpaces.ero-advertising.com +e-n.y-1shz2prbmdj6wvny-1sez2pra2dj6wjmyepdzadpwudj6x9ny-1seq-2-2.stats.esomniture.com +e-ny.a-1shz2prbmdj6wvny-1sez2pra2dj6wjny-1jcpgbowsdj6x9ny-1seq-2-2.stats.esomniture.com +e-tracker.de +e-zeeinternet.com +e.crashlytics.com +e.ilovethat.co.uk +e.mouseflow.com +e.ofuda.cc +e.performancerevenues.com +e.rmgserving.com +e.tdmagroup.com +e.thanksearch.com +e.yeahmobi.com +e.yieldmanager.net +e.zeroredirect.com +e.zeroredirect1.com +e0.extreme-dm.com +e1.extreme-dm.com +e2.emediate.se +e89.friendfinder.com +ea-traffic-redirection.com +eadexchange.com +eads.nl +eads.org +earntosurf.com +earthlinkcom.122.2o7.net +eas.apm.emediate.eu +eas4.emediate.eu +easily-discover.com +easilyask.com +easilyfindlocal.com +easilytrack.com +easyhitcounters.com +easyhits4u.com +easypoll.superstats.com +easypolls.superstats.com +easyscopes.net +easyspace.com +ebao.duba.net +ebay.ivwbox.de +ebayrelevancead.webmasterplan.com +ebonyhead.com +ebtmarketing.com +ec.atdmt.com +ec1.hitbox.com +ec2-54-225-149-4.compute-1.amazonaws.com +ec2-54-235-183-132.compute-1.amazonaws.com +echo4.bluehornet.com +echofonads.appspot.com +echonl.ivwbox.de +ecomcon.go2cloud.org +ecommerce.go2cloud.org +ecommercetimes.us.intellitxt.com +economisttestcollect.insightfirst.com +ecoverage.go2cloud.org +ectestlampsplus1.112.2o7.net +eddie-theriot.us +edgar.ivwbox.de +edge.quantserve.com +edge.reporo.net +edgy.demo.sproutinc.com +edith-marquart.us +edna-read.us +edomz.com +edsa.122.2o7.net +edskes.com.site-id.nl +edusearch.go2cloud.org +edusuccessdev.122.2o7.net +edward-hulsey.us +ee01gws.advertising.com +ee01hmq.advertising.com +ee01job.advertising.com +ee02gws.advertising.com +ee02hmq.advertising.com +ee12gp4.advertising.com +eeb06878.qqc.co +eedclicks.ero-advertising.com +efanguide.us.intellitxt.com +efoods.go2cloud.org +ehg-acdsystems.hitbox.com +ehg-adeptscience.hitbox.com +ehg-adobe1p.hitbox.com +ehg-aha.hitbox.com +ehg-akagourmet.hitbox.com +ehg-amerix.hitbox.com +ehg-ati.hitbox.com +ehg-att2.hitbox.com +ehg-attenza.hitbox.com +ehg-attworldnet.hitbox.com +ehg-autodesk.hitbox.com +ehg-autotrader.hitbox.com +ehg-backweb.hitbox.com +ehg-bareweb.hitbox.com +ehg-bbc.hitbox.com +ehg-bestbuy.hitbox.com +ehg-bizjournals.hitbox.com +ehg-bmwna.hitbox.com +ehg-bskyb.hitbox.com +ehg-cafepress.hitbox.com +ehg-careerbuilder.hitbox.com +ehg-cbs.hitbox.com +ehg-chrysler.hitbox.com +ehg-cisco.hitbox.com +ehg-citrixonline.hitbox.com +ehg-clearchannel.hitbox.com +ehg-closetmaid.hitbox.com +ehg-comcast.hitbox.com +ehg-cometsystems.hitbox.com +ehg-commjun.hitbox.com +ehg-communityconnect.hitbox.com +ehg-comscore.hitbox.com +ehg-crain.hitbox.com +ehg-cygnusbm.hitbox.com +ehg-datamonitor.hitbox.com +ehg-dig.hitbox.com +ehg-eckounlimited.hitbox.com +ehg-espn.hitbox.com +ehg-exoteric.hitbox.com +ehg-findlaw.hitbox.com +ehg-foundation.hitbox.com +ehg-foxmovies.hitbox.com +ehg-foxsports.hitbox.com +ehg-fredericks.hitbox.com +ehg-groceryworks.hitbox.com +ehg-guardian.hitbox.com +ehg-hasbro.hitbox.com +ehg-himedia.hitbox.com +ehg-hitent.hitbox.com +ehg-hollywood.hitbox.com +ehg-idg.hitbox.com +ehg-idgentertainment.hitbox.com +ehg-ignitemedia.hitbox.com +ehg-imedia.hitbox.com +ehg-intel.hitbox.com +ehg-ittoolbox.hitbox.com +ehg-itworldcanada.hitbox.com +ehg-jaygroup.hitbox.com +ehg-knightridder.hitbox.com +ehg-learningco.hitbox.com +ehg-legonewyorkinc.hitbox.com +ehg-liveperson.hitbox.com +ehg-lowermybills.hitbox.com +ehg-macpublishingllc.hitbox.com +ehg-macromedia.hitbox.com +ehg-majorbaseball.hitbox.com +ehg-maplesoft.hitbox.com +ehg-mccormick.hitbox.com +ehg-mh.hitbox.com +ehg-micron.hitbox.com +ehg-mindshare.hitbox.com +ehg-mtv.hitbox.com +ehg-mybc.hitbox.com +ehg-nestlepurinapetcare.hitbox.com +ehg-nestleusainc.hitbox.com +ehg-netapparel.hitbox.com +ehg-newegg.hitbox.com +ehg-newscientist.hitbox.com +ehg-nike.hitbox.com +ehg-nokiafin.hitbox.com +ehg-novell.hitbox.com +ehg-oreilly.hitbox.com +ehg-pacifictheatres.hitbox.com +ehg-pcsecurityshield.hitbox.com +ehg-pennwell.hitbox.com +ehg-peoplesoft.hitbox.com +ehg-pharmacia.hitbox.com +ehg-playboy.hitbox.com +ehg-proflowers.hitbox.com +ehg-qualcomm.hitbox.com +ehg-quantumcorp.hitbox.com +ehg-redherring.hitbox.com +ehg-register.hitbox.com +ehg-rfa.hitbox.com +ehg-salonmedia.hitbox.com +ehg-samsungusa.hitbox.com +ehg-schwannssales.hitbox.com +ehg-shopathome.hitbox.com +ehg-silverpop.hitbox.com +ehg-sonybssc.hitbox.com +ehg-sonyelec.hitbox.com +ehg-sonyesolutions.hitbox.com +ehg-sonymusic.hitbox.com +ehg-sonyny.hitbox.com +ehg-space.hitbox.com +ehg-stampsdotcom.hitbox.com +ehg-studentuniverse.hitbox.com +ehg-superwarehouse.hitbox.com +ehg-systemax.hitbox.com +ehg-techtarget.hitbox.com +ehg-telecomitalia.hitbox.com +ehg-thomas.hitbox.com +ehg-tigerdirect.hitbox.com +ehg-tigerdirect2.hitbox.com +ehg-tmgolf.hitbox.com +ehg-topps.hitbox.com +ehg-tumbleweed.hitbox.com +ehg-ubisoft.hitbox.com +ehg-uniontrib.hitbox.com +ehg-verizoncommunications.hitbox.com +ehg-viacom.hitbox.com +ehg-vonage.hitbox.com +ehg-wachovia.hitbox.com +ehg-warnerbrothers.hitbox.com +ehg-wetseal.hitbox.com +ehg-win2000mag.hitbox.com +ehg-wizardsofthecoast.hitbox.com +ehg-womanswallstreet.hitbox.com +ehg-wss.hitbox.com +ehg-yakpak.hitbox.com +ehg-yellowpages.hitbox.com +ehg-zentropypartners.hitbox.com +ehg.hitbox.com +eightfoldlogic.com +eileen-devore.us +eileen-welk.us +einets.com +ejs.hitbox.com +elaina-blanton.us +elaine-hamdan.us +elektnet.ivwbox.de +elisa-zwick.us +elisabeth-scheer.us +elise-throop.us +elisha-getz.us +elisha-nordberg.us +elisha-volkman.us +elissa-joiner.us +elitecpamountain.go2cloud.org +elitepartners.ru +ella-marenco.us +ella-mcgrail.us +elle.ivwbox.de +ellie-mayle.us +ellis-sandy.us +eloqua.com +elsa-curry.us +eltern.ivwbox.de +elyse-meserve.us +email-newsletters.com +email.advertising.com +email.crittercism.com +email.kissinsights.com +email.kissmetrics.com +email.leadbolt.com +email.livejasmin.com +email.performancerevenues.com +email.yeahmobi.com +email666.com +emailb.biz +emailcash.com.au +emailserving.com +emailworks.go2cloud.org +emap.admedia.net +emarketer.com +embed.technorati.com +emd10.medianext.com +emea-bidder.mathtag.com +emilee-arroyo.us +emilee-newbold.us +emilie-glidewell.us +emily-wigington.us +emily-winchell.us +emma-finnerty.us +emma-gabbert.us +empg.go2cloud.org +employ22.112.2o7.net +employ26.112.2o7.net +employment.112.2o7.net +emsdirect.go2cloud.org +emsguj.nuggad.net +emsvr.com +en.adition.com +en.adtech.info +en.oxosurf.eu +endow.com +energyon.ivwbox.de +enetwork.ncbuy.com +enewsletters.ziffdavisinternet.com +enfintrouver.com +engine.4dsply.com +engine.adland.ru +engine.adsupply.com +engine.adzerk.net +engine.carbonads.com +engine.mediamir.medialand.ru +engine.spotscenered.info +engine.statcount.com +enhance.com +enigma.kissmetrics.com +enliven.org +enlnks.com +enscl.com +enterprise.hitbox.com +enterprisemediagroup.112.2o7.net +entrepreneur.com +entrepreneur.us.intellitxt.com +entrepreneurpoc.122.2o7.net +eosesd.org +epicgameads.com +eqads.com +equantum.com +equitymarketingsolutions.com +eqx.smartadserver.com +ercva.com +erica-durazo.us +ericka-riffle.us +erika-mcmasters.us +erika-winkle.us +erin-hartwell.us +ero-advertising.biz +ero-advertising.com +ero-advertising.de +ero-advertising.eu +ero-advertising.info +ero-advertising.net +ero-advertising.nl +ero-advertising.org +eroadvertising.biz +eroadvertising.com +eroadvertising.de +eroadvertising.eu +eroadvertising.info +eroadvertising.net +eroadvertising.nl +eroadvertising.org +erostracker.com +erostracker.net +error.mobpartner.mobi +errors.apptornado.com +ers.ero-advertising.com +es.adserver.yahoo.com +es.ero-advertising.com +es.nedstat.net +escalatenetwork.com +esg.hitbox.com +eskimokay.bravejournal.com +esomniture.com +espotting.com +esquare.go2cloud.org +estat.chez.com +estat.com +esther-munsey.us +esther-strauss.us +etahub.com +ethicalads.net +ethn.io +etrack51.com +etracker.de +eu-pn1.adserver.yahoo.com +eu-pn1.ard.yahoo.com +eu-pn2.adserver.yahoo.com +eu-pn3.adserver.yahoo.com +eu-pn4.adserver.yahoo.com +eu.link.decideinteractive.com +eu.webprodcdn.com +eu1.madsone.com +eu1.snoobi.com +eu2.madsone.com +eu3.madsone.com +euroathleticgreens.go2cloud.org +europe.adserver.yahoo.com +euros4click.de +eurosponsor.de +ev.ib-ibi.com +eva-ryerson.us +eve-hy.us +eve-plunk.us +evelyn-dutra.us +event.adotsolution.com +eventi.co.il +events.apptornado.com +events.walla.co.il +everyfreegift.com +evisitcs2.com +evita.ivwbox.de +evo5-com-netmining.netmining.com +evs-hosted-14facd241e1c08.s3.amazonaws.com +evwr.hitbox.com +ewordofmouth.com +ex.puata.info +ex.umengcloud.com +exactseek.com +exacttarget.com +examnotes.us.intellitxt.com +exchange-it.com +exchangead.com +exchangebanner.com +exct.net +execulink.112.2o7.net +exit-money.de +exit.oxcash2.com +exit.xpays.com +exitdevil.com +exitexchange.com +exitmoney.com +exitstitial.gopher.com +exmapro.go2cloud.org +expand-search-goals.com +expandsearchanswers.com +expedia.ca.112.2o7.net +expert-offers.com +experts.us.intellitxt.com +expertsavings.com +explore-possibilities.com +express.ivwbox.de +ext.host-tracker.com +ext.tyroo.com +extensive-research.com +extensive-search.com +extntechnologies.us.intellitxt.com +extreme-dm.com +extremetracking.com +extremetracking.net +eyeblaster.com +ez-poll.superstats.com +ez-polls.superstats.com +ezcybersearch.com +ezpoll.superstats.com +ezpolls.superstats.com +f-js1.spotsniper.ru +f.about.com +f.rmgserving.com +f.securelinkcorp.com +f.thanksearch.com +f.zeroredirect.com +f.zeroredirect1.com +f2ncracker.112.2o7.net +f2nsmh.112.2o7.net +f2ntheage.112.2o7.net +faceoff.112.2o7.net +fad-1104.nyc1.targetnet.com +fad-1111.nyc1.targetnet.com +fad-1113.nyc1.targetnet.com +fad-1114.nyc1.targetnet.com +fad-1115.nyc1.targetnet.com +fad-408.mtl4.targetnet.com +fad-411.mtl4.targetnet.com +fad-413.mtl4.targetnet.com +faith-weissman.us +falk.ivwbox.de +falk.speedera.net +fallon-navarro.us +fallon-segundo.us +fanners.ero-advertising.com +fanpop.tags.crwdcntrl.net +farm.plista.com +farmville2.visits.lt +fast-route.com +fastads.swiftnews.com +fastadvert.com +fastclick.com.edgesuite.net +fastclickfind.com +fastclicknow.com +fastcounter.com +fastcounter.linkexchange.net +fasteasytraffic.com +fasterbucks.com +fastgraphics.com +fastlinkfinder.com +fastonlinefinder.com +fasttrack.nu +fata.ero-advertising.com +faz.ivwbox.de +fbcdb01.jag.vmsn.de +fbcdn-creative-a.akamaihd.net +fbcdn-photos-h-a.akamaihd.net +fbcjk.com +fbgdc.com +fbkmnr.112.2o7.net +fc.webmasterpro.de +fcds.affiliatetracking.net +fdimages.fairfax.com.au +fe-au.imrworldwide.com +fe.lea.lycos.es +fe1-au.imrworldwide.com +fe2-au.imrworldwide.com +fe3-au.imrworldwide.com +featuredlocalfind.com +feed.bizzclick.com +feed.edintorni.net +feed.peakclick.com +feedblitz.com +feedjit.com +feeds.global-intermedia.com +feeds.mofos.com +felisha-utter.us +ferdy.org +ferrago.uk.intellitxt.com +ff.connextra.com +fhatfee.ero-advertising.com +fhg.iknowthatgirl.com +fhg.mofos.com +fhg.pervsonpatrol.com +fhg.realslutparty.com +fhserve.com +fiafii.org +fiesta-game.com +file.adgatemedia.com +file00.dus.local.vmsn.de +fileblckr.com +filecm.net +files.chartboost.com +filestore.adition.com +filitrac.com +filmboxlive.go2cloud.org +filmforcedvd.ign.us.intellitxt.com +fim.adnxs.com +finaonl.ivwbox.de +finatime.ivwbox.de +find-actual.com +find-anywhere.com +find-easily.com +find-exact.com +find-facts.com +find-fast-answers.com +find-fast-results.com +find-quick-results.com +find-search-engine-results.com +find-search-seek.com +find-uses.com +findabsolutely.com +findaccurate.com +findactual.com +findalternate.com +findanopportunity.com +findconsensus.com +findconvenient.com +findcredible.com +finddozens.com +findextensive.com +findfascinating.com +findfeature.com +findfunction.com +findlisted.com +findlogical.com +findmaybe.com +findmyhood.com +findnumerous.com +findreliable.com +findsatisfaction.com +findsearchengineresults.com +findsearchseek.com +findshoppinginfo.com +findthousands.com +findtotally.com +finduses.com +findwebnow.com +finnesvar.com +firecash.org +firehunt.com +firetrck.com +firingsquad.us.intellitxt.com +firstlook.com +firstname.com +fitforfu.ivwbox.de +fizzix.com +fkm.go2cloud.org +fl01.ct2.comclick.com +flash-counter.com +flash.quantserve.com +flashbanners.static.ard.xxxblackbook.com +flashtest.ero-advertising.com +flashvortex.com +flatdee.ero-advertising.com +flatfae.ero-advertising.com +flatfea.ero-advertising.com +flatfee.ero-advertising.com +flex.atdmt.com +flexbeta.us.intellitxt.com +flippermedia.go2cloud.org +flippermedia.hasoffers.com +flixfacts.co.uk +flom.net +floppybank.com +flowgo.com +flowleadsmedia.go2cloud.org +fls.doubleclick.net +flu.secureintl.com +flurry.com +flv.hs3dmr.com +flvmoviesdownloader.com +flw.ero-advertising.com +flx139.lporirxe.com +flyinads.com +fmpub.net +fnatfee.ero-advertising.com +focalink.com +focus.ivwbox.de +focusin.com +focusworks.com +followup.adlandpro.com +folloyu.com +foo.freelogs.com +forbes.us.intellitxt.com +forbescom.112.2o7.net +forcemovement.go2cloud.org +foreseeresults.com +forestvieweu.go2cloud.org +forexadvertisingnetwork.com +fortumo.com +forum.adspaces.ero-advertising.com +forum.data.ero-advertising.com +forum.ero-advertising.com +forum.livejasmin.com +forum.yeahmobi.com +forums.adspaces.ero-advertising.com +forums.data2.ero-advertising.com +forums.ero-advertising.com +forumwarz.s3.amazonaws.com +foundmoney.com +foxcom.112.2o7.net +foxcounter.com +foxsimpsons.112.2o7.net +fp.buy.com +fp.gad-network.com +fpa.ero-advertising.com +fr.2.cqcounter.com +fr.adserver.yahoo.com +fr.nedstat.net +fr.sitestat.com +fr.static.planet49.com +fra1.ib.adnxs.com +fra10.ib.adnxs.com +fra100.ib.adnxs.com +fra101.ib.adnxs.com +fra102.ib.adnxs.com +fra103.ib.adnxs.com +fra104.ib.adnxs.com +fra105.ib.adnxs.com +fra106.ib.adnxs.com +fra107.ib.adnxs.com +fra108.ib.adnxs.com +fra109.ib.adnxs.com +fra11.ib.adnxs.com +fra110.ib.adnxs.com +fra111.ib.adnxs.com +fra112.ib.adnxs.com +fra113.ib.adnxs.com +fra114.ib.adnxs.com +fra115.ib.adnxs.com +fra116.ib.adnxs.com +fra117.ib.adnxs.com +fra118.ib.adnxs.com +fra119.ib.adnxs.com +fra12.ib.adnxs.com +fra120.ib.adnxs.com +fra121.ib.adnxs.com +fra122.ib.adnxs.com +fra123.ib.adnxs.com +fra124.ib.adnxs.com +fra125.ib.adnxs.com +fra126.ib.adnxs.com +fra127.ib.adnxs.com +fra128.ib.adnxs.com +fra129.ib.adnxs.com +fra13.ib.adnxs.com +fra130.ib.adnxs.com +fra131.ib.adnxs.com +fra132.ib.adnxs.com +fra133.ib.adnxs.com +fra134.ib.adnxs.com +fra135.ib.adnxs.com +fra136.ib.adnxs.com +fra137.ib.adnxs.com +fra138.ib.adnxs.com +fra139.ib.adnxs.com +fra14.ib.adnxs.com +fra140.ib.adnxs.com +fra141.ib.adnxs.com +fra142.ib.adnxs.com +fra143.ib.adnxs.com +fra144.ib.adnxs.com +fra145.ib.adnxs.com +fra146.ib.adnxs.com +fra147.ib.adnxs.com +fra148.ib.adnxs.com +fra149.ib.adnxs.com +fra15.ib.adnxs.com +fra150.ib.adnxs.com +fra151.ib.adnxs.com +fra152.ib.adnxs.com +fra153.ib.adnxs.com +fra154.ib.adnxs.com +fra155.ib.adnxs.com +fra156.ib.adnxs.com +fra157.ib.adnxs.com +fra158.ib.adnxs.com +fra159.ib.adnxs.com +fra16.ib.adnxs.com +fra160.ib.adnxs.com +fra161.ib.adnxs.com +fra162.ib.adnxs.com +fra163.ib.adnxs.com +fra164.ib.adnxs.com +fra165.ib.adnxs.com +fra166.ib.adnxs.com +fra167.ib.adnxs.com +fra168.ib.adnxs.com +fra169.ib.adnxs.com +fra17.ib.adnxs.com +fra170.ib.adnxs.com +fra171.ib.adnxs.com +fra172.ib.adnxs.com +fra173.ib.adnxs.com +fra174.ib.adnxs.com +fra175.ib.adnxs.com +fra176.ib.adnxs.com +fra177.ib.adnxs.com +fra178.ib.adnxs.com +fra179.ib.adnxs.com +fra18.ib.adnxs.com +fra180.ib.adnxs.com +fra181.ib.adnxs.com +fra182.ib.adnxs.com +fra183.ib.adnxs.com +fra184.ib.adnxs.com +fra185.ib.adnxs.com +fra186.ib.adnxs.com +fra187.ib.adnxs.com +fra188.ib.adnxs.com +fra189.ib.adnxs.com +fra19.ib.adnxs.com +fra190.ib.adnxs.com +fra191.ib.adnxs.com +fra192.ib.adnxs.com +fra193.ib.adnxs.com +fra194.ib.adnxs.com +fra195.ib.adnxs.com +fra196.ib.adnxs.com +fra197.ib.adnxs.com +fra198.ib.adnxs.com +fra199.ib.adnxs.com +fra2.ib.adnxs.com +fra20.ib.adnxs.com +fra200.ib.adnxs.com +fra201.ib.adnxs.com +fra202.ib.adnxs.com +fra203.ib.adnxs.com +fra204.ib.adnxs.com +fra205.ib.adnxs.com +fra206.ib.adnxs.com +fra207.ib.adnxs.com +fra208.ib.adnxs.com +fra209.ib.adnxs.com +fra21.ib.adnxs.com +fra210.ib.adnxs.com +fra211.ib.adnxs.com +fra212.ib.adnxs.com +fra213.ib.adnxs.com +fra214.ib.adnxs.com +fra215.ib.adnxs.com +fra216.ib.adnxs.com +fra217.ib.adnxs.com +fra218.ib.adnxs.com +fra219.ib.adnxs.com +fra22.ib.adnxs.com +fra220.ib.adnxs.com +fra221.ib.adnxs.com +fra222.ib.adnxs.com +fra223.ib.adnxs.com +fra224.ib.adnxs.com +fra225.ib.adnxs.com +fra226.ib.adnxs.com +fra227.ib.adnxs.com +fra228.ib.adnxs.com +fra229.ib.adnxs.com +fra23.ib.adnxs.com +fra230.ib.adnxs.com +fra231.ib.adnxs.com +fra232.ib.adnxs.com +fra233.ib.adnxs.com +fra234.ib.adnxs.com +fra235.ib.adnxs.com +fra236.ib.adnxs.com +fra237.ib.adnxs.com +fra238.ib.adnxs.com +fra239.ib.adnxs.com +fra24.ib.adnxs.com +fra240.ib.adnxs.com +fra241.ib.adnxs.com +fra242.ib.adnxs.com +fra243.ib.adnxs.com +fra244.ib.adnxs.com +fra245.ib.adnxs.com +fra246.ib.adnxs.com +fra247.ib.adnxs.com +fra248.ib.adnxs.com +fra249.ib.adnxs.com +fra25.ib.adnxs.com +fra250.ib.adnxs.com +fra251.ib.adnxs.com +fra252.ib.adnxs.com +fra253.ib.adnxs.com +fra254.ib.adnxs.com +fra255.ib.adnxs.com +fra256.ib.adnxs.com +fra257.ib.adnxs.com +fra258.ib.adnxs.com +fra259.ib.adnxs.com +fra26.ib.adnxs.com +fra260.ib.adnxs.com +fra261.ib.adnxs.com +fra262.ib.adnxs.com +fra263.ib.adnxs.com +fra264.ib.adnxs.com +fra265.ib.adnxs.com +fra266.ib.adnxs.com +fra267.ib.adnxs.com +fra268.ib.adnxs.com +fra269.ib.adnxs.com +fra27.ib.adnxs.com +fra270.ib.adnxs.com +fra271.ib.adnxs.com +fra272.ib.adnxs.com +fra273.ib.adnxs.com +fra274.ib.adnxs.com +fra275.ib.adnxs.com +fra276.ib.adnxs.com +fra277.ib.adnxs.com +fra278.ib.adnxs.com +fra279.ib.adnxs.com +fra28.ib.adnxs.com +fra280.ib.adnxs.com +fra281.ib.adnxs.com +fra282.ib.adnxs.com +fra283.ib.adnxs.com +fra284.ib.adnxs.com +fra285.ib.adnxs.com +fra286.ib.adnxs.com +fra287.ib.adnxs.com +fra288.ib.adnxs.com +fra289.ib.adnxs.com +fra29.ib.adnxs.com +fra290.ib.adnxs.com +fra291.ib.adnxs.com +fra292.ib.adnxs.com +fra293.ib.adnxs.com +fra294.ib.adnxs.com +fra295.ib.adnxs.com +fra296.ib.adnxs.com +fra297.ib.adnxs.com +fra298.ib.adnxs.com +fra299.ib.adnxs.com +fra3.ib.adnxs.com +fra30.ib.adnxs.com +fra300.ib.adnxs.com +fra301.ib.adnxs.com +fra302.ib.adnxs.com +fra303.ib.adnxs.com +fra304.ib.adnxs.com +fra305.ib.adnxs.com +fra306.ib.adnxs.com +fra307.ib.adnxs.com +fra308.ib.adnxs.com +fra309.ib.adnxs.com +fra31.ib.adnxs.com +fra310.ib.adnxs.com +fra311.ib.adnxs.com +fra312.ib.adnxs.com +fra313.ib.adnxs.com +fra314.ib.adnxs.com +fra315.ib.adnxs.com +fra316.ib.adnxs.com +fra317.ib.adnxs.com +fra318.ib.adnxs.com +fra319.ib.adnxs.com +fra32.ib.adnxs.com +fra320.ib.adnxs.com +fra321.ib.adnxs.com +fra322.ib.adnxs.com +fra323.ib.adnxs.com +fra324.ib.adnxs.com +fra325.ib.adnxs.com +fra326.ib.adnxs.com +fra327.ib.adnxs.com +fra328.ib.adnxs.com +fra329.ib.adnxs.com +fra33.ib.adnxs.com +fra330.ib.adnxs.com +fra331.ib.adnxs.com +fra332.ib.adnxs.com +fra333.ib.adnxs.com +fra334.ib.adnxs.com +fra335.ib.adnxs.com +fra336.ib.adnxs.com +fra337.ib.adnxs.com +fra338.ib.adnxs.com +fra339.ib.adnxs.com +fra34.ib.adnxs.com +fra340.ib.adnxs.com +fra341.ib.adnxs.com +fra342.ib.adnxs.com +fra343.ib.adnxs.com +fra344.ib.adnxs.com +fra345.ib.adnxs.com +fra346.ib.adnxs.com +fra347.ib.adnxs.com +fra348.ib.adnxs.com +fra349.ib.adnxs.com +fra35.ib.adnxs.com +fra350.ib.adnxs.com +fra351.ib.adnxs.com +fra352.ib.adnxs.com +fra353.ib.adnxs.com +fra354.ib.adnxs.com +fra355.ib.adnxs.com +fra356.ib.adnxs.com +fra357.ib.adnxs.com +fra358.ib.adnxs.com +fra359.ib.adnxs.com +fra36.ib.adnxs.com +fra360.ib.adnxs.com +fra361.ib.adnxs.com +fra362.ib.adnxs.com +fra363.ib.adnxs.com +fra364.ib.adnxs.com +fra365.ib.adnxs.com +fra366.ib.adnxs.com +fra367.ib.adnxs.com +fra368.ib.adnxs.com +fra369.ib.adnxs.com +fra37.ib.adnxs.com +fra370.ib.adnxs.com +fra371.ib.adnxs.com +fra372.ib.adnxs.com +fra373.ib.adnxs.com +fra374.ib.adnxs.com +fra375.ib.adnxs.com +fra376.ib.adnxs.com +fra377.ib.adnxs.com +fra378.ib.adnxs.com +fra379.ib.adnxs.com +fra38.ib.adnxs.com +fra380.ib.adnxs.com +fra381.ib.adnxs.com +fra382.ib.adnxs.com +fra383.ib.adnxs.com +fra384.ib.adnxs.com +fra385.ib.adnxs.com +fra386.ib.adnxs.com +fra387.ib.adnxs.com +fra388.ib.adnxs.com +fra389.ib.adnxs.com +fra39.ib.adnxs.com +fra390.ib.adnxs.com +fra391.ib.adnxs.com +fra392.ib.adnxs.com +fra393.ib.adnxs.com +fra394.ib.adnxs.com +fra395.ib.adnxs.com +fra396.ib.adnxs.com +fra397.ib.adnxs.com +fra398.ib.adnxs.com +fra399.ib.adnxs.com +fra4.ib.adnxs.com +fra40.ib.adnxs.com +fra400.ib.adnxs.com +fra401.ib.adnxs.com +fra402.ib.adnxs.com +fra403.ib.adnxs.com +fra404.ib.adnxs.com +fra405.ib.adnxs.com +fra406.ib.adnxs.com +fra407.ib.adnxs.com +fra408.ib.adnxs.com +fra409.ib.adnxs.com +fra41.ib.adnxs.com +fra410.ib.adnxs.com +fra411.ib.adnxs.com +fra412.ib.adnxs.com +fra413.ib.adnxs.com +fra414.ib.adnxs.com +fra415.ib.adnxs.com +fra416.ib.adnxs.com +fra417.ib.adnxs.com +fra418.ib.adnxs.com +fra419.ib.adnxs.com +fra42.ib.adnxs.com +fra420.ib.adnxs.com +fra421.ib.adnxs.com +fra422.ib.adnxs.com +fra423.ib.adnxs.com +fra424.ib.adnxs.com +fra425.ib.adnxs.com +fra426.ib.adnxs.com +fra427.ib.adnxs.com +fra428.ib.adnxs.com +fra429.ib.adnxs.com +fra43.ib.adnxs.com +fra430.ib.adnxs.com +fra431.ib.adnxs.com +fra432.ib.adnxs.com +fra433.ib.adnxs.com +fra434.ib.adnxs.com +fra435.ib.adnxs.com +fra436.ib.adnxs.com +fra437.ib.adnxs.com +fra438.ib.adnxs.com +fra439.ib.adnxs.com +fra44.ib.adnxs.com +fra440.ib.adnxs.com +fra441.ib.adnxs.com +fra442.ib.adnxs.com +fra443.ib.adnxs.com +fra444.ib.adnxs.com +fra445.ib.adnxs.com +fra446.ib.adnxs.com +fra447.ib.adnxs.com +fra448.ib.adnxs.com +fra449.ib.adnxs.com +fra45.ib.adnxs.com +fra450.ib.adnxs.com +fra451.ib.adnxs.com +fra452.ib.adnxs.com +fra453.ib.adnxs.com +fra454.ib.adnxs.com +fra455.ib.adnxs.com +fra456.ib.adnxs.com +fra457.ib.adnxs.com +fra458.ib.adnxs.com +fra459.ib.adnxs.com +fra46.ib.adnxs.com +fra460.ib.adnxs.com +fra461.ib.adnxs.com +fra462.ib.adnxs.com +fra463.ib.adnxs.com +fra464.ib.adnxs.com +fra465.ib.adnxs.com +fra466.ib.adnxs.com +fra467.ib.adnxs.com +fra468.ib.adnxs.com +fra469.ib.adnxs.com +fra47.ib.adnxs.com +fra470.ib.adnxs.com +fra471.ib.adnxs.com +fra472.ib.adnxs.com +fra473.ib.adnxs.com +fra474.ib.adnxs.com +fra475.ib.adnxs.com +fra476.ib.adnxs.com +fra477.ib.adnxs.com +fra478.ib.adnxs.com +fra479.ib.adnxs.com +fra48.ib.adnxs.com +fra480.ib.adnxs.com +fra481.ib.adnxs.com +fra482.ib.adnxs.com +fra483.ib.adnxs.com +fra484.ib.adnxs.com +fra485.ib.adnxs.com +fra486.ib.adnxs.com +fra487.ib.adnxs.com +fra488.ib.adnxs.com +fra489.ib.adnxs.com +fra49.ib.adnxs.com +fra490.ib.adnxs.com +fra491.ib.adnxs.com +fra492.ib.adnxs.com +fra493.ib.adnxs.com +fra494.ib.adnxs.com +fra495.ib.adnxs.com +fra496.ib.adnxs.com +fra497.ib.adnxs.com +fra498.ib.adnxs.com +fra499.ib.adnxs.com +fra5.ib.adnxs.com +fra50.ib.adnxs.com +fra500.ib.adnxs.com +fra51.ib.adnxs.com +fra52.ib.adnxs.com +fra53.ib.adnxs.com +fra54.ib.adnxs.com +fra55.ib.adnxs.com +fra56.ib.adnxs.com +fra57.ib.adnxs.com +fra58.ib.adnxs.com +fra59.ib.adnxs.com +fra6.ib.adnxs.com +fra60.ib.adnxs.com +fra61.ib.adnxs.com +fra62.ib.adnxs.com +fra63.ib.adnxs.com +fra64.ib.adnxs.com +fra65.ib.adnxs.com +fra66.ib.adnxs.com +fra67.ib.adnxs.com +fra68.ib.adnxs.com +fra69.ib.adnxs.com +fra7.ib.adnxs.com +fra70.ib.adnxs.com +fra71.ib.adnxs.com +fra72.ib.adnxs.com +fra73.ib.adnxs.com +fra74.ib.adnxs.com +fra75.ib.adnxs.com +fra76.ib.adnxs.com +fra77.ib.adnxs.com +fra78.ib.adnxs.com +fra79.ib.adnxs.com +fra8.ib.adnxs.com +fra80.ib.adnxs.com +fra81.ib.adnxs.com +fra82.ib.adnxs.com +fra83.ib.adnxs.com +fra84.ib.adnxs.com +fra85.ib.adnxs.com +fra86.ib.adnxs.com +fra87.ib.adnxs.com +fra88.ib.adnxs.com +fra89.ib.adnxs.com +fra9.ib.adnxs.com +fra90.ib.adnxs.com +fra91.ib.adnxs.com +fra92.ib.adnxs.com +fra93.ib.adnxs.com +fra94.ib.adnxs.com +fra95.ib.adnxs.com +fra96.ib.adnxs.com +fra97.ib.adnxs.com +fra98.ib.adnxs.com +fra99.ib.adnxs.com +france.bpath.com +francesca-fleetwood.us +francesca-studer.us +francisca-corner.us +francisca-hartsock.us +frantic.com +frapost.ivwbox.de +fraston.info +freddyman.com +free-banners.com +free-counter.5u.com +free-stats.com +free-stats.i8.com +free.atdmt.com +free.livejasmin.com +free.realtracker.com +free.wegcash.com +free.xxxcounter.com +free1.usa.realtracker.com +free2try.com +freebe221.homestead.com +freebieclub.com +freebiesfrenzy.go2cloud.org +freebietraffic.com +freecameranow.com +freeclickstats.com +freecodecs.us.intellitxt.com +freecountersnow.com +freehomecenter.com +freelogs.com +freenet.ivwbox.de +freepush.com +freerotator.com +freestat.pl +freestats.com +freevisits.com +freewarefiles.us.intellitxt.com +freewebcounter.com +freewha.com +freewrinklecream.com +freipres.ivwbox.de +frequently-find.com +frequentlyfind.com +freundin.ivwbox.de +frg.go2cloud.org +friendfindercash.com +friendlyduck.com +frivol-ads.com +frogsthemes.go2cloud.org +fsecfsecdev2.122.2o7.net +fsimedia.go2cloud.org +ftp.carmunity.de +ftp.doubleclick.com +ftp.doubleclick.net +ftp.dus.vmsn.de +ftp.kissmetrics.com +ftp.leadbolt.com +ftp.performancerevenues.com +ftp.skyhookwireless.com +ftp.superfish.com +ftp.uimserv.net +ftp.yeahmobi.com +ftp01.dus.local.vmsn.de +ftp01.dus.vmsn.de +ftpcontent.worldnow.com +fucktubenetwork.com +fun-town.com +funberry.powered-by.seekmo.com +funklicks.com +funnel0.adinfuse.com +funny-postcards10.home.ro +funnygreetings.com +funstun.com +fus.walla.co.il +fusion.adtoma.com +fusionpmg.go2cloud.org +futurebazaar.go2cloud.org +futurenet.com +fw.adsafeprotected.com +fwarnr.us +fwdservice.com +fwpgw1.surf-town.net +fx.gtop.ro +fxt.go2cloud.org +g-i2.com +g-pixel.invitemedia.com +g.adspeed.net +g.atdmt.com +g.doubleclick.net +g.websponsors.com +g.zedo.com +g.zeroredirect.com +g.zeroredirect1.com +g.zeroredirect2.com +g2.gumgum.com +g3.us.intellitxt.com +g5.us.intellitxt.com +gabia.com +gabriela-harned.us +gabriela-schueller.us +gabrielle-mullett.us +gail.hit.gemius.pl +galleries1.justcreampie.com +gallery.apptornado.com +galttech.com +gambleup.com +game4mobile.hayday.mobi +gameads-admin.applifier.com +gamefuse.go2cloud.org +gamersblast.com +gamingblast.com +gamingclub.com +gan.doubleclick.net +gaonline.ivwbox.de +gastar.ivwbox.de +gata.ero-advertising.com +gateway.adgatemedia.com +gateway.blamads.com +gawartis.info +gay.xxxcounter.com +gbotvisit.com +gcld.linksynergy.com +gcounter.hosting4u.net +gd.geobytes.com +geekstogo.us.intellitxt.com +geigercount.net +geneme.go2cloud.org +generalmediahu.adocean.pl +generator.zdnet.com +genevieve-gaitan.us +genhit.com +geo.deepmetrix.com +geo.ivwbox.de +geo.offermatica.com +geo.safelinktracker.com +geobanner.adultfriendfinder.com +geobytes.com +geoip.infra-team.com +geoip.syracuse.com +geolep.net +geoloc.appscion.com +geoloc1.geovisite.com +geoloc10.geovisite.com +geoloc100.geovisite.com +geoloc11.geovisite.com +geoloc12.geovisite.com +geoloc13.geovisite.com +geoloc14.geovisite.com +geoloc15.geovisite.com +geoloc16.geovisite.com +geoloc17.geovisite.com +geoloc18.geovisite.com +geoloc19.geovisite.com +geoloc2.geovisite.com +geoloc20.geovisite.com +geoloc21.geovisite.com +geoloc22.geovisite.com +geoloc23.geovisite.com +geoloc24.geovisite.com +geoloc25.geovisite.com +geoloc26.geovisite.com +geoloc27.geovisite.com +geoloc28.geovisite.com +geoloc29.geovisite.com +geoloc3.geovisite.com +geoloc30.geovisite.com +geoloc31.geovisite.com +geoloc32.geovisite.com +geoloc33.geovisite.com +geoloc34.geovisite.com +geoloc35.geovisite.com +geoloc36.geovisite.com +geoloc37.geovisite.com +geoloc38.geovisite.com +geoloc39.geovisite.com +geoloc4.geovisite.com +geoloc40.geovisite.com +geoloc41.geovisite.com +geoloc42.geovisite.com +geoloc43.geovisite.com +geoloc44.geovisite.com +geoloc45.geovisite.com +geoloc46.geovisite.com +geoloc47.geovisite.com +geoloc48.geovisite.com +geoloc49.geovisite.com +geoloc5.geovisite.com +geoloc50.geovisite.com +geoloc51.geovisite.com +geoloc52.geovisite.com +geoloc53.geovisite.com +geoloc54.geovisite.com +geoloc55.geovisite.com +geoloc56.geovisite.com +geoloc57.geovisite.com +geoloc58.geovisite.com +geoloc59.geovisite.com +geoloc6.geovisite.com +geoloc60.geovisite.com +geoloc61.geovisite.com +geoloc62.geovisite.com +geoloc63.geovisite.com +geoloc64.geovisite.com +geoloc65.geovisite.com +geoloc66.geovisite.com +geoloc67.geovisite.com +geoloc68.geovisite.com +geoloc69.geovisite.com +geoloc7.geovisite.com +geoloc70.geovisite.com +geoloc71.geovisite.com +geoloc72.geovisite.com +geoloc73.geovisite.com +geoloc74.geovisite.com +geoloc75.geovisite.com +geoloc76.geovisite.com +geoloc77.geovisite.com +geoloc78.geovisite.com +geoloc79.geovisite.com +geoloc8.geovisite.com +geoloc80.geovisite.com +geoloc81.geovisite.com +geoloc82.geovisite.com +geoloc83.geovisite.com +geoloc84.geovisite.com +geoloc85.geovisite.com +geoloc86.geovisite.com +geoloc87.geovisite.com +geoloc88.geovisite.com +geoloc89.geovisite.com +geoloc9.geovisite.com +geoloc90.geovisite.com +geoloc91.geovisite.com +geoloc92.geovisite.com +geoloc93.geovisite.com +geoloc94.geovisite.com +geoloc95.geovisite.com +geoloc96.geovisite.com +geoloc97.geovisite.com +geoloc98.geovisite.com +geoloc99.geovisite.com +geoplugin.net +georgewbush.112.2o7.net +georgewbushcom.112.2o7.net +georgia-mumford.us +georgiana-millwood.us +geotarget.info +geoup.com +geovisites.com +geraldine-arpin.us +get-amazing-results.com +get-answers-fast.com +get-information.com +get-results-fast.com +get-search-results.com +get.hitbox.com +get.mirando.de +get.netscape.com +get.qualaroo.com +get2buynow.com +getabadmate.com +getdirect.ru +getfreebl.com +gethotresults.com +getmycell.com +getoffersdirect.go2cloud.org +getpaidtosurfthenetmoney.homestead.com +getrank.ciki.me +getsatisfaction.com +getxpay.biz +gg.mob.vendimob.pl +ggi.go2cloud.org +ggo.directrev.com +gh.ffshrine.org +gianna-lamothe.us +gianna-mcgee.us +gianna-radcliff.us +gianna-stockstill.us +giddyupmedia.go2cloud.org +gif.hitexchange.net +gifthulk.go2cloud.org +gifttracker.com +gil-caple.us +gil-duell.us +gillian-boissonneault.us +gillian-leavens.us +gillian-zellner.us +girafa.com +giselle-finlay.us +git01.dus.local.vmsn.de +git01.dus.vmsn.de +gitlab.con.local.vmsn.de +giveaboost.go2cloud.org +givemefreestuff.com +giveramp.com +gjerrigknark.no.intellitxt.com +gladys-lapierre.us +gladys-theriot.us +gladys-viola.us +glbad.adtech.de +glen-grizzle.us +glitternetwork.go2cloud.org +global-adsrv.com +global.msads.net +global.ymtrack.com +globaltrack.com +globirank.com +glopro.com +gloria-kropp.us +gmads.mookie1.com +gmads.net +gmtracker.com +gmx.ivwbox.de +go.adify.com +go.adinfuse.com +go.adversal.com +go.coxds.com +go.cpmadvisors.com +go.freeanalyzer.ru +go.jetswap.hs5.ru +go.kissmetrics.com +go.madmimi.com +go.mobpartner.mobi +go.pardot.com +go.promojet.ru +go.trafficshop.com +go.voice2page.com +go.vrvm.com +go.youlamedia.com +go2.trekaklik.com +go2cloud.org +go2web20.net +go3.trekaklik.com +gogousenet.com +goldenadsf1eed.com +golds.lp.mydas.mobi +golem.met.vgwort.de +golf18.go2cloud.org +golfcountryhomes.com +gomobbi.go2cloud.org +gomovies.track.clicksure.com +gooddata.com +goodiemob.com +goods.us.marketgid.com +goodtraffic.net +google-analytics.com +googleads.g.doubleclick.net +googleads2.g.doubleclick.net +googleadservices.com +googlesyndication.com +googletagmanager.com +goreal.at +gorilla.go2cloud.org +gospycash.com +gostats.com +gotlaughs.com +gotoast.com +gotoo.com +gotta-find.com +goviral.com +goviralnetwork.com +goviralnetwork.net +goweb.de +gpaper107.112.2o7.net +gpaper108.112.2o7.net +gpaper109.112.2o7.net +gpaper110.112.2o7.net +gpaper111.112.2o7.net +gpaper112.112.2o7.net +gpaper113.112.2o7.net +gpaper114.112.2o7.net +gpaper115.112.2o7.net +gpaper116.112.2o7.net +gpaper117.112.2o7.net +gpaper118.112.2o7.net +gpaper119.112.2o7.net +gpaper120.112.2o7.net +gpaper121.112.2o7.net +gpaper122.112.2o7.net +gpaper123.112.2o7.net +gpaper124.112.2o7.net +gpaper125.112.2o7.net +gpaper126.112.2o7.net +gpaper127.112.2o7.net +gpaper128.112.2o7.net +gpaper129.112.2o7.net +gpaper132.112.2o7.net +gpaper133.112.2o7.net +gpaper134.112.2o7.net +gpaper136.112.2o7.net +gpaper138.112.2o7.net +gpaper139.112.2o7.net +gpaper141.112.2o7.net +gpaper142.112.2o7.net +gpaper144.112.2o7.net +gpaper147.112.2o7.net +gpaper149.112.2o7.net +gpaper151.112.2o7.net +gpaper154.112.2o7.net +gpaper158.112.2o7.net +gpaper162.112.2o7.net +gpaper164.112.2o7.net +gpaper166.112.2o7.net +gpaper167.112.2o7.net +gpaper169.112.2o7.net +gpaper171.112.2o7.net +gpaper172.112.2o7.net +gpaper174.112.2o7.net +gpaper176.112.2o7.net +gpaper177.112.2o7.net +gpaper180.112.2o7.net +gpaper183.112.2o7.net +gpaper191.112.2o7.net +gpaper192.112.2o7.net +gpaper193.112.2o7.net +gpaper194.112.2o7.net +gpaper195.112.2o7.net +gpaper196.112.2o7.net +gpaper197.112.2o7.net +gpaper198.112.2o7.net +gpaper199.112.2o7.net +gpaper202.112.2o7.net +gpaper204.112.2o7.net +gpaper205.112.2o7.net +gpapercareer.112.2o7.net +gr1innovations.com +grace-hansley.us +graffix.adition.com +grafix.xxxcounter.com +grammarly.go2cloud.org +graphics.friendfinder.com +graphics1.sextracker.com +graphics2.sextracker.com +graphics3.sextracker.com +graphics7.nytimes.com +graphics8.nytimes.m7z.net +greatest-store.com +green-tracker.com +greenlightmedia.go2cloud.org +greentooth.xtgem.com +gregoryenterprises.go2cloud.org +gretchen-domino.us +grieftalk.com +grin.ivwbox.de +groopz.com +groupe.go2cloud.org +groupware.adition.com +grow.kissmetrics.com +grupoblidoo.go2cloud.org +gs.spylog.ru +gs1.surf-town.net +gs1.wac.edgecastcdn.net +gsanet.com +gserv.zdnet.co.uk +gsmtop.net +gtcc1.acecounter.com +gts-ads.twistbox.com +gttracking.go2cloud.org +guid.org +gumball-tracker.co.uk +guru3d.us.intellitxt.com +guterrat.ivwbox.de +gw.adotsolution.com +gw1.surf-town.net +gw2.surf-town.net +gw3.surf-town.net +gw4.surf-town.net +h.atdmt.com +h.online-metrix.net +h.urtig.net +h.zedo.com +h.zeroredirect.com +h.zeroredirect1.com +h.zeroredirect2.com +h1.flashvortex.com +hal9000.redintelligence.net +haley-seeber.us +hallie-catanzaro.us +hamburg.pennerzone.de +hamster.com +handb.go2cloud.org +handbl.ivwbox.de +handy.ivwbox.de +handyseek.com +hardcore.xxxcounter.com +hardcoretraffic.com +hardwarezone.us.intellitxt.com +harvestadsdepot.com +has.go2cloud.org +has.it +hasoffers.com +hasoffers.ymtrack.com +hastrk2.com +hata.ero-advertising.com +haus.ivwbox.de +hayday1.visits.lt +hayday145.visits.lt +hayley-mund.us +hayley-xiong.us +haz.moarclicks.com +hbb.concentra.be +hbytracker.com +hc1.humanclick.com +hc2.humanclick.com +hchrmain.112.2o7.net +hdplugindownload.com +hearme.com +heather-brennen.us +heather-mcveigh.us +hebdotop.com +hector-lash.us +heise.ivwbox.de +heise.met.vgwort.de +helen-plumley.us +helen-ponte.us +helena-fullwood.us +helena-mapp.us +hellen-baca.us +hellen-behr.us +help.adtech.fr +help.chartboost.com +help.doubleclick.net +help.qualaroo.com +helpsfind.com +henry-mcelroy.us +henry-tussey.us +hernando.com +hfx.go2cloud.org +hg-ios.hitbox.com +hg.travelocity.com.edgesuite.net +hg.zuji.com +hg1.hitbox.com +hhbekxxw5d9e.pflexads.com +hhdevel.com +hide.io +hideaway.com +hig.com +hilary-conn.us +hilary-lafortune.us +hilary-yarber.us +hillary-buhr.us +hillary-fries.us +hillary-lisi.us +hillary-paugh.us +hillary-rhodes.us +hindsight.com +hints.netflame.cc +hipcrime.home.dhs.org +hippo.adultadworld.com +hit-counter.5u.com +hit-counter.info +hit-counter.udub.com +hit-parade.com +hit.clickaider.com +hit.gemius.pl +hit.hotlog.ru +hit.multimania.com +hit.multimania.lycos.fr +hit.sunnydollars.net +hit.trafficholder.com +hit.tripod.lycos.co.uk +hit.tripod.lycos.de +hit.tripod.lycos.es +hit.tripod.lycos.it +hit.tripod.lycos.nl +hit1.hotlog.ru +hit10.hotlog.ru +hit13.hotlog.ru +hit15.hotlog.ru +hit2.hotlog.ru +hit20.hotlog.ru +hit3.hotlog.ru +hit4.hotlog.ru +hit5.hotlog.ru +hit6.hotlog.ru +hit7.hotlog.ru +hit8.hotlog.ru +hit9.hotlog.ru +hitbox.com +hitcents.com +hitcounter01.xspp.com +hitexchange.net +hitfox.go2cloud.org +hitlink.com +hitlist.ru +hitmeter.com +hitometer.netscape.com +hits.icdirect.com +hits.nextstat.com +hits.roitracker.com +hits.spylog.com +hits.webstat.com +hitslink.com +hittrack.org +hitweb.org +hitx.net +hitzr.com +hiwire.com +hjlas.com +hk.adserver.yahoo.com +hkik.ru +hlgsolutions.go2cloud.org +hm-analytics.com +hm.baidu.com +hobot.ru +hollie-ohagan.us +holly-mix.us +holly-whitlow.us +home-internet-cash.com +home-remodeling.com +home.compete.com.edgesuite.net +home.free-banners.com +home.mmcable.com +home.netster.com +home.pages.at +home.peoplepc.com +home.vividvip.com +homedepoy.com +homedepto.com +homeearthlink.net +homeemployed.com +homeeq.com +homegrocier.com +homegrownvideo.com +homelearningcenter.com +homeloan.tr.cx +homepage.cc +homepage.lenzlink.net +homepage.ru +homepages.com +homepageware.com +homepageware.org +homesclick.112.2o7.net +homesidelendinginc.com +homestad.com +homesteadtechnologies.122.2o7.net +hometown-art.aol.com +homevisions.com +hook.yieldbuild.com +hooqy.com +hope-weidner.us +hopurl.org +horizont.ivwbox.de +host-tracker.com +host.leadbolt.com +host003.jag.vmsn.de +host006.jag.vmsn.de +host007.jag.vmsn.de +host008.jag.vmsn.de +host009.jag.vmsn.de +host012.jag.vmsn.de +host013.jag.vmsn.de +host6.hitbox.com +hostboard.us.intellitxt.com +hosting.sproutbuilder.com +hostlnks.com +hotdatinglist.com +hotlog.ru +hotrank.com.tw +house27.ch +howaboutwe.go2cloud.org +howardchui.us.intellitxt.com +hpglobal.112.2o7.net +hphqglobal.112.2o7.net +hq.kissmetrics.com +hr.ivwbox.de +hs.interpolls.com +hsn01.wcom-ma.us.conversion-marketing.com +hstde.tradedoubler.com +hstest.surf-town.net +ht-tracking01.com +html-images.realnetworks.com +html.overture.com +html5adkit.plusmo.s3.amazonaws.com +htmlcounter.com +http.content.ru4.com +http.edge.ru4.com +hulu.112.2o7.net +humaniq.com +humansfind.com +hv3.webstat.com +hybl9bazbc35.pflexads.com +hyderabadclicks.com +hyperbanner.com +hyperbanner.net +hyperion.adtech.fr +hypermall.com +hypermall.net +hyperspace-network.com +hyperspacenetwork.com +hz7.de +i-cdn.servedbyopenx.com +i-xzone.com +i.1cat.com +i.appflood.com +i.bigbn.com.ua +i.blogads.com +i.bongacash.com +i.casalemedia.com +i.cdnpark.com +i.chartboost.com +i.euniverse.com +i.exclusivegiftcards.com +i.flowgo.com +i.i.cbsi.com +i.jumptap.com +i.kissmetrics.com +i.moreover.com +i.perfectnav.com +i.plug.it +i.psa-ads.openx.com +i.tapit.com +i.theuseful.com +i.total-media.net +i.verticalresponse.com +i.w.inmobi.com +i.w.sandbox.inmobi.com +i.w55c.net +i.walla.co.il +i.wifi-x.co.uk +i.wz.cz +i.zeroredirect.com +i.zeroredirect1.com +i.zeroredirect2.com +i1.cmail1.com +i1.cmail2.com +i1.createsend4.com +i1.createsend5.com +i1.likes-media.com +i18n.adition.com +i2.cmail1.com +i2.cmail2.com +i2.createsend1.com +i2.createsend3.com +i2.createsend4.com +i2.crtcdn.net +i2.current.com +i2.gatewayinterface.com +i2.likes-media.com +i3.cmail1.com +i3.cmail2.com +i3.cmail5.com +i3.createsend1.com +i3.createsend3.com +i3.createsend4.com +i3.createsend5.com +i4.cmail1.com +i4.createsend4.com +i5.cmail2.com +i5.cmail5.com +i5.createsend1.com +i5.createsend3.com +i5.createsend5.com +i6.cmail1.com +i6.createsend3.com +i6.createsend5.com +i7.cmail1.com +i7.cmail2.com +i7.cmail5.com +i7.createsend5.com +ia.spinbox.net +ia1.7search.com +ia1.sftcdn.net +iad.anm.co.uk +iadtools.cimedia.com +iamnotageek.us.intellitxt.com +iapref.wanadoo.fr +iar.worthathousandwords.com +ias.hitbox.com +iaspromotes.com +ib.adnxs.com +ib.bounceads.net +ib.mookie1.com +ibario.com +ibeu2.mookie1.com +ibg.hitbox.com +ibsys.com +icentric.us.intellitxt.com +icestorm.com +icm.go2cloud.org +ico.freelogs.com +icompass.insightexpressai.com +icon.ajiang.net +icon.cnzz.com +iconator.com +icontact.com +icount.com +icoupon.go2cloud.org +icover.realmedia.com +icptrack.com +ics.hitbox.com +identifycharacters.com +identifyepisodes.com +identifyexactly.com +identifyplaces.com +idritracker.com +idspaces.ero-advertising.com +idsync.tlcdn.com +ientry.com +ientrymail.com +ientrynetwork.net +iffet.de +iforex.go2cloud.org +iframe.adultfriendfinder.com +iframe.sponsorpay.com +ifriends.net +igmarauders.isotx.com +ign.us.intellitxt.com +igninetwork.go2cloud.org +ignitad.com +igogoshare.com +ih.adscale.de +ih.f2.constantcontact.com +ih4.gamecopyworld.com +ihatepops.com +ihcgpro.go2cloud.org +ihm01.ct2.comclick.com +iicdn.com +ilead.itrack.it +iltpath.com +im.rediff.com +im.upromise.com +im2.smartadserver.com +imads.ero-advertising.com +imads.rediff.com +imadworks.rediff.com +image-catcher.com +image-map.com +image-search-goals.com +image.adition.com +image.adjuggler.com +image.atdmt.com +image.click2net.nl +image.cybererotica.com +image.directadvert.ru +image.excite.com +image.ig.com.br +image.linkexchange.com +image.linkexchange.net +image.lop.com +image.mobilelori.com +image.pathfinder.com +image.providesupport.com +image.safe-sender.co.uk +image.ugo.com +image.versiontracker.com +image01.ctvdigital.com +image2.pubmatic.com +imageads.canoe.ca +imagec07.247realmedia.com +imagec08.247realmedia.com +imagec10.247realmedia.com +imagec11.247realmedia.com +imagec12.247realmedia.com +imagec14.247realmedia.com +imagec15.247realmedia.com +imagec16.247realmedia.com +imagec17.247realmedia.com +imagec18.247realmedia.com +imagecache.allposters.com +imagecache.offercheck.com +imagecache2.allposters.com +imageceu1.247realmedia.com +imageers.com +imagen03.247realmedia.com +imagen04.247realmedia.com +images-72-26-207-6.assets.qhosted.com +images-aud.freshmeat.net +images-aud.slashdot.org +images-aud.sourceforge.net +images.about.com +images.adkmob.com +images.adprofile.net +images.ads.fairfax.com.au +images.ads.whaleads.com +images.adultplex.com +images.banners.com.br +images.bizrate.com +images.bmnq.com +images.brainfox.com +images.bravenet.com +images.buy.com +images.cenniche.com +images.clckm.com +images.clickability.com +images.clicktrade.com +images.cybereps.com +images.dentalplans.com +images.directtrack.com +images.drivelinemedia.com +images.e-mailcom.co.uk +images.ed4.net +images.engine54.com +images.enhance.com +images.fastclick.net +images.francite.com +images.freelotto.com +images.freeshop.com +images.hi5.com +images.hitwise.co.uk +images.ibsys.com +images.ientrymail.com +images.ifriends.net +images.indiads.com +images.itnation.com +images.livejasmin.com +images.m0.net +images.marchex.com +images.millennialmedia.com +images.mpression.net +images.myareaguide.com +images.netradio.nl +images.newsx.cc +images.outwar.com +images.people2people.com +images.quitnet.com +images.rambler.ru +images.resellerratings.com +images.revmob.com +images.sexkey.com +images.sexlist.com +images.sitesense-oo.com +images.specialnetoffer.com +images.speedbit.com +images.streamray.com +images.tigerdirect.com.edgesuite.net +images.v3.com +images.vantage-media.net +images.vantagenet.com +images.webads.nl +images.x10.com +images.zwire.com +images02.netaddress.usa.net +images1.paycounter.com +images2.iac-online.de +imagesearchanswers.com +imageserv.adtech.de +imageserv.adtech.fr +imagesrv.adition.com +imaginemedia.net +imaginemedia.org +imap.linkshare.com +imedia.co.il +imeds.ero-advertising.com +imeseonetwork.go2cloud.org +img-cdn.mediaplex.com +img-iad.mediaplex.com +img-iad.wip.mediaplex.com +img-sjc.wip.mediaplex.com +img-snv.mediaplex.com +img.163.com +img.3721.com +img.7search.com +img.a.shifen.com +img.adkmob.com +img.ads.huntmad.com +img.ads.mobilefuse.net +img.ads.mocean.mobi +img.ads.mojiva.com +img.ads.taptapnetworks.com +img.ads1.mocean.mobi +img.ads1.mojiva.com +img.ads2.mocean.mobi +img.ads2.mojiva.com +img.ads3.mocean.mobi +img.ads3.mojiva.com +img.ads4.mocean.mobi +img.ads4.mojiva.com +img.ads5.mojiva.com +img.adsag.com +img.alcoholsoftcdn.com +img.atdmt.com +img.bizjournals.com +img.blogads.com +img.centrum.sk +img.cqcounter.com +img.diary.ne.jp +img.directadvert.ru +img.directtrack.com +img.dt00.net +img.filefactscdn.com +img.fliks.net +img.gmo.jp +img.gostats.com +img.hitexchange.net +img.la.mediaplex.com +img.livejasmin.com +img.lop.com +img.mediaplex.com +img.mediaplex.com.edgesuite.net +img.mobpartner.mobi +img.mqcdn.com +img.msgtag.com +img.nameintel.com +img.porn365.com +img.propellerads.com +img.revmob.com +img.stamps.com +img.szm.sk +img.techweb.com +img.testsuite.adition.com +img.tradedoubler.com +img.users.51.la +img.web.de +img.webring.com +img.wmp10.elsitiodc.com +img.x10.com +img001.groovinads.com +img002.groovinads.com +img003.groovinads.com +img004.groovinads.com +img005.groovinads.com +img006.groovinads.com +img007.groovinads.com +img008.groovinads.com +img009.groovinads.com +img1.us4.outblaze.com +img1.webring.com +img22.ru.redtram.com +img3.giardinelli.com +img3.giardinelli.com.edgesuite.net +imgcache.classesusa.com +imgcache.vmsn.de +imgis.com +imgn.dt07.net +imgs.xinhuanet.com +imgserv.adbutler.com +imiclk.com +imp.clickability.com +imp.easyadcpc.org +imp.tradedoubler.com +impbe.tradedoubler.com +impde.tradedoubler.com +impdk.tradedoubler.com +impes.tradedoubler.com +impfi.tradedoubler.com +impfr.tradedoubler.com +impgb.tradedoubler.com +impit.tradedoubler.com +impnl.tradedoubler.com +impno.tradedoubler.com +impse.tradedoubler.com +imptestrm.com +ims.cz +ims.nl +imserv001.adtech.fr +imserv002.adtech.fr +imserv003.adtech.fr +imserv004.adtech.fr +imserv005.adtech.fr +imserv006.adtech.fr +imserv00x.adtech.fr +imssl01.adtech.fr +imu.com.cn +imuweb.com +in.adserver.yahoo.com +in.cybererotica.com +in.getclicky.com +in.mainentrypoint.com +in.mydirtyhobby.com +in.paycounter.com +in.riskymail4free.com +inboxdollars.com +inboxpounds.co.uk +inboxpounds.com +incentaclick.com +inceptionads.go2cloud.org +include.reinvigorate.net +indiads.com +indocpa.go2cloud.org +industryclick.com +indystar.com +infinio.go2cloud.org +infinite-ads.com +influentialads.go2cloud.org +info-mail.codeguard.com +info.anmedia.co.uk +info.skyhookwireless.com +infoc1.duba.net +infoc2.duba.net +infochimps.appstores.com +infomart.ca.112.2o7.net +infoproducts.go2cloud.org +infos.com +infospace.com +infospace.com.112.2o7.net +infospacehosting.net +infostart.com +ingameads.gameloft.com +ingrid-kesterson.us +init.phpwind.net +inm.go2cloud.org +inmobi.com +inneractive-assets.s3.amazonaws.com +inpencil.go2cloud.org +inpencilmedia.go2cloud.org +insight.adsrvr.org +insightfirst.com +insitepromotion.com +insites.be +inspectorclick.com +instore-audience.pb.adition.com +int.sitestat.com +int.teracent.net +int3latrack.com +intares.net +integrate.com +intelatrack.biz +intelatracking.net +intelcorpchan.112.2o7.net +intelcorperror.112.2o7.net +intelcorpsupp.112.2o7.net +inteletrack.com +intelglobal.112.2o7.net +intellectualinquiry.com +intelli-direct.com +intelli-tracker.com +intellicampaign.com +intellicontact.com +intellinetz.com +intelliseek.com +intellitxt.com +interclick.com +internationaltraffic.info +internet-shopping-site.com +internet-time.com +internet.cz +internetcount.com +internetfuel.com +internettrafficreport.com +interpr.ru +interupload.com +intext.billboard.cz +intext.ero-advertising.com +intext.nav-links.com +intouch.adinfuse.com +intouchmediagroup.com +intranet.adition.com +intro.ivwbox.de +intuitinc.122.2o7.net +inventory.overture.com +invideo.ero-advertising.com +ioads.ero-advertising.com +ios.revmob.com +ipa01.int.vmsn.de +ipa01.ixn.local.vmsn.de +ipa02.bob.local.vmsn.de +ipacc1.adtech.fr +ipc.chtah.com +ipdata.adtech.fr +iperceptions.com +iph.go2cloud.org +iphone.mobpartner.mobi +iphone.superfish.com +ipinvite.iperceptions.com +ipqualityscore.com +iprofitreport.com +ipstat.com +iq001.adtech.fr +ir-na.amazon-adsystem.com +ir.doubleclick.net +ireklama.cz +irene-campanelli.us +irepdeliver.com +iris-barb.us +iris-bontrager.us +iris-derryberry.us +irma-bickley.us +isg01.casalemedia.com +isoa.adition.com +isoftmarketing.com +ispeakvideo.com +ist.go2cloud.org +istats.nl +istrack.com +it.adserver.yahoo.com +itpaystolearn.com +itpro.no.intellitxt.com +itrack.it +itrack1.com +itrack19.com +itrckr.com +itreviews.uk.intellitxt.com +itunes.mobpartner.mobi +itx5-publicidad.smartadserver.com +itx5.smartadserver.com +itxt.vibrantmedia.com +itxt2.us.intellitxt.com +itxt3.us.intellitxt.com +iv.doubleclick.net +ivillageglobal.112.2o7.net +ivory.vnunet.com +iweb.go2cloud.org +iwebimg.net +ixn001.ixn.local.vmsn.de +ixn002.ixn.local.vmsn.de +ixn003.ixn.local.vmsn.de +izzonet.go2cloud.org +j.clickdensity.com +j.kissinsights.com +j.zeroredirect.com +j.zeroredirect1.com +j.zeroredirect2.com +jackie-dibella.us +jaclyn-tanguay.us +jacqueline-guillen.us +jade-aultman.us +jadina-counter.de +jag.go2cloud.org +jag01.jag.vmsn.de +jag06.jag.vmsn.de +jaimie-adames.us +jalbum.net +james-hayner.us +james.adbutler.de +janae-galentine.us +janel-payan.us +janell-pietrzak.us +janell-surface.us +janessa-martinek.us +janet-gledhill.us +janet-walburn.us +janette-dinan.us +janette-hedman.us +janie-drew.us +janna-ransome.us +japan.inmobi.com +jaqueline-bostwick.us +jasmin-mcgehee.us +jasmin-thaxton.us +jasmine-beecham.us +jasmine-wilner.us +jasper.go2cloud.org +jayde.com +jayme-cray.us +jayohmedia.go2cloud.org +jcarter.spinbox.net +jcmailer.justcode.biz +jcount.com +jd-mail.co.uk +jd.revolvermaps.com +je.revolvermaps.com +jeana-fenster.us +jeana-pedigo.us +jeanette-cropper.us +jeanette-hipps.us +jeanine-ragan.us +jeanine-wiseman.us +jeanna-burd.us +jeanna-cofield.us +jeanna-ewen.us +jeanna-gebo.us +jeanna-potter.us +jeanne-hutcherson.us +jeannette-nauman.us +jeannie-mccord.us +jen-lobdell.us +jena-harbin.us +jena-murrill.us +jena-porras.us +jenna-byrum.us +jenna-gerry.us +jenna-yokota.us +jennie-griffis.us +jennie-underhill.us +jennifer-krieger.us +jennifer-nease.us +jensicons.com +jeremy-mori.us +jeri-pesina.us +jerrica-abraham.us +jerrica-godinez.us +jerrica-sanger.us +jesse-hatley.us +jessi-hinckley.us +jessica-john.us +jessica-rieke.us +jessie-canizales.us +jessie-cruse.us +jessika-ahrens.us +jessy-abrego.us +jessy-sauer.us +jetmultimedia1.audientia.net +jigoshop.go2cloud.org +jijsonline.112.2o7.net +jill-baumgart.us +jill-mortimer.us +jill-southern.us +jillian-whitford.us +jim-lecroy.us +jimbo.ixn.local.vmsn.de +jira.adition.com +jk.chapm.com +jkearns.freestats.com +jlinks.industrybrains.com +jlyse.net +jmm.livestat.com +jmp.clickbooth.com +jmp.realtraq.net +jmpgo.com +jmplink.com +joan-moronta.us +joanna-cohen.us +joanna-hammett.us +joanna-ruckman.us +jobclicks.net +joblo.us.intellitxt.com +jobs.advertising.com +jobs.leadbolt.com +jobs.revmob.com +jobthread.com +jocelyn-pyatt.us +jodi-abrams.us +jody-leal.us +joetec.net +johnlewis.112.2o7.net +join4free.com +jokep.com +jolene-mclin.us +jon-feely.us +jonathanleger.com +jose-snively.us +josephine-youngberg.us +joshtest1.evsuite.com +josie-deltoro.us +josie-mullikin.us +joy-westgate.us +jp1.sb01.com +jpmedia.go2cloud.org +jrcdelcotimescom.122.2o7.net +jrtux.com +js-agent.newrelic.com +js-kit.com +js.admeld.com +js.ads.ero-advertising.com +js.adscale.de +js.adsonar.com +js.aiya.com.cn +js.bizographics.com +js.brilig.com +js.buzzcity.net +js.callbutton.net +js.count.cc +js.cybermonitor.com +js.dmtry.com +js.embedarticle.com +js.ero-advertising.com +js.francite.com +js.libertysurf.fr +js.livehelper.com +js.moatads.com +js.realypay.com +js.revsci.net +js.rmbn.ru +js.ru.redtram.com +js.users.51.la +js.wingowin.com +js.worthathousandwords.com +js1.hitbox.com +js2.rfihub.com +jsc.dinclinx.com +jsc.madisonlogic.com +jsfeedadsget.com +jsfeedget.com +jsmith.go2cloud.org +jsn.dt07.net +jsok.demos.su +json-cricket.appspot.com +json.mmotraffic.com +jspy.ru +jsu.dt07.net +juana-barr.us +juana-bloodworth.us +juana-gribble.us +judith-whitbeck.us +judy-gladney.us +juiceadv.com +julia-giddings.us +juliana-clawson.us +juliana-mckinzie.us +julianna-ferrara.us +julianna-hassell.us +julie-battle.us +jump.omnitarget.com +jump.t2t2.com +jumptap.com +june-dupras.us +jupiter.appads.com +jupiter.bravenet.com +jupiter.us.intellitxt.com +jupiter1.appads.com +jupiter2.appads.com +jupiter3.appads.com +justcounter.com +justin-boston.us +justina-dominique.us +justine-norden.us +justine-vigil.us +justpaste.us +justsaywow.com +justwebads.com +jvz5.com +jvz7.com +jvz8.com +jvz9.com +jvzoo.com +k.collective-media.net +k.zeroredirect.com +k.zeroredirect1.com +k.zeroredirect2.com +kaartenhuis.nl.site-id.nl +kabel1.ivwbox.de +kacey-schulz.us +kacey-sheilds.us +kaci-yearwood.us +kacie-foos.us +kacie-pelley.us +kacy-mcfarland.us +kads.k-network.com +kaila-corker.us +kailyn-hacker.us +kailyn-wooton.us +kaitlin-greenhalgh.us +kaitlin-stengel.us +kala-mazzariello.us +kaleidoaffiliates.go2cloud.org +kalender.adition.com +kalpit.go2cloud.org +kandace-fazio.us +kandace-thomasson.us +kandice-corn.us +kansas.valueclick.ne.jp +kapital.inqnet.at +karen-lobato.us +karen-warden.us +kari-byars.us +karin-yocom.us +karina-bolds.us +karla-law.us +karla-rhymes.us +karli-sheeran.us +karli-vanhouten.us +karoline-fortin.us +kassandra-chick.us +kassandra-fluharty.us +kassandra-ronan.us +kassie-llanes.us +katelin-carriere.us +katelin-garlick.us +katelynn-donalson.us +katharine-gaier.us +katherine-hollandsworth.us +katheryn-cowden.us +katheryn-funk.us +katheryn-shumake.us +kathleen-bower.us +kathryn-berens.us +kathryn-scheele.us +kati-birdsall.us +katlyn-ngo.us +katlyn-oday.us +katrina-riggleman.us +katrina-rumbaugh.us +katrina-urias.us +kayla-massie.us +kaylee-donley.us +kayleigh-cota.us +kayleigh-kilian.us +kds.ero-advertising.com +kefu.duba.net +keisu.eproof.com +kelley-delariva.us +kelley-eggert.us +kelley-madewell.us +kellie-hession.us +kellie-ricardo.us +kelly-deaver.us +kelly-duby.us +kelly-heinen.us +kelly-lehner.us +kelly-longo.us +kelsie-streeter.us +kendall-frierson.us +kendra-dewalt.us +kendra-mcgarry.us +kendra-nason.us +kenneth-pontius.us +keri-arneson.us +keri-maye.us +keri-riel.us +kerri-rasmussen.us +kerrie-baltz.us +kerrie-bedoya.us +kerrie-felker.us +kerrie-pedersen.us +kerry-fincher.us +kerry-navas.us +kerry-petties.us +kevin-peace.us +kewlrank.com +keydownload.go2cloud.org +keystat.com +keyword.netscape.com +keywordblocks.com +keywordmax.com +khvx.secoptim.com +kicker.ivwbox.de +kiley-beeman.us +kilopog.com +kim-whittemore.us +kimberlee-llanos.us +kimberley-chin.us +kimberley-febus.us +kimberley-mackinnon.us +kimberly-worsham.us +kinkycards.com +kinocash.com +kinostok.tv +kintrisaffiliates.go2cloud.org +kirsten-halverson.us +kirstin-debord.us +kissfm.ivwbox.de +kissinsights.com +kissmetrics.com +kissmyads.com +kizash.com +klarmobi.ivwbox.de +klick4u.de +klikklik.nl +kliktrek.com +klipmart.forbes.com +koeln.ivwbox.de +koelnrsc.ivwbox.de +kona.kontera.com +kona32.kontera.com +kondratev.popunder.ru +kontaktanzeigen-fotos.de +kontera.com +kori-lass.us +kori-stimson.us +kosoft-ads.com +kourtney-budge.us +kourtney-fewell.us +kpicentral.com +kr-adimage.lycos.co.kr +krafteurope.112.2o7.net +kreapixel.go2cloud.org +kress.ivwbox.de +krissy-garret.us +krissy-small.us +kristal-matos.us +kristan-landin.us +kristan-newman.us +kristan-ropp.us +kristen-rizzo.us +kristie-chipps.us +kristie-moseley.us +kristin-devine.us +kristine-brogan.us +kristy-chaffins.us +kristy-mackin.us +kryptobanners.com +krysta-plante.us +krysta-quinlan.us +ksta.ivwbox.de +kundenserver.de +kvm001.bob.local.vmsn.de +kvm001.con.local.vmsn.de +kvm002.bob.local.vmsn.de +kvm002.con.local.vmsn.de +kvm003.bob.local.vmsn.de +kvm003.con.local.vmsn.de +kvvadrat.net +kyg.go2cloud.org +kylee-hickok.us +kyra-lazaro.us +l.addthiscdn.com +l.advertstream.com +l.collective-media.net +l.kissinsights.com +l.sh4.co +l.yimg.com +l.zeroredirect.com +l.zeroredirect1.com +l.zeroredirect2.com +l1.zedo.com +l2.zedo.com +l5.zedo.com +lab.atdmt.com +labs.stoodioo.com +lacey-petrus.us +laci-keough.us +lacie-heberling.us +lacodeworks.com +lacy-denny.us +lacy-dobson.us +lacy-gauvin.us +landing.adhall.com +landing.appia.com +landing.domainsponsor.com +landing.seek2.com +landing.trafficz.com +lapoo.net +lara-goodwill.us +lara-hafner.us +lara-tarrance.us +lara-waterbury.us +larry-tardy.us +latinoreview.us.intellitxt.com +launch1.co +launchbit.com +laura-garver.us +lauren-kinsman.us +laurie-boyles.us +laurie-emberton.us +laurie-slocumb.us +laut.ivwbox.de +lax1.ib.adnxs.com +laxnws.112.2o7.net +laxprs.112.2o7.net +laxpsd.112.2o7.net +laxwht.122.2o7.net +layer-ad.org +layer-ads.de +layer-ads.org +layerads.ero-advertising.com +layers.ero-advertising.com +layout1.realtracker.com +lb.trellian.com +lb.usemaxserver.de +lc-pay.com +ld.you2mail.com +ldglob01.adtech.fr +ldglob02.adtech.fr +ldimage01.adtech.fr +ldimage02.adtech.fr +ldserv01.adtech.fr +ldserv02.adtech.fr +lea-danielson.us +lea-riser.us +leadback.advertising.com +leadbolt.com +leadclick.com +leadcrunch.com +leader.linkexchange.net +leadfactory.go2cloud.org +leadformix.com +leadgid.go2cloud.org +leadhound.com +leadhug.go2cloud.org +leadim.go2cloud.org +leadlander.com +leadparadise.go2cloud.org +leadperformanceltd.go2cloud.org +leads.383media.com +leads.demandbase.com +leads.ohecampus.com +leann-faulk.us +leanne-atwood.us +leanne-rolen.us +leapfind.com +learn.doubleclick.net +leave.exacttarget.com +legitfreecounters.com +lenny.ixn.local.vmsn.de +leonard-niebuhr.us +lerelais.com +leticia-kinley.us +letsgetrapidresults.com +letssearch.com +lfstmedia.com +lia-bartell.us +lia-trollinger.us +liana-carls.us +lib1.libstat.com +libmedia.net +libstat.com +liczniki.org +lifeserv.com +likebtn.com +liliana-prokop.us +lily-mcnamara.us +lily-pelchat.us +limitlessoffers.go2cloud.org +linda-bretz.us +linda-jose.us +lindsay-cournoyer.us +lindy-verdi.us +link.belati.net +link.email.dynect.net +link.mochiads.com +link.net +link.p0.com +link.profitreload.com +link.tbtrack.com +link4ads.com +link4link.com +link4u.de +linkads.de +linkbuddies.com +linkconnector.com +linkcorp.net +linkcounter.com +linkdex.go2cloud.org +linkexchange.lk.net +linkexchange.net +linkexchange.nl +linkexchange.org +linkexchange.ru +linklog.blogflux.com +linkopp.com +linkprotector.org +links.outster.com +links.xxxcounter.com +linksfindlocal.com +linkshare.com +linksmile.com +linksponsor.com +linksredirect.com +linkswiper.com +linktarget.com +linktrack.bravenet.com +linktrackerinc.go2cloud.org +linkwithin.com +linkwords.net +linkxchanger.com +linkybank.com +linsey-crist.us +linsey-fitzgerald.us +linsey-palacio.us +linuxpark.adtech.fr +liquidad.narrowcastmedia.com +liqwid.net +lisa-giannini.us +lisa-petitt.us +lisa-scherrer.us +lisa.int.vmsn.de +lisette-leavell.us +lisette-lovin.us +lissette-hendershot.us +lissette-tarkington.us +list.ru +list2.bravenet.com +litiumo.com +live-cams-1.livejasmin.com +live.chartboost.com +live.ivwbox.de +live.sekindo.com +liveadvert.com +livecams.nl +livecounter.dk +livedelivery.com +liveinternet.ru +livesearchnow.com +liveserver.com +livetechnology.com +livezila.namoroevangelicos.com +livingat.ivwbox.de +liz-vassar.us +liza-kyler.us +liza-ulrey.us +lizette-stickler.us +ljostrade.go2cloud.org +lkb.berlinermedienvertrieb.de +llester.net +lli.org +lloogg.com +lm.visualware.com +lm5.spyc.biz +lmcd.us.intellitxt.com +lmdemo.netmining.com +lmlttrack.com +lnkgo.com +lnkgt.com +lnktrack.us +lnx.lu +load.exelator.com +loadeu.exelator.com +loading1.widdit.com +loadm.exelator.com +loadus.exelator.com +loanlinks.com +loanpush.com +loc1.hitsprocessor.com +local-hub.com +local-search-pages.com +local.ads.nwsource.com +localfindanswers.com +localfindinfo.com +localfindlinks.com +localfindstuff.com +localsearchfinds.com +locatetargets.com +log.applifier.com +log.btopenworld.com +log.go.com +log.ioam.de +log.itworld.com +log.opentracker.net +log.optimizely.com +log.trafic.ro +log1.surf-town.net +log10.doubleverify.com +loga.hit-parade.com +loga.xiti.com +logc1.xiti.com +logc13.xiti.com +logc2.xiti.com +logc8.xiti.com +logger.tlvmedia.com +logging.ourstats.de +logging03.wxs.nl +logi1.xiti.com +logi6.xiti.com +logi7.xiti.com +login.adition.com +login.affluentco.com +login.campaignmonitor.com +logiq.go2cloud.org +lognormal.net +logp.hit-parade.com +logp.xiti.com +logp2.xiti.com +logp3.xiti.com +logp4.xiti.com +logp5.xiti.com +logp6.xiti.com +logp7.xiti.com +logp8.xiti.com +logp9.xiti.com +logs.aiya.com.cn +logs.comics.com +logs.eresmas.com +logs.revmob.com +logs.www.eresmas.com +logv1.xiti.com +logv10.xiti.com +logv11.xiti.com +logv12.xiti.com +logv13.xiti.com +logv14.xiti.com +logv15.xiti.com +logv16.xiti.com +logv17.xiti.com +logv18.xiti.com +logv19.xiti.com +logv2.xiti.com +logv20.xiti.com +logv21.xiti.com +logv25.xiti.com +logv27.xiti.com +logv3.xiti.com +logv4.xiti.com +logv5.xiti.com +logv6.xiti.com +logv7.xiti.com +logv8.xiti.com +logv9.xiti.com +lokhlp.com +lolfun.com +loni-burnett.us +loni-gildea.us +loni-mccrimmon.us +loni-schroeter.us +looksa.com +looksmart.com +looksmartcollect.247realmedia.com +lora-keeler.us +loran-mcgrady.us +loran-naccarato.us +loren-ruybal.us +lorena-margolis.us +lori-ridenour.us +los.go2cloud.org +lostwebtracker.com +lotame.com +lotame.nexac.com +louis-barclay.us +louise-poulsen.us +loxtk.com +lp.mp.mydas.mobi +lp.mydas.mobi +lp.sekindo.co.il +lronl.ivwbox.de +lt.andomedia.com +ltur.ivwbox.de +luckyhomepage.com +lucy-loo.us +luisa-hayden.us +luisa-rester.us +luminate.com +lunho.com +lustler.com +luvianetwork.hasoffers.com +lwken.com +lycos-eu.imrworldwide.com +lycos.247realmedia.com +lycoscollect.247realmedia.com +lycoscollect.realmedia.com +lydia-birnbaum.us +lydia-matthes.us +lydia-tolar.us +lynda-malchow.us +lynda-morse.us +lyndsay-lambeth.us +lyndsay-munger.us +lyndsay-sowell.us +lyndsey-hansley.us +lyndsey-merlin.us +lynette-mulvihill.us +lynette-raber.us +lynn-buzbee.us +lynn-spurr.us +lynsey-mabon.us +lynsey-mcpeak.us +lysoft.go2cloud.org +lznet.ivwbox.de +lzonline.ivwbox.de +m.2mdn.net +m.adsymptotic.com +m.adtc.daum.net +m.astrokolik.com +m.banner.linksynergy.com +m.benaughty.com +m.doubleclick.com +m.doubleclick.net +m.duba.net +m.friendlyduck.com +m.leadbolt.com +m.livejasmin.com +m.matdm.com +m.millennialmedia.com +m.sancdn.net +m.sh4.co +m.tribalfusion.com +m.webtrends.com +m.xp1.ru4.com +m.youjizz.com +m.zeroredirect.com +m.zeroredirect1.com +m.zeroredirect2.com +m1.2mdn.net +m1.nedstatbasic.net +m1.webstats4u.com +m1e.net +m2.webstats.motigo.com +m2m1.inner-active.mobi +m3.webstats.motigo.com +m4.webstats.motigo.com +m4.zedo.com +m5.webstats.motigo.com +m6.webstats.motigo.com +m67.bubbleinbox.pw +m7.webstats.motigo.com +m8.webstats.motigo.com +m9.webstats.motigo.com +ma.inmobi.com +mackenzie-brand.us +mackenzie-campbell.us +mackenzie-otten.us +macwelt.ivwbox.de +madas-ads.securest.org +madbidcom.go2cloud.org +madblast.com +madclient.uimserv.net +madeline-pridgen.us +madison-cabot.us +madisonlogic.com +madmimi.com +mads.cnet.com +mads.zdnet.com +madsone.com +magdalena-copenhaver.us +magdalena-pollak.us +magentanews.com +maggie-wallace.us +magicfuture.go2cloud.org +magicmail.co.nz +magicmail.createsend.com +mail-to-a-friend.com +mail.appflood.com +mail.apptornado.com +mail.chartboost.com +mail.data-ero-advertising.com +mail.ero-advertising.com +mail.eroadvertising.biz +mail.eroadvertising.org +mail.fra.vmsn.de +mail.ivwbox.de +mail.kissinsights.com +mail.kissmetrics.com +mail.leadbolt.com +mail.linkshare.com +mail.livejasmin.com +mail.netster.com +mail.performancerevenues.com +mail.skyhookwireless.com +mail.yeahmobi.com +mail01.ixn.local.vmsn.de +mail01.vmsn.de +mail02.bob.local.vmsn.de +mail02.con.local.vmsn.de +mail02.vmsn.de +mail1.surf-town.net +mail2.surf-town.net +mail3.surf-town.net +mail4.surf-town.net +mail5.surf-town.net +mail6.surf-town.net +mail7.surf-town.net +mailb1.surf-town.net +mailb2.surf-town.net +mailb3.surf-town.net +mailback.emlsys.net +mailer.livejasmin.com +mailer.p1ne.com +mailinb1.surf-town.net +mailout1.surf-town.net +mailout2.surf-town.net +mailoutb1.surf-town.net +mailserver.247media.net +main.atdmt.com +main.exoclick.com +mainnetz.ivwbox.de +mainpost.ivwbox.de +mainrhei.ivwbox.de +maira-koerner.us +majintetley.bravejournal.com +mako.checkm8.com +malinda-covin.us +malinda-spillman.us +manage001.adtech.fr +managerm.ivwbox.de +mandi-kearney.us +mandi-sayre.us +mandi-sikes.us +mandy-hooker.us +mandy-huntington.us +mandy-lauzon.us +manuelu.com +map.adsniper.ru +map.media6degrees.com +map.popunderz.com +map1.adsniper.ru +map2.adsniper.ru +maple-team.com +maps.netster.com +mapstats.blogflux.com +mara-valazquez.us +maranda-bagby.us +maranda-postma.us +marc-nickel.us +marcela-catchings.us +marcella-barile.us +marcella-menard.us +marci-mcfarren.us +marci-monaghan.us +marcia-donahue.us +marcie-ridenhour.us +marcie-vanfleet.us +marcie-wille.us +marcy-hayner.us +margaret-dimick.us +mari-stamp.us +mariah-cato.us +mariah-payton.us +mariah-reynolds.us +mariah-westbrook.us +marian-behling.us +marian-lei.us +marian-mcclain.us +mariana-ishee.us +mariana-merideth.us +marianna-brunk.us +maribel-blakney.us +maricela-mcgoldrick.us +marie-cliff.us +marie-holmquist.us +marie-penner.us +mariel-agosto.us +mariel-radcliffe.us +marieta-brooking.us +marilyn-laskowski.us +marina-lance.us +marina-peed.us +marion-latson.us +marisa-maglio.us +marisela-hyde.us +marisol-sharp.us +marissa-son.us +marjorie-baehr.us +market.oicdn.com +marketbanker.com +marketbrowser.com +marketconnect.go2cloud.org +marketdart.com +marketgid.com +markethealth.go2cloud.org +marketing-issue.com +marketing.888.com +marketing.com +marketing.nyi.net +marketing.openoffice.org +marketing.vistaprint.com +marketingprofs.com +marketingsecrets.com +marketingtips.com +marketingtools.facialabuse.tv +marketingwithpostcards.com +marketingx.com +marketleverage.go2cloud.org +marketo.com +marketo.net +marketsource.com +marketspace.com +marketsurveys.com +marlena-colley.us +marlena-ellingson.us +marlene-baley.us +marlene-hunsinger.us +marsha-hoppe.us +marta-kenny.us +martha-valenti.us +mary-marcellus.us +mary-omeara.us +mass-traffic.com +massmerchandise.com +masterh1.adriver.ru +masterh2.adriver.ru +masterh3.adriver.ru +masterh4.adriver.ru +masterh5.adriver.ru +masterh6.adriver.ru +masterzonex.com +mata.ero-advertising.com +match.adsrvr.org +matchbin-assets.s3.amazonaws.com +matchbin.com +mathtag.com +matomy.adk2.co +matomy.com +matomybranches.com +matomygroup.com +matomymail.com +matomymarket.com +matomymax.com +matomymedia.com +matomymediagroup.com +matomymobile.com +mature.xxxcounter.com +mauleadltd.go2cloud.org +maura-teitelbaum.us +maureen-cady.us +maureen-matheson.us +maverickmedia.go2cloud.org +maxbounty.com +maxcash.com +maxgelir.go2cloud.org +maxim.ivwbox.de +maxtrust.ru +maxvr.112.2o7.net +maya-nickens.us +mayancasino.com +mayra-demps.us +mb01.com +mb104.com +mbotvisit.com +mbox12.offermatica.com +mbox12e.offermatica.com +mbox3.offermatica.com +mbox4.offermatica.com +mbox5.offermatica.com +mbox6.offermatica.com +mbox9.offermatica.com +mbox9e.offermatica.com +mbs.spankwirecams.com +mbs.youjizzlive.com +mc.yandex.ru +mcafee12.tt.omtrdc.net +mcl.girlsgothic.com +mclient.ivwbox.de +mclient2.ivwbox.de +mcmoby.go2cloud.org +mcpatrack.tv +mcssl.com +mctracking.go2cloud.org +mdamarillo.112.2o7.net +mdjacksonville.112.2o7.net +mdn1.phluantmobile.net +mdn2.phluantmobile.net +mdn3.phluantmobile.net +mdn3origin.phluantmobile.net +mdwjuneau.122.2o7.net +me-cdn.effectivemeasure.net +meagan-josephs.us +meagan-scully.us +meaghan-freel.us +meaghan-kulas.us +meclabs.go2cloud.org +medbroadcast.112.2o7.net +media-0.vpptechnologies.com +media-1.vpptechnologies.com +media-4.vpptechnologies.com +media-5.vpptechnologies.com +media-6.vpptechnologies.com +media-a.vpptechnologies.com +media-b.vpptechnologies.com +media-c.vpptechnologies.com +media-code.info +media-d.vpptechnologies.com +media-e.vpptechnologies.com +media-f.vpptechnologies.com +media-vertex.com +media.adlegend.com +media.admob.com +media.adrevolver.com +media.carpediem.fr +media.contextweb.com +media.deskwizz.com +media.fastclick.net +media.ftv-publicite.fr +media.funpic.de +media.gameduell.de +media.likes.com +media.markethealth.com +media.match.com +media.mgnetwork.com +media.mobpartner.mobi +media.monster.com +media.motrixi.com +media.mydas.mobi +media.pointroll.com +media.popuptraffic.com +media.privatporevo.com +media.rapid-pass.net +media.salemwebnetwork.com +media.snowball.com +media.syracuse.com +media.trafficjunky.net +media.ym0.net +media101.sitebrand.com +media2.carpediem.fr +media3.sitebrand.com +media30trk.com +media5.sitebrand.com +media970.com +mediaantics.go2cloud.org +mediabistro.112.2o7.net +mediabreakaway.com +mediabuilder.com +mediacampaign.org +mediacdn.discus.com +mediadomain.com +mediadome.com +mediafr.247realmedia.com +mediahorizons.com +medialand.ru +medialytics.com +mediamath.com +mediamgr.ugo.com +mediamind.com +median.hu +medianyx.go2cloud.org +mediaplazza.com +mediarich.cc +mediasheva.com +mediastay.go2cloud.org +mediatotal.ads.visionweb.no +mediauk.247realmedia.com +mediaunder.org +mediavisor.doubleclick.com +mediavisor.doubleclick.net +mediciinternet.go2cloud.org +medicinenet.us.intellitxt.com +medrx.sensis.com.au +meethotties.mobi +meetupdev.122.2o7.net +mega-traf.net +megacounter.de +megafriends.com +megago.com +megalithusa.com +megan-farrier.us +megan-schank.us +megan-stagner.us +melinda-bjork.us +melinda-gans.us +melisa-espino.us +melisa-traynor.us +melissa-armenta.us +melissa-kirksey.us +melissa-latta.us +melissa-mcmillian.us +melissa-sakamoto.us +mellissa-kersten.us +mellissa-lack.us +mellissa-sandford.us +meltingpoint.com +meltwater.com +meltwaternews.com +members.applifier.com +members.homecareersearch.com +members.livejasmin.com +members.swimsuitnetwork.com +members.us.homecareersearch.com +memopumpkin.com +menato.ru +merchant.com +merchant.linksynergy.com +merchant.myofferpal.com +meshbean.com +mesia.com +messagia.adcentric.proximi-t.com +met.adwhirl.com +meta.7search.com +metaad.econet.hu +metacount.com +metrics.mcafee.com +mfr.247realmedia.com +mfsuite.com +mftp.linksynergy.com +mg.dt00.net +mg.dt07.net +mgcash.com +mgcashgate.com +mgid.com +mgjournalnow.112.2o7.net +mgtbo.112.2o7.net +mgtimesdispatch.112.2o7.net +mgwnct.112.2o7.net +mgwsls.112.2o7.net +mi-web10.prod.millennialmedia.com +mi-web11.prod.millennialmedia.com +mi-web12.prod.millennialmedia.com +mi-web13.prod.millennialmedia.com +mi-web14.prod.millennialmedia.com +mi-web15.prod.millennialmedia.com +mi-web16.prod.millennialmedia.com +mi-web17.prod.millennialmedia.com +mi-web18.prod.millennialmedia.com +mi-web19.prod.millennialmedia.com +mi-web20.prod.millennialmedia.com +mi-web21.prod.millennialmedia.com +mi-web22.prod.millennialmedia.com +mi-web23.prod.millennialmedia.com +mi-web24.prod.millennialmedia.com +mi-web25.prod.millennialmedia.com +mi-web26.prod.millennialmedia.com +mi-web27.prod.millennialmedia.com +mi-web28.prod.millennialmedia.com +mi-web29.prod.millennialmedia.com +mi-web30.prod.millennialmedia.com +mi-web31.prod.millennialmedia.com +mi-web32.prod.millennialmedia.com +mi-web33.prod.millennialmedia.com +mi-web35.prod.millennialmedia.com +mi-web36.prod.millennialmedia.com +mi-web37.prod.millennialmedia.com +mi-web38.prod.millennialmedia.com +mi-web39.prod.millennialmedia.com +mi-web40.prod.millennialmedia.com +mi-web41.prod.millennialmedia.com +mi-web42.prod.millennialmedia.com +mi-web43.prod.millennialmedia.com +mi.adinterax.com +mia-fricks.us +michelle-laird.us +michelle-rudolph.us +microsofteup.112.2o7.net +microsoftgamestudio.112.2o7.net +microsoftwga.112.2o7.net +microsoftwindows.112.2o7.net +microstatic.pl +midar.112.2o7.net +middleware.adition.com +middlewaredev.adition.com +midsen.112.2o7.net +migpay.com +miildoos.ru +mildred-patrick.us +militarymommy.com +millennyadv.go2cloud.org +million.francite.com +millionaire.go2cloud.org +mim.io +mimage.opentext.com +mimg-snv.mediaplex.com +mindy-sawyer.us +mirror1.surf-town.net +mirror3.filefacts.com +mirrorad.com +misti-arehart.us +misti-bourbeau.us +misti-smythe.us +misti-weigel.us +miva.com +mixpanel.com +mixrank.go2cloud.org +mjx.ads.nwsource.com +mkto-c0059.com +mkto-k0029.com +mlbglobal.112.2o7.net +mlinktracker.com +mlogin.linksynergy.com +mm.777-partner.com +mm.777-partners.net +mm.chitika.net +mmftpf.com +mmotraffic.com +mmtracking.com +mngiangibabest.112.2o7.net +mngidmn.112.2o7.net +mngirockymtnnews.112.2o7.net +mngislctrib.112.2o7.net +mntr.babcdn.com +mob.adwhirl.com +mobaloo.go2cloud.org +mobbridge.mobpartner.mobi +mobfox.com +mobi.mobijo.tv +mobi.pornhubpremium.com +mobi.yanosik.pl +mobilcom.ivwbox.de +mobile-abc.com +mobile.adfarm1.adition.com +mobile.banzai.it +mobile.biz.daum.net +mobile.ivwbox.de +mobile.juicyads.com +mobile.plugrush.com +mobile18.in.com +mobileads.ero-advertising.com +mobilecollege.go2cloud.org +mobileconspiracy.go2cloud.org +mobiledl.adboe.com +mobilemovie.bitterstrawberry.com +mobitracker.info +mobitraffictracker.net +mobooka.go2cloud.org +mobooka.hasoffers.com +mobpartner.com +mobpartner.mobi +mobscout-stage.dus.vmsn.de +mobscout.dus.vmsn.de +mobvid.mobi +mobwall.mobpartner.com +moceanmobile.com +mochiads.com +mochibot.com +modelatos.com +moderninstalls.go2cloud.org +mojiva.com +mojofarm.mediaplex.com +mojofarm.snv.mediaplex.com +mojoworks.mediaplex.com +mojoworks.snv.mediaplex.com +mokono.com +mollie-nickell.us +mollie-patino.us +mollie-swearengin.us +mom.freelogs.com +monespec.ivwbox.de +monetisetrk.co.uk +monetisetrk1.co.uk +monetisetrk2.co.uk +monetisetrk3.co.uk +monetisetrk4.co.uk +monetisetrk5.co.uk +monetisevideo.com +monetize.applift.com +money4exit.de +moneyempire.go2cloud.org +moneymakerclick.com +mongodb01.bob.local.vmsn.de +mongodb01.con.local.vmsn.de +mongoosemetrics.com +monika-reiber.us +monique-peres.us +monitor-old.adition.com +monitor.adition.com +monitor.applift.com +monitor.revmob.com +monitor.stage.adition.com +monitor01.bob.local.vmsn.de +monitor01.bob.vmsn.de +monitor01.con.local.vmsn.de +monitor01.con.vmsn.de +monster.gostats.com +moo.go2cloud.org +mopo.ivwbox.de +morehitserver.com +moreover.com +morgweb.ivwbox.de +mos.com +motifcdn2.doubleclick.net +motormarket.com +motradon.ivwbox.de +movieads.ero-advertising.com +moz.ivwbox.de +mp-success.com +mp.apmebf.com +mp.clicksor.net +mpp.specificclick.net +mpression.net +mproxy.banner.linksynergy.com +mprptrk.com +mreport.linksynergy.com +mrtg.hitbox.com +msdbb1.surf-town.net +msdbb2.surf-town.net +msdbi1.surf-town.net +mserv1.realmedia.com +msg.ivwbox.de +msgui.go2cloud.org +mshakers.rotator.hadj7.adjuggler.net +msimg.com +msn.ivwbox.de +msn4adults.com +msnaccountservices.112.2o7.net +msnbc.112.2o7.net +msnbcom.112.2o7.net +msnhome.com +msnhomepage.com +msninviteprod.112.2o7.net +msnlivefavorites.112.2o7.net +msnnetwork.com +msnportal.112.2o7.net +msnportalent.112.2o7.net +msnportalhome.112.2o7.net +msnportalprivacy.112.2o7.net +msnservices.112.2o7.net +msntest.serving-sys.com +msntrademarketing.112.2o7.net +mss.handmark.com +mssqladmin.surf-town.net +mswgaprod.112.2o7.net +msxml.webcrawler.com +mtcount.channeladvisor.com +mtrc1.digital-metric.com +muchmarketing.go2cloud.org +munchkin.marketo.com +munchkin.marketo.net +munin2.superfish.com +murphy.ixn.local.vmsn.de +musecdn.businesscatalyst.com +musiccounter.ru +mvtracker.com +mwc.velti.com +mx.adserver.yahoo.com +mx.ero-advertising.com +mx.yandex.ru +mx1.revsci.net +mxmacromedia.112.2o7.net +my-etracker.com +my.365adsolutions.com +my.aim4media.com +my.applifier.com +my.blueadvertise.com +my.media-servers.net +my.mobfox.com +my.skyhookwireless.com +myad.no +myadmarket.com +myadpromoter.com +myaffiliateads.com +myaffiliateprogram.com +mybb.ero-advertising.com +mycdn.media.net +mychannelvip2.netscape.com +mycomputer.superstats.com +mycoupons.com +mycpaads.go2cloud.org +mydas.mobi +mydas.mobi.hostlogr.com +mydas.mobi.visualizetraffic.com +mydb1.surf-town.net +mydb2.surf-town.net +mydb3.surf-town.net +mydb4.surf-town.net +mydbb1.surf-town.net +mydbb2.surf-town.net +mydbc1.surf-town.net +myetracker.com +myfamilyancestry.112.2o7.net +myfavoritegames.us.intellitxt.com +mygosecure.com +mylistenetwork.go2cloud.org +mylottoadserv.com +myns-v1.websys.aol.com +mypoints.com +mysa.belointeractive.com +mysearchhome.com +myseostats.com +mysite.com +mysql01.bob.local.vmsn.de +mysql01.bob.vmsn.de +mysql01.con.local.vmsn.de +mysql01.con.vmsn.de +mysql02.bob.local.vmsn.de +mysql02.bob.vmsn.de +mysql02.con.local.vmsn.de +mysql02.con.vmsn.de +mysql03.bob.local.vmsn.de +mysql03.bob.vmsn.de +mysql03.con.local.vmsn.de +mysql03.con.vmsn.de +mysql04.bob.local.vmsn.de +mysql04.con.local.vmsn.de +mysql05.bob.local.vmsn.de +mysql05.con.local.vmsn.de +mysql06.bob.local.vmsn.de +mysql06.con.local.vmsn.de +mysql07.bob.local.vmsn.de +mysql07.con.local.vmsn.de +mysql08.bob.local.vmsn.de +mysql08.con.local.vmsn.de +mysql09.bob.local.vmsn.de +mysql09.con.local.vmsn.de +mysql10.bob.local.vmsn.de +mysql10.con.local.vmsn.de +mysql11.bob.local.vmsn.de +mysql11.con.local.vmsn.de +mystats.com +mysweetdeals.org +mytiwi.com +mytoday.ivwbox.de +mytrafficbuilder.info +myvacationguide.com +mzweb.ivwbox.de +n-tv.de.intellitxt.com +n-tv.met.vgwort.de +n.ladycash.ru +n.pay-click.ru +n.uimserv.net +n.zeroredirect.com +n.zeroredirect1.com +n.zeroredirect2.com +n0cgi.distributed.net +n4052ad.doubleclick.net +n4403ad.doubleclick.net +n479ad.doubleclick.net +n4p.ru.redtram.com +nagios.adition.com +nancy-mosca.us +nancy-stadler.us +nandp.go2cloud.org +naomi-thorn.us +napster-advertising.de +narrowcastmedia.com +nata.ero-advertising.com +natalia-dimick.us +nataly-godoy.us +natasha-baughman.us +natasha-custer.us +natasha-kaya.us +natasha-marotta.us +natasha-rentschler.us +natgeoedit.112.2o7.net +natgeoeditcom.112.2o7.net +nationalpost.112.2o7.net +nativitystones.go2cloud.org +naturalsearchtoolresults.com +naviant.com +nazarabo.bitterstrawberry.com +nbasic.sitestat.com +nbasic.sitestat.net +nbimg.dt00.net +nbjmp.com +ndoverdrive.net +neber.112.2o7.net +nedstat.co.uk +nedstat.com +nedstat.net +nedstat.nl +nedstatbasic.com +nedstatbasic.net +need.2mng.com +nei.hitbox.com +neobux.com +neogrey.net +neoseeker.us.intellitxt.com +neptune.appads.com +neptune1.appads.com +neptune2.appads.com +neptune3.appads.com +net-france.com +netads.sohu.com +netadsloc.com +netbanner.com +netcomm.spinbox.net +netcounter.de +netdirect.nl +netdna.reporo.net +netezines.advertising.com +netflow.go2cloud.org +netfuerza.com +netgeo.com +nethit-free.nl +netidentity.com +netlinktrack.com +netmarketeur.com +netmarketing2004.com +netmdb01.bob.local.vmsn.de +netmweb01.bob.local.vmsn.de +netnames.com +netperception.com +netperceptions.com +netpool.netbookia.net +netprefs.com +netreflector.com +netremote.com +netropa.com +netrp.112.2o7.net +netsodawap.xtgem.com +netspiderads2.indiatimes.com +netstats-1.www.ibm.com +netstats-2.www.ibm.com +nettown.com +netweather.accuweather.com +network-ca.247realmedia.com +network.adsmarket.com +network.aptimus.com +network.ivwbox.de +network.net-france.com +network.nocreditcard.net +network.realmedia.com +network22.com +networkadvertising.org +networkcommerce.com +networksolutionsaffiliates.com +netzip.com +neueoz.ivwbox.de +neverticular.com +new.adition.com +new.livejasmin.com +newads.bangbros.com +newadserver.interfree.it +newbe122.homestead.com +newcomperformance.go2cloud.org +newmarketinformation.com +newnet.qsrch.com +newpayload.yieldbuild.com +newprose.bravejournal.com +news.duba.net +news.mgid.com +newsclicker.com +newsletter.linkshare.com +newslettersponsor.com +newspaperarchive.go2cloud.org +newt1.adultadworld.com +newworldiq.com +nextlevel.com +nexus.ensighten.com +nexzenpro.go2cloud.org +nfs.visits.lt +ng3.ads.warnerbros.com +ngads.go.com +ngbn.net +nht-2.extreme-dm.com +nick.appstores.com +nicolette-brier.us +nicolette-salas.us +nikole-villalba.us +nina-dressler.us +ninemsn.imrworldwide.com +nip.net +nitroclicks.com +nl.adserver.yahoo.com +nl.count.worldstats.com +nl.cqcounter.com +nl.nedstatpro.com +nl.nedstatpro.net +nl.sitestat.com +nl.topstat.com +nlbanner.nl +nmanchorage.112.2o7.net +nmcommancomedia.112.2o7.net +nmeprod.122.2o7.net +nmhiltonhead.112.2o7.net +nmkawartha.112.2o7.net +nmminneapolis.112.2o7.net +nmnandomedia.112.2o7.net +nmraleigh.112.2o7.net +nmsacramento.112.2o7.net +nmyork.112.2o7.net +nners.ero-advertising.com +nnlb.go2cloud.org +no.2.cqcounter.com +no.adserver.yahoo.com +no1.ad.asap-asp.net +no2.ad.asap-asp.net +nobinet.go2cloud.org +noc.hitbox.com +nodejs01.bob.local.vmsn.de +nodejs01.con.local.vmsn.de +nodes.ads-digitalkeys.com +nodes.da95mr39.com +nodes.double6affiliation.com +noelle-alber.us +noelle-traxler.us +nomen-est-omen.de +nonames.tk +noowho.com +nora-hornbeck.us +nora-reichman.us +norc.go2cloud.org +norma-simental.us +norman-hillyer.us +norman-stutler.us +notepad-plus-plus.org +novascotianetworks.go2cloud.org +novatris.fr +novellcom.112.2o7.net +novuslink.net +now.eloqua.com +npdor.go2cloud.org +npvos.com +nrgdigital.checkm8.com +ns.ivwbox.de +ns.mediaplex.com +ns.valueclick.com +ns0.bob.local.vmsn.de +ns0.con.local.vmsn.de +ns1.123go.net +ns1.247media.com +ns1.acim.com +ns1.adition.com +ns1.carmunity.de +ns1.datapipe.net +ns1.doubleclick.com +ns1.doubleclick.net +ns1.hitbox.com +ns1.hitx.net +ns1.iad.cimedia.net +ns1.ivwbox.de +ns1.ixn.local.vmsn.de +ns1.lighthost.com +ns1.livetechnology.com +ns1.maximumhost.com +ns1.metacount.com +ns1.netster.net +ns1.sfj.pnap.net +ns1.skyhookwireless.com +ns1.sunrise.ch +ns1.surf-town.net +ns106.ehostpros.com +ns2.123go.net +ns2.acim.com +ns2.adition.com +ns2.bob.local.vmsn.de +ns2.boostservice.com +ns2.con.local.vmsn.de +ns2.datapipe.net +ns2.doubleclick.com +ns2.doubleclick.net +ns2.ivwbox.de +ns2.livetechnology.com +ns2.maximumhost.com +ns2.mediaplex.com +ns2.sellingsource.com +ns2.sfj.pnap.net +ns2.skyhookwireless.com +ns2.surf-town.net +ns2.w3open.com +ns3.adition.com +ns3.datapipe.net +ns3.disk11.com +ns3.doubleclick.com +ns3.doubleclick.net +ns3.iad.cimedia.net +ns3.ivwbox.de +ns3.ixn.local.vmsn.de +ns3.maximumhost.com +ns3.skyhookwireless.com +ns3.surf-town.net +ns4.adition.com +ns4.bob.local.vmsn.de +ns4.con.local.vmsn.de +ns4.disk11.com +ns4.ivwbox.de +ns5.ivwbox.de +ns8.linksynergy.com +ntcompatible.us.intellitxt.com +ntv.ivwbox.de +ntwktrax.com +nub9r.maisonx.com +nuggad.net +nvtrak.com +nwz.ivwbox.de +nx-adv0001.247realmedia.com +nx-adv0002.247realmedia.com +nx-adv0003.247realmedia.com +nx-adv0004.247realmedia.com +nx-adv0005.247realmedia.com +nx-adv0006.247realmedia.com +nx-adv0007.247realmedia.com +nx-adv0008.247realmedia.com +nx-adv0009.247realmedia.com +nx-adv0010.247realmedia.com +nym1.ib.adnxs.com +nymcom.112.2o7.net +nytadvertising.nytimes.com +nytbglobe.112.2o7.net +nytglobe.112.2o7.net +nythglobe.112.2o7.net +nytimesglobal.112.2o7.net +nytimesnonsampled.112.2o7.net +nytimesnoonsampled.112.2o7.net +nytmembercenter.112.2o7.net +nytrgadsden.112.2o7.net +nytrlakeland.112.2o7.net +nytrsantarosa.112.2o7.net +nytrsarasota.112.2o7.net +nytrwilmington.112.2o7.net +nyttechnology.112.2o7.net +nztv.prod.untd.com +o.addthis.com +o.leadbolt.com +o.zeroredirect.com +o.zeroredirect1.com +o.zeroredirect2.com +o0.winfuture.de +o2onbusiness.de +oa.techcrunch.com +oad.realmedia.com +oas-central.realmedia.com +oas.benchmark.fr +oas.dn.se +oas.foxnews.com +oas.heise.de +oas.hitbox.com +oas.wwwheise.de +oasc-eu1.247realmedia.com +oasc03012.247realmedia.com +oasc03049.247realmedia.com +oasc04012.247realmedia.com +oasc05024.247realmedia.com +oasc05050.247realmedia.com +oasc05059.247realmedia.com +oasc06006.247realmedia.com +oasc08006.247realmedia.com +oasc08024.247realmedia.com +oasc09.247realmedia.com +oasc10.247realmedia.com +oasc10006.247realmedia.com +oasc11.247realmedia.com +oasc12.247realmedia.com +oasc14.247realmedia.com +oasc15.247realmedia.com +oasc16.247realmedia.com +oasc17.247realmedia.com +oasc18.247realmedia.com +oasc18015.247realmedia.com +oascentral.abclocal.go.com +oascentral.adage.com +oascentral.adageglobal.com +oascentral.bostonherald.com +oascentral.chicagobusiness.com +oascentral.construction.com +oascentral.crainsdetroit.com +oascentral.cybereps.com +oascentral.dailybreeze.com +oascentral.drphil.com +oascentral.feedroom.com +oascentral.fortunecity.com +oascentral.investors.com +oascentral.nerve.com +oascentral.newsmax.com +oascentral.post-gazette.com +oascentral.sina.com +oascentral.sina.com.hk +oascentral.thesmokinggun.com +oascentral.tmcnet.com +oascentral.villagevoice.com +oascentral.washtimes.com +oascentralnx.comcast.net +oasde.springstreetnetworks.com +oasis.411affiliates.ca +oasis2.advfn.com +oata.ero-advertising.com +oberpfal.ivwbox.de +obfm40.com +objects.tremormedia.com +ocs.websponsors.com +oddcast.com +oewa.oewabox.at +offer.17bullets.com +offerannex.go2cloud.org +offerdeliver.com +offers-track.com +offers.avazuscd.net +offers.bitbop.com +offersquared.go2cloud.org +offersquest.directtrack.com +offervisionnetwork.go2cloud.org +office.partnerearning.com +offshoreclicks.com +oin.valuead.com +ojolink.com +ojrq.net +oktfest.ivwbox.de +olivia-dibenedetto.us +olivia-hermes.us +olivia-stanfield.us +olizyr.com +omarsys.com +omg247.us4.list-manage.com +omg247.us4.list-manage1.com +omg247.us4.list-manage2.com +omg247.us5.list-manage1.com +omg247.us5.list-manage2.com +omni.canadiantire.ca +omniture.112.2o7.net +omniture.com +omniture.scotiabank.com +on-js.herokuapp.com +on.linkexchange.com +onclickads.net +one-time-offer.com +one.123counters.com +oneandonlynetwork.com +oneclickcash.com +onelouder.com +onepassnetwork.com +onestat.com +onet.hit.stat.pl +online.cnzz.com +online.com +online.qdigital.co.il +onlineads.magicvalley.com +onlineemailmarketing.com +onlineindigoca.112.2o7.net +onlinetraffic.info +onvis.ivwbox.de +onyarysh.ru +op4g.go2cloud.org +opads.ero-advertising.com +open.vmdb.se +openad.tf1.fr +openad.travelnow.com +openads.tvnorge.no +openadserving.com +opencms.adscale.de +openstat.net +opentracker.net +openvn.com +openx.gns.co.il +openx.org +openxmedia.com +opera1-servedby.advertising.com +operationfabulous.com +opi.yahoo.com +opinionlab.com +opportunity-tracking.com +opt-media.com +opt-n.net +opt.cdxnopt.com +opt.leadbolt.com +opticalnetworks.com +optify.net +optimize.indieclick.com +optimized-by.rubiconproject.com +optimized.by.vitalads.net +optimizedby.rmxads.com +optimizely.appspot.com +optimum-hits.com +optimumadsmedia.go2cloud.org +optiprofits.go2cloud.org +optmd.com +optout.ad1.adfarm1.adition.com +optout.ad2.adfarm1.adition.com +optout.ad3.adfarm1.adition.com +optout.ad4.adfarm1.adition.com +optout.ad5.adfarm1.adition.com +optout.ad6.adfarm1.adition.com +optout.ad7.adfarm1.adition.com +optout.ad8.adfarm1.adition.com +optout.adfarm1.adition.com +optout.ivwbox.de +orange-fr.adinfuse.com +orangesoda.d2.sc.omtrdc.net +orangeuk-mc.adinfuse.com +orbitscripts.com +orders.webpower.com +orencia.pflexads.com +orf.oewabox.at +organicsearchanswers.com +organicsearchgoals.com +os.filefactscdn.com +os2.alcoholsoftcdn.com +ostfztg.ivwbox.de +ostseezt.ivwbox.de +other.xxxcounter.com +otherprofit.com +otmsrv.com +otracking.com +otto.ixn.local.vmsn.de +ouah.com +ouah.fr +our.affiliatetracking.net +ourdeal.go2cloud.org +out.paycounter.com +out.popads.net +outerpages.com +outils.acf-webmaster.net +oversee.d.chango.com +oversee.net +overstock.com.112.2o7.net +overture.com +overture.reporting.net +ovhomes.com +owlonl.ivwbox.de +ox-d.enveromedia.com +ox-d.lanistaconcepts.com +ox-d.mods.pch.com +ox-d.secure-clicks.org +ox-social.bidsystem.com +ox-socialimg.bidsystem.com +ox.appnext.com +oxoads.com +oxosurf.eu +oz.valueclick.ne.jp +o_thus.ero-advertising.com +p.37lai.com +p.ace.advertising.com +p.acxiom-online.com +p.admob.com +p.brilig.com +p.chango.com +p.chartboost.com +p.cpxinteractive.com +p.ctasnet.com +p.medialytics.com +p.typekit.net +p.uimserv.net +p.zeroredirect.com +p.zeroredirect1.com +p.zeroredirect2.com +p1.adhitzads.com +p1.naj.sk +p1.tcr111.tynt.com +p3marketing.com +p5trc.emv2.com +p96582.adskape.ru +pa.yahoo.com +pads.adition.com +pads1.go2cloud.org +padv.co.il +pagead2.googleadservices.com +pagead2.googlesyndication.com +pagecount.com +pagepeel.ero-advertising.com +pages.appia.com +pages.crittercism.com +pages.expert-offers.com +pages.um-per.com +pagesinxt.com +paid-work-at-home.com +paid4clicks.de +paige-alderman.us +paige-messerly.us +paige-weigand.us +pairmake.net +palimashop.com +pamedia.com.au +pamela-bax.us +pamela-duval.us +pamela-wanamaker.us +pan.conanpartners.com +panel.ivwbox.de +panther1.cpxinteractive.com +panzermedia.go2cloud.org +paramount.go2cloud.org +paris.typepad.com +pariswallpapers.powered-by.seekmo.com +paritycube.go2cloud.org +parkingcrew.net +parksurve.com +parradoodle.bravejournal.com +parse.ly +parship.co.uk +partner.ah-ha.com +partner.alerts.aol.com +partner.applift.com +partner.buzzcity.com +partner.coprosper.com +partner.finline.ua +partner.googleadservices.com +partner.privatbank.ua +partner.zangocash.com +partner1.kanoodle.com +partner1.whatsfind.com +partner6.linktrust.com +partnercash.com +partnercrowdscience.sbx1.2o7.net +partners.adultadworld.com +partners.affili24.com +partners.cltrda.com +partners.cotterweb.net +partners.topadmarket.com +partners.trafficz.com +partners.webtrends.com +pass.duba.net +pasta.dianxinos.com +pastilon.com +pata.ero-advertising.com +patchwork.net +path.trackinglabs.com +patricia-pedroza.us +patricia-sackett.us +patricia-tritt.us +paycount.com +paycounter.com +payload.yieldbuild.com +paymonsters.biz +paymonsters.com +payoom.go2cloud.org +paypal.112.2o7.net +paypalssl.doubleclick.net +payperclick.co.il +payperplay.voice2page.com +paypersaleadvertising.com +pbid.pro-market.net +pbtool.adition.com +pcgameha.ivwbox.de +pclick.internal.yahoo.com +pcmega.hasoffers.com +pcookie.cnzz.com +pcwelt.ivwbox.de +pda.mv.bidsystem.com +pdf.forbes.com +pdn.applovin.com +peakclick.com +peakcounter.dk +peerform.go2cloud.org +pegasoweb.com +penny-brannon.us +penton.us.intellitxt.com +people-group.su +perf.overture.com +perfectnav.com +performance.affiliaxe.com +performancerevenues.com +performercenter.livejasmin.com +permissionmedia.com +persianstat.com +perso.estat.com +personalcapital.go2cloud.org +peter-wimbley.us +pf.tradedoubler.com +pfead1.netway.at +pfead2.netway.at +pfead3.netway.at +pfead4.netway.at +pfpc.citygridmedia.com +pgdb1.surf-town.net +pgdbb1.surf-town.net +ph-ad.focalink.com +ph-ad01.focalink.com +ph-ad02.focalink.com +ph-ad03.focalink.com +ph-ad04.focalink.com +ph-ad05.focalink.com +ph-ad06.focalink.com +ph-ad07.focalink.com +ph-ad08.focalink.com +ph-ad09.focalink.com +ph-ad10.focalink.com +ph-ad11.focalink.com +ph-ad12.focalink.com +ph-ad13.focalink.com +ph-ad14.focalink.com +ph-ad15.focalink.com +ph-ad16.focalink.com +ph-ad17.focalink.com +ph-ad18.focalink.com +ph-ad19.focalink.com +ph-ad20.focalink.com +ph-ad21.focalink.com +ph-ad23.focalink.com +ph.affinity.com +phg.hitbox.com +phn.apnanalytics.com +phoenix-adrunner.mycomputer.com +phoenix-adrunner.mycomputer.nl +phoenix-mc-adrunner.mycomputer.com +phoenix.ivwbox.de +phoneboxexperiment.com +photohackday.appstores.com +photoshop-master.org +phpbbex.com +phpmyadmin.ads.ero-advertising.com +phpmyadmin.ero-advertising.com +phpmyadmin.js.ero-advertising.com +pi.pardot.com +pickyourplum.hasoffers.com +pics3.inxhost.com +pigment-adv.co.il +pimprig.us.intellitxt.com +ping-fast.com +ping.apptornado.com +ping.chartbeat.net +pinger.macromedia.com +pingjs.qq.com +pinkcount.com +piranho.com +piranho.de +pivotnetworks.com +piwik.adspaces.ero-advertising.com +piwik.ero-advertising.com +piwik.org +piwik.probefahrten.cc +pix01.revsci.net +pix04-pd04.revsci.net +pix04.revsci.net +pix521.adtech.fr +pix522.adtech.fr +pixazza.com +pixel.33across.com +pixel.adbuyer.com +pixel.adsafeprotected.com +pixel.alexametrics.com +pixel.facebook.com +pixel.fetchback.com +pixel.intares.net +pixel.invitemedia.com +pixel.mathtag.com +pixel.monitor1.returnpath.net +pixel.monitor2.returnpath.net +pixel.netster.com +pixel.quantserve.com +pixel.sitescout.com +pixel1739.everesttech.net +pixetrk.com +pkmg.go2cloud.org +planetactive.com +planetluck.com +platform.revenuestreet.com +play2mobi.com +playads.applift.com +playboy.ivwbox.de +player-services.goviral-content.com +playminigolf.com +plemx.com +plusperformance.go2cloud.org +pluto.adcycle.com +pmediatrack.com +pn2.adserver.yahoo.com +pnp.ivwbox.de +pocketmedia.go2cloud.org +poconorecordcom.112.2o7.net +podtrac.advertserve.com +pointific.go2cloud.org +pointix.com +pointroll.com +pointshop.dk +polly-hammack.us +pongoresume.com +pons.ivwbox.de +pool.skyhookwireless.com +poopoo.freestats.com +pop.kissmetrics.com +pop.mobpartner.mobi +pop.performancerevenues.com +pop.yeahmobi.com +popacs.ero-advertising.com +popads.ero-advertising.com +popads.net +popadscdn.net +popit.mediumpimpin.com +popme.163.com +poponclick.com +pops.ero-advertising.com +popspace.virgilio.us +popunder.adtrgt.com +popunder.net +popunder.ru +popunderz.com +popup.msn.com +popup.softreklam.com +pornlist.mobi +pornolist.org +portal.admeld.com +portal.scanscout.com +portal.skyhookwireless.com +portia-mota.us +posibilities_en.popunder.net +possibilities.popunder.net +postback.aarki.net +postchronicle.us.intellitxt.com +postgazettecollect.247realmedia.com +powered-by.seekmo.com +ppcindo.com +ppctracking.net +ppctrck.com +ppp.voice2page.com +pppads.com +pptrk.com +prchecker.info +preciselylocate.com +precisionleads.go2cloud.org +predictivenetworks.com +preferredpublishers.go2cloud.org +premiercreditcard.com +premios.go2cloud.org +premium.cz +premiumastrology.go2cloud.org +premiumnetwork.com +preview.serving-sys.com +primosearch.com +pringotrack.com +printdirectoryentry.com +printdirectoryinfo.com +printdirectorylinks.com +printdirectorylistings.com +priscilla-rush.us +prishla.info +prismaprofits.go2cloud.org +privatbank.ua +prizee.com +pro-advertising.com +pro7.ivwbox.de +proadv.5gbfree.com +probenking.de +probux.com +prod01.jag.vmsn.de +prod02.jag.vmsn.de +prod03.jag.vmsn.de +prodege.go2cloud.org +products-and-services.com +prof.estat.com +profile.uimserv.net +profiles.mydirtyhobby.com +profitreload.com +profitshare.emag.ro +profitsiegenetwork.go2cloud.org +profitzone.com +progressive.lp.mydas.mobi +project2.realtracker.com +projectcounter.org +projectwonderful.com +promo.acquinityinteractive.com +promo.adrevservice.com +promo.awempire.com +promo.badoink.com +promo.bluesq.com +promo.yahoo.com +promo4partners.com +promobenef.com +promos.adlead.com +promoterbanner.com +promotion.partnercash.com +promotion.shirtinator.net +promotions.yahoo.com +promptleads.go2cloud.org +propellerpops.com +properly-investigate.com +proxad.net +proxy.ladot.com +prx.freecj.com +ps2.interpolls.com +psp.ign.us.intellitxt.com +psstatic.podshow.com +psx.ign.us.intellitxt.com +psychics4free.com +pu.plugrush.com +puat.go2cloud.org +pub.chez.com +pub.cyberbrain.net +pub.dynamicoxygen.com +pub.ftv-publicite.fr +pub.realmedia.fr +pub.sv2.biz +pub.telecharger.com +pub1.bravenet.com +pub10.bravenet.com +pub11.bravenet.com +pub12.bravenet.com +pub13.bravenet.com +pub14.bravenet.com +pub15.bravenet.com +pub16.bravenet.com +pub17.bravenet.com +pub18.bravenet.com +pub19.bravenet.com +pub2.bravenet.com +pub20.bravenet.com +pub21.bravenet.com +pub22.bravenet.com +pub23.bravenet.com +pub24.bravenet.com +pub25.bravenet.com +pub26.bravenet.com +pub27.bravenet.com +pub28.bravenet.com +pub29.bravenet.com +pub3.bravenet.com +pub30.bravenet.com +pub31.bravenet.com +pub32.bravenet.com +pub33.bravenet.com +pub34.bravenet.com +pub35.bravenet.com +pub36.bravenet.com +pub37.bravenet.com +pub38.bravenet.com +pub39.bravenet.com +pub4.bravenet.com +pub40.bravenet.com +pub41.bravenet.com +pub42.bravenet.com +pub43.bravenet.com +pub44.bravenet.com +pub45.bravenet.com +pub46.bravenet.com +pub47.bravenet.com +pub48.bravenet.com +pub49.bravenet.com +pub5.bravenet.com +pub50.bravenet.com +pub6.bravenet.com +pub7.bravenet.com +pub8.bravenet.com +pub9.bravenet.com +pubads.g.doubleclick.net +pubdirecte.com +publead.go2cloud.org +public.bravenet.com +public.carpediem.fr +public0.bravenet.com +public1.bravenet.com +public10.bravenet.com +public11.bravenet.com +public12.bravenet.com +public13.bravenet.com +public14.bravenet.com +public15.bravenet.com +public16.bravenet.com +public17.bravenet.com +public18.bravenet.com +public19.bravenet.com +public2.bravenet.com +public20.bravenet.com +public21.bravenet.com +public22.bravenet.com +public23.bravenet.com +public24.bravenet.com +public25.bravenet.com +public26.bravenet.com +public27.bravenet.com +public28.bravenet.com +public29.bravenet.com +public3.bravenet.com +public30.bravenet.com +public31.bravenet.com +public32.bravenet.com +public33.bravenet.com +public34.bravenet.com +public35.bravenet.com +public36.bravenet.com +public37.bravenet.com +public38.bravenet.com +public39.bravenet.com +public4.bravenet.com +public40.bravenet.com +public41.bravenet.com +public42.bravenet.com +public43.bravenet.com +public44.bravenet.com +public45.bravenet.com +public46.bravenet.com +public47.bravenet.com +public48.bravenet.com +public49.bravenet.com +public5.bravenet.com +public50.bravenet.com +public6.bravenet.com +public7.bravenet.com +public8.bravenet.com +public9.bravenet.com +publicationsunbound.112.2o7.net +publicidad.elmundo.es +publish.vidavee.com +publisher.acquinityinteractive.com +publisher.affluent-networks.com +publisherportal.doubleclick.net +publishers.bidtraffic.com +publishers.clickbooth.com +pulharktheherald.112.2o7.net +pulpantagraph.112.2o7.net +pulsetv.com +puppet.vmsn.de +puppet01.bob.local.vmsn.de +puppet01.con.local.vmsn.de +puppet02.bob.local.vmsn.de +puppet02.con.local.vmsn.de +pureresults.go2cloud.org +puretec.de +push.appsgeyser.com +putoppose.net +px.cdn.creative.medialytics.com +p_en.popunder.net +q.azcentral.com +q.pni.com +q.serving-sys.com +q.uimserv.net +q.zeroredirect.com +q.zeroredirect1.com +q.zeroredirect2.com +q1.checkm8.com +q1digital.checkm8.com +qadabra.com +qdigital.co.il +qdmil.com +qksrv.growhope.com +qoolaid.mygeek.com +qosim.doubleclick.net +qqc.co +qrcodetrackers.com +qrtrackers.com +qs.ivwbox.de +qualaroo.com +qualimed.ivwbox.de +qualitylegion.com +quantserve.com +questaffiliates.net +questnet.de +questseek.com +quick-search-results.com +quickinfo247.com +quickinspirations.com +quickpay.carmunity.de +quickstartstore.go2cloud.org +quinst.com +qwex.net +qwiklnk.com +qyrix.go2cloud.org +r.casalemedia.com +r.chip.de +r.edge.inmobicdn.net +r.kissinsights.com +r.letsw.com +r.mobpartner.mobi +r.openx.net +r.turn.com +r.twimg.com +r.uimserv.net +r.unicornmedia.com +r.w.inmobi.com +r.zeroredirect.com +r.zeroredirect1.com +r.zeroredirect2.com +r1.ace.advertising.com +r1.beta.ace.advertising.com +r1.cooleremail.com +r1.fmpub.net +r1.plugrush.com +r1.zedo.com +r10.cooleremail.com +r10.plugrush.com +r11.cooleremail.com +r11.plugrush.com +r12.plugrush.com +r13.plugrush.com +r14.plugrush.com +r15.plugrush.com +r16.plugrush.com +r17.plugrush.com +r18.plugrush.com +r19.plugrush.com +r2.cooleremail.com +r2.linksynergy.com +r2.plugrush.com +r20.plugrush.com +r20.rs6.net +r21.plugrush.com +r22.plugrush.com +r23.plugrush.com +r24.plugrush.com +r25.plugrush.com +r26.plugrush.com +r27.plugrush.com +r28.plugrush.com +r29.plugrush.com +r2jmarketing.go2cloud.org +r3.cooleremail.com +r3.plugrush.com +r30.plugrush.com +r31.plugrush.com +r32.plugrush.com +r33.plugrush.com +r34.plugrush.com +r35.plugrush.com +r36.plugrush.com +r37.plugrush.com +r38.plugrush.com +r39.plugrush.com +r4.cooleremail.com +r4.plugrush.com +r40.plugrush.com +r5.cooleremail.com +r5.plugrush.com +r6.cooleremail.com +r6.plugrush.com +r7.cooleremail.com +r7.plugrush.com +r8.cooleremail.com +r8.plugrush.com +r9.cooleremail.com +r9.plugrush.com +rachael-labriola.us +rachael-mcquay.us +rachel-beer.us +rachel-billips.us +rachel-blubaugh.us +rachel-oxley.us +rad.microsoft.com +rad.reporo.net +radar11ab.co.uk +radarurl.com +radiate.com +radibonn.ivwbox.de +radioffh.ivwbox.de +radiono.ivwbox.de +rads01.quadrogram.com +radstackmedia.go2cloud.org +rainbow.mythings.com +randall-mccabe.us +ranks.com +rapid-search-results.com +raquel-blauser.us +raquel-freda.us +ras.doubleclick.net +rata.ero-advertising.com +rates.insureship.com +raymond.uk.intellitxt.com +rbb.ivwbox.de +rc-au.imrworldwide.com +rc.adition.com +rc.rlcdn.com +rc10.overture.com +rc12.overture.com +rckymtnnws.112.2o7.net +rcm-images.amazon.com +rcm.amazon.com +rcm.go2cloud.org +rcw.p.ht +rd.ads.juno.com +rd.advertising.com +rd.ane.yahoo.co.jp +rd.jersey.ads.juno.com +rd.realmedia.com +rd.sslmediaserver.com +rd1.hitbox.com +rd1.surfernetwork.com +rdir.smartshoppingads.co.uk +re.adroll.com +readserver.cachefly.net +real.com +realads.realmedia.com +realcounter.eu +reallybig.spinbox.net +realmedia-a592.d4p.net +realmedia-a800.d4p.net +realmedia.ch +realmedia.co.kr +realmedia.com +realmedia.de +realmedia.fr +realmedia.ro +realnetworks.com +realresultspublish.com +realtechnetwork.com +realtracker.com +rebecca-lanham.us +rebecca-smythe.us +recorded-email.com +recreativ.ru +red.chic-avenue.fr +redcounter.net +redir-traffic.elephant-traffic.com +redir.overture.com +redir.speedbit.com +redirect.advertising.se +redirect.fairfax.com.au +redirect.la.idealab.com +redirect.linksummary.com +redirect.mobpartner.mobi +redirect.xmladfeed.com +redirsvc.com +redvase.bravenet.com +redvertisment.com +redzun.go2cloud.org +refer.ccbill.com +refer100.outster.com +referral.imcbet.com +referral.indotogel.net +referral.king4d.com +referral.lotto01.com +referral.togel4d.com +referral.togelplus.com +referral.totobet.net +referral.totojitu.com +referral.totost.com +referral.totosuper.com +referralware.com +refinedads.com +reformal.ru +regalcigs.go2cloud.org +regenbog.ivwbox.de +regina-balog.us +regina-provencal.us +regio.adlink.de +register.leadbolt.com +registration.livejasmin.com +reina-petty.us +reisenhjelp.com +reisprei.ivwbox.de +reklam.softreklam.com +relay.livejasmin.com +relay.superfish.com +relentless.go2cloud.org +relevant-research.com +reliaquote.com +rem.go2cloud.org +remarketing.doubleclick.net +remotead-internal.cnet.com +remotead.cnet.com +renata-wenz.us +renata-winstead.us +renee-gratton.us +renee-neubauer.us +renee-peacock.us +renegademillionaire.go2cloud.org +repo01.ixn.local.vmsn.de +report.crashlytics.com +report.ivwbox.de +report.the-path-gateway.com +report.yeahmobi.com +report02.adtech.fr +reportcentral.doubleclick.com +reportcentral.doubleclick.net +reporter.adtech.fr +reporter001.adtech.fr +reportimage.adtech.fr +reporting.eu-survey.com +reporting.net +reports.adition.com +reports.advertising.com +reports.amonetize.com +reports.crashlytics.com +reports.doubleclick.com +reports.doubleclick.net +reports.extreme-dm.com +reports.shopperreports.com +reports.superfish.com +repotest02.bob.local.vmsn.de +reprox01.dus.local.vmsn.de +republika.onet.pl +req.appads.com +req.mojiva.com +req1.appads.com +req2.appads.com +req3.appads.com +research-artisan.com +researchersfind.com +researchfocuses.com +researchshowing.com +reseller.hitbox.com +resource-marketing.com +resources.hitbox.com +resources.infolinks.com +resourcs.infolinks.com +resultonline.com +retail-affiliates.com +retaildirect.realmedia.com +retargetpro.net +retrostats.com +return.to +revadstrk.com +revelations.trovus.co.uk +revenue.net +revenues.go2cloud.org +revenues.performancerevenues.com +revenueservice.com +revlabs.go2cloud.org +revmobmobileadnetwork.com +revolution.ign.us.intellitxt.com +revolutiongolf.go2cloud.org +revsci.net +rewardit.go2cloud.org +rewardsflow.com +rextk.com +rextopia.com +rextrk.com +rey3935.112.2o7.net +rg1.com +rg2.com +rg4.com +rg5.com +rg6.com +rg7.com +rg9.com +rgadvert.com +rgmarket.adspirit.net +rgrmarketing.go2cloud.org +rheinzei.ivwbox.de +ricardo-grier.us +richelle-crandell.us +richfind.com +ricor.ru +rightmedia.com +rightonmediagroup.go2cloud.org +rightstats.com +rkaffiliates.go2cloud.org +rland.searchlabel.com +rleeden.myby.co.uk +rma-api.gravity.com +rmads.eu.msn.com +rmads.msn.com +rmaiauth.ads.vip.bf1.yahoo.com +rmatic.go2cloud.org +rmbn.ru +roars.com +robotreplay.com +rockoneinnovations.go2cloud.org +rockstaralliance.go2cloud.org +rockyou.go2cloud.org +roi.mediaplex.com +roia.biz +roiadtracker.com +roitracker.com +rosanna-luse.us +rosemary-macy.us +rotatingbannerads.com +rotator.adjuggler.com +rotator.nbjmp.com +rotator.tradetracker.nl +router.revmob.com +router.tlvmedia.com +router01.ixn.local.vmsn.de +router02.ixn.local.vmsn.de +router03.ixn.local.vmsn.de +rovio.appads.com +rovio2.appads.com +rovio3.appads.com +row.bc.yahoo.com +roxanne-shay.us +roxio.112.2o7.net +roxionewroxio2006.112.2o7.net +royal.pingdom.com +rp.alcoholsoftcdn.com +rp.filefactscdn.com +rp.hit.gemius.pl +rpjf.com +rpm-images.newrelic.com +rponl.ivwbox.de +rr1.outster.com +rr1.xxxcounter.com +rrmprod.amobee.com +rs-staticart.ybcdn.net +rs.ero-advertising.com +rs1.avenuea.com +rs2.ero-advertising.com +rs4.anti-leech.com +rsh.ivwbox.de +rsmrttracking.com +rt.liftdna.com +rtb.vmsn.de +rtl.ivwbox.de +rtl2.ivwbox.de +rtsg.com +ru.redtram.com +ru.velti.com +ru02-hits.spylog.com +ru03-hits.spylog.com +ru09-hits.spylog.com +ru4.com +ruclicks.com +rundumsb.ivwbox.de +rungun.com +rushbucks.go2cloud.org +ruth-bromley.us +ruth-westman.us +rvzr-a.akamaihd.net +rvzr2-a.akamaihd.net +rxf.answcdn.com +ryan-lietz.us +rydium.us.intellitxt.com +ryerose.net +s-tracking.com +s.adroll.com +s.adzmedia.mobi +s.amazon-adsystem.com +s.amazon-cornerstone.com +s.as997.de +s.btstatic.com +s.click.alimama.com +s.click.taobao.com +s.clicktale.net +s.ero-advertising.com +s.gstat.orange.fr +s.m2pub.com +s.mobclix.com +s.o-clk.com +s.skimresources.com +s.tctm.co +s.tribalfusion.com +s.zeroredirect.com +s.zeroredirect1.com +s.zeroredirect2.com +s0.2mdn.net +s01-delivery.addynamo.net +s01.flagcounter.com +s02.flagcounter.com +s03.flagcounter.com +s04.flagcounter.com +s05.flagcounter.com +s06.flagcounter.com +s06i.categoria.hpg.com.br +s07.flagcounter.com +s0kdl.castup.net +s1.2mdn.net +s1.c.adhitzads.com +s1.freehostedscripts.net +s1.ipicture.ru +s1.mylove.ru +s1.rotaban.ru +s1.shinystat.com +s1.shinystat.it +s1.teknum.com +s10.hiadspaces.ero-advertising.com +s10.hipaces.ero-advertising.com +s10.his.ero-advertising.com +s10.hispaces.ero-advertising.com +s10.histas.ero-advertising.com +s10.histats.com +s10.histats.com.ero-advertising.com +s10.shinystat.com +s10.sitemeter.com +s10paces.ero-advertising.com +s11.sitemeter.com +s12.sitemeter.com +s13.sitemeter.com +s133d7.virtualxs.com +s14.sitemeter.com +s15.sitemeter.com +s16.sitemeter.com +s17.sitemeter.com +s18.sitemeter.com +s19.sitemeter.com +s2.focalink.com +s2.forumforfree.com +s2.ipicture.ru +s2.mylove.ru +s2.rotaban.ru +s2.shinystat.com +s2.shinystat.it +s2.statcounter.com +s20.sitemeter.com +s21.sitemeter.com +s22.sitemeter.com +s2206i.categoria.hpg.com.br +s23.sitemeter.com +s24.sitemeter.com +s25.sitemeter.com +s26.topstat.com +s3.buysellads.com +s3.images.proboards.com +s3.phluant.com +s3.qckads.com +s3.shinystat.com +s32.research.de.com +s3fdl.castup.net +s3kdl.castup.net +s3rdl.castup.net +s4.histats.com +s4.qckads.com +s4.shinystat.com +s4smedia.go2cloud.org +s4snetwork.go2cloud.org +s5.com +s5.qckads.com +s5.shinystat.com +s6.netlogstatic.com +s6.qckads.com +s6.shinystat.com +s62.research.de.com +s7.adaces.ero-advertising.com +s7.addthis.com +s7.qckads.com +s7.shinystat.com +s73.cnzz.com +s8.shinystat.com +s9.addthis.com +s9.shinystat.com +s95.research.de.com +saaronl.ivwbox.de +sabela.com +sabre.com +sabrina-grider.us +sabrina-rivers.us +sact.atdmt.com +sad1.adriver.ru +sadie-dimick.us +sadie-gwaltney.us +safelinking.net +safelinktracker.com +salescast.real.com +salesmanager.doubleclick.net +samsawesomesite.info +sandbox-elb.beintoo.com +sandra-tester.us +sara-machen.us +sara-maddix.us +sarah-maurer.us +sasha-bolger.us +sasha-castleman.us +sat1.ivwbox.de +saturn.appads.com +saturn1.appads.com +saturn2.appads.com +saturn3.appads.com +saveology.go2cloud.org +sayhello.popunder.ru +sb.scorecardresearch.com +sb1.surf-town.net +sbdhealth.go2cloud.org +sc-a-lbs.focalink.com +sc.ca.us.cddb.com +scand.adlink.de +scarlett-esser.us +scd.secureintl.com +schnigge.ivwbox.de +schuelvz.ivwbox.de +schumacher.adtech.fr +sciamglobal.112.2o7.net +scott-baylor.us +scribol.com +scrippsfoodnet.112.2o7.net +script.blamads.com +script.footprintlive.com +script.ioam.de +script.starpass.fr +script.tailsweep.com +scripts.affiliatefuture.com +scripts.blamads.com +scripts.blueadvertise.com +scripts.cgispy.com +scripts.chitika.net +scripts.gmtracker.com +scripts.insite.com.br +scripts.kissmetrics.com +scripts.lycos.com +scriptshead.com +scrooge.click10.com +scrooge.clickondetroit.com +scrooge.nbc11.com +scrooge.nbc4.com +scrooge.nbcsandiego.com +scrooge.newsnet5.com +scrooge.thebostonchannel.com +scrooge.thedenverchannel.com +scrooge.theindychannel.com +scrooge.thekansascitychannel.com +scrooge.theomahachannel.com +scrooge.wesh.com +scrooge.wftv.com +scrooge.wnbc.com +scrooge.wsoctv.com +scrooge.wtov9.com +scubajournal.com +sda.groupspaces.com +sdc.ca.com +sdc.hns.com +sdc.krollontrack.com +sdc.mako.co.il +sdc.mcafee.com +sdp1.us +sdp2.us +sds.qckads.com +se.adserver.yahoo.com +se.cqcounter.com +se.static.planet49.com +seacoastonlinecom.112.2o7.net +search-fast-results.com +search-feature.com +search-features.com +search-finds.com +search-function.com +search-goals.com +search-images.com +search-local-find.com +search-query.com +search-revealed.com +search-reveals.com +search-safe.com +search.clicksor.com +search.dmtracker.com +search.doubleclick.com +search.doubleclick.net +search.jayde.com +search.keywordblocks.com +search.opentext.com +search.spotxchange.com +search.superfish.com +search.url.com +searchacts.com +searchadv.com +searchbrings.com +searchcapability.com +searchdifferential.com +searchdiscovered.com +searches-find.com +searchesfind.com +searchesreveal.com +searchfastresults.com +searchindicates.com +searching-mails.org +searchintegral.com +searchlinear.com +searchmaybe.com +searchparticipants.com +searchpeack.com +searchpremier.com +searchproduces.com +searchproduction.com +searchrediscovered.com +searchreinvented.com +searchrestricted.com +searchresultsguide.com +searchswitch.com +searchtermresults.com +searchthanks.com +searchwe.com +searchwebresults.com +searscom.112.2o7.net +sec.yimg.com +secimage.adtech.fr +secoptim.com +secretgrowth-00866.us +secretgrowth-12198.us +secretgrowth-43532.us +secretgrowth-53664.us +secretgrowth-89653.us +secrets40.com +secserv.adtech.de +secserv.adtech.fr +secure-assets.rubiconproject.com +secure-au.imrworldwide.com +secure-cn.imrworldwide.com +secure-ds.serving-sys.com +secure-jp.imrworldwide.com +secure-nz.imrworldwide.com +secure-uk.imrworldwide.com +secure-us.imrworldwide.com +secure-za.imrworldwide.com +secure.ace-tag.advertising.com +secure.advertising.com +secure.applifier.com +secure.cpaempire.com +secure.eloqua.com +secure.gaug.es +secure.gtop.ro +secure.livejasmin.com +secure.quantserve.com +secure128.go2cloud.org +secure3.go2cloud.org +securepaths.com +securepubads.g.doubleclick.net +securetraklink.com +security.ivwbox.de +sedotracker.com +sedotracker.de +seebetterresults.com +seek-results.com +seekqueryresults.com +seekresultsreturned.com +seevolution.com +sega.go2cloud.org +segment-pixel.invitemedia.com +segs.btrll.com +seitentipp.com +sekindo.co.il +sekindo.com +select001.adtech.fr +select002.adtech.fr +select003.adtech.fr +select004.adtech.fr +selena-corkery.us +self-destructing-email.com +self-destructing.com +self-destructingemail.com +selfdestructing.com +selfdestructingemail.com +selfdestructingmessage.com +selfnetwork.com +selina-krouse.us +selina-scarlett.us +selina-wimmer.us +sellfy.com +sem.shopexplorer.com +semrush.com +send.microad.jp +send4fun.com +senseiproducts.com +seotoolscentral.com +sergarius.popunder.ru +serpanel.com +serv.realtrafficsolution.net +serve.adhance.com +serve.ads.chaturbate.com +serve.popads.net +serve.vdopia.com +serve.williamhill.com +serve.williamhill.it +servedby.advertising.com +servedby.eleavers.com +servedby.flashtalking.com +servedby.hotdropads.com +servedby1.advertising.com +servedby2.advertising.com +servedby3.advertising.com +servedbyadbutler.com +server-au.imrworldwide.com +server-br.imrworldwide.com +server-by.imrworldwide.com +server-de.imrworldwide.com +server-dk.imrworldwide.com +server-ee.imrworldwide.com +server-fi.imrworldwide.com +server-fr.imrworldwide.com +server-hk.imrworldwide.com +server-it.imrworldwide.com +server-jp.imrworldwide.com +server-lt.imrworldwide.com +server-lv.imrworldwide.com +server-no.imrworldwide.com +server-nz.imrworldwide.com +server-oslo.imrworldwide.com +server-pl.imrworldwide.com +server-ru.imrworldwide.com +server-se.imrworldwide.com +server-sg.imrworldwide.com +server-stockh.imrworldwide.com +server-ua.imrworldwide.com +server-uk.imrworldwide.com +server-us.imrworldwide.com +server-za.imrworldwide.com +server.adform.net +server.adformdsp.net +server.cpmstar.com +server1.streamsend.com +server2.ompinc.com +server3.web-stat.com +serverwatch.de.intellitxt.com +service.adtech.fr +service.clicksvenue.com +service.optify.net +service.sponsorpay.com +service.urchin.com +service001.adtech.fr +service002.adtech.fr +service003.adtech.fr +service004.adtech.fr +service00x.adtech.fr +services.adtech.fr +services.carmunity.de +services.chartboost.com +services.mailermailer.com +services.picadmedia.com +services.qualaroo.com +services.serving-sys.com +services.webestools.com +services1.adtech.fr +serving.adsrevenue.clicksor.net +serving.asdrevenue.clicksor.net +serving.easyadcpc.org +serw.clicksor.com +serw.myroitracking.com +seth.avazutracking.net +setihome.com +setup01.ixn.local.vmsn.de +seumundomobile.com.pt +seven.cdn-image.com +seventynine.go2cloud.org +sexcount.de +sexcounter.com +sf.vserv.mobi +sfmusictech.appstores.com +sftp.clickability.com +sftrack.searchforce.net +sg.adserver.yahoo.com +sgiz.mobi +sgizmo.com +sgs001.adtech.fr +shadu.duba.net +shana-bogen.us +shana-mcinerney.us +shanda-edgell.us +shannon-eaglin.us +shantel-newberry.us +shantel-poulin.us +shape.ivwbox.de +shara-brimer.us +share.loginradius.com +share.pluso.ru +shareasale.com +shari-baskerville.us +shari-leggett.us +shari-rossman.us +shari-spinner.us +sharon-amaro.us +shauna-giese.us +shauna-lefevre.us +shayla-haygood.us +shayla-mcmorris.us +shedad.com +sheila-grosz.us +shelby-swayne.us +shelley-lis.us +shelley-piatt.us +sheree-everton.us +sherrie-alatorre.us +sherrie-sepe.us +sherrie-wherry.us +sherry-klingbeil.us +sheryl-payton.us +shfr.hernando.com +shinystat.com +shinystat.it +shinystat.lvlar.com +shinystat.shiny.it +shirley-rivet.us +shonda-nowicki.us +shop.adition.com +shop.gnezdo.ru +shopexplorer.com +shopping.dailycamera.com +shopping.webmarket.com +shortlnk.us +show.buzzcity.net +show.yeabble.com +showads.pubmatic.com +showads1000.pubmatic.com +showadsak.pubmatic.com +showcount.honest.com +showhitcounter.com +showm3.com +showroomvip.com +showstat.com +shufflepointads.go2cloud.org +shz.ivwbox.de +si.2.cqcounter.com +si.netmng.com +si1.default-homepage-network.com +sictalk.com +sidedivx.com +sierra-arwood.us +sifyimg.edgesuite.net +sifyimg.speedera.net +signaltrader.go2cloud.org +signpost.go2cloud.org +siliconaction.com +silvia-coello.us +silvia-maffei.us +sim.thetrafficstat.net +simg.zedo.com +simona-bober.us +simona-godoy.us +simona-regnier.us +simona-stanford.us +simone-longoria.us +simonsearch.com +simplehitcounter.com +simpleonlinemedia.go2cloud.org +sin.ero-advertising.com +sired.com +site-stats.com +site-stats.i8.com +sitedirectory.doubleclick.net +siteflow.com +sitemeter.com +siteminer.mycomputer.com +siteminer.superstats.com +sitepal.com +sites.chartboost.com +sitesearch.hitbox.com +sitesell.com +sitestat.com +sitestat.hetnet.nl +sitestat.nedstat.nl +sitestats.com +sitestats.tiscali.co.uk +sitestatz.com +sitetracker.com +sixpackshortcuts.go2cloud.org +sj-g-lbs.focalink.com +sj.burstnet.com +sjc-g007.us.intellitxt.com +sjs.bizographics.com +sk.connect2.ws +skilljam.com +skimlinks.com +skinhead.com +skinner.ixn.local.vmsn.de +sky-connect.adinfuse.com +sky.adinfuse.com +skyhookwireless.com +skyhorn.com +skyrocketingmedia.go2cloud.org +sls.go2cloud.org +sm.banner-link.com.br +sm1.sitemeter.com +sm2.sitemeter.com +sm3.sitemeter.com +sm4.sitemeter.com +sm5.sitemeter.com +sm6.sitemeter.com +sm7.sitemeter.com +sm8.sitemeter.com +sm9.sitemeter.com +smart-ip.net +smart.montiera.com +smartadserver.com +smartbrowse.netster.com +smartcj.com +smarterrorpage.com +smarttrk.com +smetrics.mcafee.com +smilepop.com +smithers.ixn.local.vmsn.de +smjmp.net +smoothscrollapp.com +smp.adviva.net +smrtclick.com +smtp.ero-advertising.com +smtp.kissmetrics.com +smtp.mobpartner.mobi +smtp.performancerevenues.com +smtp.yeahmobi.com +smwww.112.2o7.net +snake.ixn.local.vmsn.de +snapengage.com +snapify.go2cloud.org +snapshot.compete.com +snklink.us +snonline.ivwbox.de +snowbird.powerreviews.com +soa.adition.com +soadev.adition.com +soaold.adition.com +soaperformance.adition.com +soastage.adition.com +soav1.adition.com +social.msgplus.net +socialize-it.com +sociomantic.com +soclock.com +softcore.xxxcounter.com +softlinkers.popunder.ru +softonic.112.2o7.net +softonic.us.intellitxt.com +softpedia.uk.intellitxt.com +software.xoomcounter.com +sohh.us.intellitxt.com +sokrates.adtech.fr +soldi.msn.it +soma.smaato.net +somanyhits.info +sondra-nowell.us +sonia-brough.us +sonia-hemmer.us +sonia-pantoja.us +sonia-wedge.us +sonja-ketner.us +sonja-rascon.us +sonya-hajek.us +sonya-howland.us +sophia-bevis.us +sophia-cordova.us +sort.trafficjuicer.com +sosharpcorporation.go2cloud.org +soundadgroup.go2cloud.org +soundbeat.go2cloud.org +sovereign.sitetracker.com +spaces.ero-advertising.com +sparkimg.com +sparknetworks.112.2o7.net +spd.atdmt.com +spd.atdmt.speedera.net +spd.pointroll.com +spe.atdmt.com +specialoffers.aol.com +specificmedia.com +speed.pointroll.com +speed4cksa.ero-advertising.com +speedclecks.ero-advertising.com +speedclicks.ero-advertising.com +speedclics.ero-advertising.com +speedlicks.ero-advertising.com +speeuclicks.ero-advertising.com +sperse.com +spiegel.ivwbox.de +spiegel.met.vgwort.de +spin.spinbox.net +spinbox.techtracker.com +spinbox.versiontracker.com +spixl.ivwbox.de +spixlcont.ivwbox.de +splashpageadvertising.com +sponsorads.de +sponsors.thoughtsmedia.com +sponsorships.net +sport.xoomcounter.com +sport1.ivwbox.de +sports.ign.us.intellitxt.com +spotsniper.ru +spycash.biz +spykemedia.go2cloud.org +spylog.com +spylog.ru +spynet2.microsoft.com +spynettest.microsoft.com +spytrack.tic.ru +spyware.homestead.com +sq2trk2.com +squarehang.net +sr.adrevolver.com +sronline.ivwbox.de +srs.targetpoint.com +srv.buysellads.com +srv.clickfuse.com +srv.perf.overture.com +srv.sayyac.net +srv1.bannercommunity.de +srv1.wa.marketingsolutions.yahoo.com +srv2.wa.marketingsolutions.yahoo.com +srv2trking.com +srv3.bannercommunity.de +srv3.wa.marketingsolutions.yahoo.com +srx.de.ebayrtm.com +ss.linksynergy.com +ss.tiscali.it +ss2.zedo.com +ssangyong.co.il +ssaproductlaunches.com +sscdn.banners.advidi.com +ssdk.adkmob.com +ssh.kissmetrics.com +ssl-hints.netflame.cc +ssl-vpn.cutterbuck.com +ssl.fra.vmsn.de +ssl.google-analytics.com +ssl.linksynergy.com +ssl1.fra.vmsn.de +sso.conduit.com +sszomsa.imdrv.net +st-ops.stage.adition.com +st.blogads.com +st.ladycash.ru +st.pay-click.ru +st.pc.adonweb.ru +st.wetrack.it +st.xhamster.com +st1.freeonlineusers.com +st1.surf-town.net +st2-img.recreativ.ru +st2.freeonlineusers.com +st2.surf-town.net +st2.xhamster.com +st3-img.recreativ.ru +st3.surf-town.net +st3.xhamster.com +st4.surf-town.net +st4.xhamster.com +st5.surf-town.net +stacia-jose.us +stacia-ware.us +stacie-caffey.us +stacie-hockett.us +stacy-hawes.us +stage-dbltb.vmsn.de +stage-rtb.vmsn.de +stage-snb.tbe.vmsn.de +stage-tb.vmsn.de +stage-tbe-db01.bob.local.vmsn.de +stage-tbe-db01.con.local.vmsn.de +stage-tbe01.bob.local.vmsn.de +stage-tbe01.con.local.vmsn.de +stage-tbe1.vmsn.de +stage-tbe2.vmsn.de +stage-tbe3.vmsn.de +stage-tbe4.vmsn.de +stage-tbe5.vmsn.de +stage-tbt.vmsn.de +stage-uitb.vmsn.de +stage.alphagirlz.mobi +stage.ap1.alphagirlz.mobi +stage.ap2.alphagirlz.mobi +stage.hitbox.com +stage01.bob.local.vmsn.de +stage01.bob.vmsn.de +stage01.con.local.vmsn.de +stage01.con.vmsn.de +stage02.bob.local.vmsn.de +stage02.con.local.vmsn.de +stage102.hitbox.com +stage39media.go2cloud.org +staging-goldcrown.linkshare.com +staging-hallmark.linkshare.com +staging.50onred.com +staging.adition.com +staging.iframe.sponsorpay.com +stare.adrevolver.com +start.xxxcounter.com +starterdir.ru +stat-counter.tass-online.ru +stat.4u.pl +stat.alibaba.com +stat.appsgeyser.com +stat.china.alibaba.com +stat.cybermonitor.com +stat.dealtime.com +stat.devparadise.com +stat.easydate.biz +stat.flashtalking.com +stat.freemediastats.com +stat.info-stream.net +stat.katalysatormedia.no +stat.onestat.com +stat.pl +stat.sittiad.com +stat.t2t2.com +stat.webmedia.pl +stat.www.fi +stat.zenon.net +stat1.vipstat.com +stat1.z-stat.com +stat2.cybermonitor.com +stat3.cybermonitor.com +statcounter.com +static-72-26-207-6.assets.qhosted.com +static-cdn.anetwork.ir +static.acs86.com +static.addtoany.com +static.addynamo.net +static.adfarm1.adition.com +static.ads.crakmedia.com +static.adsafeprotected.com +static.alimama.com +static.app.widdit.com +static.appwatch.com +static.bannerbank.ru +static.beintoo.com +static.cdn.gtsmobi.com +static.chartboost.com +static.clixsense.com +static.crowdscience.com +static.csbew.com +static.doubleclick.com +static.doubleclick.net +static.estebull.com +static.everyone.net +static.exoclick.com +static.fmpub.net +static.fragbite.com +static.getclicky.com +static.groupon.co.uk +static.issuu.com +static.it.groupon-content.net +static.itrack.it +static.livejasmin.com +static.matchnet.com +static.ndoverdrive.net +static.ngbn.net +static.parse.ly +static.pixazza.com +static.qweery.nl +static.rpxnow.com +static.salesresourcepartners.com +static.smsac.net.edgesuite.net +static.superfish.com +static.thumbr.com +static.vpptechnologies.com +static.weborama.fr +static.zangocash.com +static7.adrepublic.net +staticads.btopenworld.com +staticimages.branders.com +staticrr.paleokits.net +staticrr.sslsecure1.com +staticrr.sslsecure10.com +staticrr.sslsecure2.com +staticrr.sslsecure3.com +staticrr.sslsecure4.com +staticrr.sslsecure5.com +staticrr.sslsecure6.com +staticrr.sslsecure7.com +staticrr.sslsecure8.com +staticrr.sslsecure9.com +statistics.s5.com +statistik.biz +statm.the-adult-company.com +statonly.com +stats.aatrk.com +stats.absol.co.za +stats.adotube.com +stats.adrevservice.com +stats.adspaces.ero-advertising.com +stats.adultplex.com +stats.adultrevenueservice.com +stats.applifier.com +stats.appsgeyser.com +stats.apptornado.com +stats.bbc.co.uk +stats.big-boards.com +stats.blogger.com +stats.buysellads.com +stats.cashring.com +stats.channel4.com +stats.clickability.com +stats.clicktracks.com +stats.conversionbroadcast.net +stats.cts-bv.nl +stats.cubi.me +stats.data2.ero-advertising.com +stats.directnic.com +stats.distributed.net +stats.ero-advertising.com +stats.examiner.com +stats.exoclick.com +stats.fastcompany.com +stats.g.doubleclick.net +stats.gohip.com +stats.groupninetyfour.com +stats.hitbox.com +stats.homestead.com +stats.homestead.net +stats.indextools.com +stats.ipvertising.com +stats.iwebtrack.com +stats.mako.co.il +stats.manticoretechnology.com +stats.maximumcash.com +stats.metacount.com +stats.net +stats.nomade.fr +stats.norton.com +stats.opencandy.com +stats.ourstats.de +stats.outster.com +stats.paycounter.com +stats.pflexads.com +stats.popuptraffic.com +stats.profileponds.com +stats.sextracker.com +stats.sitegauge.bizland.com +stats.skyhookwireless.com +stats.skyhorn.com +stats.smartbucks.com +stats.speedclicks.ero-advertising.com +stats.superstats.com +stats.superstats.de +stats.superstats.nl +stats.surf-town.net +stats.surfaid.ihost.com +stats.trafficjuicer.com +stats.truetech.com +stats.webnext.com +stats.wew173.com +stats.wordpress.com +stats.www.ibm.com +stats0.one.ru +stats1.clicktracks.com +stats1.one.ru +stats1.porntrack.com +stats2.clicktracks.com +stats2.dooyoo.com +stats2.one.ru +stats2.rte.ie +stats3.porntrack.com +stats4.porntrack.com +stats4you.com +statse.webtrendslive.com +stattrax.com +statuncore.com +status.kissmetrics.com +stefani-rabideau.us +stefanie-mahood.us +stefanie-winnie.us +stellonl.ivwbox.de +stephanie-caster.us +stephany-ashe.us +stephany-boris.us +stephany-markley.us +stephany-taylor.us +stepstone.112.2o7.net +stern.ivwbox.de +stern.met.vgwort.de +steven-creasy.us +stimme.ivwbox.de +stl.p.a1.traceworks.com +stl.p.a2.traceworks.com +stl.p.a3.traceworks.com +stl.p.a4.traceworks.com +stl.p.a5.traceworks.com +stor01.bob.local.vmsn.de +stor01.con.local.vmsn.de +stor02.bob.local.vmsn.de +stor02.con.local.vmsn.de +storage.ivwbox.de +storage.superfish.com +store.greatdealnews.com +storedsearch.com +storm.applifier.com +strategy.com +strato.ivwbox.de +stratoshear.go2cloud.org +stream-online.net +stream.tribeca.vidavee.com +streamate.doublepimp.com +streamcastnetworks.com +strikeadcdn.s3.amazonaws.com +strk.enlnks.com +strtrk.go2cloud.org +studio.doubleclick.com +studio.doubleclick.net +studivz.adfarm1.adition.com +stuttest.ivwbox.de +stutzeit.ivwbox.de +stx.banners.sextracker.com +stx.sextracker.com +stx0.sextracker.com +stx1.sextracker.com +stx10.sextracker.com +stx11.sextracker.com +stx12.sextracker.com +stx13.sextracker.com +stx14.sextracker.com +stx15.sextracker.com +stx16.sextracker.com +stx2.sextracker.com +stx3.sextracker.com +stx4.sextracker.com +stx5.sextracker.com +stx6.sextracker.com +stx7.sextracker.com +stx8.sextracker.com +stx9.sextracker.com +stxbans.sextracker.com +su.sageanalyst.net +su600.com +success123.com +successalert.com +successetc.go2cloud.org +suddenlyfind.com +sue-headley.us +sue-reale.us +sueddeut.ivwbox.de +sugoicounter.com +suncom.112.2o7.net +suncountryair.com +sunglobal.112.2o7.net +sunonesearch.112.2o7.net +sunopenoffice.112.2o7.net +suo.lp.mydas.mobi +superadmin.adition.com +superfish.com +superill.ivwbox.de +superstats.com +superstats.de +superstats.nl +support.carmunity.de +support.crashlytics.com +support.crittercism.com +support.hasoffers.com +support.kissmetrics.com +support.leadbolt.com +support.mobpartner.com +support.skyhookwireless.com +surebaby.us.intellitxt.com +surehits.com +sureonlinefind.com +sureseeker.com +surezilla.go2cloud.org +surfers.ro +surfingprizes.com +survey.112.2o7.net +survey.burstmedia.com +survey.ivwbox.de +survey.questionmarket.com +surveyfocus.com +surveyinteractive.co.uk +surveylogix.com +surveymanager.com +surveynetworks.com +surveysavvy.com +susana-liedtke.us +susanna-chee.us +susanna-shane.us +susanna-warriner.us +susi.adtech.fr +susie-waddle.us +suzanne-healy.us +suzi-champ.us +suzi-huffine.us +suzi-vogelsang.us +svn01.dus.local.vmsn.de +svn01.dus.vmsn.de +svn01.vmsn.de +svr1.unicaondemand.com +svz.ivwbox.de +sw.static.planet49.com +swag.go2cloud.org +swappit.tapad.com +sweepstakes.com +sweetpacks.go2cloud.org +swimsuitnetwork.com +switch.atdmt.com +switch1.castup.net +switch2.castup.net +switch248-01.castup.net +switch3.castup.net +switch4.castup.net +switch5.castup.net +switch6.castup.net +sydney-steil.us +sympmsnsports.112.2o7.net +synad.nuffnang.com.my +synad2.nuffnang.com.my +sync.livejasmin.com +sync.mathtag.com +syndication.adlandmark.com +syndication.exoclick.com +syndication.traffichaus.com +syndication.voodoo.com +synergetic.de +syslog01.bob.local.vmsn.de +syslog01.bob.vmsn.de +syslog01.con.local.vmsn.de +syslog01.con.vmsn.de +syslog02.ixn.local.vmsn.de +systembiz.biz +sz.met.vgwort.de +szonl.ivwbox.de +t.adbuyer.com +t.atdmt.com +t.cpa37.com +t.cpmadvisors.com +t.extreme-dm.com +t.ivwbox.de +t.locpub.com +t.medialytics.com +t.mobilediva.com +t.mookie1.com +t.myfuncards.com +t.p.mybuys.com +t.pointroll.com +t.skimresources.com +t.thetrafficstat.net +t.zeroredirect.com +t.zeroredirect1.com +t.zeroredirect2.com +t0.extreme-dm.com +t1.extreme-dm.com +t1.leadlander.com +t1.trackalyzer.com +t1395671984.yupiromo.ru +t2.leadlander.com +t2.trackalyzer.com +t3.leadlander.com +t3.trackalyzer.com +t4.leadlander.com +t4.trackalyzer.com +t5.leadlander.com +t5.trackalyzer.com +t5.wrating.com +t6.leadlander.com +t6.trackalyzer.com +t7.leadlander.com +t7.trackalyzer.com +t8.leadlander.com +t8.trackalyzer.com +t9.leadlander.com +t9.trackalyzer.com +tabatha-hansen.us +tabatha-mcallister.us +tacoda.at.atwola.com +tae.onedollartextads.com +tag.admeld.com +tag.didit.com +tag.tlvmedia.com +tag.yieldoptimizer.com +tagcash.com +tagessch.ivwbox.de +tagjunction.com +tags.bkrtx.com +tags.bluekai.com +tags.crwdcntrl.net +tags.expo9.exponential.com +tags.mediaforge.com +talesoftheslayer.bravejournal.com +talkcity.realtracker.com +tamara-buchman.us +tammy-stgeorge.us +tamra-hutcherson.us +tantrack.info +tap-cdn.rubiconproject.com +tap.rubiconproject.com +tap2-cdn.rubiconproject.com +tapad.com +tapfortap.com +tapit.go2cloud.org +tapjoy.go2cloud.org +tara-gaynor.us +tara-kyser.us +tarah-kohn.us +tarah-mathers.us +tarakc1.net +targad.com +target.untd.com +targetedlistings.net +targetnet.com +targetraffics.com +tarrinc.go2cloud.org +tasha-tatro.us +tasks.kissmetrics.com +tasteguru.go2cloud.org +tawny-joiner.us +tb.vmsn.de +tb02.vmsn.de +tb03.vmsn.de +tbe-db01.bob.local.vmsn.de +tbe-db01.con.local.vmsn.de +tbe-db02.bob.local.vmsn.de +tbe-db02.con.local.vmsn.de +tbe01.bob.local.vmsn.de +tbe01.con.local.vmsn.de +tbe02.bob.local.vmsn.de +tbe02.con.local.vmsn.de +tbe03.bob.local.vmsn.de +tbe03.con.local.vmsn.de +tbl.tradedoubler.com +tbm.go2cloud.org +tbt.vmsn.de +tbtrack.zugo.com +tcm.optica.ero-advertising.com +tcmagazine.uk.intellitxt.com +tcr.tynt.com +tcr111.tynt.com +tcy.smartadserver.com +tdkads.ads.dk +tdkads1.ads.dk +tds.xlivevideo.ru +te.adlandpro.com +te.belointeractive.com +te.kontera.com +te.suntimes.com +te.thestar.ca +te.thestar.com +te.versiontracker.com +teamcpm.me +teamcpm.us +tecchan.ivwbox.de +tecchannel.de.intellitxt.com +tech.ivwbox.de +tech.leadbolt.com +techcrunch.appstores.com +techexpress.home.mindspring.com +techmarkaffi.go2cloud.org +technewsworld.us.intellitxt.com +techreview.112.2o7.net +techspot.us.intellitxt.com +techtracker.com +teen.pinkcount.com +teleboer.ivwbox.de +telekbas.ivwbox.de +telenor.112.2o7.net +telenorstartsiden.112.2o7.net +teletari.ivwbox.de +telstra.imrworldwide.com +temp.adzerver.com +template.aebn.net +tenzero.com +teresa-noriega.us +teresa-taveras.us +terri-camarena.us +terri-davis.us +terri-macomber.us +terri-thrailkill.us +terry-sauer.us +tess-nell.us +test-ads.asap-asp.net +test-chart.bigcharts.com +test.ad.asap-asp.net +test.adition.com +test.ajc.cimedia.com +test.applifier.com +test.coremetrics.com +test.ivwbox.de +test.livejasmin.com +test.palmbeachpost.cimedia.com +test.superstats.com +test.yesadvertising.com +testadmin.cimedia.com +testappacc1.vmsn.de +testing01.bob.local.vmsn.de +testing01.con.local.vmsn.de +testing02.bob.local.vmsn.de +testing02.con.local.vmsn.de +testsuite.adfarm1.adition.com +testsuite.adition.com +testwww1.vmsn.de +tex.ero-advertising.com +text-link-ads.com +text-link-ads.ientry.com +text-o-matic.superstats.com +text.burstnet.com +textad.net +textlinkcash.de +textomatic.superstats.com +tga.acs86.com +tga.csbew.com +tgp.buzzsession.com +tgp.pornsponsors.com +thba.go2cloud.org +the-binary-trader.biz +the-counter.net +the-path-gateway.com +theaffiliate.us +theaffiliateprogram.com +theclickmagnets.go2cloud.org +thecounter.com +theeldergeek.us.intellitxt.com +theoads.com +thepoint.go2cloud.org +theresa-buchman.us +theresa-ellett.us +therese-jeon.us +thetechzone.us.intellitxt.com +thevanda.tk +thindivide.com +thing1.infolink.com +thing2.infolink.com +thinkgeek.112.2o7.net +thirdparty.fmpub.net +thirdworld.magnify.net +this.content.served.by.adshuffle.com +thisteddagblad.dk +thor-cpa.com +thumb.ero-advertising.com +thumbads.ero-advertising.com +thumbs.ero-advertising.com +thumbs.xlaces.ero-advertising.com +thumbs2.ero-advertising.com +tia-bushnell.us +tiana-carlin.us +ticket.adition.com +ticks2.bugsense.com +tidd.ly +tiffani-fraise.us +tiffani-kloss.us +tiffanie-doane.us +tiffanie-machin.us +tiffanie-pender.us +tiffany-santee.us +tigerloads.com +tim-eckhoff.us +timebus2.112.2o7.net +timecom.112.2o7.net +timefortune.112.2o7.net +timepeople.122.2o7.net +timeslog.indiatimes.com +timwedigitalsales.go2cloud.org +tina-skiles.us +tinbuadserv.com +tiniurl.us +tisha-kiesel.us +tisha-stickney.us +titanads1.com +titanads2.com +titanads3.com +titanads4.com +titanads5.com +tiumbs.ero-advertising.com +tizer8.net +tizermy.net +tj.phpwind.net +tldadserv.com +tlvmedia.adk2.co +tlvmedia.com +tmarket.tripod.com +tmgdigital.go2cloud.org +tmp.dt00.net +tmpjmp.com +tnjcars.go2cloud.org +tns-counter.ru +toggo.ivwbox.de +toi.ivwbox.de +toi3.ivwbox.de +tojoh.info +tom-galan.us +tom.int.vmsn.de +tom.ixn.vmsn.de +tom01.ixn.local.vmsn.de +tom2.int.vmsn.de +tom2.ixn.local.vmsn.de +tom2.ixn.vmsn.de +tommy-mcelwain.us +toms.us.intellitxt.com +tomshard.ivwbox.de +tonefuse.go2cloud.org +tonya-chabot.us +toolbar.cdn.gigya.com +toolbarmodal.medialeopard.com +toolbox.contentspread.net +tools.hitbox.com +tools.ip2location.com +tools.kissmetrics.com +tools.mobpartner.mobi +tools.runetki.com +tools2.hitbox.com +toolsa.hitbox.com +toolshack.com +top-ro.ro +top.addfreestats.com +top.eomy.net +top100-images.rambler.ru +top100search.com +top50.co.uk +topads.ero-advertising.com +topix.appstores.com +toplisthyip.com +toppagefinder.com +topsky.go2cloud.org +topspot.go2cloud.org +topstat.com +toptrafficsource.com +tori-gram.us +tori-livermore.us +tori-rakes.us +torssebu.com +torstarcollect.247realmedia.com +total-media.net +totalping.com +totalsystemservices.112.2o7.net +tpc.googlesyndication.com +tpl1.realtracker.com +tpl2.realtracker.com +tr.202trackingsoft.com +tr.asci.freenet.de +tr.diradvert.com +tr.newsletter.capdecision.fr +tr.x-tk.net +tr2.vttrack.com.br +traceadmanager.com +tracelive.ru +tracemyip.org +traceworks.com +traci-sirianni.us +traci-towery.us +tracie-coronado.us +tracikj182.com +track.007cpa.com +track.adcocktail.com +track.addedmonetize.info +track.adform.net +track.adjal.com +track.adrevolver.com +track.adultdialersolution.com +track.affiliate-b.com +track.appsflyer.com +track.blamads.com +track.braincash.com +track.brucelead.com +track.campaignmonitor.com +track.celtra.com +track.chanret.com +track.cmllk1.info +track.createsend.com +track.cxdigitalmedia.com +track.did-it.com +track.divx.com +track.easeus.com +track.effiliation.com +track.floppybank.com +track.ft.com +track.gawker.com +track.getflirting.com +track.homestead.com +track.idritracker.com +track.igg.com +track.impactfive.com +track.justhookup.com +track.lfstmedia.com +track.livestat.com +track.mdsmatch.com +track.mypcbackup.com +track.net +track.netzero.net +track.offermatch.fr +track.omgpl.com +track.oxcash.com +track.pointroll.com +track.pornaccess.com +track.ppvline.com +track.probolan50.it +track.pubmatic.com +track.reasonablespread.com +track.roiservice.com +track.scorpiointeractive.com +track.searchignite.com +track.untd.com +track.v2.secdls.com +track.v2.sslsecure1.com +track.v2.sslsecure10.com +track.v2.sslsecure2.com +track.v2.sslsecure3.com +track.v2.sslsecure4.com +track.v2.sslsecure5.com +track.v2.sslsecure6.com +track.v2.sslsecure7.com +track.v2.sslsecure8.com +track.v2.sslsecure9.com +track.webgains.com +track.xtrasize.co.uk +track.xtrasize.com +track.xtrasize.de +track.xtrasize.pl +track.zugo.com +track2.homestead.com +trackads.com +trackadvertising.net +trackalyzer.com +trackbacksecure.com +trackbar.go2cloud.org +trackedclicks.com +tracker.cedarfinance.com +tracker.celebtaboo.com +tracker.clicktrade.com +tracker.com +tracker.drippler.com +tracker.ero-advertising.com +tracker.freerun.com +tracker.ign.com +tracker.marinsm.com +tracker.netklix.com +tracker.netmechanic.com +tracker.snowball.com +tracker.tradedoubler.com +trackerclick2web.com +trackertracker.com +tracking.247search.com +tracking.actionads.ru +tracking.adjug.com +tracking.admarketplace.net +tracking.applift.com +tracking.bafby.com +tracking.banners.meccahoo.com +tracking.bbinary.com +tracking.bucksense.com +tracking.clickfinders.com +tracking.dolphinbrowser.com +tracking.dsmmadvantage.com +tracking.dzukk.com +tracking.ero-advertising.com +tracking.euroads.no +tracking.foxnews.com +tracking.gamigoads.com +tracking.gammae.com +tracking.ientry.net +tracking.infoninjas.net +tracking.inuvo.com +tracking.iol.co.za +tracking.jithasoffers.com +tracking.kissmyads.com +tracking.klickthru.com +tracking.lunho.com +tracking.messagemates.com +tracking.mhlnk.com +tracking.mobitracker.info +tracking.moportals.com +tracking.nuasti.com +tracking.performancerevenues.com +tracking.publicidees.com +tracking.searchmarketing.com +tracking.sekomedia.com +tracking.sodta.com +tracking.strongmail.west.mtvi.com +tracking.syncedvision.com +tracking.ta.cm +tracking.to +tracking.traviangames.com +tracking.veoxa.com +tracking.voltagesearch.com +tracking.wfnetwork.com +tracking01.bob.local.vmsn.de +tracking01.con.local.vmsn.de +tracking1.euroads.no +tracking11.com +tracking999.com +trackingbin.com +trackingoffer.info +trackingoffer.net +trackingstatalytics.com +tracklead.net +tracknewsletter.com +trackpromotion.net +trackstarsengland.net +trackthatad.com +trackword.net +trackyourlinks.com +trackyourstats.com +tracy-hatley.us +tracy-piner.us +trade-in-value.com +tradedoubler.com +tradeexpert.net +tradehall.com +tradetraffic.com +traff-advertazer.com +traffboost.net +traffic-exchanger.net +traffic-supremacy.com +traffic.alexa.com +traffic.cimedia.com +traffic.index.hu +traffic.ru +traffic.velvet.hu +traffic4you.de +trafficbarads.com +trafficbroker.com +trafficcaptain.go2cloud.org +trafficcash.biz +trafficcenter.com +trafficfactory.biz +trafficfile.com +trafficforce.com +traffichaus.com +traffichold.com +traffichome.com +traffichome.de +trafficjammedia.go2cloud.org +trafficjuicer.com +trafficjunky.net +trafficlearn.com +trafficmagnet.com +trafficmanagers.nl +trafficmasterz.net +trafficmp.com +trafficmultiplier.com +trafficparade.com +trafficpimps.com +trafficpoint.go2cloud.org +trafficpump.com +trafficshop.com +trafficspaces.net +trafficswarm.com +trafficsynergy.com +traffictrader.net +traffictraders.com +trafficundercontrol.com +trafficwave.net +trafficz.com +trafficzap.com +trafic-fr.com +trafic.ro +traficdom.com +traficmax.fr +travel.netster.com +traveladvertising.com +travelch.ivwbox.de +travelscream.com +travidia.com +treasuredome.com +treasuretrooper.com +tredirect.com +trevor-coppedge.us +triadmedianetwork.com +tribal.us.intellitxt.com +tribalfusion.com +tribalfusion.net +tribalfusion.speedera.net +tribeca.vidavee.com +tribuneinteractive.com +tricia-hutter.us +trieronl.ivwbox.de +trista-ostby.us +trivia2mobile.com +trk.1cpa.ru +trk.blamads.com +trk.blickmarketing.com +trk.cpainfinity.com +trk.kissmetrics.com +trk.mailtoward.com +trk.redir.info +trk2.redir.info +trk2it4.com +trk3.redir.info +trk4.com +trkclk.net +trkcpamedia.com +trker.com +trklnks.com +trks.us +trksst.com +trkur.com +trkzen.com +trollzeweb.com +troopersiccy.bravejournal.com +trtc.adspirit.de +truebooter.com +truedigitalmedia.go2cloud.org +truma.pitchonlev.org.il +trunktest.adition.com +truongton.net +trustedadserver.com +trustedmarketings.go2cloud.org +trustoffertracker.com +trw12.com +try.crashlytics.com +trygen.co.uk +tryry.info +ts.istrack.com +ts.videosz.com +ts1.hitbox.com +ts1.media-servers.net +ts2.hitbox.com +ttlmodels.com +ttzmedia.com +tu.connect.wunderloop.net +tuberewards.com +tugads.go2cloud.org +tuite.com +tumri.net +tutvp.com +tv.livejasmin.com +tvinfo.ivwbox.de +tvlistings3.zap2it.com +tvlistings4.zap2it.com +tvspielf.ivwbox.de +tvtoday.ivwbox.de +tw.adserver.yahoo.com +tw.api.vpon.com +twci.coremetrics.com +tweets.kissmetrics.com +twnetde.ivwbox.de +twneteng.ivwbox.de +tynt.com +typiol.com +typo3.ero-advertising.com +tyroo.com +tyxo.bg +tzweb.999000.ru +u-mrx.addflow.ru +u-porn.mp1.mobi +u.begun.ru +u.extreme-dm.com +u.mobpartner.mobi +u.openx.net +u.outbrain.com +u.zeroredirect.com +u.zeroredirect1.com +u.zeroredirect2.com +u0.extreme-dm.com +u001.13.spylog.com +u001.22.spylog.com +u002.01.spylog.com +u002.31.spylog.com +u003.00.spylog.com +u003.52.spylog.com +u003.81.spylog.com +u004.39.spylog.com +u004.58.spylog.com +u004.83.spylog.com +u005.33.spylog.com +u006.15.spylog.com +u006.29.spylog.com +u006.78.spylog.com +u006.98.spylog.com +u007.06.spylog.com +u008.44.spylog.com +u008.47.spylog.com +u008.96.spylog.com +u010.42.spylog.com +u010.44.spylog.com +u010.60.spylog.com +u011.20.spylog.com +u011.22.spylog.com +u011.75.spylog.com +u013.04.spylog.com +u013.89.spylog.com +u014.73.spylog.com +u015.90.spylog.com +u016.25.spylog.com +u017.76.spylog.com +u017.94.spylog.com +u018.38.spylog.com +u019.29.spylog.com +u019.33.spylog.com +u020.39.spylog.com +u020.69.spylog.com +u022.39.spylog.com +u023.47.spylog.com +u023.82.spylog.com +u024.10.spylog.com +u025.73.spylog.com +u025.82.spylog.com +u025.89.spylog.com +u026.68.spylog.com +u026.81.spylog.com +u028.07.spylog.com +u028.35.spylog.com +u030.83.spylog.com +u031.54.spylog.com +u032.71.spylog.com +u033.20.spylog.com +u034.40.spylog.com +u034.55.spylog.com +u034.80.spylog.com +u036.48.spylog.com +u037.20.spylog.com +u037.26.spylog.com +u038.18.spylog.com +u039.10.spylog.com +u039.28.spylog.com +u039.30.spylog.com +u040.76.spylog.com +u043.32.spylog.com +u043.37.spylog.com +u044.09.spylog.com +u046.09.spylog.com +u046.67.spylog.com +u046.73.spylog.com +u049.45.spylog.com +u052.94.spylog.com +u053.14.spylog.com +u053.20.spylog.com +u053.24.spylog.com +u053.48.spylog.com +u054.94.spylog.com +u055.70.spylog.com +u058.03.spylog.com +u058.67.spylog.com +u059.14.spylog.com +u060.16.spylog.com +u060.28.spylog.com +u060.41.spylog.com +u060.92.spylog.com +u061.97.spylog.com +u062.01.spylog.com +u062.16.spylog.com +u062.47.spylog.com +u063.13.spylog.com +u066.62.spylog.com +u066.80.spylog.com +u066.84.spylog.com +u070.38.spylog.com +u070.54.spylog.com +u070.67.spylog.com +u071.47.spylog.com +u071.56.spylog.com +u071.93.spylog.com +u072.93.spylog.com +u074.03.spylog.com +u075.87.spylog.com +u075.94.spylog.com +u076.46.spylog.com +u081.83.spylog.com +u082.61.spylog.com +u082.84.spylog.com +u082.99.spylog.com +u085.95.spylog.com +u086.32.spylog.com +u088.23.spylog.com +u088.27.spylog.com +u090.44.spylog.com +u090.69.spylog.com +u090.78.spylog.com +u091.38.spylog.com +u091.75.spylog.com +u093.76.spylog.com +u094.14.spylog.com +u094.29.spylog.com +u094.35.spylog.com +u094.90.spylog.com +u095.38.spylog.com +u096.59.spylog.com +u098.24.spylog.com +u099.28.spylog.com +u099.40.spylog.com +u099.41.spylog.com +u099.42.spylog.com +u099.81.spylog.com +u099.84.spylog.com +u1.extreme-dm.com +u101.13.spylog.com +u101.29.spylog.com +u1025.77.spylog.com +u104.65.spylog.com +u105.77.spylog.com +u108.36.spylog.com +u108.95.spylog.com +u1080.31.spylog.com +u112.68.spylog.com +u113.63.spylog.com +u114.19.spylog.com +u114.76.spylog.com +u1147.60.spylog.com +u115.39.spylog.com +u115.46.spylog.com +u1157.21.spylog.com +u117.45.spylog.com +u117.95.spylog.com +u118.05.spylog.com +u118.11.spylog.com +u120.74.spylog.com +u121.83.spylog.com +u123.23.spylog.com +u125.28.spylog.com +u126.40.spylog.com +u127.62.spylog.com +u127.92.spylog.com +u128.04.spylog.com +u129.20.spylog.com +u129.65.spylog.com +u130.01.spylog.com +u130.83.spylog.com +u1308.54.spylog.com +u132.04.spylog.com +u132.08.spylog.com +u132.40.spylog.com +u134.81.spylog.com +u135.25.spylog.com +u136.07.spylog.com +u136.28.spylog.com +u136.91.spylog.com +u138.56.spylog.com +u139.75.spylog.com +u140.30.spylog.com +u140.32.spylog.com +u140.90.spylog.com +u144.05.spylog.com +u144.54.spylog.com +u145.33.spylog.com +u145.73.spylog.com +u147.14.spylog.com +u152.37.spylog.com +u152.45.spylog.com +u154.03.spylog.com +u155.50.spylog.com +u1569.61.spylog.com +u1598.51.spylog.com +u1617.87.spylog.com +u1617.91.spylog.com +u166.09.spylog.com +u166.27.spylog.com +u166.28.spylog.com +u166.32.spylog.com +u166.49.spylog.com +u166.56.spylog.com +u167.27.spylog.com +u167.51.spylog.com +u167.54.spylog.com +u167.78.spylog.com +u167.81.spylog.com +u167.86.spylog.com +u167.90.spylog.com +u168.06.spylog.com +u168.09.spylog.com +u168.38.spylog.com +u1695.55.spylog.com +u17022.uvleda.ru +u175.78.spylog.com +u1773.34.spylog.com +u178.75.spylog.com +u181.05.spylog.com +u1817.16.spylog.com +u184.04.spylog.com +u185.26.spylog.com +u187.18.spylog.com +u192.84.spylog.com +u206.36.spylog.com +u207.80.spylog.com +u212.91.spylog.com +u218.55.spylog.com +u218.73.spylog.com +u239.40.spylog.com +u245.27.spylog.com +u246.61.spylog.com +u249.15.spylog.com +u249.77.spylog.com +u252.80.spylog.com +u273.53.spylog.com +u289.06.spylog.com +u294.54.spylog.com +u2965.45.spylog.com +u2967.81.spylog.com +u2974.05.spylog.com +u3064.72.spylog.com +u3102.47.spylog.com +u311.79.spylog.com +u3123.29.spylog.com +u3129.10.spylog.com +u3197.42.spylog.com +u3215.97.spylog.com +u3239.08.spylog.com +u3305.71.spylog.com +u3417.93.spylog.com +u342.39.spylog.com +u3436.19.spylog.com +u3571.56.spylog.com +u3585.14.spylog.com +u3608.20.spylog.com +u385.24.spylog.com +u4056.56.spylog.com +u4122.70.spylog.com +u432.77.spylog.com +u4396.79.spylog.com +u4443.84.spylog.com +u4556.11.spylog.com +u4573.85.spylog.com +u4702.03.spylog.com +u5234.87.spylog.com +u5234.98.spylog.com +u5303.67.spylog.com +u539.34.spylog.com +u567.64.spylog.com +u5687.48.spylog.com +u574.07.spylog.com +u590.51.spylog.com +u592.05.spylog.com +u604.41.spylog.com +u6226.44.spylog.com +u6353.56.spylog.com +u649.63.spylog.com +u6504.70.spylog.com +u674.98.spylog.com +u7031.36.spylog.com +u707.53.spylog.com +u715381.sendgrid.org +u790.60.spylog.com +u790.67.spylog.com +u899519.sendgrid.org +u904.62.spylog.com +u920.31.spylog.com +u972.03.spylog.com +u977.40.spylog.com +uac.advertising.com +uclick.com +ucoz.spotsniper.ru +udelivery.trademob.com +udf.staging.adition.com +udns1.newdotnet.net +uenetwork.go2cloud.org +ugl.adtrak.net +uim.adfarm1.adition.com +uim.adition.com +uim.image.adition.com +uitb.vmsn.de +uk-ad2.adinfuse.com +uk-go.adinfuse.com +uk.2.cqcounter.com +uk.adserver.yahoo.com +uk.cqcounter.com +uk.intellitxt.com +uk.nedstat.net +uk.nedstatpro.net +uk.sitestat.com +uk.static.planet49.com +ukbanners.com +ukrotsel.ru +ulock.it +ultimacash.go2cloud.org +ultimatelyfind.com +ultimatelyreveal.com +um-per.com +um.simpli.fi +umbs.ero-advertising.com +unadvertising.info +undertonenetworks.com +unfurled.com +uni.ivwbox.de +unicast.com +uniqueleads.com +uniquesurf.com +unisonsas.bravejournal.com +unlck.net +unlikelysearch.com +uno.wbrotator.biz +uno.wt-rotator115.ru +unrulymedia.com +unstat.baidu.com +upads.info +upliftsearch.com +upload.kipa.co.il +upload.webtrends.com +upload.yeahmobi.com +uproar.com +upsellit.com +uptpro.homestead.com +urban-search.com +urchin.com +ureace.com +urlstats.com +us.2.cqcounter.com +us.a1.yimg.com +us.a2.yimg.com +us.adserver.yahoo.com +us.cqcounter.com +us.intellitxt.com +us.static.planet49.com +us.webprodcdn.com +us.yimg.com +us01.lockview.cn +us02.lockview.cn +us03.lockview.cn +us5.campaign-archive1.com +us5.forward-to-friend.com +us5.forward-to-friend1.com +usa.bpath.com +usa.nedstat.com +usa.nedstat.net +usachoice.net +usads.futurenet.nl +usarevenue.com +usbanners.com +usearchmedia.com +usell.go2cloud.org +users.ero-advertising.com +users.marketleverage.com +usimg.adbureau.net +usmsad.tom.com +usr.mgid.com +usrecordexpungement.us +usun.112.2o7.net +utm.myfuncards.com +utm.trk.myfuncards.com +utm.trk.popularscreensavers.com +utm.trk.webfetti.com +utm.webfetti.com +utm2.smileycentral.com +utmtrk2.smileycentral.com +utopiad.com +utrade.com +uur.at +v.chartboost.com +v.crtcdn.net +v.duba.net +v.extreme-dm.com +v.jwpcdn.com +v.visitweb.com +v.zeroredirect.com +v.zeroredirect1.com +v.zeroredirect2.com +v0.extreme-dm.com +v1.extreme-dm.com +v1.nedstatbasic.net +v2.visualwebsiteoptimizer.com +v3.adition.com +vad.e-messenger.net +vad.mainentrypoint.com +valarie-clack.us +valarie-kummer.us +valeria-tremper.us +valerie-nilson.us +valueclickmedia.com +valuecommerce.com +valuecommerce.ne.jp +valuehit.com +valuepay.com +valuesponsor.com +vanessa-prentice.us +vaporprofits.go2cloud.org +vayavicio.com +vb1700.mgmt.somee.com +vcom.go2cloud.org +vectormarketing.com +velismedia.go2cloud.org +velocity.go2cloud.org +vemna.go2cloud.org +verio.122.2o7.net +verisignwildcard.112.2o7.net +verisonwildcard.112.2o7.net +veronica-hoeppner.us +veronica-moore.us +vg.ad.asap-asp.net +vg00.met.vgwort.de +vg01.met.vgwort.de +vg02.met.vgwort.de +vg03.met.vgwort.de +vg04.met.vgwort.de +vg05.met.vgwort.de +vg06.met.vgwort.de +vg07.met.vgwort.de +vg08.met.vgwort.de +vg09.met.vgwort.de +vh1com.112.2o7.net +vhi1.surf-town.net +via.appia.com +viaden.com +vialeads.com +viamtvcom.112.2o7.net +vicky-koop.us +victoria-jamerson.us +video-loader.com +video-stats.video.google.com +video.unrulymedia.com +videocodezone.us.intellitxt.com +videos.video-loader.com +videoweed.es +view-ads.de +view.atdmt.com +viewablemedia.net +viewbix.com +viewstat.hotstat.nl +viglink.com +viglir.ru +vignette.com +vikingtrck.com +vimage.com +vimages.videoprofessor.com +vincent-carnahan.us +vincent-grogan.us +vincent-sumler.us +vintacom.112.2o7.net +vip-marketplace.com +vipadshares.com +viplogin.553.clicksurecpa.com +vippay.c.duba.net +virads.com +virginia-reece.us +virtk01.dus.local.vmsn.de +virtual-person.com +visitor.benchmarkemail.com +visitorpath.com +visitorprofiler.com +visitorvoice.etracker.com +visitweb.com +visualnetworks.com +vjs.zencdn.net +vlog.leadformix.com +vlogic.ak-networks.com +vml-127.com +vod.mobile-abc.com +vod.mobvid.mobi +voicenetplus.com +voodooparking.com +vorcu.go2cloud.org +vorlon.ferretsoft.com +vox.ivwbox.de +vp-cf.clearspring.com +vp-o.clearspring.com +vp-www.addthis.com +vp2-www.addthis.com +vpn.carmunity.de +vpn01.ixn.local.vmsn.de +vpn01.ixn.vmsn.de +vroll.net +vs.dmtracker.com +vsevjednom.cz +vsii.spinbox.net +vstats.net +vstrk.com +vt.adition.com +vtot.proxy.aol.com +vu.veoxa.com +vwr1.hitbox.com +vztd3.adition.com +w-script.com +w.extreme-dm.com +w.goprkcdn.com +w.mlv-cdn.com +w.uimserv.net +w.zeroredirect.com +w.zeroredirect1.com +w.zeroredirect2.com +w0.extreme-dm.com +w00tpublishers.wootmedia.net +w1.extreme-dm.com +w1.hitbox.com +w10.hitbox.com +w100.hitbox.com +w101.hitbox.com +w102.hitbox.com +w103.hitbox.com +w104.hitbox.com +w105.hitbox.com +w106.hitbox.com +w107.hitbox.com +w108.hitbox.com +w109.hitbox.com +w11.hitbox.com +w110.hitbox.com +w111.hitbox.com +w112.hitbox.com +w113.hitbox.com +w114.hitbox.com +w115.hitbox.com +w116.hitbox.com +w117.hitbox.com +w118.hitbox.com +w119.hitbox.com +w12.hitbox.com +w120.hitbox.com +w121.hitbox.com +w122.hitbox.com +w123.hitbox.com +w124.hitbox.com +w126.hitbox.com +w128.hitbox.com +w129.hitbox.com +w13.hitbox.com +w130.hitbox.com +w131.hitbox.com +w132.hitbox.com +w133.hitbox.com +w135.hitbox.com +w136.hitbox.com +w137.hitbox.com +w138.hitbox.com +w139.hitbox.com +w14.hitbox.com +w140.hitbox.com +w141.hitbox.com +w144.hitbox.com +w147.hitbox.com +w15.hitbox.com +w153.hitbox.com +w154.hitbox.com +w155.hitbox.com +w157.hitbox.com +w159.hitbox.com +w16.hitbox.com +w161.hitbox.com +w162.hitbox.com +w167.hitbox.com +w168.hitbox.com +w17.hitbox.com +w170.hitbox.com +w175.hitbox.com +w18.hitbox.com +w19.hitbox.com +w2-ver.adprofile.net +w2.hitbox.com +w20.hitbox.com +w21.hitbox.com +w22.hitbox.com +w23.hitbox.com +w24.hitbox.com +w25.hitbox.com +w26.hitbox.com +w27.hitbox.com +w28.hitbox.com +w29.hitbox.com +w2mobile.go2cloud.org +w3.bitterstrawberry.com +w3.hitbox.com +w3.ime.net +w30.hitbox.com +w31.hitbox.com +w32.hitbox.com +w33.hitbox.com +w36.hitbox.com +w3matter.com +w3nation.com +w4.hitbox.com +w5.hitbox.com +w6.hitbox.com +w7.hitbox.com +w8.hitbox.com +w9.hitbox.com +wac.a164.edgecastcdn.net +wahoha.com +wallpapernudes.powered-by.seekmo.com +wallstreetprep.go2cloud.org +walmartcom.112.2o7.net +wan.duba.net +wap.adlink.de +wap.advertising.com +wap.bob.vmsn.de +wap.carmunity.de +wap.chatwalk.com +wap.co.il +wap.con.vmsn.de +wap01.bob.local.vmsn.de +wap01.bob.vmsn.de +wap01.con.local.vmsn.de +wap01.con.vmsn.de +wap02.bob.local.vmsn.de +wap02.bob.vmsn.de +wap02.con.local.vmsn.de +wap02.con.vmsn.de +wap03.bob.local.vmsn.de +wap03.bob.vmsn.de +wap03.con.local.vmsn.de +wap03.con.vmsn.de +wap04.bob.local.vmsn.de +wap04.bob.vmsn.de +wap04.con.local.vmsn.de +wap04.con.vmsn.de +wap05.bob.local.vmsn.de +wap05.con.local.vmsn.de +wap06.bob.local.vmsn.de +wap06.con.local.vmsn.de +wap07.bob.local.vmsn.de +wap07.con.local.vmsn.de +wap08.bob.local.vmsn.de +wap08.con.local.vmsn.de +wapdollar.in +warcry.us.intellitxt.com +warnerbros.112.2o7.net +watch-free.stream-online.net +wayads.com +wbf.go2cloud.org +wcbsimg.dayport.com +wctrack.go2cloud.org +wdata.ero-advertising.com +wdr.ivwbox.de +web-controlling.com +web-counter.5u.com +web-stat.com +web.adblade.com +web.adknowledge.com +web.blogads.com +web.linkexchange.ru +web.mobpartner.com +web.mxradon.com +web0.carmunity.de +web01.bob.local.vmsn.de +web01.bob.vmsn.de +web01.con.local.vmsn.de +web01.con.vmsn.de +web02.bob.local.vmsn.de +web02.bob.vmsn.de +web02.con.local.vmsn.de +web02.con.vmsn.de +web03.bob.local.vmsn.de +web03.bob.vmsn.de +web03.con.local.vmsn.de +web03.con.vmsn.de +web04.bob.local.vmsn.de +web04.bob.vmsn.de +web04.con.local.vmsn.de +web04.con.vmsn.de +web05.bob.local.vmsn.de +web05.bob.vmsn.de +web05.con.local.vmsn.de +web05.con.vmsn.de +web06.bob.local.vmsn.de +web06.bob.vmsn.de +web06.con.local.vmsn.de +web06.con.vmsn.de +web1.realtracker.com +web1.voodoo.com +web10.voodoo.com +web11.voodoo.com +web12.voodoo.com +web13.voodoo.com +web14.voodoo.com +web15.voodoo.com +web16.voodoo.com +web17.voodoo.com +web18.voodoo.com +web19.voodoo.com +web2.realtracker.com +web2.voodoo.com +web20.voodoo.com +web21.voodoo.com +web22.voodoo.com +web23.voodoo.com +web24.voodoo.com +web25.voodoo.com +web26.voodoo.com +web27.voodoo.com +web28.voodoo.com +web29.voodoo.com +web3.voodoo.com +web30.voodoo.com +web31.voodoo.com +web32.voodoo.com +web33.voodoo.com +web34.voodoo.com +web35.voodoo.com +web36.voodoo.com +web37.voodoo.com +web38.voodoo.com +web39.voodoo.com +web4.realtracker.com +web4.voodoo.com +web40.voodoo.com +web4friends.com +web5.voodoo.com +web6.voodoo.com +web63.jumptap.com +web64.jumptap.com +web65.jumptap.com +web7.voodoo.com +web8.voodoo.com +web9.voodoo.com +webads.com +webads.nl +webaffiliate.covad.com +webaudit.hu +webcdr.vmsn.de +webcontrolling.com +webcontrolling.net +webcount.finn.no +webcounter.cc +webcounter.com +webcounter.cz +webcounter.goweb.de +webcounter.together.net +webcreditreport.com +webd.francite.com +webdessl.ivwbox.de +webdiva3001.bravejournal.com +webffreestuff.com +webglobaltraffic.info +webgozar.com +webgozar.ir +webhitcounter.com +webhits.de +webhitsdirect.com +webindicator.siteheart.com +weblemon.pl +webload101.hitbox.com +weblog.blogads.com +webmail.leadbolt.com +webmail.mobpartner.mobi +webmail.performancerevenues.com +webmail.yeahmobi.com +webmasterkai.sitetracker.com +webmedia.pl +webnetad.com +webnext.com +webnooze.com +weboconcept.com +weborama.fr +webprofile30928.us +webprofile96674.us +webprowire.com +webproworld.com +webquickfind.com +webr.emv2.com +websatpub.fth.net +websearch101.com +websense-media.co.il +website-designs.com +websitehome.co.uk +websitepromoserver.com +websitepromote.com +websitesponsor.de +websitetrafficreport.com +websponsors.com +websponsors.net +webstat.com +webstat.net +webstat.no +webstats.adspaces.ero-advertising.com +websurvey.burstmedia.com +webtistic.com +webtools.homestead.com +webtrends.com +webtrends.org +webtrends.thisis.co.uk +webtrendslive.com +webuytraffic.com +webxu.go2cloud.org +wee.co.il +weecia.7173.clicksurecpa.com +weedoit.fr +weeklyad.target.com +wehasoffers.go2cloud.org +welt.ivwbox.de +wendi-bell.us +wendi-hulsey.us +werbemittel.adshot.de +wesell.co.il +west.adlink.de +westeros.go2cloud.org +wetrack.it +wetter.ivwbox.de +wetteronl.ivwbox.de +wfnetwork.go2cloud.org +wfs01.wapka.mobi +whatrunswhere.go2cloud.org +whatseek.com +whitney-swindell.us +whitney-whittenburg.us +who.knows.com +whos.amung.us +whosread.com +whydowork.com +widget.embedarticle.com +widget.sharecash.org +widget.siteheart.com +widgetadvertising.biz +widgetcontent.net +widgetdigital.info +widgets.amung.us +widgets.markosweb.com +widgets.outbrain.com +wiggum.int.vmsn.de +wiggum.ixn.local.vmsn.de +wiki.adition.com +wiki.adspaces.ero-advertising.com +wiki.ero-advertising.com +wildrhino.com +willie.ixn.local.vmsn.de +win.openvn.com +win7affiliates.com +winfreestuff.com +winfut.ivwbox.de +wingatemedia.go2cloud.org +wingowin.com +winkyads.com +winmpmain.112.2o7.net +winneronline.com +wireless.ign.us.intellitxt.com +wirelessidea.go2cloud.org +wisewire.com +witbe.net +wizard.bannerforge.com +wizfitness.go2cloud.org +wks.ero-advertising.com +wlwonl.ivwbox.de +wlwt01.opentext.com +wnpcdn.com +womensforum.us.intellitxt.com +won.images.streamray.com +wordwatch.go2cloud.org +workflowboard.com +workingonline.com +worksbest.freeservers.com +worldbannerexchange.com +worldprofitassociates.com +worldwidesolution.go2cloud.org +wow.ero-advertising.com +ws.tapjoyads.com +ws1.surf-town.net +ws10.surf-town.net +ws11.surf-town.net +ws12.surf-town.net +ws13.surf-town.net +ws14.surf-town.net +ws15.surf-town.net +ws16.surf-town.net +ws17.surf-town.net +ws18.surf-town.net +ws19.surf-town.net +ws2.surf-town.net +ws20.surf-town.net +ws21.surf-town.net +ws22.surf-town.net +ws23.surf-town.net +ws24.surf-town.net +ws25.surf-town.net +ws26.surf-town.net +ws27.surf-town.net +ws28.surf-town.net +ws29.surf-town.net +ws3.surf-town.net +ws4.surf-town.net +ws5.surf-town.net +ws6.surf-town.net +ws7.surf-town.net +ws8.surf-town.net +ws9.surf-town.net +wsb1.surf-town.net +wsb2.surf-town.net +wsb3.surf-town.net +wsb4.surf-town.net +wsb5.surf-town.net +wsb6.surf-town.net +wsb7.surf-town.net +wsb8.surf-town.net +wsb9.surf-town.net +wsc.ehost-services.com +wsc1.surf-town.net +wsclick.infospace.com +wsi1.surf-town.net +wsp1.surf-town.net +wsspeed.com +wsw.ero-advertising.com +wsw1.surf-town.net +wsw2.surf-town.net +wsw3.surf-town.net +wsw4.surf-town.net +wsw5.surf-town.net +wsw6.surf-town.net +wswb1.surf-town.net +wswb3.surf-town.net +wt.neton-line.com +wta.ero-advertising.com +wtlive.com +wundercounter.com +wuv.ivwbox.de +wv.inner-active.mobi +wvwr1.hitbox.com +ww1.hitbox.com +ww1.hstpnetwork.com +ww1.smartadserver.com +ww129.smartadserver.com +ww13.smartadserver.com +ww14.smartadserver.com +ww2.ero-advertising.com +ww2.hitbox.com +ww2.hstpnetwork.com +ww2.instafinder.com +ww2.lostwebtracker.com +ww234.smartadserver.com +ww251.smartadserver.com +ww264.smartadserver.com +ww276.smartadserver.com +ww3.hitbox.com +ww302.smartadserver.com +ww362.smartadserver.com +ww370.smartadserver.com +ww38.smartadserver.com +ww381.smartadserver.com +ww392.smartadserver.com +ww55.smartadserver.com +ww57.smartadserver.com +ww84.smartadserver.com +wwa.ero-advertising.com +wwa.hitbox.com +wwbanners2.ero-advertising.com +wwc.hitbox.com +wwd.hitbox.com +wweconsumer.112.2o7.net +wwm.adspirit.de +wws.ero-advertising.com +www.005.free-counter.co.uk +www.006.free-counter.co.uk +www.007.free-counter.co.uk +www.008.free-counter.co.uk +www.0hna.com +www.100webads.com +www.123count.com +www.123counter.superstats.com +www.123stat.com +www.123webmarketing.com +www.160tracker.com +www.1ad.de +www.1phads.com +www.1worldmarket.com +www.2-adsbroker.net +www.2.livejasmin.com +www.2000freetvchannels.com +www.202trackingsoft.com +www.247media.com +www.247media.net +www.247realmedia.com +www.2ad.de +www.2o7.net +www.3dots.co.il +www.49535.com +www.4qsurvey.com +www.5123.ru +www.51yes.com +www.600z.com +www.718unlimited.com +www.a-ads.com +www.a.ero-advertising.com +www.a.websponsors.com +www.a4dtracker.com +www.a6ba.com +www.a9.com +www.aaotr.com +www.abcjmp.com +www.abmr.net +www.abmr2.net +www.abovetrack.com +www.abovetracking.com +www.accipiter.com +www.acclaimimages.com +www.accurately-locate.com +www.acecounter.com +www.achmedia.com +www.acotrk.com +www.acquinityinteractive.com +www.acs3.com +www.active-advertising.com +www.actively-seek.com +www.actonsoftware.com +www.actvtrack.com +www.acxiom.com +www.acxtrk.com +www.ad-agent.com +www.ad-board.com +www.ad-guru.com +www.ad-help.com +www.ad-host.com +www.ad-lister.co.uk +www.ad-listings.com +www.ad-lite.com +www.ad-maker.net +www.ad-media.org +www.ad-search.com +www.ad-solutions.com +www.ad-space.net +www.ad-staff.com +www.ad-style.com +www.ad-text.com +www.ad-visor.com +www.ad.infoseek.com +www.ad.preferences.net +www.adadvisor.net +www.adaos-ads.net +www.adap.tv +www.adblade.com +www.adbrands.co.il +www.adbureau.net +www.adbuyer.com +www.adcash.com +www.adcentriconline.com +www.adcron.com +www.addthis.com +www.adelina-ashman.us +www.adexcite.com +www.adf.ly +www.adfluence.net +www.adfoc.us +www.adfusion.com +www.adgalax.com +www.adgatemedia.com +www.adgear.com +www.adgroups.com +www.adhall.com +www.adhitprofits.com +www.adhood.com +www.adhubz.com +www.adify.com +www.adimages.beeb.com +www.adinterax.com +www.adipics.com +www.adition.com +www.adjug.com +www.adjuggler.com +www.adlead.com +www.adlock.in +www.admailtiser.com +www.adman.gr +www.admarketplace.net +www.admarvel.com +www.admaya.in +www.admestate.ru +www.adnooka.com +www.adocean.pl +www.adonnetwork.com +www.adotsolution.com +www.adphreak.com +www.adprudence.com +www.adreadytractions.com +www.adrevmedia.com +www.adrian-patnode.us +www.adrianna-kovacs.us +www.adrotator.se +www.adroz.com +www.adrtrklnk.com +www.ads.bitservices.no +www.ads.ero-advertising.com +www.ads1.advance.de +www.ads180.com +www.ads2.advance.de +www.ads3.advance.de +www.ads4.advance.de +www.ads4links.com +www.adsadvertisement.org +www.adsalvo.com +www.adsbookie.com +www.adsbrokermirror1.info +www.adsbrokermirror2.info +www.adsbrokermirror3.info +www.adsbrokermirror4.info +www.adsbrokermirror5.info +www.adscendmedia.com +www.adsdelight.com +www.adsensecamp.com +www.adserver.brandilitynetwork.de +www.adserver.cz.cc +www.adserverplus.com +www.adshiftmedia.com +www.adshooter.com +www.adshost1.com +www.adshuh.com +www.adsmarket.co.il +www.adsmarketgroup.com +www.adsmarketlatam.com +www.adsniper.ru +www.adsolutions.co.il +www.adsoogle.com +www.adspaces.ero-advertising.com +www.adsphinx.com +www.adspics.com +www.adspinner.com +www.adsplay.in +www.adsuperstar.com +www.adsview.com +www.adtegrity.com +www.adtoll.com +www.adtracking.asia +www.adtransfer.net +www.adtwirl.com +www.aduacni.com +www.aducash.com +www.adult-adv.com +www.adult-banner-ads.com +www.adultbannerexchange.de +www.adv-adserver.com +www.adv.co.il +www.advancedad.com +www.advconversion.com +www.adventuresinnetmarketing.com +www.advenueplatform.com +www.advernet.co.il +www.adversalservers.com +www.adverticus.de +www.advertisegame.com +www.advertiserjob.com +www.advertiserwanted.com +www.advertising-software.com +www.advertising-world.com +www.advertising.com +www.advertstream.com +www.advido.com +www.adviews-sponsor.de +www.advm10.com +www.advombat.ru +www.adworkmedia.com +www.adworkmedia.net +www.adworks.com +www.adzly.com +www.adzones.com +www.aesxo.com +www.affbuzzads.com +www.affiliate.net +www.affiliateclick.com +www.affiliatedave.com +www.affiliatefuel.com +www.affiliatefuture.co.uk +www.affiliateguide.com +www.affiliateharvest.com +www.affiliatematch.com +www.affiliatemoneytree.com +www.affiliatequality.com +www.affiliateshop.com +www.affiliateshowcase.com +www.affiliatetalk.net +www.affiliatetracking.com +www.affiliatetracking.net +www.affiliatewindow.com +www.affiliatezone.com +www.affiliaweb.eu +www.affilitracker.biz +www.afftrack.com +www.afftracker.info +www.afftrackinglinks.com +www.afiliati.ro +www.afterdownload.com +www.agata-lillard.us +www.agata-wadlington.us +www.agmtrk.com +www.agnstaging.com +www.airpush.com +www.alaina-englert.us +www.alana-caesar.us +www.alana-chao.us +www.alanna-annunziata.us +www.aleah-walling.us +www.alexa-gunther.us +www.alexa.com +www.alexandra-magruder.us +www.alexandria-utt.us +www.alice-christenson.us +www.alice-gentile.us +www.alicia-hepp.us +www.alissa-blanchard.us +www.alivelocal.com +www.allie-cunha.us +www.allie-hobdy.us +www.allison-anton.us +www.allison-gobeil.us +www.allison-lundeen.us +www.allosponsor.com +www.alloydigital.com +www.allsolutionsnetwork.com +www.allyson-stratton.us +www.alphagirlz.mobi +www.alysha-trapani.us +www.alysia-lenoir.us +www.alyson-klein.us +www.amazingcounters.com +www.amclicks.com +www.amie-koepke.us +www.amusive.com +www.anastasia-bale.us +www.anastasia-okelley.us +www.andria-beebe.us +www.andria-tabarez.us +www.angelia-malave.us +www.anioffers.com +www.anita-magana.us +www.ann-graziani.us +www.anne-kennison.us +www.annemarie-gandara.us +www.annette-christian.us +www.annette-levin.us +www.annika-tolleson.us +www.annuncio.com.do +www.anonymousads.com +www.antoinette-meisner.us +www.antonia-michalik.us +www.anymanga.com +www.apmebf.com +www.app-authority.com +www.appflood.com +www.appia.com +www.appliedsemantics.com +www.applifier.com +www.applift.com +www.apptornado.com +www.april-blackburn.us +www.april-tindell.us +www.april-wilcoxon.us +www.apture.com +www.areasnap.com +www.arielle-younkin.us +www.arizona-marketplace.com +www.armadasearch.com +www.arscounter.com +www.ashely-wynn.us +www.ashli-samuelson.us +www.ashly-truman.us +www.askspecifically.com +www.ass4all.com +www.associmg.com +www.atdmt.com +www.athena-dirksen.us +www.attraction-24578.us +www.aubrey-kutz.us +www.aubrey-lazo.us +www.auctionads.com +www.audiopal.com +www.audra-talbott.us +www.aurora-musso.us +www.aurora-pickett.us +www.aurora-wilhelm.us +www.auto-ping.com +www.automatically-find.com +www.automaticsystem.com +www.avatraffic.com +www.avazudsp.net +www.awarenessbaby.com +www.aweber.com +www.awin2.com +www.axf8.net +www.azads.net +www.b1d.org +www.b23.ru +www.baciotti.com +www.backtype.com +www.badoink.com +www.bakler.net +www.bango.co.uk +www.bango.com +www.bango.net +www.bangtuoc.vn +www.bannerbank.ru +www.bannercenter.net +www.bannerforge.com +www.bannergifmedia.net +www.bannerpro.tk +www.banners.ero-advertising.com +www.banners2.ero-advertising.com +www.banners2.eroadvertising.com +www.bar.hit-counter.udub.com +www.barbara-seevers.us +www.barbara-vasques.us +www.bardzomedia.com +www.baypops.com +www.becontext.com +www.belstat.be +www.belstat.nl +www.benchbrands.com +www.bernadette-depalma.us +www.bernadette-gines.us +www.bernadette-stefanski.us +www.betsy-frankel.us +www.bettermail.ca +www.bettingmarket.com +www.betty-cendejas.us +www.beyourownaffiliate.com +www.bianca-geiger.us +www.bianca-rhoton.us +www.bidtraffic.com +www.bigad.com.au +www.bigfatbaby.com +www.bill-info.com +www.bimm.in +www.birogud.info +www.bitcoinadvertisers.com +www.bitlk.us +www.bitlnk.us +www.bitterstrawberry.com +www.bitvisitor.com +www.bizzclick.com +www.bkrtx.com +www.blacklightimages.com +www.blamads.com +www.blanca-livingstone.us +www.blankrefer.com +www.blankreferrer.com +www.blinkx.com +www.blog-hits.com +www.blogads.com +www.blogrankings.com +www.blueheart.org +www.blueseek.com +www.bluesq.com +www.blumi.to +www.bnbaz.eb2a.com +www.bnmq.com +www.boards2go.com +www.bob.vmsn.de +www.boldcenter.com +www.boldchat.com +www.bongacash.com +www.bonnie-schrecengost.us +www.bounceexchange.com +www.bpath.com +www.braincash.com +www.bravenetmedianetwork.com +www.bree-wile.us +www.brenna-kalish.us +www.brianne-crofoot.us +www.brianne-dearing.us +www.brightshare.com +www.brigitte-burtch.us +www.britni-kremer.us +www.britni-vesely.us +www.brittany-mathewson.us +www.brittney-riner.us +www.brittni-olson.us +www.brokertraffic.com +www.brook-durante.us +www.brook-rosen.us +www.bsitevisitor.com +www.bsitm3.com +www.bullseye-network.com +www.bullseye-network.net +www.bumperich.ru +www.burstly.com +www.burstmedia.com +www.burstnet.com +www.buttcandy.com +www.buyhitscheap.com +www.buytraf.ru +www.bwin90.com +www.c-on-text.com +www.c2path.com +www.c3onlinemarketing.com +www.caartoonnetwork.com +www.callie-degree.us +www.cam-traffic.com +www.cameron-primeaux.us +www.campaignmonitor.com +www.campaigntracking01.com +www.candi-nolen.us +www.candi-parman.us +www.caren-cady.us +www.caren-jerry.us +www.caren-sena.us +www.carina-galaviz.us +www.carissa-tarwater.us +www.carmunity.de +www.carol-kanode.us +www.carolyn-willson.us +www.cartonetwork.com +www.cartoonnrtwork.com +www.casandra-quintana.us +www.cash4webmaster.de +www.cashassociate.com +www.cashcount.com +www.cashdorado.de +www.cashforsurveys.com +www.cashforsurveys.net +www.cashfromhome.com +www.cashlayer.com +www.cashmylinks.com +www.casie-mcbryde.us +www.casie-patterson.us +www.cassandra-klima.us +www.cassandra-schillinger.us +www.cassidy-milsap.us +www.cathie-zane.us +www.cathleen-rooker.us +www.catoonetwork.com +www.catrina-linzy.us +www.catrina-mcrae.us +www.cbeckads.com +www.cbsmarket.com +www.cedemailtracker.com +www.celebrity-image.com +www.celia-lacoste.us +www.celia-shrader.us +www.certified-email.com +www.cetrk.com +www.chanelle-silcox.us +www.chango.com +www.chantelle-bishop.us +www.charlene-kohl.us +www.charlotte-thornell.us +www.chartboost.com +www.chastity-stoltenberg.us +www.chaya-cissell.us +www.checkm8.com +www.chelsea-figueiredo.us +www.chelsie-barile.us +www.cherish-mauk.us +www.cheryl-edelstein.us +www.christa-delreal.us +www.christi-canfield.us +www.christie-hanlon.us +www.christine-channell.us +www.chrystal-hollins.us +www.chrystal-stoudt.us +www.cindy-malott.us +www.cinthya-hanks.us +www.cityads.ru +www.cktrk.net +www.claire-bonelli.us +www.clear-reports.com +www.clearspring.com +www.clearwebstats.com +www.click-ice.com +www.click-linking.com +www.click-under.info +www.click2bank.net +www.click2clicktracker.com +www.click2site.co +www.clickauditor.net +www.clickdensity.com +www.clickice.com +www.clickon.co.il +www.clickriver.com +www.clicks2you.com +www.clickshield.net +www.clicksor.com +www.clicksor.net +www.clicktracksolutions.com +www.clicktrakr.com +www.clickv.com +www.clickwinks.com +www.clickxchange.com +www.clicz.com +www.cliqtrac.com +www.cliximages.com +www.clixsense.com +www.clixstrackers.com +www.clkads.com +www.clkmon.com +www.clkrev.com +www.cloudhot.net +www.cml1234.com +www.cmltrk.info +www.cmpmiami.com +www.cms2.net +www.cnomy.com +www.cntrrx1.com +www.cntrtr.com +www.cogtree.com +www.coinurl.com +www.coinvisitor.com +www.colette-connell.us +www.colette-ybarra.us +www.collectionssearch.com +www.comfm.com +www.commissionmonster.com +www.commonssearch.com +www.compete.com +www.competeinc.com +www.comscore.com +www.con.vmsn.de +www.conductedresearch.com +www.connectlinking1.com +www.connectlinking10.com +www.connectlinking12.com +www.connectlinking2.com +www.connectlinking3.com +www.connectlinking4.com +www.connectlinking5.com +www.connectlinking6.com +www.connectlinking7.com +www.connectlinking8.com +www.connectlinking9.com +www.connexionsecure.com +www.connextra.com +www.constantlyseek.com +www.contador-de-visitas.com +www.content-cooperation.com +www.content.applift.com +www.contentlockingnetworks.com +www.contextuads.com +www.continuingresearch.com +www.controlodequalidade.com +www.conversion-tracker.com +www.conversionruler.com +www.corinne-gump.us +www.corrie-mchale.us +www.corrine-scroggins.us +www.cortoonnetwork.com +www.count24.de +www.counted.de +www.counter-gratis.com +www.counter.bloke.com +www.counter.superstats.com +www.counter1.sextracker.be +www.counter10.sextracker.be +www.counter11.sextracker.be +www.counter12.sextracker.be +www.counter13.sextracker.be +www.counter14.sextracker.be +www.counter15.sextracker.be +www.counter16.sextracker.be +www.counter160.com +www.counter2.sextracker.be +www.counter3.sextracker.be +www.counter4.sextracker.be +www.counter4all.com +www.counter4all.de +www.counter5.sextracker.be +www.counter6.sextracker.be +www.counter7.sextracker.be +www.counter8.sextracker.be +www.counter9.sextracker.be +www.counterguide.com +www.counters4u.com +www.counterservis.com +www.counting4free.com +www.countmyvisitors.com +www.countomat.com +www.countonline3.de +www.countz.com +www.courseseat.com +www.courtney-jacobi.us +www.coxds.com +www.cpa.ly +www.cpadna1.com +www.cpadoc.com +www.cpadom.com +www.cpagrip.com +www.cpainfinity.com +www.cpatrac.com +www.cpatrackr.com +www.cpd8.net +www.cpm-plus.com +www.cpm.biz +www.cpmfun.com +www.cpxcenter.com +www.cpxinteractive.com +www.cqcounter.com +www.craig-trump.us +www.crashlytics.com +www.createsend.com +www.creoads.com +www.cristy-barcomb.us +www.cristy-baty.us +www.crittercism.com +www.crowdscience.com +www.crunchroll.com +www.crunkedtracking.com +www.crushads.com +www.crwdcntrl.net +www.cstrk.net +www.culvercountry.com +www.cur.lv +www.customads.net +www.cutestuf.com +www.cutterbuck.com +www.cwahi.net +www.cyberwavemedia.com +www.cynthia-tomas.us +www.cyonix.to +www.cyprusads.info +www.d1.c6.b3.a0.top.list.ru +www.d16.net +www.dadegid.ru +www.daily-traffic.com +www.dana-frenette.us +www.dana-goodnight.us +www.danelle-free.us +www.daniela-magno.us +www.daniela-silva.us +www.danielle-felten.us +www.danyelle-cha.us +www.daoblocks.com +www.daoxml.com +www.daphne-alsup.us +www.darcy-austria.us +www.darlene-goff.us +www.darlene-sequeira.us +www.data-ero-advertising.com +www.data-eroadvertising.com +www.data.ero-advertising.com +www.daum.net +www.daylogs.com +www.dayna-cadet.us +www.dburl.us +www.dealofadayonline.com +www.dealsfor.me +www.deana-messing.us +www.debbie-carmen.us +www.debra-strom.us +www.debsfunpages.com +www.deena-mchugh.us +www.default-homepage-network.com +www.definitely-find.com +www.definitelyfind.com +www.deirdre-dahl.us +www.delia-galvin.us +www.deliberatelyseek.com +www.delishows.com +www.demandbase.com +www.demetria-bunch.us +www.demetria-tickle.us +www.dermadoctoraffiliates.com +www.desiree-dane.us +www.desiree-novotny.us +www.diana-buchheit.us +www.did-it.com +www.didhddacmbghikt.yosoda.net +www.didit.com +www.digits.com +www.digitymedia.net +www.dihitt.com +www.dimpact.co.il +www.dina-mulkey.us +www.dina-rish.us +www.dinclinx.com +www.directadvert.ru +www.directbrand.com +www.directfwd.com +www.directoryreferences.com +www.directtrack.com +www.dirtcheapadvertising.com +www.dirtyrhino.com +www.discover-facts.com +www.discoverexactly.com +www.discoverhidden.com +www.ditly.us +www.ditmu.us +www.diturl.us +www.dmtracker.com +www.dmtracking01.com +www.dntx.com +www.doll.home.ro +www.dollarade.com +www.dolores-parra.us +www.domainhop.com +www.domainsponsor.com +www.domdex.com +www.donkeymails.com +www.doreen-weidner.us +www.doris-imhoff.us +www.doubleclick.com +www.doubleclick.de +www.doubleclick.ne.jp +www.doubleclick.net +www.doubleclick.net.my +www.downloadcounter.de +www.dragonballzhomeland.com +www.drredir.com +www.drtserver.com +www.dsmmadvantage.com +www.dsnr-portal.info +www.dsnr.net +www.dsnrmg.com +www.dsply.com +www.duba.net +www.dummywebsitedatabase.com +www.dustat.com +www.e-tracker.de +www.e-trends.com +www.e-zeeinternet.com +www.ea-traffic-redirection.com +www.eadexchange.com +www.eaffiliateinc.com +www.easily-discover.com +www.easilyask.com +www.easilyfindlocal.com +www.easilytrack.com +www.easycounter.com +www.easyhitcounters.com +www.easyhits4u.com +www.ebtmarketing.com +www.eddie-theriot.us +www.edge.quantserve.com +www.edith-marquart.us +www.edna-read.us +www.edomz.com +www.edward-hulsey.us +www.eightfoldlogic.com +www.eimg.com +www.elaine-hamdan.us +www.eleadstracker.com +www.elise-throop.us +www.elitemarketing.net +www.elitepartners.ru +www.eloqua.com +www.elpais.es +www.elsa-curry.us +www.eltrafiko.com +www.email-marketing.net +www.email666.com +www.emailaccount.com +www.emailb.biz +www.emailmarketingleads.com +www.emailserving.com +www.emarketers.com +www.emjcd.com +www.emsvr.com +www.enliven.com +www.enscl.com +www.epicgameads.com +www.equitymarketingsolutions.com +www.ercva.com +www.ericka-riffle.us +www.erika-mcmasters.us +www.erin-hartwell.us +www.ero-adverising.com.ero-advertising.com +www.ero-advertising.com +www.ero-advertising.org +www.eroadvertising.com +www.eroadvertising.info +www.eroadvertising.nl +www.erostracker.com +www.erostracker.net +www.escalatenetwork.com +www.eshopads2.com +www.estat.com +www.esther-strauss.us +www.etahub.com +www.ethn.io +www.etrack51.com +www.etracker.de +www.euroclick.com +www.euros4click.de +www.eva-parkin.us +www.eva-ryerson.us +www.evelyn-dutra.us +www.eventi.co.il +www.everef.adoc.fr +www.evisitcs2.com +www.ewordofmouth.com +www.exactadvertising.com +www.exacttarget.com +www.exchange-it.com +www.exchangead.com +www.exchangebanner.com +www.exct.net +www.exelator.com +www.exit-ad.de +www.exitdevil.com +www.exitrafic.net +www.expand-search-goals.com +www.expandsearchanswers.com +www.expert-offers.com +www.explore-possibilities.com +www.extensive-research.com +www.extensive-search.com +www.extreme-dm.com +www.extremetracking.com +www.eyeblaster.com +www.ez-poll.superstats.com +www.ez-polls.superstats.com +www.ezdirectory.com +www.ezpoll.superstats.com +www.ezpolls.superstats.com +www.fast-route.com +www.fastadvert.com +www.fastcashathome.homestead.com +www.fastclick.net +www.fastclickfind.com +www.fastclicknow.com +www.fasteasytraffic.com +www.fastlinkfinder.com +www.fastonlinefinder.com +www.featuredlocalfind.com +www.feedblitz.com +www.feedjit.com +www.felisha-utter.us +www.ferdy.org +www.fhserve.com +www.fiesta-game.com +www.fileblckr.com +www.filecm.net +www.filitrac.com +www.find-actual.com +www.find-anywhere.com +www.find-easily.com +www.find-exact.com +www.find-facts.com +www.find-fast-answers.com +www.find-fast-results.com +www.find-quick-results.com +www.find-search-engine-results.com +www.find-search-seek.com +www.find-uses.com +www.findabsolutely.com +www.findaccurate.com +www.findactual.com +www.findalternate.com +www.findconsensus.com +www.findconvenient.com +www.findcredible.com +www.finddozens.com +www.findextensive.com +www.findfascinating.com +www.findfeature.com +www.findfunction.com +www.findlisted.com +www.findlogical.com +www.findmaybe.com +www.findmyhood.com +www.findnumerous.com +www.findreliable.com +www.findsatisfaction.com +www.findsearchengineresults.com +www.findsearchseek.com +www.findshoppinginfo.com +www.findthousands.com +www.findtotally.com +www.finduses.com +www.findwebnow.com +www.finnesvar.com +www.firecash.org +www.firetrck.com +www.firstlook.com +www.fixin.de +www.flash-counter.com +www.flashtrack.net +www.flashvortex.com +www.flixfacts.co.uk +www.flowgo.com +www.flowgow.com +www.flurry.com +www.flvmoviesdownloader.com +www.flycast.com +www.flyinads.com +www.fmpub.net +www.folloyu.com +www.foreseeresults.com +www.forexadvertisingnetwork.com +www.fortumo.com +www.foxcounter.com +www.fpctraffic.com +www.francesca-studer.us +www.fraston.info +www.freddyman.com +www.free-banners.com +www.freeadposting.com +www.freebietraffic.com +www.freecountersnow.com +www.freehomecenter.com +www.freehomepages.com +www.freelogs.com +www.freerotator.com +www.freestats.com +www.freeviral.com +www.freewha.com +www.frequently-find.com +www.frequentlyfind.com +www.friendlyduck.com +www.fucktubenetwork.com +www.fun-hits.de +www.fun-town.com +www.funklicks.com +www.funny-postcards10.home.ro +www.funnygreetings.com +www.funstun.com +www.fusespot.com +www.fusionbanners.com +www.fwarnr.us +www.fwdservice.com +www.fxstyle.net +www.gabia.com +www.gamecity.net +www.gamersblast.com +www.gamingblast.com +www.gawartis.info +www.gbotvisit.com +www.geigercount.net +www.geolep.net +www.geoplugin.net +www.georgiana-millwood.us +www.geovisites.com +www.geraldine-arpin.us +www.get-amazing-results.com +www.get-answers-fast.com +www.get-information.com +www.get-results-fast.com +www.get-search-results.com +www.getdirect.ru +www.getfreebl.com +www.gethotresults.com +www.getmycell.com +www.getsatisfaction.com +www.getxpay.biz +www.gianna-lamothe.us +www.gianna-mcgee.us +www.gladys-lapierre.us +www.gladys-theriot.us +www.gladys-viola.us +www.glb.livejasmin.com +www.global-adsrv.com +www.globirank.com +www.gmtracker.com +www.go2web20.net +www.gogousenet.com +www.goldenadsf1eed.com +www.golfcountryhomes.com +www.gooddata.com +www.goodtraffic.net +www.google-analytics.com +www.googleadservices.com +www.googletagmanager.com +www.googletagservices.com +www.goreal.at +www.gospycash.com +www.gostats.com +www.gotlaughs.com +www.gotta-find.com +www.goviral.co.uk +www.goviral.com +www.goviralnetwork.com +www.goviralnetwork.net +www.grace-hansley.us +www.greatcarrates.com +www.greatest-store.com +www.green-tracker.com +www.gretchen-domino.us +www.guestbook.superstats.com +www.guid.org +www.haley-seeber.us +www.handyseek.com +www.hardcoretraffic.com +www.hasoffers.com +www.hastrk2.com +www.hayley-mund.us +www.hbytracker.com +www.hdplugindownload.com +www.heather-brennen.us +www.heidi-arroyo.us +www.helen-ponte.us +www.hellen-baca.us +www.helpsfind.com +www.herbalaffiliateprogram.com +www.hide.io +www.hilary-caddell.us +www.hillary-daughtery.us +www.hillary-paugh.us +www.hipmarket.com +www.hit-counter.5u.com +www.hit-counter.info +www.hit-parade.com +www.hitbox.com +www.hitexchange.net +www.hitfarm.com +www.hitslink.com +www.hittrack.org +www.hitwise.co.uk +www.hitx.net +www.hkik.ru +www.hm-analytics.com +www.holly-mix.us +www.home-internet-cash.com +www.home.ro +www.homebusinessgo.com +www.homecareersearch.com +www.homedepoy.com +www.homedepto.com +www.homeearthlink.net +www.homeeq.com +www.homegrocier.com +www.homeimprovementonus.com +www.homeloan.tr.cx +www.homepage.ru +www.homepages.com +www.homepageware.com +www.homesidelendinginc.com +www.homestad.com +www.homevisions.com +www.hooqy.com +www.hope-weidner.us +www.hopurl.org +www.host-tracker.com +www.hostlnks.com +www.hotlog.ru +www.ht-tracking01.com +www.html-email-marketing.com +www.htmlcounter.com +www.humanclick.com +www.humansfind.com +www.hurricanedigitalmedia.com +www.hyderabadclicks.com +www.hyperbanner.com +www.hyperbanner.net +www.hyperspace-network.com +www.hyperspacenetwork.com +www.i-xzone.com +www.iaspromotes.com +www.iballs.de +www.iballs.nl +www.ibario.com +www.ibroadband.com +www.ibsys.com +www.icontact.com +www.icount.com +www.icptrack.com +www.ideaworks.com +www.identifycharacters.com +www.identifyepisodes.com +www.identifyexactly.com +www.identifyplaces.com +www.idirect.com +www.idritracker.com +www.ientry.com +www.ientrymail.com +www.ientrynetwork.net +www.ifsmarketing.com +www.igain-mail.co.uk +www.ignitad.com +www.igogoshare.com +www.iicdn.com +www.iltpath.com +www.imads.ero-advertising.com +www.image-map.com +www.image-search-goals.com +www.image.ft.com +www.imageers.com +www.imagenes.de +www.imagesearchanswers.com +www.imiclk.com +www.imptestrm.com +www.inboxpounds.co.uk +www.inboxpounds.com +www.inc.com +www.incentaclick.com +www.ineedhits.com +www.ingrid-kesterson.us +www.inmobi.com +www.inspectorclick.com +www.int3latrack.com +www.integrate.com +www.intelatrack.biz +www.intelatracking.net +www.inteletrack.com +www.intellectualinquiry.com +www.intelli-direct.com +www.intelli-tracker.com +www.intellicampaign.com +www.intellicontact.com +www.intelligentkid.com +www.intellitxt.com +www.interclick.com +www.internationaltraffic.info +www.internet-shopping-site.com +www.internetmedia.com.au +www.internetworks.org +www.interpr.ru +www.interupload.com +www.intouchmediagroup.com +www.ioam.de +www.iperceptions.com +www.ipqualityscore.com +www.ipstat.com +www.irepdeliver.com +www.iris-sampley.us +www.isoftmarketing.com +www.ispeakvideo.com +www.istats.nl +www.istrack.com +www.itrack1.com +www.itrack19.com +www.itrckr.com +www.ivwbox.de +www.iwebimg.net +www.jacquelyn-wadsworth.us +www.jade-aultman.us +www.jadina-counter.de +www.jag.vmsn.de +www.jalbum.net +www.janae-galentine.us +www.janna-ransome.us +www.jaqueline-bostwick.us +www.jasmin-mcgehee.us +www.jayde.com +www.jcount.com +www.jd-mail.co.uk +www.jeana-fenster.us +www.jeana-pedigo.us +www.jeanette-cropper.us +www.jeanine-ragan.us +www.jeanine-wiseman.us +www.jeanne-dargan.us +www.jeannie-mccord.us +www.jen-lobdell.us +www.jenna-byrum.us +www.jenna-yokota.us +www.jennie-griffis.us +www.jennie-underhill.us +www.jerrica-godinez.us +www.jessica-alvarado.us +www.jessie-canizales.us +www.jessika-ahrens.us +www.jessy-abrego.us +www.jessy-sauer.us +www.jetpad.com +www.jill-baumgart.us +www.jill-mortimer.us +www.jlyse.net +www.jmpgo.com +www.jmplink.com +www.joan-moronta.us +www.joanna-ruckman.us +www.jobthread.com +www.jon-feely.us +www.js-kit.com +www.jsfeedadsget.com +www.jsfeedget.com +www.jspy.ru +www.juiceadv.com +www.juliana-mckinzie.us +www.julianna-ferrara.us +www.jumptap.com +www.justcounter.com +www.justine-norden.us +www.justpaste.us +www.justsaywow.com +www.jvz5.com +www.jvz7.com +www.jvz8.com +www.jvz9.com +www.jvzoo.com +www.kacey-sheilds.us +www.kailyn-hacker.us +www.kala-mazzariello.us +www.kandace-fazio.us +www.kandice-corn.us +www.karen-westman.us +www.karina-bolds.us +www.karla-law.us +www.karoline-fortin.us +www.karrie-bennet.us +www.kassandra-chick.us +www.kassandra-ronan.us +www.kassie-llanes.us +www.katelin-garlick.us +www.katelynn-donalson.us +www.katherine-hollandsworth.us +www.katheryn-cowden.us +www.kathleen-bower.us +www.kathryn-scheele.us +www.kati-birdsall.us +www.katrina-rumbaugh.us +www.kayla-massie.us +www.kaylee-donley.us +www.kayleigh-kilian.us +www.kdukvh.com +www.keisha-kimes.us +www.kelley-delariva.us +www.kelley-eggert.us +www.kelly-duby.us +www.kelly-heinen.us +www.kendra-mcgarry.us +www.keri-arneson.us +www.kerri-rasmussen.us +www.kerrie-baltz.us +www.kerrie-bedoya.us +www.kerrie-felker.us +www.kerry-fincher.us +www.kewlrank.com +www.keywordblocks.com +www.keywordmax.com +www.kilopog.com +www.kimberlee-llanos.us +www.kimberley-mackinnon.us +www.kinocash.com +www.kinostok.tv +www.kissinsights.com +www.kissmetrics.com +www.kissmyads.com +www.kizash.com +www.kliktrek.com +www.kontera.com +www.kosoft-ads.com +www.kpicentral.com +www.kristal-matos.us +www.kryptobanners.com +www.krysta-plante.us +www.krysta-quinlan.us +www.kylee-hickok.us +www.kyra-lazaro.us +www.kyra-pendergraft.us +www.lacie-fredericksen.us +www.lacie-heberling.us +www.lacie-rarick.us +www.lacodeworks.com +www.lacy-denny.us +www.lacy-gauvin.us +www.lapoo.net +www.launchbit.com +www.laura-garver.us +www.layer-ad.org +www.layer-ads.org +www.lea-riser.us +www.leadbolt.com +www.leadclick.com +www.leadformix.com +www.leadhound.com +www.leadlander.com +www.legitfreecounters.com +www.letsgetrapidresults.com +www.lfstmedia.com +www.lia-bartell.us +www.liana-carls.us +www.liana-millican.us +www.libmedia.net +www.liczniki.org +www.likebtn.com +www.liliana-prokop.us +www.lily-mcnamara.us +www.lily-pelchat.us +www.linda-bretz.us +www.linda-jose.us +www.lindsay-faulks.us +www.link4link.com +www.linkads.de +www.linkconnector.com +www.linkcounter.com +www.linkexchange.nl +www.linkexchange.org +www.linkexchange.ru +www.linkpartners.com +www.linkprotector.org +www.linkreferral.com +www.links2u.com +www.linkscout.com +www.linksfindlocal.com +www.linksmile.com +www.linksredirect.com +www.linkstation.de +www.linkswiper.com +www.linktarget.com +www.linkwithin.com +www.linkwords.net +www.linkworld.ws +www.linkxchanger.com +www.linkybank.com +www.linkz.com +www.linsey-palacio.us +www.liqwid.net +www.lisa-giannini.us +www.lisette-leavell.us +www.litiumo.com +www.livecounter.dk +www.liveinternet.ru +www.livejasmin.com +www.livesearchnow.com +www.livestat.com +www.liza-ulrey.us +www.llester.net +www.lloogg.com +www.lmlttrack.com +www.lnkgo.com +www.lnkgt.com +www.lnktrack.us +www.lnx.lu +www.local-hub.com +www.local-search-pages.com +www.localfindanswers.com +www.localfindinfo.com +www.localfindlinks.com +www.localfindstuff.com +www.localsearchfinds.com +www.locatetargets.com +www.lognormal.net +www.lokhlp.com +www.lolfun.com +www.looksmart.com +www.looksmartclicks.com +www.lora-keeler.us +www.loren-ruybal.us +www.lorena-margolis.us +www.lostwebtracker.com +www.lotame.com +www.louise-poulsen.us +www.loxtk.com +www.lucinda-lappin.us +www.luckyhomepage.com +www.luisa-hayden.us +www.luminate.com +www.lydia-birnbaum.us +www.lydia-tolar.us +www.lyndsay-lambeth.us +www.lyndsay-munger.us +www.lynette-raber.us +www.lynn-buzbee.us +www.lynsey-mabon.us +www.macaddictads.snv.futurenet.nl +www.madblast.com +www.madisonlogic.com +www.madmimi.com +www.maegan-abad.us +www.magentanews.com +www.magicmail.co.nz +www.mail-to-a-friend.com +www.mailchimp.com +www.mainstreamadvertising.com +www.mandi-kearney.us +www.mandy-lauzon.us +www.manuelu.com +www.maple-team.com +www.maranda-bagby.us +www.marcie-vanfleet.us +www.margaret-dimick.us +www.mari-rude.us +www.mari-stamp.us +www.mariah-cato.us +www.mariah-payton.us +www.mariah-reynolds.us +www.marian-behling.us +www.marian-mcclain.us +www.mariana-merideth.us +www.marianna-brunk.us +www.maribel-blakney.us +www.maricela-mcgoldrick.us +www.marie-melville.us +www.mariel-agosto.us +www.mariel-radcliffe.us +www.marieta-brooking.us +www.marina-peed.us +www.marion-latson.us +www.marisol-sharp.us +www.marketbiz.com +www.marketdart.com +www.marketgid.com +www.marketing-internet.com +www.marketing.com.ar +www.marketingprofs.com +www.marketingsecrets.com +www.marketingtips.com +www.marketingwithpostcards.com +www.marketingx.com +www.marketo.com +www.marketsurveys.com +www.marlene-baley.us +www.marlene-hunsinger.us +www.marsha-hoppe.us +www.marta-kenny.us +www.mary-marcellus.us +www.mary-omeara.us +www.mastercount.net +www.matchbin.com +www.mathtag.com +www.matomy.com +www.matomybranches.com +www.matomygroup.com +www.matomymail.com +www.matomymarket.com +www.matomymax.com +www.matomymedia.com +www.matomymediagroup.com +www.matomymobile.com +www.maura-teitelbaum.us +www.maureen-matheson.us +www.maxbounty.com +www.maxtrust.ru +www.maya-nickens.us +www.mb01.com +www.mb104.com +www.mbotvisit.com +www.mcpatrack.tv +www.mcssl.com +www.meagan-hasting.us +www.meagan-scully.us +www.media-code.info +www.media-vertex.com +www.media30trk.com +www.media970.com +www.mediabreakaway.com +www.medialytics.com +www.mediamath.com +www.mediamind.com +www.mediarich.cc +www.mediasheva.com +www.mediaunder.org +www.meethotties.mobi +www.mega-traf.net +www.megacounter.de +www.megan-farrier.us +www.megan-stagner.us +www.melinda-bjork.us +www.melissa-kirksey.us +www.melissa-ruggles.us +www.mellissa-kersten.us +www.mellissa-lack.us +www.meltwater.com +www.meltwaternews.com +www.memopumpkin.com +www.menato.ru +www.meshbean.com +www.metacount.com +www.mfsuite.com +www.mgcash.com +www.mgcashgate.com +www.mgid.com +www.mia-fricks.us +www.migpay.com +www.miildoos.ru +www.mim.io +www.mindy-sawyer.us +www.mirrorad.com +www.misti-bourbeau.us +www.misti-smythe.us +www.mixpanel.com +www.mlinktracker.com +www.mmftpf.com +www.mmnetwork.mobi +www.mmotraffic.com +www.mmtracking.com +www.mobfox.com +www.mobile-abc.com +www.mobitracker.info +www.mobitraffictracker.net +www.mobpartner.com +www.mobpartner.mobi +www.mobvid.mobi +www.moceanmobile.com +www.mochiads.com +www.mochibot.com +www.modelatos.com +www.mojiva.com +www.mokono.com +www.mollie-patino.us +www.monetisetrk.co.uk +www.monetisetrk1.co.uk +www.monetisetrk2.co.uk +www.monetisetrk3.co.uk +www.monetisetrk4.co.uk +www.monetisetrk5.co.uk +www.monetisevideo.com +www.moneymakerclick.com +www.mongoosemetrics.com +www.moonmarketing.com +www.motormarket.com +www.movieads.ero-advertising.com +www.mp-success.com +www.mpression.net +www.mprptrk.com +www.msn4adults.com +www.msnhome.com +www.msnhomepage.com +www.msnnetwork.com +www.my-etracker.com +www.myad.no +www.myadmarket.com +www.myadpromoter.com +www.myadtrack.com +www.myaffiliateads.com +www.myaffiliateprogram.com +www.myetracker.com +www.mygosecure.com +www.myseostats.com +www.mysweetdeals.org +www.mytiwi.com +www.mytrafficbuilder.info +www.n0.count.cc +www.n1.count.cc +www.n2.count.cc +www.nadia-carlyle.us +www.naomi-thorn.us +www.napster-advertising.de +www.natalie-won.us +www.nataly-godoy.us +www.naturalsearchtoolresults.com +www.nbjmp.com +www.ndoverdrive.net +www.nedstat.co.uk +www.nedstat.com +www.nedstat.nl +www.neobux.com +www.neogrey.net +www.netadsloc.com +www.netdirect.nl +www.netlinktrack.com +www.nettown.com +www.network22.com +www.networkadvertising.org +www.networkcommerce.com +www.networksolutionsaffiliates.com +www.networkwestvirginia.com +www.networkwestvirginia.net +www.neverticular.com +www.newmarketinformation.com +www.ngbn.net +www.nicolette-brier.us +www.nicolette-salas.us +www.nngalleries2.com +www.noelle-traxler.us +www.noelle-trotter.us +www.nonames.tk +www.noowho.com +www.ntwktrax.com +www.nvtrak.com +www.o2onbusiness.de +www.obfm40.com +www.oddcast.com +www.offerdeliver.com +www.offers-track.com +www.ojolink.com +www.ojrq.net +www.olivia-dibenedetto.us +www.olizyr.com +www.omarsys.com +www.omniture.com +www.onclickads.net +www.oneandonlynetwork.com +www.onelouder.com +www.onestat.com +www.onlineemailmarketing.com +www.onlinetraffic.info +www.onyarysh.ru +www.openadserving.com +www.opentracker.net +www.openvn.com +www.openx.org +www.openxmedia.com +www.operationfabulous.com +www.opportunity-tracking.com +www.opt-media.com +www.optify.net +www.optimum-hits.com +www.optmd.com +www.organicsearchanswers.com +www.organicsearchgoals.com +www.orgasms4free.com +www.otherprofit.com +www.otmsrv.com +www.otracking.com +www.outerpages.com +www.oversee.net +www.ovhomes.com +www.oxoads.com +www.oxosurf.eu +www.p3marketing.com +www.padv.co.il +www.pagesinxt.com +www.paid-work-at-home.com +www.paige-weigand.us +www.pairmake.net +www.palimashop.com +www.pamela-bax.us +www.parkingcrew.net +www.parksurve.com +www.parse.ly +www.parship.co.uk +www.partner.gonamic.de +www.partnercash.com +www.pastilon.com +www.patricia-sackett.us +www.patricia-selders.us +www.paycounter.com +www.paymonsters.biz +www.paymonsters.com +www.payperclick.co.il +www.paypersaleadvertising.com +www.pe.n-mobile.net +www.peakclick.com +www.peakcounter.dk +www.people-group.su +www.performancerevenues.com +www.persianstat.com +www.peruvianmarket.com +www.peter-wimbley.us +www.pflexads.com +www.pheedo.com +www.photoshop-master.org +www.phpbbex.com +www.pigment-adv.co.il +www.ping-fast.com +www.pinkcount.com +www.pivotnetworks.com +www.piwik.org +www.pixazza.com +www.pixetrk.com +www.plug-media.com +www.pmediatrack.com +www.pointroll.com +www.pointshop.dk +www.polly-hammack.us +www.pongoresume.com +www.popads.ero-advertising.com +www.popadscdn.net +www.poponclick.com +www.popunder.net +www.popunder.ru +www.pornlist.mobi +www.pornolist.org +www.pornsponsors.com +www.portia-hargrave.us +www.ppcindo.com +www.pppads.com +www.pptrk.com +www.prchecker.info +www.preciselylocate.com +www.primosearch.com +www.pringotrack.com +www.printdirectoryentry.com +www.printdirectoryinfo.com +www.printdirectorylinks.com +www.printdirectorylistings.com +www.priscilla-rush.us +www.prishla.info +www.privatbank.ua +www.probux.com +www.products-and-services.com +www.profitreload.com +www.projectcounter.org +www.projectwonderful.com +www.promolnk.com +www.promoterbanner.com +www.promotions.yahoo.com +www.propellerpops.com +www.properly-investigate.com +www.prtracker.com +www.psychics4free.com +www.ptp22.com +www.pubdirecte.com +www.putoppose.net +www.qadabra.com +www.qdigital.co.il +www.qqc.co +www.qrcodetrackers.com +www.qrtrackers.com +www.qualaroo.com +www.qualitylegion.com +www.quantserve.com +www.questionmarket.com +www.quick-search-results.com +www.quizilla.com +www.quotestream.com +www.qwex.net +www.qwiklnk.com +www.rachel-billips.us +www.rachel-blubaugh.us +www.rachel-oxley.us +www.rackshack-affiliates.net +www.radar11ab.co.uk +www.radarurl.com +www.randall-mccabe.us +www.rapid-search-results.com +www.real-marketing.com +www.realcounter.eu +www.realresultspublish.com +www.realtracker.com +www.recorded-email.com +www.recreativ.ru +www.redcounter.net +www.redirsvc.com +www.reformal.ru +www.reisenhjelp.com +www.relevant-research.com +www.renata-winstead.us +www.renee-gratton.us +www.renee-neubauer.us +www.research-artisan.com +www.researchersfind.com +www.researchfocuses.com +www.researchshowing.com +www.retail-affiliates.com +www.retargetpro.net +www.return.to +www.revadstrk.com +www.revenue.net +www.revmob.com +www.revmobmobileadnetwork.com +www.rewardsflow.com +www.rextk.com +www.rextopia.com +www.rextrk.com +www.rgadvert.com +www.richelle-crandell.us +www.rmbn.ru +www.roars.com +www.robotreplay.com +www.roiadtracker.com +www.roitracker.com +www.rosemary-macy.us +www.roxyaffiliates.com +www.rsmrttracking.com +www.rtsg.com +www.ruclicks.com +www.ruralworkforcecenter.com +www.s-tracking.com +www.sadie-dimick.us +www.safelinking.net +www.safelinktracker.com +www.samsawesomesite.info +www.sara-maddix.us +www.sarah-maurer.us +www.savethis.clickability.com +www.scarlett-lorenzo.us +www.scribol.com +www.scriptshead.com +www.sdp1.us +www.sdp2.us +www.search-fast-results.com +www.search-feature.com +www.search-features.com +www.search-finds.com +www.search-function.com +www.search-goals.com +www.search-images.com +www.search-local-find.com +www.search-query.com +www.search-revealed.com +www.search-reveals.com +www.search-safe.com +www.searchacts.com +www.searchadv.com +www.searchbrings.com +www.searchcapability.com +www.searchdifferential.com +www.searchdiscovered.com +www.searches-find.com +www.searchesfind.com +www.searchesreveal.com +www.searchfastresults.com +www.searchindicates.com +www.searching-mails.org +www.searchintegral.com +www.searchlinear.com +www.searchmaybe.com +www.searchparticipants.com +www.searchpeack.com +www.searchpremier.com +www.searchproduces.com +www.searchproduction.com +www.searchrediscovered.com +www.searchreinvented.com +www.searchrestricted.com +www.searchresultsguide.com +www.searchswitch.com +www.searchtermresults.com +www.searchthanks.com +www.searchwe.com +www.searchwebresults.com +www.secoptim.com +www.secretgrowth-05954.us +www.secretgrowth-06034.us +www.secretgrowth-06753.us +www.secretgrowth-17483.us +www.secretgrowth-27689.us +www.secretgrowth-34288.us +www.secretgrowth-53664.us +www.secretgrowth-56231.us +www.secretgrowth-56324.us +www.secretgrowth-67220.us +www.secretgrowth-89653.us +www.secretgrowth-9489.us +www.secretgrowth-97676.us +www.secrets40.com +www.securepaths.com +www.securetraklink.com +www.sedotracker.com +www.sedotracker.de +www.seebetterresults.com +www.seek-results.com +www.seekqueryresults.com +www.seekresultsreturned.com +www.seevolution.com +www.sekindo.co.il +www.sekindo.com +www.self-destructing-email.com +www.self-destructing.com +www.self-destructingemail.com +www.selfdestructing.com +www.selfdestructingemail.com +www.selfdestructingmessage.com +www.selfnetwork.com +www.selina-krouse.us +www.sellfy.com +www.semrush.com +www.send4fun.com +www.senseiproducts.com +www.seotoolscentral.com +www.serpanel.com +www.setihome.com +www.seumundomobile.com.pt +www.sexsponsors.com +www.sgiz.mobi +www.sgizmo.com +www.shannon-eaglin.us +www.shantel-newberry.us +www.shantel-poulin.us +www.shara-brimer.us +www.shareasale.com +www.shari-baskerville.us +www.shari-spinner.us +www.shayla-mcmorris.us +www.sheila-hair.us +www.shelley-piatt.us +www.sheri-hauser.us +www.sherri-wang.us +www.sherry-jasper.us +www.sherry-klingbeil.us +www.shinystat.com +www.shinystat.it +www.shirley-cuadrado.us +www.shirley-rivet.us +www.shonda-nowicki.us +www.shopexplorer.com +www.shortlnk.us +www.showm3.com +www.showroomvip.com +www.sidedivx.com +www.silvia-maffei.us +www.simona-stanford.us +www.simone-longoria.us +www.simonsearch.com +www.sitemeter.com +www.sitepal.com +www.sitestat.com +www.sitetracker.com +www.skimlinks.com +www.skyhookwireless.com +www.smart-ip.net +www.smart-scripts.com +www.smartcj.com +www.smarterrorpage.com +www.smartshoppernetworks.com +www.smarttrk.com +www.smilepop.com +www.smjmp.net +www.smoothscrollapp.com +www.smrtclick.com +www.snapengage.com +www.snklink.us +www.socialize-it.com +www.sociomantic.com +www.soclock.com +www.sofia-lathem.us +www.somanyhits.info +www.sondra-donalson.us +www.sonia-brough.us +www.sonia-pantoja.us +www.sonja-rascon.us +www.sonya-howland.us +www.sophia-bevis.us +www.sparkimg.com +www.specificmedia.com +www.speedclicks.ero-advertising.com +www.sperse.com +www.spinbox.net +www.splashpageadvertising.com +www.sponsorads.de +www.spotsniper.ru +www.spycash.biz +www.spylog.com +www.spylog.ru +www.sq2trk2.com +www.squarehang.net +www.srv2trking.com +www.ssangyong.co.il +www.ssaproductlaunches.com +www.stacia-jose.us +www.stacia-ware.us +www.stacie-caffey.us +www.starterdir.ru +www.statcount.com +www.statcounter.com +www.statistik.biz +www.stats24.net +www.stats4all.com +www.stats4you.com +www.statuncore.com +www.stayinhomeandlovinit.com +www.stefani-holderman.us +www.stefanie-mahood.us +www.stella-shulman.us +www.stephanie-caster.us +www.stephany-ashe.us +www.stephany-boris.us +www.stepstone.112.2o7.net +www.storedsearch.com +www.stream-online.net +www.streamcastnetworks.com +www.su600.com +www.suddenlyfind.com +www.sue-reale.us +www.suncountryair.com +www.sunopenoffice.112.2o7.net +www.superfish.com +www.sureonlinefind.com +www.surfernetwork.com +www.surfers.ro +www.surveyinteractive.co.uk +www.surveynetworks.com +www.susana-liedtke.us +www.susanna-warriner.us +www.susanne-billiot.us +www.suzi-vogelsang.us +www.swimsuitnetwork.com +www.systembiz.biz +www.tabatha-hansen.us +www.taggstar.com +www.tagjunction.com +www.talia-mettler.us +www.tangibledownload.com +www.tantrack.info +www.tapfortap.com +www.tarah-mathers.us +www.tarakc1.net +www.targad.com +www.targetedlistings.net +www.targetmarketingusa.com +www.targetraffics.com +www.teamcpm.me +www.teamcpm.us +www.teresa-taveras.us +www.terri-camarena.us +www.terri-macomber.us +www.terri-thrailkill.us +www.tesimages.com +www.tess-clevenger.us +www.tess-nell.us +www.text-link-ads.com +www.textad.net +www.tgpmanager.com +www.theaffiliate.us +www.thecounter.com +www.theoads.com +www.theresa-buchman.us +www.theresa-ellett.us +www.theresa-zirkle.us +www.thetrafficstat.net +www.thevanda.tk +www.thindivide.com +www.thisteddagblad.dk +www.thor-cpa.com +www.thumb.ero-advertising.com +www.tickerassist.co.uk +www.tidd.ly +www.tiffanie-doane.us +www.tiffanie-machin.us +www.tiffany-santee.us +www.tigerloads.com +www.tina-skiles.us +www.tinbuadserv.com +www.tiniurl.us +www.tisha-kiesel.us +www.tisha-stickney.us +www.titanads1.com +www.titanads2.com +www.titanads3.com +www.titanads4.com +www.titanads5.com +www.tldadserv.com +www.tlvmedia.com +www.tmpjmp.com +www.tns-counter.ru +www.tojoh.info +www.tonya-chabot.us +www.toolbarcounter.com +www.toolshack.com +www.top-ro.ro +www.top100search.com +www.toplisthyip.com +www.toppagefinder.com +www.toptrafficsource.com +www.tori-gram.us +www.tori-rakes.us +www.total-media.net +www.totalping.com +www.tracemyip.org +www.traceworks.com +www.traci-sirianni.us +www.tracikj182.com +www.track.net +www.trackalyzer.com +www.trackbacksecure.com +www.trackedclicks.com +www.trackerclick2web.com +www.trackhost.com +www.tracking.mobitracker.info +www.tracking999.com +www.trackingbin.com +www.trackingstatalytics.com +www.tracklead.net +www.tracknewsletter.com +www.trackyourstats.com +www.tracy-hatley.us +www.tradetraffic.com +www.traffic-exchanger.net +www.traffic4you.de +www.trafficads.com +www.trafficcash.biz +www.trafficcenter.com +www.trafficfile.com +www.trafficgigolos.com +www.traffichold.com +www.traffichome.com +www.trafficjuicer.com +www.trafficjunky.net +www.trafficmagnet.com +www.trafficmonster.com +www.trafficmultiplier.com +www.trafficoasis.com +www.trafficswarm.com +www.traffictrader.net +www.traffictraders.com +www.trafficvendors.com +www.trafic.ro +www.tribalfusion.com +www.trisha-meikle.us +www.trivia2mobile.com +www.trk2it4.com +www.trkcpamedia.com +www.trksst.com +www.trkur.com +www.trkzen.com +www.trollzeweb.com +www.truebooter.com +www.truongton.net +www.trustoffertracker.com +www.trw12.com +www.tryry.info +www.tuberewards.com +www.tudoparablogs2.hpg.com.br +www.tumri.net +www.tvsquad.com +www.tynt.com +www.typiol.com +www.tyxo.bg +www.uclick.com +www.ukbanners.com +www.ukrotsel.ru +www.ulock.it +www.ultimatelyfind.com +www.ultimatelyreveal.com +www.um-per.com +www.unadvertising.info +www.unlck.net +www.unlikelysearch.com +www.upsellit.com +www.urban-search.com +www.urlstats.com +www.usarevenue.com +www.usearchmedia.com +www.usrecordexpungement.us +www.uur.at +www.valarie-marceau.us +www.valeria-tremper.us +www.valerie-mcmullen.us +www.valerie-nilson.us +www.valueclickmedia.com +www.valuesponsor.com +www.vanessa-cohn.us +www.vayavicio.com +www.vectormarketing.com +www.veronica-hoeppner.us +www.vibrantmedia.com +www.video-loader.com +www.videoweed.es +www.viewbix.com +www.viglink.com +www.vignette.com +www.vikingtrck.com +www.vinceandjoesmarket.com +www.vipadshares.com +www.virads.com +www.virtual-person.com +www.visitorpath.com +www.visitorprofiler.com +www.visitweb.com +www.vml-127.com +www.vmsn.de +www.voodooparking.com +www.vroll.net +www.vsevjednom.cz +www.vstats.net +www.vstrk.com +www.w-script.com +www.wahoha.com +www.wap.co.il +www.wapdollar.in +www.web-controlling.com +www.web-counter.5u.com +www.web-marketing.8m.com +www.web-stat.com +www.webcontrolling.com +www.webcontrolling.net +www.webcounter.cc +www.webcounter.com +www.webffreestuff.com +www.webglobaltraffic.info +www.webgozar.com +www.webgozar.ir +www.webhitcounter.com +www.webhits.de +www.weblemon.pl +www.webprofile02356.us +www.webprofile13037.us +www.webprofile96241.us +www.webprowire.com +www.webproworld.com +www.webquickfind.com +www.websearch101.com +www.websense-media.co.il +www.websitehome.co.uk +www.websponsors.com +www.webstat.com +www.webstat.net +www.webstat.no +www.webtrends.com +www.webtrends.net +www.webtrendslive.com +www.wee.co.il +www.weedoit.fr +www.wendi-bell.us +www.wendi-hulsey.us +www.wesell.co.il +www.whatseek.com +www.whosread.com +www.whydowork.com +www.widgetadvertising.biz +www.widgetcontent.net +www.widgetdigital.info +www.wildrhino.com +www.win7affiliates.com +www.winkyads.com +www.witchlab.com +www.workflowboard.com +www.workfromhome.org +www.workingonline.com +www.workzip.it +www.world-marketing.net +www.wsspeed.com +www.wundercounter.com +www.wwwcartoonetwork.com +www.wwwdiscounthotel.com +www.wwwdishnetwork.com +www.wwwetracker.com +www.wwwfoodnetwork.com +www.wwwhometime.com +www.wwwthesharperimage.com +www.x1h8.com +www.xeanon.com +www.xentracking.com +www.xiti.com +www.xratedtracking.com +www.xrevtrk.com +www.xstat.pl +www.xtendmedia.com +www.xtransfer.net +www.xxxcounter.com +www.xxxcounter.de +www.ybotvisit.com +www.yceml.net +www.yeahmobi.com +www.yeppyepp.co.il +www.yesadvertising.com +www.yesno.co.il +www.yesupmicro.com +www.yesupseo.com +www.yesupweb.com +www.yllix.com +www.yoast.com +www.you2mail.com +www.youll-find.com +www.youradslab.com +www.yourcartoons.com +www.yourhitstats.com +www.youyield.com +www.ytubevideoqualitymanager.com +www.z5x.net +www.zanox-affiliate.de +www.zedo.com +www.zedoadnetwork.com +www.zeroredirect1.com +www.zetatrk.com +www.zhanzhang.net +www.zinzimo.info +www.zippeemedia.com +www.zoe-labat.us +www.ztrack.net +www1.bannner.com +www1.counter.bloke.com +www1.effectivemeasure.net +www1.freestats.com +www1.fwarnr.us +www1.ivwbox.de +www1.kliks.nl +www1.linkshare.com +www1.massivepass.com +www1.mpnrs.com +www1.mystats.nl +www1.perf.overture.com +www1.yesadvertising.com +www10.indiads.com +www10.mystats.nl +www10.overture.com +www10.sitetracker.com +www10.yesadvertising.com +www11.yesadvertising.com +www12.yesadvertising.com +www14.a8.net +www14.yesadvertising.com +www15.ad.tomshardware.com +www2.addfreestats.com +www2.adhost.com +www2.alloydigital.com +www2.applifier.com +www2.arielrebel.com +www2.bannner.com +www2.burstnet.com +www2.buttonware.net +www2.click-fr.com +www2.clustrmaps.com +www2.counter.bloke.com +www2.cqcounter.com +www2.crittercism.com +www2.dealtime.com +www2.doubleclick.com +www2.doubleclick.net +www2.effectivemeasure.net +www2.flowgo.com +www2.freestats.com +www2.fwarnr.us +www2.glam.com +www2.hitslink.com +www2.ivwbox.de +www2.kliks.nl +www2.mawords.com +www2.pardot.com +www2.portdetective.com +www2.revmob.com +www2.skyhookwireless.com +www2.smartadserver.com +www2.survey-poll.com +www2.surveyfocus.com +www2.telemarque.com +www21.a8.net +www22.a8.net +www24.a8.net +www26.a8.net +www28.a8.net +www2a.sitetracker.com +www3.ad.tomshardware.com +www3.adhost.com +www3.adireland.com +www3.bannner.com +www3.burstnet.com +www3.click-fr.com +www3.clustrmaps.com +www3.counter.bloke.com +www3.doubleclick.com +www3.doubleclick.net +www3.effectivemeasure.net +www3.fwarnr.us +www3.glam.com +www3.mystats.nl +www3.smartadserver.com +www3.webhostingtalk.com +www3.yesadvertising.com +www4.ad.tomshardware.com +www4.addfreestats.com +www4.bannner.com +www4.brittany-mcnulty.us +www4.burstnet.com +www4.click-fr.com +www4.clustrmaps.com +www4.counter.bloke.com +www4.directrdr.com +www4.efailf.us +www4.efailo.us +www4.effectivemeasure.net +www4.freestats.com +www4.fwarna.us +www4.fwarnf.us +www4.fwarno.us +www4.fwarnp.us +www4.fwarnr.us +www4.fwarnv.us +www4.fwarnz.us +www4.glam.com +www4.mystats.nl +www4.shiftlock.com +www4.smartadserver.com +www4.trix.net +www4.yesadvertising.com +www5.ad.tomshardware.com +www5.addfreestats.com +www5.burstnet.com +www5.click-fr.com +www5.counter.bloke.com +www5.effectivemeasure.net +www5.freestats.com +www5.fwarnr.us +www5.glam.com +www5.mystats.nl +www5.overture.com +www5.yesadvertising.com +www6.ad.tomshardware.com +www6.addfreestats.com +www6.burstnet.com +www6.counter.bloke.com +www6.effectivemeasure.net +www6.fwarnr.us +www6.glam.com +www6.mystats.nl +www6.sitetracker.com +www6.testtradedoubler.com +www60.overture.com +www61.overture.com +www7.addfreestats.com +www7.bannerspace.com +www7.counter.bloke.com +www7.effectivemeasure.net +www7.fwarnr.us +www7.glam.com +www7.mystats.nl +www7.overture.com +www7.sitetracker.com +www7.yesadvertising.com +www8.addfreestats.com +www8.counter.bloke.com +www8.effectivemeasure.net +www8.fwarnr.us +www8.glam.com +www8.mystats.nl +www8.sitetracker.com +www9.counter.bloke.com +www9.effectivemeasure.net +www9.fwarnr.us +www9.glam.com +www9.mystats.nl +www9.overture.com +www9.sitetracker.com +wwwa.sitetracker.com +wwwcartoonetwork.com +wwwdiscounthotel.com +wwwdishnetwork.com +wwwetracker.com +wwwfoodnetwork.com +wwwhometime.com +wwws.superfish.com +wwwthesharperimage.com +wwww.adleads.com +wz.tynt.com +wzeu.ask.com +wznews.ivwbox.de +wzus.ask.com +wzuy1.ask.com +x.about.com +x.cnt.my +x.go.com +x.mochiads.com +x.myspace.com +x.myspace.edgesuite.net +x.vindicosuite.com +x.zeroredirect.com +x.zeroredirect1.com +x.zeroredirect2.com +x1.ifdef.jp +x1.moarclicks.com +x1.yamanoha.com +x10.ifdef.jp +x11.ifdef.jp +x12.ifdef.jp +x13.ifdef.jp +x14.ifdef.jp +x15.ifdef.jp +x16.ifdef.jp +x17.ifdef.jp +x18.ifdef.jp +x19.ifdef.jp +x2.ifdef.jp +x2.yamanoha.com +x20.ifdef.jp +x3.extreme-dm.com +x3.ifdef.jp +x3.yamanoha.com +x4.ifdef.jp +x4.yamanoha.com +x5.ifdef.jp +x5.yamanoha.com +x6.ifdef.jp +x6.yamanoha.com +x7.ifdef.jp +x7.yamanoha.com +x8.ifdef.jp +x8.yamanoha.com +x9.ifdef.jp +xa.xingcloud.com +xads.zedo.com +xapi.juicyads.com +xban.walla.co.il +xbox.ign.us.intellitxt.com +xbox.visits.lt +xbox360.ign.us.intellitxt.com +xeanon.com +xentracking.com +xfinder.staging.adition.com +xhealthmobiltools.112.2o7.net +xiazai.duba.net +xiti.com +xl.topstat.com +xml.adtech.fr +xml.click9.com +xml.fusionxml.com +xml.ioam.de +xml.searcherpro.net +xml.trafficsyndicate.com +xml2.trafficsyndicate.com +xmts.net +xn--adspace-kvg.ero-advertising.com +xns1.vignette.com +xonio.ivwbox.de +xratedtracking.com +xrevtrk.com +xs.mochiads.com +xslt.alexa.com +xsltcache.alexa.com +xstat.pl +xtendmedia.com +xtransfer.net +xwne.wcdn.co.il +xxx.cqcounter.com +xxxcounter.com +xyz.freelogs.com +xz.duba.net +y.extreme-dm.com +y.ibsys.com +y.net-games.co.il +y.zedo.com +y.zeroredirect.com +y.zeroredirect1.com +y.zeroredirect2.com +y0.extreme-dm.com +y1.extreme-dm.com +yada.com +yadro.ru +yads.zedo.com +yahoo.ivwbox.de +yahoo.nuggad.net +yahoo.serving-sys.com +yahoo.teracent.net +yakezienetwork.go2cloud.org +yam.ivwbox.de +yang.hitbox.com +ybotvisit.com +ycv.netadsloc.com +ycv.secoptim.com +yeahmobi.com +yeahmobi.go2cloud.org +yeahmobi.hasoffers.com +yepdigital.go2cloud.org +yeppyepp.co.il +yesno.co.il +yesup.net +yesupmicro.com +yesupseo.com +yesupweb.com +ying.hitbox.com +yllix.com +yoast.com +yoclub.waphall.com +yorick.adjuggler.net +you2mail.com +youll-find.com +youradslab.com +yourcartoons.com +yourhitstats.com +yourlondonbridge.go2cloud.org +yoursubdomain.bravediary.com +yoursubdomain.bravelog.com +yoursubdomain.bravemusings.com +yoursubdomain.bravereflections.com +yoursubdomain.braveweblog.com +yoursubdomain.bravewriting.com +youyield.com +ypn-js.overture.com +ypn-js.ysm.yahoo.com +ypn-jscs.overture.com +yrkdsp.112.2o7.net +yrkeve.112.2o7.net +ysm.hauchi.com.tw +ytubevideoqualitymanager.com +z.blogads.com +z.extreme-dm.com +z.zedo.com +z.zeroredirect.com +z.zeroredirect1.com +z.zeroredirect2.com +z0.extreme-dm.com +z1.extreme-dm.com +z5x.net +z7ale.go2cloud.org +zalorasea.go2cloud.org +zanox.com +zbox.zanox.com +zbx01.ixn.local.vmsn.de +zbx02.int.vmsn.de +zbx02.ixn.local.vmsn.de +zbx02.ixn.vmsn.de +zbxproxy01.bob.local.vmsn.de +zbxproxy01.con.local.vmsn.de +zdau-builder.122.2o7.net +zdau-zdnetau.122.2o7.net +zdf.de.edgesuite.net +zdf.ivwbox.de +zdnet.ivwbox.de +zedo.com +zedoadnetwork.com +zeit.met.vgwort.de +zeit01.webtrekk.net +zeitonl.ivwbox.de +zenent.go2cloud.org +zeroredirect1.com +zetatrk.com +zeuscpa.go2cloud.org +zhanzhang.net +ziffdavisglobal.112.2o7.net +ziinga.go2cloud.org +zinzimo.info +zipcity.com +zippeemedia.com +zone01.advertik.com +zone02.advertik.com +zone03.advertik.com +zone04.advertik.com +zoom.go2cloud.org +zs.ffshrine.org +ztrack.net +zulu.go2cloud.org +zulumob.go2cloud.org +zww.ero-advertising.com +zxypenguin.people-group.su +zz.cqcounter.com +_thums.ero-advertising.com \ No newline at end of file diff --git a/assets/lightning.png b/assets/lightning.png new file mode 100644 index 0000000..0489e75 Binary files /dev/null and b/assets/lightning.png differ diff --git a/assets/startpage.png b/assets/startpage.png new file mode 100644 index 0000000..71bd4a7 Binary files /dev/null and b/assets/startpage.png differ diff --git a/assets/yahoo.png b/assets/yahoo.png new file mode 100644 index 0000000..4d1725d Binary files /dev/null and b/assets/yahoo.png differ diff --git a/assets/yandex.png b/assets/yandex.png new file mode 100644 index 0000000..3b73662 Binary files /dev/null and b/assets/yandex.png differ diff --git a/ic_launcher.png b/ic_launcher.png index 60cf725..050d3e7 100644 Binary files a/ic_launcher.png and b/ic_launcher.png differ diff --git a/ic_launcher_small.png b/ic_launcher_small.png index 03c2a09..9682c5f 100644 Binary files a/ic_launcher_small.png and b/ic_launcher_small.png differ diff --git a/proguard-project.txt b/proguard-project.txt deleted file mode 100644 index 39a2e09..0000000 --- a/proguard-project.txt +++ /dev/null @@ -1,69 +0,0 @@ -# To enable ProGuard in your project, edit project.properties -# to define the proguard.config property as described in that file. -# -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in ${sdk.dir}/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the ProGuard -# include property in project.properties. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: --keepclassmembers class fqcn.of.javascript.interface.for.webview { - public *; -} - --keep class acr.browser.barebones.webviewclasses.CustomChromeClient{ - public *; - private *; - protected *; -} - --keep class acr.browser.barebones.webviewclasses.CustomWebViewClient{ - public *; - private *; - protected *; -} - --keep class acr.browser.barebones.customwebview.CustomWebView{ - public *; - private *; - protected *; -} - --keep class acr.browser.barebones.activities.BrowserActivity{ - public void browserSettings(...); - public void makeTab(...); - public void newTab(...); - public void onLongClick(...); -} - --keep class acr.browser.barebones.incognitoclasses.IncognitoChromeClient{ - public *; - private *; - protected *; -} - --keep class acr.browser.barebones.incognitoclasses.IncognitoWebViewClient{ - public *; - private *; - protected *; -} - --keep class acr.browser.barebones.customwebview.IncognitoWebView{ - public *; - private *; - protected *; -} - --keep class acr.browser.barebones.activities.IncognitoModeActivity{ - public void browserSettings(...); - public void makeTab(...); - public void newTab(...); -} diff --git a/res/anim/down.xml b/res/anim/down.xml deleted file mode 100644 index 359f325..0000000 --- a/res/anim/down.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/res/anim/left.xml b/res/anim/left.xml deleted file mode 100644 index b699407..0000000 --- a/res/anim/left.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/res/anim/right.xml b/res/anim/right.xml deleted file mode 100644 index 5634516..0000000 --- a/res/anim/right.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/res/anim/rotate.xml b/res/anim/rotate.xml deleted file mode 100644 index 0d319f2..0000000 --- a/res/anim/rotate.xml +++ /dev/null @@ -1,10 +0,0 @@ - - \ No newline at end of file diff --git a/res/anim/slide_down.xml b/res/anim/slide_down.xml deleted file mode 100644 index 0864271..0000000 --- a/res/anim/slide_down.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/res/anim/slide_up.xml b/res/anim/slide_up.xml deleted file mode 100644 index ee24c69..0000000 --- a/res/anim/slide_up.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/res/anim/up.xml b/res/anim/up.xml deleted file mode 100644 index 4f8e748..0000000 --- a/res/anim/up.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/res/drawable-hdpi/action_search.png b/res/drawable-hdpi/action_search.png new file mode 100644 index 0000000..f12e005 Binary files /dev/null and b/res/drawable-hdpi/action_search.png differ diff --git a/res/drawable-hdpi/back.png b/res/drawable-hdpi/back.png deleted file mode 100644 index 8672a33..0000000 Binary files a/res/drawable-hdpi/back.png and /dev/null differ diff --git a/res/drawable-hdpi/drawer_shadow.9.png b/res/drawable-hdpi/drawer_shadow.9.png new file mode 100644 index 0000000..224cc4f Binary files /dev/null and b/res/drawable-hdpi/drawer_shadow.9.png differ diff --git a/res/drawable-hdpi/exit.png b/res/drawable-hdpi/ic_action_back.png similarity index 100% rename from res/drawable-hdpi/exit.png rename to res/drawable-hdpi/ic_action_back.png diff --git a/res/drawable-hdpi/ic_action_back_dark.png b/res/drawable-hdpi/ic_action_back_dark.png new file mode 100644 index 0000000..9360175 Binary files /dev/null and b/res/drawable-hdpi/ic_action_back_dark.png differ diff --git a/res/drawable-hdpi/ic_action_copy.png b/res/drawable-hdpi/ic_action_copy.png new file mode 100644 index 0000000..563e0bb Binary files /dev/null and b/res/drawable-hdpi/ic_action_copy.png differ diff --git a/res/drawable-hdpi/stop.png b/res/drawable-hdpi/ic_action_delete.png similarity index 100% rename from res/drawable-hdpi/stop.png rename to res/drawable-hdpi/ic_action_delete.png diff --git a/res/drawable-hdpi/forward.png b/res/drawable-hdpi/ic_action_forward.png similarity index 100% rename from res/drawable-hdpi/forward.png rename to res/drawable-hdpi/ic_action_forward.png diff --git a/res/drawable-hdpi/ic_action_forward_dark.png b/res/drawable-hdpi/ic_action_forward_dark.png new file mode 100644 index 0000000..b023a19 Binary files /dev/null and b/res/drawable-hdpi/ic_action_forward_dark.png differ diff --git a/res/drawable-hdpi/ic_action_incognito.png b/res/drawable-hdpi/ic_action_incognito.png new file mode 100644 index 0000000..2a64196 Binary files /dev/null and b/res/drawable-hdpi/ic_action_incognito.png differ diff --git a/res/drawable-hdpi/ic_bookmark.png b/res/drawable-hdpi/ic_bookmark.png new file mode 100644 index 0000000..a75825c Binary files /dev/null and b/res/drawable-hdpi/ic_bookmark.png differ diff --git a/res/drawable-hdpi/ic_bookmark_dark.png b/res/drawable-hdpi/ic_bookmark_dark.png new file mode 100644 index 0000000..f49e2de Binary files /dev/null and b/res/drawable-hdpi/ic_bookmark_dark.png differ diff --git a/res/drawable-hdpi/ic_drawer.png b/res/drawable-hdpi/ic_drawer.png new file mode 100644 index 0000000..ff7b1de Binary files /dev/null and b/res/drawable-hdpi/ic_drawer.png differ diff --git a/res/drawable-hdpi/ic_history.png b/res/drawable-hdpi/ic_history.png new file mode 100644 index 0000000..cd05210 Binary files /dev/null and b/res/drawable-hdpi/ic_history.png differ diff --git a/res/drawable-hdpi/ic_history_dark.png b/res/drawable-hdpi/ic_history_dark.png new file mode 100644 index 0000000..35ca528 Binary files /dev/null and b/res/drawable-hdpi/ic_history_dark.png differ diff --git a/res/drawable-hdpi/ic_launcher.png b/res/drawable-hdpi/ic_launcher.png index ac5cdbb..6761289 100644 Binary files a/res/drawable-hdpi/ic_launcher.png and b/res/drawable-hdpi/ic_launcher.png differ diff --git a/res/drawable-hdpi/ic_search.png b/res/drawable-hdpi/ic_search.png new file mode 100644 index 0000000..00934f2 Binary files /dev/null and b/res/drawable-hdpi/ic_search.png differ diff --git a/res/drawable-hdpi/ic_search_dark.png b/res/drawable-hdpi/ic_search_dark.png new file mode 100644 index 0000000..b826566 Binary files /dev/null and b/res/drawable-hdpi/ic_search_dark.png differ diff --git a/res/drawable-hdpi/ic_stat_download.png b/res/drawable-hdpi/ic_stat_download.png new file mode 100644 index 0000000..87d4016 Binary files /dev/null and b/res/drawable-hdpi/ic_stat_download.png differ diff --git a/res/drawable-hdpi/ic_tab_number.png b/res/drawable-hdpi/ic_tab_number.png new file mode 100644 index 0000000..122fa74 Binary files /dev/null and b/res/drawable-hdpi/ic_tab_number.png differ diff --git a/res/drawable-hdpi/webpage.png b/res/drawable-hdpi/ic_webpage.png similarity index 100% rename from res/drawable-hdpi/webpage.png rename to res/drawable-hdpi/ic_webpage.png diff --git a/res/drawable-hdpi/loading.png b/res/drawable-hdpi/loading.png deleted file mode 100644 index 300cc22..0000000 Binary files a/res/drawable-hdpi/loading.png and /dev/null differ diff --git a/res/drawable-hdpi/new_tab.png b/res/drawable-hdpi/new_tab.png deleted file mode 100644 index 0e835d9..0000000 Binary files a/res/drawable-hdpi/new_tab.png and /dev/null differ diff --git a/res/drawable-hdpi/options.png b/res/drawable-hdpi/options.png deleted file mode 100644 index 587d97e..0000000 Binary files a/res/drawable-hdpi/options.png and /dev/null differ diff --git a/res/drawable-hdpi/plus.png b/res/drawable-hdpi/plus.png deleted file mode 100644 index a122b88..0000000 Binary files a/res/drawable-hdpi/plus.png and /dev/null differ diff --git a/res/drawable-hdpi/refresh.png b/res/drawable-hdpi/refresh.png deleted file mode 100644 index 89a3f5e..0000000 Binary files a/res/drawable-hdpi/refresh.png and /dev/null differ diff --git a/res/drawable-mdpi/action_search.png b/res/drawable-mdpi/action_search.png new file mode 100644 index 0000000..587d9e0 Binary files /dev/null and b/res/drawable-mdpi/action_search.png differ diff --git a/res/drawable-mdpi/back.png b/res/drawable-mdpi/back.png deleted file mode 100644 index 5cf3708..0000000 Binary files a/res/drawable-mdpi/back.png and /dev/null differ diff --git a/res/drawable-mdpi/drawer_shadow.9.png b/res/drawable-mdpi/drawer_shadow.9.png new file mode 100644 index 0000000..3797f99 Binary files /dev/null and b/res/drawable-mdpi/drawer_shadow.9.png differ diff --git a/res/drawable-mdpi/exit.png b/res/drawable-mdpi/ic_action_back.png similarity index 100% rename from res/drawable-mdpi/exit.png rename to res/drawable-mdpi/ic_action_back.png diff --git a/res/drawable-mdpi/ic_action_back_dark.png b/res/drawable-mdpi/ic_action_back_dark.png new file mode 100644 index 0000000..c9ce654 Binary files /dev/null and b/res/drawable-mdpi/ic_action_back_dark.png differ diff --git a/res/drawable-mdpi/ic_action_copy.png b/res/drawable-mdpi/ic_action_copy.png new file mode 100644 index 0000000..c7f6a0e Binary files /dev/null and b/res/drawable-mdpi/ic_action_copy.png differ diff --git a/res/drawable-mdpi/stop.png b/res/drawable-mdpi/ic_action_delete.png similarity index 100% rename from res/drawable-mdpi/stop.png rename to res/drawable-mdpi/ic_action_delete.png diff --git a/res/drawable-mdpi/forward.png b/res/drawable-mdpi/ic_action_forward.png similarity index 100% rename from res/drawable-mdpi/forward.png rename to res/drawable-mdpi/ic_action_forward.png diff --git a/res/drawable-mdpi/ic_action_forward_dark.png b/res/drawable-mdpi/ic_action_forward_dark.png new file mode 100644 index 0000000..1998ab6 Binary files /dev/null and b/res/drawable-mdpi/ic_action_forward_dark.png differ diff --git a/res/drawable-mdpi/ic_action_incognito.png b/res/drawable-mdpi/ic_action_incognito.png new file mode 100644 index 0000000..462cf56 Binary files /dev/null and b/res/drawable-mdpi/ic_action_incognito.png differ diff --git a/res/drawable-mdpi/ic_bookmark.png b/res/drawable-mdpi/ic_bookmark.png new file mode 100644 index 0000000..a9c5ab3 Binary files /dev/null and b/res/drawable-mdpi/ic_bookmark.png differ diff --git a/res/drawable-mdpi/ic_bookmark_dark.png b/res/drawable-mdpi/ic_bookmark_dark.png new file mode 100644 index 0000000..92ab315 Binary files /dev/null and b/res/drawable-mdpi/ic_bookmark_dark.png differ diff --git a/res/drawable-mdpi/ic_drawer.png b/res/drawable-mdpi/ic_drawer.png new file mode 100644 index 0000000..fb681ba Binary files /dev/null and b/res/drawable-mdpi/ic_drawer.png differ diff --git a/res/drawable-mdpi/ic_history.png b/res/drawable-mdpi/ic_history.png new file mode 100644 index 0000000..a735d2c Binary files /dev/null and b/res/drawable-mdpi/ic_history.png differ diff --git a/res/drawable-mdpi/ic_history_dark.png b/res/drawable-mdpi/ic_history_dark.png new file mode 100644 index 0000000..d61fb03 Binary files /dev/null and b/res/drawable-mdpi/ic_history_dark.png differ diff --git a/res/drawable-mdpi/ic_launcher.png b/res/drawable-mdpi/ic_launcher.png index b891dfd..4afec3a 100644 Binary files a/res/drawable-mdpi/ic_launcher.png and b/res/drawable-mdpi/ic_launcher.png differ diff --git a/res/drawable-mdpi/ic_search.png b/res/drawable-mdpi/ic_search.png new file mode 100644 index 0000000..e16c624 Binary files /dev/null and b/res/drawable-mdpi/ic_search.png differ diff --git a/res/drawable-mdpi/ic_search_dark.png b/res/drawable-mdpi/ic_search_dark.png new file mode 100644 index 0000000..3516c9e Binary files /dev/null and b/res/drawable-mdpi/ic_search_dark.png differ diff --git a/res/drawable-mdpi/ic_stat_download.png b/res/drawable-mdpi/ic_stat_download.png new file mode 100644 index 0000000..b97b1c0 Binary files /dev/null and b/res/drawable-mdpi/ic_stat_download.png differ diff --git a/res/drawable-mdpi/ic_tab_number.png b/res/drawable-mdpi/ic_tab_number.png new file mode 100644 index 0000000..75435ef Binary files /dev/null and b/res/drawable-mdpi/ic_tab_number.png differ diff --git a/res/drawable-mdpi/webpage.png b/res/drawable-mdpi/ic_webpage.png similarity index 100% rename from res/drawable-mdpi/webpage.png rename to res/drawable-mdpi/ic_webpage.png diff --git a/res/drawable-mdpi/loading.png b/res/drawable-mdpi/loading.png deleted file mode 100644 index a16d656..0000000 Binary files a/res/drawable-mdpi/loading.png and /dev/null differ diff --git a/res/drawable-mdpi/new_tab.png b/res/drawable-mdpi/new_tab.png deleted file mode 100644 index 928b265..0000000 Binary files a/res/drawable-mdpi/new_tab.png and /dev/null differ diff --git a/res/drawable-mdpi/options.png b/res/drawable-mdpi/options.png deleted file mode 100644 index a195da4..0000000 Binary files a/res/drawable-mdpi/options.png and /dev/null differ diff --git a/res/drawable-mdpi/plus.png b/res/drawable-mdpi/plus.png deleted file mode 100644 index 7063155..0000000 Binary files a/res/drawable-mdpi/plus.png and /dev/null differ diff --git a/res/drawable-mdpi/refresh.png b/res/drawable-mdpi/refresh.png deleted file mode 100644 index 21aadb8..0000000 Binary files a/res/drawable-mdpi/refresh.png and /dev/null differ diff --git a/res/drawable-xhdpi/action_search.png b/res/drawable-xhdpi/action_search.png new file mode 100644 index 0000000..3549f84 Binary files /dev/null and b/res/drawable-xhdpi/action_search.png differ diff --git a/res/drawable-xhdpi/back.png b/res/drawable-xhdpi/back.png deleted file mode 100644 index 75cc6f5..0000000 Binary files a/res/drawable-xhdpi/back.png and /dev/null differ diff --git a/res/drawable-xhdpi/bar.9.png b/res/drawable-xhdpi/bar.9.png deleted file mode 100644 index 9de9051..0000000 Binary files a/res/drawable-xhdpi/bar.9.png and /dev/null differ diff --git a/res/drawable-xhdpi/bg_inactive.9.png b/res/drawable-xhdpi/bg_inactive.9.png deleted file mode 100644 index f8b3ac4..0000000 Binary files a/res/drawable-xhdpi/bg_inactive.9.png and /dev/null differ diff --git a/res/drawable-xhdpi/bg_press.9.png b/res/drawable-xhdpi/bg_press.9.png deleted file mode 100644 index 5e25a00..0000000 Binary files a/res/drawable-xhdpi/bg_press.9.png and /dev/null differ diff --git a/res/drawable-xhdpi/book.9.png b/res/drawable-xhdpi/book.9.png deleted file mode 100644 index 0d12394..0000000 Binary files a/res/drawable-xhdpi/book.9.png and /dev/null differ diff --git a/res/drawable-xhdpi/book_press.9.png b/res/drawable-xhdpi/book_press.9.png deleted file mode 100644 index 56d31b5..0000000 Binary files a/res/drawable-xhdpi/book_press.9.png and /dev/null differ diff --git a/res/drawable-xhdpi/clearbg.9.png b/res/drawable-xhdpi/clearbg.9.png deleted file mode 100644 index 54ef4d7..0000000 Binary files a/res/drawable-xhdpi/clearbg.9.png and /dev/null differ diff --git a/res/drawable-xhdpi/drawer_shadow.9.png b/res/drawable-xhdpi/drawer_shadow.9.png new file mode 100644 index 0000000..fa3d853 Binary files /dev/null and b/res/drawable-xhdpi/drawer_shadow.9.png differ diff --git a/res/drawable-xhdpi/edit_text_bg.9.png b/res/drawable-xhdpi/edit_text_bg.9.png new file mode 100644 index 0000000..92c9b21 Binary files /dev/null and b/res/drawable-xhdpi/edit_text_bg.9.png differ diff --git a/res/drawable-xhdpi/exit.png b/res/drawable-xhdpi/ic_action_back.png similarity index 100% rename from res/drawable-xhdpi/exit.png rename to res/drawable-xhdpi/ic_action_back.png diff --git a/res/drawable-xhdpi/ic_action_back_dark.png b/res/drawable-xhdpi/ic_action_back_dark.png new file mode 100644 index 0000000..1bcf9b5 Binary files /dev/null and b/res/drawable-xhdpi/ic_action_back_dark.png differ diff --git a/res/drawable-xhdpi/ic_action_copy.png b/res/drawable-xhdpi/ic_action_copy.png new file mode 100644 index 0000000..20bfb85 Binary files /dev/null and b/res/drawable-xhdpi/ic_action_copy.png differ diff --git a/res/drawable-xhdpi/stop.png b/res/drawable-xhdpi/ic_action_delete.png similarity index 100% rename from res/drawable-xhdpi/stop.png rename to res/drawable-xhdpi/ic_action_delete.png diff --git a/res/drawable-xhdpi/forward.png b/res/drawable-xhdpi/ic_action_forward.png similarity index 100% rename from res/drawable-xhdpi/forward.png rename to res/drawable-xhdpi/ic_action_forward.png diff --git a/res/drawable-xhdpi/ic_action_forward_dark.png b/res/drawable-xhdpi/ic_action_forward_dark.png new file mode 100644 index 0000000..ae667a8 Binary files /dev/null and b/res/drawable-xhdpi/ic_action_forward_dark.png differ diff --git a/res/drawable-xhdpi/ic_action_incognito.png b/res/drawable-xhdpi/ic_action_incognito.png new file mode 100644 index 0000000..01d5588 Binary files /dev/null and b/res/drawable-xhdpi/ic_action_incognito.png differ diff --git a/res/drawable-xhdpi/ic_bookmark.png b/res/drawable-xhdpi/ic_bookmark.png new file mode 100644 index 0000000..8341f99 Binary files /dev/null and b/res/drawable-xhdpi/ic_bookmark.png differ diff --git a/res/drawable-xhdpi/ic_bookmark_dark.png b/res/drawable-xhdpi/ic_bookmark_dark.png new file mode 100644 index 0000000..83578f3 Binary files /dev/null and b/res/drawable-xhdpi/ic_bookmark_dark.png differ diff --git a/res/drawable-xhdpi/ic_drawer.png b/res/drawable-xhdpi/ic_drawer.png new file mode 100644 index 0000000..b9bc3d7 Binary files /dev/null and b/res/drawable-xhdpi/ic_drawer.png differ diff --git a/res/drawable-xhdpi/ic_history.png b/res/drawable-xhdpi/ic_history.png new file mode 100644 index 0000000..a5c0f95 Binary files /dev/null and b/res/drawable-xhdpi/ic_history.png differ diff --git a/res/drawable-xhdpi/ic_history_dark.png b/res/drawable-xhdpi/ic_history_dark.png new file mode 100644 index 0000000..032694b Binary files /dev/null and b/res/drawable-xhdpi/ic_history_dark.png differ diff --git a/res/drawable-xhdpi/ic_launcher.png b/res/drawable-xhdpi/ic_launcher.png index 1001e14..ddfff9e 100644 Binary files a/res/drawable-xhdpi/ic_launcher.png and b/res/drawable-xhdpi/ic_launcher.png differ diff --git a/res/drawable-xhdpi/ic_search.png b/res/drawable-xhdpi/ic_search.png new file mode 100644 index 0000000..cebd6ac Binary files /dev/null and b/res/drawable-xhdpi/ic_search.png differ diff --git a/res/drawable-xhdpi/ic_search_dark.png b/res/drawable-xhdpi/ic_search_dark.png new file mode 100644 index 0000000..3539eab Binary files /dev/null and b/res/drawable-xhdpi/ic_search_dark.png differ diff --git a/res/drawable-xhdpi/ic_stat_download.png b/res/drawable-xhdpi/ic_stat_download.png new file mode 100644 index 0000000..3d84399 Binary files /dev/null and b/res/drawable-xhdpi/ic_stat_download.png differ diff --git a/res/drawable-xhdpi/ic_tab_number.png b/res/drawable-xhdpi/ic_tab_number.png new file mode 100644 index 0000000..6e37a45 Binary files /dev/null and b/res/drawable-xhdpi/ic_tab_number.png differ diff --git a/res/drawable-xhdpi/webpage.png b/res/drawable-xhdpi/ic_webpage.png similarity index 100% rename from res/drawable-xhdpi/webpage.png rename to res/drawable-xhdpi/ic_webpage.png diff --git a/res/drawable-xhdpi/incognito.png b/res/drawable-xhdpi/incognito.png deleted file mode 100644 index 0d1b4b7..0000000 Binary files a/res/drawable-xhdpi/incognito.png and /dev/null differ diff --git a/res/drawable-xhdpi/line.9.png b/res/drawable-xhdpi/line.9.png deleted file mode 100644 index 102c624..0000000 Binary files a/res/drawable-xhdpi/line.9.png and /dev/null differ diff --git a/res/drawable-xhdpi/loading.png b/res/drawable-xhdpi/loading.png deleted file mode 100644 index da04edb..0000000 Binary files a/res/drawable-xhdpi/loading.png and /dev/null differ diff --git a/res/drawable-xhdpi/new_tab.png b/res/drawable-xhdpi/new_tab.png deleted file mode 100644 index 75343da..0000000 Binary files a/res/drawable-xhdpi/new_tab.png and /dev/null differ diff --git a/res/drawable-xhdpi/options.png b/res/drawable-xhdpi/options.png deleted file mode 100644 index eef4526..0000000 Binary files a/res/drawable-xhdpi/options.png and /dev/null differ diff --git a/res/drawable-xhdpi/progress_bar.9.png b/res/drawable-xhdpi/progress_bar.9.png index 27f5168..3ee17a7 100644 Binary files a/res/drawable-xhdpi/progress_bar.9.png and b/res/drawable-xhdpi/progress_bar.9.png differ diff --git a/res/drawable-xhdpi/refresh.png b/res/drawable-xhdpi/refresh.png deleted file mode 100644 index 2a5b8e6..0000000 Binary files a/res/drawable-xhdpi/refresh.png and /dev/null differ diff --git a/res/drawable-xhdpi/spinner.png b/res/drawable-xhdpi/spinner.png deleted file mode 100644 index 2788f50..0000000 Binary files a/res/drawable-xhdpi/spinner.png and /dev/null differ diff --git a/res/drawable-xxhdpi/ic_bookmark.png b/res/drawable-xxhdpi/ic_bookmark.png new file mode 100644 index 0000000..2978ca3 Binary files /dev/null and b/res/drawable-xxhdpi/ic_bookmark.png differ diff --git a/res/drawable-xxhdpi/ic_bookmark_dark.png b/res/drawable-xxhdpi/ic_bookmark_dark.png new file mode 100644 index 0000000..14ec2cd Binary files /dev/null and b/res/drawable-xxhdpi/ic_bookmark_dark.png differ diff --git a/res/drawable-xxhdpi/ic_history.png b/res/drawable-xxhdpi/ic_history.png new file mode 100644 index 0000000..b0eff45 Binary files /dev/null and b/res/drawable-xxhdpi/ic_history.png differ diff --git a/res/drawable-xxhdpi/ic_history_dark.png b/res/drawable-xxhdpi/ic_history_dark.png new file mode 100644 index 0000000..25f21a3 Binary files /dev/null and b/res/drawable-xxhdpi/ic_history_dark.png differ diff --git a/res/drawable-xxhdpi/ic_launcher.png b/res/drawable-xxhdpi/ic_launcher.png index 483bcde..a5fe949 100644 Binary files a/res/drawable-xxhdpi/ic_launcher.png and b/res/drawable-xxhdpi/ic_launcher.png differ diff --git a/res/drawable-xxhdpi/ic_search.png b/res/drawable-xxhdpi/ic_search.png new file mode 100644 index 0000000..91cf822 Binary files /dev/null and b/res/drawable-xxhdpi/ic_search.png differ diff --git a/res/drawable-xxhdpi/ic_search_dark.png b/res/drawable-xxhdpi/ic_search_dark.png new file mode 100644 index 0000000..ab4c576 Binary files /dev/null and b/res/drawable-xxhdpi/ic_search_dark.png differ diff --git a/res/drawable-xxhdpi/ic_tab_number.png b/res/drawable-xxhdpi/ic_tab_number.png new file mode 100644 index 0000000..064608a Binary files /dev/null and b/res/drawable-xxhdpi/ic_tab_number.png differ diff --git a/res/drawable-xxxhdpi/ic_launcher.png b/res/drawable-xxxhdpi/ic_launcher.png index 0d5038f..ffebb7e 100644 Binary files a/res/drawable-xxxhdpi/ic_launcher.png and b/res/drawable-xxxhdpi/ic_launcher.png differ diff --git a/res/drawable/blueback.xml b/res/drawable/blueback.xml deleted file mode 100644 index 4fba658..0000000 --- a/res/drawable/blueback.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/res/drawable/bookmark.xml b/res/drawable/bookmark.xml deleted file mode 100644 index 6d483c8..0000000 --- a/res/drawable/bookmark.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/res/drawable/button.xml b/res/drawable/button.xml deleted file mode 100644 index 7defd69..0000000 --- a/res/drawable/button.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/res/drawable/card_bg.xml b/res/drawable/card_bg.xml new file mode 100644 index 0000000..b2587c7 --- /dev/null +++ b/res/drawable/card_bg.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/res/drawable/ginger_animation.xml b/res/drawable/ginger_animation.xml deleted file mode 100644 index 21f1469..0000000 --- a/res/drawable/ginger_animation.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - \ No newline at end of file diff --git a/res/drawable/ics_animation.xml b/res/drawable/ics_animation.xml deleted file mode 100644 index d875320..0000000 --- a/res/drawable/ics_animation.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - diff --git a/res/layout-large/activity_main.xml b/res/layout-large/activity_main.xml new file mode 100644 index 0000000..86112c7 --- /dev/null +++ b/res/layout-large/activity_main.xml @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout-xlarge/activity_main.xml b/res/layout-xlarge/activity_main.xml new file mode 100644 index 0000000..86112c7 --- /dev/null +++ b/res/layout-xlarge/activity_main.xml @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout/activity_main.xml b/res/layout/activity_main.xml index a9ae3e0..04a4dce 100644 --- a/res/layout/activity_main.xml +++ b/res/layout/activity_main.xml @@ -1,168 +1,195 @@ - + - - - - + android:background="@color/gray_medium" + android:orientation="vertical" > - - + android:id="@+id/progressWrapper" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="?progressColor" + android:orientation="vertical" > - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/res/layout/advanced_settings.xml b/res/layout/advanced_settings.xml index f8c4b90..b6050de 100644 --- a/res/layout/advanced_settings.xml +++ b/res/layout/advanced_settings.xml @@ -4,34 +4,6 @@ android:layout_height="match_parent" android:orientation="vertical" > - - - - - - - - + android:layout_height="60dp" + android:background="?android:attr/listChoiceBackgroundIndicator" + android:paddingRight="10dp" > - + android:orientation="vertical" > + + + + + - - - + android:layout_centerVertical="true" /> + + + android:layout_height="60dp" + android:background="?android:attr/listChoiceBackgroundIndicator" + android:paddingRight="10dp" > - + android:layout_centerVertical="true" /> - - - - - - - - - + + android:layout_height="60dp" + android:background="?android:attr/listChoiceBackgroundIndicator" + android:paddingRight="10dp" > - + android:orientation="vertical" > + + + + + + android:layout_centerVertical="true" /> + + + + + + android:text="@string/reflow" + android:layout_centerVertical="true" + android:textAppearance="?android:attr/textAppearanceMedium" /> + + + + android:layout_height="60dp" + android:background="?android:attr/listChoiceBackgroundIndicator" + android:paddingRight="10dp" > - + android:layout_centerVertical="true" /> + + + android:layout_height="60dp" + android:background="?android:attr/listChoiceBackgroundIndicator" + android:paddingRight="10dp" > - + android:orientation="vertical" > + + + + + + android:layout_alignParentRight="true" + android:layout_centerVertical="true" /> + - + + + + + android:layout_centerVertical="true" + android:orientation="vertical" > + + + + + + + + + android:layout_height="60dp" + android:background="?android:attr/listChoiceBackgroundIndicator" + android:paddingRight="10dp" > - - + android:orientation="vertical" > + + + + - + android:layout_centerVertical="true" /> - + + + android:layout_height="60dp" + android:background="?android:attr/listChoiceBackgroundIndicator" + android:paddingRight="10dp" > - + android:orientation="vertical" > + + + + + - - + android:layout_centerVertical="true" /> + + + + android:layout_height="60dp" + android:background="?android:attr/listChoiceBackgroundIndicator" + android:paddingRight="10dp" > - + android:orientation="vertical" > + + + + + - - + android:layout_centerVertical="true" /> + + + + android:layout_height="60dp" + android:background="?android:attr/listChoiceBackgroundIndicator" + android:paddingRight="10dp" > - + android:layout_centerVertical="true" /> + + + + android:layout_height="60dp" + android:background="?android:attr/listChoiceBackgroundIndicator" + android:paddingRight="10dp" > - + android:layout_centerVertical="true" /> + + + + android:layout_height="60dp" + android:background="?android:attr/listChoiceBackgroundIndicator" + android:paddingRight="10dp" > - + android:orientation="vertical" > + + + + + - + android:layout_centerVertical="true" /> + + + + android:layout_height="60dp" + android:background="?android:attr/listChoiceBackgroundIndicator" > - - + + + + android:layout_height="60dp" + android:background="?android:attr/listChoiceBackgroundIndicator" > - + + + android:layout_height="60dp" + android:background="?android:attr/listChoiceBackgroundIndicator" > + - + + + + - + android:layout_centerVertical="true" + android:orientation="vertical" > + + + + + + + + android:layout_height="60dp" + android:background="?android:attr/listChoiceBackgroundIndicator" > - - + \ No newline at end of file diff --git a/res/layout/bookmark_list_item.xml b/res/layout/bookmark_list_item.xml new file mode 100644 index 0000000..d653847 --- /dev/null +++ b/res/layout/bookmark_list_item.xml @@ -0,0 +1,32 @@ + + + + + + + + + \ No newline at end of file diff --git a/res/layout/drawer_list_item.xml b/res/layout/drawer_list_item.xml new file mode 100644 index 0000000..5658158 --- /dev/null +++ b/res/layout/drawer_list_item.xml @@ -0,0 +1,27 @@ + + + \ No newline at end of file diff --git a/res/layout/license_activity.xml b/res/layout/license_activity.xml new file mode 100644 index 0000000..7953579 --- /dev/null +++ b/res/layout/license_activity.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout/menu.xml b/res/layout/menu.xml deleted file mode 100644 index d9c513b..0000000 --- a/res/layout/menu.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/layout/menu_navigation.xml b/res/layout/menu_navigation.xml new file mode 100644 index 0000000..15af626 --- /dev/null +++ b/res/layout/menu_navigation.xml @@ -0,0 +1,23 @@ + + + + + + + + diff --git a/res/layout/search.xml b/res/layout/search.xml new file mode 100644 index 0000000..7e5eafc --- /dev/null +++ b/res/layout/search.xml @@ -0,0 +1,35 @@ + + + + + + + \ No newline at end of file diff --git a/res/layout/settings.xml b/res/layout/settings.xml index 2b33501..824df1a 100644 --- a/res/layout/settings.xml +++ b/res/layout/settings.xml @@ -1,53 +1,21 @@ - - - - - - - - - - + android:layout_height="60dp" + android:background="?android:attr/listChoiceBackgroundIndicator" + android:paddingRight="10dp" > - - - - - - + + + + + + - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - diff --git a/res/layout/tab_list_item.xml b/res/layout/tab_list_item.xml new file mode 100644 index 0000000..6fe57d5 --- /dev/null +++ b/res/layout/tab_list_item.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout/two_line_autocomplete.xml b/res/layout/two_line_autocomplete.xml index 5981a56..9bd72d3 100644 --- a/res/layout/two_line_autocomplete.xml +++ b/res/layout/two_line_autocomplete.xml @@ -1,33 +1,46 @@ - - + + + + + android:background="?android:attr/listChoiceBackgroundIndicator" + android:clickable="false" + android:orientation="vertical" + android:paddingLeft="5dp" > + + - + + \ No newline at end of file diff --git a/res/layout/video_loading_progress.xml b/res/layout/video_loading_progress.xml new file mode 100644 index 0000000..9e3e421 --- /dev/null +++ b/res/layout/video_loading_progress.xml @@ -0,0 +1,36 @@ + + + + + + + + + \ No newline at end of file diff --git a/res/menu-xlarge/incognito.xml b/res/menu-xlarge/incognito.xml new file mode 100644 index 0000000..87deeb0 --- /dev/null +++ b/res/menu-xlarge/incognito.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + diff --git a/res/menu-xlarge/main.xml b/res/menu-xlarge/main.xml new file mode 100644 index 0000000..edf26c2 --- /dev/null +++ b/res/menu-xlarge/main.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/menu/incognito.xml b/res/menu/incognito.xml new file mode 100644 index 0000000..c612759 --- /dev/null +++ b/res/menu/incognito.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/res/menu/incognito_menu.xml b/res/menu/incognito_menu.xml deleted file mode 100644 index 5d8a295..0000000 --- a/res/menu/incognito_menu.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/res/menu/main.xml b/res/menu/main.xml new file mode 100644 index 0000000..a1a73a0 --- /dev/null +++ b/res/menu/main.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/menu/menu.xml b/res/menu/menu.xml deleted file mode 100644 index 2565675..0000000 --- a/res/menu/menu.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index c9516dd..fba29d9 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -129,4 +129,4 @@ USB-Speicher nicht verfügbar! Speicher aktiv. Um ein Herunterladen zu ermöglichen, schalten Sie den USB-Speicher in der Benachrichtigung aus. - + \ No newline at end of file diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 7a89f9c..349142a 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -1,20 +1,3 @@ - - - Lightning @@ -130,4 +113,4 @@ Almacenamiento USB no disponible El almacenamiento está ocupado. Para permitir las descargar, Desactiva el almacenamiento USB desde el área de notificación. - + \ No newline at end of file diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 751e6d6..4f69a37 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -15,11 +15,11 @@ Les paramètres ne s\'appliqueront qu\'aux nouveaux onglets Activer le mode plein écran Activer JavaScript - Historique - Aj. favoris - Favoris - Partager - Paramètres - Onglet incognito - Nouvel onglet + Historique + Aj. favoris + Favoris + Partager + Paramètres + Onglet incognito + Nouvel onglet \ No newline at end of file diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index b7afe9b..a532e98 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -17,12 +17,12 @@ Impostazioni valgono solo per le nuove schede Enable fullscreen mode Enable JavaScript - History - Aggiungi ai preferiti - Segnalibri - Azione - Impostazioni - Incognito tab - New tab + History + Aggiungi ai preferiti + Segnalibri + Azione + Impostazioni + Incognito tab + New tab \ No newline at end of file diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index aaeaf62..5615ae1 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -108,4 +108,4 @@ Для загрузки файла необходима карта памяти Карта памяти недоступна Карта памяти подключена к ПК. Для начала загрузки отключите её от ПК, нажав на уведомление - + \ No newline at end of file diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 00d80de..36c6d69 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -26,7 +26,6 @@ github.com/anthonycr/Lightning-Browser Apache License 2.0 YeniAyarlar - Ayarlar Uygulama Versiyonu Çıkışta önbelleği temizleme Metin akışını etkinleştirme @@ -44,13 +43,13 @@ Geniş görünüm kullanma Genel bakış modunda sayfaları yükleme Kaybolan pencereleri başlangıçta yükleme - Geçmiş - Yer imi ekle - Yer imleri - Paylaş - Ayarlar - Gizli sekme - Yeni pencere + Geçmiş + Yer imi ekle + Yer imleri + Paylaş + Ayarlar + Gizli sekme + Yeni pencere (Hiçbir stok tarayıcı tespit edilemedi) (Desteklenen stok tarayıcı tespit edildi) diff --git a/res/values-v11/styles.xml b/res/values-v11/styles.xml deleted file mode 100644 index 8b8577b..0000000 --- a/res/values-v11/styles.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/res/values-v14/styles.xml b/res/values-v14/styles.xml deleted file mode 100644 index f42f49d..0000000 --- a/res/values-v14/styles.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 053d129..47417df 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -1,7 +1,17 @@ - Lightning + 打开导航抽屉 + 关闭导航抽屉 + 网页搜索 + 刷新页面 + 新建标签 + 分享页面 + 历史记录 + 书签列表 + 添加书签 + 复制链接 + 前进 Google 浏览器设置 允许站点访问地理位置 @@ -35,8 +45,6 @@ 启用 Cookies 从浏览器中导入书签 页面文本尺寸 - AdvancedSettings - Hello world! (推荐) (可能导致部分网页排版混乱) 搜索引擎 @@ -44,17 +52,63 @@ 使用宽视图 使用概览模式载入页面 启动时恢复丢失页面 - 历史记录 - 添加书签 - 书签列表 - 分享页面 - 应用设置 - 隐身标签 - 新建标签 (尚未检测到已支持原生浏览器) (已检测到受支持的原生浏览器) 浏览时隐藏状态栏 清除浏览器 Cookies - 启用前进后退手势控制 - + 您希望对此图片进行什么操作? + 下载 + 打开 + 您希望对此链接进行什么操作? + 分享此页面 + What would you like to do with this bookmark? + 删除 + Blank Page + 默认 UA + 桌面访问 + 移动设备 + 自定义 UA + 搜索引擎 + 确认 + 您是否需要下载此文件? + 取消 + 警告 + "非常抱歉,Google 对此做了一些更改导致 Adobe Flash 无法支持 Android 4.4 以及更高版本。" + "未检测到您的设备中安装了 Adobe Flash Player, +请先安装 Adobe Flash Player 后再启用此选项。" + Adobe Flash 无法正常支持 Android 4.2 以及更高版本并且可能导致浏览器崩溃,若您启用后出现浏览器崩溃的问题请勿对此问题进行反馈。 + User Agent + 下载目录 + 自定义主页 + 网页 + "非常抱歉,Google 对此做了一些更改导致文本重拍无法支持 Android 4.4 以及更高版本。" + 清除历史记录 + 清除 Cookies + 您是否确认清除所有浏览器历史记录? + 您是否确认清除所有浏览器历史记录 Cookies? + 确认 + 取消 + 文本大小 + 最大 + 较大 + 普通 + 较小 + 最小 + 错误 + 暂未检测到任何可导入书签的浏览器 + Title + URL + 编辑书签 + 编辑 + 新建隐身标签 + Hello world! + 默认页面 + 返回 + 页内搜索 + 正在开始下载… + 仅可下载以 \"http\" 或 \"https\" 开头的链接地址 + 未发现 SDCard + 为正常下载此文件需要 USB 存储设备。 + USB 存储不可用 + USB 存储设备目前正忙,为确保正常下载此文件请在通知栏中确认关闭 USB 大容量存储。 \ No newline at end of file diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 6a3c1df..3dca1f1 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -1,20 +1,3 @@ - - - Lightning diff --git a/res/values/attr.xml b/res/values/attr.xml new file mode 100644 index 0000000..bf73fc6 --- /dev/null +++ b/res/values/attr.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/res/values/colors.xml b/res/values/colors.xml index 1f77ce6..f6f9cda 100644 --- a/res/values/colors.xml +++ b/res/values/colors.xml @@ -6,5 +6,10 @@ #ff000000 #ff3f3f3f #ffa0a0a0 + #222222 + #dddddd + #cdcdcd + #ffffff + #1b1b1b \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index abe5155..5e85ed5 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1,6 +1,6 @@ - - - + + + + \ No newline at end of file diff --git a/src/acr/browser/barebones/activities/BrowserActivity.java b/src/acr/browser/barebones/activities/BrowserActivity.java deleted file mode 100644 index b83ef68..0000000 --- a/src/acr/browser/barebones/activities/BrowserActivity.java +++ /dev/null @@ -1,2282 +0,0 @@ -package acr.browser.barebones.activities; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Random; - -import acr.browser.barebones.R; -import acr.browser.barebones.customwebview.CustomWebView; -import acr.browser.barebones.databases.DatabaseHandler; -import acr.browser.barebones.databases.SpaceTokenizer; -import acr.browser.barebones.utilities.BookmarkPageVariables; -import acr.browser.barebones.utilities.FinalVariables; -import acr.browser.barebones.utilities.HistoryPageVariables; -import acr.browser.barebones.utilities.Utils; -import acr.browser.barebones.webviewclasses.CustomChromeClient; -import acr.browser.barebones.webviewclasses.CustomDownloadListener; -import acr.browser.barebones.webviewclasses.CustomWebViewClient; -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.AlertDialog; -import android.content.ClipData; -import android.content.ClipboardManager; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager.NameNotFoundException; -import android.content.res.Configuration; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteException; -import android.database.sqlite.SQLiteMisuseException; -import android.graphics.Bitmap; -import android.graphics.Rect; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; -import android.location.LocationManager; -import android.net.Uri; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.provider.Browser; -import android.text.TextUtils; -import android.util.DisplayMetrics; -import android.util.Log; -import android.view.GestureDetector; -import android.view.Gravity; -import android.view.KeyEvent; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.MotionEvent; -import android.view.View; -import android.view.GestureDetector.SimpleOnGestureListener; -import android.view.View.OnClickListener; -import android.view.View.OnKeyListener; -import android.view.View.OnLongClickListener; -import android.view.View.OnTouchListener; -import android.view.WindowManager; -import android.view.animation.Animation; -import android.view.animation.Animation.AnimationListener; -import android.view.animation.AnimationUtils; -import android.view.inputmethod.EditorInfo; -import android.view.inputmethod.InputMethodManager; -import android.webkit.CookieManager; -import android.webkit.CookieSyncManager; -import android.webkit.ValueCallback; -import android.webkit.WebChromeClient.CustomViewCallback; -import android.webkit.WebIconDatabase; -import android.webkit.WebSettings; -import android.webkit.WebSettings.LayoutAlgorithm; -import android.webkit.WebView; -import android.webkit.WebView.HitTestResult; -import android.widget.AdapterView; -import android.widget.AdapterView.OnItemClickListener; -import android.widget.EditText; -import android.widget.FrameLayout; -import android.widget.HorizontalScrollView; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.MultiAutoCompleteTextView; -import android.widget.PopupMenu; -import android.widget.PopupMenu.OnMenuItemClickListener; -import android.widget.ProgressBar; -import android.widget.RelativeLayout; -import android.widget.SimpleAdapter; -import android.widget.TextView; -import android.widget.TextView.OnEditorActionListener; - -@SuppressWarnings("deprecation") -public class BrowserActivity extends Activity implements OnTouchListener { - - public static class ClickHandler extends Handler { - - @Override - public void handleMessage(Message msg) { - super.handleMessage(msg); - String url = null; - url = msg.getData().getString("url"); - handleLongClickOnBookmarks(url, msg.arg1); - } - - } - - static class Handle extends Handler { - - @Override - public void handleMessage(Message msg) { - switch (msg.what) { - case 1: { - currentTab.loadUrl(getUrl.getText().toString()); - break; - } - case 2: { - // deleteTab(msg.arg1); - break; - } - case 3: { - currentTab.invalidate(); - break; - } - } - super.handleMessage(msg); - } - - } - - static class NewTabHandler extends Handler { - - @Override - public void handleMessage(Message msg) { - if (msg.what == 1) { - newTab(homepage, true); - } - super.handleMessage(msg); - } - - } - - private static BrowserActivity ACTIVITY; - - private static int index = 0; - - // constants - public static final int MAX_TABS = FinalVariables.MAX_TABS; - - public static final int MAX_BOOKMARKS = FinalVariables.MAX_BOOKMARKS; - - // variables - - public static final boolean PAID_VERSION = FinalVariables.PAID_VERSION; - public static final String HOMEPAGE = FinalVariables.HOMEPAGE; - public static final int API = FinalVariables.API; - public static final String SEPARATOR = "\\|\\$\\|SEPARATOR\\|\\$\\|"; - - public static boolean DEVICE_HAS_GPS = false; - // semi constants - public static Context mContext; - public static String mSearch; - - public static List tabList; - // variables - public static CustomWebView currentTab; - public static TextView currentTabTitle; - - public static MultiAutoCompleteTextView getUrl; - public static TextView[] urlTitle; - public static ProgressBar browserProgress; - public static CustomWebView[] main; - public static Rect bounds; - public static long timeTabPressed; - public static boolean fullScreen; - public static int[] tabOrder = new int[MAX_TABS]; - public static ValueCallback mUploadMessage; - public static ImageView refresh; - public static ProgressBar progressBar; - public static String defaultUser; - public static Drawable webpageOther; - public static Drawable incognitoPage; - public static Drawable exitTab; - public static long loadTime = 0; - public static int currentId = 0; - public static int height32; - public static int height; - public static int width; - public static int pixels; - public static int leftPad; - public static int rightPad; - public static int id; - public static int tenPad; - public static boolean isPhone = false; - public static boolean showFullScreen = false; - public static boolean noStockBrowser = true; - public static boolean gestures; - public static SharedPreferences settings; - public static SharedPreferences.Editor edit; - public static String user; - public static String[] memoryURL; - public static String[] bUrl; - public static String[] bTitle; - public static String[] columns; - public static String homepage; - public static String[][] urlToLoad; - public static FrameLayout background; - public static RelativeLayout uBar; - public static RelativeLayout screen; - public static HorizontalScrollView tabScroll; - public static Animation slideUp; - public static Animation slideDown; - public static Animation fadeOut; - public static Animation fadeIn; - public static CookieManager cookieManager; - public static Uri bookmarks; - public static Handler handler, browserHandler; - public static DatabaseHandler historyHandler; - public static Drawable inactive; - public static Drawable active; - public static LinearLayout tabLayout; - - // creates the tab and returns the ID of the view - public static int createTab(String theUrl, boolean display) { - int id = -1; - for (int n = 0; n < MAX_TABS; n++) { - if (main[n] == null) { - id = n; - break; - } - } - if (id != -1) { - if (tabList.size() > 0) { - if (display) { - if (API < 16) { - currentTabTitle.setBackgroundDrawable(inactive); - } else { - currentTabTitle.setBackground(inactive); - } - currentTabTitle.setPadding(leftPad, 0, rightPad, 0); - } - } - final TextView title = new TextView(mContext); - title.setText(mContext.getResources().getString(R.string.action_new_tab)); - if (display) { - if (API < 16) { - title.setBackgroundDrawable(active); - } else { - title.setBackground(active); - } - } else { - if (API < 16) { - title.setBackgroundDrawable(inactive); - } else { - title.setBackground(inactive); - } - } - title.setSingleLine(true); - title.setGravity(Gravity.CENTER_VERTICAL); - title.setHeight(height32); - title.setWidth(pixels); - title.setPadding(leftPad, 0, rightPad, 0); - title.setId(id); - title.setGravity(Gravity.CENTER_VERTICAL); - - title.setCompoundDrawables(webpageOther, null, exitTab, null); - - Drawable[] drawables = title.getCompoundDrawables(); - bounds = drawables[2].getBounds(); - title.setOnTouchListener(ACTIVITY); - Animation holo = AnimationUtils.loadAnimation(mContext, R.anim.up); - tabLayout.addView(title); - title.setVisibility(View.INVISIBLE); - holo.setAnimationListener(new AnimationListener() { - - @Override - public void onAnimationEnd(Animation animation) { - } - - @Override - public void onAnimationRepeat(Animation animation) { - } - - @Override - public void onAnimationStart(Animation animation) { - title.setVisibility(View.VISIBLE); - } - - }); - title.startAnimation(holo); - urlTitle[id] = title; - - urlTitle[id].setText(mContext.getResources().getString(R.string.action_new_tab)); - - if (theUrl != null) { - main[id] = generateTab(id, theUrl, display); - } else { - main[id] = generateTab(id, homepage, display); - } - - } else { - Utils.showToast(mContext, "Max number of tabs reached"); - } - return id; - } - - public static void deleteBookmark(String url) { - File book = new File(mContext.getFilesDir(), "bookmarks"); - File bookUrl = new File(mContext.getFilesDir(), "bookurl"); - int n = 0; - try { - BufferedWriter bookWriter = new BufferedWriter(new FileWriter(book)); - BufferedWriter urlWriter = new BufferedWriter(new FileWriter( - bookUrl)); - while (bUrl[n] != null && n < (MAX_BOOKMARKS - 1)) { - if (!bUrl[n].equalsIgnoreCase(url)) { - bookWriter.write(bTitle[n]); - urlWriter.write(bUrl[n]); - bookWriter.newLine(); - urlWriter.newLine(); - } - n++; - } - bookWriter.close(); - urlWriter.close(); - } catch (FileNotFoundException e) { - } catch (IOException e) { - } - for (int p = 0; p < MAX_BOOKMARKS; p++) { - bUrl[p] = null; - bTitle[p] = null; - } - try { - BufferedReader readBook = new BufferedReader(new FileReader(book)); - BufferedReader readUrl = new BufferedReader(new FileReader(bookUrl)); - String t, u; - int z = 0; - while ((t = readBook.readLine()) != null - && (u = readUrl.readLine()) != null && z < MAX_BOOKMARKS) { - bUrl[z] = u; - bTitle[z] = t; - z++; - } - readBook.close(); - readUrl.close(); - } catch (IOException ignored) { - } - openBookmarks(mContext, currentTab); - } - - public static void generateHistory(final CustomWebView view, - final Context context) { - - Thread history = new Thread(new Runnable() { - - @Override - public void run() { - String historyHtml = HistoryPageVariables.Heading; - Cursor historyCursor = null; - String[][] h = new String[50][3]; - - try { - SQLiteDatabase s = historyHandler.getReadableDatabase(); - historyCursor = s.query("history", // URI - // of - columns, // Which columns to return - null, // Which rows to return (all rows) - null, // Selection arguments (none) - null, null, null); - - handler.sendEmptyMessage(1); - } catch (SQLiteException ignored) { - } catch (NullPointerException ignored) { - } catch (IllegalStateException ignored) { - } - - try { - if (historyCursor != null) { - if (historyCursor.moveToLast()) { - // Variable for holding the retrieved URL - int urlColumn = historyCursor.getColumnIndex("url"); - int titleColumn = historyCursor - .getColumnIndex("title"); - // Reference to the the column containing the URL - int n = 0; - do { - - h[n][0] = historyCursor.getString(urlColumn); - h[n][2] = h[n][0].substring(0, - Math.min(100, h[n][0].length())) - + "..."; - h[n][1] = historyCursor.getString(titleColumn); - historyHtml += (HistoryPageVariables.Part1 - + h[n][0] + HistoryPageVariables.Part2 - + h[n][1] + HistoryPageVariables.Part3 - + h[n][2] + HistoryPageVariables.Part4); - n++; - } while (n < 49 && historyCursor.moveToPrevious()); - } - } - } catch (SQLiteException ignored) { - } catch (NullPointerException ignored) { - } catch (IllegalStateException ignored) { - } - - historyHtml += BookmarkPageVariables.End; - File historyWebPage = new File(context.getFilesDir(), - "history.html"); - try { - FileWriter hWriter = new FileWriter(historyWebPage, false); - hWriter.write(historyHtml); - hWriter.close(); - } catch (IOException e) { - e.printStackTrace(); - } - if (uBar.isShown()) { - currentTabTitle.setText(mContext.getResources().getString(R.string.action_history)); - setUrlText(""); - getUrl.setPadding(tenPad, 0, tenPad, 0); - } - - view.loadUrl("file://" + historyWebPage); - } - - }); - history.run(); - } - - public static CustomWebView generateTab(final int pageToView, String Url, - final boolean display) { - CustomWebView view = new CustomWebView(mContext); - view.setId(pageToView); - view.setWebViewClient(new CustomWebViewClient(ACTIVITY)); - view.setWebChromeClient(new CustomChromeClient(ACTIVITY)); - if (API > 8) { - view.setDownloadListener(new CustomDownloadListener(ACTIVITY)); - } - main[pageToView] = view; - if (display) { - if (currentId != -1) { - background.removeView(currentTab); - } - background.addView(view); - view.requestFocus(); - currentId = pageToView; - currentTab = main[pageToView]; - currentTabTitle = urlTitle[pageToView]; - } - uBar.bringToFront(); - if (Url.contains("about:home")) { - goBookmarks(mContext, view); - } else if (Url.contains("about:blank")) { - view.loadUrl(""); - } else { - view.loadUrl(Url); - } - Log.i("Browser", "tab complete"); - return view; - } - - public static String[] getArray(String input) { - return input.split(SEPARATOR); - } - - public static void goBack(CustomWebView view) { - if (view.isShown() && view.canGoBack() && gestures) { - view.goBack(); - } - Animation left = AnimationUtils.loadAnimation(mContext, R.anim.left); - background.startAnimation(left); - - } - - static List> getBookmarks() { - List> bookmarks = new ArrayList>(); - File bookUrl = new File(mContext.getFilesDir(), "bookurl"); - File book = new File(mContext.getFilesDir(), "bookmarks"); - try { - BufferedReader readUrl = new BufferedReader(new FileReader(bookUrl)); - BufferedReader readBook = new BufferedReader(new FileReader(book)); - String u, t; - while ((u = readUrl.readLine()) != null - && (t = readBook.readLine()) != null) { - Map map = new HashMap(); - map.put("title", '\u2605' + " " + t); - map.put("url", u); - bookmarks.add(map); - } - readBook.close(); - readUrl.close(); - } catch (FileNotFoundException ignored) { - } catch (IOException ignored) { - } - return bookmarks; - } - - static void goBookmarks(Context context, CustomWebView view) { - File book = new File(context.getFilesDir(), "bookmarks"); - File bookUrl = new File(context.getFilesDir(), "bookurl"); - try { - BufferedReader readBook = new BufferedReader(new FileReader(book)); - BufferedReader readUrl = new BufferedReader(new FileReader(bookUrl)); - String t, u; - int n = 0; - while ((t = readBook.readLine()) != null - && (u = readUrl.readLine()) != null && n < MAX_BOOKMARKS) { - bUrl[n] = u; - bTitle[n] = t; - - n++; - } - readBook.close(); - readUrl.close(); - } catch (FileNotFoundException ignored) { - } catch (IOException ignored) { - } - openBookmarks(context, view); - } - - public static void goForward(CustomWebView view) { - if (view.isShown() && view.canGoForward() && gestures) { - view.goForward(); - } - Animation right = AnimationUtils.loadAnimation(mContext, R.anim.right); - background.startAnimation(right); - } - - public static void handleLongClickOnBookmarks(final String clickedURL, - final int n) { - if (clickedURL != null) { - - DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - switch (which) { - case DialogInterface.BUTTON_POSITIVE: { - renameBookmark(clickedURL); - break; - } - case DialogInterface.BUTTON_NEGATIVE: { - main[n].loadUrl(clickedURL); - break; - } - case DialogInterface.BUTTON_NEUTRAL: { - deleteBookmark(clickedURL); - break; - } - } - } - }; - - AlertDialog.Builder builder = new AlertDialog.Builder(mContext); // dialog - builder.setMessage(mContext.getResources().getString(R.string.dialog_bookmark)) - .setPositiveButton(mContext.getResources().getString(R.string.action_edit), dialogClickListener) - .setNegativeButton(mContext.getResources().getString(R.string.action_open), dialogClickListener) - .setNeutralButton(mContext.getResources().getString(R.string.action_delete), dialogClickListener).show(); - } - } - - public static int newId() { - - Random n = new Random(); - int id = n.nextInt(); - - while (tabList.contains(id)) { - id = n.nextInt(); - } - return id; - } - - // new tab method, takes the id of the tab to be created and the url to load - public static int newTab(final String theUrl, final boolean display) { - Log.i("Browser", "making tab"); - homepage = settings.getString("home", HOMEPAGE); - int finalID = createTab(theUrl, display); - if (finalID != -1) { - tabList.add(finalID); - if (display) { - currentId = finalID; - currentTab = main[finalID]; - currentTabTitle = urlTitle[finalID]; - } - - return finalID; - } else { - return 0; - } - } - - public static void onCreateWindow(Message resultMsg) { - newTab("", true); - WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; - transport.setWebView(currentTab); - resultMsg.sendToTarget(); - browserHandler.postDelayed(new Runnable() { - @Override - public void run() { - currentTab.loadUrl(getUrl.getText().toString()); - } - }, 500); - } - - public static void onHideCustomView(FrameLayout fullScreenContainer, - CustomViewCallback mCustomViewCallback, int orientation) { - if (!settings.getBoolean("hidestatus", false)) { - ACTIVITY.getWindow().clearFlags( - WindowManager.LayoutParams.FLAG_FULLSCREEN); - } - FrameLayout screen = (FrameLayout) ACTIVITY.getWindow().getDecorView(); - screen.removeView(fullScreenContainer); - fullScreenContainer = null; - //mCustomViewCallback.onCustomViewHidden(); - //apparently causing browser to crash when video ends - ACTIVITY.setRequestedOrientation(orientation); - background.addView(currentTab); - uBar.setVisibility(View.VISIBLE); - uBar.bringToFront(); - } - - private static Message click; - - public static boolean onLongClick() { - int n = currentId; - if (currentId == -1 || currentTab == null) { - return true; - } - final HitTestResult result = currentTab.getHitTestResult(); - if (currentTab.getUrl().contains( - "file://" + mContext.getFilesDir() + "/bookmarks.html")) { - click = new Message(); - click.arg1 = n; - click.setTarget(new ClickHandler()); - currentTab.requestFocusNodeHref(click); - - return true; - } else if (result != null) { - if (result.getExtra() != null) { - if (result.getType() == 5 && API > 8) { - DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - switch (which) { - case DialogInterface.BUTTON_POSITIVE: { - int num = currentId; - newTab(result.getExtra(), false); - // urlTitle[num].performClick(); - currentId = num; - currentTab = main[num]; - currentTabTitle = urlTitle[num]; - break; - } - case DialogInterface.BUTTON_NEGATIVE: { - currentTab.loadUrl(result.getExtra()); - break; - } - case DialogInterface.BUTTON_NEUTRAL: { - if (API > 8) { - String url = result.getExtra(); - - Utils.downloadFile(mContext, url, null, null); - - } - break; - } - } - } - }; - - AlertDialog.Builder builder = new AlertDialog.Builder( - mContext); // dialog - builder.setMessage( - mContext.getResources().getString(R.string.dialog_image)) - .setPositiveButton(mContext.getResources().getString(R.string.action_new_tab), - dialogClickListener) - .setNegativeButton(mContext.getResources().getString(R.string.action_open), - dialogClickListener) - .setNeutralButton(mContext.getResources().getString(R.string.action_download), - dialogClickListener).show(); - - } else { - DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - switch (which) { - case DialogInterface.BUTTON_POSITIVE: { - int num = currentId; - newTab(result.getExtra(), false); - currentId = num; - currentTab = main[num]; - currentTabTitle = urlTitle[num]; - break; - } - case DialogInterface.BUTTON_NEGATIVE: { - currentTab.loadUrl(result.getExtra()); - break; - } - case DialogInterface.BUTTON_NEUTRAL: { - if (API < 11) { - android.text.ClipboardManager clipboard = (android.text.ClipboardManager) ACTIVITY - .getSystemService(Context.CLIPBOARD_SERVICE); - clipboard.setText(result.getExtra()); - } else { - ClipboardManager clipboard = (ClipboardManager) ACTIVITY - .getSystemService(CLIPBOARD_SERVICE); - ClipData clip = ClipData.newPlainText( - "label", result.getExtra()); - clipboard.setPrimaryClip(clip); - } - break; - } - } - } - }; - - AlertDialog.Builder builder = new AlertDialog.Builder( - mContext); // dialog - builder.setTitle(result.getExtra()) - .setMessage( - mContext.getResources().getString(R.string.dialog_link)) - .setPositiveButton(mContext.getResources().getString(R.string.action_new_tab), - dialogClickListener) - .setNegativeButton(mContext.getResources().getString(R.string.action_open), - dialogClickListener) - .setNeutralButton(mContext.getResources().getString(R.string.action_copy), dialogClickListener) - .show(); - } - } - return true; - - } else { - return false; - } - } - - public static void onPageFinished(WebView view, String url) { - if (view.isShown()) { - view.invalidate(); - progressBar.setVisibility(View.GONE); - refresh.setVisibility(View.VISIBLE); - - if (showFullScreen && uBar.isShown()) { - uBar.startAnimation(slideUp); - } - } - view.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); - Log.i("Lightning", "Page Finished"); - loadTime = System.currentTimeMillis() - loadTime; - Log.i("Lightning", "Load Time: " + loadTime); - } - - private static int numberPage; - - public static void onPageStarted(WebView view, String url, Bitmap favicon) { - Log.i("Lightning", "Page Started"); - loadTime = System.currentTimeMillis(); - numberPage = view.getId(); - - if (url.startsWith("file://")) { - view.getSettings().setUseWideViewPort(false); - } else { - view.getSettings().setUseWideViewPort( - settings.getBoolean("wideviewport", true)); - } - - if (view.isShown()) { - refresh.setVisibility(View.INVISIBLE); - progressBar.setVisibility(View.VISIBLE); - setUrlText(url); - } - - urlTitle[numberPage].setCompoundDrawables(webpageOther, null, exitTab, - null); - if (favicon != null) { - setFavicon(view.getId(), favicon); - } - - getUrl.setPadding(tenPad, 0, tenPad, 0); - urlToLoad[numberPage][0] = url; - - if (!uBar.isShown() && showFullScreen) { - uBar.startAnimation(slideDown); - } - } - - public static void onProgressChanged(int id, int progress) { - if (id == currentId) { - browserProgress.setProgress(progress); - if (progress < 100) { - browserProgress.setVisibility(View.VISIBLE); - } else { - browserProgress.setVisibility(View.GONE); - } - } - } - - public static void onReceivedTitle(int numberPage, String title) { - if (title != null && title.length() != 0) { - urlTitle[numberPage].setText(title); - urlToLoad[numberPage][1] = title; - Utils.updateHistory(mContext, mContext.getContentResolver(), - noStockBrowser, urlToLoad[numberPage][0], title); - } - } - - public static void onShowCustomView() { - ACTIVITY.getWindow().setFlags( - WindowManager.LayoutParams.FLAG_FULLSCREEN, - WindowManager.LayoutParams.FLAG_FULLSCREEN); - background.removeView(currentTab); - uBar.setVisibility(View.GONE); - } - - static void openBookmarks(Context context, CustomWebView view) { - String bookmarkHtml = BookmarkPageVariables.Heading; - - for (int n = 0; n < MAX_BOOKMARKS; n++) { - if (bUrl[n] != null) { - bookmarkHtml += (BookmarkPageVariables.Part1 + bUrl[n] - + BookmarkPageVariables.Part2 + bUrl[n] - + BookmarkPageVariables.Part3 + bTitle[n] + BookmarkPageVariables.Part4); - } - } - bookmarkHtml += BookmarkPageVariables.End; - File bookmarkWebPage = new File(context.getFilesDir(), "bookmarks.html"); - try { - FileWriter bookWriter = new FileWriter(bookmarkWebPage, false); - bookWriter.write(bookmarkHtml); - bookWriter.close(); - } catch (IOException e) { - e.printStackTrace(); - } - view.loadUrl("file://" + bookmarkWebPage); - - if (uBar.isShown()) { - currentTabTitle.setText("Bookmarks"); - setUrlText(""); - getUrl.setPadding(tenPad, 0, tenPad, 0); - } - - } - - public static void openFileChooser(ValueCallback uploadMsg) { - mUploadMessage = uploadMsg; - Intent i = new Intent(Intent.ACTION_GET_CONTENT); - i.addCategory(Intent.CATEGORY_OPENABLE); - i.setType("*/*"); - ACTIVITY.startActivityForResult( - Intent.createChooser(i, "File Chooser"), 1); - } - - public static void reinitializeSettings() { - int size = tabList.size(); - cookieManager = CookieManager.getInstance(); - CookieSyncManager.createInstance(mContext); - cookieManager.setAcceptCookie(settings.getBoolean("cookies", true)); - for (int n = 0; n < size; n++) { - main[tabList.get(n)].settingsInitialization(mContext); - } - } - - public static void renameBookmark(String url) { - index = 0; - for (int n = 0; n < MAX_BOOKMARKS; n++) { - if (bUrl[n] != null) { - if (bUrl[n].equalsIgnoreCase(url)) { - index = n; - break; - } - } - } - - final AlertDialog.Builder homePicker = new AlertDialog.Builder(mContext); - homePicker.setTitle(mContext.getResources().getString(R.string.title_edit_bookmark)); - final EditText getText = new EditText(mContext); - getText.setText(bTitle[index]); - - homePicker.setView(getText); - homePicker.setPositiveButton(mContext.getResources().getString(R.string.action_ok), - new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - bTitle[index] = getText.getText().toString(); - File book = new File(mContext.getFilesDir(), "bookmarks"); - File bookUrl = new File(mContext.getFilesDir(), - "bookurl"); - int n = 0; - try { - BufferedWriter bookWriter = new BufferedWriter( - new FileWriter(book)); - BufferedWriter urlWriter = new BufferedWriter( - new FileWriter(bookUrl)); - while (bUrl[n] != null && n < (MAX_BOOKMARKS - 1)) { - bookWriter.write(bTitle[n]); - urlWriter.write(bUrl[n]); - bookWriter.newLine(); - urlWriter.newLine(); - n++; - } - bookWriter.close(); - urlWriter.close(); - } catch (FileNotFoundException e) { - } catch (IOException e) { - } - for (int p = 0; p < MAX_BOOKMARKS; p++) { - bUrl[p] = null; - bTitle[p] = null; - } - try { - BufferedReader readBook = new BufferedReader( - new FileReader(book)); - BufferedReader readUrl = new BufferedReader( - new FileReader(bookUrl)); - String t, u; - int z = 0; - while ((t = readBook.readLine()) != null - && (u = readUrl.readLine()) != null - && z < MAX_BOOKMARKS) { - bUrl[z] = u; - bTitle[z] = t; - z++; - } - readBook.close(); - readUrl.close(); - } catch (IOException ignored) { - } - openBookmarks(mContext, currentTab); - } - }); - homePicker.show(); - - } - - static void searchTheWeb(String query, Context context) { - query = query.trim(); - currentTab.stopLoading(); - - if (query.startsWith("www.")) { - query = "http://" + query; - } else if (query.startsWith("ftp.")) { - query = "ftp://" + query; - } - - boolean containsPeriod = query.contains("."); - boolean isIPAddress = (TextUtils.isDigitsOnly(query.replace(".", "")) && (query - .replace(".", "").length() >= 4)); - boolean aboutScheme = query.contains("about:"); - boolean validURL = (query.startsWith("ftp://") - || query.startsWith("http://") || query.startsWith("file://") || query - .startsWith("https://")) || isIPAddress; - boolean isSearch = ((query.contains(" ") || !containsPeriod) && !aboutScheme); - - if (query.contains("about:home") || query.contains("about:bookmarks")) { - goBookmarks(context, currentTab); - } else if (query.contains("about:history")) { - generateHistory(currentTab, context); - } else if (isSearch) { - try { - URLEncoder.encode(query, "UTF-8"); - } catch (UnsupportedEncodingException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - currentTab.loadUrl(mSearch + query); - } else if (!validURL) { - currentTab.loadUrl("http://" + query); - } else { - currentTab.loadUrl(query); - } - } - - @SuppressWarnings("unused") - public static void setFavicon(int id, Bitmap favicon) { - Drawable icon; - icon = new BitmapDrawable(null, favicon); - icon.setBounds(0, 0, width / 2, height / 2); - if (icon != null) { - urlTitle[id].setCompoundDrawables(icon, null, exitTab, null); - } else { - urlTitle[id] - .setCompoundDrawables(webpageOther, null, exitTab, null); - } - - } - - public static void setUrlText(String url) { - if (url != null) { - if (!url.startsWith("file://")) { - getUrl.setText(url); - } else { - getUrl.setText(""); - } - } - } - - static void share() { - Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); - - // set the type - shareIntent.setType("text/plain"); - - // add a subject - shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, - urlToLoad[currentId][1]); - - // build the body of the message to be shared - String shareMessage = urlToLoad[currentId][0]; - - // add the message - shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareMessage); - - // start the chooser for sharing - mContext.startActivity(Intent.createChooser(shareIntent, - mContext.getResources().getString(R.string.dialog_title_share))); - } - - public static void toggleFullScreen() { - showFullScreen = settings.getBoolean("fullscreen", false); - CustomWebView.showFullScreen = showFullScreen; - if (fullScreen) { - background.removeView(uBar); - screen.addView(uBar); - fullScreen = false; - } else { - screen.removeView(uBar); - background.addView(uBar); - fullScreen = true; - } - } - - void back() { - ImageView exit = (ImageView) findViewById(R.id.exit); - exit.setBackgroundResource(R.drawable.button); - if (isPhone) { - RelativeLayout relativeLayout1 = (RelativeLayout) findViewById(R.id.relativeLayout1); - relativeLayout1.removeView(exit); - } - exit.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View v) { - - if (currentTab.canGoBack()) { - currentTab.goBack(); - } else { - deleteTab(currentId); - } - - } - - }); - exit.setOnLongClickListener(new OnLongClickListener() { - - @Override - public boolean onLongClick(View v) { - clearCache(); - finish(); - return true; - } - - }); - - } - - void deleteTab(final int del) { - if (API >= 11) { - main[del].onPause(); - } - main[del].stopLoading(); - main[del].clearHistory(); - main[del].setVisibility(View.GONE); - tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); - edit.putString("oldPage", urlToLoad[del][0]); - edit.commit(); - urlToLoad[del][0] = null; - urlToLoad[del][1] = null; - if (API < 16) { - urlTitle[del].setBackgroundDrawable(active); - } else { - urlTitle[del].setBackground(active); - } - - urlTitle[del].setPadding(leftPad, 0, rightPad, 0); - Animation yolo = AnimationUtils.loadAnimation(this, R.anim.down); - yolo.setAnimationListener(new AnimationListener() { - - @Override - public void onAnimationEnd(Animation animation) { - // urlTitle[del].setVisibility(View.GONE); - tabLayout.post(new Runnable() { - - @Override - public void run() { - tabLayout.removeView(urlTitle[del]); - } - - }); - findNewView(del); - if (main[del] != null) { - if (API > 11) { - main[del].onPause(); - } - if (main[del].isShown()) { - background.removeView(main[del]); - } - main[del].removeAllViews(); - main[del] = null; - } - } - - @Override - public void onAnimationRepeat(Animation animation) { - } - - @Override - public void onAnimationStart(Animation animation) { - } - - }); - urlTitle[del].startAnimation(yolo); - uBar.bringToFront(); - } - - void enter() { - getUrl.setOnKeyListener(new OnKeyListener() { - - @Override - public boolean onKey(View arg0, int arg1, KeyEvent arg2) { - - switch (arg1) { - case KeyEvent.KEYCODE_ENTER: - InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(getUrl.getWindowToken(), 0); - searchTheWeb(getUrl.getText().toString(), mContext); - return true; - default: - break; - } - return false; - } - - }); - getUrl.setOnEditorActionListener(new OnEditorActionListener() { - - @Override - public boolean onEditorAction(TextView arg0, int actionId, - KeyEvent arg2) { - if (actionId == EditorInfo.IME_ACTION_GO - || actionId == EditorInfo.IME_ACTION_DONE - || actionId == EditorInfo.IME_ACTION_NEXT - || actionId == EditorInfo.IME_ACTION_SEND - || actionId == EditorInfo.IME_ACTION_SEARCH - || (arg2.getAction() == KeyEvent.KEYCODE_ENTER)) { - InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(getUrl.getWindowToken(), 0); - searchTheWeb(getUrl.getText().toString(), mContext); - return true; - } - return false; - } - - }); - } - - @SuppressLint("HandlerLeak") - void enterUrl() { - getUrl = (MultiAutoCompleteTextView) findViewById(R.id.enterUrl); - getUrl.setPadding(tenPad, 0, tenPad, 0); - getUrl.setTextColor(getResources().getColor(android.R.color.black)); - getUrl.setPadding(tenPad, 0, tenPad, 0); - getUrl.setBackgroundResource(R.drawable.book); - getUrl.setPadding(tenPad, 0, tenPad, 0); - final List> list = new ArrayList>(); - List> books = getBookmarks(); - Iterator> it = books.iterator(); - while (it.hasNext()) { - list.add(it.next()); - } - handler = new Handler() { - - @Override - public void handleMessage(Message msg) { - - switch (msg.what) { - case 1: { - SimpleAdapter adapter = new SimpleAdapter(mContext, list, - R.layout.two_line_autocomplete, new String[] { - "title", "url" }, new int[] { R.id.title, - R.id.url }); - - getUrl.setAdapter(adapter); - - break; - } - case 2: { - - break; - } - } - } - }; - - Thread updateAutoComplete = new Thread(new Runnable() { - - @Override - public void run() { - - Cursor c = null; - Cursor managedCursor = null; - columns = new String[] { "url", "title" }; - try { - - bookmarks = Browser.BOOKMARKS_URI; - c = getContentResolver().query(bookmarks, columns, null, - null, null); - } catch (SQLiteException ignored) { - } catch (IllegalStateException ignored) { - } catch (NullPointerException ignored) { - } - - if (c != null) { - noStockBrowser = false; - Log.i("Browser", "detected AOSP browser"); - } else { - noStockBrowser = true; - Log.e("Browser", "did not detect AOSP browser"); - } - if (c != null) { - c.close(); - } - try { - - managedCursor = null; - SQLiteDatabase s = historyHandler.getReadableDatabase(); - managedCursor = s.query("history", // URI - // of - columns, // Which columns to return - null, // Which rows to return (all rows) - null, // Selection arguments (none) - null, null, null); - } catch (SQLiteException ignored) { - } catch (NullPointerException ignored) { - } catch (IllegalStateException ignored) { - } - - try { - if (managedCursor != null) { - - if (managedCursor.moveToLast()) { - - // Variable for holding the retrieved URL - - int urlColumn = managedCursor.getColumnIndex("url"); - int titleColumn = managedCursor - .getColumnIndex("title"); - // Reference to the the column containing the URL - do { - String urlA = managedCursor - .getString(urlColumn); - String title = managedCursor - .getString(titleColumn); - Map map = new HashMap(); - map.put("title", title); - map.put("url", urlA); - list.add(map); - } while (managedCursor.moveToPrevious()); - } - } - handler.sendEmptyMessage(1); - } catch (SQLiteException ignored) { - } catch (NullPointerException ignored) { - } catch (IllegalStateException ignored) { - } - managedCursor.close(); - } - - }); - try { - updateAutoComplete.start(); - } catch (NullPointerException ignored) { - } catch (SQLiteMisuseException ignored) { - } catch (IllegalStateException ignored) { - } - - getUrl.setThreshold(1); - getUrl.setTokenizer(new SpaceTokenizer()); - getUrl.setOnItemClickListener(new OnItemClickListener() { - - @Override - public void onItemClick(AdapterView arg0, View arg1, int arg2, - long arg3) { - try { - String url; - url = ((TextView) arg1.findViewById(R.id.url)).getText() - .toString(); - getUrl.setText(url); - searchTheWeb(url, mContext); - url = null; - getUrl.setPadding(tenPad, 0, tenPad, 0); - InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(getUrl.getWindowToken(), 0); - } catch (NullPointerException e) { - Log.e("Browser Error: ", - "NullPointerException on item click"); - } - } - - }); - - getUrl.setSelectAllOnFocus(true); // allows edittext to select all when - // clicked - } - - void findNewView(int id) { - int delete = tabList.indexOf(id); - int leftId = id; - boolean right = false, left = false; - if (id == currentId) { - - if (main[id].isShown()) { - main[id].startAnimation(fadeOut); - background.removeView(main[id]); - uBar.bringToFront(); - } - - if (tabList.size() > delete + 1) { - id = tabList.get(delete + 1); - if (urlTitle[id].isShown()) { - background.addView(main[id]); - main[id].setVisibility(View.VISIBLE); - uBar.bringToFront(); - if (API < 16) { - urlTitle[id].setBackgroundDrawable(active); - } else { - urlTitle[id].setBackground(active); - } - urlTitle[id].setPadding(leftPad, 0, rightPad, 0); - currentId = id; - currentTab = main[id]; - currentTabTitle = urlTitle[id]; - setUrlText(urlToLoad[currentId][0]); - getUrl.setPadding(tenPad, 0, tenPad, 0); - right = true; - if (main[id].getProgress() < 100) { - onProgressChanged(id, main[id].getProgress()); - refresh.setVisibility(View.INVISIBLE); - progressBar.setVisibility(View.VISIBLE); - } else { - onProgressChanged(id, main[id].getProgress()); - progressBar.setVisibility(View.GONE); - refresh.setVisibility(View.VISIBLE); - } - // break; - } - - } - if (!right) { - if (delete > 0) { - leftId = tabList.get(delete - 1); - if (urlTitle[leftId].isShown()) { - background.addView(main[leftId]); - main[leftId].setVisibility(View.VISIBLE); - // uBar.bringToFront(); - if (API < 16) { - urlTitle[leftId].setBackgroundDrawable(active); - } else { - urlTitle[leftId].setBackground(active); - } - urlTitle[leftId].setPadding(leftPad, 0, rightPad, 0); - currentId = leftId; - currentTab = main[leftId]; - currentTabTitle = urlTitle[leftId]; - setUrlText(urlToLoad[currentId][0]); - getUrl.setPadding(tenPad, 0, tenPad, 0); - left = true; - if (main[leftId].getProgress() < 100) { - refresh.setVisibility(View.INVISIBLE); - progressBar.setVisibility(View.VISIBLE); - onProgressChanged(leftId, - main[leftId].getProgress()); - } else { - progressBar.setVisibility(View.GONE); - refresh.setVisibility(View.VISIBLE); - onProgressChanged(leftId, - main[leftId].getProgress()); - } - // break; - } - - } - - } - - } else { - right = left = true; - } - tabList.remove(delete); - if (!(right || left)) { - if (API > 11) { - currentTab.onPause(); - } - currentTab.pauseTimers(); - clearCache(); - currentTab = null; - finish(); - } - uBar.bringToFront(); - tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); - } - - public void clearCache() { - if (settings.getBoolean("cache", false) && currentTab != null) { - currentTab.clearCache(true); - Log.i("Lightning", "Cache Cleared"); - - } - for (int n = 0; n < MAX_TABS; n++) { - if (main[n] != null) { - main[n].removeAllViews(); - main[n] = null; - } - } - } - - @Override - public void finish() { - background.clearDisappearingChildren(); - background.removeView(currentTab); - tabScroll.clearDisappearingChildren(); - super.finish(); - } - - @Override - protected void onDestroy() { - // TODO Auto-generated method stub - - super.onDestroy(); - } - - @Override - protected void onStop() { - // TODO Auto-generated method stub - - super.onStop(); - } - - void forward() { - ImageView forward = (ImageView) findViewById(R.id.forward); - forward.setBackgroundResource(R.drawable.button); - if (isPhone) { - RelativeLayout relativeLayout1 = (RelativeLayout) findViewById(R.id.relativeLayout1); - relativeLayout1.removeView(forward); - } - forward.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View v) { - if (currentTab.canGoForward()) { - currentTab.goForward(); - } - } - - }); - } - - @SuppressLint("InlinedApi") - private void initialize() { - - tabList = new ArrayList(); - bUrl = new String[MAX_BOOKMARKS]; - bTitle = new String[MAX_BOOKMARKS]; - main = new CustomWebView[MAX_TABS]; - urlTitle = new TextView[MAX_TABS]; - urlToLoad = new String[MAX_TABS][2]; - fullScreen = false; - DisplayMetrics metrics = new DisplayMetrics(); - getWindowManager().getDefaultDisplay().getMetrics(metrics); - historyHandler = new DatabaseHandler(this); - cookieManager = CookieManager.getInstance(); - CookieSyncManager.createInstance(mContext); - cookieManager.setAcceptCookie(settings.getBoolean("cookies", true)); - - progressBar = (ProgressBar) findViewById(R.id.progressBar1); - browserProgress = (ProgressBar) findViewById(R.id.progressBar); - browserProgress.setVisibility(View.GONE); - - if (API >= 11) { - progressBar.setIndeterminateDrawable(getResources().getDrawable( - R.drawable.ics_animation)); - } else { - progressBar.setIndeterminateDrawable(getResources().getDrawable( - R.drawable.ginger_animation)); - } - - showFullScreen = settings.getBoolean("fullscreen", false); - uBar = (RelativeLayout) findViewById(R.id.urlBar); - screen = (RelativeLayout) findViewById(R.id.background); - slideUp = AnimationUtils.loadAnimation(this, R.anim.slide_up); - slideDown = AnimationUtils.loadAnimation(this, R.anim.slide_down); - fadeOut = AnimationUtils.loadAnimation(this, android.R.anim.fade_out); - fadeOut.setDuration(250); - fadeIn = AnimationUtils.loadAnimation(this, android.R.anim.fade_in); - // mShortAnimationDuration = getResources().getInteger( - // android.R.integer.config_mediumAnimTime); - slideUp.setAnimationListener(new AnimationListener() { - - @Override - public void onAnimationEnd(Animation arg0) { - uBar.setVisibility(View.GONE); - } - - @Override - public void onAnimationRepeat(Animation arg0) { - - } - - @Override - public void onAnimationStart(Animation arg0) { - - } - - }); - slideDown.setAnimationListener(new AnimationListener() { - - @Override - public void onAnimationEnd(Animation animation) { - - } - - @Override - public void onAnimationRepeat(Animation animation) { - - } - - @Override - public void onAnimationStart(Animation animation) { - uBar.setVisibility(View.VISIBLE); - } - - }); - - RelativeLayout refreshLayout = (RelativeLayout) findViewById(R.id.refreshLayout); - refreshLayout.setBackgroundResource(R.drawable.button); - - // user agent - if (API < 17) { - user = new WebView(mContext).getSettings().getUserAgentString(); - } else { - user = WebSettings.getDefaultUserAgent(this); - } - - background = (FrameLayout) findViewById(R.id.holder); - defaultUser = user; // setting mobile user - // agent - switch (settings.getInt("search", 1)) { - case 0: - mSearch = settings.getString("searchurl", FinalVariables.GOOGLE_SEARCH); - if(!mSearch.startsWith("http://") && ! mSearch.startsWith("https://") ) { - mSearch = FinalVariables.GOOGLE_SEARCH; - } - break; - case 1: - mSearch = FinalVariables.GOOGLE_SEARCH; - break; - case 2: - mSearch = FinalVariables.BING_SEARCH; - break; - case 3: - mSearch = FinalVariables.YAHOO_SEARCH; - break; - case 4: - mSearch = FinalVariables.STARTPAGE_SEARCH; - break; - case 5: - mSearch = FinalVariables.DUCK_SEARCH; - break; - case 6: - mSearch = FinalVariables.BAIDU_SEARCH; - break; - case 7: - mSearch = FinalVariables.YANDEX_SEARCH; - break; - case 8: - mSearch = FinalVariables.DUCK_LITE_SEARCH; - break; - } - - exitTab = getResources().getDrawable(R.drawable.stop); // user - // agent - homepage = settings.getString("home", HOMEPAGE); // initializing - // the - // stored - // homepage - // variable - - gestures = settings.getBoolean("gestures", true); - - // initializing variables declared - - height = getResources().getDrawable(R.drawable.loading) - .getMinimumHeight(); - width = getResources().getDrawable(R.drawable.loading) - .getMinimumWidth(); - - // hides keyboard so it doesn't default pop up - this.getWindow().setSoftInputMode( - WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); - - // opens icondatabase so that favicons can be stored - WebIconDatabase.getInstance().open( - getDir("icons", MODE_PRIVATE).getPath()); - - // scroll view containing tabs - tabLayout = (LinearLayout) findViewById(R.id.tabLayout); - tabScroll = (HorizontalScrollView) findViewById(R.id.tabScroll); - tabScroll.setBackgroundColor(getResources().getColor(R.color.black)); - tabScroll.setHorizontalScrollBarEnabled(false); - if (API > 8) { - tabScroll.setOverScrollMode(View.OVER_SCROLL_NEVER); // disallow - // overscroll - } - - // image dimensions and initialization - final int dps = 175; - final float scale = getApplicationContext().getResources() - .getDisplayMetrics().density; - pixels = (int) (dps * scale + 0.5f); - leftPad = (int) (17 * scale + 0.5f); - rightPad = (int) (15 * scale + 0.5f); - height32 = (int) (32 * scale + 0.5f); - tenPad = (int) (10 * scale + 0.5f); - - webpageOther = getResources().getDrawable(R.drawable.webpage); - incognitoPage = getResources().getDrawable(R.drawable.incognito); - webpageOther.setBounds(0, 0, width / 2, height / 2); - incognitoPage.setBounds(0, 0, width / 2, height / 2); - exitTab.setBounds(0, 0, width * 2 / 3, height * 2 / 3); - - Thread startup = new Thread(new Runnable() { - - @Override - public void run() { - // restores old tabs or creates a new one - } - - }); - startup.run(); - reopenOldTabs(); - // new tab button - ImageView newTab = (ImageView) findViewById(R.id.newTab); - newTab.setBackgroundResource(R.drawable.button); - newTab.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - Handler click = new NewTabHandler(); - click.sendEmptyMessage(1); - tabScroll.postDelayed(new Runnable() { - @Override - public void run() { - tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); - } - }, 100L); - - } - }); - newTab.setOnLongClickListener(new OnLongClickListener() { - - @Override - public boolean onLongClick(View v) { - if (settings.getString("oldPage", "").length() > 0) { - newTab(settings.getString("oldPage", ""), true); - edit.putString("oldPage", ""); - edit.commit(); - tabScroll.postDelayed(new Runnable() { - @Override - public void run() { - tabScroll.smoothScrollTo(currentTabTitle.getLeft(), - 0); - } - }, 100L); - } - return true; - } - - }); - refresh = (ImageView) findViewById(R.id.refresh); - refreshLayout.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View arg0) { - - if (currentTab.getProgress() < 100) { - currentTab.stopLoading(); - } else { - currentTab.reload(); - } - } - - }); - - enterUrl(); - if (showFullScreen) { - toggleFullScreen(); - } - browserHandler = new Handle(); - - } - - private void newSettings() { - startActivity(new Intent(FinalVariables.SETTINGS_INTENT)); - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, - Intent intent) { - if (requestCode == 1) { - if (null == mUploadMessage) - return; - Uri result = intent == null || resultCode != RESULT_OK ? null - : intent.getData(); - mUploadMessage.onReceiveValue(result); - mUploadMessage = null; - - } - } - - @Override - public void onBackPressed() { - try { - if (showFullScreen && !uBar.isShown()) { - uBar.startAnimation(slideDown); - } - if (currentTab.isShown() && currentTab.canGoBack()) { - currentTab.goBack(); - } else { - deleteTab(currentId); - uBar.bringToFront(); - } - } catch (NullPointerException ignored) { - } - return; - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - if (settings.getBoolean("textreflow", false)) { - currentTab.getSettings().setLayoutAlgorithm( - LayoutAlgorithm.NARROW_COLUMNS); - } else { - currentTab.getSettings().setLayoutAlgorithm(LayoutAlgorithm.NORMAL); - } - - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); // displays main xml layout - mContext = this; - ACTIVITY = this; - settings = getSharedPreferences("settings", 0); - edit = settings.edit(); - - if (settings.getBoolean("hidestatus", false)) { - getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, - WindowManager.LayoutParams.FLAG_FULLSCREEN); - } - if (settings.getBoolean("savetabs", true)) { - String mem = settings.getString("memory", ""); - edit.putString("memory", ""); - memoryURL = new String[MAX_TABS]; - memoryURL = getArray(mem); - } - - try { - LocationManager locationManager = (LocationManager) mContext - .getSystemService(Context.LOCATION_SERVICE); - if (locationManager.getAllProviders().contains( - LocationManager.GPS_PROVIDER)) { - DEVICE_HAS_GPS = true; - } - } catch (Exception ignored) { - DEVICE_HAS_GPS = false; - } - inactive = getResources().getDrawable(R.drawable.bg_inactive); - active = getResources().getDrawable(R.drawable.bg_press); - initialize(); // sets up random stuff - options(); // allows options to be opened - enter();// enter url bar - DisplayMetrics metrics = new DisplayMetrics(); - getWindowManager().getDefaultDisplay().getMetrics(metrics); - - float widthInInches = metrics.widthPixels / metrics.xdpi; - float heightInInches = metrics.heightPixels / metrics.ydpi; - double sizeInInches = Math.sqrt(Math.pow(widthInInches, 2) - + Math.pow(heightInInches, 2)); - // 0.5" buffer for 7" devices - isPhone = sizeInInches < 6.5; - forward();// forward button - back(); - PackageInfo p; - int code = 0; - try { - p = getPackageManager().getPackageInfo(getPackageName(), 0); - code = p.versionCode; - } catch (NameNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - if (settings.getInt("first", 0) == 0) { - // navigation tips - String message = "1. Long-press back button to exit browser\n\n" - + "2. Swipe from left edge toward the right (---->) to go back\n\n" - + "3. Swipe from right edge toward the left (<----)to go forward\n\n" - + "4. Visit settings and advanced settings to change options\n\n" - + "5. Long-press on the new tab button to open the last closed tab"; - - Utils.createInformativeDialog(mContext, "Browser Tips", message); - edit.putInt("first", 1); - edit.putInt("version", code); - edit.commit(); - } else if (settings.getInt("version", code - 1) != code) { - edit.putInt("version", code); - edit.commit(); - } - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.menu, menu); - - return true; - } - - /* - * (non-Javadoc) - * - * @see android.app.Activity#onKeyDown(int, android.view.KeyEvent) - */ - @Override - public boolean onKeyDown(int keyCode, KeyEvent event) { - switch (keyCode) { - case KeyEvent.KEYCODE_SEARCH: { - getUrl.requestFocus(); - InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - manager.showSoftInput(getUrl, 0); - - break; - } - case KeyEvent.KEYCODE_F5: { - currentTab.reload(); - } - case KeyEvent.KEYCODE_ESCAPE: { - currentTab.stopLoading(); - } - case KeyEvent.KEYCODE_TAB: { - InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - if (!manager.isActive()) { - newTab(homepage, true); - } - - } - case KeyEvent.KEYCODE_F12: { - clearCache(); - finish(); - } - case KeyEvent.KEYCODE_F6: { - getUrl.selectAll(); - } - case KeyEvent.KEYCODE_F10: { - startActivity(new Intent(FinalVariables.SETTINGS_INTENT)); - } - case KeyEvent.KEYCODE_F11: { - toggleFullScreen(); - } - case KeyEvent.KEYCODE_DEL: { - InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - if (!manager.isActive()) { - currentTab.goBack(); - } - } - } - return super.onKeyDown(keyCode, event); - } - - @Override - public boolean onKeyLongPress(int keyCode, KeyEvent event) { - - if (keyCode == KeyEvent.KEYCODE_BACK) { - if (!settings.getBoolean("restoreclosed", true)) { - for (int n = 0; n < MAX_TABS; n++) { - urlToLoad[n][0] = null; - } - } - clearCache(); - finish(); - return true; - } else - return super.onKeyLongPress(keyCode, event); - } - - @Override - public void onLowMemory() { - for (int n = 0; n < MAX_TABS; n++) { - if (n != currentId && main[n] != null) { - main[n].freeMemory(); - } - } - super.onLowMemory(); - } - - @Override - protected void onNewIntent(Intent intent) { - - String url = intent.getDataString(); - int id = -1; - int download = -1; - try { - id = intent.getExtras().getInt("acr.browser.barebones.Origin") - 1; - } catch (NullPointerException e) { - id = -1; - } - try { - download = intent.getExtras().getInt( - "acr.browser.barebones.Download"); - } catch (NullPointerException e) { - download = -1; - } - if (id >= 0) { - main[id].loadUrl(url); - } else if (download == 1) { - Utils.downloadFile(mContext, url, null, null); - } else if (url != null) { - newTab(url, true); - } - - super.onNewIntent(intent); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - - switch (item.getItemId()) { - case R.id.history: - generateHistory(currentTab, mContext); - return true; - case R.id.bookmark: - if (urlToLoad[currentId][1] != null) { - if (!urlToLoad[currentId][1].equals("Bookmarks")) { - Utils.addBookmark(mContext, urlToLoad[currentId][1], - urlToLoad[currentId][0]); - } - } - return true; - case R.id.settings: - newSettings(); - return true; - case R.id.allBookmarks: - if (urlToLoad[currentId][1] == null) { - goBookmarks(mContext, currentTab); - } else if (!urlToLoad[currentId][1].equals("Bookmarks")) { - goBookmarks(mContext, currentTab); - } - - return true; - case R.id.share: - share(); - return true; - case R.id.incognito: - startActivity(new Intent(FinalVariables.INCOGNITO_INTENT)); - // newTab(number, homepage, true, true); - return true; - default: - return super.onOptionsItemSelected(item); - } - } - - @Override - protected void onPause() { - if(historyHandler != null){ - historyHandler.close(); - historyHandler = null; - } - if (currentTab != null) { - if (API >= 11) { - currentTab.onPause(); - for (int n = 0; n < MAX_TABS; n++) { - if (main[n] != null) - main[n].onPause(); - } - } - currentTab.pauseTimers(); - } - - Thread remember = new Thread(new Runnable() { - - @Override - public void run() { - String s = ""; - for (int n = 0; n < MAX_TABS; n++) { - if (urlToLoad[n][0] != null) { - s = s + urlToLoad[n][0] + "|$|SEPARATOR|$|"; - } - } - edit.putString("memory", s); - edit.commit(); - } - }); - remember.start(); - super.onPause(); - } - - @Override - protected void onResume() { - super.onResume(); - if(historyHandler == null){ - historyHandler = new DatabaseHandler(this); - } - if (currentTab != null) { - onProgressChanged(currentId, currentTab.getProgress()); - if (currentTab.getProgress() == 100) { - progressBar.setVisibility(View.GONE); - refresh.setVisibility(View.VISIBLE); - - } - if (API >= 11) { - currentTab.onResume(); - for (int n = 0; n < MAX_TABS; n++) { - if (main[n] != null) - main[n].onResume(); - } - } - } - gestures = settings.getBoolean("gestures", true); - currentTab.resumeTimers(); - reinitializeSettings(); - if (settings.getBoolean("fullscreen", false) != fullScreen) { - toggleFullScreen(); - } - - } - - private int x; - private int y; - private boolean xPress; - private Rect edge; - private final GestureDetector mGestureDetector = new GestureDetector( - mContext, new CustomGestureListener()); - - private class CustomGestureListener extends SimpleOnGestureListener { - @Override - public void onLongPress(MotionEvent e) { - deleteTab(id); - super.onLongPress(e); - } - } - - @Override - public boolean onTouch(View v, MotionEvent event) { - id = v.getId(); - try { - background.clearDisappearingChildren(); - xPress = false; - x = (int) event.getX(); - y = (int) event.getY(); - edge = new Rect(); - v.getDrawingRect(edge); - currentTabTitle.setPadding(leftPad, 0, rightPad, 0); - if (event.getAction() == MotionEvent.ACTION_DOWN) { - } else if (event.getAction() == MotionEvent.ACTION_UP) { - - if (x >= (edge.right - bounds.width() - v.getPaddingRight() - 10 * 3 / 2) - && x <= (edge.right - v.getPaddingRight() + 10 * 3 / 2) - && y >= (v.getPaddingTop() - 10 / 2) - && y <= (v.getHeight() - v.getPaddingBottom() + 10 / 2)) { - xPress = true; - } - if (id == currentId) { - if (xPress) { - deleteTab(id); - uBar.bringToFront(); - } - } else if (id != currentId) { - if (xPress) { - deleteTab(id); - } else { - if (API < 16) { - currentTabTitle.setBackgroundDrawable(inactive); - } else if (API > 15) { - currentTabTitle.setBackground(inactive); - } - currentTabTitle.setPadding(leftPad, 0, rightPad, 0); - if (!showFullScreen) { - background.addView(main[id]); - main[id].startAnimation(fadeIn); - currentTab.startAnimation(fadeOut); - background.removeView(currentTab); - uBar.bringToFront(); - } else if (API >= 12) { - main[id].setAlpha(0f); - background.addView(main[id]); - try { - main[id].animate().alpha(1f).setDuration(250); - } catch (NullPointerException ignored) { - } - background.removeView(currentTab); - uBar.bringToFront(); - } else { - background.removeView(currentTab); - background.addView(main[id]); - } - uBar.bringToFront(); - - currentId = id; - currentTab = main[id]; - currentTabTitle = urlTitle[id]; - setUrlText(urlToLoad[currentId][0]); - getUrl.setPadding(tenPad, 0, tenPad, 0); - if (API < 16) { - currentTabTitle.setBackgroundDrawable(active); - } else if (API > 15) { - currentTabTitle.setBackground(active); - } - if (currentTab.getProgress() < 100) { - refresh.setVisibility(View.INVISIBLE); - - progressBar.setVisibility(View.VISIBLE); - - } else { - progressBar.setVisibility(View.GONE); - refresh.setVisibility(View.VISIBLE); - } - onProgressChanged(currentId, currentTab.getProgress()); - tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); - currentTab.invalidate(); - } - } - - } - uBar.bringToFront(); - v.setPadding(leftPad, 0, rightPad, 0); - } catch (Exception e) { - e.printStackTrace(); - Log.e("Lightning Error", "Well we dun messed up"); - } - mGestureDetector.onTouchEvent(event); - return true; - } - - void options() { - ImageView options = (ImageView) findViewById(R.id.options); - options.setBackgroundResource(R.drawable.button); - options.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View v) { - - if (API >= 11) { - PopupMenu menu = new PopupMenu(mContext, v); - MenuInflater inflate = menu.getMenuInflater(); - inflate.inflate(R.menu.menu, menu.getMenu()); - menu.setOnMenuItemClickListener(new OnMenuItemClickListener() { - - @Override - public boolean onMenuItemClick(MenuItem item) { - - switch (item.getItemId()) { - case R.id.history: - generateHistory(currentTab, mContext); - return true; - case R.id.bookmark: - if (urlToLoad[currentId][1] != null) { - if (!urlToLoad[currentId][1] - .equals("Bookmarks")) { - Utils.addBookmark(mContext, - urlToLoad[currentId][1], - urlToLoad[currentId][0]); - } - } - return true; - case R.id.settings: - newSettings(); - return true; - case R.id.allBookmarks: - if (urlToLoad[currentId][1] == null) { - goBookmarks(mContext, currentTab); - } else if (!urlToLoad[currentId][1] - .equals("Bookmarks")) { - goBookmarks(mContext, currentTab); - } - return true; - case R.id.share: - share(); - return true; - case R.id.incognito: - startActivity(new Intent( - FinalVariables.INCOGNITO_INTENT)); - // newTab(number, homepage, true, true); - return true; - default: - return false; - } - - } - - }); - menu.show(); - } else if (API < 11) { - - openOptionsMenu(); - } - } - - }); - } - - void reopenOldTabs() { - Intent url = getIntent(); - String URL = url.getDataString(); - boolean oldTabs = false; - - if (settings.getBoolean("savetabs", true)) { - if (URL != null) { - // opens a new tab with the url if its there - int n = newTab(URL, true); - main[n].resumeTimers(); - oldTabs = true; - - } - boolean first = false; - for (String aMemoryURL : memoryURL) { - if (aMemoryURL.length() > 0) { - if (!first) { - int n = newTab("", !oldTabs); - main[n].resumeTimers(); - main[n].getSettings().setCacheMode( - WebSettings.LOAD_CACHE_ELSE_NETWORK); - main[n].loadUrl(aMemoryURL); - } else { - int n = newTab("", false); - main[n].getSettings().setCacheMode( - WebSettings.LOAD_CACHE_ELSE_NETWORK); - main[n].loadUrl(aMemoryURL); - } - oldTabs = true; - } - - } - - if (!oldTabs) { - int n = newTab(homepage, true); - main[n].resumeTimers(); - } - } else { - if (URL != null) { - // opens a new tab with the URL if its there - int n = newTab(URL, true); - main[n].resumeTimers(); - - } else { - // otherwise it opens the home-page - int n = newTab(homepage, true); - main[n].resumeTimers(); - - } - } - } -} \ No newline at end of file diff --git a/src/acr/browser/barebones/activities/IncognitoModeActivity.java b/src/acr/browser/barebones/activities/IncognitoModeActivity.java deleted file mode 100644 index 34e8585..0000000 --- a/src/acr/browser/barebones/activities/IncognitoModeActivity.java +++ /dev/null @@ -1,2158 +0,0 @@ -package acr.browser.barebones.activities; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Random; - -import acr.browser.barebones.R; -import acr.browser.barebones.customwebview.IncognitoWebView; -import acr.browser.barebones.databases.DatabaseHandler; -import acr.browser.barebones.databases.SpaceTokenizer; -import acr.browser.barebones.utilities.BookmarkPageVariables; -import acr.browser.barebones.utilities.FinalVariables; -import acr.browser.barebones.utilities.HistoryPageVariables; -import acr.browser.barebones.utilities.Utils; -import acr.browser.barebones.incognitoclasses.IncognitoChromeClient; -import acr.browser.barebones.incognitoclasses.IncognitoDownloadListener; -import acr.browser.barebones.incognitoclasses.IncognitoWebViewClient; -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.AlertDialog; -import android.content.ClipData; -import android.content.ClipboardManager; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.res.Configuration; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteException; -import android.database.sqlite.SQLiteMisuseException; -import android.graphics.Bitmap; -import android.graphics.Rect; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.provider.Browser; -import android.text.TextUtils; -import android.util.DisplayMetrics; -import android.util.Log; -import android.view.GestureDetector; -import android.view.Gravity; -import android.view.KeyEvent; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.MotionEvent; -import android.view.View; -import android.view.GestureDetector.SimpleOnGestureListener; -import android.view.View.OnClickListener; -import android.view.View.OnKeyListener; -import android.view.View.OnLongClickListener; -import android.view.View.OnTouchListener; -import android.view.WindowManager; -import android.view.animation.Animation; -import android.view.animation.Animation.AnimationListener; -import android.view.animation.AnimationUtils; -import android.view.inputmethod.EditorInfo; -import android.view.inputmethod.InputMethodManager; -import android.webkit.CookieManager; -import android.webkit.CookieSyncManager; -import android.webkit.ValueCallback; -import android.webkit.WebChromeClient.CustomViewCallback; -import android.webkit.WebIconDatabase; -import android.webkit.WebSettings; -import android.webkit.WebSettings.LayoutAlgorithm; -import android.webkit.WebView; -import android.webkit.WebView.HitTestResult; -import android.widget.AdapterView; -import android.widget.AdapterView.OnItemClickListener; -import android.widget.EditText; -import android.widget.FrameLayout; -import android.widget.HorizontalScrollView; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.MultiAutoCompleteTextView; -import android.widget.PopupMenu; -import android.widget.PopupMenu.OnMenuItemClickListener; -import android.widget.ProgressBar; -import android.widget.RelativeLayout; -import android.widget.SimpleAdapter; -import android.widget.TextView; -import android.widget.TextView.OnEditorActionListener; - -@SuppressWarnings("deprecation") -public class IncognitoModeActivity extends Activity implements OnTouchListener { - - public static class ClickHandler extends Handler { - - @Override - public void handleMessage(Message msg) { - super.handleMessage(msg); - String url = null; - url = msg.getData().getString("url"); - handleLongClickOnBookmarks(url, msg.arg1); - } - - } - - static class Handle extends Handler { - - @Override - public void handleMessage(Message msg) { - switch (msg.what) { - case 1: { - currentTab.loadUrl(getUrl.getText().toString()); - break; - } - case 2: { - // deleteTab(msg.arg1); - break; - } - case 3: { - currentTab.invalidate(); - break; - } - } - super.handleMessage(msg); - } - - } - - static class NewTabHandler extends Handler { - - @Override - public void handleMessage(Message msg) { - if (msg.what == 1) { - newTab(homepage, true); - } - super.handleMessage(msg); - } - - } - - private static IncognitoModeActivity ACTIVITY; - - private static int index = 0; - - // constants - public static final int MAX_TABS = FinalVariables.MAX_TABS; - - public static final int MAX_BOOKMARKS = FinalVariables.MAX_BOOKMARKS; - - // variables - - public static final boolean PAID_VERSION = FinalVariables.PAID_VERSION; - public static final String HOMEPAGE = FinalVariables.HOMEPAGE; - public static final int API = FinalVariables.API; - public static final String SEPARATOR = "\\|\\$\\|SEPARATOR\\|\\$\\|"; - // semi constants - public static Context mContext; - public static String SEARCH; - - public static List tabList; - // variables - public static IncognitoWebView currentTab; - public static TextView currentTabTitle; - - public static MultiAutoCompleteTextView getUrl; - public static TextView[] urlTitle; - public static ProgressBar browserProgress; - public static IncognitoWebView[] main; - public static Rect bounds; - public static long timeTabPressed; - public static boolean fullScreen; - public static int[] tabOrder = new int[MAX_TABS]; - public static ValueCallback mUploadMessage; - public static ImageView refresh; - public static ProgressBar progressBar; - public static String defaultUser; - public static Drawable incognitoPage; - public static Drawable exitTab; - public static long loadTime = 0; - public static int currentId = 0; - public static int height32; - public static int height; - public static int width; - public static int pixels; - public static int leftPad; - public static int rightPad; - public static int id; - public static int tenPad; - public static boolean isPhone = false; - public static boolean showFullScreen = false; - public static boolean noStockBrowser = true; - public static SharedPreferences settings; - public static SharedPreferences.Editor edit; - public static String user; - public static String[] bUrl; - public static String[] bTitle; - public static String[] columns; - public static String homepage; - public static String[][] urlToLoad; - public static FrameLayout background; - public static RelativeLayout uBar; - public static RelativeLayout screen; - public static HorizontalScrollView tabScroll; - public static Animation slideUp; - public static Animation slideDown; - public static Animation fadeOut; - public static Animation fadeIn; - public static CookieManager cookieManager; - public static Uri bookmarks; - public static Handler handler, browserHandler; - public static DatabaseHandler historyHandler; - public static Drawable inactive; - public static Drawable active; - public static LinearLayout tabLayout; - - // creates the tab and returns the ID of the view - public static int createTab(String theUrl, boolean display) { - int id = -1; - for (int n = 0; n < MAX_TABS; n++) { - if (main[n] == null) { - id = n; - break; - } - } - if (id != -1) { - if (tabList.size() > 0) { - if (display) { - if (API < 16) { - currentTabTitle.setBackgroundDrawable(inactive); - } else { - currentTabTitle.setBackground(inactive); - } - currentTabTitle.setPadding(leftPad, 0, rightPad, 0); - } - } - final TextView title = new TextView(mContext); - title.setText(mContext.getResources().getString(R.string.action_new_tab)); - if (display) { - if (API < 16) { - title.setBackgroundDrawable(active); - } else { - title.setBackground(active); - } - } else { - if (API < 16) { - title.setBackgroundDrawable(inactive); - } else { - title.setBackground(inactive); - } - } - title.setSingleLine(true); - title.setGravity(Gravity.CENTER_VERTICAL); - title.setHeight(height32); - title.setWidth(pixels); - title.setPadding(leftPad, 0, rightPad, 0); - title.setId(id); - title.setGravity(Gravity.CENTER_VERTICAL); - - title.setCompoundDrawables(incognitoPage, null, exitTab, null); - - Drawable[] drawables = title.getCompoundDrawables(); - bounds = drawables[2].getBounds(); - title.setOnTouchListener(ACTIVITY); - Animation holo = AnimationUtils.loadAnimation(mContext, R.anim.up); - tabLayout.addView(title); - title.setVisibility(View.INVISIBLE); - holo.setAnimationListener(new AnimationListener() { - - @Override - public void onAnimationEnd(Animation animation) { - } - - @Override - public void onAnimationRepeat(Animation animation) { - } - - @Override - public void onAnimationStart(Animation animation) { - title.setVisibility(View.VISIBLE); - } - - }); - title.startAnimation(holo); - urlTitle[id] = title; - - urlTitle[id].setText(mContext.getResources().getString(R.string.action_new_tab)); - - if (theUrl != null) { - main[id] = generateTab(id, theUrl, display); - } else { - main[id] = generateTab(id, homepage, display); - } - - } else { - Utils.showToast(mContext, "Max number of tabs reached"); - } - return id; - } - - public static void deleteBookmark(String url) { - File book = new File(mContext.getFilesDir(), "bookmarks"); - File bookUrl = new File(mContext.getFilesDir(), "bookurl"); - int n = 0; - try { - BufferedWriter bookWriter = new BufferedWriter(new FileWriter(book)); - BufferedWriter urlWriter = new BufferedWriter(new FileWriter( - bookUrl)); - while (bUrl[n] != null && n < (MAX_BOOKMARKS - 1)) { - if (!bUrl[n].equalsIgnoreCase(url)) { - bookWriter.write(bTitle[n]); - urlWriter.write(bUrl[n]); - bookWriter.newLine(); - urlWriter.newLine(); - } - n++; - } - bookWriter.close(); - urlWriter.close(); - } catch (FileNotFoundException e) { - } catch (IOException e) { - } - for (int p = 0; p < MAX_BOOKMARKS; p++) { - bUrl[p] = null; - bTitle[p] = null; - } - try { - BufferedReader readBook = new BufferedReader(new FileReader(book)); - BufferedReader readUrl = new BufferedReader(new FileReader(bookUrl)); - String t, u; - int z = 0; - while ((t = readBook.readLine()) != null - && (u = readUrl.readLine()) != null && z < MAX_BOOKMARKS) { - bUrl[z] = u; - bTitle[z] = t; - z++; - } - readBook.close(); - readUrl.close(); - } catch (IOException ignored) { - } - openBookmarks(mContext, currentTab); - } - - public static void generateHistory(final IncognitoWebView view, - final Context context) { - - Thread history = new Thread(new Runnable() { - - @Override - public void run() { - String historyHtml = HistoryPageVariables.Heading; - Cursor historyCursor = null; - String[][] h = new String[50][3]; - - try { - SQLiteDatabase s = historyHandler.getReadableDatabase(); - historyCursor = s.query("history", // URI - // of - columns, // Which columns to return - null, // Which rows to return (all rows) - null, // Selection arguments (none) - null, null, null); - - handler.sendEmptyMessage(1); - - } catch (SQLiteException ignored) { - } catch (NullPointerException ignored) { - } catch (IllegalStateException ignored) { - } - - try { - if (historyCursor != null) { - if (historyCursor.moveToLast()) { - // Variable for holding the retrieved URL - int urlColumn = historyCursor.getColumnIndex("url"); - int titleColumn = historyCursor - .getColumnIndex("title"); - // Reference to the the column containing the URL - int n = 0; - do { - - h[n][0] = historyCursor.getString(urlColumn); - h[n][2] = h[n][0].substring(0, - Math.min(100, h[n][0].length())) - + "..."; - h[n][1] = historyCursor.getString(titleColumn); - historyHtml += (HistoryPageVariables.Part1 - + h[n][0] + HistoryPageVariables.Part2 - + h[n][1] + HistoryPageVariables.Part3 - + h[n][2] + HistoryPageVariables.Part4); - n++; - } while (n < 49 && historyCursor.moveToPrevious()); - } - } - } catch (SQLiteException ignored) { - } catch (NullPointerException ignored) { - } catch (IllegalStateException ignored) { - } - - historyHtml += BookmarkPageVariables.End; - File historyWebPage = new File(context.getFilesDir(), - "history.html"); - try { - FileWriter hWriter = new FileWriter(historyWebPage, false); - hWriter.write(historyHtml); - hWriter.close(); - } catch (IOException e) { - e.printStackTrace(); - } - if (uBar.isShown()) { - currentTabTitle.setText("History"); - setUrlText(""); - getUrl.setPadding(tenPad, 0, tenPad, 0); - } - - view.loadUrl("file://" + historyWebPage); - } - - }); - history.run(); - } - - public static IncognitoWebView generateTab(final int pageToView, - String Url, final boolean display) { - IncognitoWebView view = new IncognitoWebView(mContext); - view.setId(pageToView); - view.setWebViewClient(new IncognitoWebViewClient(ACTIVITY)); - view.setWebChromeClient(new IncognitoChromeClient(ACTIVITY)); - if (API > 8) { - view.setDownloadListener(new IncognitoDownloadListener(ACTIVITY)); - } - main[pageToView] = view; - if (display) { - if (currentId != -1) { - background.removeView(currentTab); - } - background.addView(view); - view.requestFocus(); - currentId = pageToView; - currentTab = main[pageToView]; - currentTabTitle = urlTitle[pageToView]; - } - uBar.bringToFront(); - if (Url.contains("about:home")) { - goBookmarks(mContext, view); - } else if (Url.contains("about:blank")) { - view.loadUrl(""); - } else { - view.loadUrl(Url); - } - Log.i("Browser", "tab complete"); - return view; - } - - public static void goBack(IncognitoWebView view) { - if (view.isShown() && view.canGoBack()) { - view.goBack(); - } - Animation left = AnimationUtils.loadAnimation(mContext, R.anim.left); - background.startAnimation(left); - - } - - static void goBookmarks(Context context, IncognitoWebView view) { - File book = new File(context.getFilesDir(), "bookmarks"); - File bookUrl = new File(context.getFilesDir(), "bookurl"); - try { - BufferedReader readBook = new BufferedReader(new FileReader(book)); - BufferedReader readUrl = new BufferedReader(new FileReader(bookUrl)); - String t, u; - int n = 0; - while ((t = readBook.readLine()) != null - && (u = readUrl.readLine()) != null && n < MAX_BOOKMARKS) { - bUrl[n] = u; - bTitle[n] = t; - - n++; - } - readBook.close(); - readUrl.close(); - } catch (FileNotFoundException ignored) { - } catch (IOException ignored) { - } - openBookmarks(context, view); - } - - public static void goForward(IncognitoWebView view) { - if (view.isShown() && view.canGoForward()) { - view.goForward(); - } - Animation right = AnimationUtils.loadAnimation(mContext, R.anim.right); - background.startAnimation(right); - } - - public static void handleLongClickOnBookmarks(final String clickedURL, - final int n) { - if (clickedURL != null) { - - DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - switch (which) { - case DialogInterface.BUTTON_POSITIVE: { - renameBookmark(clickedURL); - break; - } - case DialogInterface.BUTTON_NEGATIVE: { - main[n].loadUrl(clickedURL); - break; - } - case DialogInterface.BUTTON_NEUTRAL: { - deleteBookmark(clickedURL); - break; - } - } - } - }; - - AlertDialog.Builder builder = new AlertDialog.Builder(mContext); // dialog - builder.setMessage(mContext.getResources().getString(R.string.dialog_bookmark)) - .setPositiveButton(mContext.getResources().getString(R.string.action_edit), dialogClickListener) - .setNegativeButton(mContext.getResources().getString(R.string.action_open), dialogClickListener) - .setNeutralButton(mContext.getResources().getString(R.string.action_delete), dialogClickListener).show(); - } - } - - public static int newId() { - - Random n = new Random(); - int id = n.nextInt(); - - while (tabList.contains(id)) { - id = n.nextInt(); - } - return id; - } - - // new tab method, takes the id of the tab to be created and the url to load - public static int newTab(final String theUrl, final boolean display) { - Log.i("Browser", "making tab"); - homepage = settings.getString("home", HOMEPAGE); - int finalID = createTab(theUrl, display); - if (finalID != -1) { - tabList.add(finalID); - if (display) { - currentId = finalID; - currentTab = main[finalID]; - currentTabTitle = urlTitle[finalID]; - } - - return finalID; - } else { - return 0; - } - } - - public static void onCreateWindow(Message resultMsg) { - newTab("", true); - WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; - transport.setWebView(currentTab); - resultMsg.sendToTarget(); - browserHandler.postDelayed(new Runnable() { - @Override - public void run() { - currentTab.loadUrl(getUrl.getText().toString()); - } - }, 500); - } - - public static void onHideCustomView(FrameLayout fullScreenContainer, - CustomViewCallback mCustomViewCallback, int orientation) { - if (!settings.getBoolean("hidestatus", false)) { - ACTIVITY.getWindow().clearFlags( - WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); - } - FrameLayout screen = (FrameLayout) ACTIVITY.getWindow().getDecorView(); - screen.removeView(fullScreenContainer); - fullScreenContainer = null; - //causing video crashes - //mCustomViewCallback.onCustomViewHidden(); - ACTIVITY.setRequestedOrientation(orientation); - background.addView(currentTab); - uBar.setVisibility(View.VISIBLE); - uBar.bringToFront(); - } - - private static Message click; - - public static boolean onLongClick() { - int n = currentId; - if (currentId == -1 || currentTab == null) { - return true; - } - final HitTestResult result = currentTab.getHitTestResult(); - - if (currentTab.getUrl().contains( - "file://" + mContext.getFilesDir() + "/bookmarks.html")) { - click = new Message(); - click.arg1 = n; - click.setTarget(new ClickHandler()); - currentTab.requestFocusNodeHref(click); - - return true; - } else if (result != null) { - if (result.getExtra() != null) { - if (result.getType() == 5 && API > 8) { - DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - switch (which) { - case DialogInterface.BUTTON_POSITIVE: { - int num = currentId; - newTab(result.getExtra(), false); - // urlTitle[num].performClick(); - currentId = num; - currentTab = main[num]; - currentTabTitle = urlTitle[num]; - break; - } - case DialogInterface.BUTTON_NEGATIVE: { - currentTab.loadUrl(result.getExtra()); - break; - } - case DialogInterface.BUTTON_NEUTRAL: { - if (API > 8) { - String url = result.getExtra(); - - Utils.downloadFile(mContext, url, null, null); - - } - break; - } - } - } - }; - - AlertDialog.Builder builder = new AlertDialog.Builder( - mContext); // dialog - builder.setMessage( - mContext.getResources().getString(R.string.dialog_image)) - .setPositiveButton(mContext.getResources().getString(R.string.action_new_tab), - dialogClickListener) - .setNegativeButton(mContext.getResources().getString(R.string.action_open), - dialogClickListener) - .setNeutralButton(mContext.getResources().getString(R.string.action_download), - dialogClickListener).show(); - - } else { - DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - switch (which) { - case DialogInterface.BUTTON_POSITIVE: { - int num = currentId; - newTab(result.getExtra(), false); - currentId = num; - currentTab = main[num]; - currentTabTitle = urlTitle[num]; - break; - } - case DialogInterface.BUTTON_NEGATIVE: { - currentTab.loadUrl(result.getExtra()); - break; - } - case DialogInterface.BUTTON_NEUTRAL: { - if (API < 11) { - android.text.ClipboardManager clipboard = (android.text.ClipboardManager) ACTIVITY - .getSystemService(Context.CLIPBOARD_SERVICE); - clipboard.setText(result.getExtra()); - } else { - ClipboardManager clipboard = (ClipboardManager) ACTIVITY - .getSystemService(CLIPBOARD_SERVICE); - ClipData clip = ClipData.newPlainText( - "label", result.getExtra()); - clipboard.setPrimaryClip(clip); - } - break; - } - } - } - }; - - AlertDialog.Builder builder = new AlertDialog.Builder( - mContext); // dialog - builder.setTitle(result.getExtra()) - .setMessage( - mContext.getResources().getString(R.string.dialog_link)) - .setPositiveButton(mContext.getResources().getString(R.string.action_new_tab), - dialogClickListener) - .setNegativeButton(mContext.getResources().getString(R.string.action_open), - dialogClickListener) - .setNeutralButton(mContext.getResources().getString(R.string.action_copy), dialogClickListener) - .show(); - } - } - return true; - - } else { - return false; - } - } - - public static void onPageFinished(WebView view, String url) { - if (view.isShown()) { - view.invalidate(); - progressBar.setVisibility(View.GONE); - refresh.setVisibility(View.VISIBLE); - - if (showFullScreen && uBar.isShown()) { - uBar.startAnimation(slideUp); - } - } - view.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); - Log.i("Lightning", "Page Finished"); - loadTime = System.currentTimeMillis() - loadTime; - Log.i("Lightning", "Load Time: " + loadTime); - } - - private static int numberPage; - - public static void onPageStarted(WebView view, String url, Bitmap favicon) { - Log.i("Lightning", "Page Started"); - loadTime = System.currentTimeMillis(); - numberPage = view.getId(); - - if (url.startsWith("file://")) { - view.getSettings().setUseWideViewPort(false); - } else { - view.getSettings().setUseWideViewPort( - settings.getBoolean("wideviewport", true)); - } - - if (view.isShown()) { - refresh.setVisibility(View.INVISIBLE); - progressBar.setVisibility(View.VISIBLE); - setUrlText(url); - } - - urlTitle[numberPage].setCompoundDrawables(incognitoPage, null, exitTab, - null); - if (favicon != null) { - setFavicon(view.getId(), favicon); - } - - getUrl.setPadding(tenPad, 0, tenPad, 0); - urlToLoad[numberPage][0] = url; - - if (!uBar.isShown() && showFullScreen) { - uBar.startAnimation(slideDown); - } - } - - public static void onProgressChanged(int id, int progress) { - if (id == currentId) { - browserProgress.setProgress(progress); - if (progress < 100) { - browserProgress.setVisibility(View.VISIBLE); - } else { - browserProgress.setVisibility(View.GONE); - } - } - } - - public static void onReceivedTitle(int numberPage, String title) { - if (title != null && title.length() != 0) { - urlTitle[numberPage].setText(title); - urlToLoad[numberPage][1] = title; - } - } - - public static void onShowCustomView() { - ACTIVITY.getWindow().setFlags( - WindowManager.LayoutParams.FLAG_FULLSCREEN, - WindowManager.LayoutParams.FLAG_FULLSCREEN); - background.removeView(currentTab); - uBar.setVisibility(View.GONE); - } - - static void openBookmarks(Context context, IncognitoWebView view) { - String bookmarkHtml = BookmarkPageVariables.Heading; - - for (int n = 0; n < MAX_BOOKMARKS; n++) { - if (bUrl[n] != null) { - bookmarkHtml += (BookmarkPageVariables.Part1 + bUrl[n] - + BookmarkPageVariables.Part2 + bUrl[n] - + BookmarkPageVariables.Part3 + bTitle[n] + BookmarkPageVariables.Part4); - } - } - bookmarkHtml += BookmarkPageVariables.End; - File bookmarkWebPage = new File(context.getFilesDir(), "bookmarks.html"); - try { - FileWriter bookWriter = new FileWriter(bookmarkWebPage, false); - bookWriter.write(bookmarkHtml); - bookWriter.close(); - } catch (IOException e) { - e.printStackTrace(); - } - view.loadUrl("file://" + bookmarkWebPage); - - if (uBar.isShown()) { - currentTabTitle.setText("Bookmarks"); - setUrlText(""); - getUrl.setPadding(tenPad, 0, tenPad, 0); - } - - } - - public static void openFileChooser(ValueCallback uploadMsg) { - mUploadMessage = uploadMsg; - Intent i = new Intent(Intent.ACTION_GET_CONTENT); - i.addCategory(Intent.CATEGORY_OPENABLE); - i.setType("*/*"); - ACTIVITY.startActivityForResult( - Intent.createChooser(i, "File Chooser"), 1); - } - - public static void reinitializeSettings() { - int size = tabList.size(); - for (int n = 0; n < size; n++) { - main[tabList.get(n)].settingsInitialization(mContext); - } - } - - public static void renameBookmark(String url) { - index = 0; - for (int n = 0; n < MAX_BOOKMARKS; n++) { - if (bUrl[n] != null) { - if (bUrl[n].equalsIgnoreCase(url)) { - index = n; - break; - } - } - } - - final AlertDialog.Builder homePicker = new AlertDialog.Builder(mContext); - homePicker.setTitle(mContext.getResources().getString(R.string.title_edit_bookmark)); - final EditText getText = new EditText(mContext); - getText.setText(bTitle[index]); - - homePicker.setView(getText); - homePicker.setPositiveButton(mContext.getResources().getString(R.string.action_ok), - new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - bTitle[index] = getText.getText().toString(); - File book = new File(mContext.getFilesDir(), "bookmarks"); - File bookUrl = new File(mContext.getFilesDir(), - "bookurl"); - int n = 0; - try { - BufferedWriter bookWriter = new BufferedWriter( - new FileWriter(book)); - BufferedWriter urlWriter = new BufferedWriter( - new FileWriter(bookUrl)); - while (bUrl[n] != null && n < (MAX_BOOKMARKS - 1)) { - bookWriter.write(bTitle[n]); - urlWriter.write(bUrl[n]); - bookWriter.newLine(); - urlWriter.newLine(); - n++; - } - bookWriter.close(); - urlWriter.close(); - } catch (FileNotFoundException e) { - } catch (IOException e) { - } - for (int p = 0; p < MAX_BOOKMARKS; p++) { - bUrl[p] = null; - bTitle[p] = null; - } - try { - BufferedReader readBook = new BufferedReader( - new FileReader(book)); - BufferedReader readUrl = new BufferedReader( - new FileReader(bookUrl)); - String t, u; - int z = 0; - while ((t = readBook.readLine()) != null - && (u = readUrl.readLine()) != null - && z < MAX_BOOKMARKS) { - bUrl[z] = u; - bTitle[z] = t; - z++; - } - readBook.close(); - readUrl.close(); - } catch (IOException ignored) { - } - openBookmarks(mContext, currentTab); - } - }); - homePicker.show(); - - } - - static void searchTheWeb(String query, Context context) { - query = query.trim(); - currentTab.stopLoading(); - - if (query.startsWith("www.")) { - query = "http://" + query; - } else if (query.startsWith("ftp.")) { - query = "ftp://" + query; - } - - boolean containsPeriod = query.contains("."); - boolean isIPAddress = (TextUtils.isDigitsOnly(query.replace(".", "")) && (query - .replace(".", "").length() >= 4)); - boolean aboutScheme = query.contains("about:"); - boolean validURL = (query.startsWith("ftp://") - || query.startsWith("http://") || query.startsWith("file://") || query - .startsWith("https://")) || isIPAddress; - boolean isSearch = ((query.contains(" ") || !containsPeriod) && !aboutScheme); - - if (query.contains("about:home") || query.contains("about:bookmarks")) { - goBookmarks(context, currentTab); - } else if (query.contains("about:history")) { - generateHistory(currentTab, context); - } else if (isSearch) { - try { - URLEncoder.encode(query, "UTF-8"); - } catch (UnsupportedEncodingException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - currentTab.loadUrl(SEARCH + query); - } else if (!validURL) { - currentTab.loadUrl("http://" + query); - } else { - currentTab.loadUrl(query); - } - } - - public static void setFavicon(int id, Bitmap favicon) { - Drawable icon; - icon = new BitmapDrawable(null, favicon); - icon.setBounds(0, 0, width / 2, height / 2); - urlTitle[id].setCompoundDrawables(incognitoPage, null, exitTab, null); - - } - - public static void setUrlText(String url) { - if (url != null) { - if (!url.startsWith("file://")) { - getUrl.setText(url); - } else { - getUrl.setText(""); - } - } - } - - static void share() { - Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); - - // set the type - shareIntent.setType("text/plain"); - - // add a subject - shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, - urlToLoad[currentId][1]); - - // build the body of the message to be shared - String shareMessage = urlToLoad[currentId][0]; - - // add the message - shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareMessage); - - // start the chooser for sharing - mContext.startActivity(Intent.createChooser(shareIntent, - mContext.getResources().getString(R.string.dialog_title_share))); - } - - public static void toggleFullScreen() { - showFullScreen = settings.getBoolean("fullscreen", false); - IncognitoWebView.showFullScreen = showFullScreen; - if (fullScreen) { - background.removeView(uBar); - screen.addView(uBar); - fullScreen = false; - } else { - screen.removeView(uBar); - background.addView(uBar); - fullScreen = true; - } - } - - void back() { - ImageView exit = (ImageView) findViewById(R.id.exit); - exit.setBackgroundResource(R.drawable.button); - if (isPhone) { - RelativeLayout relativeLayout1 = (RelativeLayout) findViewById(R.id.relativeLayout1); - relativeLayout1.removeView(exit); - } - exit.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View v) { - - if (currentTab.canGoBack()) { - currentTab.goBack(); - } else { - deleteTab(currentId); - } - - } - - }); - exit.setOnLongClickListener(new OnLongClickListener() { - - @Override - public boolean onLongClick(View v) { - clearCache(); - finish(); - return true; - } - - }); - - } - - void deleteTab(final int del) { - if (API >= 11) { - main[del].onPause(); - } - main[del].stopLoading(); - main[del].clearHistory(); - main[del].setVisibility(View.GONE); - tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); - edit.putString("oldPage", urlToLoad[del][0]); - edit.commit(); - urlToLoad[del][0] = null; - urlToLoad[del][1] = null; - if (API < 16) { - urlTitle[del].setBackgroundDrawable(active); - } else { - urlTitle[del].setBackground(active); - } - - urlTitle[del].setPadding(leftPad, 0, rightPad, 0); - Animation yolo = AnimationUtils.loadAnimation(this, R.anim.down); - yolo.setAnimationListener(new AnimationListener() { - - @Override - public void onAnimationEnd(Animation animation) { - // urlTitle[del].setVisibility(View.GONE); - tabLayout.post(new Runnable() { - - @Override - public void run() { - tabLayout.removeView(urlTitle[del]); - } - - }); - findNewView(del); - if (main[del] != null) { - if (API > 11) { - main[del].onPause(); - } - if (main[del].isShown()) { - background.removeView(main[del]); - } - main[del].removeAllViews(); - main[del] = null; - } - } - - @Override - public void onAnimationRepeat(Animation animation) { - } - - @Override - public void onAnimationStart(Animation animation) { - } - - }); - urlTitle[del].startAnimation(yolo); - uBar.bringToFront(); - } - - void enter() { - getUrl.setOnKeyListener(new OnKeyListener() { - - @Override - public boolean onKey(View arg0, int arg1, KeyEvent arg2) { - - switch (arg1) { - case KeyEvent.KEYCODE_ENTER: - InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(getUrl.getWindowToken(), 0); - searchTheWeb(getUrl.getText().toString(), mContext); - return true; - default: - break; - } - return false; - } - - }); - getUrl.setOnEditorActionListener(new OnEditorActionListener() { - - @Override - public boolean onEditorAction(TextView arg0, int actionId, - KeyEvent arg2) { - if (actionId == EditorInfo.IME_ACTION_GO - || actionId == EditorInfo.IME_ACTION_DONE - || actionId == EditorInfo.IME_ACTION_NEXT - || actionId == EditorInfo.IME_ACTION_SEND - || actionId == EditorInfo.IME_ACTION_SEARCH - || (arg2.getAction() == KeyEvent.KEYCODE_ENTER)) { - InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(getUrl.getWindowToken(), 0); - searchTheWeb(getUrl.getText().toString(), mContext); - return true; - } - return false; - } - - }); - } - - static List> getBookmarks() { - List> bookmarks = new ArrayList>(); - File bookUrl = new File(mContext.getFilesDir(), "bookurl"); - File book = new File(mContext.getFilesDir(), "bookmarks"); - try { - BufferedReader readUrl = new BufferedReader(new FileReader(bookUrl)); - BufferedReader readBook = new BufferedReader(new FileReader(book)); - String u, t; - while ((u = readUrl.readLine()) != null - && (t = readBook.readLine()) != null) { - Map map = new HashMap(); - map.put("title", '\u2605' + " " + t); - map.put("url", u); - bookmarks.add(map); - } - readBook.close(); - readUrl.close(); - } catch (FileNotFoundException ignored) { - } catch (IOException ignored) { - } - return bookmarks; - } - - @SuppressLint("HandlerLeak") - void enterUrl() { - getUrl = (MultiAutoCompleteTextView) findViewById(R.id.enterUrl); - getUrl.setPadding(tenPad, 0, tenPad, 0); - getUrl.setTextColor(getResources().getColor(android.R.color.black)); - getUrl.setPadding(tenPad, 0, tenPad, 0); - getUrl.setBackgroundResource(R.drawable.book); - getUrl.setPadding(tenPad, 0, tenPad, 0); - final List> list = new ArrayList>(); - List> books = getBookmarks(); - Iterator> it = books.iterator(); - while (it.hasNext()) { - list.add(it.next()); - } - handler = new Handler() { - - @Override - public void handleMessage(Message msg) { - - switch (msg.what) { - case 1: { - SimpleAdapter adapter = new SimpleAdapter(mContext, list, - R.layout.two_line_autocomplete, new String[] { - "title", "url" }, new int[] { R.id.title, - R.id.url }); - - getUrl.setAdapter(adapter); - - break; - } - case 2: { - - break; - } - } - } - }; - - Thread updateAutoComplete = new Thread(new Runnable() { - - @Override - public void run() { - - Cursor c = null; - Cursor managedCursor = null; - columns = new String[] { "url", "title" }; - try { - - bookmarks = Browser.BOOKMARKS_URI; - c = getContentResolver().query(bookmarks, columns, null, - null, null); - } catch (SQLiteException ignored) { - } catch (IllegalStateException ignored) { - } catch (NullPointerException ignored) { - } - - if (c != null) { - noStockBrowser = false; - Log.i("Browser", "detected AOSP browser"); - } else { - noStockBrowser = true; - Log.e("Browser", "did not detect AOSP browser"); - } - if (c != null) { - c.close(); - } - try { - - managedCursor = null; - SQLiteDatabase s = historyHandler.getReadableDatabase(); - managedCursor = s.query("history", // URI - // of - columns, // Which columns to return - null, // Which rows to return (all rows) - null, // Selection arguments (none) - null, null, null); - - } catch (SQLiteException ignored) { - } catch (NullPointerException ignored) { - } catch (IllegalStateException ignored) { - } - - try { - if (managedCursor != null) { - - if (managedCursor.moveToLast()) { - - // Variable for holding the retrieved URL - - int urlColumn = managedCursor.getColumnIndex("url"); - int titleColumn = managedCursor - .getColumnIndex("title"); - // Reference to the the column containing the URL - do { - String urlA = managedCursor - .getString(urlColumn); - String title = managedCursor - .getString(titleColumn); - Map map = new HashMap(); - map.put("title", title); - map.put("url", urlA); - list.add(map); - } while (managedCursor.moveToPrevious()); - } - } - handler.sendEmptyMessage(1); - } catch (SQLiteException ignored) { - } catch (NullPointerException ignored) { - } catch (IllegalStateException ignored) { - } - managedCursor.close(); - } - - }); - try { - updateAutoComplete.start(); - } catch (NullPointerException ignored) { - } catch (SQLiteMisuseException ignored) { - } catch (IllegalStateException ignored) { - } - - getUrl.setThreshold(1); - getUrl.setTokenizer(new SpaceTokenizer()); - getUrl.setOnItemClickListener(new OnItemClickListener() { - - @Override - public void onItemClick(AdapterView arg0, View arg1, int arg2, - long arg3) { - try { - String url; - url = ((TextView) arg1.findViewById(R.id.url)).getText() - .toString(); - getUrl.setText(url); - searchTheWeb(url, mContext); - url = null; - getUrl.setPadding(tenPad, 0, tenPad, 0); - InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(getUrl.getWindowToken(), 0); - } catch (NullPointerException e) { - Log.e("Browser Error: ", - "NullPointerException on item click"); - } - } - - }); - - getUrl.setSelectAllOnFocus(true); // allows edittext to select all when - // clicked - } - - void findNewView(int id) { - int delete = tabList.indexOf(id); - int leftId = id; - boolean right = false, left = false; - if (id == currentId) { - - if (main[id].isShown()) { - main[id].startAnimation(fadeOut); - background.removeView(main[id]); - uBar.bringToFront(); - } - - if (tabList.size() > delete + 1) { - id = tabList.get(delete + 1); - if (urlTitle[id].isShown()) { - background.addView(main[id]); - main[id].setVisibility(View.VISIBLE); - uBar.bringToFront(); - if (API < 16) { - urlTitle[id].setBackgroundDrawable(active); - } else { - urlTitle[id].setBackground(active); - } - urlTitle[id].setPadding(leftPad, 0, rightPad, 0); - currentId = id; - currentTab = main[id]; - currentTabTitle = urlTitle[id]; - setUrlText(urlToLoad[currentId][0]); - getUrl.setPadding(tenPad, 0, tenPad, 0); - right = true; - if (main[id].getProgress() < 100) { - onProgressChanged(id, main[id].getProgress()); - refresh.setVisibility(View.INVISIBLE); - progressBar.setVisibility(View.VISIBLE); - } else { - onProgressChanged(id, main[id].getProgress()); - progressBar.setVisibility(View.GONE); - refresh.setVisibility(View.VISIBLE); - } - // break; - } - - } - if (!right) { - if (delete > 0) { - leftId = tabList.get(delete - 1); - if (urlTitle[leftId].isShown()) { - background.addView(main[leftId]); - main[leftId].setVisibility(View.VISIBLE); - // uBar.bringToFront(); - if (API < 16) { - urlTitle[leftId].setBackgroundDrawable(active); - } else { - urlTitle[leftId].setBackground(active); - } - urlTitle[leftId].setPadding(leftPad, 0, rightPad, 0); - currentId = leftId; - currentTab = main[leftId]; - currentTabTitle = urlTitle[leftId]; - setUrlText(urlToLoad[currentId][0]); - getUrl.setPadding(tenPad, 0, tenPad, 0); - left = true; - if (main[leftId].getProgress() < 100) { - refresh.setVisibility(View.INVISIBLE); - progressBar.setVisibility(View.VISIBLE); - onProgressChanged(leftId, - main[leftId].getProgress()); - } else { - progressBar.setVisibility(View.GONE); - refresh.setVisibility(View.VISIBLE); - onProgressChanged(leftId, - main[leftId].getProgress()); - } - // break; - } - - } - - } - - } else { - right = left = true; - } - tabList.remove(delete); - if (!(right || left)) { - if (API > 11) { - currentTab.onPause(); - } - currentTab.pauseTimers(); - clearCache(); - currentTab = null; - finish(); - } - uBar.bringToFront(); - tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); - } - - public void clearCache() { - if (settings.getBoolean("cache", false) && currentTab != null) { - currentTab.clearCache(true); - Log.i("Lightning", "Cache Cleared"); - - } - for (int n = 0; n < MAX_TABS; n++) { - if (main[n] != null) { - main[n].removeAllViews(); - main[n] = null; - } - } - } - - @Override - public void finish() { - background.clearDisappearingChildren(); - background.removeView(currentTab); - tabScroll.clearDisappearingChildren(); - super.finish(); - } - - @Override - protected void onStop() { - // TODO Auto-generated method stub - - super.onStop(); - } - - void forward() { - ImageView forward = (ImageView) findViewById(R.id.forward); - forward.setBackgroundResource(R.drawable.button); - if (isPhone) { - RelativeLayout relativeLayout1 = (RelativeLayout) findViewById(R.id.relativeLayout1); - relativeLayout1.removeView(forward); - } - forward.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View v) { - if (currentTab.canGoForward()) { - currentTab.goForward(); - } - } - - }); - } - - @SuppressLint("InlinedApi") - private void initialize() { - - tabList = new ArrayList(); - bUrl = new String[MAX_BOOKMARKS]; - bTitle = new String[MAX_BOOKMARKS]; - main = new IncognitoWebView[MAX_TABS]; - urlTitle = new TextView[MAX_TABS]; - urlToLoad = new String[MAX_TABS][2]; - fullScreen = false; - DisplayMetrics metrics = new DisplayMetrics(); - getWindowManager().getDefaultDisplay().getMetrics(metrics); - historyHandler = new DatabaseHandler(this); - cookieManager = CookieManager.getInstance(); - CookieSyncManager.createInstance(mContext); - cookieManager.setAcceptCookie(false); - - progressBar = (ProgressBar) findViewById(R.id.progressBar1); - browserProgress = (ProgressBar) findViewById(R.id.progressBar); - browserProgress.setVisibility(View.GONE); - - if (API >= 11) { - progressBar.setIndeterminateDrawable(getResources().getDrawable( - R.drawable.ics_animation)); - } else { - progressBar.setIndeterminateDrawable(getResources().getDrawable( - R.drawable.ginger_animation)); - } - - showFullScreen = settings.getBoolean("fullscreen", false); - uBar = (RelativeLayout) findViewById(R.id.urlBar); - screen = (RelativeLayout) findViewById(R.id.background); - slideUp = AnimationUtils.loadAnimation(this, R.anim.slide_up); - slideDown = AnimationUtils.loadAnimation(this, R.anim.slide_down); - fadeOut = AnimationUtils.loadAnimation(this, android.R.anim.fade_out); - fadeOut.setDuration(250); - fadeIn = AnimationUtils.loadAnimation(this, android.R.anim.fade_in); - // mShortAnimationDuration = getResources().getInteger( - // android.R.integer.config_mediumAnimTime); - slideUp.setAnimationListener(new AnimationListener() { - - @Override - public void onAnimationEnd(Animation arg0) { - uBar.setVisibility(View.GONE); - } - - @Override - public void onAnimationRepeat(Animation arg0) { - - } - - @Override - public void onAnimationStart(Animation arg0) { - - } - - }); - slideDown.setAnimationListener(new AnimationListener() { - - @Override - public void onAnimationEnd(Animation animation) { - - } - - @Override - public void onAnimationRepeat(Animation animation) { - - } - - @Override - public void onAnimationStart(Animation animation) { - uBar.setVisibility(View.VISIBLE); - } - - }); - - RelativeLayout refreshLayout = (RelativeLayout) findViewById(R.id.refreshLayout); - refreshLayout.setBackgroundResource(R.drawable.button); - - // user agent - if (API < 17) { - user = new WebView(mContext).getSettings().getUserAgentString(); - } else { - user = WebSettings.getDefaultUserAgent(this); - } - - background = (FrameLayout) findViewById(R.id.holder); - defaultUser = user; // setting mobile user - // agent - switch (settings.getInt("search", 1)) { - case 0: - SEARCH = settings.getString("searchurl", FinalVariables.GOOGLE_SEARCH); - if(!SEARCH.startsWith("http://") && ! SEARCH.startsWith("https://") ) { - SEARCH = FinalVariables.GOOGLE_SEARCH; - } - break; - - case 1: - SEARCH = FinalVariables.GOOGLE_SEARCH; - break; - case 2: - SEARCH = FinalVariables.BING_SEARCH; - break; - case 3: - SEARCH = FinalVariables.YAHOO_SEARCH; - break; - case 4: - SEARCH = FinalVariables.STARTPAGE_SEARCH; - break; - case 5: - SEARCH = FinalVariables.DUCK_SEARCH; - break; - case 6: - SEARCH = FinalVariables.BAIDU_SEARCH; - break; - case 7: - SEARCH = FinalVariables.YANDEX_SEARCH; - break; - case 8: - SEARCH = FinalVariables.DUCK_LITE_SEARCH; - break; - } - - exitTab = getResources().getDrawable(R.drawable.stop); // user - // agent - homepage = settings.getString("home", HOMEPAGE); // initializing - // the - // stored - // homepage - // variable - - // initializing variables declared - - height = getResources().getDrawable(R.drawable.loading) - .getMinimumHeight(); - width = getResources().getDrawable(R.drawable.loading) - .getMinimumWidth(); - - // hides keyboard so it doesn't default pop up - this.getWindow().setSoftInputMode( - WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); - - // opens icondatabase so that favicons can be stored - WebIconDatabase.getInstance().open( - getDir("icons", MODE_PRIVATE).getPath()); - - // scroll view containing tabs - tabLayout = (LinearLayout) findViewById(R.id.tabLayout); - tabScroll = (HorizontalScrollView) findViewById(R.id.tabScroll); - tabScroll.setBackgroundColor(getResources().getColor(R.color.black)); - tabScroll.setHorizontalScrollBarEnabled(false); - if (API > 8) { - tabScroll.setOverScrollMode(View.OVER_SCROLL_NEVER); // disallow - // overscroll - } - - // image dimensions and initialization - final int dps = 175; - final float scale = getApplicationContext().getResources() - .getDisplayMetrics().density; - pixels = (int) (dps * scale + 0.5f); - leftPad = (int) (17 * scale + 0.5f); - rightPad = (int) (15 * scale + 0.5f); - height32 = (int) (32 * scale + 0.5f); - tenPad = (int) (10 * scale + 0.5f); - - incognitoPage = getResources().getDrawable(R.drawable.incognito); - incognitoPage.setBounds(0, 0, width / 2, height / 2); - exitTab.setBounds(0, 0, width * 2 / 3, height * 2 / 3); - - Thread startup = new Thread(new Runnable() { - - @Override - public void run() { - reopenOldTabs(); // restores old tabs or creates a new one - } - - }); - startup.run(); - - // new tab button - ImageView newTab = (ImageView) findViewById(R.id.newTab); - newTab.setBackgroundResource(R.drawable.button); - newTab.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - Handler click = new NewTabHandler(); - click.sendEmptyMessage(1); - tabScroll.postDelayed(new Runnable() { - @Override - public void run() { - tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); - } - }, 100L); - - } - }); - newTab.setOnLongClickListener(new OnLongClickListener() { - - @Override - public boolean onLongClick(View v) { - if (settings.getString("oldPage", "").length() > 0) { - newTab(settings.getString("oldPage", ""), true); - edit.putString("oldPage", ""); - edit.commit(); - tabScroll.postDelayed(new Runnable() { - @Override - public void run() { - tabScroll.smoothScrollTo(currentTabTitle.getLeft(), - 0); - } - }, 100L); - } - return true; - } - - }); - refresh = (ImageView) findViewById(R.id.refresh); - refreshLayout.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View arg0) { - - if (currentTab.getProgress() < 100) { - currentTab.stopLoading(); - } else { - currentTab.reload(); - } - } - - }); - - enterUrl(); - if (showFullScreen) { - toggleFullScreen(); - } - browserHandler = new Handle(); - - } - - private void newSettings() { - startActivity(new Intent(FinalVariables.SETTINGS_INTENT)); - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, - Intent intent) { - if (requestCode == 1) { - if (null == mUploadMessage) - return; - Uri result = intent == null || resultCode != RESULT_OK ? null - : intent.getData(); - mUploadMessage.onReceiveValue(result); - mUploadMessage = null; - - } - } - - @Override - public void onBackPressed() { - try { - if (showFullScreen && !uBar.isShown()) { - uBar.startAnimation(slideDown); - } - if (currentTab.isShown() && currentTab.canGoBack()) { - currentTab.goBack(); - } else { - deleteTab(currentId); - uBar.bringToFront(); - } - } catch (NullPointerException ignored) { - } - return; - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - if (settings.getBoolean("textreflow", false)) { - currentTab.getSettings().setLayoutAlgorithm( - LayoutAlgorithm.NARROW_COLUMNS); - } else { - currentTab.getSettings().setLayoutAlgorithm(LayoutAlgorithm.NORMAL); - } - - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); // displays main xml layout - mContext = this; - ACTIVITY = this; - settings = getSharedPreferences("settings", 0); - edit = settings.edit(); - - if (settings.getBoolean("hidestatus", false)) { - getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, - WindowManager.LayoutParams.FLAG_FULLSCREEN); - } - inactive = getResources().getDrawable(R.drawable.bg_inactive); - active = getResources().getDrawable(R.drawable.bg_press); - initialize(); // sets up random stuff - options(); // allows options to be opened - enter();// enter url bar - DisplayMetrics metrics = new DisplayMetrics(); - getWindowManager().getDefaultDisplay().getMetrics(metrics); - - float widthInInches = metrics.widthPixels / metrics.xdpi; - float heightInInches = metrics.heightPixels / metrics.ydpi; - double sizeInInches = Math.sqrt(Math.pow(widthInInches, 2) - + Math.pow(heightInInches, 2)); - // 0.5" buffer for 7" devices - isPhone = sizeInInches < 6.5; - forward();// forward button - back(); - if (settings.getInt("firstIncognito", 0) == 0) { - // navigation tips - String message = "Incognito Mode keeps you safe while browsing the internet." - + " History is not saved, Cookies are disabled, and Location access is " - + "disabled to ensure as best we can that you are not being tracked. " - + "Happy Browsing!"; - - Utils.createInformativeDialog(mContext, "About Incognito", message); - edit.putInt("first", 1); - edit.commit(); - } - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.incognito_menu, menu); - - return true; - } - - /* - * (non-Javadoc) - * - * @see android.app.Activity#onKeyDown(int, android.view.KeyEvent) - */ - @Override - public boolean onKeyDown(int keyCode, KeyEvent event) { - switch (keyCode) { - case KeyEvent.KEYCODE_SEARCH: { - getUrl.requestFocus(); - InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - manager.showSoftInput(getUrl, 0); - - break; - } - case KeyEvent.KEYCODE_F5: { - currentTab.reload(); - } - case KeyEvent.KEYCODE_ESCAPE: { - currentTab.stopLoading(); - } - case KeyEvent.KEYCODE_TAB: { - InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - if (!manager.isActive()) { - newTab(homepage, true); - } - - } - case KeyEvent.KEYCODE_F12: { - clearCache(); - finish(); - } - case KeyEvent.KEYCODE_F6: { - getUrl.selectAll(); - } - case KeyEvent.KEYCODE_F10: { - startActivity(new Intent(FinalVariables.SETTINGS_INTENT)); - } - case KeyEvent.KEYCODE_F11: { - toggleFullScreen(); - } - case KeyEvent.KEYCODE_DEL: { - InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - if (!manager.isActive()) { - currentTab.goBack(); - } - } - } - return super.onKeyDown(keyCode, event); - } - - @Override - public boolean onKeyLongPress(int keyCode, KeyEvent event) { - - if (keyCode == KeyEvent.KEYCODE_BACK) { - if (!settings.getBoolean("restoreclosed", true)) { - for (int n = 0; n < MAX_TABS; n++) { - urlToLoad[n][0] = null; - } - } - clearCache(); - finish(); - return true; - } else - return super.onKeyLongPress(keyCode, event); - } - - @Override - public void onLowMemory() { - for (int n = 0; n < MAX_TABS; n++) { - if (n != currentId && main[n] != null) { - main[n].freeMemory(); - } - } - super.onLowMemory(); - } - - @Override - protected void onNewIntent(Intent intent) { - - String url = intent.getDataString(); - int id = -1; - int download = -1; - try { - id = intent.getExtras().getInt("acr.browser.barebones.Origin") - 1; - } catch (NullPointerException e) { - id = -1; - } - try { - download = intent.getExtras().getInt( - "acr.browser.barebones.Download"); - } catch (NullPointerException e) { - download = -1; - } - if (id >= 0) { - main[id].loadUrl(url); - } else if (download == 1) { - Utils.downloadFile(mContext, url, null, null); - } else if (url != null) { - newTab(url, true); - } - - super.onNewIntent(intent); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - - switch (item.getItemId()) { - case R.id.history: - generateHistory(currentTab, mContext); - return true; - case R.id.bookmark: - if (urlToLoad[currentId][1] != null) { - if (!urlToLoad[currentId][1].equals("Bookmarks")) { - Utils.addBookmark(mContext, urlToLoad[currentId][1], - urlToLoad[currentId][0]); - } - } - return true; - case R.id.settings: - newSettings(); - return true; - case R.id.allBookmarks: - if (urlToLoad[currentId][1] == null) { - goBookmarks(mContext, currentTab); - } else if (!urlToLoad[currentId][1].equals("Bookmarks")) { - goBookmarks(mContext, currentTab); - } - - return true; - case R.id.share: - share(); - return true; - case R.id.incognito: - newTab(homepage, true); - return true; - default: - return super.onOptionsItemSelected(item); - } - } - - @Override - protected void onPause() { - if(historyHandler == null){ - historyHandler = new DatabaseHandler(this); - historyHandler = null; - } - if (currentTab != null) { - if (API >= 11) { - currentTab.onPause(); - for (int n = 0; n < MAX_TABS; n++) { - if (main[n] != null) - main[n].onPause(); - } - } - currentTab.pauseTimers(); - } - super.onPause(); - } - - @Override - protected void onResume() { - super.onResume(); - if(historyHandler == null){ - historyHandler = new DatabaseHandler(this); - } - onProgressChanged(currentId, currentTab.getProgress()); - if (currentTab.getProgress() == 100) { - progressBar.setVisibility(View.GONE); - refresh.setVisibility(View.VISIBLE); - - } - if (API >= 11) { - currentTab.onResume(); - } - reinitializeSettings(); - currentTab.resumeTimers(); - if (settings.getBoolean("fullscreen", false) != fullScreen) { - toggleFullScreen(); - } - - } - - private int x; - private int y; - private Rect edge; - private boolean xPress; - private final GestureDetector mGestureDetector = new GestureDetector( - mContext, new CustomGestureListener()); - - private class CustomGestureListener extends SimpleOnGestureListener { - @Override - public void onLongPress(MotionEvent e) { - deleteTab(id); - super.onLongPress(e); - } - } - - @Override - public boolean onTouch(View v, MotionEvent event) { - try { - id = v.getId(); - background.clearDisappearingChildren(); - xPress = false; - x = (int) event.getX(); - y = (int) event.getY(); - edge = new Rect(); - v.getDrawingRect(edge); - currentTabTitle.setPadding(leftPad, 0, rightPad, 0); - if (event.getAction() == MotionEvent.ACTION_DOWN) { - - } else if (event.getAction() == MotionEvent.ACTION_UP) { - - if (x >= (edge.right - bounds.width() - v.getPaddingRight() - 10 * 3 / 2) - && x <= (edge.right - v.getPaddingRight() + 10 * 3 / 2) - && y >= (v.getPaddingTop() - 10 / 2) - && y <= (v.getHeight() - v.getPaddingBottom() + 10 / 2)) { - xPress = true; - } - if (id == currentId) { - if (xPress) { - deleteTab(id); - uBar.bringToFront(); - } - } else if (id != currentId) { - if (xPress) { - deleteTab(id); - } else { - if (API < 16) { - currentTabTitle.setBackgroundDrawable(inactive); - } else if (API > 15) { - currentTabTitle.setBackground(inactive); - } - currentTabTitle.setPadding(leftPad, 0, rightPad, 0); - if (!showFullScreen) { - background.addView(main[id]); - main[id].startAnimation(fadeIn); - currentTab.startAnimation(fadeOut); - background.removeView(currentTab); - uBar.bringToFront(); - } else if (API >= 12) { - main[id].setAlpha(0f); - background.addView(main[id]); - try { - main[id].animate().alpha(1f).setDuration(250); - } catch (NullPointerException ignored) { - } - background.removeView(currentTab); - uBar.bringToFront(); - } else { - background.removeView(currentTab); - background.addView(main[id]); - } - uBar.bringToFront(); - - currentId = id; - currentTab = main[id]; - currentTabTitle = urlTitle[id]; - setUrlText(urlToLoad[currentId][0]); - getUrl.setPadding(tenPad, 0, tenPad, 0); - if (API < 16) { - currentTabTitle.setBackgroundDrawable(active); - } else if (API > 15) { - currentTabTitle.setBackground(active); - } - if (currentTab.getProgress() < 100) { - refresh.setVisibility(View.INVISIBLE); - - progressBar.setVisibility(View.VISIBLE); - - } else { - progressBar.setVisibility(View.GONE); - refresh.setVisibility(View.VISIBLE); - } - onProgressChanged(currentId, currentTab.getProgress()); - tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); - currentTab.invalidate(); - } - } - - } - uBar.bringToFront(); - v.setPadding(leftPad, 0, rightPad, 0); - } catch (Exception e) { - e.printStackTrace(); - Log.e("Lightning Error", "Well we dun messed up"); - } - mGestureDetector.onTouchEvent(event); - return true; - } - - void options() { - ImageView options = (ImageView) findViewById(R.id.options); - options.setBackgroundResource(R.drawable.button); - options.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View v) { - - if (API >= 11) { - PopupMenu menu = new PopupMenu(mContext, v); - MenuInflater inflate = menu.getMenuInflater(); - inflate.inflate(R.menu.incognito_menu, menu.getMenu()); - menu.setOnMenuItemClickListener(new OnMenuItemClickListener() { - - @Override - public boolean onMenuItemClick(MenuItem item) { - - switch (item.getItemId()) { - case R.id.history: - generateHistory(currentTab, mContext); - return true; - case R.id.bookmark: - if (urlToLoad[currentId][1] != null) { - if (!urlToLoad[currentId][1] - .equals("Bookmarks")) { - Utils.addBookmark(mContext, - urlToLoad[currentId][1], - urlToLoad[currentId][0]); - } - } - return true; - case R.id.settings: - newSettings(); - return true; - case R.id.allBookmarks: - if (urlToLoad[currentId][1] == null) { - goBookmarks(mContext, currentTab); - } else if (!urlToLoad[currentId][1] - .equals("Bookmarks")) { - goBookmarks(mContext, currentTab); - } - return true; - case R.id.share: - share(); - return true; - case R.id.incognito: - newTab(homepage, true); - return true; - default: - return false; - } - - } - - }); - menu.show(); - } else if (API < 11) { - - openOptionsMenu(); - } - } - - }); - } - - void reopenOldTabs() { - Intent url = getIntent(); - String URL = url.getDataString(); - if (URL != null) { - // opens a new tab with the URL if its there - int n = newTab(URL, true); - main[n].resumeTimers(); - } else { - // otherwise it opens the home-page - int n = newTab(homepage, true); - main[n].resumeTimers(); - } - - } -} \ No newline at end of file diff --git a/src/acr/browser/barebones/customwebview/CustomWebView.java b/src/acr/browser/barebones/customwebview/CustomWebView.java deleted file mode 100644 index 8b88c83..0000000 --- a/src/acr/browser/barebones/customwebview/CustomWebView.java +++ /dev/null @@ -1,311 +0,0 @@ -package acr.browser.barebones.customwebview; - -import acr.browser.barebones.activities.BrowserActivity; -import acr.browser.barebones.utilities.FinalVariables; -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.SharedPreferences; -import android.graphics.Point; -import android.util.DisplayMetrics; -import android.view.Display; -import android.view.GestureDetector; -import android.view.GestureDetector.SimpleOnGestureListener; -import android.view.MotionEvent; -import android.view.View; -import android.view.WindowManager; -import android.view.animation.Animation; -import android.webkit.WebSettings; -import android.webkit.WebView; -import android.webkit.WebSettings.LayoutAlgorithm; -import android.webkit.WebSettings.PluginState; -import android.webkit.WebSettings.RenderPriority; - -public final class CustomWebView extends WebView { - static final int API = FinalVariables.API; - public static boolean showFullScreen;; - final View uBar = BrowserActivity.uBar; - final Animation slideUp = BrowserActivity.slideUp; - final Animation slideDown = BrowserActivity.slideDown; - final boolean DEVICE_HAS_GPS = BrowserActivity.DEVICE_HAS_GPS; - static Context CONTEXT; - static String defaultUser; - public WebSettings settings; - - public CustomWebView(Context context) { - - super(context); - defaultUser = BrowserActivity.defaultUser; - showFullScreen = BrowserActivity.showFullScreen; - mGestureDetector = new GestureDetector(context, - new CustomGestureListener()); - CONTEXT = context; - settings = getSettings(); - browserInitialization(context); - settingsInitialization(context); - } - - @SuppressWarnings("deprecation") - public void browserInitialization(Context context) { - setDrawingCacheBackgroundColor(0x00000000); - setFocusableInTouchMode(true); - setFocusable(true); - setAnimationCacheEnabled(false); - setDrawingCacheEnabled(true); - setBackgroundColor(context.getResources().getColor( - android.R.color.white)); - if (API >= 16) { - getRootView().setBackground(null); - } else { - getRootView().setBackgroundDrawable(null); - } - setWillNotCacheDrawing(false); - setAlwaysDrawnWithCacheEnabled(true); - setScrollbarFadingEnabled(true); - setSaveEnabled(true); - } - - @SuppressLint("SetJavaScriptEnabled") - @SuppressWarnings("deprecation") - public void settingsInitialization(Context context) { - SharedPreferences preferences = context.getSharedPreferences( - "settings", 0); - if(API < 11){ - settings.setLightTouchEnabled(true); - } - settings.setDomStorageEnabled(true); - settings.setAppCacheEnabled(true); - settings.setAppCachePath(context.getFilesDir().getAbsolutePath() - + "/cache"); - settings.setAllowFileAccess(true); - settings.setDatabaseEnabled(true); - settings.setDatabasePath(context.getFilesDir().getAbsolutePath() - + "/databases"); - settings.setSupportZoom(true); - settings.setBuiltInZoomControls(true); - if (API >= 11) { - settings.setDisplayZoomControls(false); - settings.setAllowContentAccess(true); - } - - if (preferences.getBoolean("java", true)) { - settings.setJavaScriptEnabled(true); - settings.setJavaScriptCanOpenWindowsAutomatically(true); - } - - if (API < 14) { - switch (preferences.getInt("textsize", 3)) { - case 1: - settings.setTextSize(WebSettings.TextSize.LARGEST); - break; - case 2: - settings.setTextSize(WebSettings.TextSize.LARGER); - break; - case 3: - settings.setTextSize(WebSettings.TextSize.NORMAL); - break; - case 4: - settings.setTextSize(WebSettings.TextSize.SMALLER); - break; - case 5: - settings.setTextSize(WebSettings.TextSize.SMALLEST); - break; - } - - } else { - switch (preferences.getInt("textsize", 3)) { - case 1: - settings.setTextZoom(200); - break; - case 2: - settings.setTextZoom(150); - break; - case 3: - settings.setTextZoom(100); - break; - case 4: - settings.setTextZoom(75); - break; - case 5: - settings.setTextZoom(50); - break; - } - } - settings.setSupportMultipleWindows(preferences.getBoolean("newwindow", - true)); - - switch (preferences.getInt("enableflash", 0)) { - case 0: - break; - case 1: { - settings.setPluginState(PluginState.ON_DEMAND); - break; - } - case 2: { - settings.setPluginState(PluginState.ON); - break; - } - default: - break; - } - if (preferences.getBoolean("passwords", false)) { - if (API < 18) { - settings.setSavePassword(true); - } - settings.setSaveFormData(true); - } - if (API < 18) { - try { - settings.setRenderPriority(RenderPriority.HIGH); - } catch (SecurityException ignored) { - - } - } - if (DEVICE_HAS_GPS) { - settings.setGeolocationEnabled(preferences.getBoolean("location", - false)); - settings.setGeolocationDatabasePath(context.getFilesDir() - .getAbsolutePath()); - } else { - settings.setGeolocationEnabled(false); - } - settings.setUseWideViewPort(preferences - .getBoolean("wideviewport", true)); - settings.setLoadWithOverviewMode(preferences.getBoolean("overviewmode", - true)); - - if (preferences.getBoolean("textreflow", false)) { - settings.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS); - } else { - settings.setLayoutAlgorithm(LayoutAlgorithm.NORMAL); - } - - settings.setBlockNetworkImage(preferences.getBoolean("blockimages", - false)); - settings.setLoadsImagesAutomatically(true); - - switch (preferences.getInt("agentchoose", 1)) { - case 1: - getSettings().setUserAgentString(defaultUser); - break; - case 2: - getSettings().setUserAgentString(FinalVariables.DESKTOP_USER_AGENT); - break; - case 3: - getSettings().setUserAgentString(FinalVariables.MOBILE_USER_AGENT); - break; - case 4: - getSettings().setUserAgentString( - preferences.getString("userAgentString", defaultUser)); - break; - } - } - - @Override - public boolean onTouchEvent(MotionEvent event) { - if(API < 11){ - if(!hasFocus()) - requestFocus(); - } - mGestureDetector.onTouchEvent(event); - return super.onTouchEvent(event); - } - - @Override - protected void onWindowVisibilityChanged(int visibility) { - if (API >= 11) { - setActivated(visibility == View.VISIBLE); - } - setEnabled(visibility == View.VISIBLE); - super.onWindowVisibilityChanged(visibility); - } - - private final GestureDetector mGestureDetector; - - private class CustomGestureListener extends SimpleOnGestureListener { - final int SWIPE_THRESHOLD = 100; - final int SWIPE_VELOCITY_THRESHOLD = 100; - DisplayMetrics metrics; - WindowManager wm; - Display display; - Point size; - int width; - float diffY; - float diffX; - boolean first = false; - - @Override - public boolean onDown(MotionEvent e) { - first = true; - return super.onDown(e); - } - - @Override - public void onLongPress(MotionEvent e) { - if (BrowserActivity.currentId != -1) { - try { - BrowserActivity.onLongClick(); - } catch (NullPointerException ignored) { - ignored.printStackTrace(); - } - } - super.onLongPress(e); - } - - @Override - public boolean onScroll(MotionEvent e1, MotionEvent e2, - float distanceX, float distanceY) { - if (showFullScreen && first) { - if (uBar.isShown() && getScrollY() < 5) { - uBar.startAnimation(slideUp); - } else if (distanceY < -5 && !uBar.isShown()) { - uBar.startAnimation(slideDown); - } else if (distanceY > 5 && uBar.isShown()) { - uBar.startAnimation(slideUp); - } - first = false; - } - return super.onScroll(e1, e2, distanceX, distanceY); - } - - @Override - public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, - float velocityY) { - try { - - if (API < 13) { - metrics = CONTEXT.getResources() - .getDisplayMetrics(); - width = metrics.widthPixels; - } else { - wm = (WindowManager) CONTEXT - .getSystemService(Context.WINDOW_SERVICE); - display = wm.getDefaultDisplay(); - size = new Point(); - display.getSize(size); - width = size.x; - } - - if ((width - e1.getX() <= width / 15) - || (e1.getX() <= width / 15)) { - diffY = e2.getY() - e1.getY(); - diffX = e2.getX() - e1.getX(); - if (Math.abs(diffX) > Math.abs(diffY)) { - if (Math.abs(diffX) > SWIPE_THRESHOLD - && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { - if (diffX > 0) { - BrowserActivity.goBack(CustomWebView.this); - } else { - BrowserActivity.goForward(CustomWebView.this); - } - } - } - } - - } catch (Exception exception) { - exception.printStackTrace(); - } - return super.onFling(e1, e2, velocityX, velocityY); - } - } - -} diff --git a/src/acr/browser/barebones/customwebview/IncognitoWebView.java b/src/acr/browser/barebones/customwebview/IncognitoWebView.java deleted file mode 100644 index 58277df..0000000 --- a/src/acr/browser/barebones/customwebview/IncognitoWebView.java +++ /dev/null @@ -1,305 +0,0 @@ -package acr.browser.barebones.customwebview; - -import acr.browser.barebones.activities.IncognitoModeActivity; -import acr.browser.barebones.utilities.FinalVariables; -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.SharedPreferences; -import android.graphics.Point; -import android.util.DisplayMetrics; -import android.view.Display; -import android.view.GestureDetector; -import android.view.GestureDetector.SimpleOnGestureListener; -import android.view.MotionEvent; -import android.view.View; -import android.view.WindowManager; -import android.view.animation.Animation; -import android.webkit.WebSettings; -import android.webkit.WebView; -import android.webkit.WebSettings.LayoutAlgorithm; -import android.webkit.WebSettings.PluginState; -import android.webkit.WebSettings.RenderPriority; - -public final class IncognitoWebView extends WebView { - static final int API = FinalVariables.API; - public static boolean showFullScreen;; - final View uBar = IncognitoModeActivity.uBar; - final Animation slideUp = IncognitoModeActivity.slideUp; - final Animation slideDown = IncognitoModeActivity.slideDown; - static Context CONTEXT; - static String defaultUser; - public WebSettings settings; - - public IncognitoWebView(Context context) { - - super(context); - defaultUser = IncognitoModeActivity.defaultUser; - showFullScreen = IncognitoModeActivity.showFullScreen; - mGestureDetector = new GestureDetector(context, - new CustomGestureListener()); - CONTEXT = context; - settings = getSettings(); - browserInitialization(context); - settingsInitialization(context); - } - - @SuppressWarnings("deprecation") - public void browserInitialization(Context context) { - setDrawingCacheBackgroundColor(0x00000000); - setFocusableInTouchMode(true); - setFocusable(true); - setAnimationCacheEnabled(false); - setDrawingCacheEnabled(true); - setBackgroundColor(context.getResources().getColor( - android.R.color.white)); - if (API >= 16) { - getRootView().setBackground(null); - } else { - getRootView().setBackgroundDrawable(null); - } - setWillNotCacheDrawing(false); - setAlwaysDrawnWithCacheEnabled(true); - setScrollbarFadingEnabled(true); - setSaveEnabled(true); - } - - @SuppressLint("SetJavaScriptEnabled") - @SuppressWarnings("deprecation") - public void settingsInitialization(Context context) { - SharedPreferences preferences = context.getSharedPreferences( - "settings", 0); - if(API < 11){ - settings.setLightTouchEnabled(true); - } - settings.setDomStorageEnabled(true); - settings.setAppCacheEnabled(true); - settings.setAppCachePath(context.getFilesDir().getAbsolutePath() - + "/cache"); - settings.setAllowFileAccess(true); - settings.setDatabaseEnabled(true); - settings.setDatabasePath(context.getFilesDir().getAbsolutePath() - + "/databases"); - settings.setSupportZoom(true); - settings.setBuiltInZoomControls(true); - if (API >= 11) { - settings.setDisplayZoomControls(false); - settings.setAllowContentAccess(true); - } - - if (preferences.getBoolean("java", true)) { - settings.setJavaScriptEnabled(true); - settings.setJavaScriptCanOpenWindowsAutomatically(true); - } - - if (API < 14) { - switch (preferences.getInt("textsize", 3)) { - case 1: - settings.setTextSize(WebSettings.TextSize.LARGEST); - break; - case 2: - settings.setTextSize(WebSettings.TextSize.LARGER); - break; - case 3: - settings.setTextSize(WebSettings.TextSize.NORMAL); - break; - case 4: - settings.setTextSize(WebSettings.TextSize.SMALLER); - break; - case 5: - settings.setTextSize(WebSettings.TextSize.SMALLEST); - break; - } - - } else { - switch (preferences.getInt("textsize", 3)) { - case 1: - settings.setTextZoom(200); - break; - case 2: - settings.setTextZoom(150); - break; - case 3: - settings.setTextZoom(100); - break; - case 4: - settings.setTextZoom(75); - break; - case 5: - settings.setTextZoom(50); - break; - } - } - settings.setSupportMultipleWindows(preferences.getBoolean("newwindow", - true)); - - switch (preferences.getInt("enableflash", 0)) { - case 0: - break; - case 1: { - settings.setPluginState(PluginState.ON_DEMAND); - break; - } - case 2: { - settings.setPluginState(PluginState.ON); - break; - } - default: - break; - } - if (preferences.getBoolean("passwords", false)) { - if (API < 18) { - settings.setSavePassword(true); - } - settings.setSaveFormData(true); - } - if (API < 18) { - try { - settings.setRenderPriority(RenderPriority.HIGH); - } catch (SecurityException ignored) { - - } - } - settings.setGeolocationEnabled(false); - settings.setUseWideViewPort(preferences - .getBoolean("wideviewport", true)); - settings.setLoadWithOverviewMode(preferences.getBoolean("overviewmode", - true)); - - if (preferences.getBoolean("textreflow", false)) { - settings.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS); - } else { - settings.setLayoutAlgorithm(LayoutAlgorithm.NORMAL); - } - - settings.setBlockNetworkImage(preferences.getBoolean("blockimages", - false)); - settings.setLoadsImagesAutomatically(true); - - switch (preferences.getInt("agentchoose", 1)) { - case 1: - getSettings().setUserAgentString(defaultUser); - break; - case 2: - getSettings().setUserAgentString(FinalVariables.DESKTOP_USER_AGENT); - break; - case 3: - getSettings().setUserAgentString(FinalVariables.MOBILE_USER_AGENT); - break; - case 4: - getSettings().setUserAgentString( - preferences.getString("userAgentString", defaultUser)); - break; - } - } - - @Override - public boolean onTouchEvent(MotionEvent event) { - if(API < 11){ - if(!hasFocus()) - requestFocus(); - } - mGestureDetector.onTouchEvent(event); - return super.onTouchEvent(event); - } - - @Override - protected void onWindowVisibilityChanged(int visibility) { - if (API >= 11) { - setActivated(visibility == View.VISIBLE); - } - setEnabled(visibility == View.VISIBLE); - super.onWindowVisibilityChanged(visibility); - } - - private final GestureDetector mGestureDetector; - - private class CustomGestureListener extends SimpleOnGestureListener { - final int SWIPE_THRESHOLD = 100; - final int SWIPE_VELOCITY_THRESHOLD = 100; - DisplayMetrics metrics; - WindowManager wm; - Display display; - Point size; - int width; - float diffY; - float diffX; - boolean first = false; - - @Override - public boolean onDown(MotionEvent e) { - first = true; - return super.onDown(e); - } - - @Override - public void onLongPress(MotionEvent e) { - if (IncognitoModeActivity.currentId != -1) { - try { - IncognitoModeActivity.onLongClick(); - } catch (NullPointerException ig) { - ig.printStackTrace(); - } - } - super.onLongPress(e); - } - - @Override - public boolean onScroll(MotionEvent e1, MotionEvent e2, - float distanceX, float distanceY) { - if (showFullScreen && first) { - if (uBar.isShown() && getScrollY() < 5) { - uBar.startAnimation(slideUp); - } else if (distanceY < -5 && !uBar.isShown()) { - uBar.startAnimation(slideDown); - } else if (distanceY > 5 && uBar.isShown()) { - uBar.startAnimation(slideUp); - } - first = false; - } - return super.onScroll(e1, e2, distanceX, distanceY); - } - - @Override - public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, - float velocityY) { - try { - - if (API < 13) { - metrics = CONTEXT.getResources() - .getDisplayMetrics(); - width = metrics.widthPixels; - } else { - wm = (WindowManager) CONTEXT - .getSystemService(Context.WINDOW_SERVICE); - display = wm.getDefaultDisplay(); - size = new Point(); - display.getSize(size); - width = size.x; - } - - if ((width - e1.getX() <= width / 15) - || (e1.getX() <= width / 15)) { - diffY = e2.getY() - e1.getY(); - diffX = e2.getX() - e1.getX(); - if (Math.abs(diffX) > Math.abs(diffY)) { - if (Math.abs(diffX) > SWIPE_THRESHOLD - && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { - if (diffX > 0) { - IncognitoModeActivity - .goBack(IncognitoWebView.this); - } else { - IncognitoModeActivity - .goForward(IncognitoWebView.this); - } - } - } - } - - } catch (Exception exception) { - exception.printStackTrace(); - } - return super.onFling(e1, e2, velocityX, velocityY); - } - } - -} diff --git a/src/acr/browser/barebones/databases/DatabaseHandler.java b/src/acr/browser/barebones/databases/DatabaseHandler.java deleted file mode 100644 index 09ad535..0000000 --- a/src/acr/browser/barebones/databases/DatabaseHandler.java +++ /dev/null @@ -1,147 +0,0 @@ -package acr.browser.barebones.databases; - -import java.util.ArrayList; -import java.util.List; - -import android.content.ContentValues; -import android.content.Context; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteOpenHelper; - -public class DatabaseHandler extends SQLiteOpenHelper { - - // All Static variables - // Database Version - private static final int DATABASE_VERSION = 1; - - // Database Name - private static final String DATABASE_NAME = "historyManager"; - - // HistoryItems table name - private static final String TABLE_HISTORY = "history"; - - // HistoryItems Table Columns names - private static final String KEY_ID = "id"; - private static final String KEY_URL = "url"; - private static final String KEY_TITLE = "title"; - - public DatabaseHandler(Context context) { - super(context, DATABASE_NAME, null, DATABASE_VERSION); - } - - // Creating Tables - @Override - public void onCreate(SQLiteDatabase db) { - String CREATE_HISTORY_TABLE = "CREATE TABLE " + TABLE_HISTORY + "(" - + KEY_ID + " INTEGER PRIMARY KEY," + KEY_URL + " TEXT," - + KEY_TITLE + " TEXT" +")"; - db.execSQL(CREATE_HISTORY_TABLE); - } - - // Upgrading database - @Override - public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - // Drop older table if existed - db.execSQL("DROP TABLE IF EXISTS " + TABLE_HISTORY); - - // Create tables again - onCreate(db); - } - - /** - * All CRUD(Create, Read, Update, Delete) Operations - */ - - public void delete(String url){ - String n = getHistoryItem(url); - deleteHistoryItem(n); - } - - // Adding new item - public void addHistoryItem(HistoryItem item) { - SQLiteDatabase db = this.getWritableDatabase(); - - ContentValues values = new ContentValues(); - values.put(KEY_URL, item.getUrl()); // HistoryItem Name - values.put(KEY_TITLE, item.getTitle()); // HistoryItem Phone - // Inserting Row - db.insert(TABLE_HISTORY, null, values); - db.close(); // Closing database connection - } - - // Getting single item - String getHistoryItem(String url) { - SQLiteDatabase db = this.getReadableDatabase(); - - Cursor cursor = db.query(TABLE_HISTORY, new String[] { KEY_ID, - KEY_URL, KEY_TITLE}, KEY_URL + "=?", - new String[] { url }, null, null, null, null); - if (cursor != null) - cursor.moveToFirst(); - String m = cursor.getString(0); - cursor.close(); - db.close(); - // return item - return m; - } - - // Getting All HistoryItems - public List getAllHistoryItems() { - List itemList = new ArrayList(); - // Select All Query - String selectQuery = "SELECT * FROM " + TABLE_HISTORY; - - SQLiteDatabase db = this.getWritableDatabase(); - Cursor cursor = db.rawQuery(selectQuery, null); - - // looping through all rows and adding to list - if (cursor.moveToFirst()) { - do { - HistoryItem item = new HistoryItem(); - item.setID(Integer.parseInt(cursor.getString(0))); - item.setUrl(cursor.getString(1)); - item.setTitle(cursor.getString(2)); - // Adding item to list - itemList.add(item); - } while (cursor.moveToNext()); - } - cursor.close(); - // return item list - return itemList; - } - - // Updating single item - public int updateHistoryItem(HistoryItem item) { - SQLiteDatabase db = this.getWritableDatabase(); - - ContentValues values = new ContentValues(); - values.put(KEY_URL, item.getUrl()); - values.put(KEY_TITLE, item.getTitle()); - int n = db.update(TABLE_HISTORY, values, KEY_ID + " = ?", - new String[] { String.valueOf(item.getID()) }); - // updating row - db.close(); - return n; - } - - // Deleting single item - public void deleteHistoryItem(String id) { - SQLiteDatabase db = this.getWritableDatabase(); - db.delete(TABLE_HISTORY, KEY_ID + " = ?", - new String[] { String.valueOf(id) }); - db.close(); - } - - // Getting items Count - public int getHistoryItemsCount() { - String countQuery = "SELECT * FROM " + TABLE_HISTORY; - SQLiteDatabase db = this.getReadableDatabase(); - Cursor cursor = db.rawQuery(countQuery, null); - cursor.close(); - - // return count - return cursor.getCount(); - } - -} diff --git a/src/acr/browser/barebones/databases/HistoryItem.java b/src/acr/browser/barebones/databases/HistoryItem.java deleted file mode 100644 index 03ef83b..0000000 --- a/src/acr/browser/barebones/databases/HistoryItem.java +++ /dev/null @@ -1,57 +0,0 @@ -package acr.browser.barebones.databases; - -public class HistoryItem { - - - //private variables - private int _id; - private String _url; - private String _title; - - // Empty constructor - public HistoryItem(){ - - } - // constructor - public HistoryItem(int id, String url, String title){ - this._id = id; - this._url = url; - this._title = title; - } - - // constructor - public HistoryItem(String url, String title){ - this._url = url; - this._title = title; - } - // getting ID - public int getID(){ - return this._id; - } - - // setting id - public void setID(int id){ - this._id = id; - } - - // getting name - public String getUrl(){ - return this._url; - } - - // setting name - public void setUrl(String url){ - this._url = url; - } - - // getting phone number - public String getTitle(){ - return this._title; - } - - // setting phone number - public void setTitle(String title){ - this._title = title; - } - -} \ No newline at end of file diff --git a/src/acr/browser/barebones/incognitoclasses/IncognitoChromeClient.java b/src/acr/browser/barebones/incognitoclasses/IncognitoChromeClient.java deleted file mode 100644 index c31a2fb..0000000 --- a/src/acr/browser/barebones/incognitoclasses/IncognitoChromeClient.java +++ /dev/null @@ -1,219 +0,0 @@ -package acr.browser.barebones.incognitoclasses; - -import acr.browser.barebones.R; -import acr.browser.barebones.activities.IncognitoModeActivity; -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.net.Uri; -import android.os.Message; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.webkit.GeolocationPermissions; -import android.webkit.ValueCallback; -import android.webkit.WebChromeClient; -import android.webkit.WebView; -import android.webkit.WebStorage.QuotaUpdater; -import android.widget.FrameLayout; - -@SuppressLint("SetJavaScriptEnabled") -public class IncognitoChromeClient extends WebChromeClient { - private static Context context; - private static Activity browserActivity; - private static View mCustomView; - private static CustomViewCallback mCustomViewCallback; - public IncognitoChromeClient(IncognitoModeActivity activity){ - context = activity; - browserActivity = activity; - } - public Bitmap mDefaultVideoPoster; - public View mVideoProgressView; - public FrameLayout fullScreenContainer; - public int orientation; - - @Override - public void onExceededDatabaseQuota(String url, - String databaseIdentifier, long quota, - long estimatedDatabaseSize, long totalQuota, - QuotaUpdater quotaUpdater) { - quotaUpdater.updateQuota(totalQuota + estimatedDatabaseSize); - - } - - @Override - public void onProgressChanged(WebView view, int newProgress) { - IncognitoModeActivity.onProgressChanged(view.getId(), newProgress); - super.onProgressChanged(view, newProgress); - } - - @Override - public void onReachedMaxAppCacheSize(long requiredStorage, long quota, - QuotaUpdater quotaUpdater) { - quotaUpdater.updateQuota(quota + requiredStorage); - } - - @Override - public Bitmap getDefaultVideoPoster() { - if (mDefaultVideoPoster == null) { - mDefaultVideoPoster = BitmapFactory.decodeResource( - context.getResources(), android.R.color.black); - } - return mDefaultVideoPoster; - } - - @Override - public View getVideoLoadingProgressView() { - if (mVideoProgressView == null) { - LayoutInflater inflater = LayoutInflater.from(context); - mVideoProgressView = inflater.inflate( - android.R.layout.simple_spinner_item, null); - } - return mVideoProgressView; - } - - @Override - public void onCloseWindow(WebView window) { - Message msg = Message.obtain(); - msg.what = 3; - msg.arg1 = window.getId(); - IncognitoModeActivity.browserHandler.sendMessage(msg); - super.onCloseWindow(window); - } - - @Override - public boolean onCreateWindow(WebView view, boolean isDialog, - boolean isUserGesture, final Message resultMsg) { - - if (isUserGesture) { - IncognitoModeActivity.onCreateWindow(resultMsg); - } - return true; - } - - - @Override - public void onGeolocationPermissionsShowPrompt(final String origin, - final GeolocationPermissions.Callback callback) { - final boolean remember = true; - AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setTitle("Location Access"); - String org = null; - if (origin.length() > 50) { - org = (String) origin.subSequence(0, 50) + "..."; - } else { - org = origin; - } - builder.setMessage(org + "\nWould like to use your Location ") - .setCancelable(true) - .setPositiveButton("Allow", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int id) { - callback.invoke(origin, true, remember); - } - }) - .setNegativeButton("Don't Allow", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int id) { - callback.invoke(origin, false, remember); - } - }); - AlertDialog alert = builder.create(); - alert.show(); - - } - - @Override - public void onHideCustomView() { - if (mCustomView == null && mCustomViewCallback == null) { - return; - } - - mCustomView.setKeepScreenOn(false); - mCustomView = null; - IncognitoModeActivity.onHideCustomView(fullScreenContainer, mCustomViewCallback, orientation); - super.onHideCustomView(); - } - - @Override - public void onReceivedIcon(WebView view, Bitmap favicon) { - IncognitoModeActivity.setFavicon(view.getId(), favicon); - } - - @Override - public void onReceivedTitle(final WebView view, final String title) { - IncognitoModeActivity.onReceivedTitle(view.getId(), title); - super.onReceivedTitle(view, title); - } - - @Override - public void onShowCustomView(View view, int requestedOrientation, - CustomViewCallback callback) { - if (mCustomView != null) { - callback.onCustomViewHidden(); - return; - } - view.setKeepScreenOn(true); - orientation = browserActivity.getRequestedOrientation(); - FrameLayout screen = (FrameLayout) browserActivity.getWindow().getDecorView(); - fullScreenContainer = new FrameLayout(context); - fullScreenContainer.setBackgroundColor(context.getResources().getColor( - R.color.black)); - IncognitoModeActivity.onShowCustomView(); - fullScreenContainer.addView(view, - ViewGroup.LayoutParams.MATCH_PARENT); - screen.addView(fullScreenContainer, - ViewGroup.LayoutParams.MATCH_PARENT); - mCustomView = view; - mCustomViewCallback = callback; - browserActivity.setRequestedOrientation(requestedOrientation); - super.onShowCustomView(view, requestedOrientation, callback); - } - - @Override - public void onShowCustomView(View view, - WebChromeClient.CustomViewCallback callback) { - if (mCustomView != null) { - callback.onCustomViewHidden(); - return; - } - view.setKeepScreenOn(true); - orientation = browserActivity.getRequestedOrientation(); - FrameLayout screen = (FrameLayout) browserActivity.getWindow().getDecorView(); - fullScreenContainer = new FrameLayout(context); - fullScreenContainer.setBackgroundColor(context.getResources().getColor( - R.color.black)); - IncognitoModeActivity.onShowCustomView(); - fullScreenContainer.addView(view, - ViewGroup.LayoutParams.MATCH_PARENT); - screen.addView(fullScreenContainer, - ViewGroup.LayoutParams.MATCH_PARENT); - mCustomView = view; - mCustomViewCallback = callback; - browserActivity.setRequestedOrientation(browserActivity.getRequestedOrientation()); - super.onShowCustomView(view, callback); - } - - public void openFileChooser(ValueCallback uploadMsg) { - IncognitoModeActivity.openFileChooser(uploadMsg); - } - - public void openFileChooser(ValueCallback uploadMsg, - String acceptType) { - IncognitoModeActivity.openFileChooser(uploadMsg); - } - - public void openFileChooser(ValueCallback uploadMsg, - String acceptType, String capture) { - IncognitoModeActivity.openFileChooser(uploadMsg); - } - -} diff --git a/src/acr/browser/barebones/incognitoclasses/IncognitoDownloadListener.java b/src/acr/browser/barebones/incognitoclasses/IncognitoDownloadListener.java deleted file mode 100644 index 459bf8f..0000000 --- a/src/acr/browser/barebones/incognitoclasses/IncognitoDownloadListener.java +++ /dev/null @@ -1,60 +0,0 @@ -package acr.browser.barebones.incognitoclasses; - -import acr.browser.barebones.activities.IncognitoModeActivity; -import acr.browser.barebones.utilities.Utils; -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.net.Uri; -import android.webkit.DownloadListener; - -public class IncognitoDownloadListener implements DownloadListener { - private static Context context; - public IncognitoDownloadListener(IncognitoModeActivity activity){ - context = activity; - } - @Override - public void onDownloadStart(final String url, String userAgent, - final String contentDisposition, final String mimetype, - long contentLength) { - if (url.endsWith(".mp4") || url.endsWith(".m4a")) { - - AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setTitle("Open as..."); - builder.setMessage( - "Do you want to download this video or watch it in an app?") - .setCancelable(true) - .setPositiveButton("Download", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int id) { - Utils.downloadFile(context, url, - contentDisposition, mimetype); - } - }) - .setNegativeButton("Watch", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int id) { - Intent intent = new Intent( - Intent.ACTION_VIEW); - intent.setDataAndType(Uri.parse(url), - "video/mp4"); - intent.putExtra( - "acr.browser.barebones.Download", - 1); - context.startActivity(intent); - } - }); - AlertDialog alert = builder.create(); - alert.show(); - - } else { - Utils.downloadFile(context, url, contentDisposition, mimetype); - } - } - -} diff --git a/src/acr/browser/barebones/incognitoclasses/IncognitoLongClickListener.java b/src/acr/browser/barebones/incognitoclasses/IncognitoLongClickListener.java deleted file mode 100644 index 6f8855f..0000000 --- a/src/acr/browser/barebones/incognitoclasses/IncognitoLongClickListener.java +++ /dev/null @@ -1,14 +0,0 @@ -package acr.browser.barebones.incognitoclasses; - -import acr.browser.barebones.activities.IncognitoModeActivity; -import android.view.View; -import android.view.View.OnLongClickListener; - -public class IncognitoLongClickListener implements OnLongClickListener{ - - @Override - public boolean onLongClick(View v) { - return IncognitoModeActivity.onLongClick(); - } - -} diff --git a/src/acr/browser/barebones/incognitoclasses/IncognitoWebViewClient.java b/src/acr/browser/barebones/incognitoclasses/IncognitoWebViewClient.java deleted file mode 100644 index e0b8f3a..0000000 --- a/src/acr/browser/barebones/incognitoclasses/IncognitoWebViewClient.java +++ /dev/null @@ -1,202 +0,0 @@ -package acr.browser.barebones.incognitoclasses; - -import acr.browser.barebones.activities.IncognitoModeActivity; -import acr.browser.barebones.utilities.Utils; -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.net.MailTo; -import android.net.Uri; -import android.net.http.SslError; -import android.os.Message; -import android.text.InputType; -import android.text.TextUtils; -import android.text.method.PasswordTransformationMethod; -import android.util.Log; -import android.webkit.HttpAuthHandler; -import android.webkit.SslErrorHandler; -import android.webkit.WebView; -import android.webkit.WebViewClient; -import android.widget.EditText; -import android.widget.LinearLayout; - -public class IncognitoWebViewClient extends WebViewClient { - private static Context context; - public IncognitoWebViewClient(IncognitoModeActivity browserActivity){ - context = browserActivity; - } - - @Override - public boolean shouldOverrideUrlLoading(WebView view, String url) { - if (url.startsWith("market://") - || url.startsWith("http://play.google.com/store/apps") - || url.startsWith("https://play.google.com/store/apps")) { - Intent urlIntent = new Intent(Intent.ACTION_VIEW, - Uri.parse(url)); - urlIntent.putExtra("acr.browser.barebones.Origin", - view.getId() + 1); - context.startActivity(urlIntent); - return true; - } else if (url.startsWith("http://www.youtube.com") - || url.startsWith("https://www.youtube.com")) { - Intent urlIntent = new Intent(Intent.ACTION_VIEW, - Uri.parse(url)); - urlIntent.putExtra("acr.browser.barebones.Origin", - view.getId() + 1); - context.startActivity(urlIntent); - return true; - } else if (url.startsWith("http://maps.google.com") - || url.startsWith("https://maps.google.com")) { - Intent urlIntent = new Intent(Intent.ACTION_VIEW, - Uri.parse(url)); - urlIntent.putExtra("acr.browser.barebones.Origin", - view.getId() + 1); - context.startActivity(urlIntent); - return true; - } else if (url.contains("tel:") || TextUtils.isDigitsOnly(url)) { - context.startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(url))); - return true; - } else if (url.contains("mailto:")) { - MailTo mailTo = MailTo.parse(url); - Intent i = Utils.newEmailIntent(context, - mailTo.getTo(), mailTo.getSubject(), mailTo.getBody(), - mailTo.getCc()); - context.startActivity(i); - view.reload(); - return true; - } - return super.shouldOverrideUrlLoading(view, url); - } - - @Override - public void onReceivedHttpAuthRequest(final WebView view, - final HttpAuthHandler handler, final String host, - final String realm) { - - AlertDialog.Builder builder = new AlertDialog.Builder(context); - final EditText name = new EditText(context); - final EditText password = new EditText(context); - LinearLayout passLayout = new LinearLayout(context); - passLayout.setOrientation(LinearLayout.VERTICAL); - - passLayout.addView(name); - passLayout.addView(password); - - name.setHint("Username"); - password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); - password.setTransformationMethod(new PasswordTransformationMethod()); - password.setHint("Password"); - builder.setTitle("Sign in"); - builder.setView(passLayout); - builder.setCancelable(true) - .setPositiveButton("Sign in", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int id) { - String user = name.getText().toString(); - String pass = password.getText().toString(); - handler.proceed(user.trim(), pass.trim()); - Log.i("Lightning", "Request Login"); - - } - }) - .setNegativeButton("Cancel", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int id) { - handler.cancel(); - - } - }); - AlertDialog alert = builder.create(); - alert.show(); - - } - - @Override - public void onScaleChanged(WebView view, float oldScale, float newScale) { - if (view.isShown()) { - view.invalidate(); - } - super.onScaleChanged(view, oldScale, newScale); - } - - @Override - public void onPageFinished(WebView view, String url) { - IncognitoModeActivity.onPageFinished(view, url); - super.onPageFinished(view, url); - } - - @Override - public void onPageStarted(WebView view, String url, Bitmap favicon) { - IncognitoModeActivity.onPageStarted(view, url, favicon); - super.onPageStarted(view, url, favicon); - } - - @Override - public void onReceivedSslError(WebView view, - final SslErrorHandler handler, SslError error) { - AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setTitle("Warning"); - builder.setMessage( - "The certificate of the site is not trusted. Proceed anyway?") - .setCancelable(true) - .setPositiveButton("Yes", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int id) { - handler.proceed(); - } - }) - .setNegativeButton("No", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int id) { - handler.cancel(); - } - }); - AlertDialog alert = builder.create(); - if (error.getPrimaryError() == SslError.SSL_UNTRUSTED) { - alert.show(); - } else { - handler.proceed(); - } - - } - - @Override - public void onFormResubmission(WebView view, final Message dontResend, - final Message resend) { - AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setTitle("Form Resubmission"); - builder.setMessage("Would you like to resend the data?") - .setCancelable(true) - .setPositiveButton("Yes", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int id) { - - resend.sendToTarget(); - } - }) - .setNegativeButton("No", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int id) { - - dontResend.sendToTarget(); - } - }); - AlertDialog alert = builder.create(); - alert.show(); - super.onFormResubmission(view, dontResend, resend); - } -} diff --git a/src/acr/browser/barebones/utilities/BookmarkPageVariables.java b/src/acr/browser/barebones/utilities/BookmarkPageVariables.java deleted file mode 100644 index 9acc39a..0000000 --- a/src/acr/browser/barebones/utilities/BookmarkPageVariables.java +++ /dev/null @@ -1,24 +0,0 @@ -package acr.browser.barebones.utilities; - -public class BookmarkPageVariables { - public static final String Heading = "" - + "" - + "Bookmarks"; - public static final String Part1 = "
" - + "
" + "

" + ""+ - ""; - public static final String Part4 = "

"; - public static final String End = ""; -} diff --git a/src/acr/browser/barebones/utilities/HistoryPageVariables.java b/src/acr/browser/barebones/utilities/HistoryPageVariables.java deleted file mode 100644 index 1b27745..0000000 --- a/src/acr/browser/barebones/utilities/HistoryPageVariables.java +++ /dev/null @@ -1,19 +0,0 @@ -package acr.browser.barebones.utilities; - -public class HistoryPageVariables { - public static final String Heading = "" - + "History"; - - public static final String Part1 = "

"; - public static final String Part3 = "

"; - public static final String Part4 = "

"; - public static final String End = ""; -} diff --git a/src/acr/browser/barebones/utilities/Utils.java b/src/acr/browser/barebones/utilities/Utils.java deleted file mode 100644 index 9e08cd6..0000000 --- a/src/acr/browser/barebones/utilities/Utils.java +++ /dev/null @@ -1,198 +0,0 @@ -package acr.browser.barebones.utilities; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; - -import acr.browser.barebones.databases.DatabaseHandler; -import acr.browser.barebones.databases.HistoryItem; -import android.annotation.TargetApi; -import android.app.AlertDialog; -import android.app.DownloadManager; -import android.content.ContentResolver; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.database.Cursor; -import android.database.DatabaseUtils; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteException; -import android.net.Uri; -import android.os.Build; -import android.os.Environment; -import android.provider.Browser; -import android.util.Log; -import android.webkit.URLUtil; -import android.widget.Toast; - -public class Utils { - - public static DatabaseHandler historyHandler; - public static SQLiteDatabase history; - public static Cursor cursor; - public static StringBuilder sb; - public static Runnable update; - - public static void createInformativeDialog(Context context, String title, - String message) { - AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setTitle(title); - builder.setMessage(message).setCancelable(true) - .setPositiveButton("Ok", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - } - }); - AlertDialog alert = builder.create(); - alert.show(); - } - - public static void addBookmark(Context context, String title, String url) { - File book = new File(context.getFilesDir(), "bookmarks"); - File bookUrl = new File(context.getFilesDir(), "bookurl"); - try { - BufferedReader readUrlRead = new BufferedReader(new FileReader( - bookUrl)); - String u; - int n = 0; - while ((u = readUrlRead.readLine()) != null - && n < FinalVariables.MAX_BOOKMARKS) { - if (u.contentEquals(url)) { - readUrlRead.close(); - return; - } - n++; - } - readUrlRead.close(); - - } catch (FileNotFoundException ignored) { - } catch (IOException ignored) { - } catch (NullPointerException ignored) { - } - try { - BufferedWriter bookWriter = new BufferedWriter(new FileWriter(book, - true)); - BufferedWriter urlWriter = new BufferedWriter(new FileWriter( - bookUrl, true)); - bookWriter.write(title); - urlWriter.write(url); - bookWriter.newLine(); - urlWriter.newLine(); - bookWriter.close(); - urlWriter.close(); - } catch (FileNotFoundException ignored) { - } catch (IOException ignored) { - } catch (NullPointerException ignored) { - } - } - - public static void updateHistory(final Context context, - final ContentResolver content, final boolean noStockBrowser, - final String url, final String title) { - update = new Runnable() { - @Override - public void run() { - if (!noStockBrowser) { - try { - Browser.updateVisitedHistory(content, url, true); - } catch (NullPointerException ignored) { - } - } - try { - sb = new StringBuilder("url" + " = "); - DatabaseUtils.appendEscapedSQLString(sb, url); - historyHandler = new DatabaseHandler(context); - history = historyHandler.getReadableDatabase(); - cursor = history.query("history", new String[] { - "id", "url", "title" }, sb.toString(), null, null, - null, null); - if (!cursor.moveToFirst()) { - historyHandler.addHistoryItem(new HistoryItem(url, - title)); - } else { - historyHandler.delete(url); - historyHandler.addHistoryItem(new HistoryItem(url, - title)); - } - historyHandler.close(); - cursor.close(); - history.close(); - } catch (IllegalStateException e) { - Log.e("Barebones", "IllegalStateException in updateHistory"); - } catch (NullPointerException e) { - Log.e("Barebones", "NullPointerException in updateHistory"); - } catch (SQLiteException e) { - Log.e("Barebones", "SQLiteException in updateHistory"); - } - } - }; - if (url != null) { - if (!url.startsWith("file://")) { - new Thread(update).start(); - } - } - } - - @TargetApi(Build.VERSION_CODES.GINGERBREAD) - public static void downloadFile(final Context context, final String url, - final String contentDisposition, final String mimetype) { - try { - DownloadManager download = (DownloadManager) context - .getSystemService(Context.DOWNLOAD_SERVICE); - Uri nice = Uri.parse(url); - DownloadManager.Request it = new DownloadManager.Request( - nice); - String fileName = URLUtil.guessFileName(url, - contentDisposition, mimetype); - it.setTitle(fileName); - it.setDescription(url); - if (FinalVariables.API >= 11) { - it.allowScanningByMediaScanner(); - it.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); - } - String location = context.getSharedPreferences("settings", - 0).getString("download", - Environment.DIRECTORY_DOWNLOADS); - it.setDestinationInExternalPublicDir(location, fileName); - Log.i("Barebones", "Downloading" + fileName); - download.enqueue(it); - - } catch (NullPointerException e) { - Log.e("Barebones", "Problem downloading"); - Toast.makeText(context, "Error Downloading File", - Toast.LENGTH_SHORT).show(); - } catch (IllegalArgumentException e) { - Log.e("Barebones", "Problem downloading"); - Toast.makeText(context, "Error Downloading File", - Toast.LENGTH_SHORT).show(); - } catch (SecurityException ignored) { - - } - } - - public static void showToast(Context context, String message) { - Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); - } - - public static Intent newEmailIntent(Context context, String address, - String subject, String body, String cc) { - Intent intent = new Intent(Intent.ACTION_SEND); - intent.putExtra(Intent.EXTRA_EMAIL, new String[] { address }); - intent.putExtra(Intent.EXTRA_TEXT, body); - intent.putExtra(Intent.EXTRA_SUBJECT, subject); - intent.putExtra(Intent.EXTRA_CC, cc); - intent.setType("message/rfc822"); - return intent; - } - - public static int convertDensityPixels(Context context, int densityPixels) { - float scale = context.getResources().getDisplayMetrics().density; - int pixels = (int) (densityPixels * scale + 0.5f); - return pixels; - } - -} diff --git a/src/acr/browser/barebones/webviewclasses/CustomChromeClient.java b/src/acr/browser/barebones/webviewclasses/CustomChromeClient.java deleted file mode 100644 index df8cabc..0000000 --- a/src/acr/browser/barebones/webviewclasses/CustomChromeClient.java +++ /dev/null @@ -1,219 +0,0 @@ -package acr.browser.barebones.webviewclasses; - -import acr.browser.barebones.R; -import acr.browser.barebones.activities.BrowserActivity; -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.net.Uri; -import android.os.Message; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.webkit.GeolocationPermissions; -import android.webkit.ValueCallback; -import android.webkit.WebChromeClient; -import android.webkit.WebView; -import android.webkit.WebStorage.QuotaUpdater; -import android.widget.FrameLayout; - -@SuppressLint("SetJavaScriptEnabled") -public class CustomChromeClient extends WebChromeClient { - private static Context context; - private static Activity browserActivity; - private static View mCustomView; - private static CustomViewCallback mCustomViewCallback; - public CustomChromeClient(BrowserActivity activity){ - context = activity; - browserActivity = activity; - } - public Bitmap mDefaultVideoPoster; - public View mVideoProgressView; - public FrameLayout fullScreenContainer; - public int orientation; - - @Override - public void onExceededDatabaseQuota(String url, - String databaseIdentifier, long quota, - long estimatedDatabaseSize, long totalQuota, - QuotaUpdater quotaUpdater) { - quotaUpdater.updateQuota(totalQuota + estimatedDatabaseSize); - - } - - @Override - public void onProgressChanged(WebView view, int newProgress) { - BrowserActivity.onProgressChanged(view.getId(), newProgress); - super.onProgressChanged(view, newProgress); - } - - @Override - public void onReachedMaxAppCacheSize(long requiredStorage, long quota, - QuotaUpdater quotaUpdater) { - quotaUpdater.updateQuota(quota + requiredStorage); - } - - @Override - public Bitmap getDefaultVideoPoster() { - if (mDefaultVideoPoster == null) { - mDefaultVideoPoster = BitmapFactory.decodeResource( - context.getResources(), android.R.color.black); - } - return mDefaultVideoPoster; - } - - @Override - public View getVideoLoadingProgressView() { - if (mVideoProgressView == null) { - LayoutInflater inflater = LayoutInflater.from(context); - mVideoProgressView = inflater.inflate( - android.R.layout.simple_spinner_item, null); - } - return mVideoProgressView; - } - - @Override - public void onCloseWindow(WebView window) { - Message msg = Message.obtain(); - msg.what = 3; - msg.arg1 = window.getId(); - BrowserActivity.browserHandler.sendMessage(msg); - super.onCloseWindow(window); - } - - @Override - public boolean onCreateWindow(WebView view, boolean isDialog, - boolean isUserGesture, final Message resultMsg) { - - if (isUserGesture) { - BrowserActivity.onCreateWindow(resultMsg); - } - return true; - } - - - @Override - public void onGeolocationPermissionsShowPrompt(final String origin, - final GeolocationPermissions.Callback callback) { - final boolean remember = true; - AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setTitle("Location Access"); - String org = null; - if (origin.length() > 50) { - org = (String) origin.subSequence(0, 50) + "..."; - } else { - org = origin; - } - builder.setMessage(org + "\nWould like to use your Location ") - .setCancelable(true) - .setPositiveButton("Allow", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int id) { - callback.invoke(origin, true, remember); - } - }) - .setNegativeButton("Don't Allow", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int id) { - callback.invoke(origin, false, remember); - } - }); - AlertDialog alert = builder.create(); - alert.show(); - - } - - @Override - public void onHideCustomView() { - if (mCustomView == null && mCustomViewCallback == null) { - return; - } - - mCustomView.setKeepScreenOn(false); - mCustomView = null; - BrowserActivity.onHideCustomView(fullScreenContainer, mCustomViewCallback, orientation); - super.onHideCustomView(); - } - - @Override - public void onReceivedIcon(WebView view, Bitmap favicon) { - BrowserActivity.setFavicon(view.getId(), favicon); - } - - @Override - public void onReceivedTitle(final WebView view, final String title) { - BrowserActivity.onReceivedTitle(view.getId(), title); - super.onReceivedTitle(view, title); - } - - @Override - public void onShowCustomView(View view, int requestedOrientation, - CustomViewCallback callback) { - if (mCustomView != null) { - callback.onCustomViewHidden(); - return; - } - view.setKeepScreenOn(true); - orientation = browserActivity.getRequestedOrientation(); - FrameLayout screen = (FrameLayout) browserActivity.getWindow().getDecorView(); - fullScreenContainer = new FrameLayout(context); - fullScreenContainer.setBackgroundColor(context.getResources().getColor( - R.color.black)); - BrowserActivity.onShowCustomView(); - fullScreenContainer.addView(view, - ViewGroup.LayoutParams.MATCH_PARENT); - screen.addView(fullScreenContainer, - ViewGroup.LayoutParams.MATCH_PARENT); - mCustomView = view; - mCustomViewCallback = callback; - browserActivity.setRequestedOrientation(requestedOrientation); - super.onShowCustomView(view, requestedOrientation, callback); - } - - @Override - public void onShowCustomView(View view, - WebChromeClient.CustomViewCallback callback) { - if (mCustomView != null) { - callback.onCustomViewHidden(); - return; - } - view.setKeepScreenOn(true); - orientation = browserActivity.getRequestedOrientation(); - FrameLayout screen = (FrameLayout) browserActivity.getWindow().getDecorView(); - fullScreenContainer = new FrameLayout(context); - fullScreenContainer.setBackgroundColor(context.getResources().getColor( - R.color.black)); - BrowserActivity.onShowCustomView(); - fullScreenContainer.addView(view, - ViewGroup.LayoutParams.MATCH_PARENT); - screen.addView(fullScreenContainer, - ViewGroup.LayoutParams.MATCH_PARENT); - mCustomView = view; - mCustomViewCallback = callback; - browserActivity.setRequestedOrientation(browserActivity.getRequestedOrientation()); - super.onShowCustomView(view, callback); - } - - public void openFileChooser(ValueCallback uploadMsg) { - BrowserActivity.openFileChooser(uploadMsg); - } - - public void openFileChooser(ValueCallback uploadMsg, - String acceptType) { - BrowserActivity.openFileChooser(uploadMsg); - } - - public void openFileChooser(ValueCallback uploadMsg, - String acceptType, String capture) { - BrowserActivity.openFileChooser(uploadMsg); - } - -} diff --git a/src/acr/browser/barebones/webviewclasses/CustomDownloadListener.java b/src/acr/browser/barebones/webviewclasses/CustomDownloadListener.java deleted file mode 100644 index d9e7436..0000000 --- a/src/acr/browser/barebones/webviewclasses/CustomDownloadListener.java +++ /dev/null @@ -1,61 +0,0 @@ -package acr.browser.barebones.webviewclasses; - -import acr.browser.barebones.utilities.Utils; -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.net.Uri; -import android.webkit.DownloadListener; - -public class CustomDownloadListener implements DownloadListener { - private static Context mContext; - public CustomDownloadListener(Context context){ - mContext = context; - } - - - @Override - public void onDownloadStart(final String url, String userAgent, - final String contentDisposition, final String mimetype, - long contentLength) { - if (url.endsWith(".mp4") || url.endsWith(".m4a")) { - - AlertDialog.Builder builder = new AlertDialog.Builder(mContext); - builder.setTitle("Open as..."); - builder.setMessage( - "Do you want to download this video or watch it in an app?") - .setCancelable(true) - .setPositiveButton("Download", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int id) { - Utils.downloadFile(mContext, url, - contentDisposition, mimetype); - } - }) - .setNegativeButton("Watch", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int id) { - Intent intent = new Intent( - Intent.ACTION_VIEW); - intent.setDataAndType(Uri.parse(url), - "video/mp4"); - intent.putExtra( - "acr.browser.barebones.Download", - 1); - mContext.startActivity(intent); - } - }); - AlertDialog alert = builder.create(); - alert.show(); - - } else { - Utils.downloadFile(mContext, url, contentDisposition, mimetype); - } - } - -} diff --git a/src/acr/browser/barebones/webviewclasses/CustomWebViewClient.java b/src/acr/browser/barebones/webviewclasses/CustomWebViewClient.java deleted file mode 100644 index c87242a..0000000 --- a/src/acr/browser/barebones/webviewclasses/CustomWebViewClient.java +++ /dev/null @@ -1,202 +0,0 @@ -package acr.browser.barebones.webviewclasses; - -import acr.browser.barebones.activities.BrowserActivity; -import acr.browser.barebones.utilities.Utils; -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.net.MailTo; -import android.net.Uri; -import android.net.http.SslError; -import android.os.Message; -import android.text.InputType; -import android.text.TextUtils; -import android.text.method.PasswordTransformationMethod; -import android.util.Log; -import android.webkit.HttpAuthHandler; -import android.webkit.SslErrorHandler; -import android.webkit.WebView; -import android.webkit.WebViewClient; -import android.widget.EditText; -import android.widget.LinearLayout; - -public class CustomWebViewClient extends WebViewClient { - private static Context context; - public CustomWebViewClient(BrowserActivity browserActivity){ - context = browserActivity; - } - - @Override - public boolean shouldOverrideUrlLoading(WebView view, String url) { - if (url.startsWith("market://") - || url.startsWith("http://play.google.com/store/apps") - || url.startsWith("https://play.google.com/store/apps")) { - Intent urlIntent = new Intent(Intent.ACTION_VIEW, - Uri.parse(url)); - urlIntent.putExtra("acr.browser.barebones.Origin", - view.getId() + 1); - context.startActivity(urlIntent); - return true; - } else if (url.startsWith("http://www.youtube.com") - || url.startsWith("https://www.youtube.com")) { - Intent urlIntent = new Intent(Intent.ACTION_VIEW, - Uri.parse(url)); - urlIntent.putExtra("acr.browser.barebones.Origin", - view.getId() + 1); - context.startActivity(urlIntent); - return true; - } else if (url.startsWith("http://maps.google.com") - || url.startsWith("https://maps.google.com")) { - Intent urlIntent = new Intent(Intent.ACTION_VIEW, - Uri.parse(url)); - urlIntent.putExtra("acr.browser.barebones.Origin", - view.getId() + 1); - context.startActivity(urlIntent); - return true; - } else if (url.contains("tel:") || TextUtils.isDigitsOnly(url)) { - context.startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(url))); - return true; - } else if (url.contains("mailto:")) { - MailTo mailTo = MailTo.parse(url); - Intent i = Utils.newEmailIntent(context, - mailTo.getTo(), mailTo.getSubject(), mailTo.getBody(), - mailTo.getCc()); - context.startActivity(i); - view.reload(); - return true; - } - return super.shouldOverrideUrlLoading(view, url); - } - - @Override - public void onReceivedHttpAuthRequest(final WebView view, - final HttpAuthHandler handler, final String host, - final String realm) { - - AlertDialog.Builder builder = new AlertDialog.Builder(context); - final EditText name = new EditText(context); - final EditText password = new EditText(context); - LinearLayout passLayout = new LinearLayout(context); - passLayout.setOrientation(LinearLayout.VERTICAL); - - passLayout.addView(name); - passLayout.addView(password); - - name.setHint("Username"); - password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); - password.setTransformationMethod(new PasswordTransformationMethod()); - password.setHint("Password"); - builder.setTitle("Sign in"); - builder.setView(passLayout); - builder.setCancelable(true) - .setPositiveButton("Sign in", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int id) { - String user = name.getText().toString(); - String pass = password.getText().toString(); - handler.proceed(user.trim(), pass.trim()); - Log.i("Lightning", "Request Login"); - - } - }) - .setNegativeButton("Cancel", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int id) { - handler.cancel(); - - } - }); - AlertDialog alert = builder.create(); - alert.show(); - - } - - @Override - public void onScaleChanged(WebView view, float oldScale, float newScale) { - if (view.isShown()) { - view.invalidate(); - } - super.onScaleChanged(view, oldScale, newScale); - } - - @Override - public void onPageFinished(WebView view, String url) { - BrowserActivity.onPageFinished(view, url); - super.onPageFinished(view, url); - } - - @Override - public void onPageStarted(WebView view, String url, Bitmap favicon) { - BrowserActivity.onPageStarted(view, url, favicon); - super.onPageStarted(view, url, favicon); - } - - @Override - public void onReceivedSslError(WebView view, - final SslErrorHandler handler, SslError error) { - AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setTitle("Warning"); - builder.setMessage( - "The certificate of the site is not trusted. Proceed anyway?") - .setCancelable(true) - .setPositiveButton("Yes", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int id) { - handler.proceed(); - } - }) - .setNegativeButton("No", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int id) { - handler.cancel(); - } - }); - AlertDialog alert = builder.create(); - if (error.getPrimaryError() == SslError.SSL_UNTRUSTED) { - alert.show(); - } else { - handler.proceed(); - } - - } - - @Override - public void onFormResubmission(WebView view, final Message dontResend, - final Message resend) { - AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setTitle("Form Resubmission"); - builder.setMessage("Would you like to resend the data?") - .setCancelable(true) - .setPositiveButton("Yes", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int id) { - - resend.sendToTarget(); - } - }) - .setNegativeButton("No", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int id) { - - dontResend.sendToTarget(); - } - }); - AlertDialog alert = builder.create(); - alert.show(); - super.onFormResubmission(view, dontResend, resend); - } -} diff --git a/src/acr/browser/barebones/webviewclasses/WebPageLongClickListener.java b/src/acr/browser/barebones/webviewclasses/WebPageLongClickListener.java deleted file mode 100644 index 1313fed..0000000 --- a/src/acr/browser/barebones/webviewclasses/WebPageLongClickListener.java +++ /dev/null @@ -1,14 +0,0 @@ -package acr.browser.barebones.webviewclasses; - -import acr.browser.barebones.activities.BrowserActivity; -import android.view.View; -import android.view.View.OnLongClickListener; - -public class WebPageLongClickListener implements OnLongClickListener{ - - @Override - public boolean onLongClick(View v) { - return BrowserActivity.onLongClick(); - } - -} diff --git a/src/acr/browser/lightning/AdBlock.java b/src/acr/browser/lightning/AdBlock.java new file mode 100644 index 0000000..a0cb17e --- /dev/null +++ b/src/acr/browser/lightning/AdBlock.java @@ -0,0 +1,92 @@ +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 mAdBlockMap = null; + private SharedPreferences mPreferences; + private boolean mBlockAds = false; + + public AdBlock(Context context) { + if (mAdBlockMap == null) { + mAdBlockMap = new TreeMap( + 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; + } + +} diff --git a/src/acr/browser/barebones/activities/AdvancedSettingsActivity.java b/src/acr/browser/lightning/AdvancedSettingsActivity.java similarity index 61% rename from src/acr/browser/barebones/activities/AdvancedSettingsActivity.java rename to src/acr/browser/lightning/AdvancedSettingsActivity.java index 02565f8..3489f26 100644 --- a/src/acr/browser/barebones/activities/AdvancedSettingsActivity.java +++ b/src/acr/browser/lightning/AdvancedSettingsActivity.java @@ -1,11 +1,10 @@ -package acr.browser.barebones.activities; +/* + * Copyright 2014 A.C.R. Development + */ +package acr.browser.lightning; import java.io.File; -import acr.browser.barebones.R; -import acr.browser.barebones.utilities.FinalVariables; -import acr.browser.barebones.utilities.Utils; -import acr.browser.barebones.activities.BrowserActivity; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -16,47 +15,59 @@ import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; import android.database.Cursor; +import android.view.MenuItem; import android.view.View; import android.view.WindowManager; import android.view.View.OnClickListener; import android.webkit.CookieManager; import android.webkit.CookieSyncManager; import android.webkit.WebIconDatabase; +import android.webkit.WebView; import android.webkit.WebViewDatabase; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; -import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; -@SuppressWarnings("deprecation") public class AdvancedSettingsActivity extends Activity { - // settings variables - static int defaultZoom, textSize; - static final int API = FinalVariables.API; - static final String preferences = "settings"; - static SharedPreferences settings; - static SharedPreferences.Editor edit; - static RelativeLayout r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16; - static CheckBox cb1, cb2, cb3, cb4, cb5, cb6, cb7, cb8, cb9, cb10, cb11, cb12; - static Context CONTEXT; - Handler messageHandler; + // mPreferences variables + private static final int API = android.os.Build.VERSION.SDK_INT; + private static SharedPreferences mPreferences; + private static SharedPreferences.Editor mEditPrefs; + private static RelativeLayout r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, + r12, r13, r14, r15, rIncognitoCookies, rClearCache, + rSearchSuggestions; + private static CheckBox cb1, cb2, cb3, cb4, cb5, cb6, cb7, cb8, cb9, cb10, + cb11, cbIncognitoCookies, cbSearchSuggestions; + private static Context mContext; + private boolean mSystemBrowser; + private Handler messageHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.advanced_settings); - settings = getSharedPreferences(preferences, 0); - if (settings.getBoolean("hidestatus", false)) { + getActionBar().setHomeButtonEnabled(true); + getActionBar().setDisplayHomeAsUpEnabled(true); + mPreferences = getSharedPreferences(PreferenceConstants.PREFERENCES, 0); + if (mPreferences.getBoolean(PreferenceConstants.HIDE_STATUS_BAR, false)) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } - edit = settings.edit(); - CONTEXT = this; + mEditPrefs = mPreferences.edit(); + mSystemBrowser = mPreferences.getBoolean( + PreferenceConstants.SYSTEM_BROWSER_PRESENT, false); + mContext = this; initialize(); - + + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + finish(); + return true; } void initialize() { @@ -76,8 +87,9 @@ public class AdvancedSettingsActivity extends Activity { r13 = (RelativeLayout) findViewById(R.id.r13); r14 = (RelativeLayout) findViewById(R.id.r14); r15 = (RelativeLayout) findViewById(R.id.r15); - r16 = (RelativeLayout) findViewById(R.id.r16); - + rIncognitoCookies = (RelativeLayout) findViewById(R.id.rIncognitoCookies); + rClearCache = (RelativeLayout) findViewById(R.id.rClearCache); + rSearchSuggestions = (RelativeLayout) findViewById(R.id.rGoogleSuggestions); cb1 = (CheckBox) findViewById(R.id.cb1); cb2 = (CheckBox) findViewById(R.id.cb2); @@ -90,20 +102,40 @@ public class AdvancedSettingsActivity extends Activity { cb9 = (CheckBox) findViewById(R.id.cb9); cb10 = (CheckBox) findViewById(R.id.cb10); cb11 = (CheckBox) findViewById(R.id.cb11); - cb12 = (CheckBox) findViewById(R.id.cb12); - - cb1.setChecked(settings.getBoolean("passwords", true)); - cb2.setChecked(settings.getBoolean("cache", false)); - cb3.setChecked(settings.getBoolean("java", true)); - cb4.setChecked(settings.getBoolean("textreflow", false)); - cb5.setChecked(settings.getBoolean("blockimages", false)); - cb6.setChecked(settings.getBoolean("newwindows", true)); - cb7.setChecked(settings.getBoolean("cookies", true)); - cb8.setChecked(settings.getBoolean("wideviewport", true)); - cb9.setChecked(settings.getBoolean("overviewmode", true)); - cb10.setChecked(settings.getBoolean("restoreclosed", true)); - cb11.setChecked(settings.getBoolean("hidestatus", false)); - cb12.setChecked(settings.getBoolean("gestures", true)); + cbIncognitoCookies = (CheckBox) findViewById(R.id.cbIncognitoCookies); + cbSearchSuggestions = (CheckBox) findViewById(R.id.cbGoogleSuggestions); + + cb1.setChecked(mPreferences.getBoolean( + PreferenceConstants.SAVE_PASSWORDS, true)); + cb2.setChecked(mPreferences.getBoolean( + PreferenceConstants.CLEAR_CACHE_EXIT, false)); + cb3.setChecked(mPreferences.getBoolean(PreferenceConstants.JAVASCRIPT, + true)); + cb4.setChecked(mPreferences.getBoolean(PreferenceConstants.TEXT_REFLOW, + false)); + cb4.setEnabled(API < 19); + if (API >= 19) { + mEditPrefs.putBoolean(PreferenceConstants.TEXT_REFLOW, false); + mEditPrefs.commit(); + } + cb5.setChecked(mPreferences.getBoolean( + PreferenceConstants.BLOCK_IMAGES, false)); + cb6.setChecked(mPreferences + .getBoolean(PreferenceConstants.POPUPS, true)); + cb7.setChecked(mPreferences.getBoolean(PreferenceConstants.COOKIES, + true)); + cb8.setChecked(mPreferences.getBoolean( + PreferenceConstants.USE_WIDE_VIEWPORT, true)); + cb9.setChecked(mPreferences.getBoolean( + PreferenceConstants.OVERVIEW_MODE, true)); + cb10.setChecked(mPreferences.getBoolean( + PreferenceConstants.RESTORE_LOST_TABS, true)); + cb11.setChecked(mPreferences.getBoolean( + PreferenceConstants.HIDE_STATUS_BAR, false)); + cbIncognitoCookies.setChecked(mPreferences.getBoolean( + PreferenceConstants.INCOGNITO_COOKIES, false)); + cbSearchSuggestions.setChecked(mPreferences.getBoolean( + PreferenceConstants.GOOGLE_SEARCH_SUGGESTIONS, true)); r1(r1); r2(r2); @@ -120,7 +152,9 @@ public class AdvancedSettingsActivity extends Activity { r13(r13); r14(r14); r15(r15); - r16(r16); + rIncognitoCookies(rIncognitoCookies); + rClearCache(rClearCache); + rSearchSuggestions(rSearchSuggestions); cb1(cb1); cb2(cb2); cb3(cb3); @@ -132,49 +166,43 @@ public class AdvancedSettingsActivity extends Activity { cb9(cb9); cb10(cb10); cb11(cb11); - cb12(cb12); - back(); - - TextView importBookmarks = (TextView)findViewById(R.id.isImportAvailable); - - if(BrowserActivity.noStockBrowser){ - importBookmarks.setText(getResources().getString(R.string.stock_browser_unavailable)); - } - else{ - importBookmarks.setText(getResources().getString(R.string.stock_browser_available)); + cbIncognitoCookies(cbIncognitoCookies); + cbSearchSuggestions(cbSearchSuggestions); + + TextView importBookmarks = (TextView) findViewById(R.id.isImportAvailable); + + if (!mSystemBrowser) { + importBookmarks.setText(getResources().getString( + R.string.stock_browser_unavailable)); + } else { + importBookmarks.setText(getResources().getString( + R.string.stock_browser_available)); } - + messageHandler = new MessageHandler(); } - static class MessageHandler extends Handler{ + static class MessageHandler extends Handler { @Override public void handleMessage(Message msg) { - switch(msg.what){ + switch (msg.what) { case 1: - Utils.showToast(CONTEXT, "History Cleared"); + Utils.showToast( + mContext, + mContext.getResources().getString( + R.string.message_clear_history)); break; case 2: - Utils.showToast(CONTEXT, "Cookies Cleared"); + Utils.showToast( + mContext, + mContext.getResources().getString( + R.string.message_cookies_cleared)); break; } super.handleMessage(msg); } - - } - - void back() { - ImageView back = (ImageView) findViewById(R.id.advanced_back); - back.setBackgroundResource(R.drawable.button); - back.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View arg0) { - finish(); - } - - }); } static void cb1(CheckBox view) { @@ -183,8 +211,9 @@ public class AdvancedSettingsActivity extends Activity { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - edit.putBoolean("passwords", isChecked); - edit.commit(); + mEditPrefs.putBoolean(PreferenceConstants.SAVE_PASSWORDS, + isChecked); + mEditPrefs.commit(); } }); @@ -196,8 +225,9 @@ public class AdvancedSettingsActivity extends Activity { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - edit.putBoolean("cache", isChecked); - edit.commit(); + mEditPrefs.putBoolean(PreferenceConstants.CLEAR_CACHE_EXIT, + isChecked); + mEditPrefs.commit(); } }); @@ -209,8 +239,9 @@ public class AdvancedSettingsActivity extends Activity { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - edit.putBoolean("java", isChecked); - edit.commit(); + mEditPrefs + .putBoolean(PreferenceConstants.JAVASCRIPT, isChecked); + mEditPrefs.commit(); } }); @@ -222,8 +253,9 @@ public class AdvancedSettingsActivity extends Activity { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - edit.putBoolean("textreflow", isChecked); - edit.commit(); + mEditPrefs.putBoolean(PreferenceConstants.TEXT_REFLOW, + isChecked); + mEditPrefs.commit(); } }); } @@ -234,8 +266,9 @@ public class AdvancedSettingsActivity extends Activity { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - edit.putBoolean("blockimages", isChecked); - edit.commit(); + mEditPrefs.putBoolean(PreferenceConstants.BLOCK_IMAGES, + isChecked); + mEditPrefs.commit(); } }); @@ -247,8 +280,8 @@ public class AdvancedSettingsActivity extends Activity { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - edit.putBoolean("newwindows", isChecked); - edit.commit(); + mEditPrefs.putBoolean(PreferenceConstants.POPUPS, isChecked); + mEditPrefs.commit(); } }); @@ -260,76 +293,95 @@ public class AdvancedSettingsActivity extends Activity { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - edit.putBoolean("cookies", isChecked); - edit.commit(); + mEditPrefs.putBoolean(PreferenceConstants.COOKIES, isChecked); + mEditPrefs.commit(); } }); } - + void cb8(CheckBox view) { view.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - edit.putBoolean("wideviewport", isChecked); - edit.commit(); + mEditPrefs.putBoolean(PreferenceConstants.USE_WIDE_VIEWPORT, + isChecked); + mEditPrefs.commit(); } }); } + void cb9(CheckBox view) { view.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - edit.putBoolean("overviewmode", isChecked); - edit.commit(); + mEditPrefs.putBoolean(PreferenceConstants.OVERVIEW_MODE, + isChecked); + mEditPrefs.commit(); } }); } - + void cb10(CheckBox view) { view.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - edit.putBoolean("restoreclosed", isChecked); - edit.commit(); + mEditPrefs.putBoolean(PreferenceConstants.RESTORE_LOST_TABS, + isChecked); + mEditPrefs.commit(); } }); } - + void cb11(CheckBox view) { view.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - edit.putBoolean("hidestatus", isChecked); - edit.commit(); + mEditPrefs.putBoolean(PreferenceConstants.HIDE_STATUS_BAR, + isChecked); + mEditPrefs.commit(); } }); } - - void cb12(CheckBox view) { + + void cbIncognitoCookies(CheckBox view) { view.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - edit.putBoolean("gestures", isChecked); - edit.commit(); + mEditPrefs.putBoolean(PreferenceConstants.INCOGNITO_COOKIES, + isChecked); + mEditPrefs.commit(); } }); } + + void cbSearchSuggestions(CheckBox view){ + view.setOnCheckedChangeListener(new OnCheckedChangeListener(){ + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + mEditPrefs.putBoolean(PreferenceConstants.GOOGLE_SEARCH_SUGGESTIONS, isChecked); + mEditPrefs.commit(); + } + + }); + } void r1(RelativeLayout view) { view.setOnClickListener(new OnClickListener() { @@ -373,7 +425,13 @@ public class AdvancedSettingsActivity extends Activity { @Override public void onClick(View v) { // TODO Auto-generated method stub - cb4.setChecked(!cb4.isChecked()); + if (API < 19) { + cb4.setChecked(!cb4.isChecked()); + } else { + Utils.createInformativeDialog(mContext, getResources() + .getString(R.string.title_warning), getResources() + .getString(R.string.dialog_reflow_warning)); + } } }); @@ -422,10 +480,12 @@ public class AdvancedSettingsActivity extends Activity { public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder( AdvancedSettingsActivity.this); // dialog - builder.setTitle(CONTEXT.getResources().getString(R.string.title_clear_history)); + builder.setTitle(getResources().getString( + R.string.title_clear_history)); builder.setMessage( - CONTEXT.getResources().getString(R.string.dialog_history)) - .setPositiveButton(CONTEXT.getResources().getString(R.string.action_yes), + getResources().getString(R.string.dialog_history)) + .setPositiveButton( + getResources().getString(R.string.action_yes), new DialogInterface.OnClickListener() { @Override @@ -444,7 +504,8 @@ public class AdvancedSettingsActivity extends Activity { } }) - .setNegativeButton(CONTEXT.getResources().getString(R.string.action_no), + .setNegativeButton( + getResources().getString(R.string.action_no), new DialogInterface.OnClickListener() { @Override @@ -470,9 +531,9 @@ public class AdvancedSettingsActivity extends Activity { } }); - + } - + void r12(RelativeLayout view) { view.setOnClickListener(new OnClickListener() { @@ -484,7 +545,7 @@ public class AdvancedSettingsActivity extends Activity { }); } - + void r13(RelativeLayout view) { view.setOnClickListener(new OnClickListener() { @@ -495,6 +556,7 @@ public class AdvancedSettingsActivity extends Activity { }); } + void r14(RelativeLayout view) { view.setOnClickListener(new OnClickListener() { @@ -505,7 +567,7 @@ public class AdvancedSettingsActivity extends Activity { }); } - + void r15(RelativeLayout view) { view.setOnClickListener(new OnClickListener() { @@ -513,10 +575,12 @@ public class AdvancedSettingsActivity extends Activity { public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder( AdvancedSettingsActivity.this); // dialog - builder.setTitle(CONTEXT.getResources().getString(R.string.title_clear_cookies)); + builder.setTitle(getResources().getString( + R.string.title_clear_cookies)); builder.setMessage( - CONTEXT.getResources().getString(R.string.dialog_cookies)) - .setPositiveButton(CONTEXT.getResources().getString(R.string.action_yes), + getResources().getString(R.string.dialog_cookies)) + .setPositiveButton( + getResources().getString(R.string.action_yes), new DialogInterface.OnClickListener() { @Override @@ -535,13 +599,14 @@ public class AdvancedSettingsActivity extends Activity { } }) - .setNegativeButton(CONTEXT.getResources().getString(R.string.action_no), + .setNegativeButton( + getResources().getString(R.string.action_no), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { - + } }).show(); @@ -549,23 +614,55 @@ public class AdvancedSettingsActivity extends Activity { }); } - - void r16(RelativeLayout view) { + + void rIncognitoCookies(RelativeLayout view) { view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { - cb12.setChecked(!cb12.isChecked()); + // TODO Auto-generated method stub + cbIncognitoCookies.setChecked(!cbIncognitoCookies.isChecked()); } }); + } + void rSearchSuggestions(RelativeLayout view){ + view.setOnClickListener(new OnClickListener(){ + + @Override + public void onClick(View arg0) { + cbSearchSuggestions.setChecked(!cbSearchSuggestions.isChecked()); + } + + }); + } + + void rClearCache(RelativeLayout view) { + view.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + clearCache(); + } + + }); + + } + + public void clearCache() { + WebView webView = new WebView(this); + webView.clearCache(true); + webView.destroy(); + Utils.showToast(mContext, + getResources().getString(R.string.message_cache_cleared)); + } + public void clearHistory() { - CookieManager c = CookieManager.getInstance(); - CookieSyncManager.createInstance(this); - c.removeAllCookie(); - AdvancedSettingsActivity.this.deleteDatabase("historyManager"); + AdvancedSettingsActivity.this + .deleteDatabase(DatabaseHandler.DATABASE_NAME); WebViewDatabase m = WebViewDatabase .getInstance(AdvancedSettingsActivity.this); m.clearFormData(); @@ -574,32 +671,33 @@ public class AdvancedSettingsActivity extends Activity { m.clearUsernamePassword(); WebIconDatabase.getInstance().removeAllIcons(); } - if (!BrowserActivity.noStockBrowser) { + if (mSystemBrowser) { try { Browser.clearHistory(getContentResolver()); } catch (NullPointerException ignored) { } } + SettingsController.setClearHistory(true); trimCache(AdvancedSettingsActivity.this); messageHandler.sendEmptyMessage(1); } - public void clearCookies(){ + public void clearCookies() { CookieManager c = CookieManager.getInstance(); CookieSyncManager.createInstance(this); c.removeAllCookie(); messageHandler.sendEmptyMessage(2); } - + void r9(RelativeLayout view) { - + view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { - + importFromStockBrowser(); - + } }); @@ -620,8 +718,8 @@ public class AdvancedSettingsActivity extends Activity { getResources().getString(R.string.size_normal), getResources().getString(R.string.size_small), getResources().getString(R.string.size_smallest) }; - - int n = settings.getInt("textsize", 3); + + int n = mPreferences.getInt(PreferenceConstants.TEXT_SIZE, 3); picker.setSingleChoiceItems(chars, n - 1, new DialogInterface.OnClickListener() { @@ -629,12 +727,15 @@ public class AdvancedSettingsActivity extends Activity { @Override public void onClick(DialogInterface dialog, int which) { - edit.putInt("textsize", which+1); - edit.commit(); - - } + mEditPrefs.putInt( + PreferenceConstants.TEXT_SIZE, + which + 1); + mEditPrefs.commit(); + + } }); - picker.setNeutralButton(CONTEXT.getResources().getString(R.string.action_ok), + picker.setNeutralButton( + getResources().getString(R.string.action_ok), new DialogInterface.OnClickListener() { @Override @@ -676,14 +777,12 @@ public class AdvancedSettingsActivity extends Activity { } public void importFromStockBrowser() { - if (!BrowserActivity.noStockBrowser) { + if (mSystemBrowser) { try { String[] proj = new String[] { Browser.BookmarkColumns.TITLE, Browser.BookmarkColumns.URL }; - String sel = Browser.BookmarkColumns.BOOKMARK + " = 1"; // 0 = - // history, - // 1 = - // bookmark + // use 0 for history, 1 for bookmarks + String sel = Browser.BookmarkColumns.BOOKMARK + " = 1"; Cursor mCur; mCur = getContentResolver().query(Browser.BOOKMARKS_URI, proj, sel, null, null); @@ -698,17 +797,22 @@ public class AdvancedSettingsActivity extends Activity { .getColumnIndex(Browser.BookmarkColumns.TITLE)); url = mCur.getString(mCur .getColumnIndex(Browser.BookmarkColumns.URL)); - Utils.addBookmark(CONTEXT,title,url); + if (title.length() < 1) { + title = Utils.getDomainName(url); + } + Utils.addBookmark(mContext, title, url); mCur.moveToNext(); } } - Utils.showToast(CONTEXT, number + " Bookmarks were imported"); + Utils.showToast(mContext, number + " " + + getResources().getString(R.string.message_import)); } catch (NullPointerException ignored) { } - } - else{ - Utils.createInformativeDialog(CONTEXT, "Error", "No browser was detected to import bookmarks from."); + } else { + Utils.createInformativeDialog(mContext, + getResources().getString(R.string.title_error), + getResources().getString(R.string.dialog_import_error)); } } - + } \ No newline at end of file diff --git a/src/acr/browser/lightning/BookmarkPageVariables.java b/src/acr/browser/lightning/BookmarkPageVariables.java new file mode 100644 index 0000000..185cc7a --- /dev/null +++ b/src/acr/browser/lightning/BookmarkPageVariables.java @@ -0,0 +1,13 @@ +/* + * Copyright 2014 A.C.R. Development + */ +package acr.browser.lightning; + +public class BookmarkPageVariables { + public static final String Heading = "Bookmarks
"; + public static final String Part1 = "

"; + public static final String Part4 = "

"; + public static final String End = "
"; +} diff --git a/src/acr/browser/lightning/BrowserActivity.java b/src/acr/browser/lightning/BrowserActivity.java new file mode 100644 index 0000000..63aca5f --- /dev/null +++ b/src/acr/browser/lightning/BrowserActivity.java @@ -0,0 +1,2388 @@ +/* + * Copyright 2014 A.C.R. Development + */ + +package acr.browser.lightning; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import android.app.ActionBar; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.ClipData; +import android.content.ClipboardManager; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.res.Configuration; +import android.content.res.Resources.Theme; +import android.content.res.TypedArray; +import android.database.Cursor; +import android.database.DatabaseUtils; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteException; +import android.graphics.Bitmap; +import android.graphics.Bitmap.Config; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Paint.Style; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.media.MediaPlayer; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Message; +import android.provider.Browser; +import android.support.v4.app.ActionBarDrawerToggle; +import android.support.v4.widget.DrawerLayout; +import android.text.TextUtils; +import android.util.Log; +import android.util.TypedValue; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.View.OnKeyListener; +import android.view.View.OnTouchListener; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; +import android.webkit.ValueCallback; +import android.webkit.WebChromeClient.CustomViewCallback; +import android.webkit.CookieManager; +import android.webkit.CookieSyncManager; +import android.webkit.WebIconDatabase; +import android.webkit.WebView; +import android.webkit.WebView.HitTestResult; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ArrayAdapter; +import android.widget.EditText; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.AutoCompleteTextView; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.VideoView; +import android.widget.TextView.OnEditorActionListener; + +public class BrowserActivity extends Activity implements BrowserController { + private static DrawerLayout mDrawerLayout; + private static ListView mDrawerList; + private static RelativeLayout mDrawer; + private static LinearLayout mDrawerRight; + private static ListView mDrawerListRight; + private static TextView mNewTab; + private static ActionBarDrawerToggle mDrawerToggle; + private List mWebViews = new ArrayList(); + private static List mIdList = new ArrayList(); + private LightningView mCurrentView; + private static int mIdGenerator; + private static LightningViewAdapter mTitleAdapter; + private static List mBookmarkList; + private static BookmarkViewAdapter mBookmarkAdapter; + private static AutoCompleteTextView mSearch; + private static ClickHandler mClickHandler; + private static ProgressBar mProgress; + private static boolean mSystemBrowser = false; + private static ValueCallback mUploadMessage; + private static View mCustomView; + private static int mOriginalOrientation; + private static int mActionBarSize; + private static ActionBar mActionBar; + private static boolean mFullScreen; + private static FrameLayout mBrowserFrame; + private static FullscreenHolder mFullscreenContainer; + private static CustomViewCallback mCustomViewCallback; + private static final FrameLayout.LayoutParams COVER_SCREEN_PARAMS = new FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT); + private static Bitmap mDefaultVideoPoster; + private static View mVideoProgressView; + private static DatabaseHandler mHistoryHandler; + private static SQLiteDatabase mHistoryDatabase; + private static SharedPreferences mPreferences; + private static SharedPreferences.Editor mEditPrefs; + private static Context mContext; + private static Bitmap mWebpageBitmap; + private static String mSearchText; + private static Activity mActivity; + private static CookieManager mCookieManager; + private static final int API = android.os.Build.VERSION.SDK_INT; + private static Drawable mDeleteIcon; + private static Drawable mRefreshIcon; + private static Drawable mCopyIcon; + private static Drawable mIcon; + private static int mActionBarSizeDp; + private static int mNumberIconColor; + private static String mHomepage; + private static boolean mIsNewIntent = false; + private static VideoView mVideoView; + private static SearchAdapter mSearchAdapter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + initialize(); + } + + private synchronized void initialize() { + setContentView(R.layout.activity_main); + TypedValue typedValue = new TypedValue(); + Theme theme = getTheme(); + theme.resolveAttribute(R.attr.numberColor, typedValue, true); + mNumberIconColor = typedValue.data; + mPreferences = getSharedPreferences(PreferenceConstants.PREFERENCES, 0); + mEditPrefs = mPreferences.edit(); + mContext = this; + if (mIdList != null) { + mIdList.clear(); + } else { + mIdList = new ArrayList(); + } + if (mWebViews != null) { + mWebViews.clear(); + } else { + mWebViews = new ArrayList(); + } + + mActivity = this; + mClickHandler = new ClickHandler(this); + mBrowserFrame = (FrameLayout) findViewById(R.id.content_frame); + mProgress = (ProgressBar) findViewById(R.id.activity_bar); + mProgress.setVisibility(View.GONE); + mNewTab = (TextView) findViewById(R.id.new_tab_button); + mDrawer = (RelativeLayout) findViewById(R.id.drawer); + mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); + mDrawerList = (ListView) findViewById(R.id.left_drawer); + mDrawerRight = (LinearLayout) findViewById(R.id.right_drawer); + mDrawerListRight = (ListView) findViewById(R.id.right_drawer_list); + mWebpageBitmap = BitmapFactory.decodeResource(getResources(), + R.drawable.ic_webpage); + mActionBar = getActionBar(); + final TypedArray styledAttributes = mContext.getTheme() + .obtainStyledAttributes( + new int[] { android.R.attr.actionBarSize }); + mActionBarSize = (int) styledAttributes.getDimension(0, 0); + if (pixelsToDp(mActionBarSize) < 48) { + mActionBarSize = getDp(48); + } + mActionBarSizeDp = pixelsToDp(mActionBarSize); + styledAttributes.recycle(); + + mHomepage = mPreferences.getString(PreferenceConstants.HOMEPAGE, + Constants.HOMEPAGE); + + mTitleAdapter = new LightningViewAdapter(this, R.layout.tab_list_item, + mWebViews); + mDrawerList.setAdapter(mTitleAdapter); + mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); + mDrawerList + .setOnItemLongClickListener(new DrawerItemLongClickListener()); + + mBookmarkList = getBookmarks(); + mBookmarkAdapter = new BookmarkViewAdapter(this, + R.layout.bookmark_list_item, mBookmarkList); + mDrawerListRight.setAdapter(mBookmarkAdapter); + mDrawerListRight + .setOnItemClickListener(new BookmarkItemClickListener()); + mDrawerListRight + .setOnItemLongClickListener(new BookmarkItemLongClickListener()); + + if (mHistoryHandler == null) { + mHistoryHandler = new DatabaseHandler(this); + } else if (!mHistoryHandler.isOpen()) { + mHistoryHandler = new DatabaseHandler(this); + } + mHistoryDatabase = mHistoryHandler.getReadableDatabase(); + + // set display options of the ActionBar + mActionBar.setDisplayShowTitleEnabled(false); + mActionBar.setDisplayShowCustomEnabled(true); + mActionBar.setDisplayShowHomeEnabled(true); + mActionBar.setDisplayHomeAsUpEnabled(true); + mActionBar.setCustomView(R.layout.search); + + RelativeLayout back = (RelativeLayout) findViewById(R.id.action_back); + RelativeLayout forward = (RelativeLayout) findViewById(R.id.action_forward); + if (back != null) { + back.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + if (mCurrentView != null) { + if (mCurrentView.canGoBack()) { + mCurrentView.goBack(); + } else { + deleteTab(mDrawerList.getCheckedItemPosition()); + } + } + } + + }); + } + if (forward != null) { + forward.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + if (mCurrentView != null) { + if (mCurrentView.canGoForward()) { + mCurrentView.goForward(); + } + } + } + + }); + } + + // create the search EditText in the ActionBar + mSearch = (AutoCompleteTextView) mActionBar.getCustomView() + .findViewById(R.id.search); + mDeleteIcon = getResources().getDrawable(R.drawable.ic_action_delete); + mDeleteIcon.setBounds(0, 0, Utils.convertToDensityPixels(mContext, 24), + Utils.convertToDensityPixels(mContext, 24)); + mRefreshIcon = getResources().getDrawable(R.drawable.ic_action_refresh); + mRefreshIcon.setBounds(0, 0, + Utils.convertToDensityPixels(mContext, 24), + Utils.convertToDensityPixels(mContext, 24)); + mCopyIcon = getResources().getDrawable(R.drawable.ic_action_copy); + mCopyIcon.setBounds(0, 0, Utils.convertToDensityPixels(mContext, 24), + Utils.convertToDensityPixels(mContext, 24)); + mIcon = mRefreshIcon; + mSearch.setCompoundDrawables(null, null, mRefreshIcon, null); + mSearch.setOnKeyListener(new OnKeyListener() { + + @Override + public boolean onKey(View arg0, int arg1, KeyEvent arg2) { + + switch (arg1) { + case KeyEvent.KEYCODE_ENTER: + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(mSearch.getWindowToken(), 0); + searchTheWeb(mSearch.getText().toString()); + if (mCurrentView != null) { + mCurrentView.requestFocus(); + } + return true; + default: + break; + } + return false; + } + + }); + mSearch.setOnFocusChangeListener(new View.OnFocusChangeListener() { + + @Override + public void onFocusChange(View v, boolean hasFocus) { + if (!hasFocus && mCurrentView != null) { + if (mCurrentView != null) { + if (mCurrentView.getProgress() < 100) { + setIsLoading(); + } else { + setIsFinishedLoading(); + } + } + updateUrl(mCurrentView.getUrl()); + } else if (hasFocus) { + mIcon = mCopyIcon; + mSearch.setCompoundDrawables(null, null, mCopyIcon, null); + } + } + }); + mSearch.setOnEditorActionListener(new OnEditorActionListener() { + + @Override + public boolean onEditorAction(TextView arg0, int actionId, + KeyEvent arg2) { + // hide the keyboard and search the web when the enter key + // button is pressed + if (actionId == EditorInfo.IME_ACTION_GO + || actionId == EditorInfo.IME_ACTION_DONE + || actionId == EditorInfo.IME_ACTION_NEXT + || actionId == EditorInfo.IME_ACTION_SEND + || actionId == EditorInfo.IME_ACTION_SEARCH + || (arg2.getAction() == KeyEvent.KEYCODE_ENTER)) { + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(mSearch.getWindowToken(), 0); + searchTheWeb(mSearch.getText().toString()); + if (mCurrentView != null) { + mCurrentView.requestFocus(); + } + return true; + } + return false; + } + + }); + + mSearch.setOnTouchListener(new OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + if (mSearch.getCompoundDrawables()[2] != null) { + boolean tappedX = event.getX() > (mSearch.getWidth() + - mSearch.getPaddingRight() - mIcon + .getIntrinsicWidth()); + if (tappedX) { + if (event.getAction() == MotionEvent.ACTION_UP) { + if (mSearch.hasFocus()) { + ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); + ClipData clip = ClipData.newPlainText("label", + mSearch.getText().toString()); + clipboard.setPrimaryClip(clip); + Utils.showToast( + mContext, + mContext.getResources().getString( + R.string.message_text_copied)); + } else { + refreshOrStop(); + } + } + return true; + } + } + return false; + } + + }); + + mSystemBrowser = getSystemBrowser(); + Thread initialize = new Thread(new Runnable() { + + @Override + public void run() { + initializeSearchSuggestions(mSearch); + } + + }); + initialize.run(); + // ActionBarDrawerToggle ties together the the proper interactions + // between the sliding drawer and the action bar app icon + mDrawerToggle = new ActionBarDrawerToggle(this, /* host Activity */ + mDrawerLayout, /* DrawerLayout object */ + R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */ + R.string.drawer_open, /* "open drawer" description for accessibility */ + R.string.drawer_close /* "close drawer" description for accessibility */ + ) { + public void onDrawerClosed(View view) { + super.onDrawerClosed(view); + if (view.equals(mDrawer)) { + mDrawerLayout.setDrawerLockMode( + DrawerLayout.LOCK_MODE_UNLOCKED, mDrawerRight); + } else if (view.equals(mDrawerRight)) { + mDrawerLayout.setDrawerLockMode( + DrawerLayout.LOCK_MODE_UNLOCKED, mDrawer); + } + } + + public void onDrawerOpened(View drawerView) { + super.onDrawerOpened(drawerView); + if (drawerView.equals(mDrawer)) { + mDrawerLayout.closeDrawer(mDrawerRight); + mDrawerLayout.setDrawerLockMode( + DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mDrawerRight); + } else if (drawerView.equals(mDrawerRight)) { + mDrawerLayout.closeDrawer(mDrawer); + mDrawerLayout.setDrawerLockMode( + DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mDrawer); + } + } + + @Override + public void onDrawerSlide(View drawerView, float slideOffset) { + super.onDrawerSlide(drawerView, slideOffset); + + } + + }; + + mNewTab.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View arg0) { + newTab(null, true); + } + + }); + + mDrawerLayout.setDrawerListener(mDrawerToggle); + + initializePreferences(); + initializeTabs(); + + if (API < 19) { + WebIconDatabase.getInstance().open( + getDir("icons", MODE_PRIVATE).getPath()); + } + } + + public synchronized void initializeTabs() { + mIdGenerator = 0; + + String url = null; + if (getIntent() != null) { + url = getIntent().getDataString(); + if (url != null) { + if (url.startsWith(Constants.FILE)) { + Utils.showToast( + this, + getResources().getString( + R.string.message_blocked_local)); + url = null; + } + } + } + if (mPreferences + .getBoolean(PreferenceConstants.RESTORE_LOST_TABS, true)) { + String mem = mPreferences.getString(PreferenceConstants.URL_MEMORY, + ""); + mEditPrefs.putString(PreferenceConstants.URL_MEMORY, ""); + String[] array = getArray(mem); + int count = 0; + for (int n = 0; n < array.length; n++) { + if (array[n].length() > 0) { + newTab(array[n], true); + count++; + } + } + if (url != null) { + newTab(url, true); + } else if (count == 0) { + newTab(null, true); + } + } else { + newTab(url, true); + } + + } + + public static String[] getArray(String input) { + return input.split("\\|\\$\\|SEPARATOR\\|\\$\\|"); + } + + public void initializePreferences() { + if (mPreferences == null) { + mPreferences = getSharedPreferences( + PreferenceConstants.PREFERENCES, 0); + } + mFullScreen = mPreferences.getBoolean(PreferenceConstants.FULL_SCREEN, + false); + if (mPreferences.getBoolean(PreferenceConstants.HIDE_STATUS_BAR, false)) { + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + } else { + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + } + + switch (mPreferences.getInt(PreferenceConstants.SEARCH, 1)) { + case 0: + mSearchText = mPreferences.getString( + PreferenceConstants.SEARCH_URL, Constants.GOOGLE_SEARCH); + if (!mSearchText.startsWith(Constants.HTTP) + && !mSearchText.startsWith(Constants.HTTPS)) { + mSearchText = Constants.GOOGLE_SEARCH; + } + break; + case 1: + mSearchText = Constants.GOOGLE_SEARCH; + break; + case 2: + mSearchText = Constants.ANDROID_SEARCH; + break; + case 3: + mSearchText = Constants.BING_SEARCH; + break; + case 4: + mSearchText = Constants.YAHOO_SEARCH; + break; + case 5: + mSearchText = Constants.STARTPAGE_SEARCH; + break; + case 6: + mSearchText = Constants.STARTPAGE_MOBILE_SEARCH; + break; + case 7: + mSearchText = Constants.DUCK_SEARCH; + break; + case 8: + mSearchText = Constants.DUCK_LITE_SEARCH; + break; + case 9: + mSearchText = Constants.BAIDU_SEARCH; + break; + case 10: + mSearchText = Constants.YANDEX_SEARCH; + break; + } + + mCookieManager = CookieManager.getInstance(); + CookieSyncManager.createInstance(this); + mCookieManager.setAcceptCookie(mPreferences.getBoolean( + PreferenceConstants.COOKIES, true)); + + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_ENTER) { + if (mSearch.hasFocus()) { + searchTheWeb(mSearch.getText().toString()); + } + } + return super.onKeyDown(keyCode, event); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.main, menu); + return super.onCreateOptionsMenu(menu); + } + + /* Called whenever we call invalidateOptionsMenu() */ + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + // If the nav drawer is open, hide action items related to the content + // view + + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // The action bar home/up action should open or close the drawer. + // ActionBarDrawerToggle will take care of this. + if (mDrawerToggle.onOptionsItemSelected(item)) { + return true; + } + // Handle action buttons + switch (item.getItemId()) { + case android.R.id.home: + if (mDrawerLayout.isDrawerOpen(mDrawerRight)) { + mDrawerLayout.closeDrawer(mDrawerRight); + } + mDrawerToggle.syncState(); + return true; + case R.id.action_back: + if (mCurrentView != null) { + if (mCurrentView.canGoBack()) + mCurrentView.goBack(); + } + return true; + case R.id.action_forward: + if (mCurrentView != null) { + if (mCurrentView.canGoForward()) + mCurrentView.goForward(); + } + return true; + case R.id.action_new_tab: + newTab(null, true); + return true; + case R.id.action_incognito: + startActivity(new Intent(Constants.INCOGNITO_INTENT)); + return true; + case R.id.action_share: + if (!mCurrentView.getUrl().startsWith(Constants.FILE)) { + Intent shareIntent = new Intent( + android.content.Intent.ACTION_SEND); + shareIntent.setType("text/plain"); + shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, + mCurrentView.getTitle()); + String shareMessage = mCurrentView.getUrl(); + shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, + shareMessage); + startActivity(Intent.createChooser(shareIntent, getResources() + .getString(R.string.dialog_title_share))); + } + return true; + case R.id.action_bookmarks: + openBookmarks(); + return true; + case R.id.action_copy: + if (mCurrentView != null) { + if (!mCurrentView.getUrl().startsWith(Constants.FILE)) { + ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); + ClipData clip = ClipData.newPlainText("label", mCurrentView + .getUrl().toString()); + clipboard.setPrimaryClip(clip); + Utils.showToast(mContext, mContext.getResources() + .getString(R.string.message_link_copied)); + } + } + return true; + case R.id.action_settings: + startActivity(new Intent(Constants.SETTINGS_INTENT)); + return true; + case R.id.action_history: + openHistory(); + return true; + case R.id.action_add_bookmark: + if (!mCurrentView.getUrl().startsWith(Constants.FILE)) { + addBookmark(this, mCurrentView.getTitle(), + mCurrentView.getUrl()); + } + return true; + case R.id.action_find: + findInPage(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + /** + * refreshes the underlying list of the Bookmark adapter since the bookmark + * adapter doesn't always change when notifyDataChanged gets called. + */ + private void notifyBookmarkDataSetChanged() { + mBookmarkAdapter.clear(); + mBookmarkAdapter.addAll(mBookmarkList); + mBookmarkAdapter.notifyDataSetChanged(); + } + + /** + * method that shows a dialog asking what string the user wishes to search + * for. It highlights the text entered. + */ + private void findInPage() { + final AlertDialog.Builder finder = new AlertDialog.Builder(mActivity); + finder.setTitle(getResources().getString(R.string.action_find)); + final EditText getHome = new EditText(this); + getHome.setHint(getResources().getString(R.string.search_hint)); + finder.setView(getHome); + finder.setPositiveButton( + getResources().getString(R.string.search_hint), + new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + String text = getHome.getText().toString(); + if (mCurrentView != null) { + mCurrentView.find(text); + } + } + }); + finder.show(); + } + + /** The click listener for ListView in the navigation drawer */ + private class DrawerItemClickListener implements + ListView.OnItemClickListener { + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + mIsNewIntent = false; + selectItem(position); + } + } + + /** long click listener for Navigation Drawer */ + private class DrawerItemLongClickListener implements + ListView.OnItemLongClickListener { + @Override + public boolean onItemLongClick(AdapterView arg0, View arg1, + int position, long arg3) { + deleteTab(position); + return false; + } + } + + private class BookmarkItemClickListener implements + ListView.OnItemClickListener { + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + if (mCurrentView != null) { + mCurrentView.loadUrl(mBookmarkList.get(position).getUrl()); + } + mDrawerLayout.closeDrawer(mDrawerRight); + } + } + + private class BookmarkItemLongClickListener implements + ListView.OnItemLongClickListener { + @Override + public boolean onItemLongClick(AdapterView arg0, View arg1, + final int position, long arg3) { + + AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); + builder.setTitle(mContext.getResources().getString( + R.string.action_bookmarks)); + builder.setMessage( + getResources().getString(R.string.dialog_bookmark)) + .setCancelable(true) + .setPositiveButton( + getResources().getString(R.string.action_new_tab), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int id) { + newTab(mBookmarkList.get(position).getUrl(), + false); + mDrawerLayout.closeDrawers(); + } + }) + .setNegativeButton( + getResources().getString(R.string.action_delete), + new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, + int which) { + deleteBookmark(mBookmarkList.get(position) + .getUrl()); + } + }) + .setNeutralButton( + getResources().getString(R.string.action_edit), + new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, + int which) { + editBookmark(position); + } + }); + AlertDialog alert = builder.create(); + alert.show(); + return true; + } + } + + /** + * Takes in the id of which bookmark was selected and shows a dialog that + * allows the user to rename and change the url of the bookmark + * + * @param id + * which id in the list was chosen + */ + public synchronized void editBookmark(final int id) { + final AlertDialog.Builder homePicker = new AlertDialog.Builder( + mActivity); + homePicker.setTitle(getResources().getString( + R.string.title_edit_bookmark)); + final EditText getTitle = new EditText(mContext); + getTitle.setHint(getResources().getString(R.string.hint_title)); + getTitle.setText(mBookmarkList.get(id).getTitle()); + getTitle.setSingleLine(); + final EditText getUrl = new EditText(mContext); + getUrl.setHint(getResources().getString(R.string.hint_url)); + getUrl.setText(mBookmarkList.get(id).getUrl()); + getUrl.setSingleLine(); + LinearLayout layout = new LinearLayout(mContext); + layout.setOrientation(LinearLayout.VERTICAL); + layout.addView(getTitle); + layout.addView(getUrl); + homePicker.setView(layout); + homePicker.setPositiveButton( + getResources().getString(R.string.action_ok), + new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + mBookmarkList.get(id).setTitle( + getTitle.getText().toString()); + mBookmarkList.get(id).setUrl( + getUrl.getText().toString()); + notifyBookmarkDataSetChanged(); + File book = new File(getFilesDir(), "bookmarks"); + File bookUrl = new File(getFilesDir(), "bookurl"); + try { + BufferedWriter bookWriter = new BufferedWriter( + new FileWriter(book)); + BufferedWriter urlWriter = new BufferedWriter( + new FileWriter(bookUrl)); + Iterator iter = mBookmarkList + .iterator(); + HistoryItem item; + while (iter.hasNext()) { + item = iter.next(); + + bookWriter.write(item.getTitle()); + urlWriter.write(item.getUrl()); + bookWriter.newLine(); + urlWriter.newLine(); + + } + + bookWriter.close(); + urlWriter.close(); + } catch (FileNotFoundException e) { + } catch (IOException e) { + } + Collections.sort(mBookmarkList); + notifyBookmarkDataSetChanged(); + } + }); + homePicker.show(); + + } + + /** + * displays the WebView contained in the LightningView Also handles the + * removal of previous views + * + * @param view + * the LightningView to show + */ + private synchronized void showTab(LightningView view) { + if (view == null) { + return; + } + if (mCurrentView != null) { + mCurrentView.onPause(); + } + mCurrentView = view; + + if (view.getWebView() != null) { + updateUrl(view.getUrl()); + updateProgress(view.getProgress()); + } else { + updateUrl(""); + updateProgress(0); + } + + mBrowserFrame.removeAllViews(); + mCurrentView.onResume(); + mBrowserFrame.addView(view.getWebView()); + } + + /** + * creates a new tab with the passed in URL if it isn't null + */ + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + if (mCurrentView == null) { + initialize(); + } + + String url = null; + if (intent != null) { + url = intent.getDataString(); + } + int num = 0; + if (intent != null && intent.getExtras() != null) + num = intent.getExtras().getInt(getPackageName() + ".Origin"); + if (num == 1) { + mCurrentView.loadUrl(url); + } else if (url != null) { + if (url.startsWith(Constants.FILE)) { + Utils.showToast(this, + getResources() + .getString(R.string.message_blocked_local)); + url = null; + } + newTab(url, true); + mIsNewIntent = true; + } + } + + private void selectItem(int position) { + // update selected item and title, then close the drawer + + mDrawerList.setItemChecked(position, true); + showTab(mWebViews.get(position)); + + mDrawerLayout.closeDrawer(mDrawer); + } + + /** + * When using the ActionBarDrawerToggle, you must call it during + * onPostCreate() and onConfigurationChanged()... + */ + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + // Sync the toggle state after onRestoreInstanceState has occurred. + mDrawerToggle.syncState(); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + // Pass any configuration change to the drawer toggls + mDrawerToggle.onConfigurationChanged(newConfig); + } + + private synchronized void newTab(String url, boolean show) { + mIsNewIntent = false; + LightningView startingTab = new LightningView(mActivity, url); + if (mIdGenerator == 0) { + startingTab.resumeTimers(); + } + mIdList.add(mIdGenerator); + mIdGenerator++; + mWebViews.add(startingTab); + + Drawable icon = writeOnDrawable(mWebViews.size()); + mActionBar.setIcon(icon); + mTitleAdapter.notifyDataSetChanged(); + if (show) { + mDrawerList.setItemChecked(mWebViews.size() - 1, true); + showTab(startingTab); + } + } + + private synchronized void deleteTab(int position) { + if (position >= mWebViews.size()) { + return; + } + + int current = mDrawerList.getCheckedItemPosition(); + LightningView reference = mWebViews.get(position); + if (reference == null) { + return; + } + boolean isShown = reference.isShown(); + if (current > position) { + mIdList.remove(position); + mWebViews.remove(position); + mDrawerList.setItemChecked(current - 1, true); + reference.onDestroy(); + } else if (mWebViews.size() > position + 1) { + mIdList.remove(position); + showTab(mWebViews.get(position + 1)); + mWebViews.remove(position); + mDrawerList.setItemChecked(position, true); + reference.onDestroy(); + } else if (mWebViews.size() > 1) { + mIdList.remove(position); + showTab(mWebViews.get(position - 1)); + mWebViews.remove(position); + mDrawerList.setItemChecked(position - 1, true); + reference.onDestroy(); + } else { + if (mCurrentView.getUrl().startsWith(Constants.FILE) + || mCurrentView.getUrl().equals(mHomepage)) { + moveTaskToBack(true); + } else { + mIdList.remove(position); + mWebViews.remove(position); + if (mPreferences.getBoolean( + PreferenceConstants.CLEAR_CACHE_EXIT, false) + && mCurrentView != null) { + mCurrentView.clearCache(true); + Log.i("Lightning", "Cache Cleared"); + + } + if (reference != null) { + reference.pauseTimers(); + reference.onDestroy(); + } + mCurrentView = null; + mTitleAdapter.notifyDataSetChanged(); + finish(); + + } + } + mTitleAdapter.notifyDataSetChanged(); + Drawable icon = writeOnDrawable(mWebViews.size()); + mActionBar.setIcon(icon); + + if (mIsNewIntent && isShown) { + mIsNewIntent = false; + moveTaskToBack(true); + } + + Log.i("Lightning", "deleted tab"); + } + + @Override + public boolean onKeyLongPress(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) { + if (mPreferences.getBoolean(PreferenceConstants.CLEAR_CACHE_EXIT, + false) && mCurrentView != null) { + mCurrentView.clearCache(true); + Log.i("Lightning", "Cache Cleared"); + + } + mCurrentView = null; + for (int n = 0; n < mWebViews.size(); n++) { + if (mWebViews.get(n) != null) + mWebViews.get(n).onDestroy(); + } + mWebViews.clear(); + mTitleAdapter.notifyDataSetChanged(); + finish(); + } + return true; + } + + @Override + public void onBackPressed() { + if (!mActionBar.isShowing()) { + mActionBar.show(); + } + if (mDrawerLayout.isDrawerOpen(mDrawer)) { + mDrawerLayout.closeDrawer(mDrawer); + } else if (mDrawerLayout.isDrawerOpen(mDrawerRight)) { + mDrawerLayout.closeDrawer(mDrawerRight); + } else { + if (mCurrentView != null) { + Log.i("Lightning", "onBackPressed"); + if (mCurrentView.canGoBack()) { + if (!mCurrentView.isShown()) { + onHideCustomView(); + } else { + mCurrentView.goBack(); + } + } else { + deleteTab(mDrawerList.getCheckedItemPosition()); + } + } else { + Log.e("Lightning Browser", + "So madness. Much confusion. Why happen."); + super.onBackPressed(); + } + } + } + + @Override + protected void onPause() { + super.onPause(); + Log.i("Lightning", "onPause"); + if (mCurrentView != null) { + mCurrentView.pauseTimers(); + mCurrentView.onPause(); + } + if (mHistoryDatabase != null) { + if (mHistoryDatabase.isOpen()) + mHistoryDatabase.close(); + } + if (mHistoryHandler != null) { + if (mHistoryHandler.isOpen()) + mHistoryHandler.close(); + } + if (mPreferences + .getBoolean(PreferenceConstants.RESTORE_LOST_TABS, true)) { + String s = ""; + for (int n = 0; n < mWebViews.size(); n++) { + if (mWebViews.get(n).getUrl() != null) { + s = s + mWebViews.get(n).getUrl() + "|$|SEPARATOR|$|"; + } + } + mEditPrefs.putString(PreferenceConstants.URL_MEMORY, s); + mEditPrefs.commit(); + } + } + + @Override + protected void onDestroy() { + Log.i("Lightning", "onDestroy"); + if (mHistoryDatabase != null) { + if (mHistoryDatabase.isOpen()) + mHistoryDatabase.close(); + } + if (mHistoryHandler != null) { + if (mHistoryHandler.isOpen()) + mHistoryHandler.close(); + } + super.onDestroy(); + } + + @Override + protected void onPostResume() { + Log.i("Lightning", "onPostResume"); + super.onPostResume(); + } + + @Override + protected void onRestart() { + Log.i("Lightning", "onRestart"); + super.onRestart(); + } + + @Override + protected void onStart() { + Log.i("Lightning", "onStart"); + super.onStart(); + } + + @Override + protected void onStop() { + Log.i("Lightning", "onStop"); + super.onStop(); + } + + @Override + protected void onResume() { + super.onResume(); + Log.i("Lightning", "onResume"); + if (SettingsController.getClearHistory()) { + } + if (mSearchAdapter != null) { + mSearchAdapter.refreshPreferences(); + mSearchAdapter.refreshBookmarks(); + } + if (mActionBar != null) { + if (!mActionBar.isShowing()) { + mActionBar.show(); + } + } + if (mCurrentView != null) { + mCurrentView.resumeTimers(); + mCurrentView.onResume(); + + if (mHistoryHandler == null) { + mHistoryHandler = new DatabaseHandler(this); + } else if (!mHistoryHandler.isOpen()) { + mHistoryHandler = new DatabaseHandler(this); + } + mHistoryDatabase = mHistoryHandler.getReadableDatabase(); + mBookmarkList = getBookmarks(); + notifyBookmarkDataSetChanged(); + } else { + initialize(); + } + initializePreferences(); + if (mWebViews != null) { + for (int n = 0; n < mWebViews.size(); n++) { + if (mWebViews.get(n) != null) { + mWebViews.get(n).initializePreferences(this); + } else { + mWebViews.remove(n); + } + } + } else { + initialize(); + } + } + + /** + * searches the web for the query fixing any and all problems with the input + * checks if it is a search, url, etc. + */ + void searchTheWeb(String query) { + if (query.equals("")) { + return; + } + String SEARCH = mSearchText; + query = query.trim(); + mCurrentView.stopLoading(); + + if (query.startsWith("www.")) { + query = Constants.HTTP + query; + } else if (query.startsWith("ftp.")) { + query = "ftp://" + query; + } + + boolean containsPeriod = query.contains("."); + boolean isIPAddress = (TextUtils.isDigitsOnly(query.replace(".", "")) + && (query.replace(".", "").length() >= 4) && query + .contains(".")); + boolean aboutScheme = query.contains("about:"); + boolean validURL = (query.startsWith("ftp://") + || query.startsWith(Constants.HTTP) + || query.startsWith(Constants.FILE) || query + .startsWith(Constants.HTTPS)) || isIPAddress; + boolean isSearch = ((query.contains(" ") || !containsPeriod) && !aboutScheme); + + if (isIPAddress + && (!query.startsWith(Constants.HTTP) || !query + .startsWith(Constants.HTTPS))) { + query = Constants.HTTP + query; + } + + if (isSearch) { + try { + URLEncoder.encode(query, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + mCurrentView.loadUrl(SEARCH + query); + } else if (!validURL) { + mCurrentView.loadUrl(Constants.HTTP + query); + } else { + mCurrentView.loadUrl(query); + } + } + + public void deleteBookmark(String url) { + File book = new File(getFilesDir(), "bookmarks"); + File bookUrl = new File(getFilesDir(), "bookurl"); + try { + BufferedWriter bookWriter = new BufferedWriter(new FileWriter(book)); + BufferedWriter urlWriter = new BufferedWriter(new FileWriter( + bookUrl)); + Iterator iter = mBookmarkList.iterator(); + HistoryItem item; + int num = 0; + int deleteIndex = -1; + while (iter.hasNext()) { + item = iter.next(); + if (!item.getUrl().equalsIgnoreCase(url)) { + bookWriter.write(item.getTitle()); + urlWriter.write(item.getUrl()); + bookWriter.newLine(); + urlWriter.newLine(); + } else { + deleteIndex = num; + } + num++; + } + if (deleteIndex != -1) { + mBookmarkList.remove(deleteIndex); + } + bookWriter.close(); + urlWriter.close(); + } catch (FileNotFoundException e) { + } catch (IOException e) { + } + notifyBookmarkDataSetChanged(); + mSearchAdapter.refreshBookmarks(); + openBookmarks(); + } + + /** + * converts the int num into density pixels + * + * @param num + * @return density pixels + */ + private int getDp(int num) { + float scale = getResources().getDisplayMetrics().density; + return (int) (num * scale + 0.5f); + } + + private int pixelsToDp(int num) { + float scale = getResources().getDisplayMetrics().density; + return (int) ((num - 0.5f) / scale); + } + + /** + * writes the number of open tabs on the icon. + */ + public BitmapDrawable writeOnDrawable(int number) { + + Bitmap bm = Bitmap.createBitmap(mActionBarSize, mActionBarSize, + Config.ARGB_8888); + String text = number + ""; + Paint paint = new Paint(); + paint.setTextAlign(Paint.Align.CENTER); + paint.setAntiAlias(true); + paint.setStyle(Style.FILL); + paint.setColor(mNumberIconColor); + if (number > 99) + number = 99; + // pixels, 36 dp + if (mActionBarSizeDp < 50) { + if (number > 9) { + paint.setTextSize(mActionBarSize * 3 / 4); // originally + // 40 + // pixels, + // 24 dp + } else { + paint.setTextSize(mActionBarSize * 9 / 10); // originally 50 + // pixels, 30 dp + } + } else { + paint.setTextSize(mActionBarSize * 3 / 4); + } + Canvas canvas = new Canvas(bm); + // originally only vertical padding of 5 pixels + + int xPos = (canvas.getWidth() / 2); + int yPos = (int) ((canvas.getHeight() / 2) - ((paint.descent() + paint + .ascent()) / 2)); + + canvas.drawText(text, xPos, yPos, paint); + + return new BitmapDrawable(getResources(), bm); + } + + public class LightningViewAdapter extends ArrayAdapter { + + Context context; + int layoutResourceId; + List data = null; + + public LightningViewAdapter(Context context, int layoutResourceId, + List data) { + super(context, layoutResourceId, data); + this.layoutResourceId = layoutResourceId; + this.context = context; + this.data = data; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View row = convertView; + LightningViewHolder holder = null; + + if (row == null) { + LayoutInflater inflater = ((Activity) context) + .getLayoutInflater(); + row = inflater.inflate(layoutResourceId, parent, false); + + holder = new LightningViewHolder(); + holder.txtTitle = (TextView) row.findViewById(R.id.text1); + holder.favicon = (ImageView) row.findViewById(R.id.favicon1); + holder.exit = (ImageView) row.findViewById(R.id.delete1); + holder.exit.setTag(position); + row.setTag(holder); + } else { + holder = (LightningViewHolder) row.getTag(); + } + + holder.exit.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View view) { + Integer index = (Integer) view.getTag(); + deleteTab(index); + } + + }); + + LightningView web = data.get(position); + holder.txtTitle.setText(web.getTitle()); + Bitmap favicon = web.getFavicon(); + holder.favicon.setImageBitmap(favicon); + return row; + } + + class LightningViewHolder { + TextView txtTitle; + ImageView favicon; + ImageView exit; + } + } + + public class BookmarkViewAdapter extends ArrayAdapter { + + Context context; + int layoutResourceId; + List data = null; + + public BookmarkViewAdapter(Context context, int layoutResourceId, + List data) { + super(context, layoutResourceId, data); + this.layoutResourceId = layoutResourceId; + this.context = context; + this.data = data; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View row = convertView; + BookmarkViewHolder holder = null; + + if (row == null) { + LayoutInflater inflater = ((Activity) context) + .getLayoutInflater(); + row = inflater.inflate(layoutResourceId, parent, false); + + holder = new BookmarkViewHolder(); + holder.txtTitle = (TextView) row.findViewById(R.id.text1); + holder.favicon = (ImageView) row.findViewById(R.id.favicon1); + row.setTag(holder); + } else { + holder = (BookmarkViewHolder) row.getTag(); + } + + HistoryItem web = data.get(position); + holder.txtTitle.setText(web.getTitle()); + holder.favicon.setImageBitmap(mWebpageBitmap); + if (web.getBitmap() == null) { + getImage(holder.favicon, web); + } else { + holder.favicon.setImageBitmap(web.getBitmap()); + } + return row; + } + + class BookmarkViewHolder { + TextView txtTitle; + ImageView favicon; + } + } + + public void getImage(ImageView image, HistoryItem web) { + try { + new DownloadImageTask(image, web).execute(Constants.HTTP + + getDomainName(web.getUrl()) + "/favicon.ico"); + } catch (URISyntaxException e) { + new DownloadImageTask(image, web) + .execute("https://www.google.com/s2/favicons?domain_url=" + + web.getUrl()); + e.printStackTrace(); + } + } + + private class DownloadImageTask extends AsyncTask { + ImageView bmImage; + HistoryItem mWeb; + + public DownloadImageTask(ImageView bmImage, HistoryItem web) { + this.bmImage = bmImage; + this.mWeb = web; + } + + protected Bitmap doInBackground(String... urls) { + String urldisplay = urls[0]; + Bitmap mIcon = null; + // unique path for each url that is bookmarked. + String hash = String.valueOf(urldisplay.hashCode()); + File image = new File(mContext.getCacheDir(), hash + ".png"); + // checks to see if the image exists + if (!image.exists()) { + try { + // if not, download it... + InputStream in = new java.net.URL(urldisplay).openStream(); + + if (in != null) { + mIcon = BitmapFactory.decodeStream(in); + } + // ...and cache it + if (mIcon != null) { + FileOutputStream fos = new FileOutputStream(image); + mIcon.compress(Bitmap.CompressFormat.PNG, 85, fos); + fos.flush(); + fos.close(); + } + + } catch (Exception e) { + } + } else { + // if it exists, retrieve it from the cache + mIcon = BitmapFactory.decodeFile(image.getPath()); + } + if (mIcon == null) { + try { + // if not, download it... + InputStream in = new java.net.URL( + "https://www.google.com/s2/favicons?domain_url=" + + urldisplay).openStream(); + + if (in != null) { + mIcon = BitmapFactory.decodeStream(in); + } + // ...and cache it + if (mIcon != null) { + FileOutputStream fos = new FileOutputStream(image); + mIcon.compress(Bitmap.CompressFormat.PNG, 85, fos); + fos.flush(); + fos.close(); + } + + } catch (Exception e) { + } + } + if (mIcon == null) { + return mWebpageBitmap; + } else { + return mIcon; + } + } + + protected void onPostExecute(Bitmap result) { + bmImage.setImageBitmap(result); + mWeb.setBitmap(result); + notifyBookmarkDataSetChanged(); + } + } + + public static String getDomainName(String url) throws URISyntaxException { + URI uri = new URI(url); + String domain = uri.getHost(); + if (domain == null) { + return url; + } + return domain.startsWith("www.") ? domain.substring(4) : domain; + } + + @Override + public void updateUrl(String url) { + if (url == null) + return; + url = url.replaceFirst(Constants.HTTP, ""); + if (url.startsWith(Constants.FILE)) { + url = ""; + } + + mSearch.setText(url); + } + + @Override + public void updateProgress(int n) { + if (!mProgress.isShown()) + mProgress.setVisibility(View.VISIBLE); + mProgress.setProgress(n); + if (n == 100) { + mProgress.setVisibility(View.INVISIBLE); + setIsFinishedLoading(); + } else { + setIsLoading(); + } + } + + @Override + public void updateHistory(final String title, final String url) { + Runnable update = new Runnable() { + @Override + public void run() { + if (isSystemBrowserAvailable()) { + try { + Browser.updateVisitedHistory(getContentResolver(), url, + true); + } catch (NullPointerException ignored) { + } + } + try { + StringBuilder sb = new StringBuilder("url" + " = "); + DatabaseUtils.appendEscapedSQLString(sb, url); + + if (mHistoryHandler == null) { + mHistoryHandler = new DatabaseHandler(mContext); + mHistoryDatabase = mHistoryHandler + .getReadableDatabase(); + } else if (!mHistoryHandler.isOpen()) { + mHistoryHandler = new DatabaseHandler(mContext); + mHistoryDatabase = mHistoryHandler + .getReadableDatabase(); + } else if (mHistoryDatabase == null) { + mHistoryDatabase = mHistoryHandler + .getReadableDatabase(); + } else if (!mHistoryDatabase.isOpen()) { + mHistoryDatabase = mHistoryHandler + .getReadableDatabase(); + } + Cursor cursor = mHistoryDatabase.query( + DatabaseHandler.TABLE_HISTORY, new String[] { "id", + "url", "title" }, sb.toString(), null, + null, null, null); + if (!cursor.moveToFirst()) { + mHistoryHandler.addHistoryItem(new HistoryItem(url, + title)); + } else { + mHistoryHandler.delete(url); + mHistoryHandler.addHistoryItem(new HistoryItem(url, + title)); + } + cursor.close(); + cursor = null; + } catch (IllegalStateException e) { + Log.e("Lightning", "IllegalStateException in updateHistory"); + } catch (NullPointerException e) { + Log.e("Lightning", "NullPointerException in updateHistory"); + } catch (SQLiteException e) { + Log.e("Lightning", "SQLiteException in updateHistory"); + } + } + }; + if (url != null) { + if (!url.startsWith(Constants.FILE)) { + new Thread(update).start(); + + } + } + } + + /** + * 1, 2, 3, testing... is there a system browser that has some nice + * bookmarks for us? + */ + public boolean isSystemBrowserAvailable() { + return mSystemBrowser; + } + + /** + * 1, 2, 3, testing... is there a system browser that has some nice + * bookmarks for us? helper method for isSystemBrowserAvailable + */ + public boolean getSystemBrowser() { + Cursor c = null; + String[] columns = new String[] { "url", "title" }; + boolean browserFlag = false; + try { + + Uri bookmarks = Browser.BOOKMARKS_URI; + c = getContentResolver() + .query(bookmarks, columns, null, null, null); + } catch (SQLiteException ignored) { + } catch (IllegalStateException ignored) { + } catch (NullPointerException ignored) { + } + + if (c != null) { + Log.i("Browser", "System Browser Available"); + browserFlag = true; + } else { + Log.e("Browser", "System Browser Unavailable"); + browserFlag = false; + } + if (c != null) { + c.close(); + c = null; + } + mEditPrefs.putBoolean("SystemBrowser", browserFlag); + mEditPrefs.commit(); + return browserFlag; + } + + /** + * method to generate search suggestions for the AutoCompleteTextView from + * previously searched URLs + */ + private void initializeSearchSuggestions(final AutoCompleteTextView getUrl) { + + getUrl.setThreshold(1); + getUrl.setDropDownWidth(-1); + getUrl.setDropDownAnchor(R.id.progressWrapper); + getUrl.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, + long arg3) { + try { + String url; + url = ((TextView) arg1.findViewById(R.id.url)).getText() + .toString(); + if (url.startsWith(mContext.getString(R.string.suggestion))) { + url = ((TextView) arg1.findViewById(R.id.title)) + .getText().toString(); + } else { + getUrl.setText(url); + } + searchTheWeb(url); + url = null; + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(getUrl.getWindowToken(), 0); + if (mCurrentView != null) { + mCurrentView.requestFocus(); + } + } catch (NullPointerException e) { + Log.e("Browser Error: ", + "NullPointerException on item click"); + } + } + + }); + + getUrl.setSelectAllOnFocus(true); + mSearchAdapter = new SearchAdapter(mContext, false); + getUrl.setAdapter(mSearchAdapter); + } + + private List getBookmarks() { + List bookmarks = new ArrayList(); + File bookUrl = new File(getApplicationContext().getFilesDir(), + "bookurl"); + File book = new File(getApplicationContext().getFilesDir(), "bookmarks"); + try { + BufferedReader readUrl = new BufferedReader(new FileReader(bookUrl)); + BufferedReader readBook = new BufferedReader(new FileReader(book)); + String u, t; + while ((u = readUrl.readLine()) != null + && (t = readBook.readLine()) != null) { + HistoryItem map = new HistoryItem(u, t); + bookmarks.add(map); + } + readBook.close(); + readUrl.close(); + } catch (FileNotFoundException ignored) { + } catch (IOException ignored) { + } + Collections.sort(bookmarks); + return bookmarks; + } + + /** + * returns a list of HistoryItems + * + * @return + */ + private List getLatestHistory() { + DatabaseHandler historyHandler = new DatabaseHandler(mContext); + return historyHandler.getLastHundredItems(); + } + + /** + * function that opens the HTML history page in the browser + */ + private void openHistory() { + + Thread history = new Thread(new Runnable() { + + @Override + public void run() { + String historyHtml = HistoryPageVariables.Heading; + List historyList = getLatestHistory(); + Iterator it = historyList.iterator(); + HistoryItem helper; + while (it.hasNext()) { + helper = it.next(); + historyHtml += HistoryPageVariables.Part1 + helper.getUrl() + + HistoryPageVariables.Part2 + helper.getTitle() + + HistoryPageVariables.Part3 + helper.getUrl() + + HistoryPageVariables.Part4; + } + + historyHtml += HistoryPageVariables.End; + File historyWebPage = new File(getFilesDir(), "history.html"); + try { + FileWriter hWriter = new FileWriter(historyWebPage, false); + hWriter.write(historyHtml); + hWriter.close(); + } catch (IOException e) { + e.printStackTrace(); + } + mCurrentView.loadUrl(Constants.FILE + historyWebPage); + mSearch.setText(""); + } + + }); + history.run(); + } + + /** + * helper function that opens the bookmark drawer + */ + private void openBookmarks() { + if (mDrawerLayout.isDrawerOpen(mDrawer)) { + mDrawerLayout.closeDrawers(); + } + mDrawerToggle.syncState(); + mDrawerLayout.openDrawer(mDrawerRight); + } + + @Override + /** + * open the HTML bookmarks page, parameter view is the WebView that should show the page + */ + public void openBookmarkPage(WebView view) { + String bookmarkHtml = BookmarkPageVariables.Heading; + Iterator iter = mBookmarkList.iterator(); + HistoryItem helper; + while (iter.hasNext()) { + helper = iter.next(); + bookmarkHtml += (BookmarkPageVariables.Part1 + helper.getUrl() + + BookmarkPageVariables.Part2 + helper.getUrl() + + BookmarkPageVariables.Part3 + helper.getTitle() + BookmarkPageVariables.Part4); + } + bookmarkHtml += BookmarkPageVariables.End; + File bookmarkWebPage = new File(mContext.getCacheDir(), + "bookmarks.html"); + try { + FileWriter bookWriter = new FileWriter(bookmarkWebPage, false); + bookWriter.write(bookmarkHtml); + bookWriter.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + view.loadUrl(Constants.FILE + bookmarkWebPage); + } + + /** + * adds a bookmark with a title and url. Simple. + */ + public void addBookmark(Context context, String title, String url) { + File book = new File(context.getFilesDir(), "bookmarks"); + File bookUrl = new File(context.getFilesDir(), "bookurl"); + HistoryItem bookmark = new HistoryItem(url, title); + + try { + BufferedReader readUrlRead = new BufferedReader(new FileReader( + bookUrl)); + String u; + while ((u = readUrlRead.readLine()) != null) { + if (u.contentEquals(url)) { + readUrlRead.close(); + return; + } + } + readUrlRead.close(); + + } catch (FileNotFoundException ignored) { + } catch (IOException ignored) { + } catch (NullPointerException ignored) { + } + try { + BufferedWriter bookWriter = new BufferedWriter(new FileWriter(book, + true)); + BufferedWriter urlWriter = new BufferedWriter(new FileWriter( + bookUrl, true)); + bookWriter.write(title); + urlWriter.write(url); + bookWriter.newLine(); + urlWriter.newLine(); + bookWriter.close(); + urlWriter.close(); + mBookmarkList.add(bookmark); + Collections.sort(mBookmarkList); + notifyBookmarkDataSetChanged(); + } catch (FileNotFoundException ignored) { + } catch (IOException ignored) { + } catch (NullPointerException ignored) { + } + mSearchAdapter.refreshBookmarks(); + } + + @Override + public void update() { + mTitleAdapter.notifyDataSetChanged(); + } + + @Override + /** + * opens a file chooser + * param ValueCallback is the message from the WebView indicating a file chooser + * should be opened + */ + public void openFileChooser(ValueCallback uploadMsg) { + mUploadMessage = uploadMsg; + Intent i = new Intent(Intent.ACTION_GET_CONTENT); + i.addCategory(Intent.CATEGORY_OPENABLE); + i.setType("*/*"); + startActivityForResult(Intent.createChooser(i, "File Chooser"), 1); + } + + @Override + /** + * used to allow uploading into the browser, doesn't get called in KitKat :( + */ + protected void onActivityResult(int requestCode, int resultCode, + Intent intent) { + if (requestCode == 1) { + if (null == mUploadMessage) + return; + Uri result = intent == null || resultCode != RESULT_OK ? null + : intent.getData(); + mUploadMessage.onReceiveValue(result); + mUploadMessage = null; + + } + } + + @Override + /** + * handles long presses for the browser, tries to get the + * url of the item that was clicked and sends it (it can be null) + * to the click handler that does cool stuff with it + */ + public void onLongPress() { + if (mClickHandler == null) { + mClickHandler = new ClickHandler(mContext); + } + Message click = mClickHandler.obtainMessage(); + if (click != null) { + click.setTarget(mClickHandler); + } + mCurrentView.getWebView().requestFocusNodeHref(click); + } + + @Override + public void onShowCustomView(View view, int requestedOrientation, + CustomViewCallback callback) { + if (view == null) { + return; + } + if (mCustomView != null && callback != null) { + callback.onCustomViewHidden(); + return; + } + view.setKeepScreenOn(true); + mOriginalOrientation = getRequestedOrientation(); + FrameLayout decor = (FrameLayout) getWindow().getDecorView(); + mFullscreenContainer = new FullscreenHolder(this); + mCustomView = view; + mFullscreenContainer.addView(mCustomView, COVER_SCREEN_PARAMS); + decor.addView(mFullscreenContainer, COVER_SCREEN_PARAMS); + setFullscreen(true); + mCurrentView.setVisibility(View.GONE); + if (view instanceof FrameLayout) { + if (((FrameLayout) view).getFocusedChild() instanceof VideoView) { + mVideoView = (VideoView) ((FrameLayout) view).getFocusedChild(); + mVideoView.setOnErrorListener(new VideoCompletionListener()); + mVideoView + .setOnCompletionListener(new VideoCompletionListener()); + } + } + mCustomViewCallback = callback; + } + + @Override + public void onHideCustomView() { + if (mCustomView == null || mCustomViewCallback == null + || mCurrentView == null) + return; + Log.i("Lightning", "onHideCustomView"); + mCurrentView.setVisibility(View.VISIBLE); + mCustomView.setKeepScreenOn(false); + setFullscreen(mPreferences.getBoolean("hidestatus", false)); + FrameLayout decor = (FrameLayout) getWindow().getDecorView(); + if (decor != null) { + decor.removeView(mFullscreenContainer); + } + + if (API < 19) { + try { + mCustomViewCallback.onCustomViewHidden(); + } catch (Throwable ignored) { + + } + } + mFullscreenContainer = null; + mCustomView = null; + if (mVideoView != null) { + mVideoView.setOnErrorListener(null); + mVideoView.setOnCompletionListener(null); + mVideoView = null; + } + setRequestedOrientation(mOriginalOrientation); + } + + private class VideoCompletionListener implements + MediaPlayer.OnCompletionListener, MediaPlayer.OnErrorListener { + + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + return false; + } + + @Override + public void onCompletion(MediaPlayer mp) { + onHideCustomView(); + } + + } + + /** + * turns on fullscreen mode in the app + * + * @param enabled + * whether to enable fullscreen or not + */ + public void setFullscreen(boolean enabled) { + Window win = getWindow(); + WindowManager.LayoutParams winParams = win.getAttributes(); + final int bits = WindowManager.LayoutParams.FLAG_FULLSCREEN; + if (enabled) { + winParams.flags |= bits; + } else { + winParams.flags &= ~bits; + if (mCustomView != null) { + mCustomView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); + } else { + mBrowserFrame + .setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); + } + } + win.setAttributes(winParams); + } + + /** + * a class extending FramLayout used to display fullscreen videos + */ + static class FullscreenHolder extends FrameLayout { + + public FullscreenHolder(Context ctx) { + super(ctx); + setBackgroundColor(ctx.getResources().getColor( + android.R.color.black)); + } + + @Override + public boolean onTouchEvent(MotionEvent evt) { + return true; + } + + } + + @Override + /** + * a stupid method that returns the bitmap image to display in place of + * a loading video + */ + public Bitmap getDefaultVideoPoster() { + if (mDefaultVideoPoster == null) { + mDefaultVideoPoster = BitmapFactory.decodeResource(getResources(), + android.R.drawable.ic_media_play); + } + return mDefaultVideoPoster; + } + + @Override + /** + * dumb method that returns the loading progress for a video + */ + public View getVideoLoadingProgressView() { + if (mVideoProgressView == null) { + LayoutInflater inflater = LayoutInflater.from(this); + mVideoProgressView = inflater.inflate( + R.layout.video_loading_progress, null); + } + return mVideoProgressView; + } + + @Override + /** + * handles javascript requests to create a new window in the browser + */ + public void onCreateWindow(boolean isUserGesture, Message resultMsg) { + if (resultMsg == null) { + return; + } + newTab("", true); + WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; + transport.setWebView(mCurrentView.getWebView()); + resultMsg.sendToTarget(); + } + + @Override + /** + * returns the Activity instance for this activity, + * very helpful when creating things in other classes... I think + */ + public Activity getActivity() { + return mActivity; + } + + /** + * it hides the action bar, seriously what else were you expecting + */ + @Override + public void hideActionBar() { + if (mActionBar.isShowing() && mFullScreen) { + mActionBar.hide(); + } + } + + @Override + /** + * obviously it shows the action bar if it's hidden + */ + public void showActionBar() { + if (!mActionBar.isShowing() && mFullScreen) { + mActionBar.show(); + } + } + + @Override + /** + * handles a long click on the page, parameter String url + * is the url that should have been obtained from the WebView touch node + * thingy, if it is null, this method tries to deal with it and find a workaround + */ + public void longClickPage(final String url) { + HitTestResult result = null; + if (mCurrentView.getWebView() != null) { + result = mCurrentView.getWebView().getHitTestResult(); + } + if (url != null) { + if (url != null) { + if (result != null) { + if (result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE + || result.getType() == HitTestResult.IMAGE_TYPE) { + DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: { + newTab(url, false); + break; + } + case DialogInterface.BUTTON_NEGATIVE: { + mCurrentView.loadUrl(url); + break; + } + case DialogInterface.BUTTON_NEUTRAL: { + if (API > 8) { + Utils.downloadFile(mActivity, url, + mCurrentView.getUserAgent(), + "attachment", false); + } + break; + } + } + } + }; + + AlertDialog.Builder builder = new AlertDialog.Builder( + mActivity); // dialog + builder.setTitle(url.replace(Constants.HTTP, "")) + .setMessage( + getResources().getString( + R.string.dialog_image)) + .setPositiveButton( + getResources().getString( + R.string.action_new_tab), + dialogClickListener) + .setNegativeButton( + getResources().getString( + R.string.action_open), + dialogClickListener) + .setNeutralButton( + getResources().getString( + R.string.action_download), + dialogClickListener).show(); + + } else { + DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: { + newTab(url, false); + break; + } + case DialogInterface.BUTTON_NEGATIVE: { + mCurrentView.loadUrl(url); + break; + } + case DialogInterface.BUTTON_NEUTRAL: { + ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); + ClipData clip = ClipData.newPlainText( + "label", url); + clipboard.setPrimaryClip(clip); + + break; + } + } + } + }; + + AlertDialog.Builder builder = new AlertDialog.Builder( + mActivity); // dialog + builder.setTitle(url) + .setMessage( + getResources().getString( + R.string.dialog_link)) + .setPositiveButton( + getResources().getString( + R.string.action_new_tab), + dialogClickListener) + .setNegativeButton( + getResources().getString( + R.string.action_open), + dialogClickListener) + .setNeutralButton( + getResources().getString( + R.string.action_copy), + dialogClickListener).show(); + } + } else { + DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: { + newTab(url, false); + break; + } + case DialogInterface.BUTTON_NEGATIVE: { + mCurrentView.loadUrl(url); + break; + } + case DialogInterface.BUTTON_NEUTRAL: { + ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); + ClipData clip = ClipData.newPlainText("label", + url); + clipboard.setPrimaryClip(clip); + + break; + } + } + } + }; + + AlertDialog.Builder builder = new AlertDialog.Builder( + mActivity); // dialog + builder.setTitle(url) + .setMessage( + getResources().getString( + R.string.dialog_link)) + .setPositiveButton( + getResources().getString( + R.string.action_new_tab), + dialogClickListener) + .setNegativeButton( + getResources().getString( + R.string.action_open), + dialogClickListener) + .setNeutralButton( + getResources().getString( + R.string.action_copy), + dialogClickListener).show(); + } + } + } else if (result != null) { + if (result.getExtra() != null) { + final String newUrl = result.getExtra(); + if (result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE + || result.getType() == HitTestResult.IMAGE_TYPE) { + DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: { + newTab(newUrl, false); + break; + } + case DialogInterface.BUTTON_NEGATIVE: { + mCurrentView.loadUrl(newUrl); + break; + } + case DialogInterface.BUTTON_NEUTRAL: { + if (API > 8) { + Utils.downloadFile(mActivity, newUrl, + mCurrentView.getUserAgent(), + "attachment", false); + } + break; + } + } + } + }; + + AlertDialog.Builder builder = new AlertDialog.Builder( + mActivity); // dialog + builder.setTitle(newUrl.replace(Constants.HTTP, "")) + .setMessage( + getResources().getString( + R.string.dialog_image)) + .setPositiveButton( + getResources().getString( + R.string.action_new_tab), + dialogClickListener) + .setNegativeButton( + getResources().getString( + R.string.action_open), + dialogClickListener) + .setNeutralButton( + getResources().getString( + R.string.action_download), + dialogClickListener).show(); + + } else { + DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: { + newTab(newUrl, false); + break; + } + case DialogInterface.BUTTON_NEGATIVE: { + mCurrentView.loadUrl(newUrl); + break; + } + case DialogInterface.BUTTON_NEUTRAL: { + ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); + ClipData clip = ClipData.newPlainText("label", + newUrl); + clipboard.setPrimaryClip(clip); + + break; + } + } + } + }; + + AlertDialog.Builder builder = new AlertDialog.Builder( + mActivity); // dialog + builder.setTitle(newUrl) + .setMessage( + getResources().getString( + R.string.dialog_link)) + .setPositiveButton( + getResources().getString( + R.string.action_new_tab), + dialogClickListener) + .setNegativeButton( + getResources().getString( + R.string.action_open), + dialogClickListener) + .setNeutralButton( + getResources().getString( + R.string.action_copy), + dialogClickListener).show(); + } + + } + + } + + } + + /** + * This method lets the search bar know that the page is currently loading + * and that it should display the stop icon to indicate to the user that + * pressing it stops the page from loading + */ + public void setIsLoading() { + if (!mSearch.hasFocus()) { + mIcon = mDeleteIcon; + mSearch.setCompoundDrawables(null, null, mDeleteIcon, null); + } + } + + /** + * This tells the search bar that the page is finished loading and it should + * display the refresh icon + */ + public void setIsFinishedLoading() { + if (!mSearch.hasFocus()) { + mIcon = mRefreshIcon; + mSearch.setCompoundDrawables(null, null, mRefreshIcon, null); + } + } + + /** + * handle presses on the refresh icon in the search bar, if the page is + * loading, stop the page, if it is done loading refresh the page. + * + * See setIsFinishedLoading and setIsLoading for displaying the correct icon + */ + public void refreshOrStop() { + if (mCurrentView != null) { + if (mCurrentView.getProgress() < 100) { + mCurrentView.stopLoading(); + } else { + mCurrentView.reload(); + } + } + } + + @Override + public boolean isActionBarShowing() { + if (mActionBar != null) { + return mActionBar.isShowing(); + } else { + return false; + } + } + +} \ No newline at end of file diff --git a/src/acr/browser/lightning/BrowserController.java b/src/acr/browser/lightning/BrowserController.java new file mode 100644 index 0000000..9c86524 --- /dev/null +++ b/src/acr/browser/lightning/BrowserController.java @@ -0,0 +1,49 @@ +/* + * Copyright 2014 A.C.R. Development + */ +package acr.browser.lightning; + +import android.app.Activity; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Message; +import android.view.View; +import android.webkit.ValueCallback; +import android.webkit.WebChromeClient.CustomViewCallback; +import android.webkit.WebView; + +public interface BrowserController { + public void updateUrl(String title); + + public void updateProgress(int n); + + public void updateHistory(String title, String url); + + public void openFileChooser(ValueCallback uploadMsg); + + public void update(); + + public void onLongPress(); + + public void onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback); + + public void onHideCustomView(); + + public Bitmap getDefaultVideoPoster(); + + public View getVideoLoadingProgressView(); + + public void onCreateWindow(boolean isUserGesture, Message resultMsg); + + public Activity getActivity(); + + public void hideActionBar(); + + public void showActionBar(); + + public void longClickPage(String url); + + public void openBookmarkPage(WebView view); + + public boolean isActionBarShowing(); +} diff --git a/src/acr/browser/lightning/ClickHandler.java b/src/acr/browser/lightning/ClickHandler.java new file mode 100644 index 0000000..d9f2b4c --- /dev/null +++ b/src/acr/browser/lightning/ClickHandler.java @@ -0,0 +1,31 @@ +/* + * Copyright 2014 A.C.R. Development + */ +package acr.browser.lightning; + +import android.content.Context; +import android.os.Handler; +import android.os.Message; + +public class ClickHandler extends Handler { + + private BrowserController mBrowserController; + + public ClickHandler(Context context) { + try { + mBrowserController = (BrowserController) context; + } catch (ClassCastException e) { + throw new ClassCastException(context.toString() + + " must implement BrowserController"); + } + } + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + String url = null; + url = msg.getData().getString("url"); + mBrowserController.longClickPage(url); + } + +} \ No newline at end of file diff --git a/src/acr/browser/barebones/utilities/FinalVariables.java b/src/acr/browser/lightning/Constants.java similarity index 61% rename from src/acr/browser/barebones/utilities/FinalVariables.java rename to src/acr/browser/lightning/Constants.java index 44ff39e..bd46d4f 100644 --- a/src/acr/browser/barebones/utilities/FinalVariables.java +++ b/src/acr/browser/lightning/Constants.java @@ -1,13 +1,16 @@ -package acr.browser.barebones.utilities; +/* + * Copyright 2014 A.C.R. Development + */ +package acr.browser.lightning; import android.os.Environment; +public class Constants { -public class FinalVariables { + public Constants() { + // TODO Auto-generated constructor stub + } - public static final int MAX_TABS = 5; - public static final int MAX_BOOKMARKS = 100; - public static final boolean PAID_VERSION = false; public static final String DESKTOP_USER_AGENT = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/20 Safari/537.17"; public static final String MOBILE_USER_AGENT = "Mozilla/5.0 (Linux; U; Android 4.2; en-us; Nexus 4 Build/JOP24G) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30"; public static final int API = android.os.Build.VERSION.SDK_INT; @@ -16,13 +19,20 @@ public class FinalVariables { public static final String BING_SEARCH = "http://www.bing.com/search?q="; public static final String DUCK_SEARCH = "https://duckduckgo.com/?t=lightning&q="; public static final String DUCK_LITE_SEARCH = "https://duckduckgo.com/lite/?t=lightning&q="; - public static final String STARTPAGE_SEARCH = "https://startpage.com/do/m/mobilesearch?language=english&query="; - public static final String HOMEPAGE = "https://www.google.com"; + public static final String STARTPAGE_MOBILE_SEARCH = "https://startpage.com/do/m/mobilesearch?language=english&query="; + public static final String STARTPAGE_SEARCH = "https://startpage.com/do/search?language=english&query="; + public static final String ANDROID_SEARCH = "http://www.androidsearchresult.com/search.pg?aff=olb&keyword="; + public static final String HOMEPAGE = "about:home"; public static final String BAIDU_SEARCH = "http://www.baidu.com/s?wd="; public static final String YANDEX_SEARCH = "http://yandex.ru/yandsearch?lr=21411&text="; - public static final String ADVANCED_SETTINGS_INTENT = "android.intent.action.ADVANCED_SETTINGS"; - public static final String SETTINGS_INTENT = "android.intent.action.SETTINGS"; - public static final String INCOGNITO_INTENT = "android.intent.action.BROWSER_INCOGNITO"; + public static final String ADVANCED_SETTINGS_INTENT = "android.intent.action.LIGHTNING_ADVANCED_SETTINGS"; + public static final String LICENSE_INTENT = "android.intent.action.LIGHTNING_LICENSE"; + public static final String SETTINGS_INTENT = "android.intent.action.LIGHTNING_SETTINGS"; + public static final String INCOGNITO_INTENT = "android.intent.action.LIGHTNING_INCOGNITO"; public static final String EXTERNAL_STORAGE = Environment.getExternalStorageDirectory().toString(); + public static final String SEPARATOR = "\\|\\$\\|SEPARATOR\\|\\$\\|"; + public static final String HTTP = "http://"; + public static final String HTTPS = "https://"; + public static final String FILE = "file://"; } diff --git a/src/acr/browser/lightning/DatabaseHandler.java b/src/acr/browser/lightning/DatabaseHandler.java new file mode 100644 index 0000000..68f2e16 --- /dev/null +++ b/src/acr/browser/lightning/DatabaseHandler.java @@ -0,0 +1,199 @@ +/* + * Copyright 2014 A.C.R. Development + */ +package acr.browser.lightning; + +import java.util.ArrayList; +import java.util.List; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +public class DatabaseHandler extends SQLiteOpenHelper { + + // All Static variables + // Database Version + private static final int DATABASE_VERSION = 1; + + // Database Name + public static final String DATABASE_NAME = "historyManager"; + + // HistoryItems table name + public static final String TABLE_HISTORY = "history"; + + // HistoryItems Table Columns names + public static final String KEY_ID = "id"; + public static final String KEY_URL = "url"; + public static final String KEY_TITLE = "title"; + public static SQLiteDatabase mDatabase; + + public DatabaseHandler(Context context) { + super(context.getApplicationContext(), DATABASE_NAME, null, + DATABASE_VERSION); + mDatabase = this.getWritableDatabase(); + } + + // Creating Tables + @Override + public void onCreate(SQLiteDatabase db) { + String CREATE_HISTORY_TABLE = "CREATE TABLE " + TABLE_HISTORY + "(" + + KEY_ID + " INTEGER PRIMARY KEY," + KEY_URL + " TEXT," + + KEY_TITLE + " TEXT" + ")"; + db.execSQL(CREATE_HISTORY_TABLE); + } + + // Upgrading database + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + // Drop older table if existed + db.execSQL("DROP TABLE IF EXISTS " + TABLE_HISTORY); + + // Create tables again + onCreate(db); + } + + public boolean isOpen(){ + if(mDatabase != null) + return mDatabase.isOpen(); + else + return false; + } + + @Override + public synchronized void close() { + if(mDatabase != null) + mDatabase.close(); + super.close(); + } + + /** + * All CRUD(Create, Read, Update, Delete) Operations + */ + + public synchronized void delete(String url) { + String n = getHistoryItem(url); + if(n != null) + deleteHistoryItem(n); + } + + // Adding new item + public synchronized void addHistoryItem(HistoryItem item) { + ContentValues values = new ContentValues(); + values.put(KEY_URL, item.getUrl()); // HistoryItem Name + values.put(KEY_TITLE, item.getTitle()); // HistoryItem Phone + // Inserting Row + mDatabase.insert(TABLE_HISTORY, null, values); + } + + // Getting single item + String getHistoryItem(String url) { + Cursor cursor = mDatabase.query(TABLE_HISTORY, new String[] { KEY_ID, KEY_URL, + KEY_TITLE }, KEY_URL + "=?", new String[] { url }, null, null, + null, null); + String m = null; + if (cursor != null) { + cursor.moveToFirst(); + m = cursor.getString(0); + + cursor.close(); + } + // return item + return m; + } + + public List findItemsContaining(String search) { + List itemList = new ArrayList(); + //select query + String selectQuery = "SELECT * FROM " +TABLE_HISTORY +" WHERE "+KEY_TITLE+" LIKE '%" + search + "%'"; + Cursor cursor = mDatabase.rawQuery(selectQuery, null); + + // looping through all rows and adding to list + if (cursor.moveToLast()) { + do { + HistoryItem item = new HistoryItem(); + item.setID(Integer.parseInt(cursor.getString(0))); + item.setUrl(cursor.getString(1)); + item.setTitle(cursor.getString(2)); + item.setImageId(R.drawable.ic_history); + // Adding item to list + itemList.add(item); + } while (cursor.moveToPrevious()); + } + cursor.close(); + // return item list + return itemList; + } + + public List getLastHundredItems() { + List itemList = new ArrayList(); + String selectQuery = "SELECT * FROM " + TABLE_HISTORY; + + Cursor cursor = mDatabase.rawQuery(selectQuery, null); + int counter = 0; + if (cursor.moveToLast()) { + do { + HistoryItem item = new HistoryItem(); + item.setID(Integer.parseInt(cursor.getString(0))); + item.setUrl(cursor.getString(1)); + item.setTitle(cursor.getString(2)); + item.setImageId(R.drawable.ic_history); + itemList.add(item); + counter++; + } while (cursor.moveToPrevious() && counter < 100); + } + cursor.close(); + return itemList; + } + + public List getAllHistoryItems() { + List itemList = new ArrayList(); + String selectQuery = "SELECT * FROM " + TABLE_HISTORY; + + Cursor cursor = mDatabase.rawQuery(selectQuery, null); + + if (cursor.moveToFirst()) { + do { + HistoryItem item = new HistoryItem(); + item.setID(Integer.parseInt(cursor.getString(0))); + item.setUrl(cursor.getString(1)); + item.setTitle(cursor.getString(2)); + item.setImageId(R.drawable.ic_history); + itemList.add(item); + } while (cursor.moveToNext()); + } + cursor.close(); + return itemList; + } + + // Updating single item + public synchronized int updateHistoryItem(HistoryItem item) { + + ContentValues values = new ContentValues(); + values.put(KEY_URL, item.getUrl()); + values.put(KEY_TITLE, item.getTitle()); + int n = mDatabase.update(TABLE_HISTORY, values, KEY_ID + " = ?", + new String[] { String.valueOf(item.getId()) }); + // updating row + return n; + } + + // Deleting single item + public synchronized void deleteHistoryItem(String id) { + mDatabase.delete(TABLE_HISTORY, KEY_ID + " = ?", + new String[] { String.valueOf(id) }); + } + + // Getting items Count + public int getHistoryItemsCount() { + String countQuery = "SELECT * FROM " + TABLE_HISTORY; + Cursor cursor = mDatabase.rawQuery(countQuery, null); + cursor.close(); + + // return count + return cursor.getCount(); + } + +} diff --git a/src/acr/browser/lightning/DownloadHandler.java b/src/acr/browser/lightning/DownloadHandler.java new file mode 100644 index 0000000..d831896 --- /dev/null +++ b/src/acr/browser/lightning/DownloadHandler.java @@ -0,0 +1,215 @@ +/* + * Copyright 2014 A.C.R. Development + */ +package acr.browser.lightning; + + + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.DownloadManager; +import android.content.ActivityNotFoundException; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.net.Uri; +import android.os.Environment; +import android.text.TextUtils; +import android.util.Log; +import android.webkit.CookieManager; +import android.webkit.URLUtil; +import android.widget.Toast; + +/** + * Handle download requests + */ +public class DownloadHandler { + + + private static final String LOGTAG = "DLHandler"; + private static Activity mActivity; + + /** + * Notify the host application a download should be done, or that + * the data should be streamed if a streaming viewer is available. + * @param activity Activity requesting the download. + * @param url The full url to the content that should be downloaded + * @param userAgent User agent of the downloading application. + * @param contentDisposition Content-disposition http header, if present. + * @param mimetype The mimetype of the content reported by the server + * @param privateBrowsing If the request is coming from a private browsing tab. + */ + public static void onDownloadStart(Activity activity, String url, + String userAgent, String contentDisposition, String mimetype, + boolean privateBrowsing) { + mActivity = activity; + // if we're dealing wih A/V content that's not explicitly marked + // for download, check if it's streamable. + if (contentDisposition == null + || !contentDisposition.regionMatches( + true, 0, "attachment", 0, 10)) { + // query the package manager to see if there's a registered handler + // that matches. + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setDataAndType(Uri.parse(url), mimetype); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + ResolveInfo info = activity.getPackageManager().resolveActivity(intent, + PackageManager.MATCH_DEFAULT_ONLY); + if (info != null) { + ComponentName myName = activity.getComponentName(); + // If we resolved to ourselves, we don't want to attempt to + // load the url only to try and download it again. + if (!myName.getPackageName().equals( + info.activityInfo.packageName) + || !myName.getClassName().equals( + info.activityInfo.name)) { + // someone (other than us) knows how to handle this mime + // type with this scheme, don't download. + try { + activity.startActivity(intent); + return; + } catch (ActivityNotFoundException ex) { + // Best behavior is to fall back to a download in this + // case + } + } + } + } + onDownloadStartNoStream(activity, url, userAgent, contentDisposition, + mimetype, privateBrowsing); + } + + // This is to work around the fact that java.net.URI throws Exceptions + // instead of just encoding URL's properly + // Helper method for onDownloadStartNoStream + private static String encodePath(String path) { + char[] chars = path.toCharArray(); + + boolean needed = false; + for (char c : chars) { + if (c == '[' || c == ']' || c == '|') { + needed = true; + break; + } + } + if (needed == false) { + return path; + } + + StringBuilder sb = new StringBuilder(""); + for (char c : chars) { + if (c == '[' || c == ']' || c == '|') { + sb.append('%'); + sb.append(Integer.toHexString(c)); + } else { + sb.append(c); + } + } + + return sb.toString(); + } + + /** + * Notify the host application a download should be done, even if there + * is a streaming viewer available for thise type. + * @param activity Activity requesting the download. + * @param url The full url to the content that should be downloaded + * @param userAgent User agent of the downloading application. + * @param contentDisposition Content-disposition http header, if present. + * @param mimetype The mimetype of the content reported by the server + * @param privateBrowsing If the request is coming from a private browsing tab. + */ + /*package */ static void onDownloadStartNoStream(Activity activity, + String url, String userAgent, String contentDisposition, + String mimetype, boolean privateBrowsing) { + + String filename = URLUtil.guessFileName(url, + contentDisposition, mimetype); + + // Check to see if we have an SDCard + String status = Environment.getExternalStorageState(); + if (!status.equals(Environment.MEDIA_MOUNTED)) { + int title; + String msg; + + // Check to see if the SDCard is busy, same as the music app + if (status.equals(Environment.MEDIA_SHARED)) { + msg = activity.getString(R.string.download_sdcard_busy_dlg_msg); + title = R.string.download_sdcard_busy_dlg_title; + } else { + msg = activity.getString(R.string.download_no_sdcard_dlg_msg, filename); + title = R.string.download_no_sdcard_dlg_title; + } + + new AlertDialog.Builder(activity) + .setTitle(title) + .setIcon(android.R.drawable.ic_dialog_alert) + .setMessage(msg) + .setPositiveButton(R.string.action_ok, null) + .show(); + return; + } + + // java.net.URI is a lot stricter than KURL so we have to encode some + // extra characters. Fix for b 2538060 and b 1634719 + WebAddress webAddress; + try { + webAddress = new WebAddress(url); + webAddress.setPath(encodePath(webAddress.getPath())); + } catch (Exception e) { + // This only happens for very bad urls, we want to chatch the + // exception here + Log.e(LOGTAG, "Exception trying to parse url:" + url); + return; + } + + String addressString = webAddress.toString(); + Uri uri = Uri.parse(addressString); + final DownloadManager.Request request; + try { + request = new DownloadManager.Request(uri); + } catch (IllegalArgumentException e) { + Toast.makeText(activity, R.string.cannot_download, Toast.LENGTH_SHORT).show(); + return; + } + request.setMimeType(mimetype); + // set downloaded file destination to /sdcard/Download. + // or, should it be set to one of several Environment.DIRECTORY* dirs depending on mimetype? + + String location = mActivity.getSharedPreferences(PreferenceConstants.PREFERENCES, 0) + .getString(PreferenceConstants.DOWNLOAD_DIRECTORY, Environment.DIRECTORY_DOWNLOADS); + request.setDestinationInExternalPublicDir(location, filename); + // let this downloaded file be scanned by MediaScanner - so that it can + // show up in Gallery app, for example. + request.allowScanningByMediaScanner(); + request.setDescription(webAddress.getHost()); + // XXX: Have to use the old url since the cookies were stored using the + // old percent-encoded url. + String cookies = CookieManager.getInstance().getCookie(url); + request.addRequestHeader("cookie", cookies); + request.setNotificationVisibility( + DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); + if (mimetype == null) { + if (TextUtils.isEmpty(addressString)) { + return; + } + // We must have long pressed on a link or image to download it. We + // are not sure of the mimetype in this case, so do a head request + new FetchUrlMimeType(activity, request, addressString, cookies, + userAgent).start(); + } else { + final DownloadManager manager + = (DownloadManager) activity.getSystemService(Context.DOWNLOAD_SERVICE); + new Thread("Browser download") { + public void run() { + manager.enqueue(request); + } + }.start(); + } + Toast.makeText(activity, R.string.download_pending, Toast.LENGTH_SHORT) + .show(); + } + +} \ No newline at end of file diff --git a/src/acr/browser/lightning/FetchMimeUrlType.java b/src/acr/browser/lightning/FetchMimeUrlType.java new file mode 100644 index 0000000..2fe25bd --- /dev/null +++ b/src/acr/browser/lightning/FetchMimeUrlType.java @@ -0,0 +1,109 @@ +/* + * Copyright 2014 A.C.R. Development + */ +package acr.browser.lightning; + + +import org.apache.http.Header; +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpHead; +import android.app.DownloadManager; +import android.content.Context; +import android.net.http.AndroidHttpClient; +import android.os.Environment; +import android.webkit.MimeTypeMap; +import android.webkit.URLUtil; + +import java.io.IOException; + +/** + * This class is used to pull down the http headers of a given URL so that + * we can analyse the mimetype and make any correction needed before we give + * the URL to the download manager. + * This operation is needed when the user long-clicks on a link or image and + * we don't know the mimetype. If the user just clicks on the link, we will + * do the same steps of correcting the mimetype down in + * android.os.webkit.LoadListener rather than handling it here. + * + */ +class FetchUrlMimeType extends Thread { + + private Context mContext; + private DownloadManager.Request mRequest; + private String mUri; + private String mCookies; + private String mUserAgent; + + public FetchUrlMimeType(Context context, DownloadManager.Request request, + String uri, String cookies, String userAgent) { + mContext = context.getApplicationContext(); + mRequest = request; + mUri = uri; + mCookies = cookies; + mUserAgent = userAgent; + } + + @Override + public void run() { + // User agent is likely to be null, though the AndroidHttpClient + // seems ok with that. + AndroidHttpClient client = AndroidHttpClient.newInstance(mUserAgent); + + HttpHead request = new HttpHead(mUri); + + if (mCookies != null && mCookies.length() > 0) { + request.addHeader("Cookie", mCookies); + } + + HttpResponse response; + String mimeType = null; + String contentDisposition = null; + try { + response = client.execute(request); + // We could get a redirect here, but if we do lets let + // the download manager take care of it, and thus trust that + // the server sends the right mimetype + if (response.getStatusLine().getStatusCode() == 200) { + Header header = response.getFirstHeader("Content-Type"); + if (header != null) { + mimeType = header.getValue(); + final int semicolonIndex = mimeType.indexOf(';'); + if (semicolonIndex != -1) { + mimeType = mimeType.substring(0, semicolonIndex); + } + } + Header contentDispositionHeader = response.getFirstHeader("Content-Disposition"); + if (contentDispositionHeader != null) { + contentDisposition = contentDispositionHeader.getValue(); + } + } + } catch (IllegalArgumentException ex) { + request.abort(); + } catch (IOException ex) { + request.abort(); + } finally { + client.close(); + } + + if (mimeType != null) { + if (mimeType.equalsIgnoreCase("text/plain") || + mimeType.equalsIgnoreCase("application/octet-stream")) { + String newMimeType = + MimeTypeMap.getSingleton().getMimeTypeFromExtension( + MimeTypeMap.getFileExtensionFromUrl(mUri)); + if (newMimeType != null) { + mRequest.setMimeType(newMimeType); + } + } + String filename = URLUtil.guessFileName(mUri, contentDisposition, + mimeType); + mRequest.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename); + } + + // Start the download + DownloadManager manager = (DownloadManager) mContext.getSystemService( + Context.DOWNLOAD_SERVICE); + manager.enqueue(mRequest); + } + +} diff --git a/src/acr/browser/lightning/HistoryItem.java b/src/acr/browser/lightning/HistoryItem.java new file mode 100644 index 0000000..d660024 --- /dev/null +++ b/src/acr/browser/lightning/HistoryItem.java @@ -0,0 +1,101 @@ +/* + * Copyright 2014 A.C.R. Development + */ +package acr.browser.lightning; + +import android.graphics.Bitmap; + +public class HistoryItem implements Comparable { + + // private variables + private int mId; + private String mUrl; + private String mTitle; + private Bitmap mBitmap; + private int mImageId; + + // Empty constructor + public HistoryItem() { + + } + + // constructor + public HistoryItem(int id, String url, String title) { + this.mId = id; + this.mUrl = url; + this.mTitle = title; + this.mBitmap = null; + } + + // constructor + public HistoryItem(String url, String title) { + this.mUrl = url; + this.mTitle = title; + this.mBitmap = null; + } + + // constructor + public HistoryItem(String url, String title, int imageId) { + this.mUrl = url; + this.mTitle = title; + this.mBitmap = null; + this.mImageId = imageId; + } + + // getting ID + public int getId() { + return this.mId; + } + + public int getImageId(){ + return this.mImageId; + } + + // setting id + public void setID(int id) { + this.mId = id; + } + + public void setImageId(int id){ + this.mImageId = id; + } + + public void setBitmap(Bitmap image) { + mBitmap = image; + } + + public Bitmap getBitmap() { + return mBitmap; + } + + // getting name + public String getUrl() { + return this.mUrl; + } + + // setting name + public void setUrl(String url) { + this.mUrl = url; + } + + // getting phone number + public String getTitle() { + return this.mTitle; + } + + // setting phone number + public void setTitle(String title) { + this.mTitle = title; + } + + @Override + public String toString() { + return mTitle; + } + + @Override + public int compareTo(HistoryItem another) { + return mTitle.compareTo(another.mTitle); + } + +} \ No newline at end of file diff --git a/src/acr/browser/lightning/HistoryPageVariables.java b/src/acr/browser/lightning/HistoryPageVariables.java new file mode 100644 index 0000000..1abf411 --- /dev/null +++ b/src/acr/browser/lightning/HistoryPageVariables.java @@ -0,0 +1,13 @@ +/* + * Copyright 2014 A.C.R. Development + */ +package acr.browser.lightning; + +public class HistoryPageVariables { + public static final String Heading = "History
"; + public static final String Part1 = "

"; + public static final String Part3 = "

"; + public static final String Part4 = "

"; + public static final String End = ""; +} diff --git a/src/acr/browser/lightning/HomepageVariables.java b/src/acr/browser/lightning/HomepageVariables.java new file mode 100644 index 0000000..0cb32de --- /dev/null +++ b/src/acr/browser/lightning/HomepageVariables.java @@ -0,0 +1,23 @@ +/* + * Copyright 2014 A.C.R. Development + */ +package acr.browser.lightning; + +public class HomepageVariables { + public static final String HEAD = "" + + "" + + "" + + "" + + "Homepage" + + "" + + "
















" + + ""; +} diff --git a/src/acr/browser/lightning/IncognitoActivity.java b/src/acr/browser/lightning/IncognitoActivity.java new file mode 100644 index 0000000..d65dd47 --- /dev/null +++ b/src/acr/browser/lightning/IncognitoActivity.java @@ -0,0 +1,2254 @@ +/* + * Copyright 2014 A.C.R. Development + */ + +package acr.browser.lightning; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import android.app.ActionBar; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.ClipData; +import android.content.ClipboardManager; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.res.Configuration; +import android.content.res.Resources.Theme; +import android.content.res.TypedArray; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteException; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.media.MediaPlayer; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Message; +import android.provider.Browser; +import android.support.v4.app.ActionBarDrawerToggle; +import android.support.v4.widget.DrawerLayout; +import android.text.TextUtils; +import android.util.Log; +import android.util.TypedValue; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.View.OnKeyListener; +import android.view.View.OnTouchListener; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; +import android.webkit.ValueCallback; +import android.webkit.WebChromeClient.CustomViewCallback; +import android.webkit.CookieManager; +import android.webkit.CookieSyncManager; +import android.webkit.WebIconDatabase; +import android.webkit.WebView; +import android.webkit.WebView.HitTestResult; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ArrayAdapter; +import android.widget.EditText; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.AutoCompleteTextView; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.VideoView; +import android.widget.TextView.OnEditorActionListener; + +public class IncognitoActivity extends Activity implements BrowserController { + private static DrawerLayout mDrawerLayout; + private static ListView mDrawerList; + private static RelativeLayout mDrawer; + private static LinearLayout mDrawerRight; + private static ListView mDrawerListRight; + private static TextView mNewTab; + private static ActionBarDrawerToggle mDrawerToggle; + private List mWebViews = new ArrayList(); + private static List mIdList = new ArrayList(); + private LightningView mCurrentView; + private static int mIdGenerator; + private static LightningViewAdapter mTitleAdapter; + private static List mBookmarkList; + private static BookmarkViewAdapter mBookmarkAdapter; + private static AutoCompleteTextView mSearch; + private static ClickHandler mClickHandler; + private static ProgressBar mProgress; + private static boolean mSystemBrowser = false; + private static ValueCallback mUploadMessage; + private static View mCustomView; + private static int mOriginalOrientation; + private static int mActionBarSize; + private static ActionBar mActionBar; + private static boolean mFullScreen; + private static FrameLayout mBrowserFrame; + private static FullscreenHolder mFullscreenContainer; + private static CustomViewCallback mCustomViewCallback; + private static final FrameLayout.LayoutParams COVER_SCREEN_PARAMS = new FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT); + private static Bitmap mDefaultVideoPoster; + private static View mVideoProgressView; + private static DatabaseHandler mHistoryHandler; + private static SQLiteDatabase mHistoryDatabase; + private static SharedPreferences mPreferences; + private static SharedPreferences.Editor mEditPrefs; + private static Context mContext; + private static Bitmap mWebpageBitmap; + private static String mSearchText; + private static Activity mActivity; + private static CookieManager mCookieManager; + private static final int API = android.os.Build.VERSION.SDK_INT; + private static Drawable mDeleteIcon; + private static Drawable mRefreshIcon; + private static Drawable mCopyIcon; + private static Drawable mIcon; + private static int mActionBarSizeDp; + private static String mHomepage; + private static boolean mIsNewIntent = false; + private static VideoView mVideoView; + private static SearchAdapter mSearchAdapter; + private static BitmapDrawable mIncognitoIcon; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + initialize(); + } + + private synchronized void initialize() { + setContentView(R.layout.activity_main); + TypedValue typedValue = new TypedValue(); + Theme theme = getTheme(); + theme.resolveAttribute(R.attr.numberColor, typedValue, true); + mPreferences = getSharedPreferences(PreferenceConstants.PREFERENCES, 0); + mEditPrefs = mPreferences.edit(); + mContext = this; + if (mIdList != null) { + mIdList.clear(); + } else { + mIdList = new ArrayList(); + } + if (mWebViews != null) { + mWebViews.clear(); + } else { + mWebViews = new ArrayList(); + } + + mActivity = this; + mClickHandler = new ClickHandler(this); + mBrowserFrame = (FrameLayout) findViewById(R.id.content_frame); + mProgress = (ProgressBar) findViewById(R.id.activity_bar); + mProgress.setVisibility(View.GONE); + mNewTab = (TextView) findViewById(R.id.new_tab_button); + mDrawer = (RelativeLayout) findViewById(R.id.drawer); + mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); + mDrawerList = (ListView) findViewById(R.id.left_drawer); + mDrawerRight = (LinearLayout) findViewById(R.id.right_drawer); + mDrawerListRight = (ListView) findViewById(R.id.right_drawer_list); + Bitmap bm = BitmapFactory.decodeResource(getResources(), + R.drawable.ic_action_incognito); + mIncognitoIcon = new BitmapDrawable(getResources(), bm); + mWebpageBitmap = BitmapFactory.decodeResource(getResources(), + R.drawable.ic_webpage); + mActionBar = getActionBar(); + final TypedArray styledAttributes = mContext.getTheme() + .obtainStyledAttributes( + new int[] { android.R.attr.actionBarSize }); + mActionBarSize = (int) styledAttributes.getDimension(0, 0); + if (pixelsToDp(mActionBarSize) < 48) { + mActionBarSize = getDp(48); + } + mActionBarSizeDp = pixelsToDp(mActionBarSize); + styledAttributes.recycle(); + + mHomepage = mPreferences.getString(PreferenceConstants.HOMEPAGE, + Constants.HOMEPAGE); + + mTitleAdapter = new LightningViewAdapter(this, R.layout.tab_list_item, + mWebViews); + mDrawerList.setAdapter(mTitleAdapter); + mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); + mDrawerList + .setOnItemLongClickListener(new DrawerItemLongClickListener()); + + mBookmarkList = getBookmarks(); + mBookmarkAdapter = new BookmarkViewAdapter(this, + R.layout.bookmark_list_item, mBookmarkList); + mDrawerListRight.setAdapter(mBookmarkAdapter); + mDrawerListRight + .setOnItemClickListener(new BookmarkItemClickListener()); + mDrawerListRight + .setOnItemLongClickListener(new BookmarkItemLongClickListener()); + + if (mHistoryHandler == null) { + mHistoryHandler = new DatabaseHandler(this); + } else if (!mHistoryHandler.isOpen()) { + mHistoryHandler = new DatabaseHandler(this); + } + mHistoryDatabase = mHistoryHandler.getReadableDatabase(); + + // set display options of the ActionBar + mActionBar.setDisplayShowTitleEnabled(false); + mActionBar.setDisplayShowCustomEnabled(true); + mActionBar.setDisplayShowHomeEnabled(true); + mActionBar.setDisplayHomeAsUpEnabled(true); + mActionBar.setCustomView(R.layout.search); + + RelativeLayout back = (RelativeLayout) findViewById(R.id.action_back); + RelativeLayout forward = (RelativeLayout) findViewById(R.id.action_forward); + if (back != null) { + back.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + if (mCurrentView != null) { + if (mCurrentView.canGoBack()) { + mCurrentView.goBack(); + } else { + deleteTab(mDrawerList.getCheckedItemPosition()); + } + } + } + + }); + } + if (forward != null) { + forward.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + if (mCurrentView != null) { + if (mCurrentView.canGoForward()) { + mCurrentView.goForward(); + } + } + } + + }); + } + + // create the search EditText in the ActionBar + mSearch = (AutoCompleteTextView) mActionBar.getCustomView() + .findViewById(R.id.search); + mDeleteIcon = getResources().getDrawable(R.drawable.ic_action_delete); + mDeleteIcon.setBounds(0, 0, Utils.convertToDensityPixels(mContext, 24), + Utils.convertToDensityPixels(mContext, 24)); + mRefreshIcon = getResources().getDrawable(R.drawable.ic_action_refresh); + mRefreshIcon.setBounds(0, 0, + Utils.convertToDensityPixels(mContext, 24), + Utils.convertToDensityPixels(mContext, 24)); + mCopyIcon = getResources().getDrawable(R.drawable.ic_action_copy); + mCopyIcon.setBounds(0, 0, Utils.convertToDensityPixels(mContext, 24), + Utils.convertToDensityPixels(mContext, 24)); + mIcon = mRefreshIcon; + mSearch.setCompoundDrawables(null, null, mRefreshIcon, null); + mSearch.setOnKeyListener(new OnKeyListener() { + + @Override + public boolean onKey(View arg0, int arg1, KeyEvent arg2) { + + switch (arg1) { + case KeyEvent.KEYCODE_ENTER: + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(mSearch.getWindowToken(), 0); + searchTheWeb(mSearch.getText().toString()); + if (mCurrentView != null) { + mCurrentView.requestFocus(); + } + return true; + default: + break; + } + return false; + } + + }); + mSearch.setOnFocusChangeListener(new View.OnFocusChangeListener() { + + @Override + public void onFocusChange(View v, boolean hasFocus) { + if (!hasFocus && mCurrentView != null) { + if (mCurrentView != null) { + if (mCurrentView.getProgress() < 100) { + setIsLoading(); + } else { + setIsFinishedLoading(); + } + } + updateUrl(mCurrentView.getUrl()); + } else if (hasFocus) { + mIcon = mCopyIcon; + mSearch.setCompoundDrawables(null, null, mCopyIcon, null); + } + } + }); + mSearch.setOnEditorActionListener(new OnEditorActionListener() { + + @Override + public boolean onEditorAction(TextView arg0, int actionId, + KeyEvent arg2) { + // hide the keyboard and search the web when the enter key + // button is pressed + if (actionId == EditorInfo.IME_ACTION_GO + || actionId == EditorInfo.IME_ACTION_DONE + || actionId == EditorInfo.IME_ACTION_NEXT + || actionId == EditorInfo.IME_ACTION_SEND + || actionId == EditorInfo.IME_ACTION_SEARCH + || (arg2.getAction() == KeyEvent.KEYCODE_ENTER)) { + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(mSearch.getWindowToken(), 0); + searchTheWeb(mSearch.getText().toString()); + if (mCurrentView != null) { + mCurrentView.requestFocus(); + } + return true; + } + return false; + } + + }); + + mSearch.setOnTouchListener(new OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + if (mSearch.getCompoundDrawables()[2] != null) { + boolean tappedX = event.getX() > (mSearch.getWidth() + - mSearch.getPaddingRight() - mIcon + .getIntrinsicWidth()); + if (tappedX) { + if (event.getAction() == MotionEvent.ACTION_UP) { + if (mSearch.hasFocus()) { + ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); + ClipData clip = ClipData.newPlainText("label", + mSearch.getText().toString()); + clipboard.setPrimaryClip(clip); + Utils.showToast( + mContext, + mContext.getResources().getString( + R.string.message_text_copied)); + } else { + refreshOrStop(); + } + } + return true; + } + } + return false; + } + + }); + + mSystemBrowser = getSystemBrowser(); + Thread initialize = new Thread(new Runnable() { + + @Override + public void run() { + initializeSearchSuggestions(mSearch); + } + + }); + initialize.run(); + // ActionBarDrawerToggle ties together the the proper interactions + // between the sliding drawer and the action bar app icon + mDrawerToggle = new ActionBarDrawerToggle(this, /* host Activity */ + mDrawerLayout, /* DrawerLayout object */ + R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */ + R.string.drawer_open, /* "open drawer" description for accessibility */ + R.string.drawer_close /* "close drawer" description for accessibility */ + ) { + public void onDrawerClosed(View view) { + super.onDrawerClosed(view); + if (view.equals(mDrawer)) { + mDrawerLayout.setDrawerLockMode( + DrawerLayout.LOCK_MODE_UNLOCKED, mDrawerRight); + } else if (view.equals(mDrawerRight)) { + mDrawerLayout.setDrawerLockMode( + DrawerLayout.LOCK_MODE_UNLOCKED, mDrawer); + } + } + + public void onDrawerOpened(View drawerView) { + super.onDrawerOpened(drawerView); + if (drawerView.equals(mDrawer)) { + mDrawerLayout.closeDrawer(mDrawerRight); + mDrawerLayout.setDrawerLockMode( + DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mDrawerRight); + } else if (drawerView.equals(mDrawerRight)) { + mDrawerLayout.closeDrawer(mDrawer); + mDrawerLayout.setDrawerLockMode( + DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mDrawer); + } + } + + @Override + public void onDrawerSlide(View drawerView, float slideOffset) { + super.onDrawerSlide(drawerView, slideOffset); + + } + + }; + + mNewTab.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View arg0) { + newTab(null, true); + } + + }); + + mDrawerLayout.setDrawerListener(mDrawerToggle); + + initializePreferences(); + initializeTabs(); + + if (API < 19) { + WebIconDatabase.getInstance().open( + getDir("icons", MODE_PRIVATE).getPath()); + } + } + + public synchronized void initializeTabs() { + mIdGenerator = 0; + + String url = null; + + newTab(url, true); + + } + + public static String[] getArray(String input) { + return input.split("\\|\\$\\|SEPARATOR\\|\\$\\|"); + } + + public void initializePreferences() { + if (mPreferences == null) { + mPreferences = getSharedPreferences( + PreferenceConstants.PREFERENCES, 0); + } + mFullScreen = mPreferences.getBoolean(PreferenceConstants.FULL_SCREEN, + false); + if (mPreferences.getBoolean(PreferenceConstants.HIDE_STATUS_BAR, false)) { + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + } else { + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + } + + switch (mPreferences.getInt(PreferenceConstants.SEARCH, 1)) { + case 0: + mSearchText = mPreferences.getString( + PreferenceConstants.SEARCH_URL, Constants.GOOGLE_SEARCH); + if (!mSearchText.startsWith(Constants.HTTP) + && !mSearchText.startsWith(Constants.HTTPS)) { + mSearchText = Constants.GOOGLE_SEARCH; + } + break; + case 1: + mSearchText = Constants.GOOGLE_SEARCH; + break; + case 2: + mSearchText = Constants.ANDROID_SEARCH; + break; + case 3: + mSearchText = Constants.BING_SEARCH; + break; + case 4: + mSearchText = Constants.YAHOO_SEARCH; + break; + case 5: + mSearchText = Constants.STARTPAGE_SEARCH; + break; + case 6: + mSearchText = Constants.STARTPAGE_MOBILE_SEARCH; + break; + case 7: + mSearchText = Constants.DUCK_SEARCH; + break; + case 8: + mSearchText = Constants.DUCK_LITE_SEARCH; + break; + case 9: + mSearchText = Constants.BAIDU_SEARCH; + break; + case 10: + mSearchText = Constants.YANDEX_SEARCH; + break; + } + + mCookieManager = CookieManager.getInstance(); + CookieSyncManager.createInstance(this); + mCookieManager.setAcceptCookie(mPreferences.getBoolean( + PreferenceConstants.INCOGNITO_COOKIES, true)); + + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_ENTER) { + if (mSearch.hasFocus()) { + searchTheWeb(mSearch.getText().toString()); + } + } + return super.onKeyDown(keyCode, event); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.incognito, menu); + return super.onCreateOptionsMenu(menu); + } + + /* Called whenever we call invalidateOptionsMenu() */ + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + // If the nav drawer is open, hide action items related to the content + // view + + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // The action bar home/up action should open or close the drawer. + // ActionBarDrawerToggle will take care of this. + if (mDrawerToggle.onOptionsItemSelected(item)) { + return true; + } + // Handle action buttons + switch (item.getItemId()) { + case android.R.id.home: + if (mDrawerLayout.isDrawerOpen(mDrawerRight)) { + mDrawerLayout.closeDrawer(mDrawerRight); + } + mDrawerToggle.syncState(); + return true; + case R.id.action_back: + if (mCurrentView != null) { + if (mCurrentView.canGoBack()) + mCurrentView.goBack(); + } + return true; + case R.id.action_forward: + if (mCurrentView != null) { + if (mCurrentView.canGoForward()) + mCurrentView.goForward(); + } + return true; + case R.id.action_new_tab: + newTab(null, true); + return true; + case R.id.action_incognito: + startActivity(new Intent(Constants.INCOGNITO_INTENT)); + return true; + case R.id.action_share: + if (!mCurrentView.getUrl().startsWith(Constants.FILE)) { + Intent shareIntent = new Intent( + android.content.Intent.ACTION_SEND); + shareIntent.setType("text/plain"); + shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, + mCurrentView.getTitle()); + String shareMessage = mCurrentView.getUrl(); + shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, + shareMessage); + startActivity(Intent.createChooser(shareIntent, getResources() + .getString(R.string.dialog_title_share))); + } + return true; + case R.id.action_bookmarks: + openBookmarks(); + return true; + case R.id.action_copy: + if (mCurrentView != null) { + if (!mCurrentView.getUrl().startsWith(Constants.FILE)) { + ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); + ClipData clip = ClipData.newPlainText("label", mCurrentView + .getUrl().toString()); + clipboard.setPrimaryClip(clip); + Utils.showToast(mContext, mContext.getResources() + .getString(R.string.message_link_copied)); + } + } + return true; + case R.id.action_settings: + startActivity(new Intent(Constants.SETTINGS_INTENT)); + return true; + case R.id.action_history: + openHistory(); + return true; + case R.id.action_add_bookmark: + if (!mCurrentView.getUrl().startsWith(Constants.FILE)) { + addBookmark(this, mCurrentView.getTitle(), + mCurrentView.getUrl()); + } + return true; + case R.id.action_find: + findInPage(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + /** + * refreshes the underlying list of the Bookmark adapter since the bookmark + * adapter doesn't always change when notifyDataChanged gets called. + */ + private void notifyBookmarkDataSetChanged() { + mBookmarkAdapter.clear(); + mBookmarkAdapter.addAll(mBookmarkList); + mBookmarkAdapter.notifyDataSetChanged(); + } + + /** + * method that shows a dialog asking what string the user wishes to search + * for. It highlights the text entered. + */ + private void findInPage() { + final AlertDialog.Builder finder = new AlertDialog.Builder(mActivity); + finder.setTitle(getResources().getString(R.string.action_find)); + final EditText getHome = new EditText(this); + getHome.setHint(getResources().getString(R.string.search_hint)); + finder.setView(getHome); + finder.setPositiveButton( + getResources().getString(R.string.search_hint), + new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + String text = getHome.getText().toString(); + if (mCurrentView != null) { + mCurrentView.find(text); + } + } + }); + finder.show(); + } + + /** The click listener for ListView in the navigation drawer */ + private class DrawerItemClickListener implements + ListView.OnItemClickListener { + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + mIsNewIntent = false; + selectItem(position); + } + } + + /** long click listener for Navigation Drawer */ + private class DrawerItemLongClickListener implements + ListView.OnItemLongClickListener { + @Override + public boolean onItemLongClick(AdapterView arg0, View arg1, + int position, long arg3) { + deleteTab(position); + return false; + } + } + + private class BookmarkItemClickListener implements + ListView.OnItemClickListener { + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + if (mCurrentView != null) { + mCurrentView.loadUrl(mBookmarkList.get(position).getUrl()); + } + mDrawerLayout.closeDrawer(mDrawerRight); + } + } + + private class BookmarkItemLongClickListener implements + ListView.OnItemLongClickListener { + @Override + public boolean onItemLongClick(AdapterView arg0, View arg1, + final int position, long arg3) { + + AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); + builder.setTitle(mContext.getResources().getString( + R.string.action_bookmarks)); + builder.setMessage( + getResources().getString(R.string.dialog_bookmark)) + .setCancelable(true) + .setPositiveButton( + getResources().getString(R.string.action_new_tab), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int id) { + newTab(mBookmarkList.get(position).getUrl(), + false); + mDrawerLayout.closeDrawers(); + } + }) + .setNegativeButton( + getResources().getString(R.string.action_delete), + new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, + int which) { + deleteBookmark(mBookmarkList.get(position) + .getUrl()); + } + }) + .setNeutralButton( + getResources().getString(R.string.action_edit), + new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, + int which) { + editBookmark(position); + } + }); + AlertDialog alert = builder.create(); + alert.show(); + return true; + } + } + + /** + * Takes in the id of which bookmark was selected and shows a dialog that + * allows the user to rename and change the url of the bookmark + * + * @param id + * which id in the list was chosen + */ + public synchronized void editBookmark(final int id) { + final AlertDialog.Builder homePicker = new AlertDialog.Builder( + mActivity); + homePicker.setTitle(getResources().getString( + R.string.title_edit_bookmark)); + final EditText getTitle = new EditText(mContext); + getTitle.setHint(getResources().getString(R.string.hint_title)); + getTitle.setText(mBookmarkList.get(id).getTitle()); + getTitle.setSingleLine(); + final EditText getUrl = new EditText(mContext); + getUrl.setHint(getResources().getString(R.string.hint_url)); + getUrl.setText(mBookmarkList.get(id).getUrl()); + getUrl.setSingleLine(); + LinearLayout layout = new LinearLayout(mContext); + layout.setOrientation(LinearLayout.VERTICAL); + layout.addView(getTitle); + layout.addView(getUrl); + homePicker.setView(layout); + homePicker.setPositiveButton( + getResources().getString(R.string.action_ok), + new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + mBookmarkList.get(id).setTitle( + getTitle.getText().toString()); + mBookmarkList.get(id).setUrl( + getUrl.getText().toString()); + notifyBookmarkDataSetChanged(); + File book = new File(getFilesDir(), "bookmarks"); + File bookUrl = new File(getFilesDir(), "bookurl"); + try { + BufferedWriter bookWriter = new BufferedWriter( + new FileWriter(book)); + BufferedWriter urlWriter = new BufferedWriter( + new FileWriter(bookUrl)); + Iterator iter = mBookmarkList + .iterator(); + HistoryItem item; + while (iter.hasNext()) { + item = iter.next(); + + bookWriter.write(item.getTitle()); + urlWriter.write(item.getUrl()); + bookWriter.newLine(); + urlWriter.newLine(); + + } + + bookWriter.close(); + urlWriter.close(); + } catch (FileNotFoundException e) { + } catch (IOException e) { + } + notifyBookmarkDataSetChanged(); + } + }); + homePicker.show(); + + } + + /** + * displays the WebView contained in the LightningView Also handles the + * removal of previous views + * + * @param view + * the LightningView to show + */ + private synchronized void showTab(LightningView view) { + if (view == null) { + return; + } + if (mCurrentView != null) { + mCurrentView.onPause(); + } + mCurrentView = view; + + if (view.getWebView() != null) { + updateUrl(view.getUrl()); + updateProgress(view.getProgress()); + } else { + updateUrl(""); + updateProgress(0); + } + + mBrowserFrame.removeAllViews(); + mCurrentView.onResume(); + mBrowserFrame.addView(view.getWebView()); + } + + /** + * creates a new tab with the passed in URL if it isn't null + */ + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + if (mCurrentView == null) { + initialize(); + } + + String url = null; + if (intent != null) { + url = intent.getDataString(); + } + int num = 0; + if (intent != null && intent.getExtras() != null) + num = intent.getExtras().getInt(getPackageName() + ".Origin"); + if (num == 1) { + mCurrentView.loadUrl(url); + } else if (url != null) { + url = null; + newTab(url, true); + mIsNewIntent = true; + } + } + + private void selectItem(int position) { + // update selected item and title, then close the drawer + + mDrawerList.setItemChecked(position, true); + showTab(mWebViews.get(position)); + + mDrawerLayout.closeDrawer(mDrawer); + } + + /** + * When using the ActionBarDrawerToggle, you must call it during + * onPostCreate() and onConfigurationChanged()... + */ + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + // Sync the toggle state after onRestoreInstanceState has occurred. + mDrawerToggle.syncState(); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + // Pass any configuration change to the drawer toggls + mDrawerToggle.onConfigurationChanged(newConfig); + } + + private synchronized void newTab(String url, boolean show) { + mIsNewIntent = false; + LightningView startingTab = new LightningView(mActivity, url); + if (mIdGenerator == 0) { + startingTab.resumeTimers(); + } + mIdList.add(mIdGenerator); + mIdGenerator++; + mWebViews.add(startingTab); + + Drawable icon = writeOnDrawable(mWebViews.size()); + mActionBar.setIcon(icon); + mTitleAdapter.notifyDataSetChanged(); + if (show) { + mDrawerList.setItemChecked(mWebViews.size() - 1, true); + showTab(startingTab); + } + } + + private synchronized void deleteTab(int position) { + if (position >= mWebViews.size()) { + return; + } + + int current = mDrawerList.getCheckedItemPosition(); + LightningView reference = mWebViews.get(position); + if (reference == null) { + return; + } + boolean isShown = reference.isShown(); + if (current > position) { + mIdList.remove(position); + mWebViews.remove(position); + mDrawerList.setItemChecked(current - 1, true); + reference.onDestroy(); + } else if (mWebViews.size() > position + 1) { + mIdList.remove(position); + showTab(mWebViews.get(position + 1)); + mWebViews.remove(position); + mDrawerList.setItemChecked(position, true); + reference.onDestroy(); + } else if (mWebViews.size() > 1) { + mIdList.remove(position); + showTab(mWebViews.get(position - 1)); + mWebViews.remove(position); + mDrawerList.setItemChecked(position - 1, true); + reference.onDestroy(); + } else { + if (mCurrentView.getUrl().startsWith(Constants.FILE) + || mCurrentView.getUrl().equals(mHomepage)) { + finish(); + } else { + mIdList.remove(position); + mWebViews.remove(position); + if (mPreferences.getBoolean( + PreferenceConstants.CLEAR_CACHE_EXIT, false) + && mCurrentView != null) { + mCurrentView.clearCache(true); + Log.i("Lightning", "Cache Cleared"); + + } + if (reference != null) { + reference.pauseTimers(); + reference.onDestroy(); + } + mCurrentView = null; + mTitleAdapter.notifyDataSetChanged(); + finish(); + + } + } + mTitleAdapter.notifyDataSetChanged(); + Drawable icon = writeOnDrawable(mWebViews.size()); + mActionBar.setIcon(icon); + + if (mIsNewIntent && isShown) { + mIsNewIntent = false; + finish(); + } + + Log.i("Lightning", "deleted tab"); + } + + @Override + public boolean onKeyLongPress(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) { + if (mPreferences.getBoolean(PreferenceConstants.CLEAR_CACHE_EXIT, + false) && mCurrentView != null) { + mCurrentView.clearCache(true); + Log.i("Lightning", "Cache Cleared"); + + } + mCurrentView = null; + for (int n = 0; n < mWebViews.size(); n++) { + if (mWebViews.get(n) != null) + mWebViews.get(n).onDestroy(); + } + mWebViews.clear(); + mTitleAdapter.notifyDataSetChanged(); + finish(); + } + return true; + } + + @Override + public void onBackPressed() { + if (!mActionBar.isShowing()) { + mActionBar.show(); + } + if (mDrawerLayout.isDrawerOpen(mDrawer)) { + mDrawerLayout.closeDrawer(mDrawer); + } else if (mDrawerLayout.isDrawerOpen(mDrawerRight)) { + mDrawerLayout.closeDrawer(mDrawerRight); + } else { + if (mCurrentView != null) { + Log.i("Lightning", "onBackPressed"); + if (mCurrentView.canGoBack()) { + if (!mCurrentView.isShown()) { + onHideCustomView(); + } else { + mCurrentView.goBack(); + } + } else { + deleteTab(mDrawerList.getCheckedItemPosition()); + } + } else { + Log.e("Lightning Browser", + "So madness. Much confusion. Why happen."); + super.onBackPressed(); + } + } + } + + @Override + protected void onPause() { + super.onPause(); + Log.i("Lightning", "onPause"); + if (mCurrentView != null) { + mCurrentView.pauseTimers(); + mCurrentView.onPause(); + } + if (mHistoryDatabase != null) { + if (mHistoryDatabase.isOpen()) + mHistoryDatabase.close(); + } + if (mHistoryHandler != null) { + if (mHistoryHandler.isOpen()) + mHistoryHandler.close(); + } + } + + @Override + protected void onDestroy() { + Log.i("Lightning", "onDestroy"); + if (mHistoryDatabase != null) { + if (mHistoryDatabase.isOpen()) + mHistoryDatabase.close(); + } + if (mHistoryHandler != null) { + if (mHistoryHandler.isOpen()) + mHistoryHandler.close(); + } + super.onDestroy(); + } + + @Override + protected void onPostResume() { + Log.i("Lightning", "onPostResume"); + super.onPostResume(); + } + + @Override + protected void onRestart() { + Log.i("Lightning", "onRestart"); + super.onRestart(); + } + + @Override + protected void onStart() { + Log.i("Lightning", "onStart"); + super.onStart(); + } + + @Override + protected void onStop() { + Log.i("Lightning", "onStop"); + super.onStop(); + } + + @Override + protected void onResume() { + super.onResume(); + Log.i("Lightning", "onResume"); + if (SettingsController.getClearHistory()) { + } + if (mSearchAdapter != null) { + mSearchAdapter.refreshPreferences(); + mSearchAdapter.refreshBookmarks(); + } + if (mActionBar != null) { + if (!mActionBar.isShowing()) { + mActionBar.show(); + } + } + if (mCurrentView != null) { + mCurrentView.resumeTimers(); + mCurrentView.onResume(); + + if (mHistoryHandler == null) { + mHistoryHandler = new DatabaseHandler(this); + } else if (!mHistoryHandler.isOpen()) { + mHistoryHandler = new DatabaseHandler(this); + } + mHistoryDatabase = mHistoryHandler.getReadableDatabase(); + mBookmarkList = getBookmarks(); + notifyBookmarkDataSetChanged(); + } else { + initialize(); + } + initializePreferences(); + if (mWebViews != null) { + for (int n = 0; n < mWebViews.size(); n++) { + if (mWebViews.get(n) != null) { + mWebViews.get(n).initializePreferences(this); + } else { + mWebViews.remove(n); + } + } + } else { + initialize(); + } + } + + /** + * searches the web for the query fixing any and all problems with the input + * checks if it is a search, url, etc. + */ + void searchTheWeb(String query) { + if (query.equals("")) { + return; + } + String SEARCH = mSearchText; + query = query.trim(); + mCurrentView.stopLoading(); + + if (query.startsWith("www.")) { + query = Constants.HTTP + query; + } else if (query.startsWith("ftp.")) { + query = "ftp://" + query; + } + + boolean containsPeriod = query.contains("."); + boolean isIPAddress = (TextUtils.isDigitsOnly(query.replace(".", "")) + && (query.replace(".", "").length() >= 4) && query + .contains(".")); + boolean aboutScheme = query.contains("about:"); + boolean validURL = (query.startsWith("ftp://") + || query.startsWith(Constants.HTTP) + || query.startsWith(Constants.FILE) || query + .startsWith(Constants.HTTPS)) || isIPAddress; + boolean isSearch = ((query.contains(" ") || !containsPeriod) && !aboutScheme); + + if (isIPAddress + && (!query.startsWith(Constants.HTTP) || !query + .startsWith(Constants.HTTPS))) { + query = Constants.HTTP + query; + } + + if (isSearch) { + try { + URLEncoder.encode(query, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + mCurrentView.loadUrl(SEARCH + query); + } else if (!validURL) { + mCurrentView.loadUrl(Constants.HTTP + query); + } else { + mCurrentView.loadUrl(query); + } + } + + public void deleteBookmark(String url) { + File book = new File(getFilesDir(), "bookmarks"); + File bookUrl = new File(getFilesDir(), "bookurl"); + try { + BufferedWriter bookWriter = new BufferedWriter(new FileWriter(book)); + BufferedWriter urlWriter = new BufferedWriter(new FileWriter( + bookUrl)); + Iterator iter = mBookmarkList.iterator(); + HistoryItem item; + int num = 0; + int deleteIndex = -1; + while (iter.hasNext()) { + item = iter.next(); + if (!item.getUrl().equalsIgnoreCase(url)) { + bookWriter.write(item.getTitle()); + urlWriter.write(item.getUrl()); + bookWriter.newLine(); + urlWriter.newLine(); + } else { + deleteIndex = num; + } + num++; + } + if (deleteIndex != -1) { + mBookmarkList.remove(deleteIndex); + } + bookWriter.close(); + urlWriter.close(); + } catch (FileNotFoundException e) { + } catch (IOException e) { + } + notifyBookmarkDataSetChanged(); + mSearchAdapter.refreshBookmarks(); + openBookmarks(); + } + + /** + * converts the int num into density pixels + * + * @param num + * @return density pixels + */ + private int getDp(int num) { + float scale = getResources().getDisplayMetrics().density; + return (int) (num * scale + 0.5f); + } + + private int pixelsToDp(int num) { + float scale = getResources().getDisplayMetrics().density; + return (int) ((num - 0.5f) / scale); + } + + /** + * writes the number of open tabs on the icon. + */ + public BitmapDrawable writeOnDrawable(int number) { + + return mIncognitoIcon; + } + + public class LightningViewAdapter extends ArrayAdapter { + + Context context; + int layoutResourceId; + List data = null; + + public LightningViewAdapter(Context context, int layoutResourceId, + List data) { + super(context, layoutResourceId, data); + this.layoutResourceId = layoutResourceId; + this.context = context; + this.data = data; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View row = convertView; + LightningViewHolder holder = null; + + if (row == null) { + LayoutInflater inflater = ((Activity) context) + .getLayoutInflater(); + row = inflater.inflate(layoutResourceId, parent, false); + + holder = new LightningViewHolder(); + holder.txtTitle = (TextView) row.findViewById(R.id.text1); + holder.favicon = (ImageView) row.findViewById(R.id.favicon1); + holder.exit = (ImageView) row.findViewById(R.id.delete1); + holder.exit.setTag(position); + row.setTag(holder); + } else { + holder = (LightningViewHolder) row.getTag(); + } + + holder.exit.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View view) { + Integer index = (Integer) view.getTag(); + deleteTab(index); + } + + }); + + LightningView web = data.get(position); + holder.txtTitle.setText(web.getTitle()); + Bitmap favicon = web.getFavicon(); + holder.favicon.setImageBitmap(favicon); + return row; + } + + class LightningViewHolder { + TextView txtTitle; + ImageView favicon; + ImageView exit; + } + } + + public class BookmarkViewAdapter extends ArrayAdapter { + + Context context; + int layoutResourceId; + List data = null; + + public BookmarkViewAdapter(Context context, int layoutResourceId, + List data) { + super(context, layoutResourceId, data); + this.layoutResourceId = layoutResourceId; + this.context = context; + this.data = data; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View row = convertView; + BookmarkViewHolder holder = null; + + if (row == null) { + LayoutInflater inflater = ((Activity) context) + .getLayoutInflater(); + row = inflater.inflate(layoutResourceId, parent, false); + + holder = new BookmarkViewHolder(); + holder.txtTitle = (TextView) row.findViewById(R.id.text1); + holder.favicon = (ImageView) row.findViewById(R.id.favicon1); + row.setTag(holder); + } else { + holder = (BookmarkViewHolder) row.getTag(); + } + + HistoryItem web = data.get(position); + holder.txtTitle.setText(web.getTitle()); + holder.favicon.setImageBitmap(mWebpageBitmap); + if (web.getBitmap() == null) { + getImage(holder.favicon, web); + } else { + holder.favicon.setImageBitmap(web.getBitmap()); + } + return row; + } + + class BookmarkViewHolder { + TextView txtTitle; + ImageView favicon; + } + } + + public void getImage(ImageView image, HistoryItem web) { + try { + new DownloadImageTask(image, web).execute(Constants.HTTP + + getDomainName(web.getUrl()) + "/favicon.ico"); + } catch (URISyntaxException e) { + new DownloadImageTask(image, web) + .execute("https://www.google.com/s2/favicons?domain_url=" + + web.getUrl()); + e.printStackTrace(); + } + } + + private class DownloadImageTask extends AsyncTask { + ImageView bmImage; + HistoryItem mWeb; + + public DownloadImageTask(ImageView bmImage, HistoryItem web) { + this.bmImage = bmImage; + this.mWeb = web; + } + + protected Bitmap doInBackground(String... urls) { + String urldisplay = urls[0]; + Bitmap mIcon = null; + // unique path for each url that is bookmarked. + String hash = String.valueOf(urldisplay.hashCode()); + File image = new File(mContext.getCacheDir(), hash + ".png"); + // checks to see if the image exists + if (!image.exists()) { + try { + // if not, download it... + InputStream in = new java.net.URL(urldisplay).openStream(); + + if (in != null) { + mIcon = BitmapFactory.decodeStream(in); + } + // ...and cache it + if (mIcon != null) { + FileOutputStream fos = new FileOutputStream(image); + mIcon.compress(Bitmap.CompressFormat.PNG, 85, fos); + fos.flush(); + fos.close(); + } + + } catch (Exception e) { + } + } else { + // if it exists, retrieve it from the cache + mIcon = BitmapFactory.decodeFile(image.getPath()); + } + if (mIcon == null) { + try { + // if not, download it... + InputStream in = new java.net.URL( + "https://www.google.com/s2/favicons?domain_url=" + + urldisplay).openStream(); + + if (in != null) { + mIcon = BitmapFactory.decodeStream(in); + } + // ...and cache it + if (mIcon != null) { + FileOutputStream fos = new FileOutputStream(image); + mIcon.compress(Bitmap.CompressFormat.PNG, 85, fos); + fos.flush(); + fos.close(); + } + + } catch (Exception e) { + } + } + if (mIcon == null) { + return mWebpageBitmap; + } else { + return mIcon; + } + } + + protected void onPostExecute(Bitmap result) { + bmImage.setImageBitmap(result); + mWeb.setBitmap(result); + notifyBookmarkDataSetChanged(); + } + } + + public static String getDomainName(String url) throws URISyntaxException { + URI uri = new URI(url); + String domain = uri.getHost(); + if (domain == null) { + return url; + } + return domain.startsWith("www.") ? domain.substring(4) : domain; + } + + @Override + public void updateUrl(String url) { + if (url == null) + return; + url = url.replaceFirst(Constants.HTTP, ""); + if (url.startsWith(Constants.FILE)) { + url = ""; + } + + mSearch.setText(url); + } + + @Override + public void updateProgress(int n) { + if (!mProgress.isShown()) + mProgress.setVisibility(View.VISIBLE); + mProgress.setProgress(n); + if (n == 100) { + mProgress.setVisibility(View.INVISIBLE); + setIsFinishedLoading(); + } else { + setIsLoading(); + } + } + + @Override + public void updateHistory(final String title, final String url) { + + } + + /** + * 1, 2, 3, testing... is there a system browser that has some nice + * bookmarks for us? + */ + public boolean isSystemBrowserAvailable() { + return mSystemBrowser; + } + + /** + * 1, 2, 3, testing... is there a system browser that has some nice + * bookmarks for us? helper method for isSystemBrowserAvailable + */ + public boolean getSystemBrowser() { + Cursor c = null; + String[] columns = new String[] { "url", "title" }; + boolean browserFlag = false; + try { + + Uri bookmarks = Browser.BOOKMARKS_URI; + c = getContentResolver() + .query(bookmarks, columns, null, null, null); + } catch (SQLiteException ignored) { + } catch (IllegalStateException ignored) { + } catch (NullPointerException ignored) { + } + + if (c != null) { + Log.i("Browser", "System Browser Available"); + browserFlag = true; + } else { + Log.e("Browser", "System Browser Unavailable"); + browserFlag = false; + } + if (c != null) { + c.close(); + c = null; + } + mEditPrefs.putBoolean("SystemBrowser", browserFlag); + mEditPrefs.commit(); + return browserFlag; + } + + /** + * method to generate search suggestions for the AutoCompleteTextView from + * previously searched URLs + */ + private void initializeSearchSuggestions(final AutoCompleteTextView getUrl) { + + getUrl.setThreshold(1); + getUrl.setDropDownWidth(-1); + getUrl.setDropDownAnchor(R.id.progressWrapper); + getUrl.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, + long arg3) { + try { + String url; + url = ((TextView) arg1.findViewById(R.id.url)).getText() + .toString(); + if (url.startsWith(mContext.getString(R.string.suggestion))) { + url = ((TextView) arg1.findViewById(R.id.title)) + .getText().toString(); + } else { + getUrl.setText(url); + } + searchTheWeb(url); + url = null; + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(getUrl.getWindowToken(), 0); + if (mCurrentView != null) { + mCurrentView.requestFocus(); + } + } catch (NullPointerException e) { + Log.e("Browser Error: ", + "NullPointerException on item click"); + } + } + + }); + + getUrl.setSelectAllOnFocus(true); + mSearchAdapter = new SearchAdapter(mContext, true); + getUrl.setAdapter(mSearchAdapter); + } + + /** + * returns a list of bookmarks in the style (Title, Url) that is useful. the + * boolean addStarChar just adds an ASCII star character to each title if + * you want, primarily for use in search suggestions where the star + * indicates that it is a bookmarked url. All other uses can just supply + * false to this method. + */ + private List getBookmarks() { + List bookmarks = new ArrayList(); + File bookUrl = new File(getApplicationContext().getFilesDir(), + "bookurl"); + File book = new File(getApplicationContext().getFilesDir(), "bookmarks"); + try { + BufferedReader readUrl = new BufferedReader(new FileReader(bookUrl)); + BufferedReader readBook = new BufferedReader(new FileReader(book)); + String u, t; + while ((u = readUrl.readLine()) != null + && (t = readBook.readLine()) != null) { + HistoryItem map = new HistoryItem(u, t); + bookmarks.add(map); + } + readBook.close(); + readUrl.close(); + } catch (FileNotFoundException ignored) { + } catch (IOException ignored) { + } + Collections.sort(bookmarks); + return bookmarks; + } + + /** + * returns a list of HistoryItems + * + * @return + */ + private List getLatestHistory() { + DatabaseHandler historyHandler = new DatabaseHandler(mContext); + return historyHandler.getLastHundredItems(); + } + + /** + * function that opens the HTML history page in the browser + */ + private void openHistory() { + + Thread history = new Thread(new Runnable() { + + @Override + public void run() { + String historyHtml = HistoryPageVariables.Heading; + List historyList = getLatestHistory(); + Iterator it = historyList.iterator(); + HistoryItem helper; + while (it.hasNext()) { + helper = it.next(); + historyHtml += HistoryPageVariables.Part1 + helper.getUrl() + + HistoryPageVariables.Part2 + helper.getTitle() + + HistoryPageVariables.Part3 + helper.getUrl() + + HistoryPageVariables.Part4; + } + + historyHtml += HistoryPageVariables.End; + File historyWebPage = new File(getFilesDir(), "history.html"); + try { + FileWriter hWriter = new FileWriter(historyWebPage, false); + hWriter.write(historyHtml); + hWriter.close(); + } catch (IOException e) { + e.printStackTrace(); + } + mCurrentView.loadUrl(Constants.FILE + historyWebPage); + mSearch.setText(""); + } + + }); + history.run(); + } + + /** + * helper function that opens the bookmark drawer + */ + private void openBookmarks() { + if (mDrawerLayout.isDrawerOpen(mDrawer)) { + mDrawerLayout.closeDrawers(); + } + mDrawerToggle.syncState(); + mDrawerLayout.openDrawer(mDrawerRight); + } + + @Override + /** + * open the HTML bookmarks page, parameter view is the WebView that should show the page + */ + public void openBookmarkPage(WebView view) { + String bookmarkHtml = BookmarkPageVariables.Heading; + Iterator iter = mBookmarkList.iterator(); + HistoryItem helper; + while (iter.hasNext()) { + helper = iter.next(); + bookmarkHtml += (BookmarkPageVariables.Part1 + helper.getUrl() + + BookmarkPageVariables.Part2 + helper.getUrl() + + BookmarkPageVariables.Part3 + helper.getTitle() + BookmarkPageVariables.Part4); + } + bookmarkHtml += BookmarkPageVariables.End; + File bookmarkWebPage = new File(mContext.getCacheDir(), + "bookmarks.html"); + try { + FileWriter bookWriter = new FileWriter(bookmarkWebPage, false); + bookWriter.write(bookmarkHtml); + bookWriter.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + view.loadUrl(Constants.FILE + bookmarkWebPage); + } + + /** + * adds a bookmark with a title and url. Simple. + */ + public void addBookmark(Context context, String title, String url) { + File book = new File(context.getFilesDir(), "bookmarks"); + File bookUrl = new File(context.getFilesDir(), "bookurl"); + HistoryItem bookmark = new HistoryItem(url, title); + + try { + BufferedReader readUrlRead = new BufferedReader(new FileReader( + bookUrl)); + String u; + while ((u = readUrlRead.readLine()) != null) { + if (u.contentEquals(url)) { + readUrlRead.close(); + return; + } + } + readUrlRead.close(); + + } catch (FileNotFoundException ignored) { + } catch (IOException ignored) { + } catch (NullPointerException ignored) { + } + try { + BufferedWriter bookWriter = new BufferedWriter(new FileWriter(book, + true)); + BufferedWriter urlWriter = new BufferedWriter(new FileWriter( + bookUrl, true)); + bookWriter.write(title); + urlWriter.write(url); + bookWriter.newLine(); + urlWriter.newLine(); + bookWriter.close(); + urlWriter.close(); + mBookmarkList.add(bookmark); + Collections.sort(mBookmarkList); + notifyBookmarkDataSetChanged(); + } catch (FileNotFoundException ignored) { + } catch (IOException ignored) { + } catch (NullPointerException ignored) { + } + mSearchAdapter.refreshBookmarks(); + } + + @Override + public void update() { + mTitleAdapter.notifyDataSetChanged(); + } + + @Override + /** + * opens a file chooser + * param ValueCallback is the message from the WebView indicating a file chooser + * should be opened + */ + public void openFileChooser(ValueCallback uploadMsg) { + mUploadMessage = uploadMsg; + Intent i = new Intent(Intent.ACTION_GET_CONTENT); + i.addCategory(Intent.CATEGORY_OPENABLE); + i.setType("*/*"); + startActivityForResult(Intent.createChooser(i, "File Chooser"), 1); + } + + @Override + /** + * used to allow uploading into the browser, doesn't get called in KitKat :( + */ + protected void onActivityResult(int requestCode, int resultCode, + Intent intent) { + if (requestCode == 1) { + if (null == mUploadMessage) + return; + Uri result = intent == null || resultCode != RESULT_OK ? null + : intent.getData(); + mUploadMessage.onReceiveValue(result); + mUploadMessage = null; + + } + } + + @Override + /** + * handles long presses for the browser, tries to get the + * url of the item that was clicked and sends it (it can be null) + * to the click handler that does cool stuff with it + */ + public void onLongPress() { + if (mClickHandler == null) { + mClickHandler = new ClickHandler(mContext); + } + Message click = mClickHandler.obtainMessage(); + if (click != null) { + click.setTarget(mClickHandler); + } + mCurrentView.getWebView().requestFocusNodeHref(click); + } + + @Override + public void onShowCustomView(View view, int requestedOrientation, + CustomViewCallback callback) { + if (view == null) { + return; + } + if (mCustomView != null && callback != null) { + callback.onCustomViewHidden(); + return; + } + view.setKeepScreenOn(true); + mOriginalOrientation = getRequestedOrientation(); + FrameLayout decor = (FrameLayout) getWindow().getDecorView(); + mFullscreenContainer = new FullscreenHolder(this); + mCustomView = view; + mFullscreenContainer.addView(mCustomView, COVER_SCREEN_PARAMS); + decor.addView(mFullscreenContainer, COVER_SCREEN_PARAMS); + setFullscreen(true); + mCurrentView.setVisibility(View.GONE); + if (view instanceof FrameLayout) { + if (((FrameLayout) view).getFocusedChild() instanceof VideoView) { + mVideoView = (VideoView) ((FrameLayout) view).getFocusedChild(); + mVideoView.setOnErrorListener(new VideoCompletionListener()); + mVideoView + .setOnCompletionListener(new VideoCompletionListener()); + } + } + mCustomViewCallback = callback; + } + + @Override + public void onHideCustomView() { + if (mCustomView == null || mCustomViewCallback == null + || mCurrentView == null) + return; + Log.i("Lightning", "onHideCustomView"); + mCurrentView.setVisibility(View.VISIBLE); + mCustomView.setKeepScreenOn(false); + setFullscreen(mPreferences.getBoolean("hidestatus", false)); + FrameLayout decor = (FrameLayout) getWindow().getDecorView(); + if (decor != null) { + decor.removeView(mFullscreenContainer); + } + + if (API < 19) { + try { + mCustomViewCallback.onCustomViewHidden(); + } catch (Throwable ignored) { + + } + } + mFullscreenContainer = null; + mCustomView = null; + if (mVideoView != null) { + mVideoView.setOnErrorListener(null); + mVideoView.setOnCompletionListener(null); + mVideoView = null; + } + setRequestedOrientation(mOriginalOrientation); + } + + private class VideoCompletionListener implements + MediaPlayer.OnCompletionListener, MediaPlayer.OnErrorListener { + + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + return false; + } + + @Override + public void onCompletion(MediaPlayer mp) { + onHideCustomView(); + } + + } + + /** + * turns on fullscreen mode in the app + * + * @param enabled + * whether to enable fullscreen or not + */ + public void setFullscreen(boolean enabled) { + Window win = getWindow(); + WindowManager.LayoutParams winParams = win.getAttributes(); + final int bits = WindowManager.LayoutParams.FLAG_FULLSCREEN; + if (enabled) { + winParams.flags |= bits; + } else { + winParams.flags &= ~bits; + if (mCustomView != null) { + mCustomView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); + } else { + mBrowserFrame + .setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); + } + } + win.setAttributes(winParams); + } + + /** + * a class extending FramLayout used to display fullscreen videos + */ + static class FullscreenHolder extends FrameLayout { + + public FullscreenHolder(Context ctx) { + super(ctx); + setBackgroundColor(ctx.getResources().getColor( + android.R.color.black)); + } + + @Override + public boolean onTouchEvent(MotionEvent evt) { + return true; + } + + } + + @Override + /** + * a stupid method that returns the bitmap image to display in place of + * a loading video + */ + public Bitmap getDefaultVideoPoster() { + if (mDefaultVideoPoster == null) { + mDefaultVideoPoster = BitmapFactory.decodeResource(getResources(), + android.R.drawable.ic_media_play); + } + return mDefaultVideoPoster; + } + + @Override + /** + * dumb method that returns the loading progress for a video + */ + public View getVideoLoadingProgressView() { + if (mVideoProgressView == null) { + LayoutInflater inflater = LayoutInflater.from(this); + mVideoProgressView = inflater.inflate( + R.layout.video_loading_progress, null); + } + return mVideoProgressView; + } + + @Override + /** + * handles javascript requests to create a new window in the browser + */ + public void onCreateWindow(boolean isUserGesture, Message resultMsg) { + if (resultMsg == null) { + return; + } + newTab("", true); + WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; + transport.setWebView(mCurrentView.getWebView()); + resultMsg.sendToTarget(); + } + + @Override + /** + * returns the Activity instance for this activity, + * very helpful when creating things in other classes... I think + */ + public Activity getActivity() { + return mActivity; + } + + /** + * it hides the action bar, seriously what else were you expecting + */ + @Override + public void hideActionBar() { + if (mActionBar.isShowing() && mFullScreen) { + mActionBar.hide(); + } + } + + @Override + /** + * obviously it shows the action bar if it's hidden + */ + public void showActionBar() { + if (!mActionBar.isShowing() && mFullScreen) { + mActionBar.show(); + } + } + + @Override + /** + * handles a long click on the page, parameter String url + * is the url that should have been obtained from the WebView touch node + * thingy, if it is null, this method tries to deal with it and find a workaround + */ + public void longClickPage(final String url) { + HitTestResult result = null; + if (mCurrentView.getWebView() != null) { + result = mCurrentView.getWebView().getHitTestResult(); + } + if (url != null) { + if (url != null) { + if (result != null) { + if (result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE + || result.getType() == HitTestResult.IMAGE_TYPE) { + DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: { + newTab(url, false); + break; + } + case DialogInterface.BUTTON_NEGATIVE: { + mCurrentView.loadUrl(url); + break; + } + case DialogInterface.BUTTON_NEUTRAL: { + if (API > 8) { + Utils.downloadFile(mActivity, url, + mCurrentView.getUserAgent(), + "attachment", false); + } + break; + } + } + } + }; + + AlertDialog.Builder builder = new AlertDialog.Builder( + mActivity); // dialog + builder.setTitle(url.replace(Constants.HTTP, "")) + .setMessage( + getResources().getString( + R.string.dialog_image)) + .setPositiveButton( + getResources().getString( + R.string.action_new_tab), + dialogClickListener) + .setNegativeButton( + getResources().getString( + R.string.action_open), + dialogClickListener) + .setNeutralButton( + getResources().getString( + R.string.action_download), + dialogClickListener).show(); + + } else { + DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: { + newTab(url, false); + break; + } + case DialogInterface.BUTTON_NEGATIVE: { + mCurrentView.loadUrl(url); + break; + } + case DialogInterface.BUTTON_NEUTRAL: { + ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); + ClipData clip = ClipData.newPlainText( + "label", url); + clipboard.setPrimaryClip(clip); + + break; + } + } + } + }; + + AlertDialog.Builder builder = new AlertDialog.Builder( + mActivity); // dialog + builder.setTitle(url) + .setMessage( + getResources().getString( + R.string.dialog_link)) + .setPositiveButton( + getResources().getString( + R.string.action_new_tab), + dialogClickListener) + .setNegativeButton( + getResources().getString( + R.string.action_open), + dialogClickListener) + .setNeutralButton( + getResources().getString( + R.string.action_copy), + dialogClickListener).show(); + } + } else { + DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: { + newTab(url, false); + break; + } + case DialogInterface.BUTTON_NEGATIVE: { + mCurrentView.loadUrl(url); + break; + } + case DialogInterface.BUTTON_NEUTRAL: { + ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); + ClipData clip = ClipData.newPlainText("label", + url); + clipboard.setPrimaryClip(clip); + + break; + } + } + } + }; + + AlertDialog.Builder builder = new AlertDialog.Builder( + mActivity); // dialog + builder.setTitle(url) + .setMessage( + getResources().getString( + R.string.dialog_link)) + .setPositiveButton( + getResources().getString( + R.string.action_new_tab), + dialogClickListener) + .setNegativeButton( + getResources().getString( + R.string.action_open), + dialogClickListener) + .setNeutralButton( + getResources().getString( + R.string.action_copy), + dialogClickListener).show(); + } + } + } else if (result != null) { + if (result.getExtra() != null) { + final String newUrl = result.getExtra(); + if (result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE + || result.getType() == HitTestResult.IMAGE_TYPE) { + DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: { + newTab(newUrl, false); + break; + } + case DialogInterface.BUTTON_NEGATIVE: { + mCurrentView.loadUrl(newUrl); + break; + } + case DialogInterface.BUTTON_NEUTRAL: { + if (API > 8) { + Utils.downloadFile(mActivity, newUrl, + mCurrentView.getUserAgent(), + "attachment", false); + } + break; + } + } + } + }; + + AlertDialog.Builder builder = new AlertDialog.Builder( + mActivity); // dialog + builder.setTitle(newUrl.replace(Constants.HTTP, "")) + .setMessage( + getResources().getString( + R.string.dialog_image)) + .setPositiveButton( + getResources().getString( + R.string.action_new_tab), + dialogClickListener) + .setNegativeButton( + getResources().getString( + R.string.action_open), + dialogClickListener) + .setNeutralButton( + getResources().getString( + R.string.action_download), + dialogClickListener).show(); + + } else { + DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: { + newTab(newUrl, false); + break; + } + case DialogInterface.BUTTON_NEGATIVE: { + mCurrentView.loadUrl(newUrl); + break; + } + case DialogInterface.BUTTON_NEUTRAL: { + ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); + ClipData clip = ClipData.newPlainText("label", + newUrl); + clipboard.setPrimaryClip(clip); + + break; + } + } + } + }; + + AlertDialog.Builder builder = new AlertDialog.Builder( + mActivity); // dialog + builder.setTitle(newUrl) + .setMessage( + getResources().getString( + R.string.dialog_link)) + .setPositiveButton( + getResources().getString( + R.string.action_new_tab), + dialogClickListener) + .setNegativeButton( + getResources().getString( + R.string.action_open), + dialogClickListener) + .setNeutralButton( + getResources().getString( + R.string.action_copy), + dialogClickListener).show(); + } + + } + + } + + } + + /** + * This method lets the search bar know that the page is currently loading + * and that it should display the stop icon to indicate to the user that + * pressing it stops the page from loading + */ + public void setIsLoading() { + if (!mSearch.hasFocus()) { + mIcon = mDeleteIcon; + mSearch.setCompoundDrawables(null, null, mDeleteIcon, null); + } + } + + /** + * This tells the search bar that the page is finished loading and it should + * display the refresh icon + */ + public void setIsFinishedLoading() { + if (!mSearch.hasFocus()) { + mIcon = mRefreshIcon; + mSearch.setCompoundDrawables(null, null, mRefreshIcon, null); + } + } + + /** + * handle presses on the refresh icon in the search bar, if the page is + * loading, stop the page, if it is done loading refresh the page. + * + * See setIsFinishedLoading and setIsLoading for displaying the correct icon + */ + public void refreshOrStop() { + if (mCurrentView != null) { + if (mCurrentView.getProgress() < 100) { + mCurrentView.stopLoading(); + } else { + mCurrentView.reload(); + } + } + } + + @Override + public boolean isActionBarShowing() { + if (mActionBar != null) { + return mActionBar.isShowing(); + } else { + return false; + } + } + +} \ No newline at end of file diff --git a/src/acr/browser/lightning/LicenseActivity.java b/src/acr/browser/lightning/LicenseActivity.java new file mode 100644 index 0000000..8541c0a --- /dev/null +++ b/src/acr/browser/lightning/LicenseActivity.java @@ -0,0 +1,71 @@ +/* + * Copyright 2014 A.C.R. Development + */ +package acr.browser.lightning; + +import android.app.Activity; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.view.MenuItem; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.LinearLayout; + +/* + *NOTE: This activity must not be removed in order to comply with the Mozilla Public License v. 2.0 + *under which this code is licensed. Unless you plan on providing other attribution in the app to + *the original source in another visible way, it is advised against the removal of this Activity. + */ +public class LicenseActivity extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.license_activity); + getActionBar().setHomeButtonEnabled(true); + getActionBar().setDisplayHomeAsUpEnabled(true); + LinearLayout thunder = (LinearLayout) findViewById(R.id.browserLicense); + LinearLayout aosp = (LinearLayout) findViewById(R.id.licenseAOSP); + LinearLayout hosts = (LinearLayout) findViewById(R.id.licenseHosts); + thunder.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(Intent.ACTION_VIEW, Uri + .parse("http://www.mozilla.org/MPL/2.0/"))); + finish(); + } + + }); + aosp.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(Intent.ACTION_VIEW, Uri + .parse("http://www.apache.org/licenses/LICENSE-2.0"))); + finish(); + } + + }); + + hosts.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(Intent.ACTION_VIEW, Uri + .parse("http://hosts-file.net/"))); + finish(); + } + + }); + + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + finish(); + return super.onOptionsItemSelected(item); + } + +} diff --git a/src/acr/browser/lightning/LightningDownloadListener.java b/src/acr/browser/lightning/LightningDownloadListener.java new file mode 100644 index 0000000..b4ae046 --- /dev/null +++ b/src/acr/browser/lightning/LightningDownloadListener.java @@ -0,0 +1,52 @@ +/* + * Copyright 2014 A.C.R. Development + */ +package acr.browser.lightning; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.util.Log; +import android.webkit.DownloadListener; +import android.webkit.URLUtil; + +public class LightningDownloadListener implements DownloadListener { + private Activity mActivity; + LightningDownloadListener(Activity activity){ + mActivity = activity; + } + + @Override + public void onDownloadStart(final String url, final String userAgent, + final String contentDisposition, final String mimetype, + long contentLength) { + String fileName = URLUtil.guessFileName(url, contentDisposition, + mimetype); + DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: { + DownloadHandler.onDownloadStart(mActivity, url, userAgent, contentDisposition, mimetype, false); + break; + } + case DialogInterface.BUTTON_NEGATIVE: { + break; + } + } + } + }; + + AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); // dialog + builder.setTitle(fileName) + .setMessage(mActivity.getResources().getString(R.string.dialog_download)) + .setPositiveButton(mActivity.getResources().getString(R.string.action_download), + dialogClickListener) + .setNegativeButton(mActivity.getResources().getString(R.string.action_cancel), dialogClickListener) + .show(); + Log.i("Lightning", "Downloading" + fileName); + + } + +} + diff --git a/src/acr/browser/lightning/LightningView.java b/src/acr/browser/lightning/LightningView.java new file mode 100644 index 0000000..2127d86 --- /dev/null +++ b/src/acr/browser/lightning/LightningView.java @@ -0,0 +1,921 @@ +/* + * Copyright 2014 A.C.R. Development + */ + +package acr.browser.lightning; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.URISyntaxException; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.MailTo; +import android.net.Uri; +import android.net.http.SslError; +import android.os.Message; +import android.text.InputType; +import android.text.TextUtils; +import android.text.method.PasswordTransformationMethod; +import android.util.Log; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.view.View; +import android.view.GestureDetector.SimpleOnGestureListener; +import android.view.View.OnTouchListener; +import android.webkit.GeolocationPermissions; +import android.webkit.HttpAuthHandler; +import android.webkit.SslErrorHandler; +import android.webkit.ValueCallback; +import android.webkit.WebChromeClient; +import android.webkit.WebResourceResponse; +import android.webkit.WebSettings; +import android.webkit.WebSettings.LayoutAlgorithm; +import android.webkit.WebSettings.PluginState; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.EditText; +import android.widget.LinearLayout; + +public class LightningView { + + private Title mTitle; + private WebView mWebView; + private BrowserController mBrowserController; + private GestureDetector mGestureDetector; + private Activity mActivity; + private WebSettings mSettings; + private static int API = android.os.Build.VERSION.SDK_INT; + private static String mPackageName; + private static String mHomepage; + private static String mDefaultUserAgent; + private static Bitmap mWebpageBitmap; + private static SharedPreferences mPreferences; + private static boolean mWideViewPort; + private static AdBlock mAdBlock; + + public LightningView(Activity activity, String url) { + mActivity = activity; + mWebView = new WebView(activity); + mTitle = new Title(activity); + mAdBlock = new AdBlock(activity); + mPackageName = activity.getPackageName(); + mWebpageBitmap = BitmapFactory.decodeResource(activity.getResources(), + R.drawable.ic_webpage); + + try { + mBrowserController = (BrowserController) activity; + } catch (ClassCastException e) { + throw new ClassCastException(activity.toString() + + " must implement BrowserController"); + } + mWebView.setDrawingCacheBackgroundColor(0x00000000); + mWebView.setFocusableInTouchMode(true); + mWebView.setFocusable(true); + mWebView.setAnimationCacheEnabled(false); + mWebView.setDrawingCacheEnabled(true); + mWebView.setBackgroundColor(activity.getResources().getColor( + android.R.color.white)); + if (API > 15) { + mWebView.getRootView().setBackground(null); + } else { + mWebView.getRootView().setBackgroundDrawable(null); + } + mWebView.setWillNotCacheDrawing(false); + mWebView.setAlwaysDrawnWithCacheEnabled(true); + mWebView.setScrollbarFadingEnabled(true); + mWebView.setSaveEnabled(true); + + mWebView.setWebChromeClient(new LightningChromeClient(activity)); + mWebView.setWebViewClient(new LightningWebClient(activity)); + mWebView.setDownloadListener(new LightningDownloadListener(activity)); + mGestureDetector = new GestureDetector(activity, + new CustomGestureListener()); + mWebView.setOnTouchListener(new OnTouchListener() { + + float mLocation = 0; + float mY = 0; + int mAction = 0; + + @Override + public boolean onTouch(View view, MotionEvent arg1) { + if (view != null && !view.hasFocus()) { + view.requestFocus(); + } + mAction = arg1.getAction(); + mY = arg1.getY(); + if (mAction == MotionEvent.ACTION_DOWN) { + mLocation = mY; + } else if (mAction == MotionEvent.ACTION_UP) { + if ((mY - mLocation) > 10) { + mBrowserController.showActionBar(); + } else if ((mY - mLocation) < -10) { + mBrowserController.hideActionBar(); + } + mLocation = 0; + } + mGestureDetector.onTouchEvent(arg1); + return false; + } + + }); + mDefaultUserAgent = mWebView.getSettings().getUserAgentString(); + mSettings = mWebView.getSettings(); + initializeSettings(mWebView.getSettings(), activity); + initializePreferences(activity); + + if (url != null) { + if (!url.equals("")) { + mWebView.loadUrl(url); + } + } else { + if (mHomepage.startsWith("about:home")) { + mSettings.setUseWideViewPort(false); + mWebView.loadUrl(getHomepage()); + } else if (mHomepage.startsWith("about:bookmarks")) { + mBrowserController.openBookmarkPage(mWebView); + } else { + mWebView.loadUrl(mHomepage); + } + } + } + + public String getHomepage() { + String home = ""; + home = HomepageVariables.HEAD; + switch (mPreferences.getInt(PreferenceConstants.SEARCH, 1)) { + case 1: + // GOOGLE_SEARCH; + home = home + "file:///android_asset/google.png"; + // + "https://www.google.com/images/srpr/logo11w.png"; + home = home + HomepageVariables.MIDDLE; + home = home + Constants.GOOGLE_SEARCH; + break; + case 2: + // ANDROID SEARCH; + home = home + "file:///android_asset/lightning.png"; + home = home + HomepageVariables.MIDDLE; + home = home + Constants.ANDROID_SEARCH; + break; + case 3: + // BING_SEARCH; + home = home + "file:///android_asset/bing.png"; + // + + // "http://upload.wikimedia.org/wikipedia/commons/thumb/b/b1/Bing_logo_%282013%29.svg/500px-Bing_logo_%282013%29.svg.png"; + home = home + HomepageVariables.MIDDLE; + home = home + Constants.BING_SEARCH; + break; + case 4: + // YAHOO_SEARCH; + home = home + "file:///android_asset/yahoo.png"; + // + + // "http://upload.wikimedia.org/wikipedia/commons/thumb/2/24/Yahoo%21_logo.svg/799px-Yahoo%21_logo.svg.png"; + home = home + HomepageVariables.MIDDLE; + home = home + Constants.YAHOO_SEARCH; + break; + case 5: + // STARTPAGE_SEARCH; + home = home + "file:///android_asset/startpage.png"; + // + "https://startpage.com/graphics/startp_logo.gif"; + home = home + HomepageVariables.MIDDLE; + home = home + Constants.STARTPAGE_SEARCH; + break; + case 6: + // STARTPAGE_MOBILE + home = home + "file:///android_asset/startpage.png"; + // + "https://startpage.com/graphics/startp_logo.gif"; + home = home + HomepageVariables.MIDDLE; + home = home + Constants.STARTPAGE_MOBILE_SEARCH; + case 7: + // DUCK_SEARCH; + home = home + "file:///android_asset/duckduckgo.png"; + // + "https://duckduckgo.com/assets/logo_homepage.normal.v101.png"; + home = home + HomepageVariables.MIDDLE; + home = home + Constants.DUCK_SEARCH; + break; + case 8: + // DUCK_LITE_SEARCH; + home = home + "file:///android_asset/duckduckgo.png"; + // + "https://duckduckgo.com/assets/logo_homepage.normal.v101.png"; + home = home + HomepageVariables.MIDDLE; + home = home + Constants.DUCK_LITE_SEARCH; + break; + case 9: + // BAIDU_SEARCH; + home = home + "file:///android_asset/baidu.png"; + // + "http://www.baidu.com/img/bdlogo.gif"; + home = home + HomepageVariables.MIDDLE; + home = home + Constants.BAIDU_SEARCH; + break; + case 10: + // YANDEX_SEARCH; + home = home + "file:///android_asset/yandex.png"; + // + + // "http://upload.wikimedia.org/wikipedia/commons/thumb/9/91/Yandex.svg/600px-Yandex.svg.png"; + home = home + HomepageVariables.MIDDLE; + home = home + Constants.YANDEX_SEARCH; + break; + + } + + home = home + HomepageVariables.END; + + File homepage = new File(mActivity.getCacheDir(), "homepage.html"); + try { + FileWriter hWriter = new FileWriter(homepage, false); + hWriter.write(home); + hWriter.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + return Constants.FILE + homepage; + } + + public synchronized void initializePreferences(Context context) { + mPreferences = context.getSharedPreferences(PreferenceConstants.PREFERENCES, 0); + mHomepage = mPreferences.getString(PreferenceConstants.HOMEPAGE, Constants.HOMEPAGE); + mAdBlock.updatePreference(); + if (mSettings == null && mWebView != null) { + mSettings = mWebView.getSettings(); + } else if (mSettings == null) { + return; + } + mSettings.setGeolocationEnabled(mPreferences.getBoolean(PreferenceConstants.LOCATION, + false)); + if (API < 19) { + switch (mPreferences.getInt(PreferenceConstants.ADOBE_FLASH_SUPPORT, 0)) { + case 0: + mSettings.setPluginState(PluginState.OFF); + break; + case 1: { + mSettings.setPluginState(PluginState.ON_DEMAND); + break; + } + case 2: { + mSettings.setPluginState(PluginState.ON); + break; + } + default: + break; + } + } + + switch (mPreferences.getInt(PreferenceConstants.USER_AGENT, 1)) { + case 1: + if (API > 16) + mSettings.setUserAgentString(WebSettings + .getDefaultUserAgent(context)); + else + mSettings.setUserAgentString(mDefaultUserAgent); + break; + case 2: + mSettings.setUserAgentString(Constants.DESKTOP_USER_AGENT); + break; + case 3: + mSettings.setUserAgentString(Constants.MOBILE_USER_AGENT); + break; + case 4: + mSettings.setUserAgentString(mPreferences.getString( + PreferenceConstants.USER_AGENT_STRING, mDefaultUserAgent)); + break; + } + + if (mPreferences.getBoolean(PreferenceConstants.SAVE_PASSWORDS, false)) { + if (API < 18) { + mSettings.setSavePassword(true); + } + mSettings.setSaveFormData(true); + } + + if (mPreferences.getBoolean("java", true)) { + mSettings.setJavaScriptEnabled(true); + mSettings.setJavaScriptCanOpenWindowsAutomatically(true); + } + + if (mPreferences.getBoolean("textreflow", false)) { + mSettings.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS); + } else { + mSettings.setLayoutAlgorithm(LayoutAlgorithm.NORMAL); + } + + mSettings.setBlockNetworkImage(mPreferences.getBoolean(PreferenceConstants.BLOCK_IMAGES, + false)); + mSettings.setSupportMultipleWindows(mPreferences.getBoolean( + PreferenceConstants.POPUPS, true)); + mSettings.setUseWideViewPort(mPreferences.getBoolean(PreferenceConstants.USE_WIDE_VIEWPORT, + true)); + mWideViewPort = mPreferences.getBoolean(PreferenceConstants.USE_WIDE_VIEWPORT, true); + mSettings.setLoadWithOverviewMode(mPreferences.getBoolean( + PreferenceConstants.OVERVIEW_MODE, true)); + switch (mPreferences.getInt(PreferenceConstants.TEXT_SIZE, 3)) { + case 1: + mSettings.setTextZoom(200); + break; + case 2: + mSettings.setTextZoom(150); + break; + case 3: + mSettings.setTextZoom(100); + break; + case 4: + mSettings.setTextZoom(75); + break; + case 5: + mSettings.setTextZoom(50); + break; + } + } + + @SuppressLint("SetJavaScriptEnabled") + public void initializeSettings(WebSettings settings, Context context) { + if (API < 18) { + settings.setAppCacheMaxSize(Long.MAX_VALUE); + } + if (API < 17) { + settings.setEnableSmoothTransition(true); + } + if (API > 16) { + settings.setMediaPlaybackRequiresUserGesture(true); + } + if (API < 19) { + settings.setDatabasePath(context.getFilesDir().getAbsolutePath() + + "/databases"); + } + settings.setDomStorageEnabled(true); + settings.setAppCachePath(context.getCacheDir().toString()); + settings.setAppCacheEnabled(true); + settings.setCacheMode(WebSettings.LOAD_DEFAULT); + settings.setGeolocationDatabasePath(context.getCacheDir() + .getAbsolutePath()); + settings.setAllowFileAccess(true); + settings.setDatabaseEnabled(true); + settings.setSupportZoom(true); + settings.setBuiltInZoomControls(true); + settings.setDisplayZoomControls(false); + settings.setAllowContentAccess(true); + settings.setDefaultTextEncodingName("utf-8"); + if (API > 16) { + settings.setAllowFileAccessFromFileURLs(false); + settings.setAllowUniversalAccessFromFileURLs(false); + } + } + + public boolean isShown() { + if (mWebView != null) + return mWebView.isShown(); + else + return false; + } + + public synchronized void onPause() { + if (mWebView != null) + mWebView.onPause(); + } + + public synchronized void onResume() { + if (mWebView != null) + mWebView.onResume(); + } + + public int getProgress() { + if (mWebView != null) { + return mWebView.getProgress(); + } else { + return 100; + } + } + + public synchronized void stopLoading() { + if (mWebView != null) { + mWebView.stopLoading(); + } + } + + public synchronized void pauseTimers() { + if (mWebView != null) { + mWebView.pauseTimers(); + } + } + + public synchronized void resumeTimers() { + if (mWebView != null) { + mWebView.resumeTimers(); + } + } + + public void requestFocus() { + if (mWebView != null) { + if (!mWebView.hasFocus()) + mWebView.requestFocus(); + } + } + + public void setVisibility(int visible) { + if (mWebView != null) { + mWebView.setVisibility(visible); + } + } + + public void clearCache(boolean disk) { + if (mWebView != null) { + mWebView.clearCache(disk); + } + } + + public synchronized void reload() { + if (mWebView != null) { + mWebView.reload(); + } + } + + public synchronized void find(String text) { + if (mWebView != null) { + if (API > 16) { + mWebView.findAllAsync(text); + } else { + mWebView.findAll(text); + } + } + } + + public synchronized void onDestroy() { + if (mWebView != null) { + mWebView.stopLoading(); + mWebView.onPause(); + mWebView.clearHistory(); + mWebView.setVisibility(View.GONE); + mWebView.removeAllViews(); + mWebView.destroyDrawingCache(); + // mWebView.destroy(); //this is causing the segfault + mWebView = null; + } + } + + public synchronized void goBack() { + if (mWebView != null) + mWebView.goBack(); + } + + public String getUserAgent() { + if (mWebView != null) { + return mWebView.getSettings().getUserAgentString(); + } else { + return ""; + } + } + + public synchronized void goForward() { + if (mWebView != null) + mWebView.goForward(); + } + + public boolean canGoBack() { + if (mWebView != null) { + return mWebView.canGoBack(); + } else { + return false; + } + } + + public boolean canGoForward() { + if (mWebView != null) { + return mWebView.canGoForward(); + } else { + return false; + } + } + + public WebView getWebView() { + return mWebView; + } + + public Bitmap getFavicon() { + return mTitle.getFavicon(); + } + + public synchronized void loadUrl(String url) { + if (mWebView != null) + mWebView.loadUrl(url); + } + + public synchronized void invalidate() { + if (mWebView != null) + mWebView.invalidate(); + } + + public String getTitle() { + return mTitle.getTitle(); + } + + public String getUrl() { + if (mWebView != null) + return mWebView.getUrl(); + else + return ""; + } + + public class LightningWebClient extends WebViewClient { + + Context mActivity; + + LightningWebClient(Context context) { + mActivity = context; + } + + @Override + public WebResourceResponse shouldInterceptRequest(WebView view, + String url) { + if (mAdBlock.isAd(url)) { + Log.i("Blocked Domain:", url); + ByteArrayInputStream EMPTY = new ByteArrayInputStream( + "".getBytes()); + WebResourceResponse response = new WebResourceResponse( + "text/plain", "utf-8", EMPTY); + return response; + } + return super.shouldInterceptRequest(view, url); + } + + @Override + public void onPageFinished(WebView view, String url) { + if (view.isShown()) { + view.invalidate(); + } + mTitle.setTitle(view.getTitle()); + mBrowserController.update(); + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + if (!mSettings.getUseWideViewPort()) { + mSettings.setUseWideViewPort(mWideViewPort); + } + if (isShown()) { + mBrowserController.updateUrl(url); + mBrowserController.showActionBar(); + } + mTitle.setFavicon(mWebpageBitmap); + mBrowserController.update(); + } + + @Override + public void onReceivedHttpAuthRequest(final WebView view, + final HttpAuthHandler handler, final String host, + final String realm) { + + AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); + final EditText name = new EditText(mActivity); + final EditText password = new EditText(mActivity); + LinearLayout passLayout = new LinearLayout(mActivity); + passLayout.setOrientation(LinearLayout.VERTICAL); + + passLayout.addView(name); + passLayout.addView(password); + + name.setHint(mActivity.getString(R.string.hint_username)); + password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); + password.setTransformationMethod(new PasswordTransformationMethod()); + password.setHint(mActivity.getString(R.string.hint_password)); + builder.setTitle(mActivity.getString(R.string.title_sign_in)); + builder.setView(passLayout); + builder.setCancelable(true) + .setPositiveButton(mActivity.getString(R.string.title_sign_in), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int id) { + String user = name.getText().toString(); + String pass = password.getText().toString(); + handler.proceed(user.trim(), pass.trim()); + Log.i("Lightning", "Request Login"); + + } + }) + .setNegativeButton(mActivity.getString(R.string.action_cancel), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int id) { + handler.cancel(); + + } + }); + AlertDialog alert = builder.create(); + alert.show(); + + } + + @Override + public void onScaleChanged(WebView view, float oldScale, float newScale) { + if (view.isShown()) { + view.invalidate(); + } + } + + @Override + public void onReceivedSslError(WebView view, + final SslErrorHandler handler, SslError error) { + AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); + builder.setTitle(mActivity.getString(R.string.title_warning)); + builder.setMessage( + mActivity.getString(R.string.message_untrusted_certificate)) + .setCancelable(true) + .setPositiveButton(mActivity.getString(R.string.action_yes), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int id) { + handler.proceed(); + } + }) + .setNegativeButton(mActivity.getString(R.string.action_no), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int id) { + handler.cancel(); + } + }); + AlertDialog alert = builder.create(); + if (error.getPrimaryError() == SslError.SSL_UNTRUSTED) { + alert.show(); + } else { + handler.proceed(); + } + + } + + @Override + public void onFormResubmission(WebView view, final Message dontResend, + final Message resend) { + AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); + builder.setTitle(mActivity.getString(R.string.title_form_resubmission)); + builder.setMessage(mActivity.getString(R.string.message_form_resubmission)) + .setCancelable(true) + .setPositiveButton(mActivity.getString(R.string.action_yes), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int id) { + + resend.sendToTarget(); + } + }) + .setNegativeButton("No", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int id) { + + dontResend.sendToTarget(); + } + }); + AlertDialog alert = builder.create(); + alert.show(); + } + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + if (url.startsWith("market://") + || url.startsWith("http://play.google.com/store/apps") + || url.startsWith("https://play.google.com/store/apps")) { + Intent urlIntent = new Intent(Intent.ACTION_VIEW, + Uri.parse(url)); + urlIntent.putExtra(mPackageName + ".Origin", 1); + mActivity.startActivity(urlIntent); + return true; + } else if (url.startsWith("http://www.youtube.com") + || url.startsWith("https://www.youtube.com") + || url.startsWith("http://m.youtube.com") + || url.startsWith("https://m.youtube.com")) { + Intent urlIntent = new Intent(Intent.ACTION_VIEW, + Uri.parse(url)); + urlIntent.putExtra(mPackageName + ".Origin", 1); + mActivity.startActivity(urlIntent); + return true; + } else if (url.startsWith("http://maps.google.com") + || url.startsWith("https://maps.google.com")) { + Intent urlIntent = new Intent(Intent.ACTION_VIEW, + Uri.parse(url)); + urlIntent.putExtra(mPackageName + ".Origin", 1); + mActivity.startActivity(urlIntent); + return true; + } else if (url.contains("tel:") || TextUtils.isDigitsOnly(url)) { + mActivity.startActivity(new Intent(Intent.ACTION_DIAL, Uri + .parse(url))); + return true; + } else if (url.contains("mailto:")) { + MailTo mailTo = MailTo.parse(url); + Intent i = Utils.newEmailIntent(mActivity, mailTo.getTo(), + mailTo.getSubject(), mailTo.getBody(), mailTo.getCc()); + mActivity.startActivity(i); + view.reload(); + return true; + } else if (url.startsWith("magnet:?")) { + Intent urlIntent = new Intent(Intent.ACTION_VIEW, + Uri.parse(url)); + urlIntent.putExtra(mPackageName + ".Origin", 1); + mActivity.startActivity(urlIntent); + } else if (url.startsWith("intent://")) { + Intent intent = null; + try { + intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME); + } catch (URISyntaxException ex) { + return false; + } + if (intent != null) { + mActivity.startActivity(intent); + return true; + } + } + return super.shouldOverrideUrlLoading(view, url); + } + } + + public class LightningChromeClient extends WebChromeClient { + + Context mActivity; + + LightningChromeClient(Context context) { + mActivity = context; + } + + @Override + public void onProgressChanged(WebView view, int newProgress) { + if (isShown()) { + mBrowserController.updateProgress(newProgress); + } + } + + @Override + public void onReceivedIcon(WebView view, Bitmap icon) { + mTitle.setFavicon(icon); + mBrowserController.update(); + } + + @Override + public void onReceivedTitle(WebView view, String title) { + mTitle.setTitle(title); + mBrowserController.update(); + mBrowserController.updateHistory(title, view.getUrl()); + } + + @Override + public void onGeolocationPermissionsShowPrompt(final String origin, + final GeolocationPermissions.Callback callback) { + final boolean remember = true; + AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); + builder.setTitle(mActivity.getString(R.string.location)); + String org = null; + if (origin.length() > 50) { + org = (String) origin.subSequence(0, 50) + "..."; + } else { + org = origin; + } + builder.setMessage(org + mActivity.getString(R.string.message_location)) + .setCancelable(true) + .setPositiveButton(mActivity.getString(R.string.action_allow), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int id) { + callback.invoke(origin, true, remember); + } + }) + .setNegativeButton(mActivity.getString(R.string.action_dont_allow), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int id) { + callback.invoke(origin, false, remember); + } + }); + AlertDialog alert = builder.create(); + alert.show(); + + } + + @Override + public boolean onCreateWindow(WebView view, boolean isDialog, + boolean isUserGesture, Message resultMsg) { + mBrowserController.onCreateWindow(isUserGesture, resultMsg); + return isUserGesture; + } + + @Override + public void onCloseWindow(WebView window) { + // TODO Auto-generated method stub + super.onCloseWindow(window); + } + + public void openFileChooser(ValueCallback uploadMsg) { + mBrowserController.openFileChooser(uploadMsg); + } + + public void openFileChooser(ValueCallback uploadMsg, + String acceptType) { + mBrowserController.openFileChooser(uploadMsg); + } + + public void openFileChooser(ValueCallback uploadMsg, + String acceptType, String capture) { + mBrowserController.openFileChooser(uploadMsg); + } + + @Override + public Bitmap getDefaultVideoPoster() { + return mBrowserController.getDefaultVideoPoster(); + } + + @Override + public View getVideoLoadingProgressView() { + return mBrowserController.getVideoLoadingProgressView(); + } + + @Override + public void onHideCustomView() { + mBrowserController.onHideCustomView(); + super.onHideCustomView(); + } + + @Override + public void onShowCustomView(View view, CustomViewCallback callback) { + Activity activity = mBrowserController.getActivity(); + mBrowserController.onShowCustomView(view, + activity.getRequestedOrientation(), callback); + super.onShowCustomView(view, callback); + } + + @Override + @Deprecated + public void onShowCustomView(View view, int requestedOrientation, + CustomViewCallback callback) { + mBrowserController.onShowCustomView(view, requestedOrientation, + callback); + super.onShowCustomView(view, requestedOrientation, callback); + } + + } + + public class Title { + private Bitmap mFavicon; + private String mTitle; + private Bitmap mDefaultIcon; + + public Title(Context context) { + mDefaultIcon = BitmapFactory.decodeResource(context.getResources(), + R.drawable.ic_webpage); + mFavicon = mDefaultIcon; + mTitle = mActivity.getString(R.string.action_new_tab); + } + + public void setFavicon(Bitmap favicon) { + mFavicon = favicon; + if (mFavicon == null) { + mFavicon = mDefaultIcon; + } + } + + public void setTitle(String title) { + if (title == null) { + title = ""; + } + mTitle = title; + } + + public void setTitleAndFavicon(String title, Bitmap favicon) { + mTitle = title; + mFavicon = favicon; + if (mFavicon == null) { + mFavicon = mDefaultIcon; + } + } + + public String getTitle() { + return mTitle; + } + + public Bitmap getFavicon() { + return mFavicon; + } + } + + private class CustomGestureListener extends SimpleOnGestureListener { + + @Override + public void onLongPress(MotionEvent e) { + mBrowserController.onLongPress(); + } + + } +} diff --git a/src/acr/browser/lightning/PreferenceConstants.java b/src/acr/browser/lightning/PreferenceConstants.java new file mode 100644 index 0000000..b3fd194 --- /dev/null +++ b/src/acr/browser/lightning/PreferenceConstants.java @@ -0,0 +1,34 @@ +/* + * Copyright 2014 A.C.R. Development + */ +package acr.browser.lightning; + +public class PreferenceConstants { + public static final String ADOBE_FLASH_SUPPORT = "enableflash"; + public static final String BLOCK_ADS = "AdBlock"; + public static final String BLOCK_IMAGES = "blockimages"; + public static final String CLEAR_CACHE_EXIT = "cache"; + public static final String COOKIES = "cookies"; + public static final String DOWNLOAD_DIRECTORY = "download"; + public static final String FULL_SCREEN = "fullscreen"; + public static final String HIDE_STATUS_BAR = "hidestatus"; + public static final String HOMEPAGE = "home"; + public static final String INCOGNITO_COOKIES = "incognitocookies"; + public static final String JAVASCRIPT = "java"; + public static final String LOCATION = "location"; + public static final String OVERVIEW_MODE = "overviewmode"; + public static final String POPUPS = "newwindows"; + public static final String PREFERENCES = "settings"; + public static final String RESTORE_LOST_TABS = "restoreclosed"; + public static final String SAVE_PASSWORDS = "passwords"; + public static final String SEARCH = "search"; + public static final String SEARCH_URL = "searchurl"; + public static final String SYSTEM_BROWSER_PRESENT = "SystemBrowser"; + public static final String TEXT_REFLOW = "textreflow"; + public static final String TEXT_SIZE = "textsize"; + public static final String URL_MEMORY = "memory"; + public static final String USE_WIDE_VIEWPORT = "wideviewport"; + public static final String USER_AGENT = "agentchoose"; + public static final String USER_AGENT_STRING = "userAgentString"; + public static final String GOOGLE_SEARCH_SUGGESTIONS = "GoogleSearchSuggestions"; +} diff --git a/src/acr/browser/lightning/SearchAdapter.java b/src/acr/browser/lightning/SearchAdapter.java new file mode 100644 index 0000000..9f159ec --- /dev/null +++ b/src/acr/browser/lightning/SearchAdapter.java @@ -0,0 +1,393 @@ +package acr.browser.lightning; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; +import org.xmlpull.v1.XmlPullParserFactory; + +import android.app.Activity; +import android.content.Context; +import android.content.SharedPreferences; +import android.graphics.Color; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.os.AsyncTask; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.Filter; +import android.widget.Filterable; +import android.widget.ImageView; +import android.widget.TextView; + +public class SearchAdapter extends BaseAdapter implements Filterable { + + private List mHistory; + private List mBookmarks; + private List mSuggestions; + private List mFilteredList; + private List mAllBookmarks; + private DatabaseHandler mDatabaseHandler; + private SharedPreferences mPreferences; + private boolean mUseGoogle = true; + private Context mContext; + private boolean mIncognito = false; + + public SearchAdapter(Context context, boolean incognito) { + mDatabaseHandler = new DatabaseHandler(context); + mFilteredList = new ArrayList(); + mHistory = new ArrayList(); + mBookmarks = new ArrayList(); + mSuggestions = new ArrayList(); + mAllBookmarks = Utils.getBookmarks(context); + mPreferences = context.getSharedPreferences( + PreferenceConstants.PREFERENCES, 0); + mUseGoogle = mPreferences.getBoolean( + PreferenceConstants.GOOGLE_SEARCH_SUGGESTIONS, true); + mContext = context; + mIncognito = incognito; + } + + public void refreshPreferences() { + mUseGoogle = mPreferences.getBoolean( + PreferenceConstants.GOOGLE_SEARCH_SUGGESTIONS, true); + if (!mUseGoogle && mSuggestions != null) { + mSuggestions.clear(); + } + } + + public void refreshBookmarks() { + mAllBookmarks = Utils.getBookmarks(mContext); + } + + @Override + public int getCount() { + if (mFilteredList != null) { + return mFilteredList.size(); + } else { + return 0; + } + } + + @Override + public Object getItem(int position) { + return mFilteredList.get(position); + } + + @Override + public long getItemId(int position) { + return 0; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View row = convertView; + SuggestionHolder holder = null; + + if (row == null) { + LayoutInflater inflater = ((Activity) mContext).getLayoutInflater(); + row = inflater.inflate(R.layout.two_line_autocomplete, parent, + false); + + holder = new SuggestionHolder(); + holder.mTitle = (TextView) row.findViewById(R.id.title); + holder.mUrl = (TextView) row.findViewById(R.id.url); + holder.mImage = (ImageView) row.findViewById(R.id.suggestionIcon); + row.setTag(holder); + } else { + holder = (SuggestionHolder) row.getTag(); + } + + HistoryItem web = mFilteredList.get(position); + holder.mTitle.setText(web.getTitle()); + holder.mUrl.setText(web.getUrl()); + + int imageId = R.drawable.ic_bookmark; + switch (web.getImageId()) { + case R.drawable.ic_bookmark: { + if (!mIncognito) { + imageId = R.drawable.ic_bookmark; + } else { + holder.mTitle.setTextColor(Color.WHITE); + imageId = R.drawable.ic_bookmark_dark; + } + break; + } + case R.drawable.ic_search: { + if (!mIncognito) { + imageId = R.drawable.ic_search; + } else { + holder.mTitle.setTextColor(Color.WHITE); + imageId = R.drawable.ic_search_dark; + } + break; + } + case R.drawable.ic_history: { + if (!mIncognito) { + imageId = R.drawable.ic_history; + } else { + holder.mTitle.setTextColor(Color.WHITE); + imageId = R.drawable.ic_history_dark; + } + break; + } + } + + holder.mImage.setImageDrawable(mContext.getResources().getDrawable( + imageId)); + + return row; + } + + public void setContents(List list) { + if (mFilteredList != null) { + mFilteredList.clear(); + mFilteredList.addAll(list); + } + } + + @Override + public Filter getFilter() { + return new SearchFilter(); + } + + public class SearchFilter extends Filter { + + @Override + protected FilterResults performFiltering(CharSequence constraint) { + FilterResults results = new FilterResults(); + if (constraint == null) { + return results; + } + String query = constraint.toString().toLowerCase( + Locale.getDefault()); + if (query == null) { + return results; + } + if (mUseGoogle && !mIncognito) { + new RetrieveSearchSuggestions().execute(query); + } + + List filter = new ArrayList(); + + int counter = 0; + mBookmarks = new ArrayList(); + for (int n = 0; n < mAllBookmarks.size(); n++) { + if (counter >= 5) { + break; + } + if (mAllBookmarks.get(n).getTitle() + .toLowerCase(Locale.getDefault()).startsWith(query)) { + filter.add(mAllBookmarks.get(n)); + mBookmarks.add(mAllBookmarks.get(n)); + counter++; + } + + } + if (mDatabaseHandler == null || !mDatabaseHandler.isOpen()) { + mDatabaseHandler = new DatabaseHandler(mContext); + } + mHistory = mDatabaseHandler.findItemsContaining(constraint + .toString()); + for (int n = 0; n < mHistory.size(); n++) { + if (n >= 5) { + break; + } + filter.add(mHistory.get(n)); + } + + for (int n = 0; n < mSuggestions.size(); n++) { + if (filter.size() >= 5) { + break; + } + filter.add(mSuggestions.get(n)); + } + + results.count = filter.size(); + results.values = filter; + return results; + } + + @Override + public CharSequence convertResultToString(Object resultValue) { + return ((HistoryItem) resultValue).getUrl(); + } + + @Override + protected void publishResults(CharSequence constraint, + FilterResults results) { + synchronized (mFilteredList) { + mFilteredList = getSuggestions(); + notifyDataSetChanged(); + } + } + + } + + private class SuggestionHolder { + ImageView mImage; + TextView mTitle; + TextView mUrl; + } + + private class RetrieveSearchSuggestions extends + AsyncTask> { + + @Override + protected List doInBackground(String... arg0) { + if (!isNetworkConnected(mContext)) { + return new ArrayList(); + } + List filter = new ArrayList(); + String query = arg0[0]; + try { + query = query.replace(" ", "+"); + URLEncoder.encode(query, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + InputStream download = null; + try { + try { + download = new java.net.URL( + "http://google.com/complete/search?q=" + query + + "&output=toolbar&hl=en").openStream(); + XmlPullParserFactory factory = XmlPullParserFactory + .newInstance(); + factory.setNamespaceAware(true); + XmlPullParser xpp = factory.newPullParser(); + xpp.setInput(download, "iso-8859-1"); + int eventType = xpp.getEventType(); + int counter = 0; + while (eventType != XmlPullParser.END_DOCUMENT) { + if (eventType == XmlPullParser.START_TAG) { + if (xpp.getName().equals("suggestion")) { + String suggestion = xpp.getAttributeValue(null, + "data"); + filter.add(new HistoryItem(mContext + .getString(R.string.suggestion) + + " \"" + + suggestion + "\"", suggestion, + R.drawable.ic_search)); + counter++; + if (counter >= 5) { + break; + } + } + } + eventType = xpp.next(); + } + } finally { + if (download != null) { + download.close(); + } + } + } catch (FileNotFoundException e) { + } catch (MalformedURLException e) { + } catch (IOException e) { + } catch (XmlPullParserException e) { + } + return filter; + } + + @Override + protected void onPostExecute(List result) { + synchronized (mFilteredList) { + mSuggestions = result; + + mFilteredList = getSuggestions(); + notifyDataSetChanged(); + } + } + + } + + private boolean isNetworkConnected(Context context) { + NetworkInfo networkInfo = getActiveNetworkInfo(context); + return networkInfo != null && networkInfo.isConnected(); + } + + private NetworkInfo getActiveNetworkInfo(Context context) { + ConnectivityManager connectivity = (ConnectivityManager) context + .getSystemService(Context.CONNECTIVITY_SERVICE); + if (connectivity == null) { + return null; + } + return connectivity.getActiveNetworkInfo(); + } + + public List getSuggestions() { + List filteredList = new ArrayList(); + + int suggestionsSize = 0; + int historySize = 0; + int bookmarkSize = 0; + + if (mSuggestions != null) { + suggestionsSize = mSuggestions.size(); + } + if (mHistory != null) { + historySize = mHistory.size(); + } + if (mBookmarks != null) { + bookmarkSize = mBookmarks.size(); + } + + int maxSuggestions = 2; + int maxHistory = 1; + int maxBookmarks = 2; + + if (!mUseGoogle || mIncognito) { + maxHistory++; + maxBookmarks++; + } + + if (bookmarkSize + historySize < 3) { + maxSuggestions = 5 - (bookmarkSize + historySize); + } else if (bookmarkSize < 2) { + maxSuggestions += 2 - bookmarkSize; + } else if (historySize < 1) { + maxSuggestions += 1; + } + if (suggestionsSize + bookmarkSize < 4) { + maxHistory = 5 - (suggestionsSize + bookmarkSize); + } + if (suggestionsSize + historySize < 3) { + maxBookmarks = 5 - (suggestionsSize + historySize); + } + + for (int n = 0; n < bookmarkSize; n++) { + if (n >= maxBookmarks) { + break; + } + filteredList.add(mBookmarks.get(n)); + } + + for (int n = 0; n < historySize; n++) { + if (n >= maxHistory) { + break; + } + filteredList.add(mHistory.get(n)); + } + + for (int n = 0; n < suggestionsSize; n++) { + if (n >= maxSuggestions) { + break; + } + filteredList.add(mSuggestions.get(n)); + } + + return filteredList; + } + +} diff --git a/src/acr/browser/barebones/activities/SettingsActivity.java b/src/acr/browser/lightning/SettingsActivity.java similarity index 56% rename from src/acr/browser/barebones/activities/SettingsActivity.java rename to src/acr/browser/lightning/SettingsActivity.java index 62a6092..1d91e54 100644 --- a/src/acr/browser/barebones/activities/SettingsActivity.java +++ b/src/acr/browser/lightning/SettingsActivity.java @@ -1,15 +1,17 @@ -package acr.browser.barebones.activities; +/* + * Copyright 2014 A.C.R. Development + */ +package acr.browser.lightning; -import acr.browser.barebones.R; -import acr.browser.barebones.utilities.FinalVariables; -import acr.browser.barebones.utilities.Utils; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.annotation.SuppressLint; import android.app.Activity; import android.app.AlertDialog; +import android.content.Context; import android.content.DialogInterface; +import android.content.DialogInterface.OnCancelListener; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; @@ -19,6 +21,7 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.graphics.Color; import android.util.Log; import android.util.TypedValue; +import android.view.MenuItem; import android.view.View; import android.view.WindowManager; import android.view.View.OnClickListener; @@ -26,99 +29,115 @@ import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.EditText; -import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.Switch; import android.widget.TextView; public class SettingsActivity extends Activity { - static int API = FinalVariables.API; - static final String preferences = "settings"; - static SharedPreferences.Editor mEditPrefs; - static int agentChoice; - static String homepage; - static String searchurl; - static TextView agentText; - static String agent; - static TextView download; - static int egg = 0; - static String downloadLocation; - static TextView homepageText; - static SharedPreferences settings; - static TextView searchText; + + private static int API = android.os.Build.VERSION.SDK_INT; + private static SharedPreferences.Editor mEditPrefs; + private static int mAgentChoice; + private static String mHomepage; + private static TextView mAgentTextView; + private static TextView mDownloadTextView; + private static int mEasterEggCounter = 0; + private static String mSearchUrl; + private static String mDownloadLocation; + private static TextView mHomepageText; + private static SharedPreferences mPreferences; + private static TextView mSearchText; + private Context mContext; + private Activity mActivity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.settings); - + mContext = this; + mActivity = this; init(); } + @Override + public boolean onOptionsItemSelected(MenuItem item) { + finish(); + return true; + } + @SuppressLint("NewApi") public void init() { - // settings storage - settings = getSharedPreferences(preferences, 0); - if (settings.getBoolean("hidestatus", false)) { + // mPreferences storage + getActionBar().setHomeButtonEnabled(true); + getActionBar().setDisplayHomeAsUpEnabled(true); + mPreferences = getSharedPreferences(PreferenceConstants.PREFERENCES, 0); + if (mPreferences.getBoolean(PreferenceConstants.HIDE_STATUS_BAR, false)) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } - mEditPrefs= settings.edit(); + + mEditPrefs = mPreferences.edit(); // initialize UI RelativeLayout layoutLocation = (RelativeLayout) findViewById(R.id.layoutLocation); RelativeLayout layoutFullScreen = (RelativeLayout) findViewById(R.id.layoutFullScreen); RelativeLayout layoutFlash = (RelativeLayout) findViewById(R.id.layoutFlash); - ImageView back = (ImageView) findViewById(R.id.back); + RelativeLayout layoutBlockAds = (RelativeLayout) findViewById(R.id.layoutAdBlock); - searchText = (TextView) findViewById(R.id.searchText); + mSearchText = (TextView) findViewById(R.id.searchText); - switch (settings.getInt("search", 1)) { + switch (mPreferences.getInt(PreferenceConstants.SEARCH, 1)) { case 0: - searchText.setText("Custom URL"); + mSearchText.setText(getResources().getString(R.string.custom_url)); break; case 1: - searchText.setText("Google"); + mSearchText.setText("Google"); break; case 2: - searchText.setText("Bing"); + mSearchText.setText("Android Search"); break; case 3: - searchText.setText("Yahoo"); + mSearchText.setText("Bing"); break; case 4: - searchText.setText("StartPage"); + mSearchText.setText("Yahoo"); break; case 5: - searchText.setText("DuckDuckGo"); + mSearchText.setText("StartPage"); break; case 6: - searchText.setText("Baidu"); + mSearchText.setText("StartPage (Mobile)"); break; case 7: - searchText.setText("Yandex"); + mSearchText.setText("DuckDuckGo"); break; case 8: - searchText.setText("DuckDuckGo Lite"); + mSearchText.setText("DuckDuckGo Lite"); break; + case 9: + mSearchText.setText("Baidu"); + break; + case 10: + mSearchText.setText("Yandex"); } - back.setBackgroundResource(R.drawable.button); - agentText = (TextView) findViewById(R.id.agentText); - homepageText = (TextView) findViewById(R.id.homepageText); - download = (TextView) findViewById(R.id.downloadText); - - boolean locationBool = settings.getBoolean("location", false); - int flashNum = settings.getInt("enableflash", 0); - boolean fullScreenBool = settings.getBoolean("fullscreen", false); - agentChoice = settings.getInt("agentchoose", 1); - homepage = settings.getString("home", FinalVariables.HOMEPAGE); - downloadLocation = settings.getString("download", + mAgentTextView = (TextView) findViewById(R.id.agentText); + mHomepageText = (TextView) findViewById(R.id.homepageText); + mDownloadTextView = (TextView) findViewById(R.id.downloadText); + if (API >= 19) { + mEditPrefs.putInt(PreferenceConstants.ADOBE_FLASH_SUPPORT, 0); + mEditPrefs.commit(); + } + boolean locationBool = mPreferences.getBoolean(PreferenceConstants.LOCATION, false); + int flashNum = mPreferences.getInt(PreferenceConstants.ADOBE_FLASH_SUPPORT, 0); + boolean fullScreenBool = mPreferences.getBoolean(PreferenceConstants.FULL_SCREEN, false); + mAgentChoice = mPreferences.getInt(PreferenceConstants.USER_AGENT, 1); + mHomepage = mPreferences.getString(PreferenceConstants.HOMEPAGE, Constants.HOMEPAGE); + mDownloadLocation = mPreferences.getString(PreferenceConstants.DOWNLOAD_DIRECTORY, Environment.DIRECTORY_DOWNLOADS); - download.setText(FinalVariables.EXTERNAL_STORAGE + "/" - + downloadLocation); + mDownloadTextView.setText(Constants.EXTERNAL_STORAGE + "/" + mDownloadLocation); String code = "HOLO"; @@ -134,88 +153,84 @@ public class SettingsActivity extends Activity { TextView version = (TextView) findViewById(R.id.versionCode); version.setText(code + ""); - if (homepage.contains("about:home")) { - homepageText.setText(getResources().getString( + if (mHomepage.contains("about:home")) { + mHomepageText.setText(getResources().getString( R.string.action_homepage)); - } else if (homepage.contains("about:blank")) { - homepageText.setText(getResources() + } else if (mHomepage.contains("about:blank")) { + mHomepageText.setText(getResources() .getString(R.string.action_blank)); + } else if (mHomepage.contains("about:bookmarks")) { + mHomepageText.setText(getResources().getString( + R.string.action_bookmarks)); } else { - homepageText.setText(homepage); + mHomepageText.setText(mHomepage); } - switch (agentChoice) { + switch (mAgentChoice) { case 1: - agentText.setText(getResources().getString(R.string.agent_default)); + mAgentTextView.setText(getResources().getString(R.string.agent_default)); break; case 2: - agentText.setText(getResources().getString(R.string.agent_desktop)); + mAgentTextView.setText(getResources().getString(R.string.agent_desktop)); break; case 3: - agentText.setText(getResources().getString(R.string.agent_mobile)); + mAgentTextView.setText(getResources().getString(R.string.agent_mobile)); break; case 4: - agentText.setText(getResources().getString(R.string.agent_custom)); + mAgentTextView.setText(getResources().getString(R.string.agent_custom)); } - RelativeLayout r1, r2, r3; + RelativeLayout r1, r2, r3, r4, licenses; r1 = (RelativeLayout) findViewById(R.id.setR1); r2 = (RelativeLayout) findViewById(R.id.setR2); r3 = (RelativeLayout) findViewById(R.id.setR3); - if (API >= 14) { - Switch location = new Switch(this); - Switch fullScreen = new Switch(this); - Switch flash = new Switch(this); - - r1.addView(location); - r2.addView(fullScreen); - r3.addView(flash); - location.setChecked(locationBool); - fullScreen.setChecked(fullScreenBool); - if (flashNum > 0) { - flash.setChecked(true); - } else { - flash.setChecked(false); - } - - initSwitch(location, fullScreen, flash); - clickListenerForSwitches(layoutLocation, layoutFullScreen, - layoutFlash, location, fullScreen, flash); + r4 = (RelativeLayout) findViewById(R.id.setR4); + licenses = (RelativeLayout) findViewById(R.id.layoutLicense); + + licenses.setOnClickListener(new OnClickListener(){ - } else { - CheckBox location = new CheckBox(this); - CheckBox fullScreen = new CheckBox(this); - CheckBox flash = new CheckBox(this); - - r1.addView(location); - r2.addView(fullScreen); - r3.addView(flash); - - location.setChecked(locationBool); - fullScreen.setChecked(fullScreenBool); - if (flashNum > 0) { - flash.setChecked(true); - } else { - flash.setChecked(false); + @Override + public void onClick(View arg0) { + //NOTE: In order to comply with the open source license, + //it is advised that you leave this code so that the License + //Activity may be viewed by the user. + startActivity(new Intent(Constants.LICENSE_INTENT)); } - initCheckBox(location, fullScreen, flash); - clickListenerForCheckBoxes(layoutLocation, layoutFullScreen, - layoutFlash, location, fullScreen, flash); + + }); + + Switch location = new Switch(this); + Switch fullScreen = new Switch(this); + Switch flash = new Switch(this); + Switch adblock = new Switch(this); + + r1.addView(location); + r2.addView(fullScreen); + r3.addView(flash); + r4.addView(adblock); + location.setChecked(locationBool); + fullScreen.setChecked(fullScreenBool); + if (flashNum > 0) { + flash.setChecked(true); + } else { + flash.setChecked(false); } + adblock.setChecked(mPreferences.getBoolean(PreferenceConstants.BLOCK_ADS, false)); + + initSwitch(location, fullScreen, flash, adblock); + clickListenerForSwitches(layoutLocation, layoutFullScreen, layoutFlash, layoutBlockAds, + location, fullScreen, flash, adblock); RelativeLayout agent = (RelativeLayout) findViewById(R.id.layoutUserAgent); RelativeLayout download = (RelativeLayout) findViewById(R.id.layoutDownload); RelativeLayout homepage = (RelativeLayout) findViewById(R.id.layoutHomepage); RelativeLayout advanced = (RelativeLayout) findViewById(R.id.layoutAdvanced); RelativeLayout source = (RelativeLayout) findViewById(R.id.layoutSource); - RelativeLayout license = (RelativeLayout) findViewById(R.id.layoutLicense); - back(back); agent(agent); download(download); homepage(homepage); advanced(advanced); source(source); - license(license); search(); easterEgg(); } @@ -226,15 +241,16 @@ public class SettingsActivity extends Activity { @Override public void onClick(View v) { - AlertDialog.Builder picker = new AlertDialog.Builder( - SettingsActivity.this); + AlertDialog.Builder picker = new AlertDialog.Builder(mActivity); picker.setTitle(getResources().getString( R.string.title_search_engine)); - CharSequence[] chars = { getResources().getString(R.string.custom_url), - "Google", "Bing", "Yahoo", - "StartPage", "DuckDuckGo (Privacy)" , "Baidu (Chinese)", "Yandex (Russian)", "DuckDuckGo Lite (Privacy)"}; + CharSequence[] chars = { + getResources().getString(R.string.custom_url), + "Google", "Android Search", "Bing", "Yahoo", "StartPage", "StartPage (Mobile)", + "DuckDuckGo (Privacy)", "DuckDuckGo Lite (Privacy)", "Baidu (Chinese)", + "Yandex (Russian)" }; - int n = settings.getInt("search", 1); + int n = mPreferences.getInt(PreferenceConstants.SEARCH, 1); picker.setSingleChoiceItems(chars, n, new DialogInterface.OnClickListener() { @@ -242,40 +258,46 @@ public class SettingsActivity extends Activity { @Override public void onClick(DialogInterface dialog, int which) { - mEditPrefs.putInt("search", which); + mEditPrefs.putInt(PreferenceConstants.SEARCH, which); mEditPrefs.commit(); switch (which) { case 0: searchUrlPicker(); break; case 1: - searchText.setText("Google"); + mSearchText.setText("Google"); break; case 2: - searchText.setText("Bing"); + mSearchText.setText("Android Search"); break; case 3: - searchText.setText("Yahoo"); + mSearchText.setText("Bing"); break; case 4: - searchText.setText("StartPage"); + mSearchText.setText("Yahoo"); break; case 5: - searchText.setText("DuckDuckGo"); + mSearchText.setText("StartPage"); break; case 6: - searchText.setText("Baidu"); + mSearchText.setText("StartPage (Mobile)"); break; case 7: - searchText.setText("Yandex"); + mSearchText.setText("DuckDuckGo"); break; case 8: - searchText.setText("DuckDuckGo Lite"); + mSearchText.setText("DuckDuckGo Lite"); + break; + case 9: + mSearchText.setText("Baidu"); break; + case 10: + mSearchText.setText("Yandex"); } } }); - picker.setNeutralButton(getResources().getString(R.string.action_ok), + picker.setNeutralButton( + getResources().getString(R.string.action_ok), new DialogInterface.OnClickListener() { @Override @@ -293,62 +315,42 @@ public class SettingsActivity extends Activity { public void searchUrlPicker() { final AlertDialog.Builder urlPicker = new AlertDialog.Builder( SettingsActivity.this); - - urlPicker.setTitle(getResources().getString( - R.string.custom_url)); + + urlPicker.setTitle(getResources().getString(R.string.custom_url)); final EditText getSearchUrl = new EditText(SettingsActivity.this); - searchurl = settings.getString("searchurl", FinalVariables.GOOGLE_SEARCH); - getSearchUrl.setText(searchurl); + mSearchUrl = mPreferences + .getString(PreferenceConstants.SEARCH_URL, Constants.GOOGLE_SEARCH); + getSearchUrl.setText(mSearchUrl); urlPicker.setView(getSearchUrl); - urlPicker.setPositiveButton( - getResources().getString(R.string.action_ok), + urlPicker.setPositiveButton(getResources() + .getString(R.string.action_ok), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String text = getSearchUrl.getText().toString(); - mEditPrefs.putString("searchurl", text); + mEditPrefs.putString(PreferenceConstants.SEARCH_URL, text); mEditPrefs.commit(); - searchText.setText( getResources().getString(R.string.custom_url) + ": " + text); + mSearchText.setText(getResources().getString( + R.string.custom_url) + + ": " + text); } }); urlPicker.show(); } - - public void clickListenerForCheckBoxes(RelativeLayout one, - RelativeLayout two, RelativeLayout three, final CheckBox loc, - final CheckBox full, final CheckBox flash) { - one.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View v) { - loc.setChecked(!loc.isChecked()); - } - - }); - two.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View v) { - full.setChecked(!full.isChecked()); - } - - }); - three.setOnClickListener(new OnClickListener() { + public void clickListenerForSwitches(RelativeLayout one, + RelativeLayout two, RelativeLayout three, RelativeLayout layoutBlockAds, final Switch loc, + final Switch full, final Switch flash, final Switch adblock) { + layoutBlockAds.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { - flash.setChecked(!flash.isChecked()); + adblock.setChecked(!adblock.isChecked()); } - + }); - } - - public void clickListenerForSwitches(RelativeLayout one, - RelativeLayout two, RelativeLayout three, final Switch loc, - final Switch full, final Switch flash) { one.setOnClickListener(new OnClickListener() { @Override @@ -369,7 +371,13 @@ public class SettingsActivity extends Activity { @Override public void onClick(View v) { - flash.setChecked(!flash.isChecked()); + if (API < 19) { + flash.setChecked(!flash.isChecked()); + } else { + Utils.createInformativeDialog(mContext, getResources() + .getString(R.string.title_warning), getResources() + .getString(R.string.dialog_adobe_dead)); + } } }); @@ -381,41 +389,53 @@ public class SettingsActivity extends Activity { @Override public void onClick(View v) { - egg++; - if (egg == 10) { + mEasterEggCounter++; + if (mEasterEggCounter == 10) { startActivity(new Intent(Intent.ACTION_VIEW, Uri .parse("http://imgs.xkcd.com/comics/compiling.png"))); finish(); - egg = 0; + mEasterEggCounter = 0; } } }); } - public void initSwitch(Switch location, Switch fullscreen, Switch flash) { + public void initSwitch(Switch location, Switch fullscreen, Switch flash, Switch adblock) { + adblock.setOnCheckedChangeListener(new OnCheckedChangeListener(){ + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + mEditPrefs.putBoolean(PreferenceConstants.BLOCK_ADS, isChecked); + mEditPrefs.commit(); + } + + }); location.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - mEditPrefs.putBoolean("location", isChecked); + mEditPrefs.putBoolean(PreferenceConstants.LOCATION, isChecked); mEditPrefs.commit(); } }); + flash.setEnabled(API < 19); flash.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - int n = 0; if (isChecked) { - n = 1; + getFlashChoice(); + } else { + mEditPrefs.putInt(PreferenceConstants.ADOBE_FLASH_SUPPORT, 0); + mEditPrefs.commit(); } - mEditPrefs.putInt("enableflash", n); - mEditPrefs.commit(); + boolean flashInstalled = false; try { PackageManager pm = getPackageManager(); @@ -433,7 +453,7 @@ public class SettingsActivity extends Activity { getResources().getString( R.string.dialog_adobe_not_installed)); buttonView.setChecked(false); - mEditPrefs.putInt("enableflash", 0); + mEditPrefs.putInt(PreferenceConstants.ADOBE_FLASH_SUPPORT, 0); mEditPrefs.commit(); } else if ((API >= 17) && isChecked) { @@ -451,7 +471,7 @@ public class SettingsActivity extends Activity { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - mEditPrefs.putBoolean("fullscreen", isChecked); + mEditPrefs.putBoolean(PreferenceConstants.FULL_SCREEN, isChecked); mEditPrefs.commit(); } @@ -459,6 +479,44 @@ public class SettingsActivity extends Activity { }); } + private void getFlashChoice() { + AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); + builder.setTitle(mContext.getResources() + .getString(R.string.title_flash)); + builder.setMessage(getResources().getString(R.string.flash)) + .setCancelable(true) + .setPositiveButton( + getResources().getString(R.string.action_manual), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + mEditPrefs.putInt(PreferenceConstants.ADOBE_FLASH_SUPPORT, 1); + mEditPrefs.commit(); + } + }) + .setNegativeButton( + getResources().getString(R.string.action_auto), + new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, + int which) { + mEditPrefs.putInt(PreferenceConstants.ADOBE_FLASH_SUPPORT, 2); + mEditPrefs.commit(); + } + }).setOnCancelListener(new OnCancelListener() { + + @Override + public void onCancel(DialogInterface dialog) { + mEditPrefs.putInt(PreferenceConstants.ADOBE_FLASH_SUPPORT, 0); + mEditPrefs.commit(); + } + + }); + AlertDialog alert = builder.create(); + alert.show(); + } + public void initCheckBox(CheckBox location, CheckBox fullscreen, CheckBox flash) { location.setOnCheckedChangeListener(new OnCheckedChangeListener() { @@ -466,7 +524,7 @@ public class SettingsActivity extends Activity { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - mEditPrefs.putBoolean("location", isChecked); + mEditPrefs.putBoolean(PreferenceConstants.LOCATION, isChecked); mEditPrefs.commit(); } @@ -481,7 +539,7 @@ public class SettingsActivity extends Activity { if (isChecked) { n = 1; } - mEditPrefs.putInt("enableflash", n); + mEditPrefs.putInt(PreferenceConstants.ADOBE_FLASH_SUPPORT, n); mEditPrefs.commit(); boolean flashInstalled = false; try { @@ -500,7 +558,7 @@ public class SettingsActivity extends Activity { getResources().getString( R.string.dialog_adobe_not_installed)); buttonView.setChecked(false); - mEditPrefs.putInt("enableflash", 0); + mEditPrefs.putInt(PreferenceConstants.ADOBE_FLASH_SUPPORT, 0); mEditPrefs.commit(); } else if ((API > 17) && isChecked) { @@ -518,7 +576,7 @@ public class SettingsActivity extends Activity { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - mEditPrefs.putBoolean("fullscreen", isChecked); + mEditPrefs.putBoolean(PreferenceConstants.FULL_SCREEN, isChecked); mEditPrefs.commit(); } @@ -526,24 +584,13 @@ public class SettingsActivity extends Activity { }); } - public void back(ImageView view) { - view.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View v) { - finish(); - } - - }); - } - public void agent(RelativeLayout view) { view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder agentPicker = new AlertDialog.Builder( - SettingsActivity.this); + mActivity); agentPicker.setTitle(getResources().getString( R.string.title_user_agent)); CharSequence[] chars = { @@ -551,30 +598,30 @@ public class SettingsActivity extends Activity { getResources().getString(R.string.agent_desktop), getResources().getString(R.string.agent_mobile), getResources().getString(R.string.agent_custom) }; - agentChoice = settings.getInt("agentchoose", 1); - agentPicker.setSingleChoiceItems(chars, agentChoice - 1, + mAgentChoice = mPreferences.getInt(PreferenceConstants.USER_AGENT, 1); + agentPicker.setSingleChoiceItems(chars, mAgentChoice - 1, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - mEditPrefs.putInt("agentchoose", which + 1); + mEditPrefs.putInt(PreferenceConstants.USER_AGENT, which + 1); mEditPrefs.commit(); switch (which + 1) { case 1: - agentText.setText(getResources().getString( + mAgentTextView.setText(getResources().getString( R.string.agent_default)); break; case 2: - agentText.setText(getResources().getString( + mAgentTextView.setText(getResources().getString( R.string.agent_desktop)); break; case 3: - agentText.setText(getResources().getString( + mAgentTextView.setText(getResources().getString( R.string.agent_mobile)); break; case 4: - agentText.setText(getResources().getString( + mAgentTextView.setText(getResources().getString( R.string.agent_custom)); agentPicker(); break; @@ -608,11 +655,11 @@ public class SettingsActivity extends Activity { }); } - + public void agentPicker() { final AlertDialog.Builder agentStringPicker = new AlertDialog.Builder( - SettingsActivity.this); - + mActivity); + agentStringPicker.setTitle(getResources().getString( R.string.title_user_agent)); final EditText getAgent = new EditText(SettingsActivity.this); @@ -624,9 +671,9 @@ public class SettingsActivity extends Activity { @Override public void onClick(DialogInterface dialog, int which) { String text = getAgent.getText().toString(); - mEditPrefs.putString("userAgentString", text); + mEditPrefs.putString(PreferenceConstants.USER_AGENT_STRING, text); mEditPrefs.commit(); - agentText.setText(getResources().getString( + mAgentTextView.setText(getResources().getString( R.string.agent_custom)); } }); @@ -639,17 +686,16 @@ public class SettingsActivity extends Activity { @Override public void onClick(View v) { - AlertDialog.Builder picker = new AlertDialog.Builder( - SettingsActivity.this); + AlertDialog.Builder picker = new AlertDialog.Builder(mActivity); picker.setTitle(getResources().getString( R.string.title_download_location)); CharSequence[] chars = { getResources().getString(R.string.agent_default), getResources().getString(R.string.agent_custom) }; - downloadLocation = settings.getString("download", + mDownloadLocation = mPreferences.getString(PreferenceConstants.DOWNLOAD_DIRECTORY, Environment.DIRECTORY_DOWNLOADS); int n = -1; - if (downloadLocation.contains(Environment.DIRECTORY_DOWNLOADS)) { + if (mDownloadLocation.contains(Environment.DIRECTORY_DOWNLOADS)) { n = 1; } else { n = 2; @@ -664,10 +710,10 @@ public class SettingsActivity extends Activity { switch (which + 1) { case 1: - mEditPrefs.putString("download", + mEditPrefs.putString(PreferenceConstants.DOWNLOAD_DIRECTORY, Environment.DIRECTORY_DOWNLOADS); mEditPrefs.commit(); - download.setText(FinalVariables.EXTERNAL_STORAGE + mDownloadTextView.setText(Constants.EXTERNAL_STORAGE + "/" + Environment.DIRECTORY_DOWNLOADS); break; @@ -696,26 +742,27 @@ public class SettingsActivity extends Activity { public void homePicker() { final AlertDialog.Builder homePicker = new AlertDialog.Builder( - this); + mActivity); homePicker.setTitle(getResources().getString( R.string.title_custom_homepage)); final EditText getHome = new EditText(SettingsActivity.this); - homepage = settings.getString("home", FinalVariables.HOMEPAGE); - if (!homepage.startsWith("about:")) { - getHome.setText(homepage); + mHomepage = mPreferences.getString(PreferenceConstants.HOMEPAGE, Constants.HOMEPAGE); + if (!mHomepage.startsWith("about:")) { + getHome.setText(mHomepage); } else { getHome.setText("http://www.google.com"); } homePicker.setView(getHome); - homePicker.setPositiveButton(getResources().getString(R.string.action_ok), + homePicker.setPositiveButton( + getResources().getString(R.string.action_ok), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String text = getHome.getText().toString(); - mEditPrefs.putString("home", text); + mEditPrefs.putString(PreferenceConstants.HOMEPAGE, text); mEditPrefs.commit(); - homepageText.setText(text); + mHomepageText.setText(text); } }); homePicker.show(); @@ -724,15 +771,15 @@ public class SettingsActivity extends Activity { @SuppressWarnings("deprecation") public void downPicker() { final AlertDialog.Builder downLocationPicker = new AlertDialog.Builder( - this); + mActivity); LinearLayout layout = new LinearLayout(this); downLocationPicker.setTitle(getResources().getString( R.string.title_download_location)); final EditText getDownload = new EditText(SettingsActivity.this); getDownload.setBackgroundResource(0); - downloadLocation = settings.getString("download", + mDownloadLocation = mPreferences.getString(PreferenceConstants.DOWNLOAD_DIRECTORY, Environment.DIRECTORY_DOWNLOADS); - int padding = Utils.convertDensityPixels(this, 10); + int padding = Utils.convertToDensityPixels(this, 10); LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, @@ -740,13 +787,13 @@ public class SettingsActivity extends Activity { getDownload.setLayoutParams(lparams); getDownload.setTextColor(Color.DKGRAY); - getDownload.setText(downloadLocation); + getDownload.setText(mDownloadLocation); getDownload.setPadding(0, padding, padding, padding); TextView v = new TextView(this); v.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); v.setTextColor(Color.DKGRAY); - v.setText(FinalVariables.EXTERNAL_STORAGE + "/"); + v.setText(Constants.EXTERNAL_STORAGE + "/"); v.setPadding(padding, padding, 0, padding); layout.addView(v); layout.addView(getDownload); @@ -765,9 +812,9 @@ public class SettingsActivity extends Activity { @Override public void onClick(DialogInterface dialog, int which) { String text = getDownload.getText().toString(); - mEditPrefs.putString("download", text); + mEditPrefs.putString(PreferenceConstants.DOWNLOAD_DIRECTORY, text); mEditPrefs.commit(); - download.setText(FinalVariables.EXTERNAL_STORAGE + "/" + mDownloadTextView.setText(Constants.EXTERNAL_STORAGE + "/" + text); } }); @@ -779,18 +826,23 @@ public class SettingsActivity extends Activity { @Override public void onClick(View v) { - AlertDialog.Builder picker = new AlertDialog.Builder( - SettingsActivity.this); - picker.setTitle("Homepage"); - CharSequence[] chars = { "Bookmarks", "Blank Page", "Webpage" }; - homepage = settings.getString("home", FinalVariables.HOMEPAGE); + AlertDialog.Builder picker = new AlertDialog.Builder(mActivity); + picker.setTitle(getResources().getString(R.string.home)); + CharSequence[] chars = { + getResources().getString(R.string.action_homepage), + getResources().getString(R.string.action_blank), + getResources().getString(R.string.action_bookmarks), + getResources().getString(R.string.action_webpage) }; + mHomepage = mPreferences.getString(PreferenceConstants.HOMEPAGE, Constants.HOMEPAGE); int n = -1; - if (homepage.contains("about:home")) { + if (mHomepage.contains("about:home")) { n = 1; - } else if (homepage.contains("about:blank")) { + } else if (mHomepage.contains("about:blank")) { n = 2; - } else { + } else if (mHomepage.contains("about:bookmarks")) { n = 3; + } else { + n = 4; } picker.setSingleChoiceItems(chars, n - 1, @@ -802,23 +854,36 @@ public class SettingsActivity extends Activity { switch (which + 1) { case 1: - mEditPrefs.putString("home", "about:home"); + mEditPrefs.putString(PreferenceConstants.HOMEPAGE, "about:home"); mEditPrefs.commit(); - homepageText.setText("Bookmarks"); + mHomepageText + .setText(getResources().getString( + R.string.action_homepage)); break; case 2: - mEditPrefs.putString("home", "about:blank"); + mEditPrefs.putString(PreferenceConstants.HOMEPAGE, "about:blank"); mEditPrefs.commit(); - homepageText.setText("Blank Page"); + mHomepageText.setText(getResources() + .getString(R.string.action_blank)); break; case 3: + mEditPrefs.putString(PreferenceConstants.HOMEPAGE, + "about:bookmarks"); + mEditPrefs.commit(); + mHomepageText.setText(getResources() + .getString( + R.string.action_bookmarks)); + + break; + case 4: homePicker(); break; } } }); - picker.setNeutralButton("OK", + picker.setNeutralButton( + getResources().getString(R.string.action_ok), new DialogInterface.OnClickListener() { @Override @@ -838,34 +903,19 @@ public class SettingsActivity extends Activity { @Override public void onClick(View v) { - startActivity(new Intent( - FinalVariables.ADVANCED_SETTINGS_INTENT)); + startActivity(new Intent(Constants.ADVANCED_SETTINGS_INTENT)); } }); } public void source(RelativeLayout view) { - view.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View v) { - startActivity(new Intent( - Intent.ACTION_VIEW, - Uri.parse("https://github.com/anthonycr/Lightning-Browser"))); - finish(); - } - - }); - } - - public void license(RelativeLayout view) { view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(Intent.ACTION_VIEW, Uri - .parse("http://www.apache.org/licenses/LICENSE-2.0"))); + .parse("http://twitter.com/ACRDevelopment"))); finish(); } diff --git a/src/acr/browser/lightning/SettingsController.java b/src/acr/browser/lightning/SettingsController.java new file mode 100644 index 0000000..e450596 --- /dev/null +++ b/src/acr/browser/lightning/SettingsController.java @@ -0,0 +1,31 @@ +/* + * Copyright 2014 A.C.R. Development + */ +package acr.browser.lightning; + +public class SettingsController { + static boolean clearHistory = false; + + /** + * The purpose of this class is so that + * I can clear the dropdown history in the main + * activities if the user selects to clear the + * history from the disk in advanced settings + * @param choice + */ + static void setClearHistory(boolean choice) { + clearHistory = choice; + } + + /** + * return the choice + * @return + */ + static boolean getClearHistory() { + if (clearHistory) { + clearHistory = false; + return true; + } + return clearHistory; + } +} diff --git a/src/acr/browser/barebones/databases/SpaceTokenizer.java b/src/acr/browser/lightning/SpaceTokenizer.java similarity index 93% rename from src/acr/browser/barebones/databases/SpaceTokenizer.java rename to src/acr/browser/lightning/SpaceTokenizer.java index a5cc3ea..f44264f 100644 --- a/src/acr/browser/barebones/databases/SpaceTokenizer.java +++ b/src/acr/browser/lightning/SpaceTokenizer.java @@ -1,4 +1,7 @@ -package acr.browser.barebones.databases; +/* + * Copyright 2014 A.C.R. Development + */ +package acr.browser.lightning; import android.widget.MultiAutoCompleteTextView.Tokenizer; diff --git a/src/acr/browser/lightning/Utils.java b/src/acr/browser/lightning/Utils.java new file mode 100644 index 0000000..91a03fb --- /dev/null +++ b/src/acr/browser/lightning/Utils.java @@ -0,0 +1,149 @@ +/* + * Copyright 2014 A.C.R. Development + */ +package acr.browser.lightning; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.List; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.util.Log; +import android.webkit.URLUtil; +import android.widget.Toast; + +public class Utils { + + public Utils() { + // TODO Auto-generated constructor stub + } + + public static void downloadFile(final Activity activity, final String url, final String userAgent, final String contentDisposition, final boolean privateBrowsing){ + String fileName = URLUtil.guessFileName(url, null, + null); + DownloadHandler.onDownloadStart(activity, url, userAgent, contentDisposition, null, privateBrowsing); + Log.i("Lightning", "Downloading" + fileName); + } + + public static synchronized void addBookmark(Context context, String title, String url) { + File book = new File(context.getFilesDir(), "bookmarks"); + File bookUrl = new File(context.getFilesDir(), "bookurl"); + if((title.equals("Bookmarks")||title.equals("History"))&& url.startsWith("file://")){ + return; + } + try { + BufferedReader readUrlRead = new BufferedReader(new FileReader( + bookUrl)); + String u; + while ((u = readUrlRead.readLine()) != null) { + if (u.contentEquals(url)) { + readUrlRead.close(); + return; + } + } + readUrlRead.close(); + + } catch (FileNotFoundException ignored) { + } catch (IOException ignored) { + } catch (NullPointerException ignored) { + } + try { + BufferedWriter bookWriter = new BufferedWriter(new FileWriter(book, + true)); + BufferedWriter urlWriter = new BufferedWriter(new FileWriter( + bookUrl, true)); + bookWriter.write(title); + urlWriter.write(url); + bookWriter.newLine(); + urlWriter.newLine(); + bookWriter.close(); + urlWriter.close(); + } catch (FileNotFoundException ignored) { + } catch (IOException ignored) { + } catch (NullPointerException ignored) { + } + } + + public static Intent newEmailIntent(Context context, String address, + String subject, String body, String cc) { + Intent intent = new Intent(Intent.ACTION_SEND); + intent.putExtra(Intent.EXTRA_EMAIL, new String[] { address }); + intent.putExtra(Intent.EXTRA_TEXT, body); + intent.putExtra(Intent.EXTRA_SUBJECT, subject); + intent.putExtra(Intent.EXTRA_CC, cc); + intent.setType("message/rfc822"); + return intent; + } + + public static void createInformativeDialog(Context context, String title, + String message) { + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle(title); + builder.setMessage(message).setCancelable(true) + .setPositiveButton(context.getResources().getString(R.string.action_ok), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + } + }); + AlertDialog alert = builder.create(); + alert.show(); + } + + public static void showToast(Context context, String message) { + Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); + } + + public static int convertToDensityPixels(Context context, int densityPixels) { + float scale = context.getResources().getDisplayMetrics().density; + int pixels = (int) (densityPixels * scale + 0.5f); + return pixels; + } + + public static String getDomainName(String url) { + URI uri; + try { + uri = new URI(url); + } catch (URISyntaxException e) { + return url; + } + String domain = uri.getHost(); + if (domain == null) { + return url; + } + return domain.startsWith("www.") ? domain.substring(4) : domain; + } + + public static List getBookmarks(Context context) { + List bookmarks = new ArrayList(); + File bookUrl = new File(context.getFilesDir(), + "bookurl"); + File book = new File(context.getFilesDir(), "bookmarks"); + try { + BufferedReader readUrl = new BufferedReader(new FileReader(bookUrl)); + BufferedReader readBook = new BufferedReader(new FileReader(book)); + String u, t; + while ((u = readUrl.readLine()) != null + && (t = readBook.readLine()) != null) { + HistoryItem map = new HistoryItem(u, t, R.drawable.ic_bookmark); + bookmarks.add(map); + } + readBook.close(); + readUrl.close(); + } catch (FileNotFoundException ignored) { + } catch (IOException ignored) { + } + return bookmarks; + } +} diff --git a/src/acr/browser/lightning/WebAddress.java b/src/acr/browser/lightning/WebAddress.java new file mode 100644 index 0000000..2a8613b --- /dev/null +++ b/src/acr/browser/lightning/WebAddress.java @@ -0,0 +1,169 @@ +/* + * Copyright 2014 A.C.R. Development + */ +package acr.browser.lightning; + + + +import static android.util.Patterns.GOOD_IRI_CHAR; + +import java.util.Locale; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +/** + * {@hide} + * + * Web Address Parser + * + * This is called WebAddress, rather than URL or URI, because it + * attempts to parse the stuff that a user will actually type into a + * browser address widget. + * + * Unlike java.net.uri, this parser will not choke on URIs missing + * schemes. It will only throw a ParseException if the input is + * really hosed. + * + * If given an https scheme but no port, fills in port + * + */ +public class WebAddress { + + private String mScheme; + private String mHost; + private int mPort; + private String mPath; + private String mAuthInfo; + + static final int MATCH_GROUP_SCHEME = 1; + static final int MATCH_GROUP_AUTHORITY = 2; + static final int MATCH_GROUP_HOST = 3; + static final int MATCH_GROUP_PORT = 4; + static final int MATCH_GROUP_PATH = 5; + + static Pattern sAddressPattern = Pattern.compile( + /* scheme */ "(?:(http|https|file)\\:\\/\\/)?" + + /* authority */ "(?:([-A-Za-z0-9$_.+!*'(),;?&=]+(?:\\:[-A-Za-z0-9$_.+!*'(),;?&=]+)?)@)?" + + /* host */ "([" + GOOD_IRI_CHAR + "%_-][" + GOOD_IRI_CHAR + "%_\\.-]*|\\[[0-9a-fA-F:\\.]+\\])?" + + /* port */ "(?:\\:([0-9]*))?" + + /* path */ "(\\/?[^#]*)?" + + /* anchor */ ".*", Pattern.CASE_INSENSITIVE); + + /** parses given uriString. + * @throws Exception */ + public WebAddress(String address) throws Exception { + if (address == null) { + throw new NullPointerException(); + } + + // android.util.Log.d(LOGTAG, "WebAddress: " + address); + + mScheme = ""; + mHost = ""; + mPort = -1; + mPath = "/"; + mAuthInfo = ""; + + Matcher m = sAddressPattern.matcher(address); + String t; + if (m.matches()) { + t = m.group(MATCH_GROUP_SCHEME); + if (t != null) mScheme = t.toLowerCase(Locale.ROOT); + t = m.group(MATCH_GROUP_AUTHORITY); + if (t != null) mAuthInfo = t; + t = m.group(MATCH_GROUP_HOST); + if (t != null) mHost = t; + t = m.group(MATCH_GROUP_PORT); + if (t != null && t.length() > 0) { + // The ':' character is not returned by the regex. + try { + mPort = Integer.parseInt(t); + } catch (NumberFormatException ex) { + throw new Exception(); + } + } + t = m.group(MATCH_GROUP_PATH); + if (t != null && t.length() > 0) { + /* handle busted myspace frontpage redirect with + missing initial "/" */ + if (t.charAt(0) == '/') { + mPath = t; + } else { + mPath = "/" + t; + } + } + + } else { + // nothing found... outa here + throw new Exception(); + } + + /* Get port from scheme or scheme from port, if necessary and + possible */ + if (mPort == 443 && mScheme.equals("")) { + mScheme = "https"; + } else if (mPort == -1) { + if (mScheme.equals("https")) + mPort = 443; + else + mPort = 80; // default + } + if (mScheme.equals("")) mScheme = "http"; + } + + @Override + public String toString() { + String port = ""; + if ((mPort != 443 && mScheme.equals("https")) || + (mPort != 80 && mScheme.equals("http"))) { + port = ":" + Integer.toString(mPort); + } + String authInfo = ""; + if (mAuthInfo.length() > 0) { + authInfo = mAuthInfo + "@"; + } + + return mScheme + "://" + authInfo + mHost + port + mPath; + } + + public void setScheme(String scheme) { + mScheme = scheme; + } + + public String getScheme() { + return mScheme; + } + + public void setHost(String host) { + mHost = host; + } + + public String getHost() { + return mHost; + } + + public void setPort(int port) { + mPort = port; + } + + public int getPort() { + return mPort; + } + + public void setPath(String path) { + mPath = path; + } + + public String getPath() { + return mPath; + } + + public void setAuthInfo(String authInfo) { + mAuthInfo = authInfo; + } + + public String getAuthInfo() { + return mAuthInfo; + } +} \ No newline at end of file