preferences fragment: setup use tor preferences changed only once

This commit is contained in:
Michael Pöhn 2019-04-02 05:21:43 +02:00
parent 88f3a68f83
commit 067d39f72d
2 changed files with 37 additions and 25 deletions

View File

@ -4,6 +4,7 @@
* Copyright (C) 2014-2018 Hans-Christoph Steiner <hans@eds.org> * Copyright (C) 2014-2018 Hans-Christoph Steiner <hans@eds.org>
* Copyright (C) 2015-2016 Daniel Martí <mvdan@mvdan.cc> * Copyright (C) 2015-2016 Daniel Martí <mvdan@mvdan.cc>
* Copyright (c) 2018 Senecto Limited * Copyright (c) 2018 Senecto Limited
* Copyright (C) 2019 Michael Pöhn <michael.poehn@fsfe.org>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License

View File

@ -1,4 +1,5 @@
/* /*
* Copyright (C) 2019 Michael Pöhn
* Copyright (C) 2014-2018 Hans-Christoph Steiner * Copyright (C) 2014-2018 Hans-Christoph Steiner
* Copyright (C) 2014-2017 Peter Serwylo * Copyright (C) 2014-2017 Peter Serwylo
* Copyright (C) 2015-2016 Daniel Martí * Copyright (C) 2015-2016 Daniel Martí
@ -26,6 +27,7 @@
package org.fdroid.fdroid.views; package org.fdroid.fdroid.views;
import android.app.Activity; import android.app.Activity;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
@ -44,7 +46,7 @@ import android.support.v7.widget.LinearSmoothScroller;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.WindowManager; import android.view.WindowManager;
import info.guardianproject.netcipher.NetCipher;
import info.guardianproject.netcipher.proxy.OrbotHelper; import info.guardianproject.netcipher.proxy.OrbotHelper;
import org.fdroid.fdroid.CleanCacheService; import org.fdroid.fdroid.CleanCacheService;
import org.fdroid.fdroid.FDroidApp; import org.fdroid.fdroid.FDroidApp;
@ -121,7 +123,9 @@ public class PreferencesFragment extends PreferenceFragment
installHistoryPref.setVisible(keepInstallHistoryPref.isChecked()); installHistoryPref.setVisible(keepInstallHistoryPref.isChecked());
useTorCheckPref = (SwitchPreference) findPreference(Preferences.PREF_USE_TOR); useTorCheckPref = (SwitchPreference) findPreference(Preferences.PREF_USE_TOR);
useTorCheckPref.setOnPreferenceChangeListener(useTorChangedListener);
enableProxyCheckPref = (SwitchPreference) findPreference(Preferences.PREF_ENABLE_PROXY); enableProxyCheckPref = (SwitchPreference) findPreference(Preferences.PREF_ENABLE_PROXY);
enableProxyCheckPref.setOnPreferenceChangeListener(proxyEnabledChangedListener);
updateAutoDownloadPref = findPreference(Preferences.PREF_AUTO_DOWNLOAD_INSTALL_UPDATES); updateAutoDownloadPref = findPreference(Preferences.PREF_AUTO_DOWNLOAD_INSTALL_UPDATES);
overWifiSeekBar = (LiveSeekBarPreference) findPreference(Preferences.PREF_OVER_WIFI); overWifiSeekBar = (LiveSeekBarPreference) findPreference(Preferences.PREF_OVER_WIFI);
@ -445,30 +449,37 @@ public class PreferencesFragment extends PreferenceFragment
/** /**
* The default for "Use Tor" is dynamically set based on whether Orbot is installed. * The default for "Use Tor" is dynamically set based on whether Orbot is installed.
*/ */
private void initUseTorPreference() { private void initUseTorPreference(Context context) {
boolean useTor = Preferences.get().isTorEnabled(); useTorCheckPref.setDefaultValue(OrbotHelper.isOrbotInstalled(context));
useTorCheckPref.setDefaultValue(useTor); useTorCheckPref.setChecked(Preferences.get().isTorEnabled());
useTorCheckPref.setChecked(useTor); }
useTorCheckPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
private final Preference.OnPreferenceChangeListener useTorChangedListener = new Preference.OnPreferenceChangeListener() {
@Override @Override
public boolean onPreferenceChange(Preference preference, Object enabled) { public boolean onPreferenceChange(Preference preference, Object enabled) {
if ((Boolean) enabled) { if ((Boolean) enabled) {
enableProxyCheckPref.setChecked(false);
final Activity activity = getActivity(); final Activity activity = getActivity();
enableProxyCheckPref.setEnabled(false);
if (!OrbotHelper.isOrbotInstalled(activity)) { if (!OrbotHelper.isOrbotInstalled(activity)) {
Intent intent = OrbotHelper.getOrbotInstallIntent(activity); Intent intent = OrbotHelper.getOrbotInstallIntent(activity);
activity.startActivityForResult(intent, REQUEST_INSTALL_ORBOT); activity.startActivityForResult(intent, REQUEST_INSTALL_ORBOT);
} }
// NetCipher gets configured to use Tor in onPause() // NetCipher gets configured to use Tor in onPause()
// via a call to FDroidApp.configureProxy() // via a call to FDroidApp.configureProxy()
} else {
enableProxyCheckPref.setEnabled(true);
NetCipher.clearProxy();
} }
return true; return true;
} }
}); };
private final Preference.OnPreferenceChangeListener proxyEnabledChangedListener = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object enabled) {
if ((Boolean) enabled) {
useTorCheckPref.setChecked(false);
} }
return true;
}
};
@Override @Override
public void onResume() { public void onResume() {
@ -484,7 +495,7 @@ public class PreferencesFragment extends PreferenceFragment
initAutoFetchUpdatesPreference(); initAutoFetchUpdatesPreference();
initPrivilegedInstallerPreference(); initPrivilegedInstallerPreference();
initUseTorPreference(); initUseTorPreference(getActivity().getApplicationContext());
} }
@Override @Override