diff options
-rw-r--r-- | res/values/strings.xml | 3 | ||||
-rw-r--r-- | src/com/android/contacts/common/interactions/ImportExportDialogFragment.java | 59 |
2 files changed, 36 insertions, 26 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml index de7a44d1..5400eec9 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -682,6 +682,9 @@ a ren't members of any other group. [CHAR LIMIT=25] --> <!-- Action that shares visible contacts --> <string name="share_visible_contacts">Share visible contacts</string> + <!-- A framework exception (ie, transaction too large) can be thrown while attempting to share all visible contacts. If so, show this toast. --> + <string name="share_visible_contacts_failure">Failed to share visible contacts.</string> + <!-- Dialog title when selecting the bulk operation to perform from a list. [CHAR LIMIT=36] --> <string name="dialog_import_export">Import/export contacts</string> diff --git a/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java b/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java index e0daf037..791ad2d2 100644 --- a/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java +++ b/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java @@ -195,35 +195,42 @@ public class ImportExportDialogFragment extends DialogFragment } private void doShareVisibleContacts() { - // TODO move the query into a loader and do this in a background thread - final Cursor cursor = getActivity().getContentResolver().query(Contacts.CONTENT_URI, - LOOKUP_PROJECTION, Contacts.IN_VISIBLE_GROUP + "!=0", null, null); - if (cursor != null) { - try { - if (!cursor.moveToFirst()) { - Toast.makeText(getActivity(), R.string.share_error, Toast.LENGTH_SHORT).show(); - return; - } + try { + // TODO move the query into a loader and do this in a background thread + final Cursor cursor = getActivity().getContentResolver().query(Contacts.CONTENT_URI, + LOOKUP_PROJECTION, Contacts.IN_VISIBLE_GROUP + "!=0", null, null); + if (cursor != null) { + try { + if (!cursor.moveToFirst()) { + Toast.makeText(getActivity(), R.string.share_error, Toast.LENGTH_SHORT) + .show(); + return; + } - StringBuilder uriListBuilder = new StringBuilder(); - int index = 0; - do { - if (index != 0) - uriListBuilder.append(':'); - uriListBuilder.append(cursor.getString(0)); - index++; - } while (cursor.moveToNext()); - Uri uri = Uri.withAppendedPath( - Contacts.CONTENT_MULTI_VCARD_URI, - Uri.encode(uriListBuilder.toString())); + StringBuilder uriListBuilder = new StringBuilder(); + int index = 0; + do { + if (index != 0) + uriListBuilder.append(':'); + uriListBuilder.append(cursor.getString(0)); + index++; + } while (cursor.moveToNext()); + Uri uri = Uri.withAppendedPath( + Contacts.CONTENT_MULTI_VCARD_URI, + Uri.encode(uriListBuilder.toString())); - final Intent intent = new Intent(Intent.ACTION_SEND); - intent.setType(Contacts.CONTENT_VCARD_TYPE); - intent.putExtra(Intent.EXTRA_STREAM, uri); - ImplicitIntentsUtil.startActivityOutsideApp(getActivity(), intent); - } finally { - cursor.close(); + final Intent intent = new Intent(Intent.ACTION_SEND); + intent.setType(Contacts.CONTENT_VCARD_TYPE); + intent.putExtra(Intent.EXTRA_STREAM, uri); + ImplicitIntentsUtil.startActivityOutsideApp(getActivity(), intent); + } finally { + cursor.close(); + } } + } catch (Exception e) { + Log.e(TAG, "Sharing visible contacts failed", e); + Toast.makeText(getContext(), R.string.share_visible_contacts_failure, + Toast.LENGTH_SHORT).show(); } } |