migrated consolidation

This commit is contained in:
Adithya Abraham Philip
2015-06-24 03:51:53 +05:30
parent 6f3be84c43
commit b33004a2f5
6 changed files with 141 additions and 114 deletions

View File

@@ -0,0 +1,27 @@
package org.sufficientlysecure.keychain.operations;
import android.content.Context;
import org.sufficientlysecure.keychain.operations.results.ConsolidateResult;
import org.sufficientlysecure.keychain.pgp.Progressable;
import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.service.ConsolidateInputParcel;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
public class ConsolidateOperation extends BaseOperation<ConsolidateInputParcel> {
public ConsolidateOperation(Context context, ProviderHelper providerHelper, Progressable
progressable) {
super(context, providerHelper, progressable);
}
@Override
public ConsolidateResult execute(ConsolidateInputParcel consolidateInputParcel,
CryptoInputParcel cryptoInputParcel) {
if (consolidateInputParcel.mConsolidateRecovery) {
return mProviderHelper.consolidateDatabaseStep2(mProgressable);
} else {
return mProviderHelper.consolidateDatabaseStep1(mProgressable);
}
}
}

View File

@@ -0,0 +1,39 @@
package org.sufficientlysecure.keychain.service;
import android.os.Parcel;
import android.os.Parcelable;
public class ConsolidateInputParcel implements Parcelable {
public boolean mConsolidateRecovery;
public ConsolidateInputParcel(boolean consolidateRecovery) {
mConsolidateRecovery = consolidateRecovery;
}
protected ConsolidateInputParcel(Parcel in) {
mConsolidateRecovery = in.readByte() != 0x00;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeByte((byte) (mConsolidateRecovery ? 0x01 : 0x00));
}
public static final Parcelable.Creator<ConsolidateInputParcel> CREATOR = new Parcelable.Creator<ConsolidateInputParcel>() {
@Override
public ConsolidateInputParcel createFromParcel(Parcel in) {
return new ConsolidateInputParcel(in);
}
@Override
public ConsolidateInputParcel[] newArray(int size) {
return new ConsolidateInputParcel[size];
}
};
}

View File

@@ -113,6 +113,9 @@ public class KeychainNewService extends Service implements Progressable {
|| inputParcel instanceof ExportKeyringParcel){ || inputParcel instanceof ExportKeyringParcel){
op = new ImportExportOperation(outerThis, new ProviderHelper(outerThis), op = new ImportExportOperation(outerThis, new ProviderHelper(outerThis),
outerThis, mActionCanceled); outerThis, mActionCanceled);
} else if (inputParcel instanceof ConsolidateInputParcel) {
op = new ConsolidateOperation(outerThis, new ProviderHelper(outerThis),
outerThis);
} else { } else {
return; return;
} }

View File

@@ -37,10 +37,7 @@ import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.keyimport.HkpKeyserver; import org.sufficientlysecure.keychain.keyimport.HkpKeyserver;
import org.sufficientlysecure.keychain.keyimport.Keyserver; import org.sufficientlysecure.keychain.keyimport.Keyserver;
import org.sufficientlysecure.keychain.keyimport.ParcelableKeyRing; import org.sufficientlysecure.keychain.keyimport.ParcelableKeyRing;
import org.sufficientlysecure.keychain.operations.DeleteOperation; import org.sufficientlysecure.keychain.operations.*;
import org.sufficientlysecure.keychain.operations.EditKeyOperation;
import org.sufficientlysecure.keychain.operations.ImportExportOperation;
import org.sufficientlysecure.keychain.operations.PromoteKeyOperation;
import org.sufficientlysecure.keychain.operations.results.ConsolidateResult; import org.sufficientlysecure.keychain.operations.results.ConsolidateResult;
import org.sufficientlysecure.keychain.operations.results.DecryptVerifyResult; import org.sufficientlysecure.keychain.operations.results.DecryptVerifyResult;
import org.sufficientlysecure.keychain.operations.results.DeleteResult; import org.sufficientlysecure.keychain.operations.results.DeleteResult;
@@ -157,21 +154,6 @@ public class KeychainService extends Service implements Progressable {
// executeServiceMethod action from extra bundle // executeServiceMethod action from extra bundle
switch (action) { switch (action) {
case ACTION_CONSOLIDATE: {
// Operation
ConsolidateResult result;
if (data.containsKey(CONSOLIDATE_RECOVERY) && data.getBoolean(CONSOLIDATE_RECOVERY)) {
result = providerHelper.consolidateDatabaseStep2(KeychainService.this);
} else {
result = providerHelper.consolidateDatabaseStep1(KeychainService.this);
}
// Result
sendMessageToHandler(MessageStatus.OKAY, result);
break;
}
case ACTION_VERIFY_KEYBASE_PROOF: { case ACTION_VERIFY_KEYBASE_PROOF: {
try { try {

View File

@@ -17,25 +17,27 @@
package org.sufficientlysecure.keychain.ui; package org.sufficientlysecure.keychain.ui;
import android.app.ProgressDialog;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.os.Message;
import android.os.Messenger;
import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentActivity;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.service.KeychainService; import org.sufficientlysecure.keychain.operations.results.ConsolidateResult;
import org.sufficientlysecure.keychain.service.ServiceProgressHandler; import org.sufficientlysecure.keychain.service.ConsolidateInputParcel;
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
/** /**
* We can not directly create a dialog on the application context. * We can not directly create a dialog on the application context.
* This activity encapsulates a DialogFragment to emulate a dialog. * This activity encapsulates a DialogFragment to emulate a dialog.
*/ */
public class ConsolidateDialogActivity extends FragmentActivity { public class ConsolidateDialogActivity extends FragmentActivity
implements CryptoOperationHelper.Callback<ConsolidateInputParcel, ConsolidateResult> {
public static final String EXTRA_CONSOLIDATE_RECOVERY = "consolidate_recovery"; public static final String EXTRA_CONSOLIDATE_RECOVERY = "consolidate_recovery";
private CryptoOperationHelper<ConsolidateInputParcel, ConsolidateResult> mConsolidateOpHelper;
private boolean mRecovery;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@@ -48,55 +50,40 @@ public class ConsolidateDialogActivity extends FragmentActivity {
} }
private void consolidateRecovery(boolean recovery) { private void consolidateRecovery(boolean recovery) {
// Message is received after importing is done in KeychainService
ServiceProgressHandler saveHandler = new ServiceProgressHandler(this) {
@Override
public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message);
if (message.arg1 == MessageStatus.OKAY.ordinal()) { mRecovery = recovery;
/* don't care about the results (for now?)
// get returned data bundle mConsolidateOpHelper = new CryptoOperationHelper<>(this, this, R.string.progress_importing);
Bundle returnData = message.getInputData(); mConsolidateOpHelper.cryptoOperation();
if (returnData == null) {
return;
}
final ConsolidateResult result =
returnData.getParcelable(KeychainService.RESULT_CONSOLIDATE);
if (result == null) {
return;
}
result.createNotify(ConsolidateDialogActivity.this).show();
*/
ConsolidateDialogActivity.this.finish();
}
}
};
// Send all information needed to service to import key in other thread
Intent intent = new Intent(this, KeychainService.class);
intent.setAction(KeychainService.ACTION_CONSOLIDATE);
// fill values for this action
Bundle data = new Bundle();
data.putBoolean(KeychainService.CONSOLIDATE_RECOVERY, recovery);
intent.putExtra(KeychainService.EXTRA_DATA, data);
// Create a new Messenger for the communication back
Messenger messenger = new Messenger(saveHandler);
intent.putExtra(KeychainService.EXTRA_MESSENGER, messenger);
// show progress dialog
saveHandler.showProgressDialog(
getString(R.string.progress_importing),
ProgressDialog.STYLE_HORIZONTAL, false
);
// start service with intent
startService(intent);
} }
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (mConsolidateOpHelper != null) {
mConsolidateOpHelper.handleActivityResult(requestCode, resultCode, data);
}
}
@Override
public ConsolidateInputParcel createOperationInput() {
return new ConsolidateInputParcel(mRecovery);
}
@Override
public void onCryptoOperationSuccess(ConsolidateResult result) {
// don't care about result (for now?)
ConsolidateDialogActivity.this.finish();
}
@Override
public void onCryptoOperationCancelled() {
}
@Override
public void onCryptoOperationError(ConsolidateResult result) {
// don't care about result (for now?)
ConsolidateDialogActivity.this.finish();
}
} }

View File

@@ -64,10 +64,7 @@ import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.provider.KeychainDatabase; import org.sufficientlysecure.keychain.provider.KeychainDatabase;
import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.service.ImportKeyringParcel; import org.sufficientlysecure.keychain.service.*;
import org.sufficientlysecure.keychain.service.KeychainService;
import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
import org.sufficientlysecure.keychain.service.PassphraseCacheService;
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper; import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
import org.sufficientlysecure.keychain.ui.dialog.DeleteKeyDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.DeleteKeyDialogFragment;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
@@ -115,6 +112,9 @@ public class KeyListFragment extends LoaderFragment
private String mKeyserver; private String mKeyserver;
private CryptoOperationHelper<ImportKeyringParcel, ImportKeyResult> mImportOpHelper; private CryptoOperationHelper<ImportKeyringParcel, ImportKeyResult> mImportOpHelper;
// for ConsolidateOperation
private CryptoOperationHelper<ConsolidateInputParcel, ConsolidateResult> mConsolidateOpHelper;
// This ids for multiple key export. // This ids for multiple key export.
private ArrayList<Long> mIdsForRepeatAskPassphrase; private ArrayList<Long> mIdsForRepeatAskPassphrase;
// This index for remembering the number of master key. // This index for remembering the number of master key.
@@ -607,51 +607,35 @@ public class KeyListFragment extends LoaderFragment
} }
private void consolidate() { private void consolidate() {
// Message is received after importing is done in KeychainService
ServiceProgressHandler saveHandler = new ServiceProgressHandler(getActivity()) { CryptoOperationHelper.Callback<ConsolidateInputParcel, ConsolidateResult> callback
= new CryptoOperationHelper.Callback<ConsolidateInputParcel, ConsolidateResult>() {
@Override @Override
public void handleMessage(Message message) { public ConsolidateInputParcel createOperationInput() {
// handle messages by standard KeychainIntentServiceHandler first return new ConsolidateInputParcel(false); // we want to perform a full consolidate
super.handleMessage(message); }
if (message.arg1 == MessageStatus.OKAY.ordinal()) { @Override
// get returned data bundle public void onCryptoOperationSuccess(ConsolidateResult result) {
Bundle returnData = message.getData(); result.createNotify(getActivity()).show();
if (returnData == null) { }
return;
}
final ConsolidateResult result =
returnData.getParcelable(OperationResult.EXTRA_RESULT);
if (result == null) {
return;
}
result.createNotify(getActivity()).show(); @Override
} public void onCryptoOperationCancelled() {
}
@Override
public void onCryptoOperationError(ConsolidateResult result) {
result.createNotify(getActivity()).show();
} }
}; };
// Send all information needed to service to import key in other thread mConsolidateOpHelper =
Intent intent = new Intent(getActivity(), KeychainService.class); new CryptoOperationHelper<>(this, callback, R.string.progress_importing);
intent.setAction(KeychainService.ACTION_CONSOLIDATE); mConsolidateOpHelper.cryptoOperation();
// fill values for this action
Bundle data = new Bundle();
intent.putExtra(KeychainService.EXTRA_DATA, data);
// Create a new Messenger for the communication back
Messenger messenger = new Messenger(saveHandler);
intent.putExtra(KeychainService.EXTRA_MESSENGER, messenger);
// show progress dialog
saveHandler.showProgressDialog(
getString(R.string.progress_importing),
ProgressDialog.STYLE_HORIZONTAL, false);
// start service with intent
getActivity().startService(intent);
} }
private void showMultiExportDialog(long[] masterKeyIds) { private void showMultiExportDialog(long[] masterKeyIds) {
@@ -693,6 +677,11 @@ public class KeyListFragment extends LoaderFragment
if (mImportOpHelper != null) { if (mImportOpHelper != null) {
mImportOpHelper.handleActivityResult(requestCode, resultCode, data); mImportOpHelper.handleActivityResult(requestCode, resultCode, data);
} }
if (mConsolidateOpHelper != null) {
mConsolidateOpHelper.handleActivityResult(requestCode, resultCode, data);
}
if (requestCode == REQUEST_REPEAT_PASSPHRASE) { if (requestCode == REQUEST_REPEAT_PASSPHRASE) {
if (resultCode != Activity.RESULT_OK) { if (resultCode != Activity.RESULT_OK) {
return; return;