From 930db9061efbed0cc3fd8955a15f3aba84eb53d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Fri, 16 Oct 2015 14:57:45 +0200 Subject: [PATCH] UI preparations for yubikey reset --- .../keychain/ui/CreateKeyActivity.java | 4 +- ... => CreateYubiKeyImportResetFragment.java} | 95 +++++++--- .../create_yubi_key_import_fragment.xml | 128 ------------- .../create_yubi_key_import_reset_fragment.xml | 174 ++++++++++++++++++ OpenKeychain/src/main/res/values/strings.xml | 7 +- 5 files changed, 248 insertions(+), 160 deletions(-) rename OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/{CreateYubiKeyImportFragment.java => CreateYubiKeyImportResetFragment.java} (70%) delete mode 100644 OpenKeychain/src/main/res/layout/create_yubi_key_import_fragment.xml create mode 100644 OpenKeychain/src/main/res/layout/create_yubi_key_import_reset_fragment.xml 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 94b5f4e4b..a4163d7f9 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java @@ -113,7 +113,7 @@ public class CreateKeyActivity extends BaseNfcActivity { byte[] nfcAid = intent.getByteArrayExtra(EXTRA_NFC_AID); if (containsKeys(nfcFingerprints)) { - Fragment frag = CreateYubiKeyImportFragment.newInstance( + Fragment frag = CreateYubiKeyImportResetFragment.newInstance( nfcFingerprints, nfcAid, nfcUserId); loadFragment(frag, FragAction.START); @@ -176,7 +176,7 @@ public class CreateKeyActivity extends BaseNfcActivity { finish(); } catch (PgpKeyNotFoundException e) { - Fragment frag = CreateYubiKeyImportFragment.newInstance( + Fragment frag = CreateYubiKeyImportResetFragment.newInstance( mScannedFingerprints, mNfcAid, mNfcUserId); loadFragment(frag, FragAction.TO_RIGHT); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateYubiKeyImportFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateYubiKeyImportResetFragment.java similarity index 70% rename from OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateYubiKeyImportFragment.java rename to OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateYubiKeyImportResetFragment.java index 648c5f962..3529f98d8 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateYubiKeyImportFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateYubiKeyImportResetFragment.java @@ -28,8 +28,9 @@ import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; -import android.view.View.OnClickListener; import android.view.ViewGroup; +import android.widget.CompoundButton; +import android.widget.RadioButton; import android.widget.TextView; import org.spongycastle.util.encoders.Hex; @@ -45,7 +46,7 @@ import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.util.Preferences; -public class CreateYubiKeyImportFragment +public class CreateYubiKeyImportResetFragment extends QueueingCryptoOperationFragment implements NfcListenerFragment { @@ -62,6 +63,10 @@ public class CreateYubiKeyImportFragment private ImportKeysListFragment mListFragment; private TextView vSerNo; private TextView vUserId; + private TextView mNextButton; + private RadioButton mRadioImport; + private RadioButton mRadioReset; + private View mResetWarning; // for CryptoOperationFragment key import private String mKeyserver; @@ -69,7 +74,7 @@ public class CreateYubiKeyImportFragment public static Fragment newInstance(byte[] scannedFingerprints, byte[] nfcAid, String userId) { - CreateYubiKeyImportFragment frag = new CreateYubiKeyImportFragment(); + CreateYubiKeyImportResetFragment frag = new CreateYubiKeyImportResetFragment(); Bundle args = new Bundle(); args.putByteArray(ARG_FINGERPRINTS, scannedFingerprints); @@ -98,49 +103,78 @@ public class CreateYubiKeyImportFragment @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.create_yubi_key_import_fragment, container, false); + View view = inflater.inflate(R.layout.create_yubi_key_import_reset_fragment, container, false); vSerNo = (TextView) view.findViewById(R.id.yubikey_serno); vUserId = (TextView) view.findViewById(R.id.yubikey_userid); + mNextButton = (TextView) view.findViewById(R.id.create_key_next_button); + mRadioImport = (RadioButton) view.findViewById(R.id.yubikey_decision_import); + mRadioReset = (RadioButton) view.findViewById(R.id.yubikey_decision_reset); + mResetWarning = view.findViewById(R.id.yubikey_import_reset_warning); - { - View mBackButton = view.findViewById(R.id.create_key_back_button); - mBackButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (getFragmentManager().getBackStackEntryCount() == 0) { - getActivity().setResult(Activity.RESULT_CANCELED); - getActivity().finish(); - } else { - mCreateKeyActivity.loadFragment(null, FragAction.TO_LEFT); - } + View mBackButton = view.findViewById(R.id.create_key_back_button); + mBackButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (getFragmentManager().getBackStackEntryCount() == 0) { + getActivity().setResult(Activity.RESULT_CANCELED); + getActivity().finish(); + } else { + mCreateKeyActivity.loadFragment(null, FragAction.TO_LEFT); } - }); + } + }); - View mNextButton = view.findViewById(R.id.create_key_next_button); - mNextButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { + mNextButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mRadioReset.isChecked()) { + resetCard(); + } else { importKey(); } - }); - } + } + }); mListFragment = ImportKeysListFragment.newInstance(null, null, "0x" + mNfcFingerprint, true, null); - view.findViewById(R.id.button_search).setOnClickListener(new OnClickListener() { + mRadioImport.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override - public void onClick(View v) { - refreshSearch(); + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isChecked) { + mNextButton.setText(R.string.btn_import); + mNextButton.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_key_plus_grey600_24dp, 0); + mNextButton.setVisibility(View.VISIBLE); + mResetWarning.setVisibility(View.GONE); + + getFragmentManager().beginTransaction() + .replace(R.id.yubikey_import_fragment, mListFragment, "yubikey_import") + .commit(); + + getFragmentManager().executePendingTransactions(); + refreshSearch(); + } + } + }); + mRadioReset.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isChecked) { + mNextButton.setText(R.string.btn_reset); + mNextButton.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_close_grey_24dp, 0); + mNextButton.setVisibility(View.VISIBLE); + mResetWarning.setVisibility(View.VISIBLE); + + getFragmentManager().beginTransaction() + .remove(mListFragment) + .commit(); + } } }); setData(); - getFragmentManager().beginTransaction() - .replace(R.id.yubikey_import_fragment, mListFragment, "yubikey_import") - .commit(); return view; } @@ -195,6 +229,10 @@ public class CreateYubiKeyImportFragment } + public void resetCard() { + + } + @Override public void doNfcInBackground() throws IOException { @@ -212,7 +250,6 @@ public class CreateYubiKeyImportFragment setData(); - refreshSearch(); } @Override diff --git a/OpenKeychain/src/main/res/layout/create_yubi_key_import_fragment.xml b/OpenKeychain/src/main/res/layout/create_yubi_key_import_fragment.xml deleted file mode 100644 index 3a54f264f..000000000 --- a/OpenKeychain/src/main/res/layout/create_yubi_key_import_fragment.xml +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/OpenKeychain/src/main/res/layout/create_yubi_key_import_reset_fragment.xml b/OpenKeychain/src/main/res/layout/create_yubi_key_import_reset_fragment.xml new file mode 100644 index 000000000..7acc2dca9 --- /dev/null +++ b/OpenKeychain/src/main/res/layout/create_yubi_key_import_reset_fragment.xml @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 11036c9d3..9c2d1a2b0 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -316,7 +316,7 @@ "A full backup of your key will be made, please specify a destination file.\nWARNING: File will be overwritten if it exists!" "A full backup of all keys including yours will be made, please specify a destination file.\nWARNING: File will be overwritten if it exists!" "Do you really want to delete all selected keys?" - "After deletion you will not be able to read messages encrypted with this key and lose all key confirmations done with it!" + "After deletion you will not be able to decrypt messages/files encrypted with this key and lose all key confirmations done with it!" "Delete key '%s'?" "Also export secret keys" "You encountered a known bug with Android. Please reinstall OpenKeychain if you want to link your contacts with keys." @@ -1515,7 +1515,12 @@ "YubiKey matches, can be bound to key" "YubiKey matches, partly bound to key" "Hold YubiKey against the back of your device." + "This YubiKey already contains a key. You can import the key using the cloud or reset the YubiKey." "Import" + "Reset" + "Import key" + "Reset YubiKey" + "Resetting the YubiKey completely destroys the keys on it. Afterwards, you will not be able to decrypt messages/files encrypted with this key!" Different key stored on YubiKey! "NFC Error: %s"