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 11ce6b663..25c0efcb7 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java @@ -38,6 +38,7 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.securitytoken.KeyFormat; import org.sufficientlysecure.keychain.ui.base.BaseSecurityTokenActivity; import org.sufficientlysecure.keychain.ui.keyview.ViewKeyActivity; +import org.sufficientlysecure.keychain.ui.token.ManageSecurityTokenFragment; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Preferences; @@ -196,7 +197,7 @@ public class CreateKeyActivity extends BaseSecurityTokenActivity { finish(); } catch (PgpKeyNotFoundException e) { - Fragment frag = CreateSecurityTokenImportFragment.newInstance( + Fragment frag = ManageSecurityTokenFragment.newInstance( mScannedFingerprints, mSecurityTokenAid, mSecurityTokenUserId, mSecurityTokenUrl); loadFragment(frag, FragAction.TO_RIGHT); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/ManageSecurityTokenContract.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/ManageSecurityTokenContract.java new file mode 100644 index 000000000..5ce6de1ee --- /dev/null +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/ManageSecurityTokenContract.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2017 Vincent Breitmoser + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.sufficientlysecure.keychain.ui.token; + + +import android.net.Uri; + +import org.sufficientlysecure.keychain.operations.results.OperationResult; +import org.sufficientlysecure.keychain.ui.token.ManageSecurityTokenFragment.StatusLine; + + +class ManageSecurityTokenContract { + interface ManageSecurityTokenMvpPresenter { + void setView(ManageSecurityTokenMvpView createSecurityTokenImportFragment); + void onActivityCreated(); + + void onClickRetry(); + void onClickViewKey(); + void onClickViewLog(); + + void onClickImport(); + void onImportSuccess(OperationResult result); + void onImportError(OperationResult result); + + void onPromoteSuccess(OperationResult result); + void onPromoteError(OperationResult result); + + + void onClickLoadFile(); + void onFileSelected(Uri fileUri); + + void onClickResetToken(); + void onClickConfirmReset(); + void onSecurityTokenResetSuccess(); + } + + interface ManageSecurityTokenMvpView { + void statusLineAdd(StatusLine statusLine); + void statusLineOk(); + void statusLineError(); + void resetStatusLines(); + + void showActionImport(); + void showActionViewKey(); + void showActionRetryOrFromFile(); + void hideAction(); + + void operationImportKey(byte[] importKeyData); + void operationPromote(long masterKeyId, byte[] cardAid); + void operationResetSecurityToken(); + + void finishAndShowKey(long masterKeyId); + + void showFileSelectDialog(); + void showConfirmResetDialog(); + + void showDisplayLogActivity(OperationResult result); + } +} diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/ManageSecurityTokenFragment.java similarity index 94% rename from OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportFragment.java rename to OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/ManageSecurityTokenFragment.java index d06409027..a93d78303 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/ManageSecurityTokenFragment.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package org.sufficientlysecure.keychain.ui; +package org.sufficientlysecure.keychain.ui.token; import android.app.Activity; @@ -47,10 +47,15 @@ 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.CreateKeyActivity; +import org.sufficientlysecure.keychain.ui.LogDisplayActivity; +import org.sufficientlysecure.keychain.ui.LogDisplayFragment; +import org.sufficientlysecure.keychain.ui.SecurityTokenOperationActivity; 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.token.ManageSecurityTokenContract.ManageSecurityTokenMvpPresenter; +import org.sufficientlysecure.keychain.ui.token.ManageSecurityTokenContract.ManageSecurityTokenMvpView; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.ThemeChanger; import org.sufficientlysecure.keychain.ui.widget.StatusIndicator; @@ -59,7 +64,7 @@ import org.sufficientlysecure.keychain.ui.widget.ToolableViewAnimator; import org.sufficientlysecure.keychain.util.FileHelper; -public class CreateSecurityTokenImportFragment extends Fragment implements CreateSecurityTokenImportMvpView, +public class ManageSecurityTokenFragment extends Fragment implements ManageSecurityTokenMvpView, OnClickListener { private static final String ARG_FINGERPRINTS = "fingerprint"; private static final String ARG_AID = "aid"; @@ -68,7 +73,7 @@ public class CreateSecurityTokenImportFragment extends Fragment implements Creat public static final int REQUEST_CODE_OPEN_FILE = 0; public static final int REQUEST_CODE_RESET = 1; - CreateSecurityTokenImportPresenter presenter; + ManageSecurityTokenMvpPresenter presenter; private ViewGroup statusLayoutGroup; private ToolableViewAnimator actionAnimator; @@ -84,7 +89,7 @@ public class CreateSecurityTokenImportFragment extends Fragment implements Creat } public static Fragment newInstance(byte[] scannedFingerprints, byte[] nfcAid, String userId, String tokenUrl) { - CreateSecurityTokenImportFragment frag = new CreateSecurityTokenImportFragment(); + ManageSecurityTokenFragment frag = new ManageSecurityTokenFragment(); Bundle args = new Bundle(); args.putByteArray(ARG_FINGERPRINTS, scannedFingerprints); @@ -107,7 +112,7 @@ public class CreateSecurityTokenImportFragment extends Fragment implements Creat String tokenUserId = args.getString(ARG_USER_ID); String tokenUrl = args.getString(ARG_URL); - presenter = new CreateSecurityTokenImportPresenter( + presenter = new ManageSecurityTokenPresenter( getContext(), tokenFingerprints, tokenAid, tokenUserId, tokenUrl, getLoaderManager()); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportPresenter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/ManageSecurityTokenPresenter.java similarity index 77% rename from OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportPresenter.java rename to OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/ManageSecurityTokenPresenter.java index 7daa36b90..685d77a6f 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportPresenter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/ManageSecurityTokenPresenter.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package org.sufficientlysecure.keychain.ui; +package org.sufficientlysecure.keychain.ui.token; import android.content.Context; @@ -28,31 +28,35 @@ import android.support.v4.content.Loader; import org.sufficientlysecure.keychain.operations.results.GenericOperationResult; import org.sufficientlysecure.keychain.operations.results.OperationResult; import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog; -import org.sufficientlysecure.keychain.ui.CreateSecurityTokenImportFragment.StatusLine; -import org.sufficientlysecure.keychain.ui.PublicKeyRetrievalLoader.ContentUriRetrievalLoader; -import org.sufficientlysecure.keychain.ui.PublicKeyRetrievalLoader.KeyRetrievalResult; -import org.sufficientlysecure.keychain.ui.PublicKeyRetrievalLoader.KeyserverRetrievalLoader; -import org.sufficientlysecure.keychain.ui.PublicKeyRetrievalLoader.LocalKeyLookupLoader; -import org.sufficientlysecure.keychain.ui.PublicKeyRetrievalLoader.UriKeyRetrievalLoader; +import org.sufficientlysecure.keychain.ui.token.ManageSecurityTokenContract.ManageSecurityTokenMvpPresenter; +import org.sufficientlysecure.keychain.ui.token.ManageSecurityTokenContract.ManageSecurityTokenMvpView; +import org.sufficientlysecure.keychain.ui.token.ManageSecurityTokenFragment.StatusLine; +import org.sufficientlysecure.keychain.ui.token.PublicKeyRetrievalLoader.ContentUriRetrievalLoader; +import org.sufficientlysecure.keychain.ui.token.PublicKeyRetrievalLoader.KeyRetrievalResult; +import org.sufficientlysecure.keychain.ui.token.PublicKeyRetrievalLoader.KeyserverRetrievalLoader; +import org.sufficientlysecure.keychain.ui.token.PublicKeyRetrievalLoader.LocalKeyLookupLoader; +import org.sufficientlysecure.keychain.ui.token.PublicKeyRetrievalLoader.UriKeyRetrievalLoader; -class CreateSecurityTokenImportPresenter { +class ManageSecurityTokenPresenter implements ManageSecurityTokenMvpPresenter { private static final int LOADER_LOCAL = 0; private static final int LOADER_URI = 1; private static final int LOADER_KEYSERVER = 2; private static final int LOADER_CONTENT_URI = 3; private static final String ARG_CONTENT_URI = "content_uri"; - private Context context; - private byte[][] tokenFingerprints; - private byte[] tokenAid; - private double tokenVersion; - private String tokenUserId; + private final Context context; + private final LoaderManager loaderManager; + + private final byte[][] tokenFingerprints; + private final byte[] tokenAid; + private final String tokenUserId; private final String tokenUrl; - private LoaderManager loaderManager; - private CreateSecurityTokenImportMvpView view; + + private ManageSecurityTokenMvpView view; + private boolean searchedLocally; private boolean searchedAtUri; private boolean searchedKeyservers; @@ -62,7 +66,7 @@ class CreateSecurityTokenImportPresenter { private OperationLog log; - CreateSecurityTokenImportPresenter(Context context, byte[] tokenFingerprints, byte[] tokenAid, + ManageSecurityTokenPresenter(Context context, byte[] tokenFingerprints, byte[] tokenAid, String tokenUserId, String tokenUrl, LoaderManager loaderManager) { this.context = context.getApplicationContext(); @@ -83,10 +87,12 @@ class CreateSecurityTokenImportPresenter { this.log = new OperationLog(); } - public void setView(CreateSecurityTokenImportMvpView view) { + @Override + public void setView(ManageSecurityTokenMvpView view) { this.view = view; } + @Override public void onActivityCreated() { continueSearch(); } @@ -196,13 +202,15 @@ class CreateSecurityTokenImportPresenter { throw new IllegalArgumentException("Method can only be called with successful result!"); } - void onClickImport() { + @Override + public void onClickImport() { view.statusLineAdd(StatusLine.IMPORT); view.hideAction(); view.operationImportKey(importKeyData); } - void onImportSuccess(OperationResult result) { + @Override + public void onImportSuccess(OperationResult result) { log.add(result, 0); view.statusLineOk(); @@ -210,26 +218,30 @@ class CreateSecurityTokenImportPresenter { view.operationPromote(masterKeyId, tokenAid); } - void onImportError(OperationResult result) { + @Override + public void onImportError(OperationResult result) { log.add(result, 0); view.statusLineError(); } - void onPromoteSuccess(OperationResult result) { + @Override + public void onPromoteSuccess(OperationResult result) { log.add(result, 0); view.statusLineOk(); view.showActionViewKey(); } - void onPromoteError(OperationResult result) { + @Override + public void onPromoteError(OperationResult result) { log.add(result, 0); view.statusLineError(); } - void onClickRetry() { + @Override + public void onClickRetry() { searchedLocally = false; searchedAtUri = false; searchedKeyservers = false; @@ -239,27 +251,33 @@ class CreateSecurityTokenImportPresenter { continueSearch(); } - void onClickViewKey() { + @Override + public void onClickViewKey() { view.finishAndShowKey(masterKeyId); } - void onClickResetToken() { + @Override + public void onClickResetToken() { view.showConfirmResetDialog(); } - void onClickConfirmReset() { + @Override + public void onClickConfirmReset() { view.operationResetSecurityToken(); } - void onSecurityTokenResetSuccess() { + @Override + public void onSecurityTokenResetSuccess() { // TODO } - void onClickLoadFile() { + @Override + public void onClickLoadFile() { view.showFileSelectDialog(); } - void onFileSelected(Uri contentUri) { + @Override + public void onFileSelected(Uri contentUri) { view.resetStatusLines(); view.statusLineAdd(StatusLine.SEARCH_CONTENT_URI); @@ -268,31 +286,9 @@ class CreateSecurityTokenImportPresenter { loaderManager.restartLoader(LOADER_CONTENT_URI, args, loaderCallbacks); } - void onClickViewLog() { + @Override + public void onClickViewLog() { OperationResult result = new GenericOperationResult(GenericOperationResult.RESULT_OK, log); view.showDisplayLogActivity(result); } - - interface CreateSecurityTokenImportMvpView { - void statusLineAdd(StatusLine statusLine); - void statusLineOk(); - void statusLineError(); - void resetStatusLines(); - - void showActionImport(); - void showActionViewKey(); - void showActionRetryOrFromFile(); - void hideAction(); - - void operationImportKey(byte[] importKeyData); - void operationPromote(long masterKeyId, byte[] cardAid); - void operationResetSecurityToken(); - - void finishAndShowKey(long masterKeyId); - - void showFileSelectDialog(); - void showConfirmResetDialog(); - - void showDisplayLogActivity(OperationResult result); - } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PublicKeyRetrievalLoader.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/PublicKeyRetrievalLoader.java similarity index 93% rename from OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PublicKeyRetrievalLoader.java rename to OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/PublicKeyRetrievalLoader.java index f8287a37a..09694e0da 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/PublicKeyRetrievalLoader.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/token/PublicKeyRetrievalLoader.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package org.sufficientlysecure.keychain.ui; +package org.sufficientlysecure.keychain.ui.token; import java.io.BufferedInputStream; @@ -52,7 +52,7 @@ import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException; import org.sufficientlysecure.keychain.provider.CachedPublicKeyRing; import org.sufficientlysecure.keychain.provider.KeyRepository; import org.sufficientlysecure.keychain.provider.KeyRepository.NotFoundException; -import org.sufficientlysecure.keychain.ui.PublicKeyRetrievalLoader.KeyRetrievalResult; +import org.sufficientlysecure.keychain.ui.token.PublicKeyRetrievalLoader.KeyRetrievalResult; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.Preferences; @@ -65,7 +65,7 @@ public abstract class PublicKeyRetrievalLoader extends AsyncTaskLoader