commit 078d1f89036764b9486cd4de841ad2bfcd748ac0
Author: Matthew Finkel <Matthew.Finkel(a)gmail.com>
Date: Wed Nov 14 17:38:08 2018 +0000
Bug 28051 - Launch Orbot if it isn't running in the background
---
.../base/java/org/mozilla/gecko/BrowserApp.java | 64 ++++++----------------
.../java/org/mozilla/gecko/GeckoApplication.java | 10 ++++
.../main/java/org/mozilla/gecko/GeckoAppShell.java | 11 ----
3 files changed, 26 insertions(+), 59 deletions(-)
diff --git a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
index 5efd83398775..814b46f24295 100644
--- a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
@@ -181,7 +181,8 @@ import org.mozilla.gecko.widget.GeckoActionProvider;
import org.mozilla.gecko.widget.SplashScreen;
import org.mozilla.geckoview.GeckoSession;
-import info.guardianproject.netcipher.proxy.OrbotHelper;
+import org.torproject.android.OrbotMainActivity;
+import org.torproject.android.service.TorServiceConstants;
import java.io.File;
import java.io.FileNotFoundException;
@@ -239,6 +240,7 @@ public class BrowserApp extends GeckoApp
public static final int ACTIVITY_REQUEST_TRIPLE_READERVIEW = 4001;
public static final int ACTIVITY_RESULT_TRIPLE_READERVIEW_ADD_BOOKMARK = 4002;
public static final int ACTIVITY_RESULT_TRIPLE_READERVIEW_IGNORE = 4003;
+ public static final int ACTIVITY_RESULT_ORBOT_LAUNCH = 5001;
public static final String ACTION_VIEW_MULTIPLE = AppConstants.ANDROID_PACKAGE_NAME + ".action.VIEW_MULTIPLE";
@@ -267,6 +269,8 @@ public class BrowserApp extends GeckoApp
private HomeScreen mHomeScreen;
private TabsPanel mTabsPanel;
+ private boolean mOrbotNeedsStart = true;
+
private boolean showSplashScreen = false;
private SplashScreen splashScreen;
/**
@@ -1278,45 +1282,11 @@ public class BrowserApp extends GeckoApp
}
}
- private BroadcastReceiver torStatusReceiver = new BroadcastReceiver() {
-
- @Override
- public void onReceive(Context context, Intent intent) {
- if (TextUtils.equals(intent.getAction(), OrbotHelper.ACTION_STATUS)) {
- GeckoAppShell.setTorStatus(intent);
- }
- }
- };
-
public void checkStartOrbot() {
- if (!OrbotHelper.isOrbotInstalled(this)) {
- final Intent installOrbotIntent = OrbotHelper.getOrbotInstallIntent(this);
-
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle(R.string.install_orbot);
- builder.setMessage(R.string.you_must_have_orbot);
- builder.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialogInterface, int i) {
- startActivity(installOrbotIntent);
- }
- });
- builder.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialogInterface, int i) {
- }
- });
- builder.show();
- } else {
- /* run in thread so Tor status updates will be received while the
- * Gecko event sync is blocking the main thread */
- HandlerThread handlerThread = new HandlerThread("torStatusReceiver");
- handlerThread.start();
- Looper looper = handlerThread.getLooper();
- Handler handler = new Handler(looper);
- registerReceiver(torStatusReceiver, new IntentFilter(OrbotHelper.ACTION_STATUS),
- null, handler);
- OrbotHelper.requestStartTor(this);
+ if (mOrbotNeedsStart) {
+ final String orbotStartAction = "android.intent.action.MAIN";
+ final Intent launchOrbot = new Intent(orbotStartAction, null, this, OrbotMainActivity.class);
+ startActivityForResult(launchOrbot, ACTIVITY_RESULT_ORBOT_LAUNCH, null);
}
}
@@ -1358,15 +1328,6 @@ public class BrowserApp extends GeckoApp
for (BrowserAppDelegate delegate : delegates) {
delegate.onPause(this);
}
-
- if (torStatusReceiver != null)
- {
- try {
- unregisterReceiver(torStatusReceiver);
- } catch (IllegalArgumentException e) {
- Log.w(LOGTAG, "Tor status receiver couldn't be unregistered", e);
- }
- }
}
@Override
@@ -1801,6 +1762,8 @@ public class BrowserApp extends GeckoApp
NotificationHelper.destroy();
GeckoNetworkManager.destroy();
+ mOrbotNeedsStart = true;
+
super.onDestroy();
}
@@ -3018,6 +2981,11 @@ public class BrowserApp extends GeckoApp
TabQueueHelper.processTabQueuePromptResponse(resultCode, this);
break;
+ case ACTIVITY_RESULT_ORBOT_LAUNCH:
+ Log.d(LOGTAG, "onActivityResult: ACTIVITY_RESULT_ORBOT_LAUNCH");
+ mOrbotNeedsStart = false;
+ break;
+
default:
for (final BrowserAppDelegate delegate : delegates) {
delegate.onActivityResult(this, requestCode, resultCode, data);
diff --git a/mobile/android/base/java/org/mozilla/gecko/GeckoApplication.java b/mobile/android/base/java/org/mozilla/gecko/GeckoApplication.java
index e896134e0af9..b8e4985332a9 100644
--- a/mobile/android/base/java/org/mozilla/gecko/GeckoApplication.java
+++ b/mobile/android/base/java/org/mozilla/gecko/GeckoApplication.java
@@ -62,6 +62,9 @@ import java.lang.reflect.Method;
import java.net.URL;
import java.util.UUID;
+import org.torproject.android.service.util.Prefs;
+import org.torproject.android.settings.Languages;
+
public class GeckoApplication extends Application
implements HapticFeedbackDelegate {
private static final String LOG_TAG = "GeckoApplication";
@@ -319,6 +322,13 @@ public class GeckoApplication extends Application
"Profile:Create",
null);
+ // Give Orbot the base Context
+ Prefs.setContext(context);
+
+ // Initialize Orbot's Language settings
+ Languages.setup(BrowserApp.class, R.string.menu_settings);
+ Languages.setLanguage(this, Prefs.getDefaultLocale(), true);
+
super.onCreate();
}
diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java
index f67603f853e2..34ba3315f295 100644
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java
@@ -1895,15 +1895,4 @@ public class GeckoAppShell
public static String getDefaultLocale() {
return Locale.getDefault().toString();
}
-
- public static void setTorStatus(Intent intent) {
- sTorStatus = intent.getStringExtra(OrbotHelper.EXTRA_STATUS);
- if (OrbotHelper.STATUS_ON.equals(sTorStatus)) {
- sendPendingUrlIntents();
- }
- }
-
- public static String getTorStatus() {
- return sTorStatus;
- }
}