aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java4
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateYubiKeyImportResetFragment.java (renamed from OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateYubiKeyImportFragment.java)95
-rw-r--r--OpenKeychain/src/main/res/layout/create_yubi_key_import_fragment.xml128
-rw-r--r--OpenKeychain/src/main/res/layout/create_yubi_key_import_reset_fragment.xml174
-rw-r--r--OpenKeychain/src/main/res/values/strings.xml7
5 files changed, 248 insertions, 160 deletions
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
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<ImportKeyringParcel, ImportKeyResult>
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 @@
-<?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">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:padding="4dp"
- android:orientation="horizontal"
- android:id="@+id/yubikey_status_layout" >
-
- <ImageView
- android:layout_margin="14dp"
- android:layout_width="32dp"
- android:layout_height="32dp"
- android:scaleType="centerCrop"
- android:src="@drawable/yubi_icon"/>
-
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:layout_weight="1"
- android:orientation="vertical">
-
- <TextView
- android:id="@+id/yubikey_serno"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:text="Yubikey #"
- />
-
- <TextView
- android:id="@+id/yubikey_userid"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:text="User ID"
- />
-
- <TextView
- android:id="@+id/yubikey_status"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:text="Unknown key, hit next to import"
- />
-
- </LinearLayout>
-
- <ImageButton
- android:id="@+id/button_search"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:padding="8dp"
- android:src="@drawable/ic_search_grey_24dp"
- android:layout_gravity="center_vertical"
- android:background="?android:selectableItemBackground" />
-
- </LinearLayout>
-
- <View
- android:layout_width="match_parent"
- android:layout_marginTop="4dp"
- android:layout_height="1dip"
- android:layout_below="@id/yubikey_status_layout"
- android:background="?android:attr/listDivider" />
-
- <FrameLayout
- android:id="@+id/yubikey_import_fragment"
- android:layout_marginTop="8dp"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_below="@id/yubikey_status_layout"
- android:layout_above="@id/create_key_buttons"
- />
-
- <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="?attr/colorButtonRow"
- 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_gravity="center_vertical"
- 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_gravity="center_vertical"
- android:layout_weight="1"
- android:text="@string/btn_import"
- android:textAllCaps="true"
- android:minHeight="?android:attr/listPreferredItemHeight"
- android:drawableRight="@drawable/ic_key_plus_grey600_24dp"
- android:drawablePadding="8dp"
- android:gravity="right|center_vertical"
- android:clickable="true"
- style="?android:attr/borderlessButtonStyle" />
-
- </LinearLayout>
-
-</RelativeLayout>
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 @@
+<?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:layout_above="@+id/create_key_buttons"
+ android:fillViewport="true">
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <LinearLayout
+ android:id="@+id/yubikey_status_layout"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:padding="4dp">
+
+ <ImageView
+ android:layout_width="32dp"
+ android:layout_height="32dp"
+ android:layout_margin="14dp"
+ android:scaleType="centerCrop"
+ android:src="@drawable/yubi_icon" />
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:layout_weight="1"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/yubikey_serno"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:text="Yubikey #" />
+
+ <TextView
+ android:id="@+id/yubikey_userid"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:text="User ID" />
+
+ </LinearLayout>
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/yubikey_decision"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/yubikey_status_layout"
+ android:orientation="vertical"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp">
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="8dp"
+ android:layout_marginTop="8dp"
+ android:text="@string/yubikey_reset_or_import"
+ android:textAppearance="?android:attr/textAppearanceMedium" />
+
+ <RadioGroup
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <RadioButton
+ android:id="@+id/yubikey_decision_import"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:text="@string/yubikey_import_radio" />
+
+ <RadioButton
+ android:id="@+id/yubikey_decision_reset"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="16dp"
+ android:layout_marginTop="16dp"
+ android:text="@string/yubikey_reset_radio" />
+ </RadioGroup>
+
+ </LinearLayout>
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:layout_below="@id/yubikey_decision"
+ android:layout_marginTop="4dp"
+ android:background="?android:attr/listDivider" />
+
+ <FrameLayout
+ android:id="@+id/yubikey_import_fragment"
+ android:layout_width="fill_parent"
+ android:layout_height="match_parent"
+ android:layout_below="@id/yubikey_decision"
+ android:layout_marginTop="8dp">
+
+ <TextView
+ android:id="@+id/yubikey_import_reset_warning"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_margin="24dp"
+ android:text="@string/yubikey_reset_warning"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textColor="@color/android_red_dark"
+ android:visibility="gone" />
+ </FrameLayout>
+
+ </RelativeLayout>
+ </ScrollView>
+
+ <LinearLayout
+ android:id="@+id/create_key_buttons"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
+ android:background="?attr/colorButtonRow"
+ android:orientation="horizontal">
+
+ <TextView
+ android:id="@+id/create_key_back_button"
+ style="?android:attr/borderlessButtonStyle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:layout_weight="1"
+ android:clickable="true"
+ android:drawableLeft="@drawable/ic_chevron_left_grey_24dp"
+ android:drawablePadding="8dp"
+ android:gravity="left|center_vertical"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp"
+ android:text="@string/btn_back"
+ android:textAllCaps="true"
+ android:textAppearance="?android:attr/textAppearanceMedium" />
+
+ <TextView
+ android:id="@+id/create_key_next_button"
+ style="?android:attr/borderlessButtonStyle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:layout_weight="1"
+ android:clickable="true"
+ android:drawablePadding="8dp"
+ android:drawableRight="@drawable/ic_key_plus_grey600_24dp"
+ android:gravity="right|center_vertical"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp"
+ android:text="@string/btn_import"
+ android:textAllCaps="true"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:visibility="invisible" />
+
+ </LinearLayout>
+
+</RelativeLayout>
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 @@
<string name="specify_backup_dest_secret_single">"A full backup of your key will be made, please specify a destination file.\nWARNING: File will be overwritten if it exists!"</string>
<string name="specify_backup_dest_secret">"A full backup of all keys including yours will be made, please specify a destination file.\nWARNING: File will be overwritten if it exists!"</string>
<string name="key_deletion_confirmation_multi">"Do you really want to delete all selected keys?"</string>
- <string name="secret_key_deletion_confirmation">"After deletion you will not be able to read messages encrypted with this key and lose all key confirmations done with it!"</string>
+ <string name="secret_key_deletion_confirmation">"After deletion you will not be able to decrypt messages/files encrypted with this key and lose all key confirmations done with it!"</string>
<string name="public_key_deletetion_confirmation">"Delete key '%s'?"</string>
<string name="also_export_secret_keys">"Also export secret keys"</string>
<string name="reinstall_openkeychain">"You encountered a known bug with Android. Please reinstall OpenKeychain if you want to link your contacts with keys."</string>
@@ -1515,7 +1515,12 @@
<string name="yubikey_status_unbound">"YubiKey matches, can be bound to key"</string>
<string name="yubikey_status_partly">"YubiKey matches, partly bound to key"</string>
<string name="yubikey_create">"Hold YubiKey against the back of your device."</string>
+ <string name="yubikey_reset_or_import">"This YubiKey already contains a key. You can import the key using the cloud or reset the YubiKey."</string>
<string name="btn_import">"Import"</string>
+ <string name="btn_reset">"Reset"</string>
+ <string name="yubikey_import_radio">"Import key"</string>
+ <string name="yubikey_reset_radio">"Reset YubiKey"</string>
+ <string name="yubikey_reset_warning">"Resetting the YubiKey completely destroys the keys on it. Afterwards, you will not be able to decrypt messages/files encrypted with this key!"</string>
<string name="snack_yubi_other">Different key stored on YubiKey!</string>
<string name="error_nfc">"NFC Error: %s"</string>
<plurals name="error_pin">