commit f433a5e6556c93386c5e018285efe038c83afa8f Author: Hans-Christoph Steiner hans@eds.org Date: Wed Jun 10 14:46:05 2015 -0400
expose start action via a BroadcastReceiver that any app can send to
This allows any app to broadcast an Intent to Orbot in order to make Orbot start in the background.
closes #3117 https://dev.guardianproject.info/issues/3117 --- AndroidManifest.xml | 10 +++++++++- src/org/torproject/android/OrbotMainActivity.java | 10 +++++----- .../torproject/android/service/OnBootReceiver.java | 4 ++-- .../android/service/StartTorReceiver.java | 20 ++++++++++++++++++++ src/org/torproject/android/service/TorService.java | 2 +- .../android/service/TorServiceConstants.java | 2 +- 6 files changed, 38 insertions(+), 10 deletions(-)
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 603ac70..23f5e4e 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -87,7 +87,15 @@ android:permission="org.torproject.android.MANAGE_TOR" android:stopWithTask="false" > </service> - + + <receiver + android:name=".service.StartTorReceiver" + android:exported="true"> + <intent-filter> + <action android:name="org.torproject.android.intent.action.START" /> + </intent-filter> + </receiver> + <receiver android:name="org.torproject.android.service.OnBootReceiver" android:enabled="true" android:exported="true" diff --git a/src/org/torproject/android/OrbotMainActivity.java b/src/org/torproject/android/OrbotMainActivity.java index 38d3a80..bfa777d 100644 --- a/src/org/torproject/android/OrbotMainActivity.java +++ b/src/org/torproject/android/OrbotMainActivity.java @@ -924,11 +924,11 @@ public class OrbotMainActivity extends Activity } } } - - private void requestTorRereadConfig() { - sendIntentToService (TorServiceConstants.CMD_START); + + private void requestTorRereadConfig() { + sendIntentToService(TorServiceConstants.CMD_SIGNAL_HUP); } - + public void promptStartVpnService () { LayoutInflater li = LayoutInflater.from(this); @@ -1127,7 +1127,7 @@ public class OrbotMainActivity extends Activity imgStatus.setImageResource(R.drawable.torstarting); lblStatus.setText(getString(R.string.status_starting_up));
- sendIntentToService(TorServiceConstants.CMD_START); + sendIntentToService(TorServiceConstants.ACTION_START);
//we send a message here to the progressDialog i believe, but we can clarify that shortly Message msg = mStatusUpdateHandler.obtainMessage(STATUS_UPDATE); diff --git a/src/org/torproject/android/service/OnBootReceiver.java b/src/org/torproject/android/service/OnBootReceiver.java index 49c4ab8..2429c4d 100644 --- a/src/org/torproject/android/service/OnBootReceiver.java +++ b/src/org/torproject/android/service/OnBootReceiver.java @@ -16,8 +16,8 @@ public class OnBootReceiver extends BroadcastReceiver { Prefs.setContext(context); if (Prefs.startOnBoot()) { - startService(TorServiceConstants.CMD_START,context); - + startService(TorServiceConstants.ACTION_START, context); + if (Prefs.useVpn()) startVpnService(context); } diff --git a/src/org/torproject/android/service/StartTorReceiver.java b/src/org/torproject/android/service/StartTorReceiver.java new file mode 100644 index 0000000..c236484 --- /dev/null +++ b/src/org/torproject/android/service/StartTorReceiver.java @@ -0,0 +1,20 @@ + +package org.torproject.android.service; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; + +public class StartTorReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + /* sanitize the Intent before forwarding it to TorService */ + if (TextUtils.equals(intent.getAction(), TorServiceConstants.ACTION_START)) { + Intent startTorService = new Intent(context, TorService.class); + startTorService.setAction(intent.getAction()); + context.startService(startTorService); + } + } +} diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java index 089e2c6..efde5c6 100644 --- a/src/org/torproject/android/service/TorService.java +++ b/src/org/torproject/android/service/TorService.java @@ -341,7 +341,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon String action = mIntent.getAction();
if (action != null) { - if (action.equals(CMD_START)) { + if (action.equals(ACTION_START)) { startTor(); // stopTor() is called when the Service is destroyed } else if (action.equals(CMD_SIGNAL_HUP)) { diff --git a/src/org/torproject/android/service/TorServiceConstants.java b/src/org/torproject/android/service/TorServiceConstants.java index c31a670..96715b6 100644 --- a/src/org/torproject/android/service/TorServiceConstants.java +++ b/src/org/torproject/android/service/TorServiceConstants.java @@ -67,6 +67,7 @@ public interface TorServiceConstants { //control port public final static String TOR_CONTROL_PORT_MSG_BOOTSTRAP_DONE = "Bootstrapped 100%";
+ public final static String ACTION_START = "org.torproject.android.intent.action.START"; public final static String ACTION_STATUS = "org.torproject.android.intent.action.STATUS"; public final static String EXTRA_STATUS = "org.torproject.android.intent.extra.STATUS";
@@ -79,7 +80,6 @@ public interface TorServiceConstants { public final static String STATUS_STARTING = "STARTING"; public final static String STATUS_STOPPING = "STOPPING";
- public static final String CMD_START = "start"; public static final String CMD_SIGNAL_HUP = "signal_hup"; public static final String CMD_FLUSH = "flush"; public static final String CMD_NEWNYM = "newnym";