From bfa28fcb5e023ac82df2665f7616bd9305daa589 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Thu, 31 Dec 2015 15:49:50 +0100 Subject: Upload to keyserver after editing identities --- .../keychain/ui/EditIdentitiesFragment.java | 160 ++++++++++++++++++--- .../main/res/layout/edit_identities_activity.xml | 4 +- .../main/res/layout/edit_identities_fragment.xml | 9 ++ 3 files changed, 154 insertions(+), 19 deletions(-) (limited to 'OpenKeychain') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditIdentitiesFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditIdentitiesFragment.java index 31153d7af..cfd3f3cea 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditIdentitiesFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditIdentitiesFragment.java @@ -25,6 +25,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.Messenger; +import android.support.v4.app.Fragment; import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; @@ -33,14 +34,17 @@ import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; +import android.widget.CheckBox; import android.widget.ListView; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.compatibility.DialogFragmentWorkaround; +import org.sufficientlysecure.keychain.operations.results.EditKeyResult; import org.sufficientlysecure.keychain.operations.results.OperationResult; import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType; import org.sufficientlysecure.keychain.operations.results.SingletonResult; +import org.sufficientlysecure.keychain.operations.results.UploadResult; import org.sufficientlysecure.keychain.pgp.KeyRing; import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException; import org.sufficientlysecure.keychain.provider.CachedPublicKeyRing; @@ -49,22 +53,22 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets; import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.provider.ProviderHelper.NotFoundException; import org.sufficientlysecure.keychain.service.SaveKeyringParcel; -import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; +import org.sufficientlysecure.keychain.service.UploadKeyringParcel; import org.sufficientlysecure.keychain.ui.adapter.UserIdsAdapter; import org.sufficientlysecure.keychain.ui.adapter.UserIdsAddedAdapter; -import org.sufficientlysecure.keychain.ui.base.QueueingCryptoOperationFragment; +import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper; import org.sufficientlysecure.keychain.ui.dialog.AddUserIdDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.EditUserIdDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.SetPassphraseDialogFragment; import org.sufficientlysecure.keychain.util.Log; +import org.sufficientlysecure.keychain.util.Preferences; -import java.util.Date; - -public class EditIdentitiesFragment extends QueueingCryptoOperationFragment +public class EditIdentitiesFragment extends Fragment implements LoaderManager.LoaderCallbacks { public static final String ARG_DATA_URI = "uri"; + private CheckBox mUploadKeyCheckbox; private ListView mUserIdsList; private ListView mUserIdsAddedList; private View mAddUserId; @@ -78,6 +82,9 @@ public class EditIdentitiesFragment extends QueueingCryptoOperationFragment mEditOpHelper; + private CryptoOperationHelper mUploadOpHelper; + private String mPrimaryUserId; /** @@ -98,10 +105,16 @@ public class EditIdentitiesFragment extends QueueingCryptoOperationFragment editKeyCallback + = new CryptoOperationHelper.Callback() { + @Override + public SaveKeyringParcel createOperationInput() { + return mSaveKeyringParcel; + } + + @Override + public void onCryptoOperationSuccess(EditKeyResult result) { + + if (result.mMasterKeyId != null && mUploadKeyCheckbox.isChecked()) { + // result will be displayed after upload + uploadKey(result); + return; + } + + finishWithResult(result); + } + + @Override + public void onCryptoOperationCancelled() { + + } + + @Override + public void onCryptoOperationError(EditKeyResult result) { + displayResult(result); + } + + @Override + public boolean onCryptoSetProgress(String msg, int progress, int max) { + return false; + } + }; + + mEditOpHelper = new CryptoOperationHelper<>(1, this, editKeyCallback, R.string.progress_building_key); + mEditOpHelper.cryptoOperation(); + } + + + private void uploadKey(final EditKeyResult editKeyResult) { + Activity activity = getActivity(); + // if the activity is gone at this point, there is nothing we can do! + if (activity == null) { + return; + } + + // set data uri as path to keyring + final long masterKeyId = editKeyResult.mMasterKeyId; + // upload to favorite keyserver + final String keyserver = Preferences.getPreferences(activity).getPreferredKeyserver(); + + CryptoOperationHelper.Callback callback + = new CryptoOperationHelper.Callback() { + + @Override + public UploadKeyringParcel createOperationInput() { + return new UploadKeyringParcel(keyserver, masterKeyId); + } + + @Override + public void onCryptoOperationSuccess(UploadResult result) { + handleResult(result); + } + + @Override + public void onCryptoOperationCancelled() { + + } + + @Override + public void onCryptoOperationError(UploadResult result) { + displayResult(result); + } + + public void handleResult(UploadResult result) { + editKeyResult.getLog().add(result, 0); + finishWithResult(editKeyResult); + } + + @Override + public boolean onCryptoSetProgress(String msg, int progress, int max) { + return false; + } + }; + + mUploadOpHelper = new CryptoOperationHelper<>(3, this, callback, R.string.progress_uploading); + mUploadOpHelper.cryptoOperation(); + } + /** * Closes this activity, returning a result parcel with a single error log entry. */ @@ -315,23 +438,24 @@ public class EditIdentitiesFragment extends QueueingCryptoOperationFragment finish, return result to showkey and display there! - Intent intent = new Intent(); - intent.putExtra(OperationResult.EXTRA_RESULT, result); - activity.setResult(Activity.RESULT_OK, intent); + Intent data = new Intent(); + data.putExtra(OperationResult.EXTRA_RESULT, result); + activity.setResult(Activity.RESULT_OK, data); activity.finish(); - } } diff --git a/OpenKeychain/src/main/res/layout/edit_identities_activity.xml b/OpenKeychain/src/main/res/layout/edit_identities_activity.xml index c8b0e3afc..8505f789a 100644 --- a/OpenKeychain/src/main/res/layout/edit_identities_activity.xml +++ b/OpenKeychain/src/main/res/layout/edit_identities_activity.xml @@ -1,7 +1,9 @@ + android:layout_height="match_parent" + tools:context=".ui.EditIdentitiesActivity"> + +