Catching exception during ProgressDialog display

Also, preventing a window leak.

Bug: 3223787
Change-Id: If7023e4584b70d260aa6873bf324caeb6d4b0805
diff --git a/src/com/android/contacts/views/editor/ContactEditorFragment.java b/src/com/android/contacts/views/editor/ContactEditorFragment.java
index df329f9..ec5ef60 100644
--- a/src/com/android/contacts/views/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/views/editor/ContactEditorFragment.java
@@ -18,8 +18,8 @@
 
 import com.android.contacts.R;
 import com.android.contacts.activities.JoinContactActivity;
-import com.android.contacts.model.AccountTypes;
 import com.android.contacts.model.AccountType;
+import com.android.contacts.model.AccountTypes;
 import com.android.contacts.model.EntityDelta;
 import com.android.contacts.model.EntityDelta.ValuesDelta;
 import com.android.contacts.model.EntityDeltaList;
@@ -93,7 +93,6 @@
 import android.widget.Toast;
 
 import java.io.File;
-import java.lang.ref.WeakReference;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -1420,8 +1419,7 @@
         private static final int RESULT_FAILURE = 2;
 
         private final Context mContext;
-
-        private WeakReference<ProgressDialog> mProgress;
+        private ProgressDialog mProgress;
 
         private int mSaveMode;
         private Uri mContactLookupUri = null;
@@ -1435,8 +1433,13 @@
         /** {@inheritDoc} */
         @Override
         protected void onPreExecute(ContactEditorFragment target) {
-            mProgress = new WeakReference<ProgressDialog>(ProgressDialog.show(target.getActivity(),
-                    null, target.getActivity().getText(R.string.savingContact)));
+            try {
+                mProgress = ProgressDialog.show(target.getActivity(), null,
+                        target.getActivity().getText(R.string.savingContact));
+            } catch (Exception e) {
+                // this can happen if our view has already been closed. this can safely be
+                // ignored
+            }
 
             // Before starting this task, start an empty service to protect our
             // process from being reclaimed by the system.
@@ -1527,10 +1530,9 @@
                 Toast.makeText(mContext, R.string.contactSavedErrorToast, Toast.LENGTH_LONG).show();
             }
 
-            final ProgressDialog progress = mProgress.get();
-            if (progress != null && progress.isShowing()) {
+            if (mProgress != null && mProgress.isShowing()) {
                 try {
-                    progress.dismiss();
+                    mProgress.dismiss();
                 } catch (Exception e) {
                     // this can happen if our view has already been closed. this can safely be
                     // ignored