Use operation helper for move to card
This commit is contained in:
parent
88f8a38854
commit
79f37d3267
|
@ -18,13 +18,11 @@
|
||||||
package org.sufficientlysecure.keychain.ui;
|
package org.sufficientlysecure.keychain.ui;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.ProgressDialog;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Message;
|
import android.support.v4.app.Fragment;
|
||||||
import android.os.Messenger;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
@ -43,21 +41,17 @@ import org.sufficientlysecure.keychain.provider.CachedPublicKeyRing;
|
||||||
import org.sufficientlysecure.keychain.provider.KeychainContract;
|
import org.sufficientlysecure.keychain.provider.KeychainContract;
|
||||||
import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
||||||
import org.sufficientlysecure.keychain.service.ExportKeyringParcel;
|
import org.sufficientlysecure.keychain.service.ExportKeyringParcel;
|
||||||
import org.sufficientlysecure.keychain.service.KeychainService;
|
|
||||||
import org.sufficientlysecure.keychain.service.SaveKeyringParcel;
|
import org.sufficientlysecure.keychain.service.SaveKeyringParcel;
|
||||||
import org.sufficientlysecure.keychain.service.SaveKeyringParcel.Algorithm;
|
import org.sufficientlysecure.keychain.service.SaveKeyringParcel.Algorithm;
|
||||||
import org.sufficientlysecure.keychain.service.SaveKeyringParcel.ChangeUnlockParcel;
|
import org.sufficientlysecure.keychain.service.SaveKeyringParcel.ChangeUnlockParcel;
|
||||||
import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
|
|
||||||
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
|
|
||||||
import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction;
|
import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction;
|
||||||
import org.sufficientlysecure.keychain.ui.base.CryptoOperationFragment;
|
|
||||||
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
|
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
|
||||||
import org.sufficientlysecure.keychain.util.Log;
|
import org.sufficientlysecure.keychain.util.Log;
|
||||||
import org.sufficientlysecure.keychain.util.Preferences;
|
import org.sufficientlysecure.keychain.util.Preferences;
|
||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
public class CreateKeyFinalFragment extends CryptoOperationFragment<SaveKeyringParcel, OperationResult> {
|
public class CreateKeyFinalFragment extends Fragment {
|
||||||
|
|
||||||
public static final int REQUEST_EDIT_KEY = 0x00008007;
|
public static final int REQUEST_EDIT_KEY = 0x00008007;
|
||||||
|
|
||||||
|
@ -73,6 +67,7 @@ public class CreateKeyFinalFragment extends CryptoOperationFragment<SaveKeyringP
|
||||||
|
|
||||||
private CryptoOperationHelper<ExportKeyringParcel, ExportResult> mUploadOpHelper;
|
private CryptoOperationHelper<ExportKeyringParcel, ExportResult> mUploadOpHelper;
|
||||||
private CryptoOperationHelper<SaveKeyringParcel, EditKeyResult> mCreateOpHelper;
|
private CryptoOperationHelper<SaveKeyringParcel, EditKeyResult> mCreateOpHelper;
|
||||||
|
private CryptoOperationHelper<SaveKeyringParcel, EditKeyResult> mMoveToCardOpHelper;
|
||||||
|
|
||||||
public static CreateKeyFinalFragment newInstance() {
|
public static CreateKeyFinalFragment newInstance() {
|
||||||
CreateKeyFinalFragment frag = new CreateKeyFinalFragment();
|
CreateKeyFinalFragment frag = new CreateKeyFinalFragment();
|
||||||
|
@ -150,6 +145,16 @@ public class CreateKeyFinalFragment extends CryptoOperationFragment<SaveKeyringP
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
|
if (mCreateOpHelper != null) {
|
||||||
|
mCreateOpHelper.handleActivityResult(requestCode, resultCode, data);
|
||||||
|
}
|
||||||
|
if (mMoveToCardOpHelper != null) {
|
||||||
|
mMoveToCardOpHelper.handleActivityResult(requestCode, resultCode, data);
|
||||||
|
}
|
||||||
|
if (mUploadOpHelper != null) {
|
||||||
|
mUploadOpHelper.handleActivityResult(requestCode, resultCode, data);
|
||||||
|
}
|
||||||
|
|
||||||
switch (requestCode) {
|
switch (requestCode) {
|
||||||
case REQUEST_EDIT_KEY: {
|
case REQUEST_EDIT_KEY: {
|
||||||
if (resultCode == Activity.RESULT_OK) {
|
if (resultCode == Activity.RESULT_OK) {
|
||||||
|
@ -172,6 +177,7 @@ public class CreateKeyFinalFragment extends CryptoOperationFragment<SaveKeyringP
|
||||||
|
|
||||||
if (mSaveKeyringParcel == null) {
|
if (mSaveKeyringParcel == null) {
|
||||||
mSaveKeyringParcel = new SaveKeyringParcel();
|
mSaveKeyringParcel = new SaveKeyringParcel();
|
||||||
|
|
||||||
if (createKeyActivity.mUseSmartCardSettings) {
|
if (createKeyActivity.mUseSmartCardSettings) {
|
||||||
mSaveKeyringParcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(Algorithm.RSA,
|
mSaveKeyringParcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(Algorithm.RSA,
|
||||||
2048, null, KeyFlags.SIGN_DATA | KeyFlags.CERTIFY_OTHER, 0L));
|
2048, null, KeyFlags.SIGN_DATA | KeyFlags.CERTIFY_OTHER, 0L));
|
||||||
|
@ -223,10 +229,7 @@ public class CreateKeyFinalFragment extends CryptoOperationFragment<SaveKeyringP
|
||||||
public void onCryptoOperationSuccess(EditKeyResult result) {
|
public void onCryptoOperationSuccess(EditKeyResult result) {
|
||||||
|
|
||||||
if (createKeyActivity.mUseSmartCardSettings) {
|
if (createKeyActivity.mUseSmartCardSettings) {
|
||||||
// save key id in between
|
moveToCard(result);
|
||||||
mSaveKeyringParcel.mMasterKeyId = result.mMasterKeyId;
|
|
||||||
// calls cryptoOperation corresponding to moveToCard
|
|
||||||
cryptoOperation(new CryptoInputParcel());
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -264,28 +267,26 @@ public class CreateKeyFinalFragment extends CryptoOperationFragment<SaveKeyringP
|
||||||
mCreateOpHelper.cryptoOperation();
|
mCreateOpHelper.cryptoOperation();
|
||||||
}
|
}
|
||||||
|
|
||||||
// currently only used for moveToCard
|
private void moveToCard(final EditKeyResult saveKeyResult) {
|
||||||
@Override
|
|
||||||
public SaveKeyringParcel createOperationInput() {
|
|
||||||
CachedPublicKeyRing key = (new ProviderHelper(getActivity()))
|
CachedPublicKeyRing key = (new ProviderHelper(getActivity()))
|
||||||
.getCachedPublicKeyRing(mSaveKeyringParcel.mMasterKeyId);
|
.getCachedPublicKeyRing(saveKeyResult.mMasterKeyId);
|
||||||
|
|
||||||
// overwrite mSaveKeyringParcel!
|
final SaveKeyringParcel changeKeyringParcel;
|
||||||
try {
|
try {
|
||||||
mSaveKeyringParcel = new SaveKeyringParcel(key.getMasterKeyId(), key.getFingerprint());
|
changeKeyringParcel = new SaveKeyringParcel(key.getMasterKeyId(), key.getFingerprint());
|
||||||
} catch (PgpKeyNotFoundException e) {
|
} catch (PgpKeyNotFoundException e) {
|
||||||
Log.e(Constants.TAG, "Key that should be moved to YubiKey not found in database!");
|
Log.e(Constants.TAG, "Key that should be moved to YubiKey not found in database!");
|
||||||
return null;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Cursor cursor = getActivity().getContentResolver().query(
|
Cursor cursor = getActivity().getContentResolver().query(
|
||||||
KeychainContract.Keys.buildKeysUri(mSaveKeyringParcel.mMasterKeyId),
|
KeychainContract.Keys.buildKeysUri(changeKeyringParcel.mMasterKeyId),
|
||||||
new String[]{KeychainContract.Keys.KEY_ID,}, null, null, null
|
new String[]{KeychainContract.Keys.KEY_ID,}, null, null, null
|
||||||
);
|
);
|
||||||
try {
|
try {
|
||||||
while (cursor != null && cursor.moveToNext()) {
|
while (cursor != null && cursor.moveToNext()) {
|
||||||
long subkeyId = cursor.getLong(0);
|
long subkeyId = cursor.getLong(0);
|
||||||
mSaveKeyringParcel.getOrCreateSubkeyChange(subkeyId).mMoveKeyToCard = true;
|
changeKeyringParcel.getOrCreateSubkeyChange(subkeyId).mMoveKeyToCard = true;
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
if (cursor != null) {
|
if (cursor != null) {
|
||||||
|
@ -293,17 +294,33 @@ public class CreateKeyFinalFragment extends CryptoOperationFragment<SaveKeyringP
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return mSaveKeyringParcel;
|
CryptoOperationHelper.Callback<SaveKeyringParcel, EditKeyResult> callback
|
||||||
|
= new CryptoOperationHelper.Callback<SaveKeyringParcel, EditKeyResult>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SaveKeyringParcel createOperationInput() {
|
||||||
|
return changeKeyringParcel;
|
||||||
}
|
}
|
||||||
|
|
||||||
// currently only used for moveToCard
|
|
||||||
@Override
|
@Override
|
||||||
public void onCryptoOperationSuccess(OperationResult result) {
|
public void onCryptoOperationSuccess(EditKeyResult result) {
|
||||||
EditKeyResult editResult = (EditKeyResult) result;
|
handleResult(result);
|
||||||
|
}
|
||||||
|
|
||||||
if (editResult.mMasterKeyId != null && mUploadCheckbox.isChecked()) {
|
@Override
|
||||||
|
public void onCryptoOperationCancelled() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCryptoOperationError(EditKeyResult result) {
|
||||||
|
handleResult(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handleResult(EditKeyResult result) {
|
||||||
|
if (result.mMasterKeyId != null && mUploadCheckbox.isChecked()) {
|
||||||
// result will be displayed after upload
|
// result will be displayed after upload
|
||||||
uploadKey(editResult);
|
uploadKey(result);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -313,7 +330,17 @@ public class CreateKeyFinalFragment extends CryptoOperationFragment<SaveKeyringP
|
||||||
getActivity().finish();
|
getActivity().finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO move into EditKeyOperation
|
@Override
|
||||||
|
public boolean onCryptoSetProgress(String msg, int progress, int max) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
mMoveToCardOpHelper = new CryptoOperationHelper<>(this, callback, R.string.progress_modify);
|
||||||
|
mMoveToCardOpHelper.cryptoOperation();
|
||||||
|
}
|
||||||
|
|
||||||
private void uploadKey(final EditKeyResult saveKeyResult) {
|
private void uploadKey(final EditKeyResult saveKeyResult) {
|
||||||
// set data uri as path to keyring
|
// set data uri as path to keyring
|
||||||
final Uri blobUri = KeychainContract.KeyRings.buildUnifiedKeyRingUri(
|
final Uri blobUri = KeychainContract.KeyRings.buildUnifiedKeyRingUri(
|
||||||
|
|
Loading…
Reference in a new issue