aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2015-03-10 00:57:23 +0100
committerVincent Breitmoser <valodim@mugenguild.com>2015-03-10 00:57:23 +0100
commit4db86fdabe80cffba13b5e18e1576b5d8de39e8d (patch)
tree80ca70fdd019824c65fc3b73740b1311cecc257e /OpenKeychain
parentf76f84dfb2e406dd613be04dabd9432ffd0f9c4b (diff)
parente3547b497932a1c0219c11d586858754c82d19da (diff)
downloadopen-keychain-4db86fdabe80cffba13b5e18e1576b5d8de39e8d.tar.gz
open-keychain-4db86fdabe80cffba13b5e18e1576b5d8de39e8d.tar.bz2
open-keychain-4db86fdabe80cffba13b5e18e1576b5d8de39e8d.zip
Merge remote-tracking branch 'development' into linked-identities
Diffstat (limited to 'OpenKeychain')
-rw-r--r--OpenKeychain/src/main/AndroidManifest.xml2
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java147
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BaseActivity.java12
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java4
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyEmailFragment.java134
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java2
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyNameFragment.java140
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyPassphraseFragment.java (renamed from OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java)199
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesActivity.java11
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextActivity.java10
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java32
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java41
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesFragment.java41
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextActivity.java2
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextFragment.java41
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvActivity.java4
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddUserIdDialogFragment.java25
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java49
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SetPassphraseDialogFragment.java10
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/EmailEditText.java43
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/NameEditText.java (renamed from OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/AutoCorrectAutoCompleteTextView.java)44
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java88
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PasswordEditText.java101
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/passwordstrengthindicator/PasswordStrengthView.java8
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java30
-rw-r--r--OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_copy_24dp.pngbin0 -> 594 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_save_24dp.pngbin0 -> 638 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_share_24dp.pngbin0 -> 686 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-hdpi/ic_chevron_left_grey_24dp.pngbin0 -> 276 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-hdpi/ic_chevron_right_grey_24dp.pngbin0 -> 271 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-hdpi/ic_close_black_24dp.pngbin0 -> 301 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-hdpi/ic_comment_text_grey600_24dp.pngbin0 -> 455 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-hdpi/ic_person_grey_48dp.pngbin0 -> 576 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_copy_24dp.pngbin0 -> 464 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_save_24dp.pngbin0 -> 447 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_share_24dp.pngbin0 -> 487 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-mdpi/ic_chevron_left_grey_24dp.pngbin0 -> 240 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-mdpi/ic_chevron_right_grey_24dp.pngbin0 -> 225 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-mdpi/ic_close_black_24dp.pngbin0 -> 257 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-mdpi/ic_comment_text_grey600_24dp.pngbin0 -> 308 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-mdpi/ic_person_grey_48dp.pngbin0 -> 431 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_copy_24dp.pngbin0 -> 698 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_save_24dp.pngbin0 -> 750 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_share_24dp.pngbin0 -> 887 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xhdpi/ic_chevron_left_grey_24dp.pngbin0 -> 314 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xhdpi/ic_chevron_right_grey_24dp.pngbin0 -> 305 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xhdpi/ic_close_black_24dp.pngbin0 -> 360 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xhdpi/ic_comment_text_grey600_24dp.pngbin0 -> 469 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xhdpi/ic_person_grey_48dp.pngbin0 -> 751 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_copy_24dp.pngbin0 -> 944 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_save_24dp.pngbin0 -> 1105 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_share_24dp.pngbin0 -> 1334 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xxhdpi/ic_chevron_left_grey_24dp.pngbin0 -> 382 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xxhdpi/ic_chevron_right_grey_24dp.pngbin0 -> 388 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xxhdpi/ic_close_black_24dp.pngbin0 -> 425 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xxhdpi/ic_comment_text_grey600_24dp.pngbin0 -> 748 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xxhdpi/ic_person_grey_48dp.pngbin0 -> 1121 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_copy_24dp.pngbin0 -> 1208 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_save_24dp.pngbin0 -> 1417 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_share_24dp.pngbin0 -> 1872 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xxxhdpi/ic_chevron_left_grey_24dp.pngbin0 -> 481 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xxxhdpi/ic_chevron_right_grey_24dp.pngbin0 -> 472 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xxxhdpi/ic_close_black_24dp.pngbin0 -> 565 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xxxhdpi/ic_comment_text_grey600_24dp.pngbin0 -> 882 bytes
-rw-r--r--OpenKeychain/src/main/res/drawable-xxxhdpi/ic_person_grey_48dp.pngbin0 -> 1488 bytes
-rw-r--r--OpenKeychain/src/main/res/layout/add_user_id_dialog.xml2
-rw-r--r--OpenKeychain/src/main/res/layout/api_app_settings_activity.xml12
-rw-r--r--OpenKeychain/src/main/res/layout/api_app_settings_fragment.xml7
-rw-r--r--OpenKeychain/src/main/res/layout/create_key_email_fragment.xml84
-rw-r--r--OpenKeychain/src/main/res/layout/create_key_final_fragment.xml46
-rw-r--r--OpenKeychain/src/main/res/layout/create_key_input_fragment.xml161
-rw-r--r--OpenKeychain/src/main/res/layout/create_key_name_fragment.xml83
-rw-r--r--OpenKeychain/src/main/res/layout/create_key_passphrase_fragment.xml103
-rw-r--r--OpenKeychain/src/main/res/layout/decrypt_files_activity.xml2
-rw-r--r--OpenKeychain/src/main/res/layout/decrypt_text_activity.xml2
-rw-r--r--OpenKeychain/src/main/res/layout/encrypt_decrypt_overview_fragment.xml2
-rw-r--r--OpenKeychain/src/main/res/layout/encrypt_files_activity.xml2
-rw-r--r--OpenKeychain/src/main/res/layout/encrypt_files_fragment.xml83
-rw-r--r--OpenKeychain/src/main/res/layout/encrypt_text_activity.xml2
-rw-r--r--OpenKeychain/src/main/res/layout/encrypt_text_fragment.xml45
-rw-r--r--OpenKeychain/src/main/res/layout/file_list_entry_add.xml34
-rw-r--r--OpenKeychain/src/main/res/layout/help_activity.xml35
-rw-r--r--OpenKeychain/src/main/res/layout/passphrase_repeat_dialog.xml3
-rw-r--r--OpenKeychain/src/main/res/layout/toolbar_inner_layout.xml26
-rw-r--r--OpenKeychain/src/main/res/layout/toolbar_inner_layout_white.xml26
-rw-r--r--OpenKeychain/src/main/res/layout/toolbar_standalone.xml26
-rw-r--r--OpenKeychain/src/main/res/layout/toolbar_standalone_orange.xml26
-rw-r--r--OpenKeychain/src/main/res/layout/toolbar_standalone_white.xml13
-rw-r--r--OpenKeychain/src/main/res/layout/toolbar_tabs.xml24
-rw-r--r--OpenKeychain/src/main/res/layout/view_key_adv_activity.xml43
-rw-r--r--OpenKeychain/src/main/res/menu/encrypt_file_activity.xml16
-rw-r--r--OpenKeychain/src/main/res/menu/encrypt_text_activity.xml16
-rw-r--r--OpenKeychain/src/main/res/values-cs/strings.xml2
-rw-r--r--OpenKeychain/src/main/res/values-de/strings.xml2
-rw-r--r--OpenKeychain/src/main/res/values-es/strings.xml2
-rw-r--r--OpenKeychain/src/main/res/values-fr/strings.xml2
-rw-r--r--OpenKeychain/src/main/res/values-it/strings.xml2
-rw-r--r--OpenKeychain/src/main/res/values-ja/strings.xml2
-rw-r--r--OpenKeychain/src/main/res/values-nl/strings.xml2
-rw-r--r--OpenKeychain/src/main/res/values-pl/strings.xml2
-rw-r--r--OpenKeychain/src/main/res/values-ru/strings.xml2
-rw-r--r--OpenKeychain/src/main/res/values-sr/strings.xml2
-rw-r--r--OpenKeychain/src/main/res/values-sv/strings.xml2
-rw-r--r--OpenKeychain/src/main/res/values-tr/strings.xml2
-rw-r--r--OpenKeychain/src/main/res/values-uk/strings.xml2
-rw-r--r--OpenKeychain/src/main/res/values-zh-rTW/strings.xml2
-rw-r--r--OpenKeychain/src/main/res/values/strings.xml29
107 files changed, 1294 insertions, 907 deletions
diff --git a/OpenKeychain/src/main/AndroidManifest.xml b/OpenKeychain/src/main/AndroidManifest.xml
index 886a8f7a5..3030cdbf2 100644
--- a/OpenKeychain/src/main/AndroidManifest.xml
+++ b/OpenKeychain/src/main/AndroidManifest.xml
@@ -93,7 +93,7 @@
<activity
android:name=".ui.CreateKeyActivity"
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
- android:windowSoftInputMode="stateHidden|adjustResize"
+ android:windowSoftInputMode="adjustResize"
android:label="@string/title_create_key"
android:parentActivityName=".ui.MainActivity">
<meta-data
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java
index 03fa41984..390e85ef8 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java
@@ -38,8 +38,6 @@ import org.sufficientlysecure.keychain.operations.results.OperationResult.LogEnt
import org.sufficientlysecure.keychain.operations.results.PgpSignEncryptResult;
import org.sufficientlysecure.keychain.pgp.PgpConstants;
import org.sufficientlysecure.keychain.pgp.PgpDecryptVerify;
-import org.sufficientlysecure.keychain.pgp.PgpHelper;
-import org.sufficientlysecure.keychain.pgp.PgpKeyOperation;
import org.sufficientlysecure.keychain.pgp.PgpSignEncryptInput;
import org.sufficientlysecure.keychain.pgp.PgpSignEncryptOperation;
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
@@ -55,7 +53,6 @@ import org.sufficientlysecure.keychain.ui.PassphraseDialogActivity;
import org.sufficientlysecure.keychain.ui.ViewKeyActivity;
import org.sufficientlysecure.keychain.util.InputData;
import org.sufficientlysecure.keychain.util.Log;
-import org.sufficientlysecure.keychain.util.Preferences;
import java.io.IOException;
import java.io.InputStream;
@@ -83,7 +80,7 @@ public class OpenPgpService extends RemoteService {
* @param encryptionUserIds
* @return
*/
- private Intent getKeyIdsFromEmails(Intent data, String[] encryptionUserIds) {
+ private Intent returnKeyIdsFromEmails(Intent data, String[] encryptionUserIds) {
boolean noUserIdsCheck = (encryptionUserIds == null || encryptionUserIds.length == 0);
boolean missingUserIdsCheck = false;
boolean duplicateUserIdsCheck = false;
@@ -164,7 +161,24 @@ public class OpenPgpService extends RemoteService {
}
}
- private Intent getNfcSignIntent(Intent data, long keyId, String pin, byte[] hashToSign, int hashAlgo) {
+ private Intent returnPassphraseIntent(Intent data, long keyId) {
+ // build PendingIntent for passphrase input
+ Intent intent = new Intent(getBaseContext(), PassphraseDialogActivity.class);
+ intent.putExtra(PassphraseDialogActivity.EXTRA_SUBKEY_ID, keyId);
+ // pass params through to activity that it can be returned again later to repeat pgp operation
+ intent.putExtra(PassphraseDialogActivity.EXTRA_DATA, data);
+ PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0,
+ intent,
+ PendingIntent.FLAG_CANCEL_CURRENT);
+
+ // return PendingIntent to be executed by client
+ Intent result = new Intent();
+ result.putExtra(OpenPgpApi.RESULT_INTENT, pi);
+ result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED);
+ return result;
+ }
+
+ private PendingIntent getNfcSignPendingIntent(Intent data, long keyId, String pin, byte[] hashToSign, int hashAlgo) {
// build PendingIntent for Yubikey NFC operations
Intent intent = new Intent(getBaseContext(), NfcActivity.class);
intent.setAction(NfcActivity.ACTION_SIGN_HASH);
@@ -175,18 +189,12 @@ public class OpenPgpService extends RemoteService {
intent.putExtra(NfcActivity.EXTRA_NFC_HASH_TO_SIGN, hashToSign);
intent.putExtra(NfcActivity.EXTRA_NFC_HASH_ALGO, hashAlgo);
- PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0,
+ return PendingIntent.getActivity(getBaseContext(), 0,
intent,
PendingIntent.FLAG_CANCEL_CURRENT);
-
- // return PendingIntent to be executed by client
- Intent result = new Intent();
- result.putExtra(OpenPgpApi.RESULT_INTENT, pi);
- result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED);
- return result;
}
- private Intent getNfcDecryptIntent(Intent data, long subKeyId, String pin, byte[] encryptedSessionKey) {
+ private PendingIntent getNfcDecryptPendingIntent(Intent data, long subKeyId, String pin, byte[] encryptedSessionKey) {
// build PendingIntent for Yubikey NFC operations
Intent intent = new Intent(getBaseContext(), NfcActivity.class);
intent.setAction(NfcActivity.ACTION_DECRYPT_SESSION_KEY);
@@ -196,32 +204,31 @@ public class OpenPgpService extends RemoteService {
intent.putExtra(NfcActivity.EXTRA_KEY_ID, subKeyId);
intent.putExtra(NfcActivity.EXTRA_NFC_ENC_SESSION_KEY, encryptedSessionKey);
- PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0,
+ return PendingIntent.getActivity(getBaseContext(), 0,
intent,
PendingIntent.FLAG_CANCEL_CURRENT);
-
- // return PendingIntent to be executed by client
- Intent result = new Intent();
- result.putExtra(OpenPgpApi.RESULT_INTENT, pi);
- result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED);
- return result;
}
- private Intent getPassphraseIntent(Intent data, long keyId) {
- // build PendingIntent for passphrase input
- Intent intent = new Intent(getBaseContext(), PassphraseDialogActivity.class);
- intent.putExtra(PassphraseDialogActivity.EXTRA_SUBKEY_ID, keyId);
- // pass params through to activity that it can be returned again later to repeat pgp operation
- intent.putExtra(PassphraseDialogActivity.EXTRA_DATA, data);
- PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0,
+ private PendingIntent getKeyserverPendingIntent(Intent data, long masterKeyId) {
+ // If signature is unknown we return an _additional_ PendingIntent
+ // to retrieve the missing key
+ Intent intent = new Intent(getBaseContext(), ImportKeysActivity.class);
+ intent.setAction(ImportKeysActivity.ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN_TO_SERVICE);
+ intent.putExtra(ImportKeysActivity.EXTRA_KEY_ID, masterKeyId);
+ intent.putExtra(ImportKeysActivity.EXTRA_PENDING_INTENT_DATA, data);
+
+ return PendingIntent.getActivity(getBaseContext(), 0,
intent,
PendingIntent.FLAG_CANCEL_CURRENT);
+ }
- // return PendingIntent to be executed by client
- Intent result = new Intent();
- result.putExtra(OpenPgpApi.RESULT_INTENT, pi);
- result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED);
- return result;
+ private PendingIntent getShowKeyPendingIntent(long masterKeyId) {
+ Intent intent = new Intent(getBaseContext(), ViewKeyActivity.class);
+ intent.setData(KeyRings.buildGenericKeyRingUri(masterKeyId));
+
+ return PendingIntent.getActivity(getBaseContext(), 0,
+ intent,
+ PendingIntent.FLAG_CANCEL_CURRENT);
}
private Intent signImpl(Intent data, ParcelFileDescriptor input,
@@ -274,21 +281,27 @@ public class OpenPgpService extends RemoteService {
if (pgpResult.isPending()) {
if ((pgpResult.getResult() & PgpSignEncryptResult.RESULT_PENDING_PASSPHRASE) ==
PgpSignEncryptResult.RESULT_PENDING_PASSPHRASE) {
- return getPassphraseIntent(data, pgpResult.getKeyIdPassphraseNeeded());
+ return returnPassphraseIntent(data, pgpResult.getKeyIdPassphraseNeeded());
} else if ((pgpResult.getResult() & PgpSignEncryptResult.RESULT_PENDING_NFC) ==
PgpSignEncryptResult.RESULT_PENDING_NFC) {
// return PendingIntent to execute NFC activity
// pass through the signature creation timestamp to be used again on second execution
// of PgpSignEncrypt when we have the signed hash!
data.putExtra(OpenPgpApi.EXTRA_NFC_SIG_CREATION_TIMESTAMP, pgpResult.getNfcTimestamp().getTime());
- return getNfcSignIntent(data, pgpResult.getNfcKeyId(), pgpResult.getNfcPassphrase(), pgpResult.getNfcHash(), pgpResult.getNfcAlgo());
+
+ // return PendingIntent to be executed by client
+ Intent result = new Intent();
+ result.putExtra(OpenPgpApi.RESULT_INTENT,
+ getNfcSignPendingIntent(data, pgpResult.getNfcKeyId(), pgpResult.getNfcPassphrase(), pgpResult.getNfcHash(), pgpResult.getNfcAlgo()));
+ result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED);
+ return result;
} else {
throw new PgpGeneralException(
"Encountered unhandled type of pending action not supported by API!");
}
} else if (pgpResult.success()) {
Intent result = new Intent();
- if (!cleartextSign) {
+ if (pgpResult.getDetachedSignature() != null && !cleartextSign) {
result.putExtra(OpenPgpApi.RESULT_DETACHED_SIGNATURE, pgpResult.getDetachedSignature());
}
result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_SUCCESS);
@@ -340,7 +353,7 @@ public class OpenPgpService extends RemoteService {
// get key ids based on given user ids
String[] userIds = data.getStringArrayExtra(OpenPgpApi.EXTRA_USER_IDS);
// give params through to activity...
- Intent result = getKeyIdsFromEmails(data, userIds);
+ Intent result = returnKeyIdsFromEmails(data, userIds);
if (result.getIntExtra(OpenPgpApi.RESULT_CODE, 0) == OpenPgpApi.RESULT_CODE_SUCCESS) {
keyIds = result.getLongArrayExtra(OpenPgpApi.RESULT_KEY_IDS);
@@ -391,14 +404,19 @@ public class OpenPgpService extends RemoteService {
if (pgpResult.isPending()) {
if ((pgpResult.getResult() & PgpSignEncryptResult.RESULT_PENDING_PASSPHRASE) ==
PgpSignEncryptResult.RESULT_PENDING_PASSPHRASE) {
- return getPassphraseIntent(data, pgpResult.getKeyIdPassphraseNeeded());
+ return returnPassphraseIntent(data, pgpResult.getKeyIdPassphraseNeeded());
} else if ((pgpResult.getResult() & PgpSignEncryptResult.RESULT_PENDING_NFC) ==
PgpSignEncryptResult.RESULT_PENDING_NFC) {
// return PendingIntent to execute NFC activity
// pass through the signature creation timestamp to be used again on second execution
// of PgpSignEncrypt when we have the signed hash!
data.putExtra(OpenPgpApi.EXTRA_NFC_SIG_CREATION_TIMESTAMP, pgpResult.getNfcTimestamp().getTime());
- return getNfcSignIntent(data, pgpResult.getNfcKeyId(), pgpResult.getNfcPassphrase(), pgpResult.getNfcHash(), pgpResult.getNfcAlgo());
+ // return PendingIntent to be executed by client
+ Intent result = new Intent();
+ result.putExtra(OpenPgpApi.RESULT_INTENT,
+ getNfcSignPendingIntent(data, pgpResult.getNfcKeyId(), pgpResult.getNfcPassphrase(), pgpResult.getNfcHash(), pgpResult.getNfcAlgo()));
+ result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED);
+ return result;
} else {
throw new PgpGeneralException(
"Encountered unhandled type of pending action not supported by API!");
@@ -478,15 +496,20 @@ public class OpenPgpService extends RemoteService {
if (pgpResult.isPending()) {
if ((pgpResult.getResult() & DecryptVerifyResult.RESULT_PENDING_ASYM_PASSPHRASE) ==
DecryptVerifyResult.RESULT_PENDING_ASYM_PASSPHRASE) {
- return getPassphraseIntent(data, pgpResult.getKeyIdPassphraseNeeded());
+ return returnPassphraseIntent(data, pgpResult.getKeyIdPassphraseNeeded());
} else if ((pgpResult.getResult() & DecryptVerifyResult.RESULT_PENDING_SYM_PASSPHRASE) ==
DecryptVerifyResult.RESULT_PENDING_SYM_PASSPHRASE) {
throw new PgpGeneralException(
"Decryption of symmetric content not supported by API!");
} else if ((pgpResult.getResult() & DecryptVerifyResult.RESULT_PENDING_NFC) ==
DecryptVerifyResult.RESULT_PENDING_NFC) {
- return getNfcDecryptIntent(
- data, pgpResult.getNfcSubKeyId(), pgpResult.getNfcPassphrase(), pgpResult.getNfcEncryptedSessionKey());
+
+ // return PendingIntent to be executed by client
+ Intent result = new Intent();
+ result.putExtra(OpenPgpApi.RESULT_INTENT,
+ getNfcDecryptPendingIntent(data, pgpResult.getNfcSubKeyId(), pgpResult.getNfcPassphrase(), pgpResult.getNfcEncryptedSessionKey()));
+ result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED);
+ return result;
} else {
throw new PgpGeneralException(
"Encountered unhandled type of pending action not supported by API!");
@@ -509,16 +532,10 @@ public class OpenPgpService extends RemoteService {
if (signatureResult.getStatus() == OpenPgpSignatureResult.SIGNATURE_KEY_MISSING) {
// If signature is unknown we return an _additional_ PendingIntent
// to retrieve the missing key
- Intent intent = new Intent(getBaseContext(), ImportKeysActivity.class);
- intent.setAction(ImportKeysActivity.ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN_TO_SERVICE);
- intent.putExtra(ImportKeysActivity.EXTRA_KEY_ID, signatureResult.getKeyId());
- intent.putExtra(ImportKeysActivity.EXTRA_PENDING_INTENT_DATA, data);
-
- PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0,
- intent,
- PendingIntent.FLAG_CANCEL_CURRENT);
-
- result.putExtra(OpenPgpApi.RESULT_INTENT, pi);
+ result.putExtra(OpenPgpApi.RESULT_INTENT, getKeyserverPendingIntent(data, signatureResult.getKeyId()));
+ } else {
+ // If signature key is known, return PendingIntent to show key
+ result.putExtra(OpenPgpApi.RESULT_INTENT, getShowKeyPendingIntent(signatureResult.getKeyId()));
}
}
@@ -576,33 +593,15 @@ public class OpenPgpService extends RemoteService {
Intent result = new Intent();
result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_SUCCESS);
-
// also return PendingIntent that opens the key view activity
- Intent intent = new Intent(getBaseContext(), ViewKeyActivity.class);
- intent.setData(KeyRings.buildGenericKeyRingUri(masterKeyId));
-
- PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0,
- intent,
- PendingIntent.FLAG_CANCEL_CURRENT);
-
- result.putExtra(OpenPgpApi.RESULT_INTENT, pi);
+ result.putExtra(OpenPgpApi.RESULT_INTENT, getShowKeyPendingIntent(masterKeyId));
return result;
} catch (ProviderHelper.NotFoundException e) {
- Intent result = new Intent();
-
// If keys are not in db we return an additional PendingIntent
// to retrieve the missing key
- Intent intent = new Intent(getBaseContext(), ImportKeysActivity.class);
- intent.setAction(ImportKeysActivity.ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN_TO_SERVICE);
- intent.putExtra(ImportKeysActivity.EXTRA_KEY_ID, masterKeyId);
- intent.putExtra(ImportKeysActivity.EXTRA_PENDING_INTENT_DATA, data);
-
- PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0,
- intent,
- PendingIntent.FLAG_CANCEL_CURRENT);
-
- result.putExtra(OpenPgpApi.RESULT_INTENT, pi);
+ Intent result = new Intent();
+ result.putExtra(OpenPgpApi.RESULT_INTENT, getKeyserverPendingIntent(data, masterKeyId));
result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED);
return result;
}
@@ -629,7 +628,7 @@ public class OpenPgpService extends RemoteService {
} else {
// get key ids based on given user ids
String[] userIds = data.getStringArrayExtra(OpenPgpApi.EXTRA_USER_IDS);
- return getKeyIdsFromEmails(data, userIds);
+ return returnKeyIdsFromEmails(data, userIds);
}
}
@@ -669,7 +668,7 @@ public class OpenPgpService extends RemoteService {
return result;
}
- // check if caller is allowed to access openpgp keychain
+ // check if caller is allowed to access OpenKeychain
Intent result = isAllowed(data);
if (result != null) {
return result;
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BaseActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BaseActivity.java
index e6c2542a2..41fa50705 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BaseActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BaseActivity.java
@@ -88,12 +88,20 @@ public abstract class BaseActivity extends ActionBarActivity {
/**
* Close button only
*/
- protected void setFullScreenDialogClose(View.OnClickListener cancelOnClickListener) {
- setActionBarIcon(R.drawable.ic_close_white_24dp);
+ protected void setFullScreenDialogClose(View.OnClickListener cancelOnClickListener, boolean white) {
+ if (white) {
+ setActionBarIcon(R.drawable.ic_close_white_24dp);
+ } else {
+ setActionBarIcon(R.drawable.ic_close_black_24dp);
+ }
getSupportActionBar().setDisplayShowTitleEnabled(true);
mToolbar.setNavigationOnClickListener(cancelOnClickListener);
}
+ protected void setFullScreenDialogClose(View.OnClickListener cancelOnClickListener) {
+ setFullScreenDialogClose(cancelOnClickListener, true);
+ }
+
/**
* Inflate custom design with two buttons using drawables.
* This does not conform to the Material Design Guidelines, but we deviate here as this is used
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java
index 60cc404b6..2da5511b8 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java
@@ -39,8 +39,8 @@ public class CreateKeyActivity extends BaseActivity {
super.onCreate(savedInstanceState);
// pass extras into fragment
- CreateKeyInputFragment frag =
- CreateKeyInputFragment.newInstance(
+ CreateKeyNameFragment frag =
+ CreateKeyNameFragment.newInstance(
getIntent().getStringExtra(EXTRA_NAME),
getIntent().getStringExtra(EXTRA_EMAIL)
);
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyEmailFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyEmailFragment.java
new file mode 100644
index 000000000..d9f391149
--- /dev/null
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyEmailFragment.java
@@ -0,0 +1,134 @@
+/*
+ * 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;
+
+import android.app.Activity;
+import android.content.Context;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+
+import org.sufficientlysecure.keychain.R;
+import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction;
+import org.sufficientlysecure.keychain.ui.widget.EmailEditText;
+
+public class CreateKeyEmailFragment extends Fragment {
+
+ public static final String ARG_NAME = "name";
+ public static final String ARG_EMAIL = "email";
+
+ CreateKeyActivity mCreateKeyActivity;
+ EmailEditText mEmailEdit;
+ View mBackButton;
+ View mNextButton;
+
+ String mName;
+
+ /**
+ * Creates new instance of this fragment
+ */
+ public static CreateKeyEmailFragment newInstance(String name, String email) {
+ CreateKeyEmailFragment frag = new CreateKeyEmailFragment();
+
+ Bundle args = new Bundle();
+ args.putString(ARG_NAME, name);
+ args.putString(ARG_EMAIL, email);
+
+ frag.setArguments(args);
+
+ return frag;
+ }
+
+ /**
+ * Checks if text of given EditText is not empty. If it is empty an error is
+ * set and the EditText gets the focus.
+ *
+ * @param context
+ * @param editText
+ * @return true if EditText is not empty
+ */
+ private static boolean isEditTextNotEmpty(Context context, EditText editText) {
+ boolean output = true;
+ if (editText.getText().toString().length() == 0) {
+ editText.setError(context.getString(R.string.create_key_empty));
+ editText.requestFocus();
+ output = false;
+ } else {
+ editText.setError(null);
+ }
+
+ return output;
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View view = inflater.inflate(R.layout.create_key_email_fragment, container, false);
+
+ mEmailEdit = (EmailEditText) view.findViewById(R.id.create_key_email);
+ mBackButton = view.findViewById(R.id.create_key_back_button);
+ mNextButton = view.findViewById(R.id.create_key_next_button);
+
+ // initial values
+ mName = getArguments().getString(ARG_NAME);
+ String email = getArguments().getString(ARG_EMAIL);
+ mEmailEdit.setText(email);
+
+ // focus empty edit fields
+ if (email == null) {
+ mEmailEdit.requestFocus();
+ }
+ mBackButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mCreateKeyActivity.loadFragment(null, null, FragAction.TO_LEFT);
+ }
+ });
+ mNextButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ createKeyCheck();
+ }
+ });
+
+ return view;
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ mCreateKeyActivity = (CreateKeyActivity) getActivity();
+ }
+
+ private void createKeyCheck() {
+ if (isEditTextNotEmpty(getActivity(), mEmailEdit)) {
+
+ CreateKeyPassphraseFragment frag =
+ CreateKeyPassphraseFragment.newInstance(
+ mName,
+ mEmailEdit.getText().toString()
+ );
+
+ mCreateKeyActivity.loadFragment(null, frag, FragAction.TO_RIGHT);
+ }
+ }
+
+}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java
index 920488e3e..dc9f3d4ad 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java
@@ -95,7 +95,7 @@ public class CreateKeyFinalFragment extends Fragment {
mEmailEdit = (TextView) view.findViewById(R.id.email);
mUploadCheckbox = (CheckBox) view.findViewById(R.id.create_key_upload);
mBackButton = view.findViewById(R.id.create_key_back_button);
- mCreateButton = view.findViewById(R.id.create_key_create_button);
+ mCreateButton = view.findViewById(R.id.create_key_next_button);
mEditText = (TextView) view.findViewById(R.id.create_key_edit_text);
mEditButton = view.findViewById(R.id.create_key_edit_button);
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyNameFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyNameFragment.java
new file mode 100644
index 000000000..50a3bd655
--- /dev/null
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyNameFragment.java
@@ -0,0 +1,140 @@
+/*
+ * 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;
+
+import android.app.Activity;
+import android.content.Context;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+
+import org.sufficientlysecure.keychain.R;
+import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction;
+import org.sufficientlysecure.keychain.ui.widget.EmailEditText;
+import org.sufficientlysecure.keychain.ui.widget.NameEditText;
+
+public class CreateKeyNameFragment extends Fragment {
+
+ public static final String ARG_NAME = "name";
+ public static final String ARG_EMAIL = "email";
+
+ CreateKeyActivity mCreateKeyActivity;
+ NameEditText mNameEdit;
+ View mNextButton;
+
+ String mEmail;
+
+ /**
+ * Creates new instance of this fragment
+ */
+ public static CreateKeyNameFragment newInstance(String name, String email) {
+ CreateKeyNameFragment frag = new CreateKeyNameFragment();
+
+ Bundle args = new Bundle();
+ args.putString(ARG_NAME, name);
+ args.putString(ARG_EMAIL, email);
+
+ frag.setArguments(args);
+
+ return frag;
+ }
+
+ /**
+ * Checks if text of given EditText is not empty. If it is empty an error is
+ * set and the EditText gets the focus.
+ *
+ * @param context
+ * @param editText
+ * @return true if EditText is not empty
+ */
+ private static boolean isEditTextNotEmpty(Context context, EditText editText) {
+ boolean output = true;
+ if (editText.getText().toString().length() == 0) {
+ editText.setError(context.getString(R.string.create_key_empty));
+ editText.requestFocus();
+ output = false;
+ } else {
+ editText.setError(null);
+ }
+
+ return output;
+ }
+
+ private static boolean areEditTextsEqual(Context context, EditText editText1, EditText editText2) {
+ boolean output = true;
+ if (!editText1.getText().toString().equals(editText2.getText().toString())) {
+ editText2.setError(context.getString(R.string.create_key_passphrases_not_equal));
+ editText2.requestFocus();
+ output = false;
+ } else {
+ editText2.setError(null);
+ }
+
+ return output;
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View view = inflater.inflate(R.layout.create_key_name_fragment, container, false);
+
+ mNameEdit = (NameEditText) view.findViewById(R.id.create_key_name);
+ mNextButton = view.findViewById(R.id.create_key_next_button);
+
+ // initial values
+ String name = getArguments().getString(ARG_NAME);
+ mEmail = getArguments().getString(ARG_EMAIL);
+ mNameEdit.setText(name);
+
+ // focus empty edit fields
+ if (name == null) {
+ mNameEdit.requestFocus();
+ }
+ mNextButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ createKeyCheck();
+ }
+ });
+
+ return view;
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ mCreateKeyActivity = (CreateKeyActivity) getActivity();
+ }
+
+ private void createKeyCheck() {
+ if (isEditTextNotEmpty(getActivity(), mNameEdit)) {
+
+ CreateKeyEmailFragment frag =
+ CreateKeyEmailFragment.newInstance(
+ mNameEdit.getText().toString(),
+ mEmail
+ );
+
+ mCreateKeyActivity.loadFragment(null, frag, FragAction.TO_RIGHT);
+ }
+ }
+
+}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyPassphraseFragment.java
index b496d40fd..00ac00ff4 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyInputFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyPassphraseFragment.java
@@ -17,43 +17,46 @@
package org.sufficientlysecure.keychain.ui;
+import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
+import android.text.method.HideReturnsTransformationMethod;
+import android.text.method.PasswordTransformationMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
-import android.widget.ArrayAdapter;
-import android.widget.AutoCompleteTextView;
+import android.widget.CheckBox;
+import android.widget.CompoundButton;
import android.widget.EditText;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction;
-import org.sufficientlysecure.keychain.ui.widget.EmailEditText;
-import org.sufficientlysecure.keychain.ui.widget.PasswordEditText;
-import org.sufficientlysecure.keychain.ui.widget.passwordstrengthindicator.PasswordStrengthView;
-import org.sufficientlysecure.keychain.util.ContactHelper;
+import org.sufficientlysecure.keychain.ui.widget.PassphraseEditText;
-public class CreateKeyInputFragment extends Fragment {
-
- CreateKeyActivity mCreateKeyActivity;
-
- PasswordStrengthView mPassphraseStrengthView;
- AutoCompleteTextView mNameEdit;
- EmailEditText mEmailEdit;
- PasswordEditText mPassphraseEdit;
- EditText mPassphraseEditAgain;
- View mCreateButton;
+public class CreateKeyPassphraseFragment extends Fragment {
public static final String ARG_NAME = "name";
public static final String ARG_EMAIL = "email";
+ // model
+ String mName;
+ String mEmail;
+
+ // view
+ CreateKeyActivity mCreateKeyActivity;
+ PassphraseEditText mPassphraseEdit;
+ EditText mPassphraseEditAgain;
+ CheckBox mShowPassphrase;
+ View mBackButton;
+ View mNextButton;
+
/**
* Creates new instance of this fragment
*/
- public static CreateKeyInputFragment newInstance(String name, String email) {
- CreateKeyInputFragment frag = new CreateKeyInputFragment();
+ public static CreateKeyPassphraseFragment newInstance(String name, String email) {
+ CreateKeyPassphraseFragment frag = new CreateKeyPassphraseFragment();
Bundle args = new Bundle();
args.putString(ARG_NAME, name);
@@ -64,84 +67,102 @@ public class CreateKeyInputFragment extends Fragment {
return frag;
}
+ /**
+ * Checks if text of given EditText is not empty. If it is empty an error is
+ * set and the EditText gets the focus.
+ *
+ * @param context
+ * @param editText
+ * @return true if EditText is not empty
+ */
+ private static boolean isEditTextNotEmpty(Context context, EditText editText) {
+ boolean output = true;
+ if (editText.getText().toString().length() == 0) {
+ editText.setError(context.getString(R.string.create_key_empty));
+ editText.requestFocus();
+ output = false;
+ } else {
+ editText.setError(null);
+ }
+
+ return output;
+ }
+
+ private static boolean areEditTextsEqual(Context context, EditText editText1, EditText editText2) {
+ boolean output = true;
+ if (!editText1.getText().toString().equals(editText2.getText().toString())) {
+ editText2.setError(context.getString(R.string.create_key_passphrases_not_equal));
+ editText2.requestFocus();
+ output = false;
+ } else {
+ editText2.setError(null);
+ }
+
+ return output;
+ }
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.create_key_input_fragment, container, false);
+ View view = inflater.inflate(R.layout.create_key_passphrase_fragment, container, false);
- mPassphraseStrengthView = (PasswordStrengthView) view.findViewById(R.id
- .create_key_passphrase_strength);
- mNameEdit = (AutoCompleteTextView) view.findViewById(R.id.create_key_name);
- mEmailEdit = (EmailEditText) view.findViewById(R.id.create_key_email);
- mPassphraseEdit = (PasswordEditText) view.findViewById(R.id.create_key_passphrase);
+ mPassphraseEdit = (PassphraseEditText) view.findViewById(R.id.create_key_passphrase);
mPassphraseEditAgain = (EditText) view.findViewById(R.id.create_key_passphrase_again);
- mCreateButton = view.findViewById(R.id.create_key_button);
+ mShowPassphrase = (CheckBox) view.findViewById(R.id.create_key_show_passphrase);
+ mBackButton = view.findViewById(R.id.create_key_back_button);
+ mNextButton = view.findViewById(R.id.create_key_next_button);
// initial values
- String name = getArguments().getString(ARG_NAME);
- String email = getArguments().getString(ARG_EMAIL);
- mNameEdit.setText(name);
- mEmailEdit.setText(email);
-
- // focus non-empty edit fields
- if (name != null && email != null) {
- mPassphraseEdit.requestFocus();
- } else if (name != null) {
- mEmailEdit.requestFocus();
- }
-
- mEmailEdit.setThreshold(1); // Start working from first character
- mEmailEdit.setAdapter(
- new ArrayAdapter<>
- (getActivity(), android.R.layout.simple_spinner_dropdown_item,
- ContactHelper.getPossibleUserEmails(getActivity())
- )
- );
-
-
- mNameEdit.setThreshold(1); // Start working from first character
- mNameEdit.setAdapter(
- new ArrayAdapter<>
- (getActivity(), android.R.layout.simple_spinner_dropdown_item,
- ContactHelper.getPossibleUserNames(getActivity())
- )
- );
-
- // Edit text padding doesn't work via xml (http://code.google.com/p/android/issues/detail?id=77982)
- // so we set the right padding programmatically.
- mPassphraseEdit.setPadding(mPassphraseEdit.getPaddingLeft(),
- mPassphraseEdit.getPaddingTop(),
- (int) (56 * getResources().getDisplayMetrics().density),
- mPassphraseEdit.getPaddingBottom());
-
- mPassphraseEdit.setPasswordStrengthView(mPassphraseStrengthView);
-
- mCreateButton.setOnClickListener(new View.OnClickListener() {
+ mName = getArguments().getString(ARG_NAME);
+ mEmail = getArguments().getString(ARG_EMAIL);
+ mPassphraseEdit.requestFocus();
+ mBackButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ back();
+ }
+ });
+ mNextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
createKeyCheck();
}
});
+ mShowPassphrase.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ if (isChecked) {
+ mPassphraseEdit.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
+ mPassphraseEditAgain.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
+ } else {
+ mPassphraseEdit.setTransformationMethod(PasswordTransformationMethod.getInstance());
+ mPassphraseEditAgain.setTransformationMethod(PasswordTransformationMethod.getInstance());
+ }
+ }
+ });
+
return view;
}
@Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
-
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
mCreateKeyActivity = (CreateKeyActivity) getActivity();
}
+ private void back() {
+ hideKeyboard();
+ mCreateKeyActivity.loadFragment(null, null, FragAction.TO_LEFT);
+ }
+
private void createKeyCheck() {
- if (isEditTextNotEmpty(getActivity(), mNameEdit)
- && isEditTextNotEmpty(getActivity(), mEmailEdit)
- && isEditTextNotEmpty(getActivity(), mPassphraseEdit)
+ if (isEditTextNotEmpty(getActivity(), mPassphraseEdit)
&& areEditTextsEqual(getActivity(), mPassphraseEdit, mPassphraseEditAgain)) {
CreateKeyFinalFragment frag =
CreateKeyFinalFragment.newInstance(
- mNameEdit.getText().toString(),
- mEmailEdit.getText().toString(),
+ mName,
+ mEmail,
mPassphraseEdit.getText().toString()
);
@@ -165,38 +186,4 @@ public class CreateKeyInputFragment extends Fragment {
inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
- /**
- * Checks if text of given EditText is not empty. If it is empty an error is
- * set and the EditText gets the focus.
- *
- * @param context
- * @param editText
- * @return true if EditText is not empty
- */
- private static boolean isEditTextNotEmpty(Context context, EditText editText) {
- boolean output = true;
- if (editText.getText().toString().length() == 0) {
- editText.setError(context.getString(R.string.create_key_empty));
- editText.requestFocus();
- output = false;
- } else {
- editText.setError(null);
- }
-
- return output;
- }
-
- private static boolean areEditTextsEqual(Context context, EditText editText1, EditText editText2) {
- boolean output = true;
- if (!editText1.getText().toString().equals(editText2.getText().toString())) {
- editText2.setError(context.getString(R.string.create_key_passphrases_not_equal));
- editText2.requestFocus();
- output = false;
- } else {
- editText2.setError(null);
- }
-
- return output;
- }
-
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesActivity.java
index 89dd4970b..162b10eca 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesActivity.java
@@ -17,9 +17,12 @@
package org.sufficientlysecure.keychain.ui;
+import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
+import android.os.PersistableBundle;
+import android.view.View;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
@@ -40,6 +43,14 @@ public class DecryptFilesActivity extends BaseActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ setFullScreenDialogClose(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ setResult(Activity.RESULT_CANCELED);
+ finish();
+ }
+ }, false);
+
// Handle intent actions
handleActions(savedInstanceState, getIntent());
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextActivity.java
index 81a8a2ac4..1e9e7bcb1 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextActivity.java
@@ -18,9 +18,11 @@
package org.sufficientlysecure.keychain.ui;
+import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
+import android.view.View;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
@@ -49,6 +51,14 @@ public class DecryptTextActivity extends BaseActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ setFullScreenDialogClose(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ setResult(Activity.RESULT_CANCELED);
+ finish();
+ }
+ }, false);
+
// Handle intent actions
handleActions(savedInstanceState, getIntent());
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java
index 0d7e6056e..ed5920cde 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java
@@ -1,10 +1,29 @@
+/*
+ * 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;
+import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.Message;
import android.os.Messenger;
+import android.view.View;
import org.openintents.openpgp.util.OpenPgpApi;
import org.sufficientlysecure.keychain.R;
@@ -26,6 +45,19 @@ public abstract class EncryptActivity extends BaseActivity {
protected Date mNfcTimestamp = null;
protected byte[] mNfcHash = null;
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setFullScreenDialogClose(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ setResult(Activity.RESULT_CANCELED);
+ finish();
+ }
+ }, false);
+ }
+
protected void startPassphraseDialog(long subkeyId) {
Intent intent = new Intent(this, PassphraseDialogActivity.class);
intent.putExtra(PassphraseDialogActivity.EXTRA_SUBKEY_ID, subkeyId);
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java
index 11b596c24..d95b5cda3 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java
@@ -67,8 +67,8 @@ public class EncryptFilesActivity extends EncryptActivity implements EncryptActi
private String mEncryptionUserIds[] = null;
private long mSigningKeyId = Constants.key.none;
private String mPassphrase = "";
- private boolean mUseArmor;
- private boolean mUseCompression;
+ private boolean mUseArmor = false;
+ private boolean mUseCompression = true;
private boolean mDeleteAfterEncrypt = false;
private boolean mShareAfterEncrypt = false;
private ArrayList<Uri> mInputUris;
@@ -209,6 +209,7 @@ public class EncryptFilesActivity extends EncryptActivity implements EncryptActi
} else {
data.setCompressionId(CompressionAlgorithmTags.UNCOMPRESSED);
}
+ data.setEnableAsciiArmorOutput(mUseArmor);
data.setSymmetricEncryptionAlgorithm(PgpConstants.OpenKeychainSymmetricKeyAlgorithmTags.USE_PREFERRED);
data.setSignatureHashAlgorithm(PgpConstants.OpenKeychainSymmetricKeyAlgorithmTags.USE_PREFERRED);
@@ -314,15 +315,6 @@ public class EncryptFilesActivity extends EncryptActivity implements EncryptActi
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- // if called with an intent action, do not init drawer navigation
- if (ACTION_ENCRYPT_DATA.equals(getIntent().getAction())) {
- // lock drawer
-// deactivateDrawerNavigation();
- // TODO: back button to key?
- } else {
-// activateDrawerNavigation(savedInstanceState);
- }
-
// Handle intent actions
handleActions(getIntent());
updateModeFragment();
@@ -339,17 +331,6 @@ public class EncryptFilesActivity extends EncryptActivity implements EncryptActi
return super.onCreateOptionsMenu(menu);
}
- private void updateModeFragment() {
- getSupportFragmentManager().beginTransaction()
- .replace(R.id.encrypt_pager_mode,
- mCurrentMode == MODE_SYMMETRIC
- ? new EncryptSymmetricFragment()
- : new EncryptAsymmetricFragment()
- )
- .commitAllowingStateLoss();
- getSupportFragmentManager().executePendingTransactions();
- }
-
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.isCheckable()) {
@@ -384,6 +365,17 @@ public class EncryptFilesActivity extends EncryptActivity implements EncryptActi
return true;
}
+ private void updateModeFragment() {
+ getSupportFragmentManager().beginTransaction()
+ .replace(R.id.encrypt_pager_mode,
+ mCurrentMode == MODE_SYMMETRIC
+ ? new EncryptSymmetricFragment()
+ : new EncryptAsymmetricFragment()
+ )
+ .commitAllowingStateLoss();
+ getSupportFragmentManager().executePendingTransactions();
+ }
+
/**
* Handles all actions with this intent
*
@@ -418,9 +410,7 @@ public class EncryptFilesActivity extends EncryptActivity implements EncryptActi
uris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
}
- if (extras.containsKey(EXTRA_ASCII_ARMOR)) {
- mUseArmor = extras.getBoolean(EXTRA_ASCII_ARMOR, true);
- }
+ mUseArmor = extras.getBoolean(EXTRA_ASCII_ARMOR, false);
// preselect keys given by intent
mSigningKeyId = extras.getLong(EXTRA_SIGNATURE_KEY_ID);
@@ -428,7 +418,6 @@ public class EncryptFilesActivity extends EncryptActivity implements EncryptActi
// Save uris
mInputUris = uris;
-
}
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesFragment.java
index 860bd8502..ace58b165 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesFragment.java
@@ -27,6 +27,7 @@ import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
+import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
@@ -56,7 +57,6 @@ public class EncryptFilesFragment extends Fragment implements EncryptActivityInt
// view
private View mAddView;
- private View mShareFile;
private ListView mSelectedFiles;
private SelectedFilesAdapter mAdapter = new SelectedFilesAdapter();
private final Map<Uri, Bitmap> thumbnailCache = new HashMap<>();
@@ -78,21 +78,6 @@ public class EncryptFilesFragment extends Fragment implements EncryptActivityInt
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.encrypt_files_fragment, container, false);
- View vEncryptFile = view.findViewById(R.id.action_encrypt_file);
- vEncryptFile.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- encryptClicked(false);
- }
- });
- mShareFile = view.findViewById(R.id.action_encrypt_share);
- mShareFile.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- encryptClicked(true);
- }
- });
-
mAddView = inflater.inflate(R.layout.file_list_entry_add, null);
mAddView.setOnClickListener(new View.OnClickListener() {
@Override
@@ -108,8 +93,10 @@ public class EncryptFilesFragment extends Fragment implements EncryptActivityInt
}
@Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setHasOptionsMenu(true);
}
private void addInputUri() {
@@ -192,6 +179,24 @@ public class EncryptFilesFragment extends Fragment implements EncryptActivityInt
}
@Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.encrypt_save: {
+ encryptClicked(false);
+ break;
+ }
+ case R.id.encrypt_share: {
+ encryptClicked(true);
+ break;
+ }
+ default: {
+ return super.onOptionsItemSelected(item);
+ }
+ }
+ return true;
+ }
+
+ @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_CODE_INPUT: {
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextActivity.java
index 08ff5b962..ee15cf7b5 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextActivity.java
@@ -72,7 +72,7 @@ public class EncryptTextActivity extends EncryptActivity implements EncryptActiv
private ArrayList<Uri> mInputUris;
private ArrayList<Uri> mOutputUris;
private String mMessage = "";
- private boolean mUseCompression;
+ private boolean mUseCompression = true;
public boolean isModeSymmetric() {
return MODE_SYMMETRIC == mCurrentMode;
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextFragment.java
index b13cb7837..5d9994c5c 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextFragment.java
@@ -23,6 +23,7 @@ import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
+import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
@@ -33,8 +34,6 @@ public class EncryptTextFragment extends Fragment {
public static final String ARG_TEXT = "text";
private TextView mText;
- private View mEncryptShare;
- private View mEncryptClipboard;
private EncryptActivityInterface mEncryptInterface;
@@ -72,24 +71,16 @@ public class EncryptTextFragment extends Fragment {
mEncryptInterface.setMessage(s.toString());
}
});
- mEncryptClipboard = view.findViewById(R.id.action_encrypt_clipboard);
- mEncryptShare = view.findViewById(R.id.action_encrypt_share);
- mEncryptClipboard.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- mEncryptInterface.startEncrypt(false);
- }
- });
- mEncryptShare.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- mEncryptInterface.startEncrypt(true);
- }
- });
return view;
}
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setHasOptionsMenu(true);
+ }
@Override
public void onActivityCreated(Bundle savedInstanceState) {
@@ -100,4 +91,22 @@ public class EncryptTextFragment extends Fragment {
mText.setText(text);
}
}
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.encrypt_copy: {
+ mEncryptInterface.startEncrypt(false);
+ break;
+ }
+ case R.id.encrypt_share: {
+ mEncryptInterface.startEncrypt(true);
+ break;
+ }
+ default: {
+ return super.onOptionsItemSelected(item);
+ }
+ }
+ return true;
+ }
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvActivity.java
index 9390e8a69..0654f0c9a 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvActivity.java
@@ -76,8 +76,8 @@ public class ViewKeyAdvActivity extends BaseActivity implements
mExportHelper = new ExportHelper(this);
mProviderHelper = new ProviderHelper(this);
- mViewPager = (ViewPager) findViewById(R.id.view_key_pager);
- mSlidingTabLayout = (PagerSlidingTabStrip) findViewById(R.id.view_key_sliding_tab_layout);
+ mViewPager = (ViewPager) findViewById(R.id.pager);
+ mSlidingTabLayout = (PagerSlidingTabStrip) findViewById(R.id.sliding_tab_layout);
int switchToTab = TAB_MAIN;
Intent intent = getIntent();
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddUserIdDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddUserIdDialogFragment.java
index ee4af8cbe..5dd675fd3 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddUserIdDialogFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddUserIdDialogFragment.java
@@ -33,8 +33,6 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
-import android.widget.ArrayAdapter;
-import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
@@ -44,7 +42,7 @@ import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.pgp.KeyRing;
import org.sufficientlysecure.keychain.ui.widget.EmailEditText;
-import org.sufficientlysecure.keychain.util.ContactHelper;
+import org.sufficientlysecure.keychain.ui.widget.NameEditText;
import org.sufficientlysecure.keychain.util.Log;
public class AddUserIdDialogFragment extends DialogFragment implements OnEditorActionListener {
@@ -57,7 +55,7 @@ public class AddUserIdDialogFragment extends DialogFragment implements OnEditorA
public static final String MESSAGE_DATA_USER_ID = "user_id";
private Messenger mMessenger;
- private AutoCompleteTextView mName;
+ private NameEditText mName;
private EmailEditText mEmail;
private EditText mComment;
@@ -81,11 +79,6 @@ public class AddUserIdDialogFragment extends DialogFragment implements OnEditorA
mMessenger = getArguments().getParcelable(ARG_MESSENGER);
String predefinedName = getArguments().getString(ARG_NAME);
- ArrayAdapter<String> autoCompleteEmailAdapter = new ArrayAdapter<>
- (getActivity(), android.R.layout.simple_spinner_dropdown_item,
- ContactHelper.getPossibleUserEmails(getActivity())
- );
-
CustomAlertDialogBuilder alert = new CustomAlertDialogBuilder(activity);
alert.setTitle(R.string.edit_key_action_add_identity);
@@ -94,16 +87,12 @@ public class AddUserIdDialogFragment extends DialogFragment implements OnEditorA
View view = inflater.inflate(R.layout.add_user_id_dialog, null);
alert.setView(view);
- mName = (AutoCompleteTextView) view.findViewById(R.id.add_user_id_name);
+ mName = (NameEditText) view.findViewById(R.id.add_user_id_name);
mEmail = (EmailEditText) view.findViewById(R.id.add_user_id_address);
mComment = (EditText) view.findViewById(R.id.add_user_id_comment);
mName.setText(predefinedName);
-
- mEmail.setThreshold(1); // Start working from first character
- mEmail.setAdapter(autoCompleteEmailAdapter);
-
alert.setPositiveButton(android.R.string.ok, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
@@ -118,14 +107,6 @@ public class AddUserIdDialogFragment extends DialogFragment implements OnEditorA
}
});
- mName.setThreshold(1); // Start working from first character
- mName.setAdapter(
- new ArrayAdapter<>
- (getActivity(), android.R.layout.simple_spinner_dropdown_item,
- ContactHelper.getPossibleUserNames(getActivity())
- )
- );
-
alert.setNegativeButton(android.R.string.cancel, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java
index 07462b4ff..c4b437593 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java
@@ -28,8 +28,10 @@ import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.widget.Toast;
+import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.util.FileHelper;
+import org.sufficientlysecure.keychain.util.Log;
import java.io.File;
@@ -69,41 +71,44 @@ public class DeleteFileDialogFragment extends DialogFragment {
@Override
public void onClick(DialogInterface dialog, int id) {
dismiss();
- String scheme = deleteUri.getScheme();
- if(scheme.equals(ContentResolver.SCHEME_FILE)) {
- if(new File(deleteUri.getPath()).delete()) {
- Toast.makeText(getActivity(), R.string.file_delete_successful, Toast.LENGTH_SHORT).show();
- return;
- }
- }
- else if(scheme.equals(ContentResolver.SCHEME_CONTENT)) {
- // We can not securely delete Uris, so just use usual delete on them
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ // NOTE: Use Toasts, not Snackbars. When sharing to another application snackbars
+ // would not show up!
+
+ // Use DocumentsContract on Android >= 4.4
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ try {
if (DocumentsContract.deleteDocument(getActivity().getContentResolver(), deleteUri)) {
- Toast.makeText(getActivity(), R.string.file_delete_successful, Toast.LENGTH_SHORT).show();
+ Toast.makeText(getActivity(), getActivity().getString(R.string.file_delete_successful,
+ deleteFilename), Toast.LENGTH_LONG).show();
return;
}
+ } catch (UnsupportedOperationException e) {
+ Log.d(Constants.TAG, "Catched UnsupportedOperationException, can happen when delete is not supported!", e);
}
+ }
+ try {
if (getActivity().getContentResolver().delete(deleteUri, null, null) > 0) {
- Toast.makeText(getActivity(), R.string.file_delete_successful, Toast.LENGTH_SHORT).show();
- return;
- }
-
- // some Uri's a ContentResolver fails to delete is handled by the java.io.File's delete
- // via the path of the Uri
- if(new File(deleteUri.getPath()).delete()) {
- Toast.makeText(getActivity(), R.string.file_delete_successful, Toast.LENGTH_SHORT).show();
+ Toast.makeText(getActivity(), getActivity().getString(R.string.file_delete_successful,
+ deleteFilename), Toast.LENGTH_LONG).show();
return;
}
+ } catch (UnsupportedOperationException e) {
+ Log.d(Constants.TAG, "Catched UnsupportedOperationException, can happen when delete is not supported!", e);
}
- Toast.makeText(getActivity(), getActivity().getString(R.string.error_file_delete_failed,
- deleteFilename), Toast.LENGTH_SHORT).show();
+ // some Uri's a ContentResolver fails to delete is handled by the java.io.File's delete
+ // via the path of the Uri
+ if (new File(deleteUri.getPath()).delete()) {
+ Toast.makeText(getActivity(), getActivity().getString(R.string.file_delete_successful,
+ deleteFilename), Toast.LENGTH_LONG).show();
+ return;
+ }
// Note: We can't delete every file...
- // If possible we should find out if deletion is possible before even showing the option to do so.
+ Toast.makeText(getActivity(), getActivity().getString(R.string.error_file_delete_failed,
+ deleteFilename), Toast.LENGTH_LONG).show();
}
});
alert.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SetPassphraseDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SetPassphraseDialogFragment.java
index 9e1f21f60..b34dc2edc 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SetPassphraseDialogFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SetPassphraseDialogFragment.java
@@ -43,8 +43,7 @@ import android.widget.Toast;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
-import org.sufficientlysecure.keychain.ui.widget.PasswordEditText;
-import org.sufficientlysecure.keychain.ui.widget.passwordstrengthindicator.PasswordStrengthView;
+import org.sufficientlysecure.keychain.ui.widget.PassphraseEditText;
import org.sufficientlysecure.keychain.util.Log;
public class SetPassphraseDialogFragment extends DialogFragment implements OnEditorActionListener {
@@ -57,10 +56,9 @@ public class SetPassphraseDialogFragment extends DialogFragment implements OnEdi
public static final String MESSAGE_NEW_PASSPHRASE = "new_passphrase";
private Messenger mMessenger;
- private PasswordEditText mPassphraseEditText;
+ private PassphraseEditText mPassphraseEditText;
private EditText mPassphraseAgainEditText;
private CheckBox mNoPassphraseCheckBox;
- private PasswordStrengthView mPassphraseStrengthView;
/**
* Creates new instance of this dialog fragment
@@ -100,11 +98,9 @@ public class SetPassphraseDialogFragment extends DialogFragment implements OnEdi
View view = inflater.inflate(R.layout.passphrase_repeat_dialog, null);
alert.setView(view);
- mPassphraseEditText = (PasswordEditText) view.findViewById(R.id.passphrase_passphrase);
+ mPassphraseEditText = (PassphraseEditText) view.findViewById(R.id.passphrase_passphrase);
mPassphraseAgainEditText = (EditText) view.findViewById(R.id.passphrase_passphrase_again);
mNoPassphraseCheckBox = (CheckBox) view.findViewById(R.id.passphrase_no_passphrase);
- mPassphraseStrengthView = (PasswordStrengthView) view.findViewById(R.id.passphrase_repeat_passphrase_strength);
- mPassphraseEditText.setPasswordStrengthView(mPassphraseStrengthView);
if (TextUtils.isEmpty(oldPassphrase)) {
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/EmailEditText.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/EmailEditText.java
index 697f5a61e..1bdec7b84 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/EmailEditText.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/EmailEditText.java
@@ -25,6 +25,7 @@ import android.text.InputType;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.util.Patterns;
+import android.view.inputmethod.EditorInfo;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
@@ -34,35 +35,33 @@ import org.sufficientlysecure.keychain.util.ContactHelper;
import java.util.regex.Matcher;
public class EmailEditText extends AutoCompleteTextView {
- EmailEditText emailEditText;
public EmailEditText(Context context) {
super(context);
- emailEditText = this;
- this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
- this.addTextChangedListener(textWatcher);
+ init();
}
public EmailEditText(Context context, AttributeSet attrs) {
super(context, attrs);
- emailEditText = this;
- this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
- this.addTextChangedListener(textWatcher);
+ init();
}
public EmailEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
- emailEditText = this;
- this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
- this.addTextChangedListener(textWatcher);
+ init();
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public EmailEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
- emailEditText = this;
+ init();
+ }
+
+ private void init() {
this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
this.addTextChangedListener(textWatcher);
+ removeFlag();
+ initAdapter();
}
TextWatcher textWatcher = new TextWatcher() {
@@ -82,16 +81,32 @@ public class EmailEditText extends AutoCompleteTextView {
if (email.length() > 0) {
Matcher emailMatcher = Patterns.EMAIL_ADDRESS.matcher(email);
if (emailMatcher.matches()) {
- emailEditText.setCompoundDrawablesWithIntrinsicBounds(0, 0,
+ EmailEditText.this.setCompoundDrawablesWithIntrinsicBounds(0, 0,
R.drawable.uid_mail_ok, 0);
} else {
- emailEditText.setCompoundDrawablesWithIntrinsicBounds(0, 0,
+ EmailEditText.this.setCompoundDrawablesWithIntrinsicBounds(0, 0,
R.drawable.uid_mail_bad, 0);
}
} else {
// remove drawable if email is empty
- emailEditText.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
+ EmailEditText.this.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
}
}
};
+
+ private void initAdapter() {
+ setThreshold(1); // Start working from first character
+ setAdapter(new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_dropdown_item,
+ ContactHelper.getPossibleUserEmails(getContext())));
+ }
+
+ /**
+ * Hack to re-enable keyboard auto correction in AutoCompleteTextView.
+ * From http://stackoverflow.com/a/22512858
+ */
+ private void removeFlag() {
+ int inputType = getInputType();
+ inputType &= ~EditorInfo.TYPE_TEXT_FLAG_AUTO_COMPLETE;
+ setRawInputType(inputType);
+ }
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/AutoCorrectAutoCompleteTextView.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/NameEditText.java
index ed373a938..f086c5696 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/AutoCorrectAutoCompleteTextView.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/NameEditText.java
@@ -17,32 +17,54 @@
package org.sufficientlysecure.keychain.ui.widget;
+import android.annotation.TargetApi;
import android.content.Context;
+import android.os.Build;
import android.util.AttributeSet;
import android.view.inputmethod.EditorInfo;
+import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
-/**
- * Hack to re-enable keyboard auto correction in AutoCompleteTextView.
- * From http://stackoverflow.com/a/22512858
- */
-public class AutoCorrectAutoCompleteTextView extends AutoCompleteTextView {
+import org.sufficientlysecure.keychain.util.ContactHelper;
- public AutoCorrectAutoCompleteTextView(Context context) {
+public class NameEditText extends AutoCompleteTextView {
+ public NameEditText(Context context) {
super(context);
- removeFlag();
+ init();
}
- public AutoCorrectAutoCompleteTextView(Context context, AttributeSet attrs) {
+ public NameEditText(Context context, AttributeSet attrs) {
super(context, attrs);
- removeFlag();
+ init();
+ }
+
+ public NameEditText(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ init();
}
- public AutoCorrectAutoCompleteTextView(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+ public NameEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ init();
+ }
+
+ private void init() {
removeFlag();
+ initAdapter();
+ }
+
+ private void initAdapter() {
+ setThreshold(1); // Start working from first character
+ setAdapter(new ArrayAdapter<>(
+ getContext(), android.R.layout.simple_spinner_dropdown_item,
+ ContactHelper.getPossibleUserNames(getContext())));
}
+ /**
+ * Hack to re-enable keyboard auto correction in AutoCompleteTextView.
+ * From http://stackoverflow.com/a/22512858
+ */
private void removeFlag() {
int inputType = getInputType();
inputType &= ~EditorInfo.TYPE_TEXT_FLAG_AUTO_COMPLETE;
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java
new file mode 100644
index 000000000..377f701d1
--- /dev/null
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PassphraseEditText.java
@@ -0,0 +1,88 @@
+/*
+ * 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.widget;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.widget.EditText;
+
+import org.sufficientlysecure.keychain.ui.widget.passwordstrengthindicator.PasswordStrengthBarView;
+
+public class PassphraseEditText extends EditText {
+
+ PasswordStrengthBarView mPasswordStrengthBarView;
+ int mPasswordBarWidth;
+ int mPasswordBarHeight;
+ float barGap;
+
+ public PassphraseEditText(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init(context, attrs);
+ }
+
+ private void init(Context context, AttributeSet attrs) {
+ mPasswordBarHeight = (int) (8 * getResources().getDisplayMetrics().density);
+ mPasswordBarWidth = (int) (50 * getResources().getDisplayMetrics().density);
+
+ barGap = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8,
+ getContext().getResources().getDisplayMetrics());
+
+ this.setPadding(getPaddingLeft(), getPaddingTop(),
+ getPaddingRight() + (int) barGap + mPasswordBarWidth, getPaddingBottom());
+
+ mPasswordStrengthBarView = new PasswordStrengthBarView(context, attrs);
+ mPasswordStrengthBarView.setShowGuides(false);
+
+ this.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ mPasswordStrengthBarView.setPassword(s.toString());
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+
+ }
+ });
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ super.onLayout(changed, left, top, right, bottom);
+ mPasswordStrengthBarView.layout(0, 0, mPasswordBarWidth, mPasswordBarHeight);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+ float translateX = getScrollX() + canvas.getWidth() - mPasswordBarWidth;
+ float translateY = (canvas.getHeight() - mPasswordBarHeight) / 2;
+ canvas.translate(translateX, translateY);
+ mPasswordStrengthBarView.draw(canvas);
+ canvas.translate(-translateX, -translateY);
+ }
+} \ No newline at end of file
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PasswordEditText.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PasswordEditText.java
deleted file mode 100644
index 04c48922b..000000000
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/PasswordEditText.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * 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.widget;
-
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.os.Build;
-import android.text.Editable;
-import android.text.InputType;
-import android.text.TextWatcher;
-import android.util.AttributeSet;
-import android.widget.EditText;
-
-import org.sufficientlysecure.keychain.ui.widget.passwordstrengthindicator.PasswordStrengthView;
-
-/**
- * Developer: chipset
- * Package : org.sufficientlysecure.keychain.layouts
- * Project : open-keychain
- * Date : 6/3/15
- */
-public class PasswordEditText extends EditText {
-
- PasswordEditText passwordEditText;
- PasswordStrengthView passwordStrengthView;
-
- public PasswordEditText(Context context) {
- super(context);
- passwordEditText = this;
- this.setInputType(InputType.TYPE_CLASS_TEXT |
- InputType.TYPE_TEXT_VARIATION_PASSWORD);
- this.addTextChangedListener(textWatcher);
- }
-
- public PasswordEditText(Context context, AttributeSet attrs) {
- super(context, attrs);
- passwordEditText = this;
- this.setInputType(InputType.TYPE_CLASS_TEXT |
- InputType.TYPE_TEXT_VARIATION_PASSWORD);
- this.addTextChangedListener(textWatcher);
- }
-
- public PasswordEditText(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- passwordEditText = this;
- this.setInputType(InputType.TYPE_CLASS_TEXT |
- InputType.TYPE_TEXT_VARIATION_PASSWORD);
- this.addTextChangedListener(textWatcher);
- }
-
- @TargetApi(Build.VERSION_CODES.LOLLIPOP)
- public PasswordEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- passwordEditText = this;
- this.setInputType(InputType.TYPE_CLASS_TEXT |
- InputType.TYPE_TEXT_VARIATION_PASSWORD);
- this.addTextChangedListener(textWatcher);
- }
-
-
- TextWatcher textWatcher = new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-
- }
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
-
- }
-
- @Override
- public void afterTextChanged(Editable editable) {
- String passphrase = editable.toString();
- passwordStrengthView.setPassword(passphrase);
- }
- };
-
-// public PasswordStrengthView getPasswordStrengthView() {
-// return passwordStrengthView;
-// }
-
- public void setPasswordStrengthView(PasswordStrengthView mPasswordStrengthView) {
- this.passwordStrengthView = mPasswordStrengthView;
- }
-}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/passwordstrengthindicator/PasswordStrengthView.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/passwordstrengthindicator/PasswordStrengthView.java
index d7270ff58..bc5018497 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/passwordstrengthindicator/PasswordStrengthView.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/passwordstrengthindicator/PasswordStrengthView.java
@@ -56,9 +56,6 @@ import org.sufficientlysecure.keychain.R;
*/
public class PasswordStrengthView extends View {
- protected static final int COLOR_FAIL = Color.parseColor("#e74c3c");
- protected static final int COLOR_WEAK = Color.parseColor("#e67e22");
- protected static final int COLOR_STRONG = Color.parseColor("#2ecc71");
protected int mMinWidth;
protected int mMinHeight;
@@ -100,6 +97,11 @@ public class PasswordStrengthView extends View {
public PasswordStrengthView(Context context, AttributeSet attrs) {
super(context, attrs);
+
+ int COLOR_FAIL = context.getResources().getColor(R.color.android_red_light);
+ int COLOR_WEAK = context.getResources().getColor(R.color.android_orange_light);
+ int COLOR_STRONG = context.getResources().getColor(R.color.android_green_light);
+
TypedArray style = context.getTheme().obtainStyledAttributes(
attrs,
R.styleable.PasswordStrengthView,
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java
index c66dc04d0..08c7c02fb 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java
@@ -43,9 +43,11 @@ import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.regex.Matcher;
public class ContactHelper {
@@ -54,6 +56,17 @@ public class ContactHelper {
public static List<String> getPossibleUserEmails(Context context) {
Set<String> accountMails = getAccountEmails(context);
accountMails.addAll(getMainProfileContactEmails(context));
+
+ // remove items that are not an email
+ Iterator<String> it = accountMails.iterator();
+ while (it.hasNext()) {
+ String email = it.next();
+ Matcher emailMatcher = Patterns.EMAIL_ADDRESS.matcher(email);
+ if (!emailMatcher.matches()) {
+ it.remove();
+ }
+ }
+
// now return the Set (without duplicates) as a List
return new ArrayList<>(accountMails);
}
@@ -62,6 +75,17 @@ public class ContactHelper {
Set<String> accountMails = getAccountEmails(context);
Set<String> names = getContactNamesFromEmails(context, accountMails);
names.addAll(getMainProfileContactName(context));
+
+ // remove items that are an email
+ Iterator<String> it = names.iterator();
+ while (it.hasNext()) {
+ String email = it.next();
+ Matcher emailMatcher = Patterns.EMAIL_ADDRESS.matcher(email);
+ if (emailMatcher.matches()) {
+ it.remove();
+ }
+ }
+
return new ArrayList<>(names);
}
@@ -75,9 +99,7 @@ public class ContactHelper {
final Account[] accounts = AccountManager.get(context).getAccounts();
final Set<String> emailSet = new HashSet<>();
for (Account account : accounts) {
- if (Patterns.EMAIL_ADDRESS.matcher(account.name).matches()) {
- emailSet.add(account.name);
- }
+ emailSet.add(account.name);
}
return emailSet;
}
@@ -256,7 +278,7 @@ public class ContactHelper {
}
public static Bitmap loadPhotoByMasterKeyId(ContentResolver contentResolver, long masterKeyId,
- boolean highRes) {
+ boolean highRes) {
if (masterKeyId == -1) {
return null;
}
diff --git a/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_copy_24dp.png b/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_copy_24dp.png
new file mode 100644
index 000000000..25a7ed445
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_copy_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_save_24dp.png b/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_save_24dp.png
new file mode 100644
index 000000000..ef17796fb
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_save_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_share_24dp.png b/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_share_24dp.png
new file mode 100644
index 000000000..402d792c0
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-hdpi/ic_action_encrypt_share_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-hdpi/ic_chevron_left_grey_24dp.png b/OpenKeychain/src/main/res/drawable-hdpi/ic_chevron_left_grey_24dp.png
new file mode 100644
index 000000000..12e39d39d
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-hdpi/ic_chevron_left_grey_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-hdpi/ic_chevron_right_grey_24dp.png b/OpenKeychain/src/main/res/drawable-hdpi/ic_chevron_right_grey_24dp.png
new file mode 100644
index 000000000..7eef500d4
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-hdpi/ic_chevron_right_grey_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-hdpi/ic_close_black_24dp.png b/OpenKeychain/src/main/res/drawable-hdpi/ic_close_black_24dp.png
new file mode 100644
index 000000000..d5a928783
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-hdpi/ic_close_black_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-hdpi/ic_comment_text_grey600_24dp.png b/OpenKeychain/src/main/res/drawable-hdpi/ic_comment_text_grey600_24dp.png
new file mode 100644
index 000000000..c48a3b463
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-hdpi/ic_comment_text_grey600_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-hdpi/ic_person_grey_48dp.png b/OpenKeychain/src/main/res/drawable-hdpi/ic_person_grey_48dp.png
new file mode 100644
index 000000000..de2a86e89
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-hdpi/ic_person_grey_48dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_copy_24dp.png b/OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_copy_24dp.png
new file mode 100644
index 000000000..9517e1fec
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_copy_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_save_24dp.png b/OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_save_24dp.png
new file mode 100644
index 000000000..162981140
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_save_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_share_24dp.png b/OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_share_24dp.png
new file mode 100644
index 000000000..779ba94d3
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-mdpi/ic_action_encrypt_share_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-mdpi/ic_chevron_left_grey_24dp.png b/OpenKeychain/src/main/res/drawable-mdpi/ic_chevron_left_grey_24dp.png
new file mode 100644
index 000000000..56ab24da9
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-mdpi/ic_chevron_left_grey_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-mdpi/ic_chevron_right_grey_24dp.png b/OpenKeychain/src/main/res/drawable-mdpi/ic_chevron_right_grey_24dp.png
new file mode 100644
index 000000000..d6581fe23
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-mdpi/ic_chevron_right_grey_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-mdpi/ic_close_black_24dp.png b/OpenKeychain/src/main/res/drawable-mdpi/ic_close_black_24dp.png
new file mode 100644
index 000000000..4ebf8a227
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-mdpi/ic_close_black_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-mdpi/ic_comment_text_grey600_24dp.png b/OpenKeychain/src/main/res/drawable-mdpi/ic_comment_text_grey600_24dp.png
new file mode 100644
index 000000000..d50c008c7
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-mdpi/ic_comment_text_grey600_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-mdpi/ic_person_grey_48dp.png b/OpenKeychain/src/main/res/drawable-mdpi/ic_person_grey_48dp.png
new file mode 100644
index 000000000..738e3490d
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-mdpi/ic_person_grey_48dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_copy_24dp.png b/OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_copy_24dp.png
new file mode 100644
index 000000000..9df8ff01a
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_copy_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_save_24dp.png b/OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_save_24dp.png
new file mode 100644
index 000000000..eef0635b7
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_save_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_share_24dp.png b/OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_share_24dp.png
new file mode 100644
index 000000000..d359cd6ab
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xhdpi/ic_action_encrypt_share_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/ic_chevron_left_grey_24dp.png b/OpenKeychain/src/main/res/drawable-xhdpi/ic_chevron_left_grey_24dp.png
new file mode 100644
index 000000000..df0518a68
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xhdpi/ic_chevron_left_grey_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/ic_chevron_right_grey_24dp.png b/OpenKeychain/src/main/res/drawable-xhdpi/ic_chevron_right_grey_24dp.png
new file mode 100644
index 000000000..7b82b8a57
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xhdpi/ic_chevron_right_grey_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/ic_close_black_24dp.png b/OpenKeychain/src/main/res/drawable-xhdpi/ic_close_black_24dp.png
new file mode 100644
index 000000000..ed2b2525f
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xhdpi/ic_close_black_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/ic_comment_text_grey600_24dp.png b/OpenKeychain/src/main/res/drawable-xhdpi/ic_comment_text_grey600_24dp.png
new file mode 100644
index 000000000..0e14a9500
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xhdpi/ic_comment_text_grey600_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/ic_person_grey_48dp.png b/OpenKeychain/src/main/res/drawable-xhdpi/ic_person_grey_48dp.png
new file mode 100644
index 000000000..e664e94ac
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xhdpi/ic_person_grey_48dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_copy_24dp.png b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_copy_24dp.png
new file mode 100644
index 000000000..cf184c78d
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_copy_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_save_24dp.png b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_save_24dp.png
new file mode 100644
index 000000000..5620e2595
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_save_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_share_24dp.png b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_share_24dp.png
new file mode 100644
index 000000000..b364c7603
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_encrypt_share_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/ic_chevron_left_grey_24dp.png b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_chevron_left_grey_24dp.png
new file mode 100644
index 000000000..10643ae3f
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_chevron_left_grey_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/ic_chevron_right_grey_24dp.png b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_chevron_right_grey_24dp.png
new file mode 100644
index 000000000..360d3c5ec
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_chevron_right_grey_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/ic_close_black_24dp.png b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_close_black_24dp.png
new file mode 100644
index 000000000..08f59ea1e
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_close_black_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/ic_comment_text_grey600_24dp.png b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_comment_text_grey600_24dp.png
new file mode 100644
index 000000000..de5de6042
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_comment_text_grey600_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/ic_person_grey_48dp.png b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_person_grey_48dp.png
new file mode 100644
index 000000000..5f00cf8a2
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xxhdpi/ic_person_grey_48dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_copy_24dp.png b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_copy_24dp.png
new file mode 100644
index 000000000..c3078ee92
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_copy_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_save_24dp.png b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_save_24dp.png
new file mode 100644
index 000000000..4146f9262
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_save_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_share_24dp.png b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_share_24dp.png
new file mode 100644
index 000000000..925cb2d9e
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_action_encrypt_share_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_chevron_left_grey_24dp.png b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_chevron_left_grey_24dp.png
new file mode 100644
index 000000000..a5fb05c28
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_chevron_left_grey_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_chevron_right_grey_24dp.png b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_chevron_right_grey_24dp.png
new file mode 100644
index 000000000..a71c5b3fc
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_chevron_right_grey_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_close_black_24dp.png b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_close_black_24dp.png
new file mode 100644
index 000000000..c5d79caff
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_close_black_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_comment_text_grey600_24dp.png b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_comment_text_grey600_24dp.png
new file mode 100644
index 000000000..9dae1a4a0
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_comment_text_grey600_24dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_person_grey_48dp.png b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_person_grey_48dp.png
new file mode 100644
index 000000000..001fe6607
--- /dev/null
+++ b/OpenKeychain/src/main/res/drawable-xxxhdpi/ic_person_grey_48dp.png
Binary files differ
diff --git a/OpenKeychain/src/main/res/layout/add_user_id_dialog.xml b/OpenKeychain/src/main/res/layout/add_user_id_dialog.xml
index c1b97b02c..ffb7493f6 100644
--- a/OpenKeychain/src/main/res/layout/add_user_id_dialog.xml
+++ b/OpenKeychain/src/main/res/layout/add_user_id_dialog.xml
@@ -16,7 +16,7 @@
android:imeOptions="actionNext"
android:textAppearance="?android:attr/textAppearanceMedium" />
- <org.sufficientlysecure.keychain.ui.widget.AutoCorrectAutoCompleteTextView
+ <org.sufficientlysecure.keychain.ui.widget.NameEditText
android:id="@+id/add_user_id_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
diff --git a/OpenKeychain/src/main/res/layout/api_app_settings_activity.xml b/OpenKeychain/src/main/res/layout/api_app_settings_activity.xml
index 6df5c84f5..c3f6e33cb 100644
--- a/OpenKeychain/src/main/res/layout/api_app_settings_activity.xml
+++ b/OpenKeychain/src/main/res/layout/api_app_settings_activity.xml
@@ -78,27 +78,27 @@
android:orientation="vertical">
<TextView
+ android:id="@+id/api_accounts_label"
style="@style/SectionHeader"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:text="@string/api_settings_allowed_keys" />
+ android:visibility="gone"
+ android:text="@string/api_settings_accounts" />
<FrameLayout
- android:id="@+id/api_allowed_keys_list_fragment"
+ android:id="@+id/api_accounts_list_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" />
<TextView
- android:id="@+id/api_accounts_label"
style="@style/SectionHeader"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:visibility="gone"
- android:text="@string/api_settings_accounts" />
+ android:text="@string/api_settings_allowed_keys" />
<FrameLayout
- android:id="@+id/api_accounts_list_fragment"
+ android:id="@+id/api_allowed_keys_list_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" />
diff --git a/OpenKeychain/src/main/res/layout/api_app_settings_fragment.xml b/OpenKeychain/src/main/res/layout/api_app_settings_fragment.xml
index ed3e33aab..1ea0a520d 100644
--- a/OpenKeychain/src/main/res/layout/api_app_settings_fragment.xml
+++ b/OpenKeychain/src/main/res/layout/api_app_settings_fragment.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto"
- android:background="?attr/colorPrimaryDark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
@@ -29,14 +28,12 @@
android:gravity="center_vertical"
android:orientation="vertical"
android:text="Name (set in-code)"
- android:textColor="@color/icons"
android:textAppearance="?android:attr/textAppearanceMedium" />
</RelativeLayout>
<org.sufficientlysecure.keychain.ui.widget.FoldableLinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:textColor="@color/icons"
custom:foldedLabel="@string/api_settings_show_info"
custom:unFoldedLabel="@string/api_settings_hide_info">
@@ -44,7 +41,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/api_settings_package_name"
- android:textColor="@color/icons"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
@@ -52,14 +48,12 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="com.example"
- android:textColor="@color/icons"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/api_settings_package_signature"
- android:textColor="@color/icons"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
@@ -67,7 +61,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Base64 encoded hash of signature"
- android:textColor="@color/icons"
android:textAppearance="?android:attr/textAppearanceSmall" />
</org.sufficientlysecure.keychain.ui.widget.FoldableLinearLayout>
diff --git a/OpenKeychain/src/main/res/layout/create_key_email_fragment.xml b/OpenKeychain/src/main/res/layout/create_key_email_fragment.xml
new file mode 100644
index 000000000..a24d1a2ee
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout/create_key_email_fragment.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <ScrollView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fillViewport="true"
+ android:layout_above="@+id/create_key_buttons">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp"
+ android:orientation="vertical">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:layout_marginLeft="8dp"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:text="@string/create_key_email_text" />
+
+ <org.sufficientlysecure.keychain.ui.widget.EmailEditText
+ android:id="@+id/create_key_email"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:layout_marginBottom="8dp"
+ android:imeOptions="actionNext"
+ android:hint="@string/label_email"
+ android:ems="10" />
+
+ </LinearLayout>
+ </ScrollView>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
+ android:background="@color/holo_gray_bright"
+ android:id="@+id/create_key_buttons">
+
+ <TextView
+ android:id="@+id/create_key_back_button"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:text="@string/btn_back"
+ android:textAllCaps="true"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:drawableLeft="@drawable/ic_chevron_left_grey_24dp"
+ android:drawablePadding="8dp"
+ android:gravity="left|center_vertical"
+ android:clickable="true"
+ style="?android:attr/borderlessButtonStyle" />
+
+ <TextView
+ android:id="@+id/create_key_next_button"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:text="@string/btn_next"
+ android:textAllCaps="true"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:drawableRight="@drawable/ic_chevron_right_grey_24dp"
+ android:drawablePadding="8dp"
+ android:gravity="right|center_vertical"
+ android:clickable="true"
+ style="?android:attr/borderlessButtonStyle" />
+ </LinearLayout>
+</RelativeLayout> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/create_key_final_fragment.xml b/OpenKeychain/src/main/res/layout/create_key_final_fragment.xml
index 84625d1fd..830f039f7 100644
--- a/OpenKeychain/src/main/res/layout/create_key_final_fragment.xml
+++ b/OpenKeychain/src/main/res/layout/create_key_final_fragment.xml
@@ -6,7 +6,7 @@
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_above="@+id/create_key_buttons_divider">
+ android:layout_above="@+id/create_key_buttons">
<LinearLayout
android:layout_width="match_parent"
@@ -144,58 +144,42 @@
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
- android:layout_marginLeft="16dp"
- android:layout_marginRight="16dp"
+ android:background="@color/holo_gray_bright"
android:id="@+id/create_key_buttons">
<TextView
android:id="@+id/create_key_back_button"
- android:paddingLeft="8dp"
- android:paddingRight="8dp"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/btn_back"
+ android:textAllCaps="true"
android:minHeight="?android:attr/listPreferredItemHeight"
- android:gravity="center_vertical"
+ android:drawableLeft="@drawable/ic_chevron_left_grey_24dp"
+ android:drawablePadding="8dp"
+ android:gravity="left|center_vertical"
android:clickable="true"
- style="?android:attr/borderlessButtonStyle"
- android:layout_gravity="center_vertical" />
-
- <View
- android:layout_width="1dp"
- android:layout_height="match_parent"
- android:layout_marginTop="8dp"
- android:layout_marginBottom="8dp"
- android:background="?android:attr/listDivider" />
+ style="?android:attr/borderlessButtonStyle" />
<TextView
- android:id="@+id/create_key_create_button"
- android:paddingLeft="8dp"
- android:paddingRight="8dp"
+ android:id="@+id/create_key_next_button"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/btn_create_key"
+ android:textAllCaps="true"
android:minHeight="?android:attr/listPreferredItemHeight"
android:drawableRight="@drawable/ic_key_plus_grey600_24dp"
android:drawablePadding="8dp"
- android:gravity="center_vertical"
+ android:gravity="right|center_vertical"
android:clickable="true"
- style="?android:attr/borderlessButtonStyle"
- android:layout_gravity="center_vertical" />
+ style="?android:attr/borderlessButtonStyle" />
</LinearLayout>
- <View
- android:id="@+id/create_key_buttons_divider"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:background="?android:attr/listDivider"
- android:layout_alignTop="@+id/create_key_buttons"
- android:layout_marginLeft="16dp"
- android:layout_marginRight="16dp"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true" />
</RelativeLayout> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml b/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml
deleted file mode 100644
index b320885d0..000000000
--- a/OpenKeychain/src/main/res/layout/create_key_input_fragment.xml
+++ /dev/null
@@ -1,161 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:custom="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <ScrollView
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:fillViewport="true"
- android:layout_above="@+id/create_key_button_divider">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="16dp"
- android:paddingRight="16dp"
- android:orientation="vertical">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="16dp"
- android:layout_marginLeft="8dp"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:text="@string/create_key_text" />
-
- <TextView
- style="@style/SectionHeader"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dp"
- android:text="@string/label_user_id" />
-
- <org.sufficientlysecure.keychain.ui.widget.AutoCorrectAutoCompleteTextView
- android:id="@+id/create_key_name"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dp"
- android:layout_marginBottom="8dp"
- android:imeOptions="actionNext"
- android:inputType="textAutoCorrect|textPersonName|textCapWords"
- android:hint="@string/create_key_hint_full_name"
- android:ems="10" />
-
- <org.sufficientlysecure.keychain.ui.widget.EmailEditText
- android:id="@+id/create_key_email"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="8dp"
- android:imeOptions="actionNext"
- android:hint="@string/label_email"
- android:ems="10" />
-
- <TextView
- style="@style/SectionHeader"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/label_passphrase" />
-
- <FrameLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dp"
- android:layout_marginBottom="8dp">
-
- <org.sufficientlysecure.keychain.ui.widget.PasswordEditText
- android:id="@+id/create_key_passphrase"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:imeOptions="actionNext"
- android:hint="@string/label_passphrase"
- android:ems="10"
- android:layout_gravity="center_horizontal" />
-
- <org.sufficientlysecure.keychain.ui.widget.passwordstrengthindicator.PasswordStrengthBarView
- android:id="@+id/create_key_passphrase_strength"
- android:layout_width="48dp"
- android:layout_height="8dp"
- android:layout_gravity="end|center_vertical"
- custom:strength="medium"
- custom:showGuides="false"
- custom:color_fail="@color/android_red_light"
- custom:color_weak="@color/android_orange_light"
- custom:color_strong="@color/android_green_light" />
-
- </FrameLayout>
-
- <EditText
- android:id="@+id/create_key_passphrase_again"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="8dp"
- android:inputType="textPassword"
- android:hint="@string/label_passphrase_again"
- android:ems="10"
- android:layout_gravity="center_horizontal" />
-
- </LinearLayout>
- </ScrollView>
-
- <View
- android:id="@+id/create_key_button_divider"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_marginLeft="16dp"
- android:layout_marginRight="16dp"
- android:background="?android:attr/listDivider"
- android:layout_alignTop="@+id/create_key_buttons"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:layout_alignParentBottom="true"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"
- android:layout_marginLeft="16dp"
- android:layout_marginRight="16dp"
- android:id="@+id/create_key_buttons">
-
- <TextView
- android:id="@+id/create_key_back_button"
- android:paddingLeft="8dp"
- android:paddingRight="8dp"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text=""
- android:minHeight="?android:attr/listPreferredItemHeight"
- android:gravity="center_vertical"
- android:layout_gravity="center_vertical" />
-
- <View
- android:layout_width="1dp"
- android:layout_height="match_parent"
- android:layout_marginTop="8dp"
- android:layout_marginBottom="8dp"
- android:background="?android:attr/listDivider" />
-
- <TextView
- android:id="@+id/create_key_button"
- android:paddingLeft="8dp"
- android:paddingRight="8dp"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="@string/btn_next"
- android:minHeight="?android:attr/listPreferredItemHeight"
- android:drawableRight="@drawable/ic_play_arrow_grey_24dp"
- android:drawablePadding="8dp"
- android:gravity="center_vertical"
- android:clickable="true"
- style="?android:attr/borderlessButtonStyle"
- android:layout_gravity="center_vertical" />
- </LinearLayout>
-</RelativeLayout> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/create_key_name_fragment.xml b/OpenKeychain/src/main/res/layout/create_key_name_fragment.xml
new file mode 100644
index 000000000..ea064b00c
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout/create_key_name_fragment.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <ScrollView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fillViewport="true"
+ android:layout_above="@+id/create_key_buttons">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp"
+ android:orientation="vertical">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:layout_marginLeft="8dp"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:text="@string/create_key_name_text" />
+
+ <org.sufficientlysecure.keychain.ui.widget.NameEditText
+ android:id="@+id/create_key_name"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:layout_marginBottom="8dp"
+ android:imeOptions="actionNext"
+ android:inputType="textAutoCorrect|textPersonName|textCapWords"
+ android:hint="@string/create_key_hint_full_name"
+ android:ems="10" />
+
+ </LinearLayout>
+ </ScrollView>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
+ android:background="@color/holo_gray_bright"
+ android:id="@+id/create_key_buttons">
+
+ <TextView
+ android:id="@+id/create_key_back_button"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:textAllCaps="true"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:drawablePadding="8dp"
+ android:gravity="left|center_vertical"
+ android:clickable="false"
+ style="?android:attr/borderlessButtonStyle" />
+
+ <TextView
+ android:id="@+id/create_key_next_button"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:text="@string/btn_next"
+ android:textAllCaps="true"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:drawableRight="@drawable/ic_chevron_right_grey_24dp"
+ android:drawablePadding="8dp"
+ android:gravity="right|center_vertical"
+ android:clickable="true"
+ style="?android:attr/borderlessButtonStyle" />
+ </LinearLayout>
+</RelativeLayout> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/create_key_passphrase_fragment.xml b/OpenKeychain/src/main/res/layout/create_key_passphrase_fragment.xml
new file mode 100644
index 000000000..48b86765a
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout/create_key_passphrase_fragment.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <ScrollView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fillViewport="true"
+ android:layout_above="@+id/create_key_buttons">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp"
+ android:orientation="vertical">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:layout_marginLeft="8dp"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:text="@string/create_key_passphrase_text" />
+
+ <org.sufficientlysecure.keychain.ui.widget.PassphraseEditText
+ android:id="@+id/create_key_passphrase"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dp"
+ android:layout_marginBottom="8dp"
+ android:imeOptions="actionNext"
+ android:inputType="textPassword"
+ android:hint="@string/label_passphrase"
+ android:ems="10"
+ android:layout_gravity="center_horizontal" />
+
+ <EditText
+ android:id="@+id/create_key_passphrase_again"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="8dp"
+ android:inputType="textPassword"
+ android:hint="@string/label_passphrase_again"
+ android:ems="10"
+ android:layout_gravity="center_horizontal" />
+
+ <CheckBox
+ android:id="@+id/create_key_show_passphrase"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="8dp"
+ android:text="@string/label_show_passphrase" />
+
+ </LinearLayout>
+ </ScrollView>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
+ android:background="@color/holo_gray_bright"
+ android:id="@+id/create_key_buttons">
+
+ <TextView
+ android:id="@+id/create_key_back_button"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:text="@string/btn_back"
+ android:textAllCaps="true"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:drawableLeft="@drawable/ic_chevron_left_grey_24dp"
+ android:drawablePadding="8dp"
+ android:gravity="left|center_vertical"
+ android:clickable="true"
+ style="?android:attr/borderlessButtonStyle" />
+
+ <TextView
+ android:id="@+id/create_key_next_button"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:text="@string/btn_next"
+ android:textAllCaps="true"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:drawableRight="@drawable/ic_chevron_right_grey_24dp"
+ android:drawablePadding="8dp"
+ android:gravity="right|center_vertical"
+ android:clickable="true"
+ style="?android:attr/borderlessButtonStyle" />
+ </LinearLayout>
+</RelativeLayout> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/decrypt_files_activity.xml b/OpenKeychain/src/main/res/layout/decrypt_files_activity.xml
index 3cf4a9e7b..3d214dbf6 100644
--- a/OpenKeychain/src/main/res/layout/decrypt_files_activity.xml
+++ b/OpenKeychain/src/main/res/layout/decrypt_files_activity.xml
@@ -5,7 +5,7 @@
<include
android:id="@+id/toolbar_include"
- layout="@layout/toolbar_standalone" />
+ layout="@layout/toolbar_standalone_white" />
<!--
fitsSystemWindows and layout_marginTop from
diff --git a/OpenKeychain/src/main/res/layout/decrypt_text_activity.xml b/OpenKeychain/src/main/res/layout/decrypt_text_activity.xml
index da4aa7099..a6099e25e 100644
--- a/OpenKeychain/src/main/res/layout/decrypt_text_activity.xml
+++ b/OpenKeychain/src/main/res/layout/decrypt_text_activity.xml
@@ -5,7 +5,7 @@
<include
android:id="@+id/toolbar_include"
- layout="@layout/toolbar_standalone" />
+ layout="@layout/toolbar_standalone_white" />
<!--
fitsSystemWindows and layout_marginTop from
diff --git a/OpenKeychain/src/main/res/layout/encrypt_decrypt_overview_fragment.xml b/OpenKeychain/src/main/res/layout/encrypt_decrypt_overview_fragment.xml
index 3ef8e3551..bd640d9af 100644
--- a/OpenKeychain/src/main/res/layout/encrypt_decrypt_overview_fragment.xml
+++ b/OpenKeychain/src/main/res/layout/encrypt_decrypt_overview_fragment.xml
@@ -45,7 +45,7 @@
android:clickable="true"
style="?android:attr/borderlessButtonStyle"
android:text="@string/btn_encrypt_text"
- android:drawableRight="@drawable/ic_content_copy_grey_24dp"
+ android:drawableRight="@drawable/ic_comment_text_grey600_24dp"
android:drawablePadding="8dp"
android:gravity="center_vertical" />
diff --git a/OpenKeychain/src/main/res/layout/encrypt_files_activity.xml b/OpenKeychain/src/main/res/layout/encrypt_files_activity.xml
index f9efd81b4..ce8b1302c 100644
--- a/OpenKeychain/src/main/res/layout/encrypt_files_activity.xml
+++ b/OpenKeychain/src/main/res/layout/encrypt_files_activity.xml
@@ -5,7 +5,7 @@
<include
android:id="@+id/toolbar_include"
- layout="@layout/toolbar_standalone" />
+ layout="@layout/toolbar_standalone_white" />
<!--
fitsSystemWindows and layout_marginTop from
diff --git a/OpenKeychain/src/main/res/layout/encrypt_files_fragment.xml b/OpenKeychain/src/main/res/layout/encrypt_files_fragment.xml
index 26b1d809d..029e735b3 100644
--- a/OpenKeychain/src/main/res/layout/encrypt_files_fragment.xml
+++ b/OpenKeychain/src/main/res/layout/encrypt_files_fragment.xml
@@ -1,72 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:fillViewport="true">
-
- <LinearLayout
+ android:layout_height="wrap_content"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp"
+ android:orientation="vertical">
+
+ <ListView
+ android:id="@+id/selected_files_list"
+ android:dividerHeight="4dip"
+ android:divider="@android:color/transparent"
+ android:focusable="true"
+ android:focusableInTouchMode="true"
+ android:layout_marginTop="8dp"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="16dp"
- android:paddingRight="16dp"
- android:orientation="vertical">
-
- <ListView
- android:id="@+id/selected_files_list"
- android:dividerHeight="4dip"
- android:divider="@android:color/transparent"
- android:focusable="true"
- android:focusableInTouchMode="true"
- android:layout_marginTop="8dp"
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_weight="1" />
-
- <View
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:background="?android:attr/listDivider" />
-
- <!-- Note: The following construct should be a widget, we use it quiet often -->
-
- <LinearLayout
- android:id="@+id/action_encrypt_share"
- android:paddingLeft="8dp"
- android:layout_width="match_parent"
- android:layout_height="?android:attr/listPreferredItemHeight"
- android:clickable="true"
- style="@style/SelectableItem"
- android:orientation="horizontal">
-
- <TextView
- android:paddingLeft="8dp"
- android:paddingRight="8dp"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_width="0dip"
- android:layout_height="match_parent"
- android:text="@string/btn_encrypt_share_file"
- android:layout_weight="1"
- android:drawableRight="@drawable/ic_share_grey_24dp"
- android:drawablePadding="8dp"
- android:gravity="center_vertical" />
-
- <View
- android:layout_width="1dip"
- android:layout_height="match_parent"
- android:gravity="right"
- android:layout_marginBottom="8dp"
- android:layout_marginTop="8dp"
- android:background="?android:attr/listDivider" />
-
- <ImageButton
- android:id="@+id/action_encrypt_file"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:padding="8dp"
- android:src="@drawable/ic_save_grey_24dp"
- android:layout_gravity="center_vertical"
- style="@style/SelectableItem" />
+ android:layout_height="match_parent" />
- </LinearLayout>
- </LinearLayout>
-</ScrollView> \ No newline at end of file
+</LinearLayout> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/encrypt_text_activity.xml b/OpenKeychain/src/main/res/layout/encrypt_text_activity.xml
index 67f17fa81..809e64f02 100644
--- a/OpenKeychain/src/main/res/layout/encrypt_text_activity.xml
+++ b/OpenKeychain/src/main/res/layout/encrypt_text_activity.xml
@@ -5,7 +5,7 @@
<include
android:id="@+id/toolbar_include"
- layout="@layout/toolbar_standalone" />
+ layout="@layout/toolbar_standalone_white" />
<!--
fitsSystemWindows and layout_marginTop from
diff --git a/OpenKeychain/src/main/res/layout/encrypt_text_fragment.xml b/OpenKeychain/src/main/res/layout/encrypt_text_fragment.xml
index 6f7b636e1..3c21291cd 100644
--- a/OpenKeychain/src/main/res/layout/encrypt_text_fragment.xml
+++ b/OpenKeychain/src/main/res/layout/encrypt_text_fragment.xml
@@ -21,50 +21,5 @@
android:hint="@string/encrypt_content_edit_text_hint"
android:layout_weight="1" />
- <View
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:background="?android:attr/listDivider" />
-
- <LinearLayout
- android:id="@+id/action_encrypt_share"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:clickable="true"
- style="@style/SelectableItem"
- android:orientation="horizontal">
-
- <TextView
- android:paddingLeft="8dp"
- android:paddingRight="8dp"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:minHeight="?android:attr/listPreferredItemHeight"
- android:text="@string/btn_share_encrypted_signed"
- android:drawableRight="@drawable/ic_share_grey_24dp"
- android:drawablePadding="8dp"
- android:gravity="center_vertical"
- android:layout_weight="1" />
-
- <View
- android:layout_width="1dip"
- android:layout_height="match_parent"
- android:gravity="right"
- android:layout_marginBottom="8dp"
- android:layout_marginTop="8dp"
- android:background="?android:attr/listDivider" />
-
- <ImageButton
- android:id="@+id/action_encrypt_clipboard"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:padding="8dp"
- android:src="@drawable/ic_content_copy_grey_24dp"
- android:layout_gravity="center_vertical"
- style="@style/SelectableItem" />
-
- </LinearLayout>
-
</LinearLayout>
</ScrollView>
diff --git a/OpenKeychain/src/main/res/layout/file_list_entry_add.xml b/OpenKeychain/src/main/res/layout/file_list_entry_add.xml
index f2ee4079e..d7f4513d9 100644
--- a/OpenKeychain/src/main/res/layout/file_list_entry_add.xml
+++ b/OpenKeychain/src/main/res/layout/file_list_entry_add.xml
@@ -1,21 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:padding="4dp"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:clickable="true"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ style="?android:attr/borderlessButtonStyle">
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:padding="4dp"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:clickable="true"
- style="@style/SelectableItem">
<TextView
- android:paddingLeft="8dp"
- android:paddingRight="8dp"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_gravity="center"
- android:text="@string/btn_add_files"
- android:drawableLeft="@drawable/ic_folder_grey_24dp"
- android:drawablePadding="8dp"
- android:gravity="center"/>
+ android:paddingLeft="8dp"
+ android:paddingRight="8dp"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_gravity="center"
+ android:text="@string/btn_add_files"
+ android:drawableLeft="@drawable/ic_folder_grey_24dp"
+ android:drawablePadding="8dp"
+ android:gravity="center" />
</FrameLayout> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/help_activity.xml b/OpenKeychain/src/main/res/layout/help_activity.xml
index 1722f03ea..0b309a8b1 100644
--- a/OpenKeychain/src/main/res/layout/help_activity.xml
+++ b/OpenKeychain/src/main/res/layout/help_activity.xml
@@ -1,33 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="match_parent"
+ android:orientation="vertical">
<include
- android:id="@+id/toolbar_include"
- layout="@layout/toolbar_standalone" />
+ android:id="@+id/toolbar_tabs"
+ layout="@layout/toolbar_tabs" />
- <LinearLayout
- android:layout_below="@id/toolbar_include"
+ <android.support.v4.view.ViewPager
+ android:id="@+id/pager"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:elevation="4dp">
+ android:layout_height="match_parent" />
- <com.astuetz.PagerSlidingTabStrip
- android:id="@+id/sliding_tab_layout"
- android:layout_width="match_parent"
- android:layout_height="?attr/actionBarSize"
- android:background="?attr/colorPrimary"
- android:textColor="@color/tab_text"
- app:pstsTextColorSelected="@color/tab_text_selected"
- app:pstsIndicatorColor="@color/tab_indicator" />
-
- <android.support.v4.view.ViewPager
- android:id="@+id/pager"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
-
- </LinearLayout>
-</RelativeLayout> \ No newline at end of file
+</LinearLayout> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/passphrase_repeat_dialog.xml b/OpenKeychain/src/main/res/layout/passphrase_repeat_dialog.xml
index 11355bbc0..5f323716c 100644
--- a/OpenKeychain/src/main/res/layout/passphrase_repeat_dialog.xml
+++ b/OpenKeychain/src/main/res/layout/passphrase_repeat_dialog.xml
@@ -21,7 +21,7 @@
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp">
- <org.sufficientlysecure.keychain.ui.widget.PasswordEditText
+ <org.sufficientlysecure.keychain.ui.widget.PassphraseEditText
android:id="@+id/passphrase_passphrase"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -29,6 +29,7 @@
android:layout_marginBottom="8dp"
android:imeOptions="actionNext"
android:hint="@string/label_passphrase"
+ android:inputType="textPassword"
android:ems="10"
android:layout_gravity="center_horizontal" />
diff --git a/OpenKeychain/src/main/res/layout/toolbar_inner_layout.xml b/OpenKeychain/src/main/res/layout/toolbar_inner_layout.xml
new file mode 100644
index 000000000..047225394
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout/toolbar_inner_layout.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools">
+
+ <!--
+ We always have windowTranslucentStatus=true to get under the status bar.
+ Thus this ImageView is the part under the status bar!
+ -->
+ <ImageView
+ android:id="@+id/status_bar"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/statusbar_height"
+ android:background="@color/transparent" />
+
+ <android.support.v7.widget.Toolbar
+ android:id="@+id/toolbar"
+ android:layout_below="@+id/status_bar"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?attr/actionBarSize"
+ android:background="@color/transparent"
+ app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
+ app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
+ tools:ignore="UnusedAttribute" />
+</merge> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/toolbar_inner_layout_white.xml b/OpenKeychain/src/main/res/layout/toolbar_inner_layout_white.xml
new file mode 100644
index 000000000..a626efb09
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout/toolbar_inner_layout_white.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools">
+
+ <!--
+ We always have windowTranslucentStatus=true to get under the status bar.
+ Thus this ImageView is the part under the status bar!
+ -->
+ <ImageView
+ android:id="@+id/status_bar"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/statusbar_height"
+ android:background="@color/transparent" />
+
+ <android.support.v7.widget.Toolbar
+ android:id="@+id/toolbar"
+ android:layout_below="@+id/status_bar"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?attr/actionBarSize"
+ android:background="@color/transparent"
+ app:theme="@style/ThemeOverlay.AppCompat.ActionBar"
+ app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
+ tools:ignore="UnusedAttribute" />
+</merge> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/toolbar_standalone.xml b/OpenKeychain/src/main/res/layout/toolbar_standalone.xml
index 950c2f2ae..4ab94060c 100644
--- a/OpenKeychain/src/main/res/layout/toolbar_standalone.xml
+++ b/OpenKeychain/src/main/res/layout/toolbar_standalone.xml
@@ -1,31 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/toolbar_include"
android:elevation="4dp"
+ android:background="?attr/colorPrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content">
- <!--
- We always have windowTranslucentStatus=true to get under the status bar.
- Thus this ImageView is the part under the status bar!
- -->
- <ImageView
- android:id="@+id/status_bar"
- android:layout_width="match_parent"
- android:layout_height="@dimen/statusbar_height"
- android:background="?attr/colorPrimary" />
-
- <android.support.v7.widget.Toolbar
- android:id="@+id/toolbar"
- android:layout_below="@+id/status_bar"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:minHeight="?attr/actionBarSize"
- android:background="?attr/colorPrimary"
- app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
- app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
- tools:ignore="UnusedAttribute" />
+ <include
+ android:id="@+id/toolbar_inner_layout"
+ layout="@layout/toolbar_inner_layout" />
</RelativeLayout>
diff --git a/OpenKeychain/src/main/res/layout/toolbar_standalone_orange.xml b/OpenKeychain/src/main/res/layout/toolbar_standalone_orange.xml
index 0336b51fd..b8c190a36 100644
--- a/OpenKeychain/src/main/res/layout/toolbar_standalone_orange.xml
+++ b/OpenKeychain/src/main/res/layout/toolbar_standalone_orange.xml
@@ -1,31 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/toolbar_include"
android:elevation="4dp"
+ android:background="@color/android_orange_light"
android:layout_width="match_parent"
android:layout_height="wrap_content">
- <!--
- We always have windowTranslucentStatus=true to get under the status bar.
- Thus this ImageView is the part under the status bar!
- -->
- <ImageView
- android:id="@+id/status_bar"
- android:layout_width="match_parent"
- android:layout_height="@dimen/statusbar_height"
- android:background="@color/android_orange_light" />
-
- <android.support.v7.widget.Toolbar
- android:id="@+id/toolbar"
- android:layout_below="@+id/status_bar"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:minHeight="?attr/actionBarSize"
- android:background="@color/android_orange_light"
- app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
- app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
- tools:ignore="UnusedAttribute" />
+ <include
+ android:id="@+id/toolbar_inner_layout"
+ layout="@layout/toolbar_inner_layout" />
</RelativeLayout>
diff --git a/OpenKeychain/src/main/res/layout/toolbar_standalone_white.xml b/OpenKeychain/src/main/res/layout/toolbar_standalone_white.xml
new file mode 100644
index 000000000..d4269c2ba
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout/toolbar_standalone_white.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/toolbar_include"
+ android:elevation="4dp"
+ android:background="@color/white"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <include
+ android:id="@+id/toolbar_inner_layout"
+ layout="@layout/toolbar_inner_layout_white" />
+
+</RelativeLayout>
diff --git a/OpenKeychain/src/main/res/layout/toolbar_tabs.xml b/OpenKeychain/src/main/res/layout/toolbar_tabs.xml
new file mode 100644
index 000000000..91efda682
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout/toolbar_tabs.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/toolbar_include"
+ android:elevation="4dp"
+ android:background="?attr/colorPrimary"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <include
+ android:id="@+id/toolbar_inner_layout"
+ layout="@layout/toolbar_inner_layout" />
+
+ <com.astuetz.PagerSlidingTabStrip
+ android:id="@+id/sliding_tab_layout"
+ android:layout_below="@id/toolbar"
+ android:layout_width="match_parent"
+ android:layout_height="?attr/actionBarSize"
+ android:background="?attr/colorPrimary"
+ android:textColor="@color/tab_text"
+ app:pstsTextColorSelected="@color/tab_text_selected"
+ app:pstsIndicatorColor="@color/tab_indicator" />
+
+</RelativeLayout>
diff --git a/OpenKeychain/src/main/res/layout/view_key_adv_activity.xml b/OpenKeychain/src/main/res/layout/view_key_adv_activity.xml
index 59888c25a..0b309a8b1 100644
--- a/OpenKeychain/src/main/res/layout/view_key_adv_activity.xml
+++ b/OpenKeychain/src/main/res/layout/view_key_adv_activity.xml
@@ -1,41 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="match_parent"
+ android:orientation="vertical">
<include
- android:id="@+id/toolbar_include"
- layout="@layout/toolbar_standalone" />
+ android:id="@+id/toolbar_tabs"
+ layout="@layout/toolbar_tabs" />
- <LinearLayout
- android:layout_below="@id/toolbar_include"
+ <android.support.v4.view.ViewPager
+ android:id="@+id/pager"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
+ android:layout_height="match_parent" />
- <View
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:background="?android:attr/listDivider"
- android:visibility="gone"
- android:id="@+id/view_key_status_divider" />
-
- <com.astuetz.PagerSlidingTabStrip
- android:id="@+id/view_key_sliding_tab_layout"
- android:layout_width="match_parent"
- android:layout_height="?attr/actionBarSize"
- android:background="?attr/colorPrimary"
- android:textColor="@color/tab_text"
- app:pstsTextColorSelected="@color/tab_text_selected"
- app:pstsIndicatorColor="@color/tab_indicator" />
-
- <android.support.v4.view.ViewPager
- android:id="@+id/view_key_pager"
- android:layout_width="match_parent"
- android:layout_height="0px"
- android:layout_weight="1"
- android:background="@android:color/white" />
-
- </LinearLayout>
-</RelativeLayout> \ No newline at end of file
+</LinearLayout> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/menu/encrypt_file_activity.xml b/OpenKeychain/src/main/res/menu/encrypt_file_activity.xml
index 9a26d1757..f4aeb76c9 100644
--- a/OpenKeychain/src/main/res/menu/encrypt_file_activity.xml
+++ b/OpenKeychain/src/main/res/menu/encrypt_file_activity.xml
@@ -1,5 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+
+ <item
+ android:id="@+id/encrypt_save"
+ android:title="@string/btn_encrypt_save_file"
+ android:icon="@drawable/ic_action_encrypt_save_24dp"
+ app:showAsAction="always" />
+
+ <item
+ android:id="@+id/encrypt_share"
+ android:title="@string/btn_encrypt_share_file"
+ android:icon="@drawable/ic_action_encrypt_share_24dp"
+ app:showAsAction="always" />
+
<item
android:id="@+id/check_use_symmetric"
android:title="@string/label_symmetric"
diff --git a/OpenKeychain/src/main/res/menu/encrypt_text_activity.xml b/OpenKeychain/src/main/res/menu/encrypt_text_activity.xml
index 71d254bb9..bb9f4058a 100644
--- a/OpenKeychain/src/main/res/menu/encrypt_text_activity.xml
+++ b/OpenKeychain/src/main/res/menu/encrypt_text_activity.xml
@@ -1,5 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+
+ <item
+ android:id="@+id/encrypt_copy"
+ android:title="@string/btn_copy_encrypted_signed"
+ android:icon="@drawable/ic_action_encrypt_copy_24dp"
+ app:showAsAction="always" />
+
+ <item
+ android:id="@+id/encrypt_share"
+ android:title="@string/btn_share_encrypted_signed"
+ android:icon="@drawable/ic_action_encrypt_share_24dp"
+ app:showAsAction="always" />
+
<item
android:id="@+id/check_use_symmetric"
android:title="@string/label_symmetric"
diff --git a/OpenKeychain/src/main/res/values-cs/strings.xml b/OpenKeychain/src/main/res/values-cs/strings.xml
index 903cc50f3..ce4f1cdcf 100644
--- a/OpenKeychain/src/main/res/values-cs/strings.xml
+++ b/OpenKeychain/src/main/res/values-cs/strings.xml
@@ -464,7 +464,7 @@
<string name="create_key_final_robot_text">Vytvoření klíče může chvíli trvat, mezitím si dejte třeba šálek dobré kávy...</string>
<string name="create_key_rsa">(3 podklíče, RSA, 4096 bit)</string>
<string name="create_key_custom">(uživatelská konfigurace klíče)</string>
- <string name="create_key_text">Zadejte své celé jméno, emailovou adresu a zvolte heslo.</string>
+ <string name="create_key_identity_text">Zadejte své celé jméno, emailovou adresu a zvolte heslo.</string>
<string name="create_key_hint_full_name">Celé jméno, např. Jan Novák</string>
<string name="create_key_edit">Změnit konfiguraci klíče</string>
<!--View key-->
diff --git a/OpenKeychain/src/main/res/values-de/strings.xml b/OpenKeychain/src/main/res/values-de/strings.xml
index 63b0c4c09..245de82ec 100644
--- a/OpenKeychain/src/main/res/values-de/strings.xml
+++ b/OpenKeychain/src/main/res/values-de/strings.xml
@@ -528,7 +528,7 @@
<string name="create_key_final_robot_text">Einen Schlüssel zu erzeugen braucht eine Weile, trink in der Zeit einen Kaffee...</string>
<string name="create_key_rsa">(3 Unterschlüssel, RSA, 4096 Bit)</string>
<string name="create_key_custom">(Benutzerdefinierte Schlüsseleinstellung)</string>
- <string name="create_key_text">Vollen Namen und Emailadresse angeben und Passwort wählen.</string>
+ <string name="create_key_identity_text">Vollen Namen und Emailadresse angeben und Passwort wählen.</string>
<string name="create_key_hint_full_name">Vollständiger Name, z.B. Max Mustermann</string>
<string name="create_key_edit">Schlüsselkonfiguration ändern</string>
<!--View key-->
diff --git a/OpenKeychain/src/main/res/values-es/strings.xml b/OpenKeychain/src/main/res/values-es/strings.xml
index 0d7444c47..d5d8440af 100644
--- a/OpenKeychain/src/main/res/values-es/strings.xml
+++ b/OpenKeychain/src/main/res/values-es/strings.xml
@@ -575,7 +575,7 @@
<string name="create_key_final_robot_text">Crear una clave puede llevar un tiempo, tómese una taza de café entre tanto...</string>
<string name="create_key_rsa">(3 subclaves, RSA, 4096 bits)</string>
<string name="create_key_custom">(configuración de clave personalizada)</string>
- <string name="create_key_text">Introduzca su nombre completo, dirección de correo electrónico, y elija una frase contraseña.</string>
+ <string name="create_key_identity_text">Introduzca su nombre completo, dirección de correo electrónico, y elija una frase contraseña.</string>
<string name="create_key_hint_full_name">Nombre completo, ej. Max Mustermann</string>
<string name="create_key_edit">Cambiar configuración de clave</string>
<!--View key-->
diff --git a/OpenKeychain/src/main/res/values-fr/strings.xml b/OpenKeychain/src/main/res/values-fr/strings.xml
index 50bd53921..8cc1cc735 100644
--- a/OpenKeychain/src/main/res/values-fr/strings.xml
+++ b/OpenKeychain/src/main/res/values-fr/strings.xml
@@ -573,7 +573,7 @@
<string name="create_key_final_robot_text">Créer une clef peut prendre du temps, prenez donc un café en attendant...</string>
<string name="create_key_rsa">(3 sous-clefs, RSA, 4096 bits)</string>
<string name="create_key_custom">(configuration personnalisée de la clef)</string>
- <string name="create_key_text">Saisissez votre nom complet, votre adresse courriel et choisissez votre phrase de passe.</string>
+ <string name="create_key_identity_text">Saisissez votre nom complet, votre adresse courriel et choisissez votre phrase de passe.</string>
<string name="create_key_hint_full_name">Nom complet, p. ex. Marc-Olivier Lagacé</string>
<string name="create_key_edit">Changer la configuration de la clef</string>
<!--View key-->
diff --git a/OpenKeychain/src/main/res/values-it/strings.xml b/OpenKeychain/src/main/res/values-it/strings.xml
index d741f7111..f55d16dfc 100644
--- a/OpenKeychain/src/main/res/values-it/strings.xml
+++ b/OpenKeychain/src/main/res/values-it/strings.xml
@@ -482,7 +482,7 @@ Permetti accesso?\n\nATTENZIONE: Se non sai perche\' questo schermata e\' appars
<string name="create_key_final_robot_text">La creazione di una chiave richiede un po\' di tempo, prendi un caffè nel frattempo...</string>
<string name="create_key_rsa">(3 sottochiavi, RSA, 4096 bit)</string>
<string name="create_key_custom">(personalizza la configurazione della chiave)</string>
- <string name="create_key_text">Inserisci Nome Completo, Email e scegli una Frase di Accesso.</string>
+ <string name="create_key_identity_text">Inserisci Nome Completo, Email e scegli una Frase di Accesso.</string>
<string name="create_key_hint_full_name">Nome completo, es: Mario Rossi</string>
<string name="create_key_edit">Cambia configurazione della chiave</string>
<!--View key-->
diff --git a/OpenKeychain/src/main/res/values-ja/strings.xml b/OpenKeychain/src/main/res/values-ja/strings.xml
index c5318db36..ef817f398 100644
--- a/OpenKeychain/src/main/res/values-ja/strings.xml
+++ b/OpenKeychain/src/main/res/values-ja/strings.xml
@@ -532,7 +532,7 @@
<string name="create_key_final_robot_text">しばらくの間鍵を生成しています、その間はコーヒーでもどうぞ....</string>
<string name="create_key_rsa">(3副鍵、RSA, 4096 bit)</string>
<string name="create_key_custom">(個別の鍵設定)</string>
- <string name="create_key_text">フルネーム、Eメールアドレスを入力そしてパスフレーズを選択してください。</string>
+ <string name="create_key_identity_text">フルネーム、Eメールアドレスを入力そしてパスフレーズを選択してください。</string>
<string name="create_key_hint_full_name">フルネーム、例えば Max Mustermann</string>
<string name="create_key_edit">鍵の設定変更</string>
<!--View key-->
diff --git a/OpenKeychain/src/main/res/values-nl/strings.xml b/OpenKeychain/src/main/res/values-nl/strings.xml
index 34b8f1627..f8ee75750 100644
--- a/OpenKeychain/src/main/res/values-nl/strings.xml
+++ b/OpenKeychain/src/main/res/values-nl/strings.xml
@@ -575,7 +575,7 @@
<string name="create_key_final_robot_text">Een sleutel aanmaken kan even duren, maak intussen een tasje thee klaar…</string>
<string name="create_key_rsa">(3 subsleutels, RSA, 4096 bit)</string>
<string name="create_key_custom">(aangepaste sleutelconfiguratie)</string>
- <string name="create_key_text">Voer je volledige naam en e-mailadres in, en kies een wachtwoord.</string>
+ <string name="create_key_identity_text">Voer je volledige naam en e-mailadres in, en kies een wachtwoord.</string>
<string name="create_key_hint_full_name">Volledige naam, bv. Max Mustermann</string>
<string name="create_key_edit">Sleutelconfiguratie wijzigen</string>
<!--View key-->
diff --git a/OpenKeychain/src/main/res/values-pl/strings.xml b/OpenKeychain/src/main/res/values-pl/strings.xml
index 3dc6a2a35..46dd8c313 100644
--- a/OpenKeychain/src/main/res/values-pl/strings.xml
+++ b/OpenKeychain/src/main/res/values-pl/strings.xml
@@ -540,7 +540,7 @@ OSTRZEŻENIE: Jeżeli nie wiesz, czemu wyświetlił się ten komunikat, nie zezw
<string name="create_key_final_robot_text">Tworzenie klucza może zająć trochę czasu... w międzyczasie idź się napij kawy.</string>
<string name="create_key_rsa">(3 pod-klucze, RSA, 4096 bit)</string>
<string name="create_key_custom">(niestandardowa konfiguracja kluczy)</string>
- <string name="create_key_text">Wpisz swoje imię, adres email oraz wybierz hasło.</string>
+ <string name="create_key_identity_text">Wpisz swoje imię, adres email oraz wybierz hasło.</string>
<string name="create_key_hint_full_name">Imię i nazwisko, na przykład, Jan Kowalski</string>
<string name="create_key_edit">Zmień klucz konfiguracji</string>
<!--View key-->
diff --git a/OpenKeychain/src/main/res/values-ru/strings.xml b/OpenKeychain/src/main/res/values-ru/strings.xml
index dc1c81bb4..211433d26 100644
--- a/OpenKeychain/src/main/res/values-ru/strings.xml
+++ b/OpenKeychain/src/main/res/values-ru/strings.xml
@@ -490,7 +490,7 @@
<string name="create_key_final_robot_text">Создание ключа займет некоторое время, можете пока выпить чашечку кофе...</string>
<string name="create_key_rsa">(3 доп. ключа, RSA, 4096 bit)</string>
<string name="create_key_custom">(произвольная конфигурация ключа)</string>
- <string name="create_key_text">Укажите полное имя, адрес почты и придумайте надежный пароль.</string>
+ <string name="create_key_identity_text">Укажите полное имя, адрес почты и придумайте надежный пароль.</string>
<string name="create_key_hint_full_name">Полное имя, напр. Иван Хлестаков</string>
<string name="create_key_edit">Изменить конфигурацию ключа</string>
<!--View key-->
diff --git a/OpenKeychain/src/main/res/values-sr/strings.xml b/OpenKeychain/src/main/res/values-sr/strings.xml
index 11639e2eb..73094c5a4 100644
--- a/OpenKeychain/src/main/res/values-sr/strings.xml
+++ b/OpenKeychain/src/main/res/values-sr/strings.xml
@@ -558,7 +558,7 @@
<string name="create_key_final_robot_text">Прављење кључа може да потраје, попијте кафу у међувремену…</string>
<string name="create_key_rsa">(3 поткључа, РСА, 4096 бита)</string>
<string name="create_key_custom">(прилагођена конфигурација кључа)</string>
- <string name="create_key_text">Унесите пуно име, адресу е-поште и укуцајте лозинку.</string>
+ <string name="create_key_identity_text">Унесите пуно име, адресу е-поште и укуцајте лозинку.</string>
<string name="create_key_hint_full_name">Пуно име, нпр. Петар Петровић</string>
<string name="create_key_edit">Промени конфигурацију кључа</string>
<!--View key-->
diff --git a/OpenKeychain/src/main/res/values-sv/strings.xml b/OpenKeychain/src/main/res/values-sv/strings.xml
index a24fe7ee7..d22eea22a 100644
--- a/OpenKeychain/src/main/res/values-sv/strings.xml
+++ b/OpenKeychain/src/main/res/values-sv/strings.xml
@@ -521,7 +521,7 @@
<string name="create_key_final_robot_text">Att skapa en nyckel kan ta ett tag, drick en kopp kaffe under tiden…</string>
<string name="create_key_rsa">(3 undernycklar, RSA, 4096 bit)</string>
<string name="create_key_custom">(anpassad nyckelkonfiguration)</string>
- <string name="create_key_text">Ange ditt fullständiga namn, e-postadress och välj en lösenordsfras.</string>
+ <string name="create_key_identity_text">Ange ditt fullständiga namn, e-postadress och välj en lösenordsfras.</string>
<string name="create_key_hint_full_name">Fullständigt namn, t.ex. Kalle Svensson</string>
<string name="create_key_edit">Ändra nyckelkonfiguration</string>
<!--View key-->
diff --git a/OpenKeychain/src/main/res/values-tr/strings.xml b/OpenKeychain/src/main/res/values-tr/strings.xml
index 7b6a976f5..ee5306cc7 100644
--- a/OpenKeychain/src/main/res/values-tr/strings.xml
+++ b/OpenKeychain/src/main/res/values-tr/strings.xml
@@ -449,7 +449,7 @@
<string name="create_key_final_robot_text">Anahtar oluşturma biraz zaman alabilir, bu sırada bir çay için...</string>
<string name="create_key_rsa">(3 alt anahtar, RSA, 4096 bit)</string>
<string name="create_key_custom">(özel anahtar yapılandırması)</string>
- <string name="create_key_text">Tam isminizi, e-posta adresinizi girin ve bir parola seçin.</string>
+ <string name="create_key_identity_text">Tam isminizi, e-posta adresinizi girin ve bir parola seçin.</string>
<string name="create_key_hint_full_name">Tam Ad, örneğin: Max Mustermann</string>
<string name="create_key_edit">Anahtar yapılandırmasını değiştir.</string>
<!--View key-->
diff --git a/OpenKeychain/src/main/res/values-uk/strings.xml b/OpenKeychain/src/main/res/values-uk/strings.xml
index cf586b2d5..365821f4a 100644
--- a/OpenKeychain/src/main/res/values-uk/strings.xml
+++ b/OpenKeychain/src/main/res/values-uk/strings.xml
@@ -449,7 +449,7 @@
<string name="create_key_empty">Це поле - обов\'язкове</string>
<string name="create_key_passphrases_not_equal">Паролі фрази не збігаються</string>
<string name="create_key_final_text">Ви ввели наступну сутність:</string>
- <string name="create_key_text">Введіть ваше повне ім\'я, електронну адреса та оберіть парольну фразу.</string>
+ <string name="create_key_identity_text">Введіть ваше повне ім\'я, електронну адреса та оберіть парольну фразу.</string>
<string name="create_key_hint_full_name">Повне ім\'я, наприклад Степан Бандера</string>
<!--View key-->
<!--Navigation Drawer-->
diff --git a/OpenKeychain/src/main/res/values-zh-rTW/strings.xml b/OpenKeychain/src/main/res/values-zh-rTW/strings.xml
index b6ab2c8a4..b5b57d91f 100644
--- a/OpenKeychain/src/main/res/values-zh-rTW/strings.xml
+++ b/OpenKeychain/src/main/res/values-zh-rTW/strings.xml
@@ -377,7 +377,7 @@
<string name="create_key_empty">必填欄位</string>
<string name="create_key_passphrases_not_equal">口令不相符</string>
<string name="create_key_final_robot_text">建立金鑰可能需要一點時間,來杯咖啡吧…</string>
- <string name="create_key_text">輸入你的全名、電子郵件,並選擇一組口令。</string>
+ <string name="create_key_identity_text">輸入你的全名、電子郵件,並選擇一組口令。</string>
<!--View key-->
<!--Navigation Drawer-->
<string name="nav_keys">金鑰</string>
diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml
index 4a2be2eb8..9753e4d60 100644
--- a/OpenKeychain/src/main/res/values/strings.xml
+++ b/OpenKeychain/src/main/res/values/strings.xml
@@ -11,8 +11,8 @@
<!-- title -->
<string name="title_select_recipients">"Select Keys"</string>
<string name="title_select_secret_key">"Select Your Key"</string>
- <string name="title_encrypt_text">"Encrypt Text"</string>
- <string name="title_encrypt_files">"Encrypt Files"</string>
+ <string name="title_encrypt_text">"Encrypt"</string>
+ <string name="title_encrypt_files">"Encrypt"</string>
<string name="title_decrypt">"Decrypt"</string>
<string name="title_unlock">"Unlock Key"</string>
<string name="title_add_subkey">"Add subkey"</string>
@@ -26,7 +26,7 @@
<string name="title_share_fingerprint_with">"Share fingerprint with…"</string>
<string name="title_share_key">"Share key with…"</string>
<string name="title_share_file">"Share file with…"</string>
- <string name="title_share_message">"Share message with…"</string>
+ <string name="title_share_message">"Share text with…"</string>
<string name="title_encrypt_to_file">"Encrypt To File"</string>
<string name="title_decrypt_to_file">"Decrypt To File"</string>
<string name="title_import_keys">"Import Keys"</string>
@@ -73,9 +73,10 @@
<!-- button -->
<string name="btn_decrypt_verify_file">"Decrypt, verify, and save file"</string>
- <string name="btn_decrypt_verify_message">"Decrypt and verify message"</string>
+ <string name="btn_decrypt_verify_message">"Decrypt and verify text"</string>
<string name="btn_encrypt_file">"Encrypt and save file"</string>
<string name="btn_encrypt_share_file">"Encrypt and share file"</string>
+ <string name="btn_encrypt_save_file">"Encrypt and save file"</string>
<string name="btn_save">"Save"</string>
<string name="btn_do_not_save">"Cancel"</string>
<string name="btn_delete">"Delete"</string>
@@ -87,7 +88,8 @@
<string name="btn_no">"No"</string>
<string name="btn_match">"Fingerprints match"</string>
<string name="btn_lookup_key">"Lookup key"</string>
- <string name="btn_share_encrypted_signed">"Encrypt and share message"</string>
+ <string name="btn_share_encrypted_signed">"Encrypt and share text"</string>
+ <string name="btn_copy_encrypted_signed">"Encrypt and copy text"</string>
<string name="btn_view_cert_key">"View certification key"</string>
<string name="btn_create_key">"Create key"</string>
<string name="btn_add_files">"Add file(s)"</string>
@@ -119,7 +121,7 @@
<string name="menu_export_log">"Export Log"</string>
<!-- label -->
- <string name="label_message">"Message"</string>
+ <string name="label_message">"Text"</string>
<string name="label_file">"File"</string>
<string name="label_files">"File(s)"</string>
<string name="label_file_colon">"File:"</string>
@@ -127,6 +129,7 @@
<string name="label_passphrase">"Passphrase"</string>
<string name="label_unlock">"Unlocking…"</string>
<string name="label_passphrase_again">"Repeat Passphrase"</string>
+ <string name="label_show_passphrase">"Show Passphrase"</string>
<string name="label_algorithm">"Algorithm"</string>
<string name="label_ascii_armor">"File ASCII Armor"</string>
<string name="label_file_ascii_armor">"Enable ASCII Armor"</string>
@@ -144,7 +147,7 @@
<string name="label_symmetric">"Encrypt with passphrase"</string>
<string name="label_passphrase_cache_ttl">"Cache time"</string>
<string name="label_passphrase_cache_subs">"Cache passphrases by subkey"</string>
- <string name="label_message_compression">"Message compression"</string>
+ <string name="label_message_compression">"Text compression"</string>
<string name="label_file_compression">"File compression"</string>
<string name="label_keyservers">"Keyservers"</string>
<string name="label_key_id">"Key ID"</string>
@@ -219,7 +222,7 @@
<string name="yubikey_pin_for">"Enter PIN to access YubiKey for '%s'"</string>
<string name="nfc_text">"Hold YubiKey against the back of your device."</string>
<string name="file_delete_confirmation">"Are you sure you want to delete\n%s?"</string>
- <string name="file_delete_successful">"Successfully deleted."</string>
+ <string name="file_delete_successful">"'%s' has been deleted."</string>
<string name="no_file_selected">"Select a file first."</string>
<string name="encrypt_sign_successful">"Successfully signed and/or encrypted."</string>
<string name="encrypt_sign_clipboard_successful">"Successfully signed and/or encrypted to clipboard."</string>
@@ -260,7 +263,7 @@
no punctuation, all lowercase,
they will be put after "error_message", e.g. "Error: file not found"
-->
- <string name="error_file_delete_failed">"deleting '%s' failed"</string>
+ <string name="error_file_delete_failed">"Deleting '%s' failed. Please do this manually!"</string>
<string name="error_file_not_found">"file not found"</string>
<string name="error_no_secret_key_found">"no suitable secret key found"</string>
<string name="error_external_storage_not_ready">"external storage not ready"</string>
@@ -557,7 +560,7 @@
<string name="key_trust_maybe">"This key is neither revoked nor expired.\nYou haven’t confirmed it, but you may choose to trust it."</string>
<string name="key_trust_revoked">"This key has been revoked by its owner. You should not trust it."</string>
<string name="key_trust_expired">"This key has expired. You should not trust it."</string>
- <string name="key_trust_old_keys">" It may be OK to use this to decrypt an old message dating from the time when this key was valid."</string>
+ <string name="key_trust_old_keys">"It may be OK to use this to decrypt an old message dating from the time when this key was valid."</string>
<string name="key_trust_no_cloud_evidence">"No proof from the cloud on this key’s trustworthiness."</string>
<string name="key_trust_start_cloud_search">"Start search"</string>
<string name="key_trust_results_prefix">"Keybase.io offers “proofs” which assert that the owner of this key: "</string>
@@ -625,8 +628,10 @@
<string name="create_key_final_robot_text">"Creating a key may take a while, have a cup of coffee in the meantime…"</string>
<string name="create_key_rsa">"(3 subkeys, RSA, 4096 bit)"</string>
<string name="create_key_custom">"(custom key configuration)"</string>
- <string name="create_key_text">"Enter your full name, email address, and choose a passhrase."</string>
- <string name="create_key_hint_full_name">"Full Name, e.g. Max Mustermann"</string>
+ <string name="create_key_name_text">"Choose a name associated with this key. This can be a full name, e.g., 'John Doe', or a nickname, e.g., 'Johnny'."</string>
+ <string name="create_key_email_text">"Choose the email address used for encrypted communication."</string>
+ <string name="create_key_passphrase_text">"Choose a strong passphrase. It protects your key when your device gets stolen."</string>
+ <string name="create_key_hint_full_name">"Full Name or Nickname"</string>
<string name="create_key_edit">"Change key configuration"</string>
<!-- View key -->