diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportFragment.java
index 5789fd3eb..38f4fbc1b 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportFragment.java
@@ -19,12 +19,14 @@ package org.sufficientlysecure.keychain.ui;
import android.app.Activity;
+import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.support.v4.app.Fragment;
+import android.support.v7.app.AlertDialog.Builder;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -41,11 +43,14 @@ import org.sufficientlysecure.keychain.operations.results.PromoteKeyResult;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.service.ImportKeyringParcel;
import org.sufficientlysecure.keychain.service.PromoteKeyringParcel;
+import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
+import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
import org.sufficientlysecure.keychain.ui.CreateSecurityTokenImportPresenter.CreateSecurityTokenImportMvpView;
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper.AbstractCallback;
import org.sufficientlysecure.keychain.ui.keyview.ViewKeyActivity;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
+import org.sufficientlysecure.keychain.ui.util.ThemeChanger;
import org.sufficientlysecure.keychain.ui.widget.StatusIndicator;
import org.sufficientlysecure.keychain.ui.widget.StatusIndicator.Status;
import org.sufficientlysecure.keychain.ui.widget.ToolableViewAnimator;
@@ -59,6 +64,7 @@ public class CreateSecurityTokenImportFragment extends Fragment implements Creat
private static final String ARG_USER_ID = "user_ids";
private static final String ARG_URL = "key_uri";
public static final int REQUEST_CODE_OPEN_FILE = 0;
+ public static final int REQUEST_CODE_RESET = 1;
CreateSecurityTokenImportPresenter presenter;
private ViewGroup statusLayoutGroup;
@@ -232,11 +238,35 @@ public class CreateSecurityTokenImportFragment extends Fragment implements Creat
cryptoPromoteOperationHelper.cryptoOperation();
}
+ @Override
+ public void operationResetSecurityToken() {
+ Intent intent = new Intent(getActivity(), SecurityTokenOperationActivity.class);
+ RequiredInputParcel resetP = RequiredInputParcel.createSecurityTokenReset();
+ intent.putExtra(SecurityTokenOperationActivity.EXTRA_REQUIRED_INPUT, resetP);
+ intent.putExtra(SecurityTokenOperationActivity.EXTRA_CRYPTO_INPUT, CryptoInputParcel.createCryptoInputParcel());
+ startActivityForResult(intent, REQUEST_CODE_RESET);
+ }
+
@Override
public void showFileSelectDialog() {
FileHelper.openDocument(this, null, "*/*", false, REQUEST_CODE_OPEN_FILE);
}
+ @Override
+ public void showConfirmResetDialog() {
+ new Builder(ThemeChanger.getDialogThemeWrapper(getContext()))
+ .setTitle(R.string.token_reset_confirm_title)
+ .setMessage(R.string.token_reset_confirm_message)
+ .setNegativeButton(R.string.button_cancel, null)
+ .setPositiveButton(R.string.token_reset_confirm_ok, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ presenter.onClickConfirmReset();
+ }
+ }).show();
+ }
+
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
@@ -247,6 +277,12 @@ public class CreateSecurityTokenImportFragment extends Fragment implements Creat
}
break;
}
+ case REQUEST_CODE_RESET: {
+ if (resultCode == Activity.RESULT_OK) {
+ presenter.onSecurityTokenResetSuccess();
+ }
+ break;
+ }
default: {
super.onActivityResult(requestCode, resultCode, data);
}
@@ -270,6 +306,7 @@ public class CreateSecurityTokenImportFragment extends Fragment implements Creat
}
case R.id.button_load_file: {
presenter.onClickLoadFile();
+ break;
}
case R.id.button_reset_token_1:
case R.id.button_reset_token_2:
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportPresenter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportPresenter.java
index 8aa3a75af..998a4a21a 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportPresenter.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportPresenter.java
@@ -58,7 +58,7 @@ class CreateSecurityTokenImportPresenter {
private Long masterKeyId;
- public CreateSecurityTokenImportPresenter(Context context, byte[] tokenFingerprints, byte[] tokenAid,
+ CreateSecurityTokenImportPresenter(Context context, byte[] tokenFingerprints, byte[] tokenAid,
String tokenUserId, String tokenUrl, LoaderManager loaderManager) {
this.context = context.getApplicationContext();
@@ -227,7 +227,15 @@ class CreateSecurityTokenImportPresenter {
view.finishAndShowKey(masterKeyId);
}
- public void onClickResetToken() {
+ void onClickResetToken() {
+ view.showConfirmResetDialog();
+ }
+
+ void onClickConfirmReset() {
+ view.operationResetSecurityToken();
+ }
+
+ void onSecurityTokenResetSuccess() {
// TODO
}
@@ -257,9 +265,11 @@ class CreateSecurityTokenImportPresenter {
void operationImportKey(byte[] importKeyData);
void operationPromote(long masterKeyId, byte[] cardAid);
+ void operationResetSecurityToken();
void finishAndShowKey(long masterKeyId);
void showFileSelectDialog();
+ void showConfirmResetDialog();
}
}
diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml
index 7419e0251..991d4bd24 100644
--- a/OpenKeychain/src/main/res/values/strings.xml
+++ b/OpenKeychain/src/main/res/values/strings.xml
@@ -1925,5 +1925,8 @@
Setting up key…
Checking key setup…
Reading file…
+ Reset Security Token?
+ This will irrecoverably delete the key stored on this Security Token. You will no longer be able to use this key for decryption! Are you sure?
+ Reset