From 91a2ecb15ce5acd720c8f23c3a09e60aad2baa1a Mon Sep 17 00:00:00 2001
From: Jessica Yuen <jyuen@ualberta.ca>
Date: Sun, 2 Mar 2014 17:33:21 -0500
Subject: [PATCH] #226: Activity no longer closes if progress is canceled for
 key creation in EditKeyActivity

---
 .../service/KeychainIntentServiceHandler.java      |  7 ++++---
 .../keychain/ui/EditKeyActivity.java               |  2 +-
 .../ui/dialog/DeleteFileDialogFragment.java        |  2 +-
 .../keychain/ui/dialog/ProgressDialogFragment.java | 14 ++++++++++----
 .../keychain/ui/widget/SectionView.java            |  2 +-
 5 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java
index 530bbc7ac..5711be596 100644
--- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java
+++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java
@@ -57,14 +57,15 @@ public class KeychainIntentServiceHandler extends Handler {
     }
 
     public KeychainIntentServiceHandler(Activity activity, int progressDialogMessageId, int progressDialogStyle) {
-        this(activity, progressDialogMessageId, progressDialogStyle, false);
+        this(activity, progressDialogMessageId, progressDialogStyle, false, false);
     }
 
     public KeychainIntentServiceHandler(Activity activity, int progressDialogMessageId,
-                                        int progressDialogStyle, boolean cancelable) {
+                                        int progressDialogStyle, boolean cancelable,
+                                        boolean finishActivityOnCancel) {
         this.mActivity = activity;
         this.mProgressDialogFragment = ProgressDialogFragment.newInstance(progressDialogMessageId,
-                progressDialogStyle, cancelable);
+                progressDialogStyle, cancelable, finishActivityOnCancel);
     }
 
     public void showProgressDialog(FragmentActivity activity) {
diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyActivity.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyActivity.java
index cb76e37c6..09b258fcb 100644
--- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyActivity.java
+++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyActivity.java
@@ -185,7 +185,7 @@ public class EditKeyActivity extends ActionBarActivity {
 
                     // Message is received after generating is done in ApgService
                     KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(
-                            this, R.string.progress_generating, ProgressDialog.STYLE_SPINNER, true) {
+                            this, R.string.progress_generating, ProgressDialog.STYLE_SPINNER, true, true) {
 
                         @Override
                         public void handleMessage(Message message) {
diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java
index 8d428edd6..dc4384886 100644
--- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java
+++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java
@@ -83,7 +83,7 @@ public class DeleteFileDialogFragment extends DialogFragment {
                 intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
 
                 ProgressDialogFragment deletingDialog = ProgressDialogFragment.newInstance(
-                        R.string.progress_deleting_securely, ProgressDialog.STYLE_HORIZONTAL, false);
+                        R.string.progress_deleting_securely, ProgressDialog.STYLE_HORIZONTAL, false, false);
 
                 // Message is received after deleting is done in ApgService
                 KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(activity, deletingDialog) {
diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/ProgressDialogFragment.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/ProgressDialogFragment.java
index cac257c85..0bfd4185e 100644
--- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/ProgressDialogFragment.java
+++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/ProgressDialogFragment.java
@@ -32,6 +32,7 @@ public class ProgressDialogFragment extends DialogFragment {
     private static final String ARG_MESSAGE_ID = "message_id";
     private static final String ARG_STYLE = "style";
     private static final String ARG_CANCELABLE = "cancelable";
+    private static final String ARG_FINISH_ON_CANCEL = "finish_activity_on_cancel";
 
     /**
      * Creates new instance of this fragment
@@ -41,13 +42,14 @@ public class ProgressDialogFragment extends DialogFragment {
      * @param cancelable
      * @return
      */
-    public static ProgressDialogFragment newInstance(int messageId, int style,
-                                                     boolean cancelable) {
+    public static ProgressDialogFragment newInstance(int messageId, int style, boolean cancelable,
+                                                     boolean finishActivityOnCancel) {
         ProgressDialogFragment frag = new ProgressDialogFragment();
         Bundle args = new Bundle();
         args.putInt(ARG_MESSAGE_ID, messageId);
         args.putInt(ARG_STYLE, style);
         args.putBoolean(ARG_CANCELABLE, cancelable);
+        args.putBoolean(ARG_FINISH_ON_CANCEL, finishActivityOnCancel);
 
         frag.setArguments(args);
         return frag;
@@ -118,8 +120,12 @@ public class ProgressDialogFragment extends DialogFragment {
                 @Override
                 public void onClick(DialogInterface dialog, int which) {
                     dialog.cancel();
-                    activity.setResult(Activity.RESULT_CANCELED);
-                    activity.finish();
+
+                    boolean finishActivity = getArguments().getBoolean(ARG_FINISH_ON_CANCEL);
+                    if (finishActivity) {
+                        activity.setResult(Activity.RESULT_CANCELED);
+                        activity.finish();
+                    }
                 }
             });
         }
diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SectionView.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SectionView.java
index 038b8a613..89d1e187c 100644
--- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SectionView.java
+++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SectionView.java
@@ -238,7 +238,7 @@ public class SectionView extends LinearLayout implements OnClickListener, Editor
 
         // show progress dialog
         mGeneratingDialog = ProgressDialogFragment.newInstance(R.string.progress_generating,
-                ProgressDialog.STYLE_SPINNER, true);
+                ProgressDialog.STYLE_SPINNER, true, false);
 
         // Message is received after generating is done in ApgService
         KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(mActivity,