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