WgQuickBackend: by default use single-tunnel mode like GoBackend, but add option

Note that this currently doesn't play well with people activating
wg-quick tunnels from outside the app. Those tunnels won't be
deactivated. But presumably that's desired behavior anyway, considering
people are mucking around at the command line.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
Jason A. Donenfeld
2020-03-09 10:02:00 -06:00
parent 134f9c014e
commit d62526fde6
5 changed files with 64 additions and 6 deletions
@@ -35,7 +35,7 @@ import java.util.Locale;
import java9.util.concurrent.CompletableFuture;
public class Application extends android.app.Application {
public class Application extends android.app.Application implements SharedPreferences.OnSharedPreferenceChangeListener {
private static final String TAG = "WireGuard/" + Application.class.getSimpleName();
public static final String USER_AGENT;
@@ -86,7 +86,9 @@ public class Application extends android.app.Application {
try {
if (!didStartRootShell)
app.rootShell.start();
backend = new WgQuickBackend(app.getApplicationContext(), app.rootShell, app.toolsInstaller);
WgQuickBackend wgQuickBackend = new WgQuickBackend(app.getApplicationContext(), app.rootShell, app.toolsInstaller);
wgQuickBackend.setMultipleTunnels(app.sharedPreferences.getBoolean("multiple_tunnels", false));
backend = wgQuickBackend;
} catch (final Exception ignored) {
}
}
@@ -167,5 +169,19 @@ public class Application extends android.app.Application {
tunnelManager.onCreate();
asyncWorker.supplyAsync(Application::getBackend).thenAccept(futureBackend::complete);
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onTerminate() {
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this);
super.onTerminate();
}
@Override
public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key) {
if ("multiple_tunnels".equals(key) && backend != null && backend instanceof WgQuickBackend)
((WgQuickBackend)backend).setMultipleTunnels(sharedPreferences.getBoolean(key, false));
}
}
@@ -99,7 +99,8 @@ public class SettingsActivity extends ThemeChangeAwareActivity {
final Preference wgQuickOnlyPrefs[] = {
getPreferenceManager().findPreference("tools_installer"),
getPreferenceManager().findPreference("restore_on_boot")
getPreferenceManager().findPreference("restore_on_boot"),
getPreferenceManager().findPreference("multiple_tunnels")
};
for (final Preference pref : wgQuickOnlyPrefs)
pref.setVisible(false);