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);