UI preparations for yubikey reset
This commit is contained in:
parent
4f2e02d606
commit
930db9061e
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
|
@ -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>
|
|
@ -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>
|
|
@ -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">
|
||||
|
|
Loading…
Reference in a new issue