From 88f3a68f835c2ee39fb2894125e719d7a2fd99fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Mon, 1 Apr 2019 22:56:47 +0200 Subject: [PATCH] deduplicate error prone proxy settings code --- .../main/java/org/fdroid/fdroid/FDroidApp.java | 15 +++++++++------ .../main/java/org/fdroid/fdroid/Preferences.java | 14 +------------- .../fdroid/fdroid/views/PreferencesFragment.java | 8 ++++---- 3 files changed, 14 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java index 9d7e3a886..dc8bac835 100644 --- a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java +++ b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java @@ -388,7 +388,8 @@ public class FDroidApp extends Application { PRNGFixes.apply(); curTheme = preferences.getTheme(); - preferences.configureProxy(); + configureProxy(preferences); + // bug specific to exactly 5.0 makes it only work with the old index // which includes an ugly, hacky workaround @@ -485,8 +486,6 @@ public class FDroidApp extends Application { } }); - configureTor(preferences.isTorEnabled()); - if (preferences.isKeepingInstallHistory()) { InstallHistoryService.register(this); } @@ -641,11 +640,15 @@ public class FDroidApp extends Application { } /** - * Set the proxy settings based on whether Tor should be enabled or not. + * Put proxy settings (or Tor settings) globally into effect based on whats configured in Preferences. + * + * Must be called on App startup and after every proxy configuration change. */ - private static void configureTor(boolean enabled) { - if (enabled) { + public static void configureProxy(Preferences preferences) { + if (preferences.isTorEnabled()) { NetCipher.useTor(); + } else if (preferences.isProxyEnabled()) { + NetCipher.setProxy(preferences.getProxyHost(), preferences.getProxyPort()); } else { NetCipher.clearProxy(); } diff --git a/app/src/main/java/org/fdroid/fdroid/Preferences.java b/app/src/main/java/org/fdroid/fdroid/Preferences.java index e123a654b..adeabe514 100644 --- a/app/src/main/java/org/fdroid/fdroid/Preferences.java +++ b/app/src/main/java/org/fdroid/fdroid/Preferences.java @@ -481,22 +481,10 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh return preferences.getBoolean(PREF_USE_TOR, IGNORED_B); } - private boolean isProxyEnabled() { + public boolean isProxyEnabled() { return preferences.getBoolean(PREF_ENABLE_PROXY, IGNORED_B); } - /** - * Configure the proxy settings based on whether its enabled and set up. This must be - * run once at app startup, then whenever any of these settings changes. - */ - public void configureProxy() { - if (isProxyEnabled()) { - // if "Use Tor" is set, NetCipher will ignore these proxy settings - SocketAddress sa = new InetSocketAddress(getProxyHost(), getProxyPort()); - NetCipher.setProxy(new Proxy(Proxy.Type.HTTP, sa)); - } - } - public String getProxyHost() { return preferences.getString(PREF_PROXY_HOST, DEFAULT_PROXY_HOST); } diff --git a/app/src/main/java/org/fdroid/fdroid/views/PreferencesFragment.java b/app/src/main/java/org/fdroid/fdroid/views/PreferencesFragment.java index c8879f625..e8e8aa9a1 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/PreferencesFragment.java +++ b/app/src/main/java/org/fdroid/fdroid/views/PreferencesFragment.java @@ -455,12 +455,12 @@ public class PreferencesFragment extends PreferenceFragment if ((Boolean) enabled) { final Activity activity = getActivity(); enableProxyCheckPref.setEnabled(false); - if (OrbotHelper.isOrbotInstalled(activity)) { - NetCipher.useTor(); - } else { + if (!OrbotHelper.isOrbotInstalled(activity)) { Intent intent = OrbotHelper.getOrbotInstallIntent(activity); activity.startActivityForResult(intent, REQUEST_INSTALL_ORBOT); } + // NetCipher gets configured to use Tor in onPause() + // via a call to FDroidApp.configureProxy() } else { enableProxyCheckPref.setEnabled(true); NetCipher.clearProxy(); @@ -491,7 +491,7 @@ public class PreferencesFragment extends PreferenceFragment public void onPause() { super.onPause(); getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); - Preferences.get().configureProxy(); + FDroidApp.configureProxy(Preferences.get()); if (updateIntervalPrevious != updateIntervalSeekBar.getValue()) { UpdateService.schedule(getActivity());