added proxy/tor preferences
This commit is contained in:
@@ -22,6 +22,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.preference.EditTextPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceFragment;
|
||||
import android.preference.PreferenceScreen;
|
||||
@@ -33,9 +34,11 @@ import android.widget.LinearLayout;
|
||||
import org.sufficientlysecure.keychain.Constants;
|
||||
import org.sufficientlysecure.keychain.R;
|
||||
import org.sufficientlysecure.keychain.compatibility.AppCompatPreferenceActivity;
|
||||
import org.sufficientlysecure.keychain.ui.util.Notify;
|
||||
import org.sufficientlysecure.keychain.ui.widget.IntegerListPreference;
|
||||
import org.sufficientlysecure.keychain.util.Log;
|
||||
import org.sufficientlysecure.keychain.util.Preferences;
|
||||
import org.sufficientlysecure.keychain.util.orbot.OrbotHelper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -209,6 +212,285 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
|
||||
}
|
||||
}
|
||||
|
||||
public static class ProxyPrefsFragment extends PreferenceFragment {
|
||||
private CheckBoxPreference mUseTor;
|
||||
private CheckBoxPreference mUseNormalProxy;
|
||||
private EditTextPreference mProxyHost;
|
||||
private EditTextPreference mProxyPort;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
// Load the preferences from an XML resource
|
||||
addPreferencesFromResource(R.xml.proxy_prefs);
|
||||
|
||||
mUseTor = (CheckBoxPreference) findPreference(Constants.Pref.USE_TOR_PROXY);
|
||||
mUseNormalProxy = (CheckBoxPreference) findPreference(Constants.Pref.USE_NORMAL_PROXY);
|
||||
mProxyHost = (EditTextPreference) findPreference(Constants.Pref.PROXY_HOST);
|
||||
mProxyPort = (EditTextPreference) findPreference(Constants.Pref.PROXY_PORT);
|
||||
|
||||
initializeUseTorPref();
|
||||
initializeUseNormalProxyPref();
|
||||
initialiseEditTextPreferences();
|
||||
|
||||
if (mUseTor.isChecked()) disableNormalProxyPrefs();
|
||||
else if (mUseNormalProxy.isChecked()) disableUseTorPrefs();
|
||||
}
|
||||
|
||||
private void initializeUseTorPref() {
|
||||
mUseTor.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
if ((Boolean)newValue) {
|
||||
OrbotHelper orbotHelper = new OrbotHelper(ProxyPrefsFragment.this.getActivity());
|
||||
boolean installed = orbotHelper.isOrbotInstalled();
|
||||
if (!installed) {
|
||||
Log.d(Constants.TAG, "Prompting to install Tor");
|
||||
orbotHelper.promptToInstall(ProxyPrefsFragment.this.getActivity());
|
||||
// don't let the user check the box until he's installed orbot
|
||||
return false;
|
||||
} else {
|
||||
disableNormalProxyPrefs();
|
||||
// let the enable tor box be checked
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// we're unchecking Tor, so enable other proxy
|
||||
enableNormalProxyPrefs();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void initializeUseNormalProxyPref() {
|
||||
mUseNormalProxy.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
if ((Boolean) newValue) {
|
||||
disableUseTorPrefs();
|
||||
} else {
|
||||
enableUseTorPrefs();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void initialiseEditTextPreferences() {
|
||||
mProxyHost.setSummary(mProxyHost.getText());
|
||||
mProxyPort.setSummary(mProxyPort.getText());
|
||||
|
||||
mProxyHost.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
if (newValue.equals("")) {
|
||||
Notify.create(
|
||||
ProxyPrefsFragment.this.getActivity(),
|
||||
R.string.pref_proxy_host_err_invalid,
|
||||
Notify.Style.ERROR
|
||||
).show();
|
||||
return false;
|
||||
} else {
|
||||
mProxyHost.setSummary((CharSequence) newValue);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
mProxyPort.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
try {
|
||||
int port = Integer.parseInt((String) newValue);
|
||||
if(port < 0 || port > 65535) {
|
||||
Notify.create(
|
||||
ProxyPrefsFragment.this.getActivity(),
|
||||
R.string.pref_proxy_port_err_invalid,
|
||||
Notify.Style.ERROR
|
||||
).show();
|
||||
return false;
|
||||
}
|
||||
// no issues, save port
|
||||
mProxyPort.setSummary("" + port);
|
||||
return true;
|
||||
} catch (NumberFormatException e) {
|
||||
Notify.create(
|
||||
ProxyPrefsFragment.this.getActivity(),
|
||||
R.string.pref_proxy_port_err_invalid,
|
||||
Notify.Style.ERROR
|
||||
).show();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void disableNormalProxyPrefs() {
|
||||
mUseNormalProxy.setChecked(false);
|
||||
mUseNormalProxy.setEnabled(false);
|
||||
mProxyHost.setEnabled(false);
|
||||
mProxyPort.setEnabled(false);
|
||||
}
|
||||
|
||||
private void enableNormalProxyPrefs() {
|
||||
mUseNormalProxy.setEnabled(true);
|
||||
mProxyHost.setEnabled(true);
|
||||
mProxyPort.setEnabled(true);
|
||||
}
|
||||
|
||||
private void disableUseTorPrefs() {
|
||||
mUseTor.setChecked(false);
|
||||
mUseTor.setEnabled(false);
|
||||
}
|
||||
|
||||
private void enableUseTorPrefs() {
|
||||
mUseTor.setEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.KITKAT)
|
||||
public static class ProxyPrefsFragment extends PreferenceFragment {
|
||||
private CheckBoxPreference mUseTor;
|
||||
private CheckBoxPreference mUseNormalProxy;
|
||||
private EditTextPreference mProxyHost;
|
||||
private EditTextPreference mProxyPort;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
// Load the preferences from an XML resource
|
||||
addPreferencesFromResource(R.xml.proxy_prefs);
|
||||
|
||||
mUseTor = (CheckBoxPreference) findPreference(Constants.Pref.USE_TOR_PROXY);
|
||||
mUseNormalProxy = (CheckBoxPreference) findPreference(Constants.Pref.USE_NORMAL_PROXY);
|
||||
mProxyHost = (EditTextPreference) findPreference(Constants.Pref.PROXY_HOST);
|
||||
mProxyPort = (EditTextPreference) findPreference(Constants.Pref.PROXY_PORT);
|
||||
|
||||
initializeUseTorPref();
|
||||
initializeUseNormalProxyPref();
|
||||
initialiseEditTextPreferences();
|
||||
|
||||
if (mUseTor.isChecked()) disableNormalProxyPrefs();
|
||||
else if (mUseNormalProxy.isChecked()) disableUseTorPrefs();
|
||||
}
|
||||
|
||||
private void initializeUseTorPref() {
|
||||
mUseTor.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
if ((Boolean)newValue) {
|
||||
OrbotHelper orbotHelper = new OrbotHelper(ProxyPrefsFragment.this.getActivity());
|
||||
boolean installed = orbotHelper.isOrbotInstalled();
|
||||
if (!installed) {
|
||||
Log.d(Constants.TAG, "Prompting to install Tor");
|
||||
orbotHelper.promptToInstall(ProxyPrefsFragment.this.getActivity());
|
||||
// don't let the user check the box until he's installed orbot
|
||||
return false;
|
||||
} else {
|
||||
disableNormalProxyPrefs();
|
||||
// let the enable tor box be checked
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// we're unchecking Tor, so enable other proxy
|
||||
enableNormalProxyPrefs();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void initializeUseNormalProxyPref() {
|
||||
mUseNormalProxy.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
if ((Boolean) newValue) {
|
||||
disableUseTorPrefs();
|
||||
} else {
|
||||
enableUseTorPrefs();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void initialiseEditTextPreferences() {
|
||||
mProxyHost.setSummary(mProxyHost.getText());
|
||||
mProxyPort.setSummary(mProxyPort.getText());
|
||||
|
||||
mProxyHost.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
if (newValue.equals("")) {
|
||||
Notify.create(
|
||||
ProxyPrefsFragment.this.getActivity(),
|
||||
R.string.pref_proxy_host_err_invalid,
|
||||
Notify.Style.ERROR
|
||||
).show();
|
||||
return false;
|
||||
} else {
|
||||
mProxyHost.setSummary((CharSequence) newValue);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
mProxyPort.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
try {
|
||||
int port = Integer.parseInt((String) newValue);
|
||||
if(port < 0 || port > 65535) {
|
||||
Notify.create(
|
||||
ProxyPrefsFragment.this.getActivity(),
|
||||
R.string.pref_proxy_port_err_invalid,
|
||||
Notify.Style.ERROR
|
||||
).show();
|
||||
return false;
|
||||
}
|
||||
// no issues, save port
|
||||
mProxyPort.setSummary("" + port);
|
||||
return true;
|
||||
} catch (NumberFormatException e) {
|
||||
Notify.create(
|
||||
ProxyPrefsFragment.this.getActivity(),
|
||||
R.string.pref_proxy_port_err_invalid,
|
||||
Notify.Style.ERROR
|
||||
).show();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void disableNormalProxyPrefs() {
|
||||
mUseNormalProxy.setChecked(false);
|
||||
mUseNormalProxy.setEnabled(false);
|
||||
mProxyHost.setEnabled(false);
|
||||
mProxyPort.setEnabled(false);
|
||||
}
|
||||
|
||||
private void enableNormalProxyPrefs() {
|
||||
mUseNormalProxy.setEnabled(true);
|
||||
mProxyHost.setEnabled(true);
|
||||
mProxyPort.setEnabled(true);
|
||||
}
|
||||
|
||||
private void disableUseTorPrefs() {
|
||||
mUseTor.setChecked(false);
|
||||
mUseTor.setEnabled(false);
|
||||
}
|
||||
|
||||
private void enableUseTorPrefs() {
|
||||
mUseTor.setEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean isValidFragment(String fragmentName) {
|
||||
return AdvancedPrefsFragment.class.getName().equals(fragmentName)
|
||||
|| CloudSearchPrefsFragment.class.getName().equals(fragmentName)
|
||||
@@ -270,7 +552,8 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
|
||||
String[] servers = sPreferences.getKeyServers();
|
||||
String serverSummary = context.getResources().getQuantityString(
|
||||
R.plurals.n_keyservers, servers.length, servers.length);
|
||||
return serverSummary + "; " + context.getString(R.string.label_preferred) + ": " + sPreferences.getPreferredKeyserver();
|
||||
return serverSummary + "; " + context.getString(R.string.label_preferred) + ": " + sPreferences
|
||||
.getPreferredKeyserver();
|
||||
}
|
||||
|
||||
private static void initializeUseDefaultYubiKeyPin(final CheckBoxPreference mUseDefaultYubiKeyPin) {
|
||||
|
||||
Reference in New Issue
Block a user