mirror of
https://github.com/moparisthebest/open-keychain
synced 2024-11-23 17:22:16 -05:00
added pass phrase cache to preferences, not used yet, but preference and about menu item now show up in every activity
This commit is contained in:
parent
363dcb62b8
commit
2c5a80a16f
@ -27,11 +27,48 @@
|
||||
android:paddingTop="5dip"
|
||||
android:layout_marginRight="?android:attr/scrollbarSize">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/section_general"
|
||||
android:text="@string/section_general"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"/>
|
||||
|
||||
<View
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="1dip"
|
||||
android:background="?android:attr/listDivider"
|
||||
android:layout_marginBottom="5dip"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/label_passPhraseCache"
|
||||
android:text="@string/label_passPhraseCache"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="0dip"
|
||||
android:layout_weight="1"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:paddingRight="10dip"/>
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/passPhraseCache"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/section_defaults"
|
||||
android:text="@string/section_defaults"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="5dip"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"/>
|
||||
|
||||
<View
|
||||
@ -61,9 +98,9 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"/>
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
<LinearLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
@ -42,6 +42,7 @@
|
||||
<!-- section_lowerCase: capitalized words, no punctuation -->
|
||||
<string name="section_userIds">User IDs</string>
|
||||
<string name="section_keys">Keys</string>
|
||||
<string name="section_general">General</string>
|
||||
<string name="section_defaults">Defaults</string>
|
||||
|
||||
<!-- btn_lowerCase: capitalized words, no punctuation -->
|
||||
@ -92,6 +93,7 @@
|
||||
<string name="label_hashAlgorithm">Hash Algorithm</string>
|
||||
<string name="label_asymmetric">Public Key</string>
|
||||
<string name="label_symmetric">Pass Phrase</string>
|
||||
<string name="label_passPhraseCache">Pass Phrase Cache</string>
|
||||
|
||||
<string name="noKeysSelected">Select</string>
|
||||
<string name="oneKeySelected">1 Selected</string>
|
||||
@ -111,6 +113,12 @@
|
||||
<string name="choice_signOnly">Sign only</string>
|
||||
<string name="choice_encryptOnly">Encrypt only</string>
|
||||
<string name="choice_signAndEncrypt">Sign and Encrypt</string>
|
||||
<string name="choice_15secs">15 secs</string>
|
||||
<string name="choice_1min">1 min</string>
|
||||
<string name="choice_3mins">3 mins</string>
|
||||
<string name="choice_5mins">5 mins</string>
|
||||
<string name="choice_10mins">10 mins</string>
|
||||
<string name="choice_untilQuit">until quit</string>
|
||||
|
||||
<string name="dsa">DSA</string>
|
||||
<string name="elgamal">ElGamal</string>
|
||||
|
@ -25,12 +25,20 @@ import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
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.Handler;
|
||||
import android.os.Message;
|
||||
import android.view.ContextMenu;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ContextMenu.ContextMenuInfo;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
public class BaseActivity extends Activity
|
||||
@ -61,6 +69,35 @@ public class BaseActivity extends Activity
|
||||
Apg.initialize(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
menu.add(0, Id.menu.option.preferences, 0, R.string.menu_preferences)
|
||||
.setIcon(android.R.drawable.ic_menu_preferences);
|
||||
menu.add(0, Id.menu.option.about, 1, R.string.menu_about)
|
||||
.setIcon(android.R.drawable.ic_menu_info_details);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case Id.menu.option.about: {
|
||||
showDialog(Id.dialog.about);
|
||||
return true;
|
||||
}
|
||||
|
||||
case Id.menu.option.preferences: {
|
||||
startActivity(new Intent(this, PreferencesActivity.class));
|
||||
return true;
|
||||
}
|
||||
|
||||
default: {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Dialog onCreateDialog(int id) {
|
||||
|
||||
@ -101,6 +138,34 @@ public class BaseActivity extends Activity
|
||||
mProgressDialog = null;
|
||||
|
||||
switch (id) {
|
||||
case Id.dialog.about: {
|
||||
AlertDialog.Builder alert = new AlertDialog.Builder(this);
|
||||
|
||||
alert.setTitle("About " + Apg.FULL_VERSION);
|
||||
|
||||
LayoutInflater inflater =
|
||||
(LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
View layout = inflater.inflate(R.layout.info, null);
|
||||
TextView message = (TextView) layout.findViewById(R.id.message);
|
||||
message.setText("This is an attempt to bring OpenPGP to Android. " +
|
||||
"It is far from complete, but more features are planned (see website).\n\n" +
|
||||
"Feel free to send bug reports, suggestions, feature requests, feedback, " +
|
||||
"photographs.\n\n" +
|
||||
"mail: thi@thialfihar.org\n" +
|
||||
"site: http://apg.thialfihar.org\n\n" +
|
||||
"This software is provided \"as is\", without warranty of any kind.");
|
||||
alert.setView(layout);
|
||||
|
||||
alert.setPositiveButton(android.R.string.ok,
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
BaseActivity.this.removeDialog(Id.dialog.about);
|
||||
}
|
||||
});
|
||||
|
||||
return alert.create();
|
||||
}
|
||||
|
||||
case Id.dialog.pass_phrase: {
|
||||
return AskForSecretKeyPassPhrase.createDialog(this, getSecretKeyId(), this);
|
||||
}
|
||||
@ -291,6 +356,16 @@ public class BaseActivity extends Activity
|
||||
return mSecretKeyId;
|
||||
}
|
||||
|
||||
public int getPassPhraseCache() {
|
||||
return mPreferences.getInt(Constants.pref.pass_phrase_cache_length, 300);
|
||||
}
|
||||
|
||||
public void setPassPhraseCache(int value) {
|
||||
SharedPreferences.Editor editor = mPreferences.edit();
|
||||
editor.putInt(Constants.pref.pass_phrase_cache_length, value);
|
||||
editor.commit();
|
||||
}
|
||||
|
||||
public int getDefaultEncryptionAlgorithm() {
|
||||
return mPreferences.getInt(Constants.pref.default_encryption_algorithm,
|
||||
PGPEncryptedData.AES_256);
|
||||
|
@ -28,5 +28,6 @@ public final class Constants {
|
||||
public static final String default_encryption_algorithm = "defaultEncryptionAlgorithm";
|
||||
public static final String default_hash_algorithm = "defaultHashAlgorithm";
|
||||
public static final String default_ascii_armour = "defaultAsciiArmour";
|
||||
public static final String pass_phrase_cache_length = "passPhraseCacheLength";
|
||||
}
|
||||
}
|
||||
|
@ -128,8 +128,12 @@ public class EditKeyActivity extends BaseActivity implements OnClickListener {
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
menu.add(0, Id.menu.option.new_pass_phrase, 0,
|
||||
(havePassPhrase() ? R.string.menu_changePassPhrase : R.string.menu_setCachedPassPhrase))
|
||||
(havePassPhrase() ? R.string.menu_changePassPhrase : R.string.menu_setPassPhrase))
|
||||
.setIcon(android.R.drawable.ic_menu_add);
|
||||
menu.add(0, Id.menu.option.preferences, 1, R.string.menu_preferences)
|
||||
.setIcon(android.R.drawable.ic_menu_preferences);
|
||||
menu.add(0, Id.menu.option.about, 2, R.string.menu_about)
|
||||
.setIcon(android.R.drawable.ic_menu_info_details);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -142,10 +146,9 @@ public class EditKeyActivity extends BaseActivity implements OnClickListener {
|
||||
}
|
||||
|
||||
default: {
|
||||
break;
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -157,7 +160,7 @@ public class EditKeyActivity extends BaseActivity implements OnClickListener {
|
||||
if (havePassPhrase()) {
|
||||
alert.setTitle(R.string.title_changePassPhrase);
|
||||
} else {
|
||||
alert.setTitle(R.string.title_setCachedPassPhrase);
|
||||
alert.setTitle(R.string.title_setPassPhrase);
|
||||
}
|
||||
alert.setMessage(R.string.enterPassPhraseTwice);
|
||||
|
||||
@ -201,10 +204,9 @@ public class EditKeyActivity extends BaseActivity implements OnClickListener {
|
||||
}
|
||||
|
||||
default: {
|
||||
break;
|
||||
return super.onCreateDialog(id);
|
||||
}
|
||||
}
|
||||
return super.onCreateDialog(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -177,34 +177,6 @@ public class MainActivity extends BaseActivity {
|
||||
return alert.create();
|
||||
}
|
||||
|
||||
case Id.dialog.about: {
|
||||
AlertDialog.Builder alert = new AlertDialog.Builder(this);
|
||||
|
||||
alert.setTitle("About " + Apg.FULL_VERSION);
|
||||
|
||||
LayoutInflater inflater =
|
||||
(LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
View layout = inflater.inflate(R.layout.info, null);
|
||||
TextView message = (TextView) layout.findViewById(R.id.message);
|
||||
message.setText("This is an attempt to bring OpenPGP to Android. " +
|
||||
"It is far from complete, but more features are planned (see website).\n\n" +
|
||||
"Feel free to send bug reports, suggestions, feature requests, feedback, " +
|
||||
"photographs.\n\n" +
|
||||
"mail: thi@thialfihar.org\n" +
|
||||
"site: http://apg.thialfihar.org\n\n" +
|
||||
"This software is provided \"as is\", without warranty of any kind.");
|
||||
alert.setView(layout);
|
||||
|
||||
alert.setPositiveButton(android.R.string.ok,
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
MainActivity.this.removeDialog(Id.dialog.about);
|
||||
}
|
||||
});
|
||||
|
||||
return alert.create();
|
||||
}
|
||||
|
||||
case Id.dialog.change_log: {
|
||||
AlertDialog.Builder alert = new AlertDialog.Builder(this);
|
||||
|
||||
@ -243,11 +215,9 @@ public class MainActivity extends BaseActivity {
|
||||
}
|
||||
|
||||
default: {
|
||||
break;
|
||||
return super.onCreateDialog(id);
|
||||
}
|
||||
}
|
||||
|
||||
return super.onCreateDialog(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -273,11 +243,6 @@ public class MainActivity extends BaseActivity {
|
||||
return true;
|
||||
}
|
||||
|
||||
case Id.menu.option.about: {
|
||||
showDialog(Id.dialog.about);
|
||||
return true;
|
||||
}
|
||||
|
||||
case Id.menu.option.manage_public_keys: {
|
||||
startActivity(new Intent(this, PublicKeyListActivity.class));
|
||||
return true;
|
||||
@ -288,16 +253,10 @@ public class MainActivity extends BaseActivity {
|
||||
return true;
|
||||
}
|
||||
|
||||
case Id.menu.option.preferences: {
|
||||
startActivity(new Intent(this, PreferencesActivity.class));
|
||||
return true;
|
||||
}
|
||||
|
||||
default: {
|
||||
break;
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -30,6 +30,7 @@ import android.widget.Spinner;
|
||||
import android.widget.AdapterView.OnItemSelectedListener;
|
||||
|
||||
public class PreferencesActivity extends BaseActivity {
|
||||
private Spinner mPassPhraseCache = null;
|
||||
private Spinner mEncryptionAlgorithm = null;
|
||||
private Spinner mHashAlgorithm = null;
|
||||
private CheckBox mAsciiArmour = null;
|
||||
@ -39,13 +40,48 @@ public class PreferencesActivity extends BaseActivity {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.preferences);
|
||||
|
||||
mPassPhraseCache = (Spinner) findViewById(R.id.passPhraseCache);
|
||||
|
||||
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)),
|
||||
new Choice(0, getString(R.string.choice_untilQuit)),
|
||||
};
|
||||
ArrayAdapter<Choice> adapter =
|
||||
new ArrayAdapter<Choice>(this, android.R.layout.simple_spinner_item, choices);
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
mPassPhraseCache.setAdapter(adapter);
|
||||
|
||||
int passPhraseCache = getPassPhraseCache();
|
||||
for (int i = 0; i < choices.length; ++i) {
|
||||
if (choices[i].getId() == passPhraseCache) {
|
||||
mPassPhraseCache.setSelection(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
mPassPhraseCache.setOnItemSelectedListener(new OnItemSelectedListener() {
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> adapter, View view, int index, long id) {
|
||||
setPassPhraseCache(((Choice) mPassPhraseCache.getSelectedItem()).getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNothingSelected(AdapterView<?> adapter) {
|
||||
// nothing to do
|
||||
}
|
||||
});
|
||||
|
||||
mEncryptionAlgorithm = (Spinner) findViewById(R.id.encryptionAlgorithm);
|
||||
mHashAlgorithm = (Spinner) findViewById(R.id.hashAlgorithm);
|
||||
mAsciiArmour = (CheckBox) findViewById(R.id.asciiArmour);
|
||||
|
||||
mAsciiArmour.setChecked(getDefaultAsciiArmour());
|
||||
|
||||
Choice choices[] = {
|
||||
choices = new Choice[] {
|
||||
new Choice(PGPEncryptedData.AES_128, "AES 128"),
|
||||
new Choice(PGPEncryptedData.AES_192, "AES 192"),
|
||||
new Choice(PGPEncryptedData.AES_256, "AES 256"),
|
||||
@ -56,13 +92,13 @@ public class PreferencesActivity extends BaseActivity {
|
||||
new Choice(PGPEncryptedData.TRIPLE_DES, "Triple DES"),
|
||||
new Choice(PGPEncryptedData.IDEA, "IDEA"),
|
||||
};
|
||||
ArrayAdapter<Choice> adapter =
|
||||
new ArrayAdapter<Choice>(this, android.R.layout.simple_spinner_item, choices);
|
||||
adapter = new ArrayAdapter<Choice>(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() == getDefaultEncryptionAlgorithm()) {
|
||||
if (choices[i].getId() == defaultEncryptionAlgorithm) {
|
||||
mEncryptionAlgorithm.setSelection(i);
|
||||
break;
|
||||
}
|
||||
@ -80,7 +116,7 @@ public class PreferencesActivity extends BaseActivity {
|
||||
}
|
||||
});
|
||||
|
||||
Choice choices2[] = {
|
||||
choices = new Choice[] {
|
||||
new Choice(HashAlgorithmTags.MD5, "MD5"),
|
||||
new Choice(HashAlgorithmTags.RIPEMD160, "RIPEMD160"),
|
||||
new Choice(HashAlgorithmTags.SHA1, "SHA1"),
|
||||
@ -89,12 +125,13 @@ public class PreferencesActivity extends BaseActivity {
|
||||
new Choice(HashAlgorithmTags.SHA384, "SHA384"),
|
||||
new Choice(HashAlgorithmTags.SHA512, "SHA512"),
|
||||
};
|
||||
adapter = new ArrayAdapter<Choice>(this, android.R.layout.simple_spinner_item, choices2);
|
||||
adapter = new ArrayAdapter<Choice>(this, android.R.layout.simple_spinner_item, choices);
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
mHashAlgorithm.setAdapter(adapter);
|
||||
|
||||
for (int i = 0; i < choices2.length; ++i) {
|
||||
if (choices2[i].getId() == getDefaultHashAlgorithm()) {
|
||||
int defaultHashAlgorithm = getDefaultHashAlgorithm();
|
||||
for (int i = 0; i < choices.length; ++i) {
|
||||
if (choices[i].getId() == defaultHashAlgorithm) {
|
||||
mHashAlgorithm.setSelection(i);
|
||||
break;
|
||||
}
|
||||
|
@ -72,6 +72,10 @@ public class PublicKeyListActivity extends BaseActivity {
|
||||
.setIcon(android.R.drawable.ic_menu_add);
|
||||
menu.add(0, Id.menu.option.export_keys, 1, R.string.menu_exportKeys)
|
||||
.setIcon(android.R.drawable.ic_menu_save);
|
||||
menu.add(1, Id.menu.option.preferences, 2, R.string.menu_preferences)
|
||||
.setIcon(android.R.drawable.ic_menu_preferences);
|
||||
menu.add(1, Id.menu.option.about, 3, R.string.menu_about)
|
||||
.setIcon(android.R.drawable.ic_menu_info_details);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -89,10 +93,9 @@ public class PublicKeyListActivity extends BaseActivity {
|
||||
}
|
||||
|
||||
default: {
|
||||
break;
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -230,11 +233,9 @@ public class PublicKeyListActivity extends BaseActivity {
|
||||
}
|
||||
|
||||
default: {
|
||||
break;
|
||||
return super.onCreateDialog(id);
|
||||
}
|
||||
}
|
||||
|
||||
return super.onCreateDialog(id);
|
||||
}
|
||||
|
||||
public void importKeys() {
|
||||
|
@ -76,6 +76,10 @@ public class SecretKeyListActivity extends BaseActivity implements OnChildClickL
|
||||
.setIcon(android.R.drawable.ic_menu_save);
|
||||
menu.add(1, Id.menu.option.create, 2, R.string.menu_createKey)
|
||||
.setIcon(android.R.drawable.ic_menu_add);
|
||||
menu.add(2, Id.menu.option.preferences, 3, R.string.menu_preferences)
|
||||
.setIcon(android.R.drawable.ic_menu_preferences);
|
||||
menu.add(2, Id.menu.option.about, 4, R.string.menu_about)
|
||||
.setIcon(android.R.drawable.ic_menu_info_details);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -98,10 +102,9 @@ public class SecretKeyListActivity extends BaseActivity implements OnChildClickL
|
||||
}
|
||||
|
||||
default: {
|
||||
break;
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -259,8 +262,11 @@ public class SecretKeyListActivity extends BaseActivity implements OnChildClickL
|
||||
long keyId = keyRing.getSecretKey().getKeyID();
|
||||
return AskForSecretKeyPassPhrase.createDialog(this, keyId, this);
|
||||
}
|
||||
|
||||
default: {
|
||||
return super.onCreateDialog(id);
|
||||
}
|
||||
}
|
||||
return super.onCreateDialog(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
Reference in New Issue
Block a user