OLD | NEW |
1 /* | 1 /* |
2 * This file is part of the Adblock Plus, | 2 * This file is part of the Adblock Plus, |
3 * Copyright (C) 2006-2012 Eyeo GmbH | 3 * Copyright (C) 2006-2012 Eyeo GmbH |
4 * | 4 * |
5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
8 * | 8 * |
9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 * Indicates that system supports native proxy configuration. | 63 * Indicates that system supports native proxy configuration. |
64 */ | 64 */ |
65 public static final boolean NATIVE_PROXY_SUPPORTED = Build.VERSION.SDK_INT >=
12; // Honeycomb 3.1 | 65 public static final boolean NATIVE_PROXY_SUPPORTED = Build.VERSION.SDK_INT >=
12; // Honeycomb 3.1 |
66 | 66 |
67 static | 67 static |
68 { | 68 { |
69 RootTools.debugMode = false; | 69 RootTools.debugMode = false; |
70 } | 70 } |
71 | 71 |
72 private static final String TAG = "ProxyService"; | 72 private static final String TAG = "ProxyService"; |
73 private static final boolean logRequests = false; | 73 private static final boolean logRequests = true; |
74 | 74 |
75 private static final int[] portVariants = new int[] {8080, 8888, 1111, 2222, 3
333, 4444, 5555, 6666, 7777, 9999, 26571, 0}; | 75 // Do not use 8080 because it is a "dirty" port, Android uses it if something
goes wrong |
| 76 private static final int[] portVariants = new int[] {8888, 1111, 2222, 3333, 4
444, 5555, 6666, 7777, 9999, 26571, 0}; |
76 | 77 |
77 private final static int DEFAULT_TIMEOUT = 3000; | 78 private final static int DEFAULT_TIMEOUT = 3000; |
78 private final static int NO_TRAFFIC_TIMEOUT = 5 * 60 * 1000; // 5 minutes | 79 private final static int NO_TRAFFIC_TIMEOUT = 5 * 60 * 1000; // 5 minutes |
79 | 80 |
80 final static int ONGOING_NOTIFICATION_ID = R.string.app_name; | 81 final static int ONGOING_NOTIFICATION_ID = R.string.app_name; |
81 private static final long POSITION_RIGHT = Build.VERSION.SDK_INT >= Build.VERS
ION_CODES.GINGERBREAD ? Long.MIN_VALUE : Long.MAX_VALUE; | 82 private static final long POSITION_RIGHT = Build.VERSION.SDK_INT >= Build.VERS
ION_CODES.GINGERBREAD ? Long.MIN_VALUE : Long.MAX_VALUE; |
82 private final static int NOTRAFFIC_NOTIFICATION_ID = R.string.app_name + 3; | 83 private final static int NOTRAFFIC_NOTIFICATION_ID = R.string.app_name + 3; |
83 | 84 |
84 /** | 85 /** |
85 * Broadcasted when service starts or stops. | 86 * Broadcasted when service starts or stops. |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 { | 197 { |
197 // Try to set native proxy | 198 // Try to set native proxy |
198 nativeProxyAutoConfigured = ProxySettings.setConnectionProxy(getApplicatio
nContext(), LOCALHOST, port, ""); | 199 nativeProxyAutoConfigured = ProxySettings.setConnectionProxy(getApplicatio
nContext(), LOCALHOST, port, ""); |
199 | 200 |
200 if (NATIVE_PROXY_SUPPORTED) | 201 if (NATIVE_PROXY_SUPPORTED) |
201 { | 202 { |
202 registerReceiver(connectionReceiver, new IntentFilter(ConnectivityManage
r.CONNECTIVITY_ACTION)); | 203 registerReceiver(connectionReceiver, new IntentFilter(ConnectivityManage
r.CONNECTIVITY_ACTION)); |
203 registerReceiver(connectionReceiver, new IntentFilter(Proxy.PROXY_CHANGE
_ACTION)); | 204 registerReceiver(connectionReceiver, new IntentFilter(Proxy.PROXY_CHANGE
_ACTION)); |
204 } | 205 } |
205 } | 206 } |
206 | 207 |
207 // Start engine | 208 // Save current native proxy situation. The service is always started on the
first run so |
208 AdblockPlus.getApplication().startEngine(); | 209 // we will always have a correct value from the box |
| 210 SharedPreferences.Editor editor = prefs.edit(); |
| 211 editor.putBoolean(getString(R.string.pref_proxyautoconfigured), transparent
|| nativeProxyAutoConfigured); |
| 212 editor.commit(); |
209 | 213 |
210 registerReceiver(proxyReceiver, new IntentFilter(ProxyService.BROADCAST_PROX
Y_FAILED)); | 214 registerReceiver(proxyReceiver, new IntentFilter(ProxyService.BROADCAST_PROX
Y_FAILED)); |
211 registerReceiver(matchesReceiver, new IntentFilter(AdblockPlus.BROADCAST_FIL
TER_MATCHES)); | 215 registerReceiver(filterReceiver, new IntentFilter(AdblockPlus.BROADCAST_FILT
ERING_CHANGE)); |
| 216 registerReceiver(filterReceiver, new IntentFilter(AdblockPlus.BROADCAST_FILT
ER_MATCHES)); |
212 | 217 |
213 // Start proxy | 218 // Start proxy |
214 if (proxy == null) | 219 if (proxy == null) |
215 { | 220 { |
216 ServerSocket listen = null; | 221 ServerSocket listen = null; |
217 String msg = null; | 222 String msg = null; |
218 for (int p : portVariants) | 223 for (int p : portVariants) |
219 { | 224 { |
220 try | 225 try |
221 { | 226 { |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
284 return START_STICKY; | 289 return START_STICKY; |
285 } | 290 } |
286 | 291 |
287 @Override | 292 @Override |
288 public void onDestroy() | 293 public void onDestroy() |
289 { | 294 { |
290 super.onDestroy(); | 295 super.onDestroy(); |
291 | 296 |
292 stopNoTrafficCheck(); | 297 stopNoTrafficCheck(); |
293 | 298 |
294 unregisterReceiver(matchesReceiver); | 299 unregisterReceiver(filterReceiver); |
295 unregisterReceiver(proxyReceiver); | 300 unregisterReceiver(proxyReceiver); |
296 | 301 |
297 // Stop IP redirecting | 302 // Stop IP redirecting |
298 if (transparent) | 303 if (transparent) |
299 { | 304 { |
300 new Thread() | 305 new Thread() |
301 { | 306 { |
302 @Override | 307 @Override |
303 public void run() | 308 public void run() |
304 { | 309 { |
(...skipping 17 matching lines...) Expand all Loading... |
322 { | 327 { |
323 clearConnectionProxy(); | 328 clearConnectionProxy(); |
324 } | 329 } |
325 | 330 |
326 sendBroadcast(new Intent(BROADCAST_STATE_CHANGED).putExtra("enabled", false)
); | 331 sendBroadcast(new Intent(BROADCAST_STATE_CHANGED).putExtra("enabled", false)
); |
327 | 332 |
328 // Stop proxy server | 333 // Stop proxy server |
329 if (proxy != null) | 334 if (proxy != null) |
330 proxy.close(); | 335 proxy.close(); |
331 | 336 |
| 337 // TODO Do we have to check current state? |
332 // Stop engine if not in interactive mode | 338 // Stop engine if not in interactive mode |
333 AdblockPlus.getApplication().stopEngine(false); | 339 AdblockPlus.getApplication().stopEngine(false); |
334 | 340 |
335 // Release service lock | 341 // Release service lock |
336 stopForeground(true); | 342 stopForeground(true); |
337 | 343 |
338 Log.i(TAG, "Service stopped"); | 344 Log.i(TAG, "Service stopped"); |
339 } | 345 } |
340 | 346 |
341 /** | 347 /** |
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
635 * Stops no traffic check and resets notification message. | 641 * Stops no traffic check and resets notification message. |
636 */ | 642 */ |
637 private void stopNoTrafficCheck() | 643 private void stopNoTrafficCheck() |
638 { | 644 { |
639 if (notrafficHandler != null) | 645 if (notrafficHandler != null) |
640 { | 646 { |
641 notrafficHandler.removeCallbacks(noTraffic); | 647 notrafficHandler.removeCallbacks(noTraffic); |
642 sendStateChangedBroadcast(); | 648 sendStateChangedBroadcast(); |
643 NotificationManager notificationManager = (NotificationManager) getSystemS
ervice(NOTIFICATION_SERVICE); | 649 NotificationManager notificationManager = (NotificationManager) getSystemS
ervice(NOTIFICATION_SERVICE); |
644 notificationManager.notify(ONGOING_NOTIFICATION_ID, getNotification()); | 650 notificationManager.notify(ONGOING_NOTIFICATION_ID, getNotification()); |
| 651 notificationManager.cancel(NOTRAFFIC_NOTIFICATION_ID); |
645 } | 652 } |
646 notrafficHandler = null; | 653 notrafficHandler = null; |
647 } | 654 } |
648 | 655 |
649 @SuppressLint("NewApi") | 656 @SuppressLint("NewApi") |
650 private Notification getNotification() | 657 private Notification getNotification() |
651 { | 658 { |
| 659 boolean filtering = AdblockPlus.getApplication().isFilteringEnabled(); |
| 660 |
652 int msgId = R.string.notif_waiting; | 661 int msgId = R.string.notif_waiting; |
653 if (nativeProxyAutoConfigured || proxyManualyConfigured) | 662 if (nativeProxyAutoConfigured || proxyManualyConfigured) |
654 msgId = R.string.notif_wifi; | 663 msgId = filtering ? R.string.notif_wifi : R.string.notif_wifi_nofiltering; |
655 if (transparent) | 664 if (transparent) |
656 msgId = R.string.notif_all; | 665 msgId = R.string.notif_all; |
657 | 666 |
658 NotificationCompat.Builder builder = new NotificationCompat.Builder(this); | 667 NotificationCompat.Builder builder = new NotificationCompat.Builder(this); |
659 if (hideIcon && msgId != R.string.notif_waiting) | 668 if (hideIcon && msgId != R.string.notif_waiting) |
660 { | 669 { |
661 builder.setWhen(POSITION_RIGHT); | 670 builder.setWhen(POSITION_RIGHT); |
662 builder.setSmallIcon(R.drawable.transparent); | 671 builder.setSmallIcon(R.drawable.transparent); |
663 //builder.setContent(new RemoteViews(getPackageName(), R.layout.notif_hidd
en)); | 672 //builder.setContent(new RemoteViews(getPackageName(), R.layout.notif_hidd
en)); |
664 } | 673 } |
665 else | 674 else |
666 { | 675 { |
667 builder.setWhen(0); | 676 builder.setWhen(0); |
668 builder.setSmallIcon(R.drawable.ic_stat_blocking); | 677 builder.setSmallIcon(R.drawable.ic_stat_blocking); |
669 } | 678 } |
670 PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(
this, Preferences.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_A
CTIVITY_NEW_TASK), 0); | 679 PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(
this, Preferences.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_A
CTIVITY_NEW_TASK), 0); |
671 builder.setContentIntent(contentIntent); | 680 builder.setContentIntent(contentIntent); |
672 builder.setContentTitle(getText(R.string.app_name)); | 681 builder.setContentTitle(getText(R.string.app_name)); |
673 builder.setContentText(getText(msgId)); | 682 builder.setContentText(getText(msgId)); |
| 683 builder.setOngoing(true); |
674 | 684 |
675 Notification notification = builder.getNotification(); | 685 Notification notification = builder.getNotification(); |
676 return notification; | 686 return notification; |
677 } | 687 } |
678 | 688 |
679 public void setEmptyIcon(boolean hide) | 689 public void setEmptyIcon(boolean hide) |
680 { | 690 { |
681 hideIcon = hide; | 691 hideIcon = hide; |
682 NotificationManager notificationManager = (NotificationManager) getSystemSer
vice(NOTIFICATION_SERVICE); | 692 NotificationManager notificationManager = (NotificationManager) getSystemSer
vice(NOTIFICATION_SERVICE); |
683 notificationManager.notify(ONGOING_NOTIFICATION_ID, getNotification()); | 693 notificationManager.notify(ONGOING_NOTIFICATION_ID, getNotification()); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
733 builder.setContentTitle(getText(R.string.app_name)); | 743 builder.setContentTitle(getText(R.string.app_name)); |
734 builder.setContentText(getText(R.string.notif_notraffic)); | 744 builder.setContentText(getText(R.string.notif_notraffic)); |
735 NotificationManager notificationManager = (NotificationManager) getSystemS
ervice(NOTIFICATION_SERVICE); | 745 NotificationManager notificationManager = (NotificationManager) getSystemS
ervice(NOTIFICATION_SERVICE); |
736 notificationManager.notify(NOTRAFFIC_NOTIFICATION_ID, builder.getNotificat
ion()); | 746 notificationManager.notify(NOTRAFFIC_NOTIFICATION_ID, builder.getNotificat
ion()); |
737 } | 747 } |
738 }; | 748 }; |
739 | 749 |
740 /** | 750 /** |
741 * Stops no traffic check if traffic is detected by proxy service. | 751 * Stops no traffic check if traffic is detected by proxy service. |
742 */ | 752 */ |
743 private BroadcastReceiver matchesReceiver = new BroadcastReceiver() | 753 private BroadcastReceiver filterReceiver = new BroadcastReceiver() |
744 { | 754 { |
745 @Override | 755 @Override |
746 public void onReceive(final Context context, Intent intent) | 756 public void onReceive(final Context context, Intent intent) |
747 { | 757 { |
| 758 if (intent.getAction().equals(AdblockPlus.BROADCAST_FILTERING_CHANGE)) |
| 759 { |
| 760 NotificationManager notificationManager = (NotificationManager) getSyste
mService(NOTIFICATION_SERVICE); |
| 761 notificationManager.notify(ONGOING_NOTIFICATION_ID, getNotification()); |
| 762 } |
748 if (intent.getAction().equals(AdblockPlus.BROADCAST_FILTER_MATCHES)) | 763 if (intent.getAction().equals(AdblockPlus.BROADCAST_FILTER_MATCHES)) |
749 { | 764 { |
750 proxyManualyConfigured = true; | 765 proxyManualyConfigured = true; |
751 stopNoTrafficCheck(); | 766 stopNoTrafficCheck(); |
752 } | 767 } |
753 } | 768 } |
754 }; | 769 }; |
755 | 770 |
756 /** | 771 /** |
757 * Stops service if proxy fails. | 772 * Stops service if proxy fails. |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
858 @Override | 873 @Override |
859 public void log(int level, Object obj, String message) | 874 public void log(int level, Object obj, String message) |
860 { | 875 { |
861 if (level <= logLevel) | 876 if (level <= logLevel) |
862 { | 877 { |
863 Log.println(7 - level, obj != null ? obj.toString() : TAG, message); | 878 Log.println(7 - level, obj != null ? obj.toString() : TAG, message); |
864 } | 879 } |
865 } | 880 } |
866 } | 881 } |
867 } | 882 } |
OLD | NEW |