diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/helper/ActionBarHelper.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/helper/ActionBarHelper.java index b55075e6c..6aa8e7d74 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/helper/ActionBarHelper.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/helper/ActionBarHelper.java @@ -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)); + } } diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/helper/ExportHelper.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/helper/ExportHelper.java index 8f2c6c83d..6aa28fec8 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/helper/ExportHelper.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/helper/ExportHelper.java @@ -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); diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java index 67ce7a395..902c66fe9 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java @@ -597,9 +597,11 @@ public class KeychainIntentService extends IntentService implements ProgressDial /* Operation */ int keysTotal = 2; - int keysCreated =0; - setProgress(getApplicationContext().getResources().getQuantityString(R.plurals.progress_generating,keysTotal), - keysCreated, keysTotal); + 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, @@ -610,7 +612,7 @@ public class KeychainIntentService extends IntentService implements ProgressDial PGPSecretKey subKey = keyOperations.createKey(Id.choice.algorithm.rsa, 4096, passphrase, false); keysCreated++; - setProgress(keysCreated, keysTotal ); + setProgress(keysCreated, keysTotal); // TODO: default to one master for cert, one sub for encrypt and one sub // for sign diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java index 65c756f9a..ebc002ceb 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java @@ -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; } } } diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyActivity.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyActivity.java index 9a56d768e..029dda1a0 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyActivity.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyActivity.java @@ -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); diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptActivity.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptActivity.java index c111ed33b..76acf15b0 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptActivity.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptActivity.java @@ -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); diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyActivity.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyActivity.java index 2507a77b1..628f642d8 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyActivity.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyActivity.java @@ -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_HORIZONTAL, 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); diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java index 665035d0c..8f8952763 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java @@ -617,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); diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java index 7e31d795e..f04a0e227 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java @@ -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"); diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyLayoutFragment.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyLayoutFragment.java index 6bcb84f46..ca5d8b262 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyLayoutFragment.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyLayoutFragment.java @@ -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,58 @@ 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 = ""; + String masterkeyIdHex = ""; + PGPSecretKeyRing keyRing = ProviderHelper.getPGPSecretKeyRingByMasterKeyId( getActivity(), secretKeyId); if (keyRing != null) { PGPSecretKey key = PgpKeyHelper.getMasterKey(keyRing); + masterkeyIdHex = PgpKeyHelper.convertKeyIdToHex(secretKeyId); + if (key != null) { String userId = PgpKeyHelper.getMainUserIdSafe(getActivity(), key); - String chunks[] = userId.split(" <", 2); + /*String chunks[] = mUserId.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); + + } + } - mKeyUserId.setText(uid); - mKeyUserIdRest.setText(uidExtra); + 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); + } + } } @@ -98,6 +134,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,6 +154,8 @@ 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) { @@ -125,7 +164,6 @@ public class SelectSecretKeyLayoutFragment extends Fragment { if (resultCode == Activity.RESULT_OK) { Bundle bundle = data.getExtras(); secretKeyId = bundle.getLong(SelectSecretKeyActivity.RESULT_EXTRA_MASTER_KEY_ID); - selectKey(secretKeyId); // remove displayed errors diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java index 574d837d2..6f0aaa0f0 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java @@ -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); diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysAdapter.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysAdapter.java index 52186b662..4f7623bce 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysAdapter.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysAdapter.java @@ -42,7 +42,15 @@ public class ImportKeysAdapter extends ArrayAdapter { protected Activity mActivity; protected List 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 { 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 { // 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 { } } - CheckBox cBox = (CheckBox) view.findViewById(R.id.selected); + CheckBox cBox = (CheckBox) convertView.findViewById(R.id.selected); cBox.setChecked(entry.isSelected()); - return view; + return convertView; } } diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java index c4e305984..162bf32fd 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java @@ -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) { diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/ProgressDialogFragment.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/ProgressDialogFragment.java index 6c62d14e0..b7a1882ef 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/ProgressDialogFragment.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/ProgressDialogFragment.java @@ -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; } diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SectionView.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SectionView.java index 99622106f..0acfe13bc 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SectionView.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SectionView.java @@ -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, diff --git a/OpenPGP-Keychain/src/main/res/drawable-hdpi/ic_action_save.png b/OpenPGP-Keychain/src/main/res/drawable-hdpi/ic_action_save.png new file mode 100644 index 000000000..c4b7783cc Binary files /dev/null and b/OpenPGP-Keychain/src/main/res/drawable-hdpi/ic_action_save.png differ diff --git a/OpenPGP-Keychain/src/main/res/drawable-mdpi/ic_action_save.png b/OpenPGP-Keychain/src/main/res/drawable-mdpi/ic_action_save.png new file mode 100644 index 000000000..61304a68c Binary files /dev/null and b/OpenPGP-Keychain/src/main/res/drawable-mdpi/ic_action_save.png differ diff --git a/OpenPGP-Keychain/src/main/res/drawable-xhdpi/ic_action_save.png b/OpenPGP-Keychain/src/main/res/drawable-xhdpi/ic_action_save.png new file mode 100644 index 000000000..29c5f4d3b Binary files /dev/null and b/OpenPGP-Keychain/src/main/res/drawable-xhdpi/ic_action_save.png differ diff --git a/OpenPGP-Keychain/src/main/res/drawable-xxhdpi/ic_action_save.png b/OpenPGP-Keychain/src/main/res/drawable-xxhdpi/ic_action_save.png new file mode 100644 index 000000000..744350049 Binary files /dev/null and b/OpenPGP-Keychain/src/main/res/drawable-xxhdpi/ic_action_save.png differ diff --git a/OpenPGP-Keychain/src/main/res/layout/actionbar_custom_view_save.xml b/OpenPGP-Keychain/src/main/res/layout/actionbar_custom_view_save.xml new file mode 100644 index 000000000..f0dcf177c --- /dev/null +++ b/OpenPGP-Keychain/src/main/res/layout/actionbar_custom_view_save.xml @@ -0,0 +1,27 @@ + + + + + + + \ No newline at end of file diff --git a/OpenPGP-Keychain/src/main/res/layout/actionbar_custom_view_save_cancel.xml b/OpenPGP-Keychain/src/main/res/layout/actionbar_custom_view_save_cancel.xml new file mode 100644 index 000000000..ba08a7714 --- /dev/null +++ b/OpenPGP-Keychain/src/main/res/layout/actionbar_custom_view_save_cancel.xml @@ -0,0 +1,29 @@ + + + + + + + + + \ No newline at end of file diff --git a/OpenPGP-Keychain/src/main/res/layout/actionbar_include_save_button.xml b/OpenPGP-Keychain/src/main/res/layout/actionbar_include_save_button.xml new file mode 100644 index 000000000..86c59dcc5 --- /dev/null +++ b/OpenPGP-Keychain/src/main/res/layout/actionbar_include_save_button.xml @@ -0,0 +1,36 @@ + + + + + + + \ No newline at end of file diff --git a/OpenPGP-Keychain/src/main/res/layout/passphrase_repeat_dialog.xml b/OpenPGP-Keychain/src/main/res/layout/passphrase_repeat_dialog.xml index 2bdd231ee..ae523762c 100644 --- a/OpenPGP-Keychain/src/main/res/layout/passphrase_repeat_dialog.xml +++ b/OpenPGP-Keychain/src/main/res/layout/passphrase_repeat_dialog.xml @@ -6,7 +6,9 @@ android:paddingRight="16dp" android:stretchColumns="1" > - + - + + android:orientation="vertical" > + + android:visibility="gone" + android:text="" + android:textAppearance="?android:attr/textAppearanceSmall" /> + + + \ No newline at end of file diff --git a/OpenPGP-Keychain/src/main/res/raw-el/help_about.html b/OpenPGP-Keychain/src/main/res/raw-el/help_about.html new file mode 100644 index 000000000..863aeee58 --- /dev/null +++ b/OpenPGP-Keychain/src/main/res/raw-el/help_about.html @@ -0,0 +1,45 @@ + + + +

http://www.openkeychain.org

+

OpenKeychain is an OpenPGP implementation for Android.

+

License: GPLv3+

+ +

Developers OpenKeychain

+
    +
  • Dominik Schürmann (Lead developer)
  • +
  • Ash Hughes (crypto patches)
  • +
  • Brian C. Barnes
  • +
  • Bahtiar 'kalkin' Gadimov (UI)
  • + +
+

Developers APG 1.x

+
    +
  • 'Thialfihar' (Lead developer)
  • +
  • 'Senecaso' (QRCode, sign key, upload key)
  • +
  • Oliver Runge
  • +
  • Markus Doits
  • +
+

Libraries

+ + + diff --git a/OpenPGP-Keychain/src/main/res/raw-el/help_changelog.html b/OpenPGP-Keychain/src/main/res/raw-el/help_changelog.html new file mode 100644 index 000000000..abf660ba8 --- /dev/null +++ b/OpenPGP-Keychain/src/main/res/raw-el/help_changelog.html @@ -0,0 +1,108 @@ + + + +

2.3

+
    +
  • remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)
  • +
  • fix setting expiry dates on keys (thanks to Ash Hughes)
  • +
  • more internal fixes when editing keys (thanks to Ash Hughes)
  • +
  • querying keyservers directly from the import screen
  • +
  • fix layout and dialog style on Android 2.2-3.0
  • +
  • fix crash on keys with empty user ids
  • +
  • fix crash and empty lists when coming back from signing screen
  • +
  • Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source
  • +
  • fix upload of key from signing screen
  • +
+

2.2

+
    +
  • new design with navigation drawer
  • +
  • new public key list design
  • +
  • new public key view
  • +
  • bug fixes for importing of keys
  • +
  • key cross-certification (thanks to Ash Hughes)
  • +
  • handle UTF-8 passwords properly (thanks to Ash Hughes)
  • +
  • first version with new languages (thanks to the contributors on Transifex)
  • +
  • sharing of keys via QR Codes fixed and improved
  • +
  • package signature verification for API
  • +
+

2.1.1

+
    +
  • API Updates, preparation for K-9 Mail integration
  • +
+

2.1

+
    +
  • lots of bug fixes
  • +
  • new API for developers
  • +
  • PRNG bug fix by Google
  • +
+

2.0

+
    +
  • complete redesign
  • +
  • share public keys via qr codes, nfc beam
  • +
  • sign keys
  • +
  • upload keys to server
  • +
  • fixes import issues
  • +
  • new AIDL API
  • +
+

1.0.8

+
    +
  • basic keyserver support
  • +
  • app2sd
  • +
  • more choices for pass phrase cache: 1, 2, 4, 8, hours
  • +
  • translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)
  • +
  • bugfixes
  • +
  • optimizations
  • +
+

1.0.7

+
    +
  • fixed problem with signature verification of texts with trailing newline
  • +
  • more options for pass phrase cache time to live (20, 40, 60 mins)
  • +
+

1.0.6

+
    +
  • account adding crash on Froyo fixed
  • +
  • secure file deletion
  • +
  • option to delete key file after import
  • +
  • stream encryption/decryption (gallery, etc.)
  • +
  • new options (language, force v3 signatures)
  • +
  • interface changes
  • +
  • bugfixes
  • +
+

1.0.5

+
    +
  • German and Italian translation
  • +
  • much smaller package, due to reduced BC sources
  • +
  • new preferences GUI
  • +
  • layout adjustment for localization
  • +
  • signature bugfix
  • +
+

1.0.4

+
    +
  • fixed another crash caused by some SDK bug with query builder
  • +
+

1.0.3

+
    +
  • fixed crashes during encryption/signing and possibly key export
  • +
+

1.0.2

+
    +
  • filterable key lists
  • +
  • smarter pre-selection of encryption keys
  • +
  • new Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers
  • +
  • fixes and additional features (key preselection) for K-9 Mail, new beta build available
  • +
+

1.0.1

+
    +
  • GMail account listing was broken in 1.0.0, fixed again
  • +
+

1.0.0

+
    +
  • K-9 Mail integration, APG supporting beta build of K-9 Mail
  • +
  • support of more file managers (including ASTRO)
  • +
  • Slovenian translation
  • +
  • new database, much faster, less memory usage
  • +
  • defined Intents and content provider for other apps
  • +
  • bugfixes
  • +
+ + diff --git a/OpenPGP-Keychain/src/main/res/raw-el/help_nfc_beam.html b/OpenPGP-Keychain/src/main/res/raw-el/help_nfc_beam.html new file mode 100644 index 000000000..88492731c --- /dev/null +++ b/OpenPGP-Keychain/src/main/res/raw-el/help_nfc_beam.html @@ -0,0 +1,12 @@ + + + +

How to receive keys

+
    +
  1. Go to your partners contacts and open the contact you want to share.
  2. +
  3. Hold the two devices back to back (they have to be almost touching) and you’ll feel a vibration.
  4. +
  5. After it vibrates you’ll see the content on your partners device turn into a card-like object with Star Trek warp speed-looking animation in the background.
  6. +
  7. Tap the card and the content will then load on the your device.
  8. +
+ + diff --git a/OpenPGP-Keychain/src/main/res/raw-el/help_start.html b/OpenPGP-Keychain/src/main/res/raw-el/help_start.html new file mode 100644 index 000000000..3a6443a2f --- /dev/null +++ b/OpenPGP-Keychain/src/main/res/raw-el/help_start.html @@ -0,0 +1,19 @@ + + + +

Getting started

+

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.

+ +

It is recommended that you install OI File Manager for enhanced file selection and Barcode Scanner to scan generated QR Codes. Clicking on the links will open Google Play Store or F-Droid for installation.

+ +

I found a bug in OpenKeychain!

+

Please report the bug using the issue tracker of OpenKeychain.

+ +

Contribute

+

If you want to help us developing OpenKeychain by contributing code follow our small guide on Github.

+ +

Translations

+

Help translating OpenKeychain! Everybody can participate at OpenKeychain on Transifex.

+ + + diff --git a/OpenPGP-Keychain/src/main/res/raw-el/nfc_beam_share.html b/OpenPGP-Keychain/src/main/res/raw-el/nfc_beam_share.html new file mode 100644 index 000000000..083e055c7 --- /dev/null +++ b/OpenPGP-Keychain/src/main/res/raw-el/nfc_beam_share.html @@ -0,0 +1,11 @@ + + + +
    +
  1. Make sure that NFC is turned on in Settings > More > NFC and make sure that Android Beam is also on in the same section.
  2. +
  3. Hold the two devices back to back (they have to be almost touching) and you'll feel a vibration.
  4. +
  5. 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.
  6. +
  7. Tap the card and the content will then load on the other person’s device.
  8. +
+ + diff --git a/OpenPGP-Keychain/src/main/res/raw-fa-rIR/help_about.html b/OpenPGP-Keychain/src/main/res/raw-fa-rIR/help_about.html new file mode 100644 index 000000000..863aeee58 --- /dev/null +++ b/OpenPGP-Keychain/src/main/res/raw-fa-rIR/help_about.html @@ -0,0 +1,45 @@ + + + +

http://www.openkeychain.org

+

OpenKeychain is an OpenPGP implementation for Android.

+

License: GPLv3+

+ +

Developers OpenKeychain

+
    +
  • Dominik Schürmann (Lead developer)
  • +
  • Ash Hughes (crypto patches)
  • +
  • Brian C. Barnes
  • +
  • Bahtiar 'kalkin' Gadimov (UI)
  • + +
+

Developers APG 1.x

+
    +
  • 'Thialfihar' (Lead developer)
  • +
  • 'Senecaso' (QRCode, sign key, upload key)
  • +
  • Oliver Runge
  • +
  • Markus Doits
  • +
+

Libraries

+ + + diff --git a/OpenPGP-Keychain/src/main/res/raw-fa-rIR/help_changelog.html b/OpenPGP-Keychain/src/main/res/raw-fa-rIR/help_changelog.html new file mode 100644 index 000000000..abf660ba8 --- /dev/null +++ b/OpenPGP-Keychain/src/main/res/raw-fa-rIR/help_changelog.html @@ -0,0 +1,108 @@ + + + +

2.3

+
    +
  • remove unnecessary export of public keys when exporting secret key (thanks to Ash Hughes)
  • +
  • fix setting expiry dates on keys (thanks to Ash Hughes)
  • +
  • more internal fixes when editing keys (thanks to Ash Hughes)
  • +
  • querying keyservers directly from the import screen
  • +
  • fix layout and dialog style on Android 2.2-3.0
  • +
  • fix crash on keys with empty user ids
  • +
  • fix crash and empty lists when coming back from signing screen
  • +
  • Bouncy Castle (cryptography library) updated from 1.47 to 1.50 and build from source
  • +
  • fix upload of key from signing screen
  • +
+

2.2

+
    +
  • new design with navigation drawer
  • +
  • new public key list design
  • +
  • new public key view
  • +
  • bug fixes for importing of keys
  • +
  • key cross-certification (thanks to Ash Hughes)
  • +
  • handle UTF-8 passwords properly (thanks to Ash Hughes)
  • +
  • first version with new languages (thanks to the contributors on Transifex)
  • +
  • sharing of keys via QR Codes fixed and improved
  • +
  • package signature verification for API
  • +
+

2.1.1

+
    +
  • API Updates, preparation for K-9 Mail integration
  • +
+

2.1

+
    +
  • lots of bug fixes
  • +
  • new API for developers
  • +
  • PRNG bug fix by Google
  • +
+

2.0

+
    +
  • complete redesign
  • +
  • share public keys via qr codes, nfc beam
  • +
  • sign keys
  • +
  • upload keys to server
  • +
  • fixes import issues
  • +
  • new AIDL API
  • +
+

1.0.8

+
    +
  • basic keyserver support
  • +
  • app2sd
  • +
  • more choices for pass phrase cache: 1, 2, 4, 8, hours
  • +
  • translations: Norwegian (thanks, Sander Danielsen), Chinese (thanks, Zhang Fredrick)
  • +
  • bugfixes
  • +
  • optimizations
  • +
+

1.0.7

+
    +
  • fixed problem with signature verification of texts with trailing newline
  • +
  • more options for pass phrase cache time to live (20, 40, 60 mins)
  • +
+

1.0.6

+
    +
  • account adding crash on Froyo fixed
  • +
  • secure file deletion
  • +
  • option to delete key file after import
  • +
  • stream encryption/decryption (gallery, etc.)
  • +
  • new options (language, force v3 signatures)
  • +
  • interface changes
  • +
  • bugfixes
  • +
+

1.0.5

+
    +
  • German and Italian translation
  • +
  • much smaller package, due to reduced BC sources
  • +
  • new preferences GUI
  • +
  • layout adjustment for localization
  • +
  • signature bugfix
  • +
+

1.0.4

+
    +
  • fixed another crash caused by some SDK bug with query builder
  • +
+

1.0.3

+
    +
  • fixed crashes during encryption/signing and possibly key export
  • +
+

1.0.2

+
    +
  • filterable key lists
  • +
  • smarter pre-selection of encryption keys
  • +
  • new Intent handling for VIEW and SEND, allows files to be encrypted/decrypted out of file managers
  • +
  • fixes and additional features (key preselection) for K-9 Mail, new beta build available
  • +
+

1.0.1

+
    +
  • GMail account listing was broken in 1.0.0, fixed again
  • +
+

1.0.0

+
    +
  • K-9 Mail integration, APG supporting beta build of K-9 Mail
  • +
  • support of more file managers (including ASTRO)
  • +
  • Slovenian translation
  • +
  • new database, much faster, less memory usage
  • +
  • defined Intents and content provider for other apps
  • +
  • bugfixes
  • +
+ + diff --git a/OpenPGP-Keychain/src/main/res/raw-fa-rIR/help_nfc_beam.html b/OpenPGP-Keychain/src/main/res/raw-fa-rIR/help_nfc_beam.html new file mode 100644 index 000000000..88492731c --- /dev/null +++ b/OpenPGP-Keychain/src/main/res/raw-fa-rIR/help_nfc_beam.html @@ -0,0 +1,12 @@ + + + +

How to receive keys

+
    +
  1. Go to your partners contacts and open the contact you want to share.
  2. +
  3. Hold the two devices back to back (they have to be almost touching) and you’ll feel a vibration.
  4. +
  5. After it vibrates you’ll see the content on your partners device turn into a card-like object with Star Trek warp speed-looking animation in the background.
  6. +
  7. Tap the card and the content will then load on the your device.
  8. +
+ + diff --git a/OpenPGP-Keychain/src/main/res/raw-fa-rIR/help_start.html b/OpenPGP-Keychain/src/main/res/raw-fa-rIR/help_start.html new file mode 100644 index 000000000..f8c255232 --- /dev/null +++ b/OpenPGP-Keychain/src/main/res/raw-fa-rIR/help_start.html @@ -0,0 +1,19 @@ + + + +

شروع کار

+

اول شما نیاز به یک جفت کلید شخصی دارید. از طریق منوها در "کلیدهای من" بسازید و یا از طریق"واردات کلیدهای" جفت کلیدهای موجود را وارد کنید. پس از آن، شما می توانید کلید های دوستان خود را دانلود کنید و یا آنها را از طریق کدهای QR یا NFC رد و بدل کنید.

+ +

It is recommended that you install OI File Manager for enhanced file selection and Barcode Scanner to scan generated QR Codes. Clicking on the links will open Google Play Store or F-Droid for installation.

+ +

I found a bug in OpenKeychain!

+

Please report the bug using the issue tracker of OpenKeychain.

+ +

هم بخشی کردن

+

If you want to help us developing OpenKeychain by contributing code follow our small guide on Github.

+ +

ترجمه ها

+

Help translating OpenKeychain! Everybody can participate at OpenKeychain on Transifex.

+ + + diff --git a/OpenPGP-Keychain/src/main/res/raw-fa-rIR/nfc_beam_share.html b/OpenPGP-Keychain/src/main/res/raw-fa-rIR/nfc_beam_share.html new file mode 100644 index 000000000..083e055c7 --- /dev/null +++ b/OpenPGP-Keychain/src/main/res/raw-fa-rIR/nfc_beam_share.html @@ -0,0 +1,11 @@ + + + +
    +
  1. Make sure that NFC is turned on in Settings > More > NFC and make sure that Android Beam is also on in the same section.
  2. +
  3. Hold the two devices back to back (they have to be almost touching) and you'll feel a vibration.
  4. +
  5. 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.
  6. +
  7. Tap the card and the content will then load on the other person’s device.
  8. +
+ + diff --git a/OpenPGP-Keychain/src/main/res/values-de/strings.xml b/OpenPGP-Keychain/src/main/res/values-de/strings.xml index ea1e550e3..dcb21dea3 100644 --- a/OpenPGP-Keychain/src/main/res/values-de/strings.xml +++ b/OpenPGP-Keychain/src/main/res/values-de/strings.xml @@ -13,9 +13,8 @@ Einstellungen Registrierte Anwendungen Schlüsselserver - Passwort ändern Passwort setzen - E-Mail senden… + E-Mail senden... In eine Datei verschlüsseln In eine Datei entschlüsseln Schlüssel importieren @@ -163,7 +162,7 @@ DSA ElGamal RSA - Öffnen… + Öffnen... Warnung Fehler Fehler: %s @@ -273,40 +272,41 @@ fertig. - speichern… - importieren… - exportieren… - erstelle Schlüssel, dies kann bis zu 3 Minuten dauern… - erstelle Schlüssel… - Hauptschlüssel wird vorbereitet… - Hauptschlüssel wird beglaubigt… - erstelle Hauptring… - füge Unterschlüssel hinzu… - Schlüssel wird gespeichert… + Abbrechen + speichern... + importieren... + exportieren... + erstelle Schlüssel, dies kann bis zu 3 Minuten dauern... + erstelle Schlüssel... + Hauptschlüssel wird vorbereitet... + Hauptschlüssel wird beglaubigt... + erstelle Hauptring... + füge Unterschlüssel hinzu... + Schlüssel wird gespeichert... Schlüssel wird exportiert… Schlüssel werden exportiert… - extrahiere Signaturschlüssel… - extrahiere Schlüssel… - Datenstrom wird vorbereitet… - Daten werden verschlüsselt… - Daten werden entschlüsselt… - Signatur wird vorbereitet… - Signatur wird erstellt… - Signatur wird verarbeitet… - Signatur wird verifiziert… - signiere… - Daten werden gelesen… - Schlüssel wird gesucht… - Daten werden entpackt… - Integrität wird überprüft… - \'%s\' wird sicher gelöscht… - Anfrage wird gestellt… + extrahiere Signaturschlüssel... + extrahiere Schlüssel... + Datenstrom wird vorbereitet... + Daten werden verschlüsselt... + Daten werden entschlüsselt... + Signatur wird vorbereitet... + Signatur wird erstellt... + Signatur wird verarbeitet... + Signatur wird verifiziert... + signiere... + Daten werden gelesen... + Schlüssel wird gesucht... + Daten werden entpackt... + Integrität wird überprüft... + \'%s\' wird sicher gelöscht... + Anfrage wird gestellt... Öffentliche Schlüssel suchen Private Schlüssel suchen - Teile Schlüssel über… + Teile Schlüssel über... 512 1024 diff --git a/OpenPGP-Keychain/src/main/res/values-el/strings.xml b/OpenPGP-Keychain/src/main/res/values-el/strings.xml new file mode 100644 index 000000000..84b39c221 --- /dev/null +++ b/OpenPGP-Keychain/src/main/res/values-el/strings.xml @@ -0,0 +1,53 @@ + + + + Επιλογή Δημόσιου Κλειδιού + Επιλογή Ιδιωτικού Κλειδιού + Κωδικός + Δημιουργία Κλειδιού + Επεξεργασία Κλειδιού + Επιλογές + + + Υπόγραψε + Αποθήκευση + Ακύρωση + Διαγραφή + Κανένα + ΟΚ + Αλλαγή κωδικού + Επέλεξε Κωδικό + + Διαγραφής κλειδιού + Δημιουργίας κλειδιού + + Υπόγραψε + Μήνυμα + Αρχείο + Κωδικός + Ξανά + Αλγόριθμος + Αλγόριθμος κρυπτογράφησης + Δημόσιο κλειδί + Κωδικός + Μέγεθος κλειδιού + Ηλεκτρονικό ταχυδρομίο + + + + + + + + + + + + + + + + + diff --git a/OpenPGP-Keychain/src/main/res/values-es-rCO/strings.xml b/OpenPGP-Keychain/src/main/res/values-es-rCO/strings.xml index d1f0bd75b..41dc629aa 100644 --- a/OpenPGP-Keychain/src/main/res/values-es-rCO/strings.xml +++ b/OpenPGP-Keychain/src/main/res/values-es-rCO/strings.xml @@ -10,9 +10,8 @@ Editar clave Preferencias Aplicaciones registradas - Cambiar contraseña Establecer contraseña - Enviar correo electrónico… + Enviar correo electrónico... Cifrar a archivo Descifrar a archivo Importar claves diff --git a/OpenPGP-Keychain/src/main/res/values-es/strings.xml b/OpenPGP-Keychain/src/main/res/values-es/strings.xml index de680337f..c643a3cd8 100644 --- a/OpenPGP-Keychain/src/main/res/values-es/strings.xml +++ b/OpenPGP-Keychain/src/main/res/values-es/strings.xml @@ -13,9 +13,9 @@ Preferencias Aplicaciones registradas Prioridad del servidor de claves - Cambiar la frase de contraseña + Cambiar frase de contraseña Establecer frase de contraseña - Enviar email… + Enviar email... Cifrar hacia archivo Descifrar hacia archivo Importar claves @@ -61,7 +61,7 @@ Siguiente Volver Portapapeles - Compartir con… + Compartir con... Buscar clave Ajustes @@ -80,10 +80,10 @@ Actualizar desde servidor de claves Cargar al servidor de claves Compartir - Compartir la huella digital… - Compartir la clave completa… - con… - con… + Compartir la huella digital... + Compartir la clave completa... + con... + con... con código QR con código QR con NFC @@ -91,7 +91,8 @@ Clave de firma Ajustes de Beam Cancelar - Cifrar hacia… + Cifrar hacia... + Seleccionar todo Firmar Mensaje @@ -125,6 +126,7 @@ Cargar clave al servidor de claves seleccionado después de la certificación Huella digital Seleccionar + Establer la fecha de vencimiento %d seleccionado %d seleccionados @@ -163,7 +165,7 @@ DSA ElGamal RSA - Abrir… + Abrir... Advertencia Error Error: %s @@ -275,40 +277,41 @@ hecho. - guardando… - importando… - exportando… - generando la clave, esto puede tardar más de 3 minutos… - construyendo la clave… - preparando la clave maestra… - certificando la clave maestra… - construyendo el anillo maestro… - añadiendo las subclaves… - guardando claves… + cancelar + guardando... + importando... + exportando... + generando la clave, esto puede tardar más de 3 minutos... + construyendo la clave... + preparando la clave maestra... + certificando la clave maestra... + construyendo el anillo maestro... + añadiendo las subclaves... + guardando claves... - exportando clave… - exportando claves… + exportando clave... + exportando claves... - extrayendo la clave de firma… - extrayendo la clave… - preparando las transmisiones… - cifrando los datos… - descifrando los datos… - preparando la firma… - generando la firma… - procesando la firma… - verificando la firma… - firmando… - leyendo los datos… - localizando la clave… - descomprimiendo los datos… - verificando la integridad… + extrayendo la clave de firma... + extrayendo la clave... + preparando las transmisiones... + cifrando los datos... + descifrando los datos... + preparando la firma... + generando la firma... + procesando la firma... + verificando la firma... + firmando... + leyendo los datos... + localizando la clave... + descomprimiendo los datos... + verificando la integridad... borrando \'%s\' de forma segura… - consultando… + consultando... Buscar claves públicas Buscar claves secretas - Compartir la clave con… + Compartir la clave con... 512 1024 @@ -374,7 +377,7 @@ 1 clave seleccionada. %d claves seleccionadas. - Aún no hay claves disponibles… + Aún no hay claves disponibles... Puedes empezar por o crear tu propia clave diff --git a/OpenPGP-Keychain/src/main/res/values-fa-rIR/strings.xml b/OpenPGP-Keychain/src/main/res/values-fa-rIR/strings.xml new file mode 100644 index 000000000..6bb115049 --- /dev/null +++ b/OpenPGP-Keychain/src/main/res/values-fa-rIR/strings.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OpenPGP-Keychain/src/main/res/values-fr/strings.xml b/OpenPGP-Keychain/src/main/res/values-fr/strings.xml index aa9b59287..d99bbcd7c 100644 --- a/OpenPGP-Keychain/src/main/res/values-fr/strings.xml +++ b/OpenPGP-Keychain/src/main/res/values-fr/strings.xml @@ -13,9 +13,10 @@ Préférences Applications enregistrées Préférences du serveur de clefs - Changer la phrase de passe + Modifier la phrase de passe Définir la phrase de passe - Envoyer un courriel… + Envoyer un courriel... + Envoyer un fichier... Chiffrer vers un fichier Déchiffrer vers un fichier importer des clefs @@ -61,7 +62,7 @@ Suivant Retour Presse-papiers - Partager avec… + Partager avec... Rechercher la clef Paramètres @@ -80,10 +81,10 @@ Mettre à jour depuis le serveur de clefs Téléverser vers le serveur de clefs Partager - Partager l\'empreinte… - Partager la clef entière… - avec… - avec… + Partager l\'empreinte... + Partager la clef entière... + avec... + avec... par un code QR par un code QR par la NFC @@ -91,7 +92,8 @@ Signer la clef Paramètres Beam Annuler - Chiffrer vers… + Chiffrer vers... + Tout sélectionner Signer Message @@ -104,6 +106,7 @@ Destinataires Supprimer après le chiffrement Supprimer après le chiffrement + Partager après chiffrement Algorithme de chiffrement Algorithme de hachage Clef publique @@ -122,9 +125,12 @@ Nom Commentaire Courriel + Signer l\'ID utilisateur + Signer le courriel Téléverser la clef vers le serveur de clefs choisi après certification Empreinte Choisir + Définir une date d\'expiration %d choisie %d choisies @@ -137,6 +143,7 @@ peut signer expiré révoquée + ID utilisateur %d serveur de clefs %d serveurs de clefs @@ -163,7 +170,7 @@ DSA ElGamal RSA - Ouvrir… + Ouvrir... Avertissement Erreur Erreur : %s @@ -269,46 +276,53 @@ Requête serveur insuffisante Échec lors de l\'interrogation du serveur de clefs Trop de réponses + Le fichier n\'a pas de contenu + Une erreur générique est survenue, veuillez créer un nouveau rapport de bogue pour OpenKeychain. Veuillez le supprimer depuis l\'écran « Mes Clefs »! Veuillez les supprimer depuis l\'écran « Mes Clefs »! + + une partie du fichier chargé est un objet OpenPGP valide mais pas une clef OpenPGP + certaines parties du fichier chargé sont des objets OpenPGP valides mais pas des clefs OpenPGP + fait. - sauvegarde… - importation… - exportation… - génération de la clef, ceci peut prendre jusqu\'à 3 minutes… - assemblage de la clef… - préparation de la clef maîtresse… - certification de la clef maîtresse… - assemblage du trousseau maître… - ajout des sous-clefs… - sauvegarde de la clef… + annuler + sauvegarde... + importation... + exportation... + génération de la clef, ceci peut prendre jusqu\'à 3 minutes... + assemblage de la clef... + préparation de la clef maîtresse... + certification de la clef maîtresse... + assemblage du trousseau maître... + ajout des sous-clefs... + sauvegarde de la clef... - exportation de la clef… - exportation des clefs… + exportation de la clef... + exportation des clefs... - extraction de la clef de signature… - extraction de la clef… - préparation des flux… - chiffrement des données… - déchiffrement des données… - préparation de la signature… - génération de la signature… - traitement de la signature… - vérification de la signature… - signature… - lecture des données… - recherche de la clef… - décompression des données… - vérification de l\'intégrité… - suppression sûre de « %s »… - interrogation… + extraction de la clef de signature... + extraction de la clef... + préparation des flux... + chiffrement des données... + déchiffrement des données... + préparation de la signature... + génération de la signature... + traitement de la signature... + vérification de la signature... + signature... + lecture des données... + recherche de la clef... + décompression des données... + vérification de l\'intégrité... + suppression sûre de « %s »... + interrogation... Rechercher des clefs publiques Rechercher des clefs secrètes - Partager la clef avec… + Partager la clef avec... 512 1024 @@ -374,7 +388,7 @@ 1 clef choisie %d clefs choisies - Aucune clef encore disponible… + Aucune clef encore disponible... Vous pouvez commencer par ou créer votre propre clef diff --git a/OpenPGP-Keychain/src/main/res/values-it-rIT/strings.xml b/OpenPGP-Keychain/src/main/res/values-it-rIT/strings.xml index 825115bc9..f9e7074da 100644 --- a/OpenPGP-Keychain/src/main/res/values-it-rIT/strings.xml +++ b/OpenPGP-Keychain/src/main/res/values-it-rIT/strings.xml @@ -13,9 +13,10 @@ Preferenze App Registrate Preferenze Server delle Chiavi - Cambia Frase di Accesso + Cambia Frase Di Accesso Imposta Frase di Accesso - Invia Mail… + Invia Mail... + Invia file... Codifica File Decodifica File Importa Chiavi @@ -61,7 +62,7 @@ Prossimo Precedente Appunti - Condividi con… + Condividi con... Chiave di ricerca Impostazioni @@ -80,10 +81,10 @@ Aggiorna dal server delle chiavi Carica chiave nel server Condividi - Condivi impronta… - Condividi intera chiave… + Condivi impronta... + Condividi intera chiave... con.. - con… + con... con Codice QR con Codice QR con NFC @@ -91,7 +92,8 @@ Firma chiave Impostazioni Beam Annulla - Codifica su… + Codifica su... + Seleziona tutto Firma Messaggio @@ -104,6 +106,7 @@ Destinatari Cancella Dopo Codifica Cancella Dopo Decodifica + Condividi Dopo la Codifica Algoritmo di Codifica Algoritmo di Hash Chiave Pubblica @@ -122,9 +125,12 @@ Nome Commento Email + Firma ID Utente + Firma email Carica chiave nel server delle chiavi selezionati dopo la certificazione Impronta Seleziona + Impostare la data di scadenza %d selezionato %d selezionati @@ -137,6 +143,7 @@ puo\' firmare scaduto revocato + ID Utente %d server delle chiavi %d server delle chiavi @@ -163,7 +170,7 @@ DSA ElGamal RSA - Apri… + Apri... Attenzione Errore Errore: %s @@ -269,46 +276,53 @@ Query di server insufficiente Interrogazione del server delle chiavi fallita Troppi responsi + Il File non ha contenuti + Si è verificato un errore generico, si prega di creare una nuova segnalazione di errore per OpenKeychain. Per favore cancellala dalla schermata \'Mie Chavi\' Per favore cancellatele dalla schermata \'Mie Chavi\' + + parte del file caricato e\' un oggetto OpenPGP valido, ma non una chave OpenPGP + parti del file caricato sono oggetti OpenPGP validi, ma non chavi OpenPGP + fatto. - salvataggio… - importazione… - esportazione… - generazione chiave, richiede fino a 3 minuti… - fabbricazione chiave… - preparazione chiave principale… - certificazione chiave principale… - fabbricazione portachiavi principale… - aggiunta sottochiavi… - salvataggio chiavi… + cancella + salvataggio... + importazione... + esportazione... + generazione chiave, richiede fino a 3 minuti... + fabbricazione chiave... + preparazione chiave principale... + certificazione chiave principale... + fabbricazione portachiavi principale... + aggiunta sottochiavi... + salvataggio chiavi... - esportazione chiave… - esportazione chiavi… + esportazione chiave... + esportazione chiavi... - estrazione chiavi di firma… - estrazione chiave… - preparazione flussi… - codifica dati… - decodifica dati… - preparazione firma… - generazione firma… - elaborazione firma… - verifica firma… - firma… - lettura dati… - ricerca chiave… - decompressione dati… - verifica integrita\'… - eliminazione sicura di \'%s\'… - interrogazione… + estrazione chiavi di firma... + estrazione chiave... + preparazione flussi... + codifica dati... + decodifica dati... + preparazione firma... + generazione firma... + elaborazione firma... + verifica firma... + firma... + lettura dati... + ricerca chiave... + decompressione dati... + verifica integrita\'... + eliminazione sicura di \'%s\'... + interrogazione... Ricerca Chiavi Pubbliche Cerca Chiave Privata - Condividi chiave con… + Condividi chiave con... 512 1024 @@ -374,7 +388,7 @@ 1 chiave selezionata. %d chiavi selezionate. - Nessuna chiave disponibile… + Nessuna chiave disponibile... Puoi iniziare da o creazione della tua chiave diff --git a/OpenPGP-Keychain/src/main/res/values-ja/strings.xml b/OpenPGP-Keychain/src/main/res/values-ja/strings.xml index 97d5a72f4..e5ee5ecc0 100644 --- a/OpenPGP-Keychain/src/main/res/values-ja/strings.xml +++ b/OpenPGP-Keychain/src/main/res/values-ja/strings.xml @@ -15,7 +15,8 @@ 鍵サーバ設定 パスフレーズの変更 パスフレーズの設定 - メールの送信… + メールの送信... + ファイルの送信... 暗号化してファイルに 復号化してファイルに 鍵のインポート @@ -61,7 +62,7 @@ 戻る クリップボード - 共有… + 共有... 鍵検出 設定 @@ -80,10 +81,10 @@ 鍵サーバからの更新 鍵サーバへのアップロード 共有 - 指紋の共有… - すべての鍵の共有… - …(指紋) - …(鍵) + 指紋の共有... + すべての鍵の共有... + ...(指紋) + ...(鍵) QRコードで共有(鍵) QRコードで共有(指紋) NFCで共有 @@ -91,7 +92,8 @@ 鍵を署名 Beamの設定 キャンセル - 暗号化… + 暗号化... + すべて選択 署名 メッセージ @@ -104,6 +106,7 @@ 受信者 暗号化後に削除 復号化後に削除 + 暗号化して共有 暗号化アルゴリズム ハッシュアルゴリズム 公開鍵 @@ -122,9 +125,12 @@ 名前 コメント Eメールアドレス + 署名ユーザーID + メールを署名 証明後選択した鍵サーバに鍵をアップロード 指紋 選択 + 期限日時を設定 %d を選択 @@ -136,6 +142,7 @@ 署名可能 期限切れ 破棄 + ユーザーID %d の鍵サーバ @@ -161,7 +168,7 @@ DSA ElGamal RSA - 開く… + 開く... 注意 エラー エラー: %s @@ -261,44 +268,50 @@ サーバへのクエリーが不足しています 鍵サーバへのクエリーが失敗 レスポンスが多すぎます + ファイルに内容がありません + 一般エラーが発生しました、この新しいバグの情報をOpenKeychainプロジェクトに送ってください \'自分の鍵\'画面から削除してください! + + 読み込んだファイルのOpenPGPオブジェクト部分は正しいですが、OpenPGPの鍵ではありません + 完了。 - 保存… - インポート… - エクスポート… - 鍵の生成、3分ほどかかります… - 鍵の構築中… - 主鍵の準備中… - 主鍵の検証中… - 主鍵輪の構築中… - 副鍵の追加中… - 鍵の保存… + キャンセル + 保存... + インポート... + エクスポート... + 鍵の生成、3分ほどかかります... + 鍵の構築中... + 主鍵の準備中... + 主鍵の検証中... + 主鍵輪の構築中... + 副鍵の追加中... + 鍵の保存... - 鍵のエクスポート… + 鍵のエクスポート... - 署名鍵の取り出し中… - 鍵の取り出し中… - ストリームの準備中… - データの暗号化中… - データの復号化中… - 署名の準備中… - 署名の生成中… - 署名処理中… - 署名の検証中… - 署名中… - データ読み込み中… - 鍵検索中… - データの展開中… - 完全性の検証中… + 署名鍵の取り出し中... + 鍵の取り出し中... + ストリームの準備中... + データの暗号化中... + データの復号化中... + 署名の準備中... + 署名の生成中... + 署名処理中... + 署名の検証中... + 署名中... + データ読み込み中... + 鍵検索中... + データの展開中... + 完全性の検証中... \'%s\' を完全に削除中… - 要求中… + 要求中... 公開鍵の検索 秘密鍵の検索 - 鍵の共有… + 鍵の共有... 512 1024 @@ -362,7 +375,7 @@ %d の鍵を選択。 - すでにその鍵は存在しません… + すでにその鍵は存在しません... で始める もしくは あなた所有の鍵を作る diff --git a/OpenPGP-Keychain/src/main/res/values-nl-rNL/strings.xml b/OpenPGP-Keychain/src/main/res/values-nl-rNL/strings.xml index 863932a80..de6ba554d 100644 --- a/OpenPGP-Keychain/src/main/res/values-nl-rNL/strings.xml +++ b/OpenPGP-Keychain/src/main/res/values-nl-rNL/strings.xml @@ -10,9 +10,8 @@ Sleutel bewerken Instellingen Geregistreerde apps - Wachtwoord wijzigen Wachtwoord instellen - E-mail verzenden… + E-mail verzenden... Versleutelen naar bestand Ontsleutelen naar bestand Sleutels importeren @@ -109,7 +108,7 @@ DSA ElGamal RSA - Openen… + Openen... Waarschuwing Fout Fout: %s @@ -172,34 +171,34 @@ Niets te importeren gereed. - opslaan… - importeren… - exporteren… - sleutel maken… - hoofdsleutel voorbereiden… - hoofdsleutel certificeren… - hoofdsleutelbos maken… - sub-sleutels toevoegen… - ondertekeningssleutel uitpakken… - sleutel uitpakken… - streams voorbereiden… - gegevens versleutelen… - gegevens ontsleutelen… - handtekening voorbereiden… - handtekening genereren… - handtekening verwerken… - handtekening verifiëren… - ondertekenen… - gegevens lezen… - sleutel opzoeken… - gegevens decomprimeren… - integriteit verifiëren… - \'%s\' veilig verwijderen… - opvragen… + opslaan... + importeren... + exporteren... + sleutel maken... + hoofdsleutel voorbereiden... + hoofdsleutel certificeren... + hoofdsleutelbos maken... + sub-sleutels toevoegen... + ondertekeningssleutel uitpakken... + sleutel uitpakken... + streams voorbereiden... + gegevens versleutelen... + gegevens ontsleutelen... + handtekening voorbereiden... + handtekening genereren... + handtekening verwerken... + handtekening verifiëren... + ondertekenen... + gegevens lezen... + sleutel opzoeken... + gegevens decomprimeren... + integriteit verifiëren... + \'%s\' veilig verwijderen... + opvragen... Publieke sleutels zoeken Privésleutels zoeken - Sleutel delen met… + Sleutel delen met... 512 1024 diff --git a/OpenPGP-Keychain/src/main/res/values-ru/strings.xml b/OpenPGP-Keychain/src/main/res/values-ru/strings.xml index f69cf8789..22f676ccb 100644 --- a/OpenPGP-Keychain/src/main/res/values-ru/strings.xml +++ b/OpenPGP-Keychain/src/main/res/values-ru/strings.xml @@ -15,7 +15,7 @@ Настройки сервера ключей Изменить пароль Задать пароль - Отправить… + Отправить... Зашифровать в файл Расшифровать в файл Импорт ключей @@ -61,7 +61,7 @@ Далее Назад Буфер обмена - Поделиться… + Поделиться... Найти ключ Настройки @@ -79,9 +79,9 @@ Импорт с сервера ключей Обновить с сервера ключей Загрузить на сервер ключей - Отправить… - Отправить отпечаток… - Отправить ключ… + Отправить... + Отправить отпечаток... + Отправить ключ... Отправить Отправить QR код @@ -91,7 +91,8 @@ Подписать ключ Настройки Beam Отмена - Зашифровать…. + Зашифровать.... + Выбрать все Подписать Сообщение @@ -115,7 +116,7 @@ Серверы ключей ID ключа Создан - Годен до… + Годен до... Применение Размер ключа Основной ID пользователя @@ -125,6 +126,7 @@ После сертификации загрузить ключ на сервер Отпечаток Выбрать + Срок годности %d выбран %d выбрано @@ -165,7 +167,7 @@ DSA ElGamal RSA - Открыть… + Открыть... Внимание Ошибка Ошибка: %s @@ -284,41 +286,42 @@ готово. - сохранение… - импорт… - экспорт… - создание ключа. это может занять до 3 минут… - создание ключа… - подготовка основного ключа… - сертификация основного ключа… - создание основной связки… - добавление доп. ключей… - сохранение ключа… + отмена + сохранение... + импорт... + экспорт... + создание ключа. это может занять до 3 минут... + создание ключа... + подготовка основного ключа... + сертификация основного ключа... + создание основной связки... + добавление доп. ключей... + сохранение ключа... - экспорт ключа… - экспорт ключей… - экспорт ключей… + экспорт ключа... + экспорт ключей... + экспорт ключей... - извлечение подписи ключа… - извлечение ключа… - подготовка к передаче… - шифрование данных… - расшифровка данных… - подготовка подписи… - формирование подписи… - обработка подписи… - проверка подписи… - подписание… - чтение данных… - поиск ключа… - распаковка данных… - проверка целостности… - безопасное удаление \'%s\'… - запрос… + извлечение подписи ключа... + извлечение ключа... + подготовка к передаче... + шифрование данных... + расшифровка данных... + подготовка подписи... + формирование подписи... + обработка подписи... + проверка подписи... + подписание... + чтение данных... + поиск ключа... + распаковка данных... + проверка целостности... + безопасное удаление \'%s\'... + запрос... Найти публичные ключи Найти секретные ключи - Отправить… + Отправить... 512 1024 @@ -386,7 +389,7 @@ %d ключей выбрано. %d ключей выбрано. - У вас пока нет ключей… + У вас пока нет ключей... Но Вы можете или создать свой ключ diff --git a/OpenPGP-Keychain/src/main/res/values-tr/strings.xml b/OpenPGP-Keychain/src/main/res/values-tr/strings.xml index 4f1becaa1..5bb5225b5 100644 --- a/OpenPGP-Keychain/src/main/res/values-tr/strings.xml +++ b/OpenPGP-Keychain/src/main/res/values-tr/strings.xml @@ -76,7 +76,7 @@ DSA ElGamal RSA - Aç… + Aç... Uyarı Hata Hata: %s @@ -96,17 +96,17 @@ bozuk veri bitti. - kaydediliyor… - alıyor… - veriyor… - anahtar oluşturuluyor… - imza hazırlanıyor… - imza oluşturuluyor… - imza işleniyor… - imza doğrulanıyor… - imzalanıyor… - veri okunuyor… - anahtar bulunuyor… + kaydediliyor... + alıyor... + veriyor... + anahtar oluşturuluyor... + imza hazırlanıyor... + imza oluşturuluyor... + imza işleniyor... + imza doğrulanıyor... + imzalanıyor... + veri okunuyor... + anahtar bulunuyor... 512 diff --git a/OpenPGP-Keychain/src/main/res/values-uk/strings.xml b/OpenPGP-Keychain/src/main/res/values-uk/strings.xml index 8997ef5ce..7ccb661d3 100644 --- a/OpenPGP-Keychain/src/main/res/values-uk/strings.xml +++ b/OpenPGP-Keychain/src/main/res/values-uk/strings.xml @@ -16,6 +16,7 @@ Змінити парольну фразу Задати парольну фразу Надіслати листа… + Надіслати файл… Зашифрувати до файлу Розшифрувати до файлу Імпортувати ключі @@ -92,6 +93,7 @@ Налаштування променя Скасувати Зашифрувати… + Вибрати усе Підпис Повідомлення @@ -104,6 +106,7 @@ Отримувачі Вилучити після шифрування Вилучити після розшифрування + Поширити після шифрування Алгоритм шифрування Хеш алгоритм Публічний ключ @@ -122,9 +125,12 @@ Назва Коментар Ел. пошта + Ід підпису користувача + Підписати листа Завантажити ключ до вибраного сервера ключів після сертифікації Відбиток Вибрати + Задати термін дії %d вибраний %d вибрані @@ -138,6 +144,7 @@ можна підписати закінчився скасовано + ІД користувача %d сервер ключів %d сервери ключів @@ -277,13 +284,21 @@ Запит обмеженого сервера Збій сервера ключа запиту Забагато відповідей + Файл не має вмісту + Трапилася загальна помилка, будь ласка, створіть новий звіт про помилку для OpenKeychain. Будь ласка, вилучіть його з екрану „Мої ключі“! Будь ласка, вилучіть їх з екрану „Мої ключі“! Будь ласка, вилучіть їх з екрану „Мої ключі“! + + частина завантаженого файлу є вірним об\'єктом OpenPGP, але не ключем OpenPGP + частини завантаженого файлу є вірним об\'єктом OpenPGP, але не ключем OpenPGP + частин завантаженого файлу є вірним об\'єктом OpenPGP, але не ключем OpenPGP + готово. + cкасувати збереження… імпортується… експортується… diff --git a/OpenPGP-Keychain/src/main/res/values-zh/strings.xml b/OpenPGP-Keychain/src/main/res/values-zh/strings.xml index 5848fb8db..80413d589 100644 --- a/OpenPGP-Keychain/src/main/res/values-zh/strings.xml +++ b/OpenPGP-Keychain/src/main/res/values-zh/strings.xml @@ -1,17 +1,47 @@ + 选择公钥 + 选择私钥 加密 解密 + 密码短语 + 创建密钥 + 编辑密钥 + 参数 + 已注册应用 密钥服务器偏好 + 设置密码短语 + 发送邮件 + 加密至文件 + 解密至文件 + 导入密钥 + 导出密钥 + 导出密钥 + 无法找到密钥 查询密钥服务器 上传到密钥服务器 + 未知签名密钥 + 帮助 + 用户ID + 密钥 + 常规 + 缺省 + 高级 主密钥 密钥服务器 解密并验证 + 签名 + 解密 解密并验证 + 选择收件人 + 加密文件 + 保存 + 取消 + 删除 + 剪贴板 帮助 @@ -24,7 +54,7 @@ 复制到剪贴板 签署密钥 取消 - 加密到… + 加密到... 签署 讯息 @@ -64,7 +94,7 @@ 4小时 8小时 永远 - 打开… + 打开... 警告 错误 @@ -106,13 +136,13 @@ 错误的密语 完成。 - 保存… - 导入中… - 导出中… + 保存... + 导入中... + 导出中... 建立密钥 正在准备主密钥 - 正在验证签名… - 正在签名… + 正在验证签名... + 正在签名... 正在读取数据 正在查找密钥 正在查询 diff --git a/OpenPGP-Keychain/src/main/res/values/strings.xml b/OpenPGP-Keychain/src/main/res/values/strings.xml index 3267115a2..9babeb3f2 100644 --- a/OpenPGP-Keychain/src/main/res/values/strings.xml +++ b/OpenPGP-Keychain/src/main/res/values/strings.xml @@ -147,6 +147,7 @@ <no name> <none> <no key> + <No Email> can encrypt can sign @@ -273,6 +274,7 @@ the master key cannot be an ElGamal key unknown algorithm choice you need to specify a name + no email found you need to specify an email address need at least one user id main user id must not be empty