From 1bad192a91364fe48ae38ddcf6fb436a40a82283 Mon Sep 17 00:00:00 2001 From: Thialfihar Date: Thu, 17 Jun 2010 13:23:07 +0000 Subject: using proper PreferenceActivity now, tho the underlying storage of the values remained almost the same, some changes how the preferences are accessed and how the cache service is started --- src/org/thialfihar/android/apg/BaseActivity.java | 109 +------- .../thialfihar/android/apg/EncryptActivity.java | 11 +- .../android/apg/IntegerListPreference.java | 95 +++++++ .../thialfihar/android/apg/KeyListActivity.java | 13 - src/org/thialfihar/android/apg/MainActivity.java | 7 +- src/org/thialfihar/android/apg/Preferences.java | 106 ++++++++ .../android/apg/PreferencesActivity.java | 287 +++++++++------------ 7 files changed, 343 insertions(+), 285 deletions(-) create mode 100644 src/org/thialfihar/android/apg/IntegerListPreference.java create mode 100644 src/org/thialfihar/android/apg/Preferences.java (limited to 'src') diff --git a/src/org/thialfihar/android/apg/BaseActivity.java b/src/org/thialfihar/android/apg/BaseActivity.java index 9cddc03f1..7fd8752b7 100644 --- a/src/org/thialfihar/android/apg/BaseActivity.java +++ b/src/org/thialfihar/android/apg/BaseActivity.java @@ -18,9 +18,6 @@ package org.thialfihar.android.apg; import java.io.File; -import org.bouncycastle2.bcpg.HashAlgorithmTags; -import org.bouncycastle2.openpgp.PGPEncryptedData; - import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; @@ -28,7 +25,6 @@ import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.content.SharedPreferences; import android.os.Bundle; import android.os.Environment; import android.os.Handler; @@ -49,7 +45,8 @@ public class BaseActivity extends Activity private long mSecretKeyId = 0; private String mDeleteFile = null; - protected static SharedPreferences mPreferences = null; + + protected Preferences mPreferences; private Handler mHandler = new Handler() { @Override @@ -62,11 +59,9 @@ public class BaseActivity extends Activity protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - Apg.initialize(this); + mPreferences = Preferences.getPreferences(this); - if (mPreferences == null) { - mPreferences = getPreferences(MODE_PRIVATE); - } + Apg.initialize(this); if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { File dir = new File(Constants.path.app_dir); @@ -76,9 +71,13 @@ public class BaseActivity extends Activity } } - Intent intent = new Intent(this, Service.class); - intent.putExtra(Service.EXTRA_TTL, getPassPhraseCacheTtl()); - startService(intent); + startCacheService(this, mPreferences); + } + + public static void startCacheService(Activity activity, Preferences preferences) { + Intent intent = new Intent(activity, Service.class); + intent.putExtra(Service.EXTRA_TTL, preferences.getPassPhraseCacheTtl()); + activity.startService(intent); } @Override @@ -372,92 +371,6 @@ public class BaseActivity extends Activity return mSecretKeyId; } - public int getPassPhraseCacheTtl() { - int ttl = mPreferences.getInt(Constants.pref.pass_phrase_cache_ttl, 180); - // fix the value if it was set to "never" in previous versions, which currently is not - // supported - if (ttl == 0) { - ttl = 180; - setPassPhraseCacheTtl(ttl); - } - return ttl; - } - - public void setPassPhraseCacheTtl(int value) { - SharedPreferences.Editor editor = mPreferences.edit(); - editor.putInt(Constants.pref.pass_phrase_cache_ttl, value); - editor.commit(); - - Intent intent = new Intent(this, Service.class); - intent.putExtra(Service.EXTRA_TTL, value); - startService(intent); - } - - public int getDefaultEncryptionAlgorithm() { - return mPreferences.getInt(Constants.pref.default_encryption_algorithm, - PGPEncryptedData.AES_256); - } - - public void setDefaultEncryptionAlgorithm(int value) { - SharedPreferences.Editor editor = mPreferences.edit(); - editor.putInt(Constants.pref.default_encryption_algorithm, value); - editor.commit(); - } - - public int getDefaultHashAlgorithm() { - return mPreferences.getInt(Constants.pref.default_hash_algorithm, - HashAlgorithmTags.SHA256); - } - - public void setDefaultHashAlgorithm(int value) { - SharedPreferences.Editor editor = mPreferences.edit(); - editor.putInt(Constants.pref.default_hash_algorithm, value); - editor.commit(); - } - - public int getDefaultMessageCompression() { - return mPreferences.getInt(Constants.pref.default_message_compression, - Id.choice.compression.zlib); - } - - public void setDefaultMessageCompression(int value) { - SharedPreferences.Editor editor = mPreferences.edit(); - editor.putInt(Constants.pref.default_message_compression, value); - editor.commit(); - } - - public int getDefaultFileCompression() { - return mPreferences.getInt(Constants.pref.default_file_compression, - Id.choice.compression.none); - } - - public void setDefaultFileCompression(int value) { - SharedPreferences.Editor editor = mPreferences.edit(); - editor.putInt(Constants.pref.default_file_compression, value); - editor.commit(); - } - - public boolean getDefaultAsciiArmour() { - return mPreferences.getBoolean(Constants.pref.default_ascii_armour, false); - } - - public void setDefaultAsciiArmour(boolean value) { - SharedPreferences.Editor editor = mPreferences.edit(); - editor.putBoolean(Constants.pref.default_ascii_armour, value); - editor.commit(); - } - - public boolean hasSeenChangeLog() { - return mPreferences.getBoolean(Constants.pref.has_seen_change_log + Apg.getVersion(this), - false); - } - - public void setHasSeenChangeLog(boolean value) { - SharedPreferences.Editor editor = mPreferences.edit(); - editor.putBoolean(Constants.pref.has_seen_change_log + Apg.getVersion(this), value); - editor.commit(); - } - protected void setDeleteFile(String deleteFile) { mDeleteFile = deleteFile; } diff --git a/src/org/thialfihar/android/apg/EncryptActivity.java b/src/org/thialfihar/android/apg/EncryptActivity.java index 2c095ecbf..e0a38f061 100644 --- a/src/org/thialfihar/android/apg/EncryptActivity.java +++ b/src/org/thialfihar/android/apg/EncryptActivity.java @@ -213,7 +213,7 @@ public class EncryptActivity extends BaseActivity { adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); mFileCompression.setAdapter(adapter); - int defaultFileCompression = getDefaultFileCompression(); + int defaultFileCompression = mPreferences.getDefaultFileCompression(); for (int i = 0; i < choices.length; ++i) { if (choices[i].getId() == defaultFileCompression) { mFileCompression.setSelection(i); @@ -224,7 +224,7 @@ public class EncryptActivity extends BaseActivity { mDeleteAfter = (CheckBox) findViewById(R.id.deleteAfterEncryption); mAsciiArmour = (CheckBox) findViewById(R.id.asciiArmour); - mAsciiArmour.setChecked(getDefaultAsciiArmour()); + mAsciiArmour.setChecked(mPreferences.getDefaultAsciiArmour()); mAsciiArmour.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { @@ -607,18 +607,19 @@ public class EncryptActivity extends BaseActivity { size = byteData.length; useAsciiArmour = true; - compressionId = getDefaultMessageCompression(); + compressionId = mPreferences.getDefaultMessageCompression(); } if (signOnly) { Apg.signText(this, in, out, getSecretKeyId(), Apg.getCachedPassPhrase(getSecretKeyId()), - getDefaultHashAlgorithm(), this); + mPreferences.getDefaultHashAlgorithm(), this); } else { Apg.encrypt(this, in, out, size, useAsciiArmour, encryptionKeyIds, signatureKeyId, Apg.getCachedPassPhrase(signatureKeyId), this, - getDefaultEncryptionAlgorithm(), getDefaultHashAlgorithm(), + mPreferences.getDefaultEncryptionAlgorithm(), + mPreferences.getDefaultHashAlgorithm(), compressionId, passPhrase); } diff --git a/src/org/thialfihar/android/apg/IntegerListPreference.java b/src/org/thialfihar/android/apg/IntegerListPreference.java new file mode 100644 index 000000000..26a58afd5 --- /dev/null +++ b/src/org/thialfihar/android/apg/IntegerListPreference.java @@ -0,0 +1,95 @@ +/* + * Copyright 2010 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package org.thialfihar.android.apg; + +import android.content.Context; +import android.preference.ListPreference; +import android.util.AttributeSet; + +/** + * A list preference which persists its values as integers instead of strings. + * Code reading the values should use + * {@link android.content.SharedPreferences#getInt}. + * When using XML-declared arrays for entry values, the arrays should be regular + * string arrays containing valid integer values. + * + * @author Rodrigo Damazio + */ +public class IntegerListPreference extends ListPreference { + + public IntegerListPreference(Context context) { + super(context); + + verifyEntryValues(null); + } + + public IntegerListPreference(Context context, AttributeSet attrs) { + super(context, attrs); + + verifyEntryValues(null); + } + + @Override + public void setEntryValues(CharSequence[] entryValues) { + CharSequence[] oldValues = getEntryValues(); + super.setEntryValues(entryValues); + verifyEntryValues(oldValues); + } + + @Override + public void setEntryValues(int entryValuesResId) { + CharSequence[] oldValues = getEntryValues(); + super.setEntryValues(entryValuesResId); + verifyEntryValues(oldValues); + } + + @Override + protected String getPersistedString(String defaultReturnValue) { + // During initial load, there's no known default value + int defaultIntegerValue = Integer.MIN_VALUE; + if (defaultReturnValue != null) { + defaultIntegerValue = Integer.parseInt(defaultReturnValue); + } + + // When the list preference asks us to read a string, instead read an + // integer. + int value = getPersistedInt(defaultIntegerValue); + return Integer.toString(value); + } + + @Override + protected boolean persistString(String value) { + // When asked to save a string, instead save an integer + return persistInt(Integer.parseInt(value)); + } + + private void verifyEntryValues(CharSequence[] oldValues) { + CharSequence[] entryValues = getEntryValues(); + if (entryValues == null) { + return; + } + + for (CharSequence entryValue : entryValues) { + try { + Integer.parseInt(entryValue.toString()); + } catch (NumberFormatException nfe) { + super.setEntryValues(oldValues); + throw nfe; + } + } + } +} diff --git a/src/org/thialfihar/android/apg/KeyListActivity.java b/src/org/thialfihar/android/apg/KeyListActivity.java index c9880e8fe..ac861f0ac 100644 --- a/src/org/thialfihar/android/apg/KeyListActivity.java +++ b/src/org/thialfihar/android/apg/KeyListActivity.java @@ -510,19 +510,6 @@ public class KeyListActivity extends BaseActivity { qb.appendWhere(")"); } -<<<<<<< HEAD - String query = qb.buildQuery(new String[] { - KeyRings.TABLE_NAME + "." + KeyRings._ID, // 0 - KeyRings.TABLE_NAME + "." + KeyRings.MASTER_KEY_ID, // 1 - UserIds.TABLE_NAME + "." + UserIds.USER_ID, // 2 - }, - KeyRings.TABLE_NAME + "." + KeyRings.TYPE + " = ?", - new String[] { "" + (mKeyType == Id.type.public_key ? - Id.database.type_public : Id.database.type_secret) }, - null, null, UserIds.TABLE_NAME + "." + UserIds.USER_ID + " ASC", null); - -======= ->>>>>>> 1.0.x mCursor = qb.query(mDatabase, new String[] { KeyRings.TABLE_NAME + "." + KeyRings._ID, // 0 diff --git a/src/org/thialfihar/android/apg/MainActivity.java b/src/org/thialfihar/android/apg/MainActivity.java index aa3900998..7ba0e912b 100644 --- a/src/org/thialfihar/android/apg/MainActivity.java +++ b/src/org/thialfihar/android/apg/MainActivity.java @@ -117,7 +117,7 @@ public class MainActivity extends BaseActivity { }); registerForContextMenu(mAccounts); - if (!hasSeenChangeLog()) { + if (!mPreferences.hasSeenChangeLog(Apg.getVersion(this))) { showDialog(Id.dialog.change_log); } } @@ -216,9 +216,10 @@ public class MainActivity extends BaseActivity { new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { MainActivity.this.removeDialog(Id.dialog.change_log); - setHasSeenChangeLog(true); + mPreferences.setHasSeenChangeLog( + Apg.getVersion(MainActivity.this), true); } - }); + }); return alert.create(); } diff --git a/src/org/thialfihar/android/apg/Preferences.java b/src/org/thialfihar/android/apg/Preferences.java new file mode 100644 index 000000000..50489dc89 --- /dev/null +++ b/src/org/thialfihar/android/apg/Preferences.java @@ -0,0 +1,106 @@ +package org.thialfihar.android.apg; + +import org.bouncycastle2.bcpg.HashAlgorithmTags; +import org.bouncycastle2.openpgp.PGPEncryptedData; + +import android.content.Context; +import android.content.SharedPreferences; + +public class Preferences { + private static Preferences mPreferences; + private SharedPreferences mSharedPreferences; + + public static synchronized Preferences getPreferences(Context context) + { + if (mPreferences == null) { + mPreferences = new Preferences(context); + } + return mPreferences; + } + + private Preferences(Context context) + { + mSharedPreferences = context.getSharedPreferences("APG.main", Context.MODE_PRIVATE); + } + + public int getPassPhraseCacheTtl() { + int ttl = mSharedPreferences.getInt(Constants.pref.pass_phrase_cache_ttl, 180); + // fix the value if it was set to "never" in previous versions, which currently is not + // supported + if (ttl == 0) { + ttl = 180; + } + return ttl; + } + + public void setPassPhraseCacheTtl(int value) { + SharedPreferences.Editor editor = mSharedPreferences.edit(); + editor.putInt(Constants.pref.pass_phrase_cache_ttl, value); + editor.commit(); + } + + public int getDefaultEncryptionAlgorithm() { + return mSharedPreferences.getInt(Constants.pref.default_encryption_algorithm, + PGPEncryptedData.AES_256); + } + + public void setDefaultEncryptionAlgorithm(int value) { + SharedPreferences.Editor editor = mSharedPreferences.edit(); + editor.putInt(Constants.pref.default_encryption_algorithm, value); + editor.commit(); + } + + public int getDefaultHashAlgorithm() { + return mSharedPreferences.getInt(Constants.pref.default_hash_algorithm, + HashAlgorithmTags.SHA256); + } + + public void setDefaultHashAlgorithm(int value) { + SharedPreferences.Editor editor = mSharedPreferences.edit(); + editor.putInt(Constants.pref.default_hash_algorithm, value); + editor.commit(); + } + + public int getDefaultMessageCompression() { + return mSharedPreferences.getInt(Constants.pref.default_message_compression, + Id.choice.compression.zlib); + } + + public void setDefaultMessageCompression(int value) { + SharedPreferences.Editor editor = mSharedPreferences.edit(); + editor.putInt(Constants.pref.default_message_compression, value); + editor.commit(); + } + + public int getDefaultFileCompression() { + return mSharedPreferences.getInt(Constants.pref.default_file_compression, + Id.choice.compression.none); + } + + public void setDefaultFileCompression(int value) { + SharedPreferences.Editor editor = mSharedPreferences.edit(); + editor.putInt(Constants.pref.default_file_compression, value); + editor.commit(); + } + + public boolean getDefaultAsciiArmour() { + return mSharedPreferences.getBoolean(Constants.pref.default_ascii_armour, false); + } + + public void setDefaultAsciiArmour(boolean value) { + SharedPreferences.Editor editor = mSharedPreferences.edit(); + editor.putBoolean(Constants.pref.default_ascii_armour, value); + editor.commit(); + } + + public boolean hasSeenChangeLog(String version) { + return mSharedPreferences.getBoolean(Constants.pref.has_seen_change_log + version, + false); + } + + public void setHasSeenChangeLog(String version, boolean value) { + SharedPreferences.Editor editor = mSharedPreferences.edit(); + editor.putBoolean(Constants.pref.has_seen_change_log + version, value); + editor.commit(); + } +} diff --git a/src/org/thialfihar/android/apg/PreferencesActivity.java b/src/org/thialfihar/android/apg/PreferencesActivity.java index e80e1ad5f..3f3a709a9 100644 --- a/src/org/thialfihar/android/apg/PreferencesActivity.java +++ b/src/org/thialfihar/android/apg/PreferencesActivity.java @@ -18,202 +18,157 @@ package org.thialfihar.android.apg; import org.bouncycastle2.bcpg.HashAlgorithmTags; import org.bouncycastle2.openpgp.PGPEncryptedData; -import org.thialfihar.android.apg.utils.Choice; import android.os.Bundle; -import android.view.View; -import android.view.View.OnClickListener; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.CheckBox; -import android.widget.Spinner; -import android.widget.AdapterView.OnItemSelectedListener; - -public class PreferencesActivity extends BaseActivity { - private Spinner mPassPhraseCacheTtl = null; - private Spinner mEncryptionAlgorithm = null; - private Spinner mHashAlgorithm = null; - private Spinner mMessageCompression = null; - private Spinner mFileCompression = null; - private CheckBox mAsciiArmour = null; +import android.preference.CheckBoxPreference; +import android.preference.Preference; +import android.preference.PreferenceActivity; + +public class PreferencesActivity extends PreferenceActivity { + private IntegerListPreference mPassPhraseCacheTtl = null; + private IntegerListPreference mEncryptionAlgorithm = null; + private IntegerListPreference mHashAlgorithm = null; + private IntegerListPreference mMessageCompression = null; + private IntegerListPreference mFileCompression = null; + private CheckBoxPreference mAsciiArmour = null; + private Preferences mPreferences; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.preferences); - - mPassPhraseCacheTtl = (Spinner) findViewById(R.id.passPhraseCacheTtl); - - Choice choices[] = { - new Choice(15, getString(R.string.choice_15secs)), - new Choice(60, getString(R.string.choice_1min)), - new Choice(180, getString(R.string.choice_3mins)), - new Choice(300, getString(R.string.choice_5mins)), - new Choice(600, getString(R.string.choice_10mins)), - }; - ArrayAdapter adapter = - new ArrayAdapter(this, android.R.layout.simple_spinner_item, choices); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - mPassPhraseCacheTtl.setAdapter(adapter); - int passPhraseCache = getPassPhraseCacheTtl(); - for (int i = 0; i < choices.length; ++i) { - if (choices[i].getId() == passPhraseCache) { - mPassPhraseCacheTtl.setSelection(i); - break; - } - } + mPreferences = Preferences.getPreferences(this); - mPassPhraseCacheTtl.setOnItemSelectedListener(new OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView adapter, View view, int index, long id) { - setPassPhraseCacheTtl(((Choice) mPassPhraseCacheTtl.getSelectedItem()).getId()); - } + addPreferencesFromResource(R.xml.apg_preferences); - @Override - public void onNothingSelected(AdapterView adapter) { - // nothing to do + mPassPhraseCacheTtl = (IntegerListPreference) findPreference(Constants.pref.pass_phrase_cache_ttl); + mPassPhraseCacheTtl.setValue("" + mPreferences.getPassPhraseCacheTtl()); + mPassPhraseCacheTtl.setSummary(mPassPhraseCacheTtl.getEntry()); + mPassPhraseCacheTtl.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() + { + public boolean onPreferenceChange(Preference preference, Object newValue) + { + mPassPhraseCacheTtl.setValue(newValue.toString()); + mPassPhraseCacheTtl.setSummary(mPassPhraseCacheTtl.getEntry()); + mPreferences.setPassPhraseCacheTtl(Integer.parseInt(newValue.toString())); + BaseActivity.startCacheService(PreferencesActivity.this, mPreferences); + return false; } }); - mEncryptionAlgorithm = (Spinner) findViewById(R.id.encryptionAlgorithm); - choices = new Choice[] { - new Choice(PGPEncryptedData.AES_128, "AES 128"), - new Choice(PGPEncryptedData.AES_192, "AES 192"), - new Choice(PGPEncryptedData.AES_256, "AES 256"), - new Choice(PGPEncryptedData.BLOWFISH, "Blowfish"), - new Choice(PGPEncryptedData.TWOFISH, "Twofish"), - new Choice(PGPEncryptedData.CAST5, "CAST5"), - new Choice(PGPEncryptedData.DES, "DES"), - new Choice(PGPEncryptedData.TRIPLE_DES, "Triple DES"), - new Choice(PGPEncryptedData.IDEA, "IDEA"), + mEncryptionAlgorithm = (IntegerListPreference) findPreference(Constants.pref.default_encryption_algorithm); + int valueIds[] = { + PGPEncryptedData.AES_128, PGPEncryptedData.AES_192, PGPEncryptedData.AES_256, + PGPEncryptedData.BLOWFISH, PGPEncryptedData.TWOFISH, PGPEncryptedData.CAST5, + PGPEncryptedData.DES, PGPEncryptedData.TRIPLE_DES, PGPEncryptedData.IDEA, }; - adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, choices); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - mEncryptionAlgorithm.setAdapter(adapter); - - int defaultEncryptionAlgorithm = getDefaultEncryptionAlgorithm(); - for (int i = 0; i < choices.length; ++i) { - if (choices[i].getId() == defaultEncryptionAlgorithm) { - mEncryptionAlgorithm.setSelection(i); - break; - } - } - - mEncryptionAlgorithm.setOnItemSelectedListener(new OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView adapter, View view, int index, long id) { - setDefaultEncryptionAlgorithm(((Choice) mEncryptionAlgorithm.getSelectedItem()).getId()); - } - - @Override - public void onNothingSelected(AdapterView adapter) { - // nothing to do - } - }); - - mHashAlgorithm = (Spinner) findViewById(R.id.hashAlgorithm); - choices = new Choice[] { - new Choice(HashAlgorithmTags.MD5, "MD5"), - new Choice(HashAlgorithmTags.RIPEMD160, "RIPEMD160"), - new Choice(HashAlgorithmTags.SHA1, "SHA1"), - new Choice(HashAlgorithmTags.SHA224, "SHA224"), - new Choice(HashAlgorithmTags.SHA256, "SHA256"), - new Choice(HashAlgorithmTags.SHA384, "SHA384"), - new Choice(HashAlgorithmTags.SHA512, "SHA512"), + String entries[] = { + "AES-128", "AES-192", "AES-256", + "Blowfish", "Twofish", "CAST5", + "DES", "Triple DES", "IDEA", }; - adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, choices); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - mHashAlgorithm.setAdapter(adapter); - - int defaultHashAlgorithm = getDefaultHashAlgorithm(); - for (int i = 0; i < choices.length; ++i) { - if (choices[i].getId() == defaultHashAlgorithm) { - mHashAlgorithm.setSelection(i); - break; - } + String values[] = new String[valueIds.length]; + for (int i = 0; i < values.length; ++i) { + values[i] = "" + valueIds[i]; } - - mHashAlgorithm.setOnItemSelectedListener(new OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView adapter, View view, int index, long id) { - setDefaultHashAlgorithm(((Choice) mHashAlgorithm.getSelectedItem()).getId()); - } - - @Override - public void onNothingSelected(AdapterView adapter) { - // nothing to do + mEncryptionAlgorithm.setEntries(entries); + mEncryptionAlgorithm.setEntryValues(values); + mEncryptionAlgorithm.setValue("" + mPreferences.getDefaultEncryptionAlgorithm()); + mEncryptionAlgorithm.setSummary(mEncryptionAlgorithm.getEntry()); + mEncryptionAlgorithm.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() + { + public boolean onPreferenceChange(Preference preference, Object newValue) + { + mEncryptionAlgorithm.setValue(newValue.toString()); + mEncryptionAlgorithm.setSummary(mEncryptionAlgorithm.getEntry()); + mPreferences.setDefaultEncryptionAlgorithm(Integer.parseInt(newValue.toString())); + return false; } }); - mMessageCompression = (Spinner) findViewById(R.id.messageCompression); - choices = new Choice[] { - new Choice(Id.choice.compression.none, getString(R.string.choice_none)), - new Choice(Id.choice.compression.zip, "ZIP"), - new Choice(Id.choice.compression.bzip2, "BZIP2"), - new Choice(Id.choice.compression.zlib, "ZLIB"), + mHashAlgorithm = (IntegerListPreference) findPreference(Constants.pref.default_hash_algorithm); + valueIds = new int[] { + HashAlgorithmTags.MD5, HashAlgorithmTags.RIPEMD160, HashAlgorithmTags.SHA1, + HashAlgorithmTags.SHA224, HashAlgorithmTags.SHA256, HashAlgorithmTags.SHA384, + HashAlgorithmTags.SHA512, }; - adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, choices); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - mMessageCompression.setAdapter(adapter); - - int defaultMessageCompression = getDefaultMessageCompression(); - for (int i = 0; i < choices.length; ++i) { - if (choices[i].getId() == defaultMessageCompression) { - mMessageCompression.setSelection(i); - break; - } + entries = new String[] { + "MD5", "RIPEMD-160", "SHA-1", + "SHA-224", "SHA-256", "SHA-384", + "SHA-512", + }; + values = new String[valueIds.length]; + for (int i = 0; i < values.length; ++i) { + values[i] = "" + valueIds[i]; } - - mMessageCompression.setOnItemSelectedListener(new OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView adapter, View view, int index, long id) { - setDefaultMessageCompression(((Choice) mMessageCompression.getSelectedItem()).getId()); - } - - @Override - public void onNothingSelected(AdapterView adapter) { - // nothing to do + mHashAlgorithm.setEntries(entries); + mHashAlgorithm.setEntryValues(values); + mHashAlgorithm.setValue("" + mPreferences.getDefaultHashAlgorithm()); + mHashAlgorithm.setSummary(mHashAlgorithm.getEntry()); + mHashAlgorithm.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() + { + public boolean onPreferenceChange(Preference preference, Object newValue) + { + mHashAlgorithm.setValue(newValue.toString()); + mHashAlgorithm.setSummary(mHashAlgorithm.getEntry()); + mPreferences.setDefaultHashAlgorithm(Integer.parseInt(newValue.toString())); + return false; } }); - mFileCompression = (Spinner) findViewById(R.id.fileCompression); - choices = new Choice[] { - new Choice(Id.choice.compression.none, getString(R.string.choice_none)), - new Choice(Id.choice.compression.zip, "ZIP"), - new Choice(Id.choice.compression.bzip2, "BZIP2"), - new Choice(Id.choice.compression.zlib, "ZLIB"), + mMessageCompression = (IntegerListPreference) findPreference(Constants.pref.default_message_compression); + valueIds = new int[] { + Id.choice.compression.none, Id.choice.compression.zip, + Id.choice.compression.bzip2, Id.choice.compression.zlib, }; - adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, choices); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - mFileCompression.setAdapter(adapter); - - int defaultFileCompression = getDefaultFileCompression(); - for (int i = 0; i < choices.length; ++i) { - if (choices[i].getId() == defaultFileCompression) { - mFileCompression.setSelection(i); - break; - } + entries = new String[] { + getString(R.string.choice_none), "ZIP", + "BZIP2", "ZLIB", + }; + values = new String[valueIds.length]; + for (int i = 0; i < values.length; ++i) { + values[i] = "" + valueIds[i]; } - - mFileCompression.setOnItemSelectedListener(new OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView adapter, View view, int index, long id) { - setDefaultFileCompression(((Choice) mFileCompression.getSelectedItem()).getId()); + mMessageCompression.setEntries(entries); + mMessageCompression.setEntryValues(values); + mMessageCompression.setValue("" + mPreferences.getDefaultMessageCompression()); + mMessageCompression.setSummary(mMessageCompression.getEntry()); + mMessageCompression.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() + { + public boolean onPreferenceChange(Preference preference, Object newValue) + { + mMessageCompression.setValue(newValue.toString()); + mMessageCompression.setSummary(mMessageCompression.getEntry()); + mPreferences.setDefaultMessageCompression(Integer.parseInt(newValue.toString())); + return false; } + }); - @Override - public void onNothingSelected(AdapterView adapter) { - // nothing to do + mFileCompression = (IntegerListPreference) findPreference(Constants.pref.default_file_compression); + mFileCompression.setEntries(entries); + mFileCompression.setEntryValues(values); + mFileCompression.setValue("" + mPreferences.getDefaultFileCompression()); + mFileCompression.setSummary(mFileCompression.getEntry()); + mFileCompression.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() + { + public boolean onPreferenceChange(Preference preference, Object newValue) + { + mFileCompression.setValue(newValue.toString()); + mFileCompression.setSummary(mFileCompression.getEntry()); + mPreferences.setDefaultFileCompression(Integer.parseInt(newValue.toString())); + return false; } }); - mAsciiArmour = (CheckBox) findViewById(R.id.asciiArmour); - mAsciiArmour.setChecked(getDefaultAsciiArmour()); - mAsciiArmour.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - setDefaultAsciiArmour(mAsciiArmour.isChecked()); + mAsciiArmour = (CheckBoxPreference) findPreference(Constants.pref.default_ascii_armour); + mAsciiArmour.setChecked(mPreferences.getDefaultAsciiArmour()); + mAsciiArmour.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() + { + public boolean onPreferenceChange(Preference preference, Object newValue) + { + mAsciiArmour.setChecked((Boolean)newValue); + mPreferences.setDefaultAsciiArmour((Boolean)newValue); + return false; } }); } -- cgit v1.2.3