diff options
author | Vincent Breitmoser <valodim@mugenguild.com> | 2014-12-30 13:09:27 +0100 |
---|---|---|
committer | Vincent Breitmoser <valodim@mugenguild.com> | 2014-12-30 13:09:27 +0100 |
commit | 9e663237b6dc4880bcdb1c763374c44f9f4416d2 (patch) | |
tree | 3c317cf8a9e320db0b6ff5c451b82e7b32014627 /OpenKeychain/src/main/java | |
parent | 2223cdd4056341576a540b065bcb34a1e579b141 (diff) | |
parent | ccde6add70ea9b5c559910d42dfb2e0bf79f5989 (diff) | |
download | open-keychain-9e663237b6dc4880bcdb1c763374c44f9f4416d2.tar.gz open-keychain-9e663237b6dc4880bcdb1c763374c44f9f4416d2.tar.bz2 open-keychain-9e663237b6dc4880bcdb1c763374c44f9f4416d2.zip |
Merge branch 'development' of github.com:open-keychain/open-keychain into development
Conflicts:
OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedSecretKey.java
OpenKeychain/src/main/res/values/strings.xml
Diffstat (limited to 'OpenKeychain/src/main/java')
2 files changed, 89 insertions, 33 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedSecretKey.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedSecretKey.java index 5c99a9854..42e59b3bc 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedSecretKey.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedSecretKey.java @@ -84,7 +84,8 @@ public class CanonicalizedSecretKey extends CanonicalizedPublicKey { } public enum SecretKeyType { - UNAVAILABLE(0), GNU_DUMMY(1), PASSPHRASE(2), PASSPHRASE_EMPTY(3), DIVERT_TO_CARD(4), PIN(5); + UNAVAILABLE(0), GNU_DUMMY(1), PASSPHRASE(2), PASSPHRASE_EMPTY(3), DIVERT_TO_CARD(4), PIN(5), + PATTERN(6); final int mNum; @@ -104,6 +105,8 @@ public class CanonicalizedSecretKey extends CanonicalizedPublicKey { return DIVERT_TO_CARD; case 5: return PIN; + case 6: + return PATTERN; // if this case happens, it's probably a check from a database value default: return UNAVAILABLE; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PassphraseDialogActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PassphraseDialogActivity.java index 4bd413778..cd564551a 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PassphraseDialogActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PassphraseDialogActivity.java @@ -41,6 +41,8 @@ import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; +import com.haibison.android.lockpattern.LockPatternActivity; + import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.compatibility.DialogFragmentWorkaround; @@ -68,6 +70,8 @@ public class PassphraseDialogActivity extends FragmentActivity { // special extra for OpenPgpService public static final String EXTRA_DATA = "data"; + private static final int REQUEST_CODE_ENTER_PATTERN = 2; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -90,6 +94,40 @@ public class PassphraseDialogActivity extends FragmentActivity { show(this, keyId, serviceIntent); } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case REQUEST_CODE_ENTER_PATTERN: { + /* + * NOTE that there are 4 possible result codes!!! + */ + switch (resultCode) { + case RESULT_OK: + // The user passed + break; + case RESULT_CANCELED: + // The user cancelled the task + break; + case LockPatternActivity.RESULT_FAILED: + // The user failed to enter the pattern + break; + case LockPatternActivity.RESULT_FORGOT_PATTERN: + // The user forgot the pattern and invoked your recovery Activity. + break; + } + + /* + * In any case, there's always a key EXTRA_RETRY_COUNT, which holds + * the number of tries that the user did. + */ + int retryCount = data.getIntExtra( + LockPatternActivity.EXTRA_RETRY_COUNT, 0); + + break; + } + } + } + /** * Shows passphrase dialog to cache a new passphrase the user enters for using it later for * encryption. Based on mSecretKeyId it asks for a passphrase to open a private key or it asks @@ -138,7 +176,7 @@ public class PassphraseDialogActivity extends FragmentActivity { CustomAlertDialogBuilder alert = new CustomAlertDialogBuilder(theme); - alert.setTitle(R.string.title_authentication); + alert.setTitle(R.string.title_unlock); String userId; CanonicalizedSecretKey.SecretKeyType keyType = CanonicalizedSecretKey.SecretKeyType.PASSPHRASE; @@ -174,7 +212,10 @@ public class PassphraseDialogActivity extends FragmentActivity { message = getString(R.string.pin_for, userId); break; case DIVERT_TO_CARD: - message = getString(R.string.yubikey_pin, userId); + message = getString(R.string.yubikey_pin_for, userId); + break; + case PIN: + message = getString(R.string.pin_for, userId); break; default: message = "This should not happen!"; @@ -212,40 +253,52 @@ public class PassphraseDialogActivity extends FragmentActivity { } }); - // Hack to open keyboard. - // This is the only method that I found to work across all Android versions - // http://turbomanage.wordpress.com/2012/05/02/show-soft-keyboard-automatically-when-edittext-receives-focus/ - // Notes: * onCreateView can't be used because we want to add buttons to the dialog - // * opening in onActivityCreated does not work on Android 4.4 - mPassphraseEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() { - @Override - public void onFocusChange(View v, boolean hasFocus) { - mPassphraseEditText.post(new Runnable() { - @Override - public void run() { - if (getActivity() == null || mPassphraseEditText == null) { - return; + + if (keyType == CanonicalizedSecretKey.SecretKeyType.PATTERN) { + // start pattern dialog and show progress circle here... + Intent patternActivity = new Intent(getActivity(), LockPatternActivity.class); + patternActivity.putExtra(LockPatternActivity.EXTRA_PATTERN, "123"); + startActivityForResult(patternActivity, REQUEST_CODE_ENTER_PATTERN); + mInput.setVisibility(View.GONE); + mProgress.setVisibility(View.VISIBLE); + } else { + // Hack to open keyboard. + // This is the only method that I found to work across all Android versions + // http://turbomanage.wordpress.com/2012/05/02/show-soft-keyboard-automatically-when-edittext-receives-focus/ + // Notes: * onCreateView can't be used because we want to add buttons to the dialog + // * opening in onActivityCreated does not work on Android 4.4 + mPassphraseEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + mPassphraseEditText.post(new Runnable() { + @Override + public void run() { + if (getActivity() == null || mPassphraseEditText == null) { + return; + } + InputMethodManager imm = (InputMethodManager) getActivity() + .getSystemService(Context.INPUT_METHOD_SERVICE); + imm.showSoftInput(mPassphraseEditText, InputMethodManager.SHOW_IMPLICIT); } - InputMethodManager imm = (InputMethodManager) getActivity() - .getSystemService(Context.INPUT_METHOD_SERVICE); - imm.showSoftInput(mPassphraseEditText, InputMethodManager.SHOW_IMPLICIT); - } - }); + }); + } + }); + mPassphraseEditText.requestFocus(); + + mPassphraseEditText.setImeActionLabel(getString(android.R.string.ok), EditorInfo.IME_ACTION_DONE); + mPassphraseEditText.setOnEditorActionListener(this); + + if (keyType == CanonicalizedSecretKey.SecretKeyType.DIVERT_TO_CARD && Preferences.getPreferences(activity).useNumKeypadForYubikeyPin()) { + mPassphraseEditText.setRawInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_TEXT_VARIATION_PASSWORD); + } else if (keyType == CanonicalizedSecretKey.SecretKeyType.PIN) { + mPassphraseEditText.setRawInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_TEXT_VARIATION_PASSWORD); + } else { + mPassphraseEditText.setRawInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); } - }); - mPassphraseEditText.requestFocus(); - mPassphraseEditText.setImeActionLabel(getString(android.R.string.ok), EditorInfo.IME_ACTION_DONE); - mPassphraseEditText.setOnEditorActionListener(this); - - if (keyType == CanonicalizedSecretKey.SecretKeyType.DIVERT_TO_CARD && Preferences.getPreferences(activity).useNumKeypadForYubikeyPin()) { - mPassphraseEditText.setRawInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_TEXT_VARIATION_PASSWORD); - } else { - mPassphraseEditText.setRawInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); + mPassphraseEditText.setTransformationMethod(PasswordTransformationMethod.getInstance()); } - mPassphraseEditText.setTransformationMethod(PasswordTransformationMethod.getInstance()); - AlertDialog dialog = alert.create(); dialog.setButton(DialogInterface.BUTTON_POSITIVE, activity.getString(android.R.string.ok), (DialogInterface.OnClickListener) null); @@ -267,7 +320,7 @@ public class PassphraseDialogActivity extends FragmentActivity { // Early breakout if we are dealing with a symmetric key if (mSecretRing == null) { PassphraseCacheService.addCachedPassphrase(getActivity(), - Constants.key.symmetric, Constants.key.symmetric, passphrase, + Constants.key.symmetric, Constants.key.symmetric, passphrase, getString(R.string.passp_cache_notif_pwd)); finishCaching(passphrase); |