diff --git a/Orbot/src/org/torproject/android/Orbot.java b/Orbot/src/org/torproject/android/Orbot.java index 7ce41753..34be7c79 100644 --- a/Orbot/src/org/torproject/android/Orbot.java +++ b/Orbot/src/org/torproject/android/Orbot.java @@ -631,39 +631,37 @@ public class Orbot extends Activity implements OnClickListener, TorConstants, On { try { + if (mService == null) { } else if (mService.getStatus() == STATUS_READY) { + mService.setProfile(PROFILE_ON); //this means turn on - updateStatus(""); + imgStatus.setImageResource(R.drawable.torstarting); + lblStatus.setText(getString(R.string.status_starting_up)); + + Message msg = mHandler.obtainMessage(ENABLE_TOR_MSG); + mHandler.sendMessage(msg); + + updateStatus(""); - processSettings(); - - - if (hasRoot && enableTransparentProxy) - { - - TorTransProxy.setDNSProxying(); - TorTransProxy.setTransparentProxying(this,TorServiceUtils.getApps(this)); - } } else { mService.setProfile(PROFILE_ONDEMAND); //these means turn off - updateStatus(""); - if (hasRoot && enableTransparentProxy) - { - TorTransProxy.purgeNatIptables(); - //TorRoot.setDNSProxying(false); - //TorRoot.setTransparentProxying(this,false); - } + Message msg = mHandler.obtainMessage(DISABLE_TOR_MSG); + mHandler.sendMessage(msg); + + updateStatus(""); + } + } catch (Exception e) { @@ -675,6 +673,31 @@ public class Orbot extends Activity implements OnClickListener, TorConstants, On } + private void doTorSetup (boolean enabled) + { + if (enabled) + { + processSettings(); + + + if (hasRoot && enableTransparentProxy) + { + + TorTransProxy.setDNSProxying(); + TorTransProxy.setTransparentProxying(this,TorServiceUtils.getApps(this)); + } + } + else + { + if (hasRoot && enableTransparentProxy) + { + TorTransProxy.purgeNatIptables(); + //TorRoot.setDNSProxying(false); + //TorRoot.setTransparentProxying(this,false); + } + } + } + /** * This implementation is used to receive callbacks from the remote * service. @@ -697,6 +720,8 @@ public class Orbot extends Activity implements OnClickListener, TorConstants, On private static final int BUMP_MSG = 1; + private static final int ENABLE_TOR_MSG = 2; + private static final int DISABLE_TOR_MSG = 3; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -711,6 +736,15 @@ public class Orbot extends Activity implements OnClickListener, TorConstants, On updateStatus(torServiceMsg); break; + case ENABLE_TOR_MSG: + + doTorSetup(true); + break; + case DISABLE_TOR_MSG: + + doTorSetup(false); + break; + default: super.handleMessage(msg); } diff --git a/Orbot/src/org/torproject/android/service/TorService.java b/Orbot/src/org/torproject/android/service/TorService.java index 5af9c294..74f3ea3e 100644 --- a/Orbot/src/org/torproject/android/service/TorService.java +++ b/Orbot/src/org/torproject/android/service/TorService.java @@ -699,6 +699,8 @@ public class TorService extends Service implements TorServiceConstants, Runnable public void setProfile (int profile) { setTorProfile(profile); + sendCallbackMessage(""); + } };