mirror of
https://github.com/moparisthebest/open-keychain
synced 2024-12-26 00:48:51 -05:00
Export is cancellable now
This commit is contained in:
parent
217f4a1cef
commit
3f649d4458
@ -16,6 +16,17 @@
|
|||||||
|
|
||||||
package org.sufficientlysecure.keychain.helper;
|
package org.sufficientlysecure.keychain.helper;
|
||||||
|
|
||||||
|
import android.app.ProgressDialog;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.Message;
|
||||||
|
import android.os.Messenger;
|
||||||
|
import android.support.v7.app.ActionBarActivity;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import org.sufficientlysecure.keychain.Constants;
|
import org.sufficientlysecure.keychain.Constants;
|
||||||
import org.sufficientlysecure.keychain.Id;
|
import org.sufficientlysecure.keychain.Id;
|
||||||
import org.sufficientlysecure.keychain.R;
|
import org.sufficientlysecure.keychain.R;
|
||||||
@ -26,16 +37,6 @@ import org.sufficientlysecure.keychain.ui.dialog.DeleteKeyDialogFragment;
|
|||||||
import org.sufficientlysecure.keychain.ui.dialog.FileDialogFragment;
|
import org.sufficientlysecure.keychain.ui.dialog.FileDialogFragment;
|
||||||
import org.sufficientlysecure.keychain.util.Log;
|
import org.sufficientlysecure.keychain.util.Log;
|
||||||
|
|
||||||
import android.app.ProgressDialog;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.net.Uri;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.Handler;
|
|
||||||
import android.os.Message;
|
|
||||||
import android.os.Messenger;
|
|
||||||
import android.support.v7.app.ActionBarActivity;
|
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
public class ExportHelper {
|
public class ExportHelper {
|
||||||
protected FileDialogFragment mFileDialog;
|
protected FileDialogFragment mFileDialog;
|
||||||
protected String mExportFilename;
|
protected String mExportFilename;
|
||||||
@ -115,7 +116,7 @@ public class ExportHelper {
|
|||||||
Log.d(Constants.TAG, "exportKeys started");
|
Log.d(Constants.TAG, "exportKeys started");
|
||||||
|
|
||||||
// Send all information needed to service to export key in other thread
|
// Send all information needed to service to export key in other thread
|
||||||
Intent intent = new Intent(activity, KeychainIntentService.class);
|
final Intent intent = new Intent(activity, KeychainIntentService.class);
|
||||||
|
|
||||||
intent.setAction(KeychainIntentService.ACTION_EXPORT_KEYRING);
|
intent.setAction(KeychainIntentService.ACTION_EXPORT_KEYRING);
|
||||||
|
|
||||||
@ -135,7 +136,12 @@ public class ExportHelper {
|
|||||||
|
|
||||||
// Message is received after exporting is done in ApgService
|
// Message is received after exporting is done in ApgService
|
||||||
KeychainIntentServiceHandler exportHandler = new KeychainIntentServiceHandler(activity,
|
KeychainIntentServiceHandler exportHandler = new KeychainIntentServiceHandler(activity,
|
||||||
activity.getString(R.string.progress_exporting), ProgressDialog.STYLE_HORIZONTAL) {
|
activity.getString(R.string.progress_exporting), ProgressDialog.STYLE_HORIZONTAL, true, new DialogInterface.OnCancelListener() {
|
||||||
|
@Override
|
||||||
|
public void onCancel(DialogInterface dialogInterface) {
|
||||||
|
activity.stopService(intent);
|
||||||
|
}
|
||||||
|
}) {
|
||||||
public void handleMessage(Message message) {
|
public void handleMessage(Message message) {
|
||||||
// handle messages by standard ApgHandler first
|
// handle messages by standard ApgHandler first
|
||||||
super.handleMessage(message);
|
super.handleMessage(message);
|
||||||
|
@ -50,15 +50,28 @@ import android.os.Bundle;
|
|||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
|
|
||||||
public class PgpImportExport {
|
public class PgpImportExport {
|
||||||
|
|
||||||
|
public interface KeychainServiceListener{
|
||||||
|
public boolean hasServiceStopped();
|
||||||
|
}
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private ProgressDialogUpdater mProgress;
|
private ProgressDialogUpdater mProgress;
|
||||||
|
|
||||||
|
private KeychainServiceListener mKeychainServiceListener;
|
||||||
|
|
||||||
public PgpImportExport(Context context, ProgressDialogUpdater progress) {
|
public PgpImportExport(Context context, ProgressDialogUpdater progress) {
|
||||||
super();
|
super();
|
||||||
this.mContext = context;
|
this.mContext = context;
|
||||||
this.mProgress = progress;
|
this.mProgress = progress;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PgpImportExport(Context context, ProgressDialogUpdater progress, KeychainServiceListener keychainListener){
|
||||||
|
super();
|
||||||
|
this.mContext = context;
|
||||||
|
this.mProgress = progress;
|
||||||
|
this.mKeychainServiceListener = keychainListener;
|
||||||
|
}
|
||||||
|
|
||||||
public void updateProgress(int message, int current, int total) {
|
public void updateProgress(int message, int current, int total) {
|
||||||
if (mProgress != null) {
|
if (mProgress != null) {
|
||||||
mProgress.setProgress(message, current, total);
|
mProgress.setProgress(message, current, total);
|
||||||
@ -188,8 +201,10 @@ public class PgpImportExport {
|
|||||||
if (secretKeyRing != null) {
|
if (secretKeyRing != null) {
|
||||||
secretKeyRing.encode(arOutStream);
|
secretKeyRing.encode(arOutStream);
|
||||||
}
|
}
|
||||||
// Else if it's a public key get the PGPPublicKeyRing
|
if(mKeychainServiceListener.hasServiceStopped()==true){
|
||||||
// and encode that to the output
|
arOutStream.close();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
updateProgress(i * 100 / rowIdsSize, 100);
|
updateProgress(i * 100 / rowIdsSize, 100);
|
||||||
PGPPublicKeyRing publicKeyRing =
|
PGPPublicKeyRing publicKeyRing =
|
||||||
@ -198,6 +213,11 @@ public class PgpImportExport {
|
|||||||
if (publicKeyRing != null) {
|
if (publicKeyRing != null) {
|
||||||
publicKeyRing.encode(arOutStream);
|
publicKeyRing.encode(arOutStream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(mKeychainServiceListener.hasServiceStopped() == true){
|
||||||
|
arOutStream.close();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
arOutStream.close();
|
arOutStream.close();
|
||||||
|
@ -73,7 +73,7 @@ import android.os.RemoteException;
|
|||||||
* data from the activities or other apps, queues these intents, executes them, and stops itself
|
* data from the activities or other apps, queues these intents, executes them, and stops itself
|
||||||
* after doing them.
|
* after doing them.
|
||||||
*/
|
*/
|
||||||
public class KeychainIntentService extends IntentService implements ProgressDialogUpdater {
|
public class KeychainIntentService extends IntentService implements ProgressDialogUpdater, PgpImportExport.KeychainServiceListener {
|
||||||
|
|
||||||
/* extras that can be given by intent */
|
/* extras that can be given by intent */
|
||||||
public static final String EXTRA_MESSENGER = "messenger";
|
public static final String EXTRA_MESSENGER = "messenger";
|
||||||
@ -712,10 +712,15 @@ public class KeychainIntentService extends IntentService implements ProgressDial
|
|||||||
|
|
||||||
Bundle resultData;
|
Bundle resultData;
|
||||||
|
|
||||||
PgpImportExport pgpImportExport = new PgpImportExport(this, this);
|
PgpImportExport pgpImportExport = new PgpImportExport(this, this, this);
|
||||||
|
|
||||||
resultData = pgpImportExport
|
resultData = pgpImportExport
|
||||||
.exportKeyRings(keyRingRowIds, keyType, outStream);
|
.exportKeyRings(keyRingRowIds, keyType, outStream);
|
||||||
|
|
||||||
|
if(mIsCanceled){
|
||||||
|
boolean isDeleted = new File(outputFile).delete();
|
||||||
|
}
|
||||||
|
|
||||||
sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, resultData);
|
sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, resultData);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
sendErrorToHandler(e);
|
sendErrorToHandler(e);
|
||||||
@ -903,4 +908,9 @@ public class KeychainIntentService extends IntentService implements ProgressDial
|
|||||||
public void setProgress(int progress, int max) {
|
public void setProgress(int progress, int max) {
|
||||||
setProgress(null, progress, max);
|
setProgress(null, progress, max);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasServiceStopped() {
|
||||||
|
return mIsCanceled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user