| Index: src/org/adblockplus/android/Preferences.java | 
| diff --git a/src/org/adblockplus/android/Preferences.java b/src/org/adblockplus/android/Preferences.java | 
| index 91f79ef2b3d353a160d8dc9c73e34001a6d0b599..190344e8103386c076584ae58931b22598544c21 100755 | 
| --- a/src/org/adblockplus/android/Preferences.java | 
| +++ b/src/org/adblockplus/android/Preferences.java | 
| @@ -28,19 +28,16 @@ import org.jraf.android.backport.switchwidget.SwitchPreference; | 
| import android.app.AlertDialog; | 
| import android.app.Dialog; | 
| import android.content.BroadcastReceiver; | 
| -import android.content.ComponentName; | 
| import android.content.Context; | 
| import android.content.DialogInterface; | 
| import android.content.Intent; | 
| import android.content.IntentFilter; | 
| -import android.content.ServiceConnection; | 
| import android.content.SharedPreferences; | 
| import android.content.pm.PackageManager.NameNotFoundException; | 
| import android.content.res.AssetManager; | 
| import android.net.Uri; | 
| import android.os.Build; | 
| import android.os.Bundle; | 
| -import android.os.IBinder; | 
| import android.preference.CheckBoxPreference; | 
| import android.preference.ListPreference; | 
| import android.preference.PreferenceManager; | 
| @@ -66,17 +63,30 @@ public class Preferences extends SummarizedPreferences | 
| private static final int ABOUT_DIALOG = 1; | 
| private static final int HIDEICONWARNING_DIALOG = 2; | 
|  | 
| -  private static ProxyService proxyService = null; | 
| private static boolean firstRunActionsPending = true; | 
|  | 
| private RefreshableListPreference subscriptionList; | 
| private String subscriptionSummary; | 
|  | 
| +  private ServiceBinder serviceBinder = null; | 
| + | 
| @Override | 
| public void onCreate(final Bundle savedInstanceState) | 
| { | 
| super.onCreate(savedInstanceState); | 
|  | 
| +    this.serviceBinder = new ServiceBinder(this).setOnConnectHandler(new ServiceBinder.OnConnectHandler() | 
| +    { | 
| +      @Override | 
| +      public void onConnect(final ProxyService proxyService) | 
| +      { | 
| +        if (proxyService.isManual() && !proxyService.isRegistered()) | 
| +        { | 
| +          Preferences.this.showConfigurationMsg(Preferences.this.getString(R.string.msg_configuration)); | 
| +        } | 
| +      } | 
| +    }); | 
| + | 
| PreferenceManager.setDefaultValues(this, R.xml.preferences, true); | 
| PreferenceManager.setDefaultValues(this, R.xml.preferences_advanced, true); | 
| setContentView(R.layout.preferences); | 
| @@ -204,7 +214,7 @@ public class Preferences extends SummarizedPreferences | 
| if (enabled || firstRun || (proxyenabled && !autoconfigured)) | 
| setProxyEnabled(true); | 
|  | 
| -    bindService(new Intent(this, ProxyService.class), proxyServiceConnection, 0); | 
| +    this.serviceBinder.bind(); | 
| } | 
|  | 
| private void showNotificationDialog(final String title, String message, String url) | 
| @@ -236,8 +246,7 @@ public class Preferences extends SummarizedPreferences | 
| // ignore - it is thrown if receiver is not registered but it can not be | 
| // true in normal conditions | 
| } | 
| -    unbindService(proxyServiceConnection); | 
| -    proxyService = null; | 
| +    this.serviceBinder.unbind(); | 
|  | 
| hideConfigurationMsg(); | 
| } | 
| @@ -350,7 +359,11 @@ public class Preferences extends SummarizedPreferences | 
|  | 
| public void showProxySettings(final View v) | 
| { | 
| -    startActivity(new Intent(this, ProxyConfigurationActivity.class).putExtra("port", proxyService.port)); | 
| +    final ProxyService proxyService = this.serviceBinder.get(); | 
| +    if (proxyService != null) | 
| +    { | 
| +      startActivity(new Intent(this, ProxyConfigurationActivity.class).putExtra("port", proxyService.port)); | 
| +    } | 
| } | 
|  | 
| @Override | 
| @@ -435,6 +448,7 @@ public class Preferences extends SummarizedPreferences | 
| final boolean hideIcon = sharedPreferences.getBoolean(key, false); | 
| if (hideIcon) | 
| showDialog(HIDEICONWARNING_DIALOG); | 
| +      final ProxyService proxyService = this.serviceBinder.get(); | 
| if (proxyService != null) | 
| proxyService.setEmptyIcon(hideIcon); | 
| } | 
| @@ -559,24 +573,4 @@ public class Preferences extends SummarizedPreferences | 
| outState.putString("subscriptionSummary", subscriptionSummary); | 
| super.onSaveInstanceState(outState); | 
| } | 
| - | 
| -  private final ServiceConnection proxyServiceConnection = new ServiceConnection() | 
| -  { | 
| -    @Override | 
| -    public void onServiceConnected(final ComponentName className, final IBinder service) | 
| -    { | 
| -      proxyService = ((ProxyService.LocalBinder) service).getService(); | 
| -      Log.d(TAG, "Proxy service connected"); | 
| - | 
| -      if (proxyService.isManual() && proxyService.noTraffic()) | 
| -        showConfigurationMsg(getString(R.string.msg_configuration)); | 
| -    } | 
| - | 
| -    @Override | 
| -    public void onServiceDisconnected(final ComponentName className) | 
| -    { | 
| -      proxyService = null; | 
| -      Log.d(TAG, "Proxy service disconnected"); | 
| -    } | 
| -  }; | 
| } | 
|  |