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