Catch exception in starting ContactSaveService
This CL follows ag/798285 and adds try/catch blocks for all the places
that start ContactSaveService using static methods in ContactSaveService.
Bug: 23896510
Change-Id: Ie35cf0d213386a81a662777a5b37d6f3a3fc5633
diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java
index 54be5a0..0bc80e7 100755
--- a/src/com/android/contacts/ContactSaveService.java
+++ b/src/com/android/contacts/ContactSaveService.java
@@ -49,6 +49,7 @@
import android.util.Log;
import android.widget.Toast;
+import com.android.contacts.activities.ContactEditorBaseActivity;
import com.android.contacts.common.compat.CompatUtils;
import com.android.contacts.common.database.ContactUpdateUtils;
import com.android.contacts.common.model.AccountTypeManager;
@@ -174,6 +175,45 @@
sListeners.remove(listener);
}
+ /**
+ * Returns true if the ContactSaveService was started successfully and false if an exception
+ * was thrown and a Toast error message was displayed.
+ */
+ public static boolean startService(Context context, Intent intent, int saveMode) {
+ try {
+ context.startService(intent);
+ } catch (Exception exception) {
+ final int resId;
+ switch (saveMode) {
+ case ContactEditorBaseActivity.ContactEditor.SaveMode.SPLIT:
+ resId = R.string.contactUnlinkErrorToast;
+ break;
+ case ContactEditorBaseActivity.ContactEditor.SaveMode.RELOAD:
+ resId = R.string.contactJoinErrorToast;
+ break;
+ case ContactEditorBaseActivity.ContactEditor.SaveMode.CLOSE:
+ resId = R.string.contactSavedErrorToast;
+ break;
+ default:
+ resId = R.string.contactGenericErrorToast;
+ }
+ Toast.makeText(context, resId, Toast.LENGTH_SHORT).show();
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Utility method that starts service and handles exception.
+ */
+ public static void startService(Context context, Intent intent) {
+ try {
+ context.startService(intent);
+ } catch (Exception exception) {
+ Toast.makeText(context, R.string.contactGenericErrorToast, Toast.LENGTH_SHORT).show();
+ }
+ }
+
@Override
public Object getSystemService(String name) {
Object service = super.getSystemService(name);
diff --git a/src/com/android/contacts/activities/AttachPhotoActivity.java b/src/com/android/contacts/activities/AttachPhotoActivity.java
index 9dad2e7..1abbecf 100644
--- a/src/com/android/contacts/activities/AttachPhotoActivity.java
+++ b/src/com/android/contacts/activities/AttachPhotoActivity.java
@@ -337,7 +337,7 @@
raw.getRawContactId() != null ? raw.getRawContactId() : -1,
mCroppedPhotoUri
);
- startService(intent);
+ ContactSaveService.startService(this, intent);
finish();
}
diff --git a/src/com/android/contacts/editor/CompactContactEditorFragment.java b/src/com/android/contacts/editor/CompactContactEditorFragment.java
index 3f401ee..ecc8f2b 100644
--- a/src/com/android/contacts/editor/CompactContactEditorFragment.java
+++ b/src/com/android/contacts/editor/CompactContactEditorFragment.java
@@ -165,28 +165,7 @@
((Activity) mContext).getClass(),
CompactContactEditorActivity.ACTION_SAVE_COMPLETED, mUpdatedPhotos,
JOIN_CONTACT_ID_EXTRA_KEY, joinContactId);
- try {
- mContext.startService(intent);
- } catch (Exception exception) {
- final int resId;
- switch (saveMode) {
- case ContactEditorBaseActivity.ContactEditor.SaveMode.SPLIT:
- resId = R.string.contactUnlinkErrorToast;
- break;
- case ContactEditorBaseActivity.ContactEditor.SaveMode.RELOAD:
- resId = R.string.contactJoinErrorToast;
- break;
- case ContactEditorBaseActivity.ContactEditor.SaveMode.CLOSE:
- resId = R.string.contactSavedErrorToast;
- break;
- default:
- resId = R.string.contactGenericErrorToast;
- }
- Toast.makeText(mContext, resId, Toast.LENGTH_SHORT).show();
- onCancelEditConfirmed();
- return false;
- }
- return true;
+ return startSaveService(mContext, intent, saveMode);
}
@Override
diff --git a/src/com/android/contacts/editor/ContactEditorBaseFragment.java b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
index 0d9b3a9..181bc44 100644
--- a/src/com/android/contacts/editor/ContactEditorBaseFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
@@ -978,6 +978,15 @@
*/
abstract protected boolean doSaveAction(int saveMode, Long joinContactId);
+ protected boolean startSaveService(Context context, Intent intent, int saveMode) {
+ final boolean result = ContactSaveService.startService(
+ context, intent, saveMode);
+ if (!result) {
+ onCancelEditConfirmed();
+ }
+ return result;
+ }
+
//
// State accessor methods
//
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index 38e43ae..146bc4c 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -426,8 +426,7 @@
SAVE_MODE_EXTRA_KEY, saveMode, isEditingUserProfile(),
((Activity) mContext).getClass(), ContactEditorActivity.ACTION_SAVE_COMPLETED,
mUpdatedPhotos, JOIN_CONTACT_ID_EXTRA_KEY, joinContactId);
- mContext.startService(intent);
- return true;
+ return startSaveService(mContext, intent, saveMode);
}
@Override
diff --git a/src/com/android/contacts/quickcontact/InvisibleContactUtil.java b/src/com/android/contacts/quickcontact/InvisibleContactUtil.java
index 706cfdb..fa1132b 100644
--- a/src/com/android/contacts/quickcontact/InvisibleContactUtil.java
+++ b/src/com/android/contacts/quickcontact/InvisibleContactUtil.java
@@ -96,7 +96,7 @@
contactDeltaList, "", 0, false, QuickContactActivity.class,
Intent.ACTION_VIEW, null, /* joinContactIdExtraKey =*/ null,
/* joinContactId =*/ null);
- context.startService(intent);
+ ContactSaveService.startService(context, intent);
}
/** return default group id or -1 if no group or several groups are marked as default */