Merge pull request #1 from openpgp-keychain/master

updating my fork
This commit is contained in:
Tharindu Wijewardane 2014-03-11 09:14:46 +05:30
commit 03b0e43aa2
60 changed files with 1561 additions and 596 deletions

View File

@ -113,4 +113,64 @@ public class ActionBarHelper {
actionBar.setCustomView(customActionBarView);
}
/**
* Sets custom view on ActionBar for Save activities
*
* @param actionBar
* @param saveText
* @param saveOnClickListener
*/
public static void setSaveView(ActionBar actionBar, int saveText,
OnClickListener saveOnClickListener) {
// Inflate a "Save" custom action bar view to serve as the "Up" affordance.
final LayoutInflater inflater = (LayoutInflater) actionBar.getThemedContext()
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
final View customActionBarView = inflater
.inflate(R.layout.actionbar_custom_view_save, null);
((TextView) customActionBarView.findViewById(R.id.actionbar_save_text)).setText(saveText);
customActionBarView.findViewById(R.id.actionbar_save).setOnClickListener(
saveOnClickListener);
// Show the custom action bar view and hide the normal Home icon and title.
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setCustomView(customActionBarView);
}
/**
* Sets custom view on ActionBar for Save/Cancel activities
*
* @param actionBar
* @param saveText
* @param saveOnClickListener
* @param cancelText
* @param cancelOnClickListener
*/
public static void setSaveCancelView(ActionBar actionBar, int saveText,
OnClickListener saveOnClickListener, int cancelText,
OnClickListener cancelOnClickListener) {
// Inflate a "Done"/"Cancel" custom action bar view
final LayoutInflater inflater = (LayoutInflater) actionBar.getThemedContext()
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
final View customActionBarView = inflater.inflate(
R.layout.actionbar_custom_view_save_cancel, null);
((TextView) customActionBarView.findViewById(R.id.actionbar_save_text)).setText(saveText);
customActionBarView.findViewById(R.id.actionbar_save).setOnClickListener(
saveOnClickListener);
((TextView) customActionBarView.findViewById(R.id.actionbar_cancel_text))
.setText(cancelText);
customActionBarView.findViewById(R.id.actionbar_cancel).setOnClickListener(
cancelOnClickListener);
// Show the custom action bar view and hide the normal Home icon and title.
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setCustomView(customActionBarView, new ActionBar.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
}
}

View File

@ -139,7 +139,7 @@ public class ExportHelper {
// Message is received after exporting is done in ApgService
KeychainIntentServiceHandler exportHandler = new KeychainIntentServiceHandler(activity,
R.string.progress_exporting, ProgressDialog.STYLE_HORIZONTAL) {
activity.getString(R.string.progress_exporting), ProgressDialog.STYLE_HORIZONTAL) {
public void handleMessage(Message message) {
// handle messages by standard ApgHandler first
super.handleMessage(message);

View File

@ -87,7 +87,7 @@ public class ProviderHelper {
}
/**
* Retrieves the actual PGPPublicKeyRing object from the database blob based on the maserKeyId
* Retrieves the actual PGPPublicKeyRing object from the database blob based on the masterKeyId
*/
public static PGPPublicKeyRing getPGPPublicKeyRingByMasterKeyId(Context context,
long masterKeyId) {
@ -110,11 +110,8 @@ public class ProviderHelper {
*/
public static PGPPublicKey getPGPPublicKeyByKeyId(Context context, long keyId) {
PGPPublicKeyRing keyRing = getPGPPublicKeyRingByKeyId(context, keyId);
if (keyRing == null) {
return null;
}
return keyRing.getPublicKey(keyId);
return (keyRing == null)? null : keyRing.getPublicKey(keyId);
}
/**
@ -149,11 +146,8 @@ public class ProviderHelper {
*/
public static PGPSecretKey getPGPSecretKeyByKeyId(Context context, long keyId) {
PGPSecretKeyRing keyRing = getPGPSecretKeyRingByKeyId(context, keyId);
if (keyRing == null) {
return null;
}
return keyRing.getSecretKey(keyId);
return (keyRing == null) ? null : keyRing.getSecretKey(keyId);
}
/**

View File

@ -596,13 +596,23 @@ public class KeychainIntentService extends IntentService implements ProgressDial
String passphrase = data.getString(GENERATE_KEY_SYMMETRIC_PASSPHRASE);
/* Operation */
int keysTotal = 2;
int keysCreated = 0;
setProgress(
getApplicationContext().getResources().getQuantityString(R.plurals.progress_generating, keysTotal),
keysCreated,
keysTotal);
PgpKeyOperation keyOperations = new PgpKeyOperation(this, this);
PGPSecretKey masterKey = keyOperations.createKey(Id.choice.algorithm.rsa,
4096, passphrase, true);
keysCreated++;
setProgress(keysCreated, keysTotal);
PGPSecretKey subKey = keyOperations.createKey(Id.choice.algorithm.rsa,
4096, passphrase, false);
keysCreated++;
setProgress(keysCreated, keysTotal);
// TODO: default to one master for cert, one sub for encrypt and one sub
// for sign

View File

@ -50,21 +50,26 @@ public class KeychainIntentServiceHandler extends Handler {
this.mActivity = activity;
}
public KeychainIntentServiceHandler(Activity activity, ProgressDialogFragment progressDialogFragment) {
public KeychainIntentServiceHandler(Activity activity,
ProgressDialogFragment progressDialogFragment) {
this.mActivity = activity;
this.mProgressDialogFragment = progressDialogFragment;
}
public KeychainIntentServiceHandler(Activity activity, int progressDialogMessageId, int progressDialogStyle) {
this(activity, progressDialogMessageId, progressDialogStyle, false, null);
public KeychainIntentServiceHandler(Activity activity, String progressDialogMessage,
int progressDialogStyle) {
this(activity, progressDialogMessage, progressDialogStyle, false, null);
}
public KeychainIntentServiceHandler(Activity activity, int progressDialogMessageId,
public KeychainIntentServiceHandler(Activity activity, String progressDialogMessage,
int progressDialogStyle, boolean cancelable,
OnCancelListener onCancelListener) {
this.mActivity = activity;
this.mProgressDialogFragment = ProgressDialogFragment.newInstance(progressDialogMessageId,
progressDialogStyle, cancelable, onCancelListener);
this.mProgressDialogFragment = ProgressDialogFragment.newInstance(
progressDialogMessage,
progressDialogStyle,
cancelable,
onCancelListener);
}
public void showProgressDialog(FragmentActivity activity) {
@ -83,43 +88,43 @@ public class KeychainIntentServiceHandler extends Handler {
Bundle data = message.getData();
switch (message.arg1) {
case MESSAGE_OKAY:
mProgressDialogFragment.dismissAllowingStateLoss();
case MESSAGE_OKAY:
mProgressDialogFragment.dismissAllowingStateLoss();
break;
break;
case MESSAGE_EXCEPTION:
mProgressDialogFragment.dismissAllowingStateLoss();
case MESSAGE_EXCEPTION:
mProgressDialogFragment.dismissAllowingStateLoss();
// show error from service
if (data.containsKey(DATA_ERROR)) {
Toast.makeText(mActivity,
mActivity.getString(R.string.error_message, data.getString(DATA_ERROR)),
Toast.LENGTH_SHORT).show();
}
break;
case MESSAGE_UPDATE_PROGRESS:
if (data.containsKey(DATA_PROGRESS) && data.containsKey(DATA_PROGRESS_MAX)) {
// update progress from service
if (data.containsKey(DATA_MESSAGE)) {
mProgressDialogFragment.setProgress(data.getString(DATA_MESSAGE),
data.getInt(DATA_PROGRESS), data.getInt(DATA_PROGRESS_MAX));
} else if (data.containsKey(DATA_MESSAGE_ID)) {
mProgressDialogFragment.setProgress(data.getInt(DATA_MESSAGE_ID),
data.getInt(DATA_PROGRESS), data.getInt(DATA_PROGRESS_MAX));
} else {
mProgressDialogFragment.setProgress(data.getInt(DATA_PROGRESS),
data.getInt(DATA_PROGRESS_MAX));
// show error from service
if (data.containsKey(DATA_ERROR)) {
Toast.makeText(mActivity,
mActivity.getString(R.string.error_message, data.getString(DATA_ERROR)),
Toast.LENGTH_SHORT).show();
}
}
break;
break;
default:
break;
case MESSAGE_UPDATE_PROGRESS:
if (data.containsKey(DATA_PROGRESS) && data.containsKey(DATA_PROGRESS_MAX)) {
// update progress from service
if (data.containsKey(DATA_MESSAGE)) {
mProgressDialogFragment.setProgress(data.getString(DATA_MESSAGE),
data.getInt(DATA_PROGRESS), data.getInt(DATA_PROGRESS_MAX));
} else if (data.containsKey(DATA_MESSAGE_ID)) {
mProgressDialogFragment.setProgress(data.getInt(DATA_MESSAGE_ID),
data.getInt(DATA_PROGRESS), data.getInt(DATA_PROGRESS_MAX));
} else {
mProgressDialogFragment.setProgress(data.getInt(DATA_PROGRESS),
data.getInt(DATA_PROGRESS_MAX));
}
}
break;
default:
break;
}
}
}

View File

@ -230,7 +230,7 @@ public class CertifyKeyActivity extends ActionBarActivity implements
// Message is received after signing is done in ApgService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this,
R.string.progress_signing, ProgressDialog.STYLE_SPINNER) {
getString(R.string.progress_signing), ProgressDialog.STYLE_SPINNER) {
public void handleMessage(Message message) {
// handle messages by standard ApgHandler first
super.handleMessage(message);
@ -283,7 +283,7 @@ public class CertifyKeyActivity extends ActionBarActivity implements
// Message is received after uploading is done in ApgService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this,
R.string.progress_exporting, ProgressDialog.STYLE_HORIZONTAL) {
getString(R.string.progress_exporting), ProgressDialog.STYLE_HORIZONTAL) {
public void handleMessage(Message message) {
// handle messages by standard ApgHandler first
super.handleMessage(message);

View File

@ -646,7 +646,7 @@ public class DecryptActivity extends DrawerActivity {
// Message is received after encrypting is done in ApgService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this,
R.string.progress_decrypting, ProgressDialog.STYLE_HORIZONTAL) {
getString(R.string.progress_decrypting), ProgressDialog.STYLE_HORIZONTAL) {
public void handleMessage(Message message) {
// handle messages by standard ApgHandler first
super.handleMessage(message);

View File

@ -187,7 +187,8 @@ public class EditKeyActivity extends ActionBarActivity {
// Message is received after generating is done in ApgService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(
this, R.string.progress_generating, ProgressDialog.STYLE_SPINNER, true,
this, getResources().getQuantityString(R.plurals.progress_generating, 1),
ProgressDialog.STYLE_HORIZONTAL, true,
new DialogInterface.OnCancelListener() {
@Override
@ -249,7 +250,7 @@ public class EditKeyActivity extends ActionBarActivity {
*/
private void handleActionEditKey(Intent intent) {
// Inflate a "Done"/"Cancel" custom action bar
ActionBarHelper.setDoneView(getSupportActionBar(), R.string.btn_save,
ActionBarHelper.setSaveView(getSupportActionBar(), R.string.btn_save,
new View.OnClickListener() {
@Override
public void onClick(View v) {
@ -543,7 +544,7 @@ public class EditKeyActivity extends ActionBarActivity {
// Message is received after saving is done in ApgService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this,
R.string.progress_saving, ProgressDialog.STYLE_HORIZONTAL) {
getString(R.string.progress_saving), ProgressDialog.STYLE_HORIZONTAL) {
public void handleMessage(Message message) {
// handle messages by standard ApgHandler first
super.handleMessage(message);

View File

@ -52,17 +52,21 @@ import android.os.Message;
import android.os.Messenger;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewFlipper;
import com.beardedhen.androidbootstrap.BootstrapButton;
import com.beardedhen.androidbootstrap.FontAwesomeText;
import com.devspark.appmsg.AppMsg;
public class EncryptActivity extends DrawerActivity {
@ -114,6 +118,11 @@ public class EncryptActivity extends DrawerActivity {
private String mInputFilename = null;
private String mOutputFilename = null;
private Integer mShortAnimationDuration = null;
private boolean mFileAdvancedSettingsVisible = false;
private TextView mFileAdvancedSettings = null;
private LinearLayout mFileAdvancedSettingsContainer = null;
private FontAwesomeText mAdvancedSettingsIcon;
private boolean mAsciiArmorDemand = false;
private boolean mOverrideAsciiArmor = false;
@ -148,6 +157,9 @@ public class EncryptActivity extends DrawerActivity {
updateMode();
updateActionBarButtons();
// retrieve and cache the system's short animation time
mShortAnimationDuration = getResources().getInteger(android.R.integer.config_shortAnimTime);
}
/**
@ -605,7 +617,7 @@ public class EncryptActivity extends DrawerActivity {
// Message is received after encrypting is done in ApgService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this,
R.string.progress_encrypting, ProgressDialog.STYLE_HORIZONTAL) {
getString(R.string.progress_encrypting), ProgressDialog.STYLE_HORIZONTAL) {
public void handleMessage(Message message) {
// handle messages by standard ApgHandler first
super.handleMessage(message);
@ -793,6 +805,50 @@ public class EncryptActivity extends DrawerActivity {
}
});
mAdvancedSettingsIcon = (FontAwesomeText) findViewById(R.id.advancedSettingsIcon);
mFileAdvancedSettingsContainer = (LinearLayout) findViewById(R.id.fileAdvancedSettingsContainer);
mFileAdvancedSettings = (TextView) findViewById(R.id.advancedSettings);
LinearLayout advancedSettingsControl = (LinearLayout) findViewById(R.id.advancedSettingsControl);
advancedSettingsControl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mFileAdvancedSettingsVisible = !mFileAdvancedSettingsVisible;
if (mFileAdvancedSettingsVisible) {
mAdvancedSettingsIcon.setIcon("fa-chevron-down");
mFileAdvancedSettingsContainer.setVisibility(View.VISIBLE);
AlphaAnimation animation = new AlphaAnimation(0f, 1f);
animation.setDuration(mShortAnimationDuration);
mFileAdvancedSettingsContainer.startAnimation(animation);
mFileAdvancedSettings.setText(R.string.btn_encryption_advanced_settings_hide);
} else {
mAdvancedSettingsIcon.setIcon("fa-chevron-right");
AlphaAnimation animation = new AlphaAnimation(1f, 0f);
animation.setDuration(mShortAnimationDuration);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
// do nothing
}
@Override
public void onAnimationEnd(Animation animation) {
// making sure that at the end the container is completely removed from view
mFileAdvancedSettingsContainer.setVisibility(View.GONE);
}
@Override
public void onAnimationRepeat(Animation animation) {
// do nothing
}
});
mFileAdvancedSettingsContainer.startAnimation(animation);
mFileAdvancedSettings.setText(R.string.btn_encryption_advanced_settings_show);
}
}
});
mFileCompression = (Spinner) findViewById(R.id.fileCompression);
Choice[] choices = new Choice[]{
new Choice(Id.choice.compression.none, getString(R.string.choice_none) + " ("

View File

@ -360,51 +360,53 @@ public class ImportKeysActivity extends DrawerActivity implements ActionBar.OnNa
// }
// Message is received after importing is done in ApgService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this,
R.string.progress_importing, ProgressDialog.STYLE_HORIZONTAL) {
public void handleMessage(Message message) {
// handle messages by standard ApgHandler first
super.handleMessage(message);
if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {
// get returned data bundle
Bundle returnData = message.getData();
int added = returnData.getInt(KeychainIntentService.RESULT_IMPORT_ADDED);
int updated = returnData
.getInt(KeychainIntentService.RESULT_IMPORT_UPDATED);
int bad = returnData.getInt(KeychainIntentService.RESULT_IMPORT_BAD);
String toastMessage;
if (added > 0 && updated > 0) {
String addedStr = getResources().getQuantityString(
R.plurals.keys_added_and_updated_1, added, added);
String updatedStr = getResources().getQuantityString(
R.plurals.keys_added_and_updated_2, updated, updated);
toastMessage = addedStr + updatedStr;
} else if (added > 0) {
toastMessage = getResources().getQuantityString(R.plurals.keys_added,
added, added);
} else if (updated > 0) {
toastMessage = getResources().getQuantityString(R.plurals.keys_updated,
updated, updated);
} else {
toastMessage = getString(R.string.no_keys_added_or_updated);
}
AppMsg.makeText(ImportKeysActivity.this, toastMessage, AppMsg.STYLE_INFO)
.show();
if (bad > 0) {
BadImportKeyDialogFragment badImportKeyDialogFragment = BadImportKeyDialogFragment.newInstance(bad);
badImportKeyDialogFragment.show(getSupportFragmentManager(), "badKeyDialog");
}
}
}
};
/**
* Import keys with mImportData
*/
public void importKeys() {
// Message is received after importing is done in ApgService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(
this,
getString(R.string.progress_importing),
ProgressDialog.STYLE_HORIZONTAL) {
public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message);
if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {
// get returned data bundle
Bundle returnData = message.getData();
int added = returnData.getInt(KeychainIntentService.RESULT_IMPORT_ADDED);
int updated = returnData
.getInt(KeychainIntentService.RESULT_IMPORT_UPDATED);
int bad = returnData.getInt(KeychainIntentService.RESULT_IMPORT_BAD);
String toastMessage;
if (added > 0 && updated > 0) {
String addedStr = getResources().getQuantityString(
R.plurals.keys_added_and_updated_1, added, added);
String updatedStr = getResources().getQuantityString(
R.plurals.keys_added_and_updated_2, updated, updated);
toastMessage = addedStr + updatedStr;
} else if (added > 0) {
toastMessage = getResources().getQuantityString(R.plurals.keys_added,
added, added);
} else if (updated > 0) {
toastMessage = getResources().getQuantityString(R.plurals.keys_updated,
updated, updated);
} else {
toastMessage = getString(R.string.no_keys_added_or_updated);
}
AppMsg.makeText(ImportKeysActivity.this, toastMessage, AppMsg.STYLE_INFO)
.show();
if (bad > 0) {
BadImportKeyDialogFragment badImportKeyDialogFragment = BadImportKeyDialogFragment.newInstance(bad);
badImportKeyDialogFragment.show(getSupportFragmentManager(), "badKeyDialog");
}
}
}
};
if (mListFragment.getKeyBytes() != null || mListFragment.getDataUri() != null) {
Log.d(Constants.TAG, "importKeys started");

View File

@ -171,15 +171,8 @@ public class KeyListPublicFragment extends Fragment implements SearchView.OnQuer
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
Set<Integer> positions = mAdapter.getCurrentCheckedPosition();
// get IDs for checked positions as long array
long[] ids = new long[positions.size()];
int i = 0;
for (int pos : positions) {
ids[i] = mAdapter.getItemId(pos);
i++;
}
// get row ids for checked positions as long array
long[] ids = mStickyList.getCheckedItemIds();
switch (item.getItemId()) {
case R.id.menu_key_list_public_multi_encrypt: {
@ -192,9 +185,8 @@ public class KeyListPublicFragment extends Fragment implements SearchView.OnQuer
}
case R.id.menu_key_list_public_multi_select_all: {
//Select all
int localCount = mStickyList.getCount();
for (int k = 0; k < localCount; k++) {
mStickyList.setItemChecked(k, true);
for (int i = 0; i < mStickyList.getCount(); i++) {
mStickyList.setItemChecked(i, true);
}
break;
}
@ -215,7 +207,7 @@ public class KeyListPublicFragment extends Fragment implements SearchView.OnQuer
} else {
mAdapter.removeSelection(position);
}
int count = mAdapter.getCurrentCheckedPosition().size();
int count = mStickyList.getCheckedItemCount();
String keysSelected = getResources().getQuantityString(
R.plurals.key_list_selected_keys, count, count);
mode.setTitle(keysSelected);
@ -272,8 +264,8 @@ public class KeyListPublicFragment extends Fragment implements SearchView.OnQuer
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
// Swap the new cursor in. (The framework will take care of closing the
// old cursor once we return.)
mAdapter.setSearchQuery(mCurQuery);
mAdapter.swapCursor(data);
mStickyList.setAdapter(mAdapter);
// NOTE: Not supported by StickyListHeader, but reimplemented here
@ -375,6 +367,20 @@ public class KeyListPublicFragment extends Fragment implements SearchView.OnQuer
// Execute this when searching
mSearchView.setOnQueryTextListener(this);
// Erase search result without focus
MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
mCurQuery = null;
getLoaderManager().restartLoader(0, null, KeyListPublicFragment.this);
return true;
}
});
super.onCreateOptionsMenu(menu, inflater);
}

View File

@ -91,15 +91,8 @@ public class KeyListSecretFragment extends ListFragment implements
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
Set<Integer> positions = mAdapter.getCurrentCheckedPosition();
// get IDs for checked positions as long array
long[] ids = new long[positions.size()];
int i = 0;
for (int pos : positions) {
ids[i] = mAdapter.getItemId(pos);
i++;
}
// get row ids for checked positions as long array
long[] ids = getListView().getCheckedItemIds();
switch (item.getItemId()) {
case R.id.menu_key_list_public_multi_delete: {
@ -108,9 +101,8 @@ public class KeyListSecretFragment extends ListFragment implements
}
case R.id.menu_key_list_public_multi_select_all: {
//Select all
int localCount = getListView().getCount();
for (int k = 0; k < localCount; k++) {
getListView().setItemChecked(k, true);
for (int i = 0; i < getListView().getCount(); i++) {
getListView().setItemChecked(i, true);
}
break;
}

View File

@ -311,6 +311,7 @@ public class SelectPublicKeyFragment extends ListFragmentWorkaround implements T
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
// Swap the new cursor in. (The framework will take care of closing the
// old cursor once we return.)
mAdapter.setSearchQuery(mCurQuery);
mAdapter.swapCursor(data);
// The list should now be shown.

View File

@ -24,10 +24,13 @@ import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.pgp.PgpKeyHelper;
import org.sufficientlysecure.keychain.provider.ProviderHelper;
import android.Manifest;
import android.app.Activity;
import android.app.ActivityOptions;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
@ -40,6 +43,7 @@ public class SelectSecretKeyLayoutFragment extends Fragment {
private TextView mKeyUserId;
private TextView mKeyUserIdRest;
private TextView mKeyMasterKeyIdHex;
private BootstrapButton mSelectKeyButton;
private Boolean mFilterCertify;
@ -61,26 +65,52 @@ public class SelectSecretKeyLayoutFragment extends Fragment {
public void selectKey(long secretKeyId) {
if (secretKeyId == Id.key.none) {
mKeyUserId.setText(R.string.api_settings_no_key);
mKeyMasterKeyIdHex.setText(R.string.api_settings_no_key);
mKeyUserIdRest.setText("");
mKeyUserId.setVisibility(View.GONE);
mKeyUserIdRest.setVisibility(View.GONE);
} else {
String uid = getResources().getString(R.string.user_id_no_name);
String uidExtra = "";
PGPSecretKeyRing keyRing = ProviderHelper.getPGPSecretKeyRingByMasterKeyId(
getActivity(), secretKeyId);
if (keyRing != null) {
PGPSecretKey key = PgpKeyHelper.getMasterKey(keyRing);
String masterkeyIdHex = PgpKeyHelper.convertKeyIdToHex(secretKeyId);
if (key != null) {
String userId = PgpKeyHelper.getMainUserIdSafe(getActivity(), key);
String chunks[] = userId.split(" <", 2);
uid = chunks[0];
if (chunks.length > 1) {
uidExtra = "<" + chunks[1];
String[] userIdSplit = PgpKeyHelper.splitUserId(userId);
String userName, userEmail;
if (userIdSplit[0] != null) {
userName = userIdSplit[0];
} else {
userName = getActivity().getResources().getString(R.string.user_id_no_name);
}
if (userIdSplit[1] != null) {
userEmail = userIdSplit[1];
} else {
userEmail = getActivity().getResources().getString(R.string.error_user_id_no_email);
}
mKeyMasterKeyIdHex.setText(masterkeyIdHex);
mKeyUserId.setText(userName);
mKeyUserIdRest.setText(userEmail);
mKeyUserId.setVisibility(View.VISIBLE);
mKeyUserIdRest.setVisibility(View.VISIBLE);
} else {
mKeyMasterKeyIdHex.setText(getActivity().getResources().getString(R.string.no_key));
mKeyUserId.setVisibility(View.GONE);
mKeyUserIdRest.setVisibility(View.GONE);
}
} else {
mKeyMasterKeyIdHex.setText(getActivity().getResources().getString(R.string.no_keys_added_or_updated) + " for master id: " + secretKeyId);
mKeyUserId.setVisibility(View.GONE);
mKeyUserIdRest.setVisibility(View.GONE);
}
mKeyUserId.setText(uid);
mKeyUserIdRest.setText(uidExtra);
}
}
@ -98,6 +128,7 @@ public class SelectSecretKeyLayoutFragment extends Fragment {
mKeyUserId = (TextView) view.findViewById(R.id.select_secret_key_user_id);
mKeyUserIdRest = (TextView) view.findViewById(R.id.select_secret_key_user_id_rest);
mKeyMasterKeyIdHex = (TextView) view.findViewById(R.id.select_secret_key_master_key_hex);
mSelectKeyButton = (BootstrapButton) view
.findViewById(R.id.select_secret_key_select_key_button);
mFilterCertify = false;
@ -117,30 +148,31 @@ public class SelectSecretKeyLayoutFragment extends Fragment {
startActivityForResult(intent, REQUEST_CODE_SELECT_KEY);
}
// Select Secret Key Activity delivers the intent which was sent by it using interface to Select
// Secret Key Fragment.Intent contains Master Key Id, User Email, User Name, Master Key Id Hex.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode & 0xFFFF) {
case REQUEST_CODE_SELECT_KEY: {
long secretKeyId;
if (resultCode == Activity.RESULT_OK) {
Bundle bundle = data.getExtras();
secretKeyId = bundle.getLong(SelectSecretKeyActivity.RESULT_EXTRA_MASTER_KEY_ID);
case REQUEST_CODE_SELECT_KEY: {
long secretKeyId;
if (resultCode == Activity.RESULT_OK) {
Bundle bundle = data.getExtras();
secretKeyId = bundle.getLong(SelectSecretKeyActivity.RESULT_EXTRA_MASTER_KEY_ID);
selectKey(secretKeyId);
selectKey(secretKeyId);
// remove displayed errors
mKeyUserId.setError(null);
// remove displayed errors
mKeyUserId.setError(null);
// give value back to callback
mCallback.onKeySelected(secretKeyId);
// give value back to callback
mCallback.onKeySelected(secretKeyId);
}
break;
}
break;
}
default:
super.onActivityResult(requestCode, resultCode, data);
default:
super.onActivityResult(requestCode, resultCode, data);
break;
break;
}
}
}

View File

@ -102,7 +102,7 @@ public class UploadKeyActivity extends ActionBarActivity {
// Message is received after uploading is done in ApgService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this,
R.string.progress_exporting, ProgressDialog.STYLE_HORIZONTAL) {
getString(R.string.progress_exporting), ProgressDialog.STYLE_HORIZONTAL) {
public void handleMessage(Message message) {
// handle messages by standard ApgHandler first
super.handleMessage(message);

View File

@ -19,13 +19,17 @@ package org.sufficientlysecure.keychain.ui;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.format.DateFormat;
import android.text.style.ForegroundColorSpan;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -258,9 +262,8 @@ public class ViewKeyMainFragment extends Fragment implements
fingerprintBlob = ProviderHelper.getFingerprint(getActivity(), mDataUri);
}
String fingerprint = PgpKeyHelper.convertFingerprintToHex(fingerprintBlob, true);
fingerprint = fingerprint.replace(" ", "\n");
mFingerprint.setText(fingerprint);
mFingerprint.setText(colorizeFingerprint(fingerprint));
}
mKeysAdapter.swapCursor(data);
@ -271,6 +274,24 @@ public class ViewKeyMainFragment extends Fragment implements
}
}
private SpannableStringBuilder colorizeFingerprint(String fingerprint) {
SpannableStringBuilder sb = new SpannableStringBuilder(fingerprint);
ForegroundColorSpan fcs = new ForegroundColorSpan(Color.BLACK);
// for each 4 characters of the fingerprint + 1 space
for (int i = 0; i < fingerprint.length(); i += 5) {
String fourChars = fingerprint.substring(i, Math.min(i + 4, fingerprint.length()));
// Create a foreground color by converting the 4 fingerprint chars to an int hashcode
// and then converting that int to hex to use as a color
fcs = new ForegroundColorSpan(
Color.parseColor(String.format("#%06X", (0xFFFFFF & fourChars.hashCode()))));
sb.setSpan(fcs, i, Math.min(i+4, fingerprint.length()), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
}
return sb;
}
/**
* This is called when the last Cursor provided to onLoadFinished() above is about to be closed.
* We need to make sure we are no longer using it.

View File

@ -0,0 +1,66 @@
/*
* Copyright (C) 2014 Dominik Schürmann <dominik@dominikschuermann.de>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.sufficientlysecure.keychain.ui.adapter;
import android.content.Context;
import android.database.Cursor;
import android.support.v4.widget.CursorAdapter;
import android.text.Spannable;
import android.text.style.ForegroundColorSpan;
import org.sufficientlysecure.keychain.R;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public abstract class HighlightQueryCursorAdapter extends CursorAdapter {
private String mCurQuery;
public HighlightQueryCursorAdapter(Context context, Cursor c, int flags) {
super(context, c, flags);
mCurQuery = null;
}
public void setSearchQuery(String searchQuery) {
mCurQuery = searchQuery;
}
public String getSearchQuery() {
return mCurQuery;
}
protected Spannable highlightSearchQuery(String text) {
Spannable highlight = Spannable.Factory.getInstance().newSpannable(text);
if (mCurQuery != null) {
Pattern pattern = Pattern.compile("(?i)" + mCurQuery);
Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
highlight.setSpan(
new ForegroundColorSpan(mContext.getResources().getColor(R.color.emphasis)),
matcher.start(),
matcher.end(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return highlight;
} else {
return highlight;
}
}
}

View File

@ -42,7 +42,15 @@ public class ImportKeysAdapter extends ArrayAdapter<ImportKeysListEntry> {
protected Activity mActivity;
protected List<ImportKeysListEntry> data;
static class ViewHolder{
private TextView mainUserId;
private TextView mainUserIdRest;
private TextView keyId;
private TextView fingerprint;
private TextView algorithm;
private TextView status;
}
public ImportKeysAdapter(Activity activity) {
super(activity, -1);
mActivity = activity;
@ -86,16 +94,21 @@ public class ImportKeysAdapter extends ArrayAdapter<ImportKeysListEntry> {
public View getView(int position, View convertView, ViewGroup parent) {
ImportKeysListEntry entry = data.get(position);
View view = mInflater.inflate(R.layout.import_keys_list_entry, null);
TextView mainUserId = (TextView) view.findViewById(R.id.mainUserId);
TextView mainUserIdRest = (TextView) view.findViewById(R.id.mainUserIdRest);
TextView keyId = (TextView) view.findViewById(R.id.keyId);
TextView fingerprint = (TextView) view.findViewById(R.id.fingerprint);
TextView algorithm = (TextView) view.findViewById(R.id.algorithm);
TextView status = (TextView) view.findViewById(R.id.status);
ViewHolder holder;
if(convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.import_keys_list_entry, null);
holder.mainUserId = (TextView) convertView.findViewById(R.id.mainUserId);
holder.mainUserIdRest = (TextView) convertView.findViewById(R.id.mainUserIdRest);
holder.keyId = (TextView) convertView.findViewById(R.id.keyId);
holder.fingerprint = (TextView) convertView.findViewById(R.id.fingerprint);
holder.algorithm = (TextView) convertView.findViewById(R.id.algorithm);
holder.status = (TextView) convertView.findViewById(R.id.status);
convertView.setTag(holder);
}
else{
holder = (ViewHolder)convertView.getTag();
}
// main user id
String userId = entry.userIds.get(0);
String[] userIdSplit = PgpKeyHelper.splitUserId(userId);
@ -105,39 +118,39 @@ public class ImportKeysAdapter extends ArrayAdapter<ImportKeysListEntry> {
// show red user id if it is a secret key
if (entry.secretKey) {
userIdSplit[0] = mActivity.getString(R.string.secret_key) + " " + userIdSplit[0];
mainUserId.setTextColor(Color.RED);
holder.mainUserId.setTextColor(Color.RED);
}
mainUserId.setText(userIdSplit[0]);
holder.mainUserId.setText(userIdSplit[0]);
} else {
mainUserId.setText(R.string.user_id_no_name);
holder.mainUserId.setText(R.string.user_id_no_name);
}
// email
if (userIdSplit[1] != null) {
mainUserIdRest.setText(userIdSplit[1]);
mainUserIdRest.setVisibility(View.VISIBLE);
holder.mainUserIdRest.setText(userIdSplit[1]);
holder.mainUserIdRest.setVisibility(View.VISIBLE);
} else {
mainUserIdRest.setVisibility(View.GONE);
holder.mainUserIdRest.setVisibility(View.GONE);
}
keyId.setText(entry.hexKeyId);
holder.keyId.setText(entry.hexKeyId);
if (entry.fingerPrint != null) {
fingerprint.setText(mActivity.getString(R.string.fingerprint) + " " + entry.fingerPrint);
fingerprint.setVisibility(View.VISIBLE);
holder.fingerprint.setText(mActivity.getString(R.string.fingerprint) + " " + entry.fingerPrint);
holder.fingerprint.setVisibility(View.VISIBLE);
} else {
fingerprint.setVisibility(View.GONE);
holder.fingerprint.setVisibility(View.GONE);
}
algorithm.setText("" + entry.bitStrength + "/" + entry.algorithm);
holder.algorithm.setText("" + entry.bitStrength + "/" + entry.algorithm);
if (entry.revoked) {
status.setText(R.string.revoked);
holder.status.setText(R.string.revoked);
} else {
status.setVisibility(View.GONE);
holder.status.setVisibility(View.GONE);
}
LinearLayout ll = (LinearLayout) view.findViewById(R.id.list);
LinearLayout ll = (LinearLayout) convertView.findViewById(R.id.list);
if (entry.userIds.size() == 1) {
ll.setVisibility(View.GONE);
} else {
@ -162,10 +175,10 @@ public class ImportKeysAdapter extends ArrayAdapter<ImportKeysListEntry> {
}
}
CheckBox cBox = (CheckBox) view.findViewById(R.id.selected);
CheckBox cBox = (CheckBox) convertView.findViewById(R.id.selected);
cBox.setChecked(entry.isSelected());
return view;
return convertView;
}
}

View File

@ -125,7 +125,10 @@ public class ImportKeysListEntry implements Serializable, Parcelable {
* Constructor for later querying from keyserver
*/
public ImportKeysListEntry() {
// keys from keyserver are always public keys
secretKey = false;
// do not select by default
selected = false;
userIds = new ArrayList<String>();
}
@ -152,11 +155,10 @@ public class ImportKeysListEntry implements Serializable, Parcelable {
// selected is default
this.selected = true;
if ( !(pgpKeyRing instanceof PGPSecretKeyRing) ) {
secretKey = false;
}
else{
if (pgpKeyRing instanceof PGPSecretKeyRing) {
secretKey = true;
} else {
secretKey = false;
}
userIds = new ArrayList<String>();

View File

@ -20,6 +20,7 @@ package org.sufficientlysecure.keychain.ui.adapter;
import java.util.HashMap;
import java.util.Set;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.pgp.PgpKeyHelper;
@ -32,7 +33,6 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Color;
import android.support.v4.widget.CursorAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -41,7 +41,7 @@ import android.widget.TextView;
/**
* Implements StickyListHeadersAdapter from library
*/
public class KeyListPublicAdapter extends CursorAdapter implements StickyListHeadersAdapter {
public class KeyListPublicAdapter extends HighlightQueryCursorAdapter implements StickyListHeadersAdapter {
private LayoutInflater mInflater;
private int mSectionColumnIndex;
private int mIndexUserId;
@ -52,7 +52,6 @@ public class KeyListPublicAdapter extends CursorAdapter implements StickyListHea
public KeyListPublicAdapter(Context context, Cursor c, int flags, int sectionColumnIndex) {
super(context, c, flags);
mInflater = LayoutInflater.from(context);
mSectionColumnIndex = sectionColumnIndex;
initIndex(c);
@ -93,12 +92,12 @@ public class KeyListPublicAdapter extends CursorAdapter implements StickyListHea
String userId = cursor.getString(mIndexUserId);
String[] userIdSplit = PgpKeyHelper.splitUserId(userId);
if (userIdSplit[0] != null) {
mainUserId.setText(userIdSplit[0]);
mainUserId.setText(highlightSearchQuery(userIdSplit[0]));
} else {
mainUserId.setText(R.string.user_id_no_name);
}
if (userIdSplit[1] != null) {
mainUserIdRest.setText(userIdSplit[1]);
mainUserIdRest.setText(highlightSearchQuery(userIdSplit[1]));
mainUserIdRest.setVisibility(View.VISIBLE);
} else {
mainUserIdRest.setVisibility(View.GONE);
@ -193,15 +192,6 @@ public class KeyListPublicAdapter extends CursorAdapter implements StickyListHea
notifyDataSetChanged();
}
public boolean isPositionChecked(int position) {
Boolean result = mSelection.get(position);
return result == null ? false : result;
}
public Set<Integer> getCurrentCheckedPosition() {
return mSelection.keySet();
}
public void removeSelection(int position) {
mSelection.remove(position);
notifyDataSetChanged();
@ -220,11 +210,12 @@ public class KeyListPublicAdapter extends CursorAdapter implements StickyListHea
/**
* Change color for multi-selection
*/
// default color
v.setBackgroundColor(Color.TRANSPARENT);
if (mSelection.get(position) != null && mSelection.get(position).booleanValue()) {
// this is a selected position, change color!
// color for selected items
v.setBackgroundColor(parent.getResources().getColor(R.color.emphasis));
} else {
// default color
v.setBackgroundColor(Color.TRANSPARENT);
}
return v;
}

View File

@ -98,16 +98,7 @@ public class KeyListSecretAdapter extends CursorAdapter {
mSelection.put(position, value);
notifyDataSetChanged();
}
public boolean isPositionChecked(int position) {
Boolean result = mSelection.get(position);
return result == null ? false : result;
}
public Set<Integer> getCurrentCheckedPosition() {
return mSelection.keySet();
}
public void removeSelection(int position) {
mSelection.remove(position);
notifyDataSetChanged();
@ -126,11 +117,12 @@ public class KeyListSecretAdapter extends CursorAdapter {
/**
* Change color for multi-selection
*/
// default color
v.setBackgroundColor(Color.TRANSPARENT);
if (mSelection.get(position) != null) {
// this is a selected position, change color!
// color for selected items
v.setBackgroundColor(parent.getResources().getColor(R.color.emphasis));
} else {
// default color
v.setBackgroundColor(Color.TRANSPARENT);
}
return v;
}

View File

@ -25,7 +25,6 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.UserIds;
import android.content.Context;
import android.database.Cursor;
import android.support.v4.widget.CursorAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -33,7 +32,9 @@ import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;
public class SelectKeyCursorAdapter extends CursorAdapter {
public class SelectKeyCursorAdapter extends HighlightQueryCursorAdapter {
protected int mKeyType;
@ -55,7 +56,6 @@ public class SelectKeyCursorAdapter extends CursorAdapter {
mInflater = LayoutInflater.from(context);
mListView = listView;
mKeyType = keyType;
initIndex(c);
}
@ -104,12 +104,12 @@ public class SelectKeyCursorAdapter extends CursorAdapter {
String[] userIdSplit = PgpKeyHelper.splitUserId(userId);
if (userIdSplit[0] != null) {
mainUserId.setText(userIdSplit[0]);
mainUserId.setText(highlightSearchQuery(userIdSplit[0]));
} else {
mainUserId.setText(R.string.user_id_no_name);
}
if (userIdSplit[1] != null) {
mainUserIdRest.setText(userIdSplit[1]);
mainUserIdRest.setText(highlightSearchQuery(userIdSplit[1]));
} else {
mainUserIdRest.setText("");
}
@ -164,5 +164,4 @@ public class SelectKeyCursorAdapter extends CursorAdapter {
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return mInflater.inflate(R.layout.select_key_item, null);
}
}

View File

@ -67,7 +67,7 @@ public class DeleteFileDialogFragment extends DialogFragment {
alert.setMessage(this.getString(R.string.file_delete_confirmation, deleteFile));
alert.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
dismiss();
@ -83,7 +83,10 @@ public class DeleteFileDialogFragment extends DialogFragment {
intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
ProgressDialogFragment deletingDialog = ProgressDialogFragment.newInstance(
R.string.progress_deleting_securely, ProgressDialog.STYLE_HORIZONTAL, false, null);
getString(R.string.progress_deleting_securely),
ProgressDialog.STYLE_HORIZONTAL,
false,
null);
// Message is received after deleting is done in ApgService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(activity, deletingDialog) {

View File

@ -30,7 +30,7 @@ import android.view.KeyEvent;
import org.sufficientlysecure.keychain.R;
public class ProgressDialogFragment extends DialogFragment {
private static final String ARG_MESSAGE_ID = "message_id";
private static final String ARG_MESSAGE = "message";
private static final String ARG_STYLE = "style";
private static final String ARG_CANCELABLE = "cancelable";
@ -39,16 +39,16 @@ public class ProgressDialogFragment extends DialogFragment {
/**
* Creates new instance of this fragment
*
* @param messageId
* @param message
* @param style
* @param cancelable
* @return
*/
public static ProgressDialogFragment newInstance(int messageId, int style, boolean cancelable,
public static ProgressDialogFragment newInstance(String message, int style, boolean cancelable,
OnCancelListener onCancelListener) {
ProgressDialogFragment frag = new ProgressDialogFragment();
Bundle args = new Bundle();
args.putInt(ARG_MESSAGE_ID, messageId);
args.putString(ARG_MESSAGE, message);
args.putInt(ARG_STYLE, style);
args.putBoolean(ARG_CANCELABLE, cancelable);
@ -117,22 +117,22 @@ public class ProgressDialogFragment extends DialogFragment {
dialog.setCancelable(false);
dialog.setCanceledOnTouchOutside(false);
int messageId = getArguments().getInt(ARG_MESSAGE_ID);
String message = getArguments().getString(ARG_MESSAGE);
int style = getArguments().getInt(ARG_STYLE);
boolean cancelable = getArguments().getBoolean(ARG_CANCELABLE);
dialog.setMessage(getString(messageId));
dialog.setMessage(message);
dialog.setProgressStyle(style);
if (cancelable) {
dialog.setButton(DialogInterface.BUTTON_NEGATIVE,
activity.getString(R.string.progress_cancel),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
}
// Disable the back button
@ -140,7 +140,6 @@ public class ProgressDialogFragment extends DialogFragment {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true;
}

View File

@ -80,19 +80,19 @@ public class SectionView extends LinearLayout implements OnClickListener, Editor
public void setType(int type) {
mType = type;
switch (type) {
case Id.type.user_id: {
mTitle.setText(R.string.section_user_ids);
break;
}
case Id.type.user_id: {
mTitle.setText(R.string.section_user_ids);
break;
}
case Id.type.key: {
mTitle.setText(R.string.section_keys);
break;
}
case Id.type.key: {
mTitle.setText(R.string.section_keys);
break;
}
default: {
break;
}
default: {
break;
}
}
}
@ -103,7 +103,9 @@ public class SectionView extends LinearLayout implements OnClickListener, Editor
}
}
/** {@inheritDoc} */
/**
* {@inheritDoc}
*/
@Override
protected void onFinishInflate() {
mInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@ -121,7 +123,9 @@ public class SectionView extends LinearLayout implements OnClickListener, Editor
super.onFinishInflate();
}
/** {@inheritDoc} */
/**
* {@inheritDoc}
*/
public void onDeleted(Editor editor) {
this.updateEditorsVisible();
}
@ -131,38 +135,40 @@ public class SectionView extends LinearLayout implements OnClickListener, Editor
mEditors.setVisibility(hasChildren ? View.VISIBLE : View.GONE);
}
/** {@inheritDoc} */
/**
* {@inheritDoc}
*/
public void onClick(View v) {
if (canEdit) {
switch (mType) {
case Id.type.user_id: {
UserIdEditor view = (UserIdEditor) mInflater.inflate(
R.layout.edit_key_user_id_item, mEditors, false);
view.setEditorListener(this);
if (mEditors.getChildCount() == 0) {
view.setIsMainUserId(true);
}
mEditors.addView(view);
break;
}
case Id.type.key: {
CreateKeyDialogFragment mCreateKeyDialogFragment = CreateKeyDialogFragment.newInstance(mEditors.getChildCount());
mCreateKeyDialogFragment.setOnAlgorithmSelectedListener(new CreateKeyDialogFragment.OnAlgorithmSelectedListener() {
@Override
public void onAlgorithmSelected(Choice algorithmChoice, int keySize) {
mNewKeyAlgorithmChoice = algorithmChoice;
mNewKeySize = keySize;
createKey();
case Id.type.user_id: {
UserIdEditor view = (UserIdEditor) mInflater.inflate(
R.layout.edit_key_user_id_item, mEditors, false);
view.setEditorListener(this);
if (mEditors.getChildCount() == 0) {
view.setIsMainUserId(true);
}
});
mCreateKeyDialogFragment.show(mActivity.getSupportFragmentManager(), "createKeyDialog");
break;
}
mEditors.addView(view);
break;
}
default: {
break;
}
case Id.type.key: {
CreateKeyDialogFragment mCreateKeyDialogFragment = CreateKeyDialogFragment.newInstance(mEditors.getChildCount());
mCreateKeyDialogFragment.setOnAlgorithmSelectedListener(new CreateKeyDialogFragment.OnAlgorithmSelectedListener() {
@Override
public void onAlgorithmSelected(Choice algorithmChoice, int keySize) {
mNewKeyAlgorithmChoice = algorithmChoice;
mNewKeySize = keySize;
createKey();
}
});
mCreateKeyDialogFragment.show(mActivity.getSupportFragmentManager(), "createKeyDialog");
break;
}
default: {
break;
}
}
this.updateEditorsVisible();
}
@ -238,13 +244,16 @@ public class SectionView extends LinearLayout implements OnClickListener, Editor
intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
// show progress dialog
mGeneratingDialog = ProgressDialogFragment.newInstance(R.string.progress_generating,
ProgressDialog.STYLE_SPINNER, true, new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
mActivity.stopService(intent);
}
});
mGeneratingDialog = ProgressDialogFragment.newInstance(
getResources().getQuantityString(R.plurals.progress_generating, 1),
ProgressDialog.STYLE_SPINNER,
true,
new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
mActivity.stopService(intent);
}
});
// Message is received after generating is done in ApgService
KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(mActivity,

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 500 B

View File

@ -0,0 +1,27 @@
<!--
Copyright 2013 The Android Open Source Project
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.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:dividerPadding="12dp"
android:orientation="horizontal"
android:divider="@drawable/abc_list_divider_holo_light"
android:showDividers="end" >
<include layout="@layout/actionbar_include_save_button" />
</LinearLayout>

View File

@ -0,0 +1,29 @@
<!--
Copyright 2013 The Android Open Source Project
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.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:dividerPadding="12dp"
android:divider="@drawable/abc_list_divider_holo_light"
android:orientation="horizontal"
android:showDividers="middle">
<include layout="@layout/actionbar_include_cancel_button" />
<include layout="@layout/actionbar_include_save_button" />
</LinearLayout>

View File

@ -0,0 +1,36 @@
<!--
Copyright 2013 The Android Open Source Project
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.
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/actionbar_save"
style="@style/Widget.AppCompat.ActionButton"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1">
<TextView
android:id="@+id/actionbar_save_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:drawableLeft="@drawable/ic_action_save"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:paddingRight="20dp"
style="@style/Widget.AppCompat.Light.ActionBar.TabText"
android:text="Save (set in-code!)" />
</FrameLayout>

View File

@ -12,7 +12,7 @@
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#fff"
android:background="@color/white"
android:choiceMode="singleChoice"
android:divider="@color/bg_gray"
android:dividerHeight="1dp" />

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:bootstrapbutton="http://schemas.android.com/apk/res-auto"
xmlns:fontawesometext="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -251,64 +252,97 @@
</LinearLayout>
<LinearLayout
android:id="@+id/advancedSettingsControl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
android:orientation="horizontal"
android:clickable="true">
<com.beardedhen.androidbootstrap.FontAwesomeText
android:id="@+id/advancedSettingsIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:textSize="12sp"
android:paddingTop="@dimen/padding_medium"
android:paddingBottom="@dimen/padding_medium"
fontawesometext:fa_icon="fa-chevron-right"/>
<TextView
android:id="@+id/label_fileCompression"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:paddingRight="10dip"
android:text="@string/label_file_compression"
android:textAppearance="?android:attr/textAppearanceSmall" />
<Spinner
android:id="@+id/fileCompression"
android:id="@+id/advancedSettings"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical" />
android:text="@string/btn_encryption_advanced_settings_show"
android:paddingTop="@dimen/padding_medium"
android:paddingBottom="@dimen/padding_medium"
android:textColor="@color/emphasis"/>
</LinearLayout>
<LinearLayout
android:id="@+id/fileAdvancedSettingsContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
android:orientation="vertical"
android:visibility="gone">
<CheckBox
android:id="@+id/deleteAfterEncryption"
android:layout_width="wrap_content"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/label_delete_after_encryption" />
</LinearLayout>
android:orientation="horizontal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/label_fileCompression"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:paddingRight="10dip"
android:text="@string/label_file_compression"
android:textAppearance="?android:attr/textAppearanceSmall" />
<CheckBox
android:id="@+id/shareAfterEncryption"
android:layout_width="wrap_content"
<Spinner
android:id="@+id/fileCompression"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/label_share_after_encryption" />
</LinearLayout>
android:orientation="horizontal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<CheckBox
android:id="@+id/deleteAfterEncryption"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/label_delete_after_encryption" />
</LinearLayout>
<CheckBox
android:id="@+id/asciiArmour"
android:layout_width="wrap_content"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/label_ascii_armor" />
android:orientation="horizontal">
<CheckBox
android:id="@+id/shareAfterEncryption"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/label_share_after_encryption" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<CheckBox
android:id="@+id/asciiArmour"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/label_ascii_armor" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</ViewFlipper>

View File

@ -6,7 +6,9 @@
android:paddingRight="16dp"
android:stretchColumns="1" >
<TableRow>
<TableRow
android:layout_marginBottom="5dip"
>
<TextView
android:id="@+id/passphrase_label_passphrase"
@ -24,7 +26,9 @@
android:padding="4dp" />
</TableRow>
<TableRow>
<TableRow
android:layout_marginBottom="10dip"
>
<TextView
android:id="@+id/passphrase_label_passphrase_again"

View File

@ -3,7 +3,7 @@
xmlns:bootstrapbutton="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
android:orientation="horizontal">
<com.beardedhen.androidbootstrap.BootstrapButton
android:id="@+id/select_secret_key_select_key_button"
@ -25,31 +25,45 @@
android:layout_marginLeft="4dp"
android:layout_marginTop="4dp"
android:orientation="vertical"
android:paddingLeft="16dp" >
android:paddingLeft="4dp">
<!-- Has been made focusable to display error messages with setError -->
<TextView
android:id="@+id/select_secret_key_user_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_gravity="left"
android:ellipsize="end"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:text="@string/api_settings_no_key"
android:textAppearance="?android:attr/textAppearanceMedium" />
android:visibility="gone"
android:layout_marginRight="5dip"
android:text=""
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/select_secret_key_user_id_rest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_gravity="left"
android:ellipsize="end"
android:singleLine="true"
android:layout_marginRight="5dip"
android:text=""
android:visibility="gone"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/select_secret_key_master_key_hex"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="@string/api_settings_no_key"
android:layout_marginRight="5dip" />
</LinearLayout>
</LinearLayout>

View File

@ -0,0 +1,45 @@
<html>
<head></head>
<body>
<p><a href="http://www.openkeychain.org">http://www.openkeychain.org</a></p>
<p><a href="http://www.openkeychain.org">OpenKeychain</a> is an OpenPGP implementation for Android.</p>
<p>License: GPLv3+</p>
<h2>Developers OpenKeychain</h2>
<ul>
<li>Dominik Schürmann (Lead developer)</li>
<li>Ash Hughes (crypto patches)</li>
<li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov (UI)</li>
</ul>
<h2>Developers APG 1.x</h2>
<ul>
<li>'Thialfihar' (Lead developer)</li>
<li>'Senecaso' (QRCode, sign key, upload key)</li>
<li>Oliver Runge</li>
<li>Markus Doits</li>
</ul>
<h2>Libraries</h2>
<ul>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v4</a> (Apache License v2)</li>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li>
<li>
<a href="https://github.com/Bearded-Hen/Android-Bootstrap">Android-Bootstrap</a> (MIT License)</li>
<li>
<a href="http://code.google.com/p/zxing/">ZXing</a> (Apache License v2)</li>
<li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li>
<li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
<li>Icons from <a href="http://rrze-icon-set.berlios.de/">RRZE Icon Set</a> (Creative Commons Attribution Share-Alike licence 3.0)</li>
<li>Icons from <a href="http://tango.freedesktop.org/">Tango Icon Set</a> (Public Domain)</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,108 @@
<html>
<head></head>
<body>
<h2>2.3</h2>
<ul>
<li>remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>more internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>querying keyservers directly from the import screen</li>
<li>fix layout and dialog style on Android 2.2-3.0</li>
<li>fix crash on keys with empty user ids</li>
<li>fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li>
<li>fix upload of key from signing screen</li>
</ul>
<h2>2.2</h2>
<ul>
<li>new design with navigation drawer</li>
<li>new public key list design</li>
<li>new public key view</li>
<li>bug fixes for importing of keys</li>
<li>key cross-certification (thanks to Ash Hughes)</li>
<li>handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>first version with new languages (thanks to the contributors on Transifex)</li>
<li>sharing of keys via QR Codes fixed and improved</li>
<li>package signature verification for API</li>
</ul>
<h2>2.1.1</h2>
<ul>
<li>API Updates, preparation for K-9 Mail integration</li>
</ul>
<h2>2.1</h2>
<ul>
<li>lots of bug fixes</li>
<li>new API for developers</li>
<li>PRNG bug fix by Google</li>
</ul>
<h2>2.0</h2>
<ul>
<li>complete redesign</li>
<li>share public keys via qr codes, nfc beam</li>
<li>sign keys</li>
<li>upload keys to server</li>
<li>fixes import issues</li>
<li>new AIDL API</li>
</ul>
<h2>1.0.8</h2>
<ul>
<li>basic keyserver support</li>
<li>app2sd</li>
<li>more choices for pass phrase cache: 1, 2, 4, 8, hours</li>
<li>translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>bugfixes</li>
<li>optimizations</li>
</ul>
<h2>1.0.7</h2>
<ul>
<li>fixed problem with signature verification of texts with trailing newline</li>
<li>more options for pass phrase cache time to live (20, 40, 60 mins)</li>
</ul>
<h2>1.0.6</h2>
<ul>
<li>account adding crash on Froyo fixed</li>
<li>secure file deletion</li>
<li>option to delete key file after import</li>
<li>stream encryption/decryption (gallery, etc.)</li>
<li>new options (language, force v3 signatures)</li>
<li>interface changes</li>
<li>bugfixes</li>
</ul>
<h2>1.0.5</h2>
<ul>
<li>German and Italian translation</li>
<li>much smaller package, due to reduced BC sources</li>
<li>new preferences GUI</li>
<li>layout adjustment for localization</li>
<li>signature bugfix</li>
</ul>
<h2>1.0.4</h2>
<ul>
<li>fixed another crash caused by some SDK bug with query builder</li>
</ul>
<h2>1.0.3</h2>
<ul>
<li>fixed crashes during encryption/signing and possibly key export</li>
</ul>
<h2>1.0.2</h2>
<ul>
<li>filterable key lists</li>
<li>smarter pre-selection of encryption keys</li>
<li>new Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul>
<h2>1.0.1</h2>
<ul>
<li>GMail account listing was broken in 1.0.0, fixed again</li>
</ul>
<h2>1.0.0</h2>
<ul>
<li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li>
<li>support of more file managers (including ASTRO)</li>
<li>Slovenian translation</li>
<li>new database, much faster, less memory usage</li>
<li>defined Intents and content provider for other apps</li>
<li>bugfixes</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,12 @@
<html>
<head></head>
<body>
<h2>How to receive keys</h2>
<ol>
<li>Go to your partners contacts and open the contact you want to share.</li>
<li>Hold the two devices back to back (they have to be almost touching) and youll feel a vibration.</li>
<li>After it vibrates youll see the content on your partners device turn into a card-like object with Star Trek warp speed-looking animation in the background.</li>
<li>Tap the card and the content will then load on the your device.</li>
</ol>
</body>
</html>

View File

@ -0,0 +1,19 @@
<html>
<head></head>
<body>
<h2>Getting started</h2>
<p>First you need a personal key pair. Create one via the option menus in "My Keys" or import existing key pairs via "Import Keys". Afterwards, you can download your friends' keys or exchange them via QR Codes or NFC.</p>
<p>It is recommended that you install <a href="market://details?id=org.openintents.filemanager">OI File Manager</a> for enhanced file selection and <a href="market://details?id=com.google.zxing.client.android">Barcode Scanner</a> to scan generated QR Codes. Clicking on the links will open Google Play Store or F-Droid for installation.</p>
<h2>I found a bug in OpenKeychain!</h2>
<p>Please report the bug using the <a href="https://github.com/openpgp-keychain/openpgp-keychain/issues">issue tracker of OpenKeychain</a>.</p>
<h2>Contribute</h2>
<p>If you want to help us developing OpenKeychain by contributing code <a href="https://github.com/openpgp-keychain/openpgp-keychain#contribute-code">follow our small guide on Github</a>.</p>
<h2>Translations</h2>
<p>Help translating OpenKeychain! Everybody can participate at <a href="https://www.transifex.com/projects/p/openpgp-keychain/">OpenKeychain on Transifex</a>.</p>
</body>
</html>

View File

@ -0,0 +1,11 @@
<html>
<head></head>
<body>
<ol>
<li>Make sure that NFC is turned on in Settings &gt; More &gt; NFC and make sure that Android Beam is also on in the same section.</li>
<li>Hold the two devices back to back (they have to be almost touching) and you'll feel a vibration.</li>
<li>After it vibrates you'll see the content on your device turn into a card-like object with Star Trek warp speed-looking animation in the background.</li>
<li>Tap the card and the content will then load on the other persons device.</li>
</ol>
</body>
</html>

View File

@ -0,0 +1,45 @@
<html>
<head></head>
<body>
<p><a href="http://www.openkeychain.org">http://www.openkeychain.org</a></p>
<p><a href="http://www.openkeychain.org">OpenKeychain</a> is an OpenPGP implementation for Android.</p>
<p>License: GPLv3+</p>
<h2>Developers OpenKeychain</h2>
<ul>
<li>Dominik Schürmann (Lead developer)</li>
<li>Ash Hughes (crypto patches)</li>
<li>Brian C. Barnes</li>
<li>Bahtiar 'kalkin' Gadimov (UI)</li>
</ul>
<h2>Developers APG 1.x</h2>
<ul>
<li>'Thialfihar' (Lead developer)</li>
<li>'Senecaso' (QRCode, sign key, upload key)</li>
<li>Oliver Runge</li>
<li>Markus Doits</li>
</ul>
<h2>Libraries</h2>
<ul>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v4</a> (Apache License v2)</li>
<li>
<a href="http://developer.android.com/tools/support-library/index.html">Android Support Library v7 'appcompat'</a> (Apache License v2)</li>
<li>
<a href="https://github.com/emilsjolander/StickyListHeaders">StickyListHeaders</a> (Apache License v2)</li>
<li>
<a href="https://github.com/Bearded-Hen/Android-Bootstrap">Android-Bootstrap</a> (MIT License)</li>
<li>
<a href="http://code.google.com/p/zxing/">ZXing</a> (Apache License v2)</li>
<li>
<a href="http://rtyley.github.com/spongycastle/">SpongyCastle</a> (MIT X11 License)</li>
<li>
<a href="https://github.com/dschuermann/html-textview">HtmlTextView</a> (Apache License v2)</li>
<li>
<a href="https://github.com/johnkil/Android-AppMsg">Android AppMsg Library</a> (Apache License v2)</li>
<li>Icons from <a href="http://rrze-icon-set.berlios.de/">RRZE Icon Set</a> (Creative Commons Attribution Share-Alike licence 3.0)</li>
<li>Icons from <a href="http://tango.freedesktop.org/">Tango Icon Set</a> (Public Domain)</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,108 @@
<html>
<head></head>
<body>
<h2>2.3</h2>
<ul>
<li>remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)</li>
<li>fix setting expiry dates on keys (thanks to Ash Hughes)</li>
<li>more internal fixes when editing keys (thanks to Ash Hughes)</li>
<li>querying keyservers directly from the import screen</li>
<li>fix layout and dialog style on Android 2.2-3.0</li>
<li>fix crash on keys with empty user ids</li>
<li>fix crash and empty lists when coming back from signing screen</li>
<li>Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source</li>
<li>fix upload of key from signing screen</li>
</ul>
<h2>2.2</h2>
<ul>
<li>new design with navigation drawer</li>
<li>new public key list design</li>
<li>new public key view</li>
<li>bug fixes for importing of keys</li>
<li>key cross-certification (thanks to Ash Hughes)</li>
<li>handle UTF-8 passwords properly (thanks to Ash Hughes)</li>
<li>first version with new languages (thanks to the contributors on Transifex)</li>
<li>sharing of keys via QR Codes fixed and improved</li>
<li>package signature verification for API</li>
</ul>
<h2>2.1.1</h2>
<ul>
<li>API Updates, preparation for K-9 Mail integration</li>
</ul>
<h2>2.1</h2>
<ul>
<li>lots of bug fixes</li>
<li>new API for developers</li>
<li>PRNG bug fix by Google</li>
</ul>
<h2>2.0</h2>
<ul>
<li>complete redesign</li>
<li>share public keys via qr codes, nfc beam</li>
<li>sign keys</li>
<li>upload keys to server</li>
<li>fixes import issues</li>
<li>new AIDL API</li>
</ul>
<h2>1.0.8</h2>
<ul>
<li>basic keyserver support</li>
<li>app2sd</li>
<li>more choices for pass phrase cache: 1, 2, 4, 8, hours</li>
<li>translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)</li>
<li>bugfixes</li>
<li>optimizations</li>
</ul>
<h2>1.0.7</h2>
<ul>
<li>fixed problem with signature verification of texts with trailing newline</li>
<li>more options for pass phrase cache time to live (20, 40, 60 mins)</li>
</ul>
<h2>1.0.6</h2>
<ul>
<li>account adding crash on Froyo fixed</li>
<li>secure file deletion</li>
<li>option to delete key file after import</li>
<li>stream encryption/decryption (gallery, etc.)</li>
<li>new options (language, force v3 signatures)</li>
<li>interface changes</li>
<li>bugfixes</li>
</ul>
<h2>1.0.5</h2>
<ul>
<li>German and Italian translation</li>
<li>much smaller package, due to reduced BC sources</li>
<li>new preferences GUI</li>
<li>layout adjustment for localization</li>
<li>signature bugfix</li>
</ul>
<h2>1.0.4</h2>
<ul>
<li>fixed another crash caused by some SDK bug with query builder</li>
</ul>
<h2>1.0.3</h2>
<ul>
<li>fixed crashes during encryption/signing and possibly key export</li>
</ul>
<h2>1.0.2</h2>
<ul>
<li>filterable key lists</li>
<li>smarter pre-selection of encryption keys</li>
<li>new Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers</li>
<li>fixes and additional features (key preselection) for K-9 Mail, new beta build available</li>
</ul>
<h2>1.0.1</h2>
<ul>
<li>GMail account listing was broken in 1.0.0, fixed again</li>
</ul>
<h2>1.0.0</h2>
<ul>
<li>K-9 Mail integration, APG supporting beta build of K-9 Mail</li>
<li>support of more file managers (including ASTRO)</li>
<li>Slovenian translation</li>
<li>new database, much faster, less memory usage</li>
<li>defined Intents and content provider for other apps</li>
<li>bugfixes</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,12 @@
<html>
<head></head>
<body>
<h2>How to receive keys</h2>
<ol>
<li>Go to your partners contacts and open the contact you want to share.</li>
<li>Hold the two devices back to back (they have to be almost touching) and youll feel a vibration.</li>
<li>After it vibrates youll see the content on your partners device turn into a card-like object with Star Trek warp speed-looking animation in the background.</li>
<li>Tap the card and the content will then load on the your device.</li>
</ol>
</body>
</html>

View File

@ -0,0 +1,19 @@
<html>
<head></head>
<body>
<h2>شروع کار</h2>
<p>اول شما نیاز به یک جفت کلید شخصی دارید. از طریق منوها در "کلیدهای من" بسازید و یا از طریق"واردات کلیدهای" جفت کلیدهای موجود را وارد کنید. پس از آن، شما می توانید کلید های دوستان خود را دانلود کنید و یا آنها را از طریق کدهای QR یا NFC رد و بدل کنید.</p>
<p>It is recommended that you install <a href="market://details?id=org.openintents.filemanager">OI File Manager</a> for enhanced file selection and <a href="market://details?id=com.google.zxing.client.android">Barcode Scanner</a> to scan generated QR Codes. Clicking on the links will open Google Play Store or F-Droid for installation.</p>
<h2>I found a bug in OpenKeychain!</h2>
<p>Please report the bug using the <a href="https://github.com/openpgp-keychain/openpgp-keychain/issues">issue tracker of OpenKeychain</a>.</p>
<h2>هم بخشی کردن</h2>
<p>If you want to help us developing OpenKeychain by contributing code <a href="https://github.com/openpgp-keychain/openpgp-keychain#contribute-code">follow our small guide on Github</a>.</p>
<h2>ترجمه ها</h2>
<p>Help translating OpenKeychain! Everybody can participate at <a href="https://www.transifex.com/projects/p/openpgp-keychain/">OpenKeychain on Transifex</a>.</p>
</body>
</html>

View File

@ -0,0 +1,11 @@
<html>
<head></head>
<body>
<ol>
<li>Make sure that NFC is turned on in Settings &gt; More &gt; NFC and make sure that Android Beam is also on in the same section.</li>
<li>Hold the two devices back to back (they have to be almost touching) and you'll feel a vibration.</li>
<li>After it vibrates you'll see the content on your device turn into a card-like object with Star Trek warp speed-looking animation in the background.</li>
<li>Tap the card and the content will then load on the other persons device.</li>
</ol>
</body>
</html>

View File

@ -13,9 +13,8 @@
<string name="title_preferences">Einstellungen</string>
<string name="title_api_registered_apps">Registrierte Anwendungen</string>
<string name="title_key_server_preference">Schlüsselserver</string>
<string name="title_change_passphrase">Passwort ändern</string>
<string name="title_set_passphrase">Passwort setzen</string>
<string name="title_send_email">E-Mail senden</string>
<string name="title_send_email">E-Mail senden...</string>
<string name="title_encrypt_to_file">In eine Datei verschlüsseln</string>
<string name="title_decrypt_to_file">In eine Datei entschlüsseln</string>
<string name="title_import_keys">Schlüssel importieren</string>
@ -163,7 +162,7 @@
<string name="dsa">DSA</string>
<string name="elgamal">ElGamal</string>
<string name="rsa">RSA</string>
<string name="filemanager_title_open">Öffnen</string>
<string name="filemanager_title_open">Öffnen...</string>
<string name="warning">Warnung</string>
<string name="error">Fehler</string>
<string name="error_message">Fehler: %s</string>
@ -273,40 +272,41 @@
</plurals>
<!--progress dialogs, usually ending in '…'-->
<string name="progress_done">fertig.</string>
<string name="progress_saving">speichern…</string>
<string name="progress_importing">importieren…</string>
<string name="progress_exporting">exportieren…</string>
<string name="progress_generating">erstelle Schlüssel, dies kann bis zu 3 Minuten dauern…</string>
<string name="progress_building_key">erstelle Schlüssel…</string>
<string name="progress_preparing_master_key">Hauptschlüssel wird vorbereitet…</string>
<string name="progress_certifying_master_key">Hauptschlüssel wird beglaubigt…</string>
<string name="progress_building_master_key">erstelle Hauptring…</string>
<string name="progress_adding_sub_keys">füge Unterschlüssel hinzu…</string>
<string name="progress_saving_key_ring">Schlüssel wird gespeichert…</string>
<string name="progress_cancel">Abbrechen</string>
<string name="progress_saving">speichern...</string>
<string name="progress_importing">importieren...</string>
<string name="progress_exporting">exportieren...</string>
<string name="progress_generating">erstelle Schlüssel, dies kann bis zu 3 Minuten dauern...</string>
<string name="progress_building_key">erstelle Schlüssel...</string>
<string name="progress_preparing_master_key">Hauptschlüssel wird vorbereitet...</string>
<string name="progress_certifying_master_key">Hauptschlüssel wird beglaubigt...</string>
<string name="progress_building_master_key">erstelle Hauptring...</string>
<string name="progress_adding_sub_keys">füge Unterschlüssel hinzu...</string>
<string name="progress_saving_key_ring">Schlüssel wird gespeichert...</string>
<plurals name="progress_exporting_key">
<item quantity="one">Schlüssel wird exportiert…</item>
<item quantity="other">Schlüssel werden exportiert…</item>
</plurals>
<string name="progress_extracting_signature_key">extrahiere Signaturschlüssel</string>
<string name="progress_extracting_key">extrahiere Schlüssel</string>
<string name="progress_preparing_streams">Datenstrom wird vorbereitet</string>
<string name="progress_encrypting">Daten werden verschlüsselt</string>
<string name="progress_decrypting">Daten werden entschlüsselt</string>
<string name="progress_preparing_signature">Signatur wird vorbereitet</string>
<string name="progress_generating_signature">Signatur wird erstellt</string>
<string name="progress_processing_signature">Signatur wird verarbeitet</string>
<string name="progress_verifying_signature">Signatur wird verifiziert</string>
<string name="progress_signing">signiere</string>
<string name="progress_reading_data">Daten werden gelesen</string>
<string name="progress_finding_key">Schlüssel wird gesucht</string>
<string name="progress_decompressing_data">Daten werden entpackt</string>
<string name="progress_verifying_integrity">Integrität wird überprüft</string>
<string name="progress_deleting_securely">\'%s\' wird sicher gelöscht</string>
<string name="progress_querying">Anfrage wird gestellt</string>
<string name="progress_extracting_signature_key">extrahiere Signaturschlüssel...</string>
<string name="progress_extracting_key">extrahiere Schlüssel...</string>
<string name="progress_preparing_streams">Datenstrom wird vorbereitet...</string>
<string name="progress_encrypting">Daten werden verschlüsselt...</string>
<string name="progress_decrypting">Daten werden entschlüsselt...</string>
<string name="progress_preparing_signature">Signatur wird vorbereitet...</string>
<string name="progress_generating_signature">Signatur wird erstellt...</string>
<string name="progress_processing_signature">Signatur wird verarbeitet...</string>
<string name="progress_verifying_signature">Signatur wird verifiziert...</string>
<string name="progress_signing">signiere...</string>
<string name="progress_reading_data">Daten werden gelesen...</string>
<string name="progress_finding_key">Schlüssel wird gesucht...</string>
<string name="progress_decompressing_data">Daten werden entpackt...</string>
<string name="progress_verifying_integrity">Integrität wird überprüft...</string>
<string name="progress_deleting_securely">\'%s\' wird sicher gelöscht...</string>
<string name="progress_querying">Anfrage wird gestellt...</string>
<!--action strings-->
<string name="hint_public_keys">Öffentliche Schlüssel suchen</string>
<string name="hint_secret_keys">Private Schlüssel suchen</string>
<string name="action_share_key_with">Teile Schlüssel über</string>
<string name="action_share_key_with">Teile Schlüssel über...</string>
<!--key bit length selections-->
<string name="key_size_512">512</string>
<string name="key_size_1024">1024</string>

View File

@ -0,0 +1,53 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<!--title-->
<string name="title_select_recipients">Επιλογή Δημόσιου Κλειδιού</string>
<string name="title_select_secret_key">Επιλογή Ιδιωτικού Κλειδιού</string>
<string name="title_authentication">Κωδικός</string>
<string name="title_create_key">Δημιουργία Κλειδιού</string>
<string name="title_edit_key">Επεξεργασία Κλειδιού</string>
<string name="title_preferences">Επιλογές</string>
<!--section-->
<!--button-->
<string name="btn_sign">Υπόγραψε</string>
<string name="btn_save">Αποθήκευση</string>
<string name="btn_do_not_save">Ακύρωση</string>
<string name="btn_delete">Διαγραφή</string>
<string name="btn_no_date">Κανένα</string>
<string name="btn_okay">ΟΚ</string>
<string name="btn_change_passphrase">Αλλαγή κωδικού</string>
<string name="btn_set_passphrase">Επέλεξε Κωδικό</string>
<!--menu-->
<string name="menu_delete_key">Διαγραφής κλειδιού</string>
<string name="menu_create_key">Δημιουργίας κλειδιού</string>
<!--label-->
<string name="label_sign">Υπόγραψε</string>
<string name="label_message">Μήνυμα</string>
<string name="label_file">Αρχείο</string>
<string name="label_passphrase">Κωδικός</string>
<string name="label_passphrase_again">Ξανά</string>
<string name="label_algorithm">Αλγόριθμος</string>
<string name="label_encryption_algorithm">Αλγόριθμος κρυπτογράφησης</string>
<string name="label_asymmetric">Δημόσιο κλειδί</string>
<string name="label_symmetric">Κωδικός</string>
<string name="label_key_size">Μέγεθος κλειδιού</string>
<string name="label_email">Ηλεκτρονικό ταχυδρομίο</string>
<string name="unknown_status"></string>
<!--choice-->
<!--sentences-->
<!--errors
no punctuation, all lowercase,
they will be put after "error_message", e.g. "Error: file not found"-->
<!--progress dialogs, usually ending in '…'-->
<!--action strings-->
<!--key bit length selections-->
<!--compression-->
<!--Help-->
<!--Import-->
<!--Intent labels-->
<!--Remote API-->
<!--Share-->
<!--Key list-->
<!--Key view-->
<!--Navigation Drawer-->
</resources>

View File

@ -10,9 +10,8 @@
<string name="title_edit_key">Editar clave</string>
<string name="title_preferences">Preferencias</string>
<string name="title_api_registered_apps">Aplicaciones registradas</string>
<string name="title_change_passphrase">Cambiar contraseña</string>
<string name="title_set_passphrase">Establecer contraseña</string>
<string name="title_send_email">Enviar correo electrónico</string>
<string name="title_send_email">Enviar correo electrónico...</string>
<string name="title_encrypt_to_file">Cifrar a archivo</string>
<string name="title_decrypt_to_file">Descifrar a archivo</string>
<string name="title_import_keys">Importar claves</string>

View File

@ -13,9 +13,9 @@
<string name="title_preferences"> Preferencias</string>
<string name="title_api_registered_apps">Aplicaciones registradas</string>
<string name="title_key_server_preference">Prioridad del servidor de claves</string>
<string name="title_change_passphrase">Cambiar la frase de contraseña</string>
<string name="title_change_passphrase">Cambiar frase de contraseña</string>
<string name="title_set_passphrase">Establecer frase de contraseña</string>
<string name="title_send_email">Enviar email</string>
<string name="title_send_email">Enviar email...</string>
<string name="title_encrypt_to_file">Cifrar hacia archivo</string>
<string name="title_decrypt_to_file">Descifrar hacia archivo</string>
<string name="title_import_keys">Importar claves</string>
@ -61,7 +61,7 @@
<string name="btn_next">Siguiente</string>
<string name="btn_back">Volver</string>
<string name="btn_clipboard">Portapapeles</string>
<string name="btn_share">Compartir con</string>
<string name="btn_share">Compartir con...</string>
<string name="btn_lookup_key">Buscar clave</string>
<!--menu-->
<string name="menu_preferences">Ajustes</string>
@ -80,10 +80,10 @@
<string name="menu_update_key">Actualizar desde servidor de claves</string>
<string name="menu_export_key_to_server">Cargar al servidor de claves</string>
<string name="menu_share">Compartir</string>
<string name="menu_share_title_fingerprint">Compartir la huella digital</string>
<string name="menu_share_title">Compartir la clave completa</string>
<string name="menu_share_default_fingerprint">con</string>
<string name="menu_share_default">con</string>
<string name="menu_share_title_fingerprint">Compartir la huella digital...</string>
<string name="menu_share_title">Compartir la clave completa...</string>
<string name="menu_share_default_fingerprint">con...</string>
<string name="menu_share_default">con...</string>
<string name="menu_share_qr_code">con código QR</string>
<string name="menu_share_qr_code_fingerprint">con código QR</string>
<string name="menu_share_nfc">con NFC</string>
@ -91,7 +91,8 @@
<string name="menu_sign_key"> Clave de firma</string>
<string name="menu_beam_preferences">Ajustes de Beam</string>
<string name="menu_key_edit_cancel">Cancelar</string>
<string name="menu_encrypt_to">Cifrar hacia…</string>
<string name="menu_encrypt_to">Cifrar hacia...</string>
<string name="menu_select_all">Seleccionar todo</string>
<!--label-->
<string name="label_sign">Firmar</string>
<string name="label_message">Mensaje</string>
@ -125,6 +126,7 @@
<string name="label_send_key">Cargar clave al servidor de claves seleccionado después de la certificación</string>
<string name="label_fingerprint">Huella digital</string>
<string name="select_keys_button_default">Seleccionar</string>
<string name="expiry_date_dialog_title">Establer la fecha de vencimiento</string>
<plurals name="select_keys_button">
<item quantity="one">%d seleccionado</item>
<item quantity="other">%d seleccionados</item>
@ -163,7 +165,7 @@
<string name="dsa">DSA</string>
<string name="elgamal">ElGamal</string>
<string name="rsa">RSA</string>
<string name="filemanager_title_open">Abrir</string>
<string name="filemanager_title_open">Abrir...</string>
<string name="warning">Advertencia</string>
<string name="error">Error</string>
<string name="error_message">Error: %s</string>
@ -275,40 +277,41 @@
</plurals>
<!--progress dialogs, usually ending in '…'-->
<string name="progress_done">hecho.</string>
<string name="progress_saving">guardando…</string>
<string name="progress_importing">importando…</string>
<string name="progress_exporting">exportando…</string>
<string name="progress_generating">generando la clave, esto puede tardar más de 3 minutos…</string>
<string name="progress_building_key">construyendo la clave…</string>
<string name="progress_preparing_master_key">preparando la clave maestra…</string>
<string name="progress_certifying_master_key">certificando la clave maestra…</string>
<string name="progress_building_master_key">construyendo el anillo maestro…</string>
<string name="progress_adding_sub_keys">añadiendo las subclaves…</string>
<string name="progress_saving_key_ring">guardando claves…</string>
<string name="progress_cancel">cancelar</string>
<string name="progress_saving">guardando...</string>
<string name="progress_importing">importando...</string>
<string name="progress_exporting">exportando...</string>
<string name="progress_generating">generando la clave, esto puede tardar más de 3 minutos...</string>
<string name="progress_building_key">construyendo la clave...</string>
<string name="progress_preparing_master_key">preparando la clave maestra...</string>
<string name="progress_certifying_master_key">certificando la clave maestra...</string>
<string name="progress_building_master_key">construyendo el anillo maestro...</string>
<string name="progress_adding_sub_keys">añadiendo las subclaves...</string>
<string name="progress_saving_key_ring">guardando claves...</string>
<plurals name="progress_exporting_key">
<item quantity="one">exportando clave</item>
<item quantity="other">exportando claves</item>
<item quantity="one">exportando clave...</item>
<item quantity="other">exportando claves...</item>
</plurals>
<string name="progress_extracting_signature_key">extrayendo la clave de firma</string>
<string name="progress_extracting_key">extrayendo la clave</string>
<string name="progress_preparing_streams">preparando las transmisiones</string>
<string name="progress_encrypting">cifrando los datos</string>
<string name="progress_decrypting">descifrando los datos</string>
<string name="progress_preparing_signature">preparando la firma</string>
<string name="progress_generating_signature">generando la firma</string>
<string name="progress_processing_signature">procesando la firma</string>
<string name="progress_verifying_signature">verificando la firma</string>
<string name="progress_signing">firmando</string>
<string name="progress_reading_data">leyendo los datos</string>
<string name="progress_finding_key">localizando la clave</string>
<string name="progress_decompressing_data">descomprimiendo los datos</string>
<string name="progress_verifying_integrity">verificando la integridad</string>
<string name="progress_extracting_signature_key">extrayendo la clave de firma...</string>
<string name="progress_extracting_key">extrayendo la clave...</string>
<string name="progress_preparing_streams">preparando las transmisiones...</string>
<string name="progress_encrypting">cifrando los datos...</string>
<string name="progress_decrypting">descifrando los datos...</string>
<string name="progress_preparing_signature">preparando la firma...</string>
<string name="progress_generating_signature">generando la firma...</string>
<string name="progress_processing_signature">procesando la firma...</string>
<string name="progress_verifying_signature">verificando la firma...</string>
<string name="progress_signing">firmando...</string>
<string name="progress_reading_data">leyendo los datos...</string>
<string name="progress_finding_key">localizando la clave...</string>
<string name="progress_decompressing_data">descomprimiendo los datos...</string>
<string name="progress_verifying_integrity">verificando la integridad...</string>
<string name="progress_deleting_securely">borrando \'%s\' de forma segura…</string>
<string name="progress_querying">consultando</string>
<string name="progress_querying">consultando...</string>
<!--action strings-->
<string name="hint_public_keys">Buscar claves públicas</string>
<string name="hint_secret_keys">Buscar claves secretas</string>
<string name="action_share_key_with">Compartir la clave con</string>
<string name="action_share_key_with">Compartir la clave con...</string>
<!--key bit length selections-->
<string name="key_size_512">512</string>
<string name="key_size_1024">1024</string>
@ -374,7 +377,7 @@
<item quantity="one">1 clave seleccionada.</item>
<item quantity="other">%d claves seleccionadas.</item>
</plurals>
<string name="key_list_empty_text1">Aún no hay claves disponibles</string>
<string name="key_list_empty_text1">Aún no hay claves disponibles...</string>
<string name="key_list_empty_text2">Puedes empezar por</string>
<string name="key_list_empty_text3">o</string>
<string name="key_list_empty_button_create">crear tu propia clave</string>

View File

@ -0,0 +1,26 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<!--title-->
<!--section-->
<!--button-->
<!--menu-->
<!--label-->
<string name="unknown_status"></string>
<!--choice-->
<!--sentences-->
<!--errors
no punctuation, all lowercase,
they will be put after "error_message", e.g. "Error: file not found"-->
<!--progress dialogs, usually ending in '…'-->
<!--action strings-->
<!--key bit length selections-->
<!--compression-->
<!--Help-->
<!--Import-->
<!--Intent labels-->
<!--Remote API-->
<!--Share-->
<!--Key list-->
<!--Key view-->
<!--Navigation Drawer-->
</resources>

View File

@ -13,9 +13,10 @@
<string name="title_preferences">Préférences</string>
<string name="title_api_registered_apps">Applications enregistrées</string>
<string name="title_key_server_preference">Préférences du serveur de clefs</string>
<string name="title_change_passphrase">Changer la phrase de passe</string>
<string name="title_change_passphrase">Modifier la phrase de passe</string>
<string name="title_set_passphrase">Définir la phrase de passe</string>
<string name="title_send_email">Envoyer un courriel…</string>
<string name="title_send_email">Envoyer un courriel...</string>
<string name="title_send_file">Envoyer un fichier...</string>
<string name="title_encrypt_to_file">Chiffrer vers un fichier</string>
<string name="title_decrypt_to_file">Déchiffrer vers un fichier</string>
<string name="title_import_keys">importer des clefs</string>
@ -61,7 +62,7 @@
<string name="btn_next">Suivant</string>
<string name="btn_back">Retour</string>
<string name="btn_clipboard">Presse-papiers</string>
<string name="btn_share">Partager avec</string>
<string name="btn_share">Partager avec...</string>
<string name="btn_lookup_key">Rechercher la clef</string>
<!--menu-->
<string name="menu_preferences">Paramètres</string>
@ -80,10 +81,10 @@
<string name="menu_update_key">Mettre à jour depuis le serveur de clefs</string>
<string name="menu_export_key_to_server">Téléverser vers le serveur de clefs</string>
<string name="menu_share">Partager</string>
<string name="menu_share_title_fingerprint">Partager l\'empreinte</string>
<string name="menu_share_title">Partager la clef entière</string>
<string name="menu_share_default_fingerprint">avec</string>
<string name="menu_share_default">avec</string>
<string name="menu_share_title_fingerprint">Partager l\'empreinte...</string>
<string name="menu_share_title">Partager la clef entière...</string>
<string name="menu_share_default_fingerprint">avec...</string>
<string name="menu_share_default">avec...</string>
<string name="menu_share_qr_code">par un code QR</string>
<string name="menu_share_qr_code_fingerprint">par un code QR</string>
<string name="menu_share_nfc">par la NFC</string>
@ -91,7 +92,8 @@
<string name="menu_sign_key">Signer la clef</string>
<string name="menu_beam_preferences">Paramètres Beam</string>
<string name="menu_key_edit_cancel">Annuler</string>
<string name="menu_encrypt_to">Chiffrer vers…</string>
<string name="menu_encrypt_to">Chiffrer vers...</string>
<string name="menu_select_all">Tout sélectionner</string>
<!--label-->
<string name="label_sign">Signer</string>
<string name="label_message">Message</string>
@ -104,6 +106,7 @@
<string name="label_select_public_keys">Destinataires</string>
<string name="label_delete_after_encryption">Supprimer après le chiffrement</string>
<string name="label_delete_after_decryption">Supprimer après le chiffrement</string>
<string name="label_share_after_encryption">Partager après chiffrement</string>
<string name="label_encryption_algorithm">Algorithme de chiffrement</string>
<string name="label_hash_algorithm">Algorithme de hachage</string>
<string name="label_asymmetric">Clef publique</string>
@ -122,9 +125,12 @@
<string name="label_name">Nom</string>
<string name="label_comment">Commentaire</string>
<string name="label_email">Courriel</string>
<string name="label_sign_user_id">Signer l\'ID utilisateur</string>
<string name="label_sign_email">Signer le courriel</string>
<string name="label_send_key">Téléverser la clef vers le serveur de clefs choisi après certification</string>
<string name="label_fingerprint">Empreinte</string>
<string name="select_keys_button_default">Choisir</string>
<string name="expiry_date_dialog_title">Définir une date d\'expiration</string>
<plurals name="select_keys_button">
<item quantity="one">%d choisie</item>
<item quantity="other">%d choisies</item>
@ -137,6 +143,7 @@
<string name="can_sign">peut signer</string>
<string name="expired">expiré</string>
<string name="revoked">révoquée</string>
<string name="user_id">ID utilisateur</string>
<plurals name="n_key_servers">
<item quantity="one">%d serveur de clefs</item>
<item quantity="other">%d serveurs de clefs</item>
@ -163,7 +170,7 @@
<string name="dsa">DSA</string>
<string name="elgamal">ElGamal</string>
<string name="rsa">RSA</string>
<string name="filemanager_title_open">Ouvrir</string>
<string name="filemanager_title_open">Ouvrir...</string>
<string name="warning">Avertissement</string>
<string name="error">Erreur</string>
<string name="error_message">Erreur : %s</string>
@ -269,46 +276,53 @@
<string name="error_keyserver_insufficient_query">Requête serveur insuffisante</string>
<string name="error_keyserver_query">Échec lors de l\'interrogation du serveur de clefs</string>
<string name="error_keyserver_too_many_responses">Trop de réponses</string>
<string name="error_import_file_no_content">Le fichier n\'a pas de contenu</string>
<string name="error_generic_report_bug">Une erreur générique est survenue, veuillez créer un nouveau rapport de bogue pour OpenKeychain.</string>
<plurals name="error_can_not_delete_info">
<item quantity="one">Veuillez le supprimer depuis l\'écran « Mes Clefs »!</item>
<item quantity="other">Veuillez les supprimer depuis l\'écran « Mes Clefs »!</item>
</plurals>
<plurals name="error_import_non_pgp_part">
<item quantity="one">une partie du fichier chargé est un objet OpenPGP valide mais pas une clef OpenPGP</item>
<item quantity="other">certaines parties du fichier chargé sont des objets OpenPGP valides mais pas des clefs OpenPGP</item>
</plurals>
<!--progress dialogs, usually ending in '…'-->
<string name="progress_done">fait.</string>
<string name="progress_saving">sauvegarde…</string>
<string name="progress_importing">importation…</string>
<string name="progress_exporting">exportation…</string>
<string name="progress_generating">génération de la clef, ceci peut prendre jusqu\'à 3 minutes…</string>
<string name="progress_building_key">assemblage de la clef…</string>
<string name="progress_preparing_master_key">préparation de la clef maîtresse…</string>
<string name="progress_certifying_master_key">certification de la clef maîtresse…</string>
<string name="progress_building_master_key">assemblage du trousseau maître…</string>
<string name="progress_adding_sub_keys">ajout des sous-clefs…</string>
<string name="progress_saving_key_ring">sauvegarde de la clef…</string>
<string name="progress_cancel">annuler</string>
<string name="progress_saving">sauvegarde...</string>
<string name="progress_importing">importation...</string>
<string name="progress_exporting">exportation...</string>
<string name="progress_generating">génération de la clef, ceci peut prendre jusqu\'à 3 minutes...</string>
<string name="progress_building_key">assemblage de la clef...</string>
<string name="progress_preparing_master_key">préparation de la clef maîtresse...</string>
<string name="progress_certifying_master_key">certification de la clef maîtresse...</string>
<string name="progress_building_master_key">assemblage du trousseau maître...</string>
<string name="progress_adding_sub_keys">ajout des sous-clefs...</string>
<string name="progress_saving_key_ring">sauvegarde de la clef...</string>
<plurals name="progress_exporting_key">
<item quantity="one">exportation de la clef</item>
<item quantity="other">exportation des clefs</item>
<item quantity="one">exportation de la clef...</item>
<item quantity="other">exportation des clefs...</item>
</plurals>
<string name="progress_extracting_signature_key">extraction de la clef de signature</string>
<string name="progress_extracting_key">extraction de la clef</string>
<string name="progress_preparing_streams">préparation des flux</string>
<string name="progress_encrypting">chiffrement des données</string>
<string name="progress_decrypting">déchiffrement des données</string>
<string name="progress_preparing_signature">préparation de la signature</string>
<string name="progress_generating_signature">génération de la signature</string>
<string name="progress_processing_signature">traitement de la signature</string>
<string name="progress_verifying_signature">vérification de la signature</string>
<string name="progress_signing">signature</string>
<string name="progress_reading_data">lecture des données</string>
<string name="progress_finding_key">recherche de la clef</string>
<string name="progress_decompressing_data">décompression des données</string>
<string name="progress_verifying_integrity">vérification de l\'intégrité</string>
<string name="progress_deleting_securely">suppression sûre de « %s »</string>
<string name="progress_querying">interrogation</string>
<string name="progress_extracting_signature_key">extraction de la clef de signature...</string>
<string name="progress_extracting_key">extraction de la clef...</string>
<string name="progress_preparing_streams">préparation des flux...</string>
<string name="progress_encrypting">chiffrement des données...</string>
<string name="progress_decrypting">déchiffrement des données...</string>
<string name="progress_preparing_signature">préparation de la signature...</string>
<string name="progress_generating_signature">génération de la signature...</string>
<string name="progress_processing_signature">traitement de la signature...</string>
<string name="progress_verifying_signature">vérification de la signature...</string>
<string name="progress_signing">signature...</string>
<string name="progress_reading_data">lecture des données...</string>
<string name="progress_finding_key">recherche de la clef...</string>
<string name="progress_decompressing_data">décompression des données...</string>
<string name="progress_verifying_integrity">vérification de l\'intégrité...</string>
<string name="progress_deleting_securely">suppression sûre de « %s »...</string>
<string name="progress_querying">interrogation...</string>
<!--action strings-->
<string name="hint_public_keys">Rechercher des clefs publiques</string>
<string name="hint_secret_keys">Rechercher des clefs secrètes</string>
<string name="action_share_key_with">Partager la clef avec</string>
<string name="action_share_key_with">Partager la clef avec...</string>
<!--key bit length selections-->
<string name="key_size_512">512</string>
<string name="key_size_1024">1024</string>
@ -374,7 +388,7 @@
<item quantity="one">1 clef choisie</item>
<item quantity="other">%d clefs choisies</item>
</plurals>
<string name="key_list_empty_text1">Aucune clef encore disponible</string>
<string name="key_list_empty_text1">Aucune clef encore disponible...</string>
<string name="key_list_empty_text2">Vous pouvez commencer par</string>
<string name="key_list_empty_text3">ou</string>
<string name="key_list_empty_button_create">créer votre propre clef</string>

View File

@ -13,9 +13,10 @@
<string name="title_preferences">Preferenze</string>
<string name="title_api_registered_apps">App Registrate</string>
<string name="title_key_server_preference">Preferenze Server delle Chiavi</string>
<string name="title_change_passphrase">Cambia Frase di Accesso</string>
<string name="title_change_passphrase">Cambia Frase Di Accesso</string>
<string name="title_set_passphrase">Imposta Frase di Accesso</string>
<string name="title_send_email">Invia Mail…</string>
<string name="title_send_email">Invia Mail...</string>
<string name="title_send_file">Invia file...</string>
<string name="title_encrypt_to_file">Codifica File</string>
<string name="title_decrypt_to_file">Decodifica File</string>
<string name="title_import_keys">Importa Chiavi</string>
@ -61,7 +62,7 @@
<string name="btn_next">Prossimo</string>
<string name="btn_back">Precedente</string>
<string name="btn_clipboard">Appunti</string>
<string name="btn_share">Condividi con</string>
<string name="btn_share">Condividi con...</string>
<string name="btn_lookup_key">Chiave di ricerca</string>
<!--menu-->
<string name="menu_preferences">Impostazioni</string>
@ -80,10 +81,10 @@
<string name="menu_update_key">Aggiorna dal server delle chiavi</string>
<string name="menu_export_key_to_server">Carica chiave nel server</string>
<string name="menu_share">Condividi</string>
<string name="menu_share_title_fingerprint">Condivi impronta</string>
<string name="menu_share_title">Condividi intera chiave</string>
<string name="menu_share_title_fingerprint">Condivi impronta...</string>
<string name="menu_share_title">Condividi intera chiave...</string>
<string name="menu_share_default_fingerprint">con..</string>
<string name="menu_share_default">con</string>
<string name="menu_share_default">con...</string>
<string name="menu_share_qr_code">con Codice QR</string>
<string name="menu_share_qr_code_fingerprint">con Codice QR</string>
<string name="menu_share_nfc">con NFC</string>
@ -91,7 +92,8 @@
<string name="menu_sign_key">Firma chiave</string>
<string name="menu_beam_preferences">Impostazioni Beam</string>
<string name="menu_key_edit_cancel">Annulla</string>
<string name="menu_encrypt_to">Codifica su…</string>
<string name="menu_encrypt_to">Codifica su...</string>
<string name="menu_select_all">Seleziona tutto</string>
<!--label-->
<string name="label_sign">Firma</string>
<string name="label_message">Messaggio</string>
@ -104,6 +106,7 @@
<string name="label_select_public_keys">Destinatari</string>
<string name="label_delete_after_encryption">Cancella Dopo Codifica</string>
<string name="label_delete_after_decryption">Cancella Dopo Decodifica</string>
<string name="label_share_after_encryption">Condividi Dopo la Codifica</string>
<string name="label_encryption_algorithm">Algoritmo di Codifica</string>
<string name="label_hash_algorithm">Algoritmo di Hash</string>
<string name="label_asymmetric">Chiave Pubblica</string>
@ -122,9 +125,12 @@
<string name="label_name">Nome</string>
<string name="label_comment">Commento</string>
<string name="label_email">Email</string>
<string name="label_sign_user_id">Firma ID Utente</string>
<string name="label_sign_email">Firma email</string>
<string name="label_send_key">Carica chiave nel server delle chiavi selezionati dopo la certificazione</string>
<string name="label_fingerprint">Impronta</string>
<string name="select_keys_button_default">Seleziona</string>
<string name="expiry_date_dialog_title">Impostare la data di scadenza</string>
<plurals name="select_keys_button">
<item quantity="one">%d selezionato</item>
<item quantity="other">%d selezionati</item>
@ -137,6 +143,7 @@
<string name="can_sign">puo\' firmare</string>
<string name="expired">scaduto</string>
<string name="revoked">revocato</string>
<string name="user_id">ID Utente</string>
<plurals name="n_key_servers">
<item quantity="one">%d server delle chiavi</item>
<item quantity="other">%d server delle chiavi</item>
@ -163,7 +170,7 @@
<string name="dsa">DSA</string>
<string name="elgamal">ElGamal</string>
<string name="rsa">RSA</string>
<string name="filemanager_title_open">Apri</string>
<string name="filemanager_title_open">Apri...</string>
<string name="warning">Attenzione</string>
<string name="error">Errore</string>
<string name="error_message">Errore: %s</string>
@ -269,46 +276,53 @@
<string name="error_keyserver_insufficient_query">Query di server insufficiente</string>
<string name="error_keyserver_query">Interrogazione del server delle chiavi fallita</string>
<string name="error_keyserver_too_many_responses">Troppi responsi</string>
<string name="error_import_file_no_content">Il File non ha contenuti</string>
<string name="error_generic_report_bug">Si è verificato un errore generico, si prega di creare una nuova segnalazione di errore per OpenKeychain.</string>
<plurals name="error_can_not_delete_info">
<item quantity="one">Per favore cancellala dalla schermata \'Mie Chavi\'</item>
<item quantity="other">Per favore cancellatele dalla schermata \'Mie Chavi\'</item>
</plurals>
<plurals name="error_import_non_pgp_part">
<item quantity="one">parte del file caricato e\' un oggetto OpenPGP valido, ma non una chave OpenPGP</item>
<item quantity="other">parti del file caricato sono oggetti OpenPGP validi, ma non chavi OpenPGP</item>
</plurals>
<!--progress dialogs, usually ending in '…'-->
<string name="progress_done">fatto.</string>
<string name="progress_saving">salvataggio…</string>
<string name="progress_importing">importazione…</string>
<string name="progress_exporting">esportazione…</string>
<string name="progress_generating">generazione chiave, richiede fino a 3 minuti…</string>
<string name="progress_building_key">fabbricazione chiave…</string>
<string name="progress_preparing_master_key">preparazione chiave principale…</string>
<string name="progress_certifying_master_key">certificazione chiave principale…</string>
<string name="progress_building_master_key">fabbricazione portachiavi principale…</string>
<string name="progress_adding_sub_keys">aggiunta sottochiavi…</string>
<string name="progress_saving_key_ring">salvataggio chiavi…</string>
<string name="progress_cancel">cancella</string>
<string name="progress_saving">salvataggio...</string>
<string name="progress_importing">importazione...</string>
<string name="progress_exporting">esportazione...</string>
<string name="progress_generating">generazione chiave, richiede fino a 3 minuti...</string>
<string name="progress_building_key">fabbricazione chiave...</string>
<string name="progress_preparing_master_key">preparazione chiave principale...</string>
<string name="progress_certifying_master_key">certificazione chiave principale...</string>
<string name="progress_building_master_key">fabbricazione portachiavi principale...</string>
<string name="progress_adding_sub_keys">aggiunta sottochiavi...</string>
<string name="progress_saving_key_ring">salvataggio chiavi...</string>
<plurals name="progress_exporting_key">
<item quantity="one">esportazione chiave</item>
<item quantity="other">esportazione chiavi</item>
<item quantity="one">esportazione chiave...</item>
<item quantity="other">esportazione chiavi...</item>
</plurals>
<string name="progress_extracting_signature_key">estrazione chiavi di firma</string>
<string name="progress_extracting_key">estrazione chiave</string>
<string name="progress_preparing_streams">preparazione flussi</string>
<string name="progress_encrypting">codifica dati</string>
<string name="progress_decrypting">decodifica dati</string>
<string name="progress_preparing_signature">preparazione firma</string>
<string name="progress_generating_signature">generazione firma</string>
<string name="progress_processing_signature">elaborazione firma</string>
<string name="progress_verifying_signature">verifica firma</string>
<string name="progress_signing">firma</string>
<string name="progress_reading_data">lettura dati</string>
<string name="progress_finding_key">ricerca chiave</string>
<string name="progress_decompressing_data">decompressione dati</string>
<string name="progress_verifying_integrity">verifica integrita\'</string>
<string name="progress_deleting_securely">eliminazione sicura di \'%s\'</string>
<string name="progress_querying">interrogazione</string>
<string name="progress_extracting_signature_key">estrazione chiavi di firma...</string>
<string name="progress_extracting_key">estrazione chiave...</string>
<string name="progress_preparing_streams">preparazione flussi...</string>
<string name="progress_encrypting">codifica dati...</string>
<string name="progress_decrypting">decodifica dati...</string>
<string name="progress_preparing_signature">preparazione firma...</string>
<string name="progress_generating_signature">generazione firma...</string>
<string name="progress_processing_signature">elaborazione firma...</string>
<string name="progress_verifying_signature">verifica firma...</string>
<string name="progress_signing">firma...</string>
<string name="progress_reading_data">lettura dati...</string>
<string name="progress_finding_key">ricerca chiave...</string>
<string name="progress_decompressing_data">decompressione dati...</string>
<string name="progress_verifying_integrity">verifica integrita\'...</string>
<string name="progress_deleting_securely">eliminazione sicura di \'%s\'...</string>
<string name="progress_querying">interrogazione...</string>
<!--action strings-->
<string name="hint_public_keys">Ricerca Chiavi Pubbliche</string>
<string name="hint_secret_keys">Cerca Chiave Privata</string>
<string name="action_share_key_with">Condividi chiave con</string>
<string name="action_share_key_with">Condividi chiave con...</string>
<!--key bit length selections-->
<string name="key_size_512">512</string>
<string name="key_size_1024">1024</string>
@ -374,7 +388,7 @@
<item quantity="one">1 chiave selezionata.</item>
<item quantity="other">%d chiavi selezionate.</item>
</plurals>
<string name="key_list_empty_text1">Nessuna chiave disponibile</string>
<string name="key_list_empty_text1">Nessuna chiave disponibile...</string>
<string name="key_list_empty_text2">Puoi iniziare da</string>
<string name="key_list_empty_text3">o</string>
<string name="key_list_empty_button_create">creazione della tua chiave</string>

View File

@ -15,7 +15,8 @@
<string name="title_key_server_preference">鍵サーバ設定</string>
<string name="title_change_passphrase">パスフレーズの変更</string>
<string name="title_set_passphrase">パスフレーズの設定</string>
<string name="title_send_email">メールの送信…</string>
<string name="title_send_email">メールの送信...</string>
<string name="title_send_file">ファイルの送信...</string>
<string name="title_encrypt_to_file">暗号化してファイルに</string>
<string name="title_decrypt_to_file">復号化してファイルに</string>
<string name="title_import_keys">鍵のインポート</string>
@ -61,7 +62,7 @@
<string name="btn_next"></string>
<string name="btn_back">戻る</string>
<string name="btn_clipboard">クリップボード</string>
<string name="btn_share">共有</string>
<string name="btn_share">共有...</string>
<string name="btn_lookup_key">鍵検出</string>
<!--menu-->
<string name="menu_preferences">設定</string>
@ -80,10 +81,10 @@
<string name="menu_update_key">鍵サーバからの更新</string>
<string name="menu_export_key_to_server">鍵サーバへのアップロード</string>
<string name="menu_share">共有</string>
<string name="menu_share_title_fingerprint">指紋の共有</string>
<string name="menu_share_title">すべての鍵の共有</string>
<string name="menu_share_default_fingerprint">(指紋)</string>
<string name="menu_share_default">(鍵)</string>
<string name="menu_share_title_fingerprint">指紋の共有...</string>
<string name="menu_share_title">すべての鍵の共有...</string>
<string name="menu_share_default_fingerprint">...(指紋)</string>
<string name="menu_share_default">...(鍵)</string>
<string name="menu_share_qr_code">QRコードで共有(鍵)</string>
<string name="menu_share_qr_code_fingerprint">QRコードで共有(指紋)</string>
<string name="menu_share_nfc">NFCで共有</string>
@ -91,7 +92,8 @@
<string name="menu_sign_key">鍵を署名</string>
<string name="menu_beam_preferences">Beamの設定</string>
<string name="menu_key_edit_cancel">キャンセル</string>
<string name="menu_encrypt_to">暗号化…</string>
<string name="menu_encrypt_to">暗号化...</string>
<string name="menu_select_all">すべて選択</string>
<!--label-->
<string name="label_sign">署名</string>
<string name="label_message">メッセージ</string>
@ -104,6 +106,7 @@
<string name="label_select_public_keys">受信者</string>
<string name="label_delete_after_encryption">暗号化後に削除</string>
<string name="label_delete_after_decryption">復号化後に削除</string>
<string name="label_share_after_encryption">暗号化して共有</string>
<string name="label_encryption_algorithm">暗号化アルゴリズム</string>
<string name="label_hash_algorithm">ハッシュアルゴリズム</string>
<string name="label_asymmetric">公開鍵</string>
@ -122,9 +125,12 @@
<string name="label_name">名前</string>
<string name="label_comment">コメント</string>
<string name="label_email">Eメールアドレス</string>
<string name="label_sign_user_id">署名ユーザーID</string>
<string name="label_sign_email">メールを署名</string>
<string name="label_send_key">証明後選択した鍵サーバに鍵をアップロード</string>
<string name="label_fingerprint">指紋</string>
<string name="select_keys_button_default">選択</string>
<string name="expiry_date_dialog_title">期限日時を設定</string>
<plurals name="select_keys_button">
<item quantity="other">%d を選択</item>
</plurals>
@ -136,6 +142,7 @@
<string name="can_sign">署名可能</string>
<string name="expired">期限切れ</string>
<string name="revoked">破棄</string>
<string name="user_id">ユーザーID</string>
<plurals name="n_key_servers">
<item quantity="other">%d の鍵サーバ</item>
</plurals>
@ -161,7 +168,7 @@
<string name="dsa">DSA</string>
<string name="elgamal">ElGamal</string>
<string name="rsa">RSA</string>
<string name="filemanager_title_open">開く</string>
<string name="filemanager_title_open">開く...</string>
<string name="warning">注意</string>
<string name="error">エラー</string>
<string name="error_message">エラー: %s</string>
@ -261,44 +268,50 @@
<string name="error_keyserver_insufficient_query">サーバへのクエリーが不足しています</string>
<string name="error_keyserver_query">鍵サーバへのクエリーが失敗</string>
<string name="error_keyserver_too_many_responses">レスポンスが多すぎます</string>
<string name="error_import_file_no_content">ファイルに内容がありません</string>
<string name="error_generic_report_bug">一般エラーが発生しました、この新しいバグの情報をOpenKeychainプロジェクトに送ってください</string>
<plurals name="error_can_not_delete_info">
<item quantity="other">\'自分の鍵\'画面から削除してください!</item>
</plurals>
<plurals name="error_import_non_pgp_part">
<item quantity="other">読み込んだファイルのOpenPGPオブジェクト部分は正しいですが、OpenPGPの鍵ではありません</item>
</plurals>
<!--progress dialogs, usually ending in '…'-->
<string name="progress_done">完了。</string>
<string name="progress_saving">保存…</string>
<string name="progress_importing">インポート…</string>
<string name="progress_exporting">エクスポート…</string>
<string name="progress_generating">鍵の生成、3分ほどかかります…</string>
<string name="progress_building_key">鍵の構築中…</string>
<string name="progress_preparing_master_key">主鍵の準備中…</string>
<string name="progress_certifying_master_key">主鍵の検証中…</string>
<string name="progress_building_master_key">主鍵輪の構築中…</string>
<string name="progress_adding_sub_keys">副鍵の追加中…</string>
<string name="progress_saving_key_ring">鍵の保存…</string>
<string name="progress_cancel">キャンセル</string>
<string name="progress_saving">保存...</string>
<string name="progress_importing">インポート...</string>
<string name="progress_exporting">エクスポート...</string>
<string name="progress_generating">鍵の生成、3分ほどかかります...</string>
<string name="progress_building_key">鍵の構築中...</string>
<string name="progress_preparing_master_key">主鍵の準備中...</string>
<string name="progress_certifying_master_key">主鍵の検証中...</string>
<string name="progress_building_master_key">主鍵輪の構築中...</string>
<string name="progress_adding_sub_keys">副鍵の追加中...</string>
<string name="progress_saving_key_ring">鍵の保存...</string>
<plurals name="progress_exporting_key">
<item quantity="other">鍵のエクスポート</item>
<item quantity="other">鍵のエクスポート...</item>
</plurals>
<string name="progress_extracting_signature_key">署名鍵の取り出し中</string>
<string name="progress_extracting_key">鍵の取り出し中</string>
<string name="progress_preparing_streams">ストリームの準備中</string>
<string name="progress_encrypting">データの暗号化中</string>
<string name="progress_decrypting">データの復号化中</string>
<string name="progress_preparing_signature">署名の準備中</string>
<string name="progress_generating_signature">署名の生成中</string>
<string name="progress_processing_signature">署名処理中</string>
<string name="progress_verifying_signature">署名の検証中</string>
<string name="progress_signing">署名中</string>
<string name="progress_reading_data">データ読み込み中</string>
<string name="progress_finding_key">鍵検索中</string>
<string name="progress_decompressing_data">データの展開中</string>
<string name="progress_verifying_integrity">完全性の検証中</string>
<string name="progress_extracting_signature_key">署名鍵の取り出し中...</string>
<string name="progress_extracting_key">鍵の取り出し中...</string>
<string name="progress_preparing_streams">ストリームの準備中...</string>
<string name="progress_encrypting">データの暗号化中...</string>
<string name="progress_decrypting">データの復号化中...</string>
<string name="progress_preparing_signature">署名の準備中...</string>
<string name="progress_generating_signature">署名の生成中...</string>
<string name="progress_processing_signature">署名処理中...</string>
<string name="progress_verifying_signature">署名の検証中...</string>
<string name="progress_signing">署名中...</string>
<string name="progress_reading_data">データ読み込み中...</string>
<string name="progress_finding_key">鍵検索中...</string>
<string name="progress_decompressing_data">データの展開中...</string>
<string name="progress_verifying_integrity">完全性の検証中...</string>
<string name="progress_deleting_securely">\'%s\' を完全に削除中…</string>
<string name="progress_querying">要求中</string>
<string name="progress_querying">要求中...</string>
<!--action strings-->
<string name="hint_public_keys">公開鍵の検索</string>
<string name="hint_secret_keys">秘密鍵の検索</string>
<string name="action_share_key_with">鍵の共有</string>
<string name="action_share_key_with">鍵の共有...</string>
<!--key bit length selections-->
<string name="key_size_512">512</string>
<string name="key_size_1024">1024</string>
@ -362,7 +375,7 @@
<plurals name="key_list_selected_keys">
<item quantity="other">%d の鍵を選択。</item>
</plurals>
<string name="key_list_empty_text1">すでにその鍵は存在しません</string>
<string name="key_list_empty_text1">すでにその鍵は存在しません...</string>
<string name="key_list_empty_text2">で始める</string>
<string name="key_list_empty_text3">もしくは</string>
<string name="key_list_empty_button_create">あなた所有の鍵を作る</string>

View File

@ -10,9 +10,8 @@
<string name="title_edit_key">Sleutel bewerken</string>
<string name="title_preferences">Instellingen</string>
<string name="title_api_registered_apps">Geregistreerde apps</string>
<string name="title_change_passphrase">Wachtwoord wijzigen</string>
<string name="title_set_passphrase">Wachtwoord instellen</string>
<string name="title_send_email">E-mail verzenden</string>
<string name="title_send_email">E-mail verzenden...</string>
<string name="title_encrypt_to_file">Versleutelen naar bestand</string>
<string name="title_decrypt_to_file">Ontsleutelen naar bestand</string>
<string name="title_import_keys">Sleutels importeren</string>
@ -109,7 +108,7 @@
<string name="dsa">DSA</string>
<string name="elgamal">ElGamal</string>
<string name="rsa">RSA</string>
<string name="filemanager_title_open">Openen</string>
<string name="filemanager_title_open">Openen...</string>
<string name="warning">Waarschuwing</string>
<string name="error">Fout</string>
<string name="error_message">Fout: %s</string>
@ -172,34 +171,34 @@
<string name="error_nothing_import">Niets te importeren</string>
<!--progress dialogs, usually ending in '…'-->
<string name="progress_done">gereed.</string>
<string name="progress_saving">opslaan</string>
<string name="progress_importing">importeren</string>
<string name="progress_exporting">exporteren</string>
<string name="progress_building_key">sleutel maken</string>
<string name="progress_preparing_master_key">hoofdsleutel voorbereiden</string>
<string name="progress_certifying_master_key">hoofdsleutel certificeren</string>
<string name="progress_building_master_key">hoofdsleutelbos maken</string>
<string name="progress_adding_sub_keys">sub-sleutels toevoegen</string>
<string name="progress_extracting_signature_key">ondertekeningssleutel uitpakken</string>
<string name="progress_extracting_key">sleutel uitpakken</string>
<string name="progress_preparing_streams">streams voorbereiden</string>
<string name="progress_encrypting">gegevens versleutelen</string>
<string name="progress_decrypting">gegevens ontsleutelen</string>
<string name="progress_preparing_signature">handtekening voorbereiden</string>
<string name="progress_generating_signature">handtekening genereren</string>
<string name="progress_processing_signature">handtekening verwerken</string>
<string name="progress_verifying_signature">handtekening verifiëren</string>
<string name="progress_signing">ondertekenen</string>
<string name="progress_reading_data">gegevens lezen</string>
<string name="progress_finding_key">sleutel opzoeken</string>
<string name="progress_decompressing_data">gegevens decomprimeren</string>
<string name="progress_verifying_integrity">integriteit verifiëren</string>
<string name="progress_deleting_securely">\'%s\' veilig verwijderen</string>
<string name="progress_querying">opvragen</string>
<string name="progress_saving">opslaan...</string>
<string name="progress_importing">importeren...</string>
<string name="progress_exporting">exporteren...</string>
<string name="progress_building_key">sleutel maken...</string>
<string name="progress_preparing_master_key">hoofdsleutel voorbereiden...</string>
<string name="progress_certifying_master_key">hoofdsleutel certificeren...</string>
<string name="progress_building_master_key">hoofdsleutelbos maken...</string>
<string name="progress_adding_sub_keys">sub-sleutels toevoegen...</string>
<string name="progress_extracting_signature_key">ondertekeningssleutel uitpakken...</string>
<string name="progress_extracting_key">sleutel uitpakken...</string>
<string name="progress_preparing_streams">streams voorbereiden...</string>
<string name="progress_encrypting">gegevens versleutelen...</string>
<string name="progress_decrypting">gegevens ontsleutelen...</string>
<string name="progress_preparing_signature">handtekening voorbereiden...</string>
<string name="progress_generating_signature">handtekening genereren...</string>
<string name="progress_processing_signature">handtekening verwerken...</string>
<string name="progress_verifying_signature">handtekening verifiëren...</string>
<string name="progress_signing">ondertekenen...</string>
<string name="progress_reading_data">gegevens lezen...</string>
<string name="progress_finding_key">sleutel opzoeken...</string>
<string name="progress_decompressing_data">gegevens decomprimeren...</string>
<string name="progress_verifying_integrity">integriteit verifiëren...</string>
<string name="progress_deleting_securely">\'%s\' veilig verwijderen...</string>
<string name="progress_querying">opvragen...</string>
<!--action strings-->
<string name="hint_public_keys">Publieke sleutels zoeken</string>
<string name="hint_secret_keys">Privésleutels zoeken</string>
<string name="action_share_key_with">Sleutel delen met</string>
<string name="action_share_key_with">Sleutel delen met...</string>
<!--key bit length selections-->
<string name="key_size_512">512</string>
<string name="key_size_1024">1024</string>

View File

@ -15,7 +15,7 @@
<string name="title_key_server_preference">Настройки сервера ключей</string>
<string name="title_change_passphrase">Изменить пароль</string>
<string name="title_set_passphrase">Задать пароль</string>
<string name="title_send_email">Отправить</string>
<string name="title_send_email">Отправить...</string>
<string name="title_encrypt_to_file">Зашифровать в файл</string>
<string name="title_decrypt_to_file">Расшифровать в файл</string>
<string name="title_import_keys">Импорт ключей</string>
@ -61,7 +61,7 @@
<string name="btn_next">Далее</string>
<string name="btn_back">Назад</string>
<string name="btn_clipboard">Буфер обмена</string>
<string name="btn_share">Поделиться</string>
<string name="btn_share">Поделиться...</string>
<string name="btn_lookup_key">Найти ключ</string>
<!--menu-->
<string name="menu_preferences">Настройки</string>
@ -79,9 +79,9 @@
<string name="menu_key_server">Импорт с сервера ключей</string>
<string name="menu_update_key">Обновить с сервера ключей</string>
<string name="menu_export_key_to_server">Загрузить на сервер ключей</string>
<string name="menu_share">Отправить</string>
<string name="menu_share_title_fingerprint">Отправить отпечаток</string>
<string name="menu_share_title">Отправить ключ</string>
<string name="menu_share">Отправить...</string>
<string name="menu_share_title_fingerprint">Отправить отпечаток...</string>
<string name="menu_share_title">Отправить ключ...</string>
<string name="menu_share_default_fingerprint">Отправить</string>
<string name="menu_share_default">Отправить</string>
<string name="menu_share_qr_code">QR код</string>
@ -91,7 +91,8 @@
<string name="menu_sign_key">Подписать ключ</string>
<string name="menu_beam_preferences">Настройки Beam</string>
<string name="menu_key_edit_cancel">Отмена</string>
<string name="menu_encrypt_to">Зашифровать….</string>
<string name="menu_encrypt_to">Зашифровать....</string>
<string name="menu_select_all">Выбрать все</string>
<!--label-->
<string name="label_sign">Подписать</string>
<string name="label_message">Сообщение</string>
@ -115,7 +116,7 @@
<string name="label_key_servers">Серверы ключей</string>
<string name="label_key_id">ID ключа</string>
<string name="label_creation">Создан</string>
<string name="label_expiry">Годен до</string>
<string name="label_expiry">Годен до...</string>
<string name="label_usage">Применение</string>
<string name="label_key_size">Размер ключа</string>
<string name="label_main_user_id">Основной ID пользователя</string>
@ -125,6 +126,7 @@
<string name="label_send_key">После сертификации загрузить ключ на сервер</string>
<string name="label_fingerprint">Отпечаток</string>
<string name="select_keys_button_default">Выбрать</string>
<string name="expiry_date_dialog_title">Срок годности</string>
<plurals name="select_keys_button">
<item quantity="one">%d выбран</item>
<item quantity="few">%d выбрано</item>
@ -165,7 +167,7 @@
<string name="dsa">DSA</string>
<string name="elgamal">ElGamal</string>
<string name="rsa">RSA</string>
<string name="filemanager_title_open">Открыть</string>
<string name="filemanager_title_open">Открыть...</string>
<string name="warning">Внимание</string>
<string name="error">Ошибка</string>
<string name="error_message">Ошибка: %s</string>
@ -284,41 +286,42 @@
</plurals>
<!--progress dialogs, usually ending in '…'-->
<string name="progress_done">готово.</string>
<string name="progress_saving">сохранение…</string>
<string name="progress_importing">импорт…</string>
<string name="progress_exporting">экспорт…</string>
<string name="progress_generating">создание ключа. это может занять до 3 минут…</string>
<string name="progress_building_key">создание ключа…</string>
<string name="progress_preparing_master_key">подготовка основного ключа…</string>
<string name="progress_certifying_master_key">сертификация основного ключа…</string>
<string name="progress_building_master_key">создание основной связки…</string>
<string name="progress_adding_sub_keys">добавление доп. ключей…</string>
<string name="progress_saving_key_ring">сохранение ключа…</string>
<string name="progress_cancel">отмена</string>
<string name="progress_saving">сохранение...</string>
<string name="progress_importing">импорт...</string>
<string name="progress_exporting">экспорт...</string>
<string name="progress_generating">создание ключа. это может занять до 3 минут...</string>
<string name="progress_building_key">создание ключа...</string>
<string name="progress_preparing_master_key">подготовка основного ключа...</string>
<string name="progress_certifying_master_key">сертификация основного ключа...</string>
<string name="progress_building_master_key">создание основной связки...</string>
<string name="progress_adding_sub_keys">добавление доп. ключей...</string>
<string name="progress_saving_key_ring">сохранение ключа...</string>
<plurals name="progress_exporting_key">
<item quantity="one">экспорт ключа</item>
<item quantity="few">экспорт ключей</item>
<item quantity="other">экспорт ключей</item>
<item quantity="one">экспорт ключа...</item>
<item quantity="few">экспорт ключей...</item>
<item quantity="other">экспорт ключей...</item>
</plurals>
<string name="progress_extracting_signature_key">извлечение подписи ключа</string>
<string name="progress_extracting_key">извлечение ключа</string>
<string name="progress_preparing_streams">подготовка к передаче</string>
<string name="progress_encrypting">шифрование данных</string>
<string name="progress_decrypting">расшифровка данных</string>
<string name="progress_preparing_signature">подготовка подписи</string>
<string name="progress_generating_signature">формирование подписи</string>
<string name="progress_processing_signature">обработка подписи</string>
<string name="progress_verifying_signature">проверка подписи</string>
<string name="progress_signing">подписание</string>
<string name="progress_reading_data">чтение данных</string>
<string name="progress_finding_key">поиск ключа</string>
<string name="progress_decompressing_data">распаковка данных</string>
<string name="progress_verifying_integrity">проверка целостности</string>
<string name="progress_deleting_securely">безопасное удаление \'%s\'</string>
<string name="progress_querying">запрос</string>
<string name="progress_extracting_signature_key">извлечение подписи ключа...</string>
<string name="progress_extracting_key">извлечение ключа...</string>
<string name="progress_preparing_streams">подготовка к передаче...</string>
<string name="progress_encrypting">шифрование данных...</string>
<string name="progress_decrypting">расшифровка данных...</string>
<string name="progress_preparing_signature">подготовка подписи...</string>
<string name="progress_generating_signature">формирование подписи...</string>
<string name="progress_processing_signature">обработка подписи...</string>
<string name="progress_verifying_signature">проверка подписи...</string>
<string name="progress_signing">подписание...</string>
<string name="progress_reading_data">чтение данных...</string>
<string name="progress_finding_key">поиск ключа...</string>
<string name="progress_decompressing_data">распаковка данных...</string>
<string name="progress_verifying_integrity">проверка целостности...</string>
<string name="progress_deleting_securely">безопасное удаление \'%s\'...</string>
<string name="progress_querying">запрос...</string>
<!--action strings-->
<string name="hint_public_keys">Найти публичные ключи</string>
<string name="hint_secret_keys">Найти секретные ключи</string>
<string name="action_share_key_with">Отправить</string>
<string name="action_share_key_with">Отправить...</string>
<!--key bit length selections-->
<string name="key_size_512">512</string>
<string name="key_size_1024">1024</string>
@ -386,7 +389,7 @@
<item quantity="few">%d ключей выбрано.</item>
<item quantity="other">%d ключей выбрано.</item>
</plurals>
<string name="key_list_empty_text1">У вас пока нет ключей</string>
<string name="key_list_empty_text1">У вас пока нет ключей...</string>
<string name="key_list_empty_text2">Но Вы можете</string>
<string name="key_list_empty_text3">или</string>
<string name="key_list_empty_button_create">создать свой ключ</string>

View File

@ -76,7 +76,7 @@
<string name="dsa">DSA</string>
<string name="elgamal">ElGamal</string>
<string name="rsa">RSA</string>
<string name="filemanager_title_open"></string>
<string name="filemanager_title_open">...</string>
<string name="warning">Uyarı</string>
<string name="error">Hata</string>
<string name="error_message">Hata: %s</string>
@ -96,17 +96,17 @@
<string name="error_corrupt_data">bozuk veri</string>
<!--progress dialogs, usually ending in '…'-->
<string name="progress_done">bitti.</string>
<string name="progress_saving">kaydediliyor</string>
<string name="progress_importing">alıyor</string>
<string name="progress_exporting">veriyor</string>
<string name="progress_building_key">anahtar oluşturuluyor</string>
<string name="progress_preparing_signature">imza hazırlanıyor</string>
<string name="progress_generating_signature">imza oluşturuluyor</string>
<string name="progress_processing_signature">imza işleniyor</string>
<string name="progress_verifying_signature">imza doğrulanıyor</string>
<string name="progress_signing">imzalanıyor</string>
<string name="progress_reading_data">veri okunuyor</string>
<string name="progress_finding_key">anahtar bulunuyor</string>
<string name="progress_saving">kaydediliyor...</string>
<string name="progress_importing">alıyor...</string>
<string name="progress_exporting">veriyor...</string>
<string name="progress_building_key">anahtar oluşturuluyor...</string>
<string name="progress_preparing_signature">imza hazırlanıyor...</string>
<string name="progress_generating_signature">imza oluşturuluyor...</string>
<string name="progress_processing_signature">imza işleniyor...</string>
<string name="progress_verifying_signature">imza doğrulanıyor...</string>
<string name="progress_signing">imzalanıyor...</string>
<string name="progress_reading_data">veri okunuyor...</string>
<string name="progress_finding_key">anahtar bulunuyor...</string>
<!--action strings-->
<!--key bit length selections-->
<string name="key_size_512">512</string>

View File

@ -16,6 +16,7 @@
<string name="title_change_passphrase">Змінити парольну фразу</string>
<string name="title_set_passphrase">Задати парольну фразу</string>
<string name="title_send_email">Надіслати листа…</string>
<string name="title_send_file">Надіслати файл…</string>
<string name="title_encrypt_to_file">Зашифрувати до файлу</string>
<string name="title_decrypt_to_file">Розшифрувати до файлу</string>
<string name="title_import_keys">Імпортувати ключі</string>
@ -92,6 +93,7 @@
<string name="menu_beam_preferences">Налаштування променя</string>
<string name="menu_key_edit_cancel">Скасувати</string>
<string name="menu_encrypt_to">Зашифрувати…</string>
<string name="menu_select_all">Вибрати усе</string>
<!--label-->
<string name="label_sign">Підпис</string>
<string name="label_message">Повідомлення</string>
@ -104,6 +106,7 @@
<string name="label_select_public_keys">Отримувачі</string>
<string name="label_delete_after_encryption">Вилучити після шифрування</string>
<string name="label_delete_after_decryption">Вилучити після розшифрування</string>
<string name="label_share_after_encryption">Поширити після шифрування</string>
<string name="label_encryption_algorithm">Алгоритм шифрування</string>
<string name="label_hash_algorithm">Хеш алгоритм</string>
<string name="label_asymmetric">Публічний ключ</string>
@ -122,9 +125,12 @@
<string name="label_name">Назва</string>
<string name="label_comment">Коментар</string>
<string name="label_email">Ел. пошта</string>
<string name="label_sign_user_id">Ід підпису користувача</string>
<string name="label_sign_email">Підписати листа</string>
<string name="label_send_key">Завантажити ключ до вибраного сервера ключів після сертифікації</string>
<string name="label_fingerprint">Відбиток</string>
<string name="select_keys_button_default">Вибрати</string>
<string name="expiry_date_dialog_title">Задати термін дії</string>
<plurals name="select_keys_button">
<item quantity="one">%d вибраний</item>
<item quantity="few">%d вибрані</item>
@ -138,6 +144,7 @@
<string name="can_sign">можна підписати</string>
<string name="expired">закінчився</string>
<string name="revoked">скасовано</string>
<string name="user_id">ІД користувача</string>
<plurals name="n_key_servers">
<item quantity="one">%d сервер ключів</item>
<item quantity="few">%d сервери ключів</item>
@ -277,13 +284,21 @@
<string name="error_keyserver_insufficient_query">Запит обмеженого сервера</string>
<string name="error_keyserver_query">Збій сервера ключа запиту</string>
<string name="error_keyserver_too_many_responses">Забагато відповідей</string>
<string name="error_import_file_no_content">Файл не має вмісту</string>
<string name="error_generic_report_bug">Трапилася загальна помилка, будь ласка, створіть новий звіт про помилку для OpenKeychain.</string>
<plurals name="error_can_not_delete_info">
<item quantity="one">Будь ласка, вилучіть його з екрану „Мої ключі“!</item>
<item quantity="few">Будь ласка, вилучіть їх з екрану „Мої ключі“!</item>
<item quantity="other">Будь ласка, вилучіть їх з екрану „Мої ключі“!</item>
</plurals>
<plurals name="error_import_non_pgp_part">
<item quantity="one">частина завантаженого файлу є вірним об\'єктом OpenPGP, але не ключем OpenPGP</item>
<item quantity="few">частини завантаженого файлу є вірним об\'єктом OpenPGP, але не ключем OpenPGP</item>
<item quantity="other">частин завантаженого файлу є вірним об\'єктом OpenPGP, але не ключем OpenPGP</item>
</plurals>
<!--progress dialogs, usually ending in '…'-->
<string name="progress_done">готово.</string>
<string name="progress_cancel">асувати</string>
<string name="progress_saving">збереження…</string>
<string name="progress_importing">імпортується…</string>
<string name="progress_exporting">експортується…</string>

View File

@ -1,17 +1,47 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<!--title-->
<string name="title_select_recipients">选择公钥</string>
<string name="title_select_secret_key">选择私钥</string>
<string name="title_encrypt">加密</string>
<string name="title_decrypt">解密</string>
<string name="title_authentication">密码短语</string>
<string name="title_create_key">创建密钥</string>
<string name="title_edit_key">编辑密钥</string>
<string name="title_preferences">参数</string>
<string name="title_api_registered_apps">已注册应用</string>
<string name="title_key_server_preference">密钥服务器偏好</string>
<string name="title_set_passphrase">设置密码短语</string>
<string name="title_send_email">发送邮件</string>
<string name="title_encrypt_to_file">加密至文件</string>
<string name="title_decrypt_to_file">解密至文件</string>
<string name="title_import_keys">导入密钥</string>
<string name="title_export_key">导出密钥</string>
<string name="title_export_keys">导出密钥</string>
<string name="title_key_not_found">无法找到密钥</string>
<string name="title_key_server_query">查询密钥服务器</string>
<string name="title_send_key">上传到密钥服务器</string>
<string name="title_unknown_signature_key">未知签名密钥</string>
<string name="title_help">帮助</string>
<!--section-->
<string name="section_user_ids">用户ID</string>
<string name="section_keys">密钥</string>
<string name="section_general">常规</string>
<string name="section_defaults">缺省</string>
<string name="section_advanced">高级</string>
<string name="section_master_key">主密钥</string>
<string name="section_key_server">密钥服务器</string>
<string name="section_decrypt_verify">解密并验证</string>
<!--button-->
<string name="btn_sign">签名</string>
<string name="btn_decrypt">解密</string>
<string name="btn_decrypt_verify">解密并验证</string>
<string name="btn_select_encrypt_keys">选择收件人</string>
<string name="btn_encrypt_file">加密文件</string>
<string name="btn_save">保存</string>
<string name="btn_do_not_save">取消</string>
<string name="btn_delete">删除</string>
<string name="btn_no_date"></string>
<string name="btn_clipboard">剪贴板</string>
<!--menu-->
<string name="menu_help">帮助</string>
@ -24,7 +54,7 @@
<string name="menu_copy_to_clipboard">复制到剪贴板</string>
<string name="menu_sign_key">签署密钥</string>
<string name="menu_key_edit_cancel">取消</string>
<string name="menu_encrypt_to">加密到</string>
<string name="menu_encrypt_to">加密到...</string>
<!--label-->
<string name="label_sign">签署</string>
<string name="label_message">讯息</string>
@ -64,7 +94,7 @@
<string name="choice_4hours">4小时</string>
<string name="choice_8hours">8小时</string>
<string name="choice_forever">永远</string>
<string name="filemanager_title_open">打开</string>
<string name="filemanager_title_open">打开...</string>
<string name="warning">警告</string>
<string name="error">错误</string>
<!--sentences-->
@ -106,13 +136,13 @@
<string name="error_wrong_passphrase">错误的密语</string>
<!--progress dialogs, usually ending in '…'-->
<string name="progress_done">完成。</string>
<string name="progress_saving">保存</string>
<string name="progress_importing">导入中</string>
<string name="progress_exporting">导出中</string>
<string name="progress_saving">保存...</string>
<string name="progress_importing">导入中...</string>
<string name="progress_exporting">导出中...</string>
<string name="progress_building_key">建立密钥</string>
<string name="progress_preparing_master_key">正在准备主密钥</string>
<string name="progress_verifying_signature">正在验证签名</string>
<string name="progress_signing">正在签名</string>
<string name="progress_verifying_signature">正在验证签名...</string>
<string name="progress_signing">正在签名...</string>
<string name="progress_reading_data">正在读取数据</string>
<string name="progress_finding_key">正在查找密钥</string>
<string name="progress_querying">正在查询</string>

View File

@ -67,6 +67,8 @@
<string name="btn_clipboard">Clipboard</string>
<string name="btn_share">Share with…</string>
<string name="btn_lookup_key">Lookup key</string>
<string name="btn_encryption_advanced_settings_show">Show advanced settings</string>
<string name="btn_encryption_advanced_settings_hide">Hide advanced settings</string>
<!-- menu -->
<string name="menu_preferences">Settings</string>
@ -145,6 +147,7 @@
<string name="user_id_no_name">&lt;no name&gt;</string>
<string name="none">&lt;none&gt;</string>
<string name="no_key">&lt;no key&gt;</string>
<string name="no_email">&lt;No Email&gt;</string>
<string name="unknown_status"></string>
<string name="can_encrypt">can encrypt</string>
<string name="can_sign">can sign</string>
@ -271,6 +274,7 @@
<string name="error_master_key_must_not_be_el_gamal">the master key cannot be an ElGamal key</string>
<string name="error_unknown_algorithm_choice">unknown algorithm choice</string>
<string name="error_user_id_needs_a_name">you need to specify a name</string>
<string name="error_user_id_no_email">no email found</string>
<string name="error_user_id_needs_an_email_address">you need to specify an email address</string>
<string name="error_key_needs_a_user_id">need at least one user id</string>
<string name="error_main_user_id_must_not_be_empty">main user id must not be empty</string>
@ -313,7 +317,6 @@
<string name="progress_saving">saving…</string>
<string name="progress_importing">importing…</string>
<string name="progress_exporting">exporting…</string>
<string name="progress_generating">generating key, this can take up to 3 minutes…</string>
<string name="progress_building_key">building key…</string>
<string name="progress_preparing_master_key">preparing master key…</string>
<string name="progress_certifying_master_key">certifying master key…</string>
@ -326,6 +329,11 @@
<item quantity="other">exporting keys…</item>
</plurals>
<plurals name="progress_generating">
<item quantity="one">generating key, this can take up to 3 minutes…</item>
<item quantity="other">generating keys, this can take up to 3 minutes…</item>
</plurals>
<string name="progress_extracting_signature_key">extracting signature key…</string>
<string name="progress_extracting_key">extracting key…</string>
<string name="progress_preparing_streams">preparing streams…</string>