aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java
diff options
context:
space:
mode:
authorAdithya Abraham Philip <adithyaphilip@gmail.com>2015-06-05 05:39:12 +0530
committerAdithya Abraham Philip <adithyaphilip@gmail.com>2015-07-03 20:46:14 +0530
commitd07fe5bb87b3a68e20484042d3c15fba3c6ccc86 (patch)
treefdf12ead85a50f630c914bfe5614312c96a7c77c /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java
parent0faf69e91fa5ccf3ba14267c5e2e6414e7be0324 (diff)
downloadopen-keychain-d07fe5bb87b3a68e20484042d3c15fba3c6ccc86.tar.gz
open-keychain-d07fe5bb87b3a68e20484042d3c15fba3c6ccc86.tar.bz2
open-keychain-d07fe5bb87b3a68e20484042d3c15fba3c6ccc86.zip
added proxy/tor preferences
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java285
1 files changed, 284 insertions, 1 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java
index 6fc0aaac6..a49eb731d 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java
@@ -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) {