1863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton/* 2863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Copyright (C) 2009 The Android Open Source Project 3863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * 4863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Licensed under the Apache License, Version 2.0 (the "License"); 5863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * you may not use this file except in compliance with the License. 6863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * You may obtain a copy of the License at 7863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * 8863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * http://www.apache.org/licenses/LICENSE-2.0 9863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * 10863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Unless required by applicable law or agreed to in writing, software 11863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * distributed under the License is distributed on an "AS IS" BASIS, 12863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * See the License for the specific language governing permissions and 14863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * limitations under the License. 15863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 16863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 17863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonpackage com.android.loaderapp.util; 18863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 19863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 20863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 21863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.content.ContentResolver; 22863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.content.ContentUris; 23863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.content.ContentValues; 24863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.content.Context; 25863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.content.Intent; 26863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.database.Cursor; 27863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.graphics.Bitmap; 28863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.graphics.BitmapFactory; 29863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.net.Uri; 30863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.provider.ContactsContract.Contacts; 31863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.provider.ContactsContract.Data; 32863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.provider.ContactsContract.RawContacts; 33863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.provider.ContactsContract.CommonDataKinds.Email; 34863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.provider.ContactsContract.CommonDataKinds.Im; 35863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.provider.ContactsContract.CommonDataKinds.Organization; 36863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.provider.ContactsContract.CommonDataKinds.Phone; 37863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.provider.ContactsContract.CommonDataKinds.Photo; 38863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.provider.ContactsContract.CommonDataKinds.StructuredPostal; 39863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.telephony.PhoneNumberUtils; 40863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.text.TextUtils; 41863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 42863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport java.util.ArrayList; 43863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 44863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonpublic class ContactsUtils { 45863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton private static final String TAG = "ContactsUtils"; 46863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 47863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Build the display title for the {@link Data#CONTENT_URI} entry in the 48863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * provided cursor, assuming the given mimeType. 49863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 50863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public static final CharSequence getDisplayLabel(Context context, 51863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton String mimeType, Cursor cursor) { 52863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton // Try finding the type and label for this mimetype 53863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton int colType; 54863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton int colLabel; 55863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 56863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (Phone.CONTENT_ITEM_TYPE.equals(mimeType) 57863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton || Constants.MIME_SMS_ADDRESS.equals(mimeType)) { 58863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton // Reset to phone mimetype so we generate a label for SMS case 59863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton mimeType = Phone.CONTENT_ITEM_TYPE; 60863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton colType = cursor.getColumnIndex(Phone.TYPE); 61863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton colLabel = cursor.getColumnIndex(Phone.LABEL); 62863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } else if (Email.CONTENT_ITEM_TYPE.equals(mimeType)) { 63863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton colType = cursor.getColumnIndex(Email.TYPE); 64863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton colLabel = cursor.getColumnIndex(Email.LABEL); 65863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } else if (StructuredPostal.CONTENT_ITEM_TYPE.equals(mimeType)) { 66863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton colType = cursor.getColumnIndex(StructuredPostal.TYPE); 67863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton colLabel = cursor.getColumnIndex(StructuredPostal.LABEL); 68863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } else if (Organization.CONTENT_ITEM_TYPE.equals(mimeType)) { 69863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton colType = cursor.getColumnIndex(Organization.TYPE); 70863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton colLabel = cursor.getColumnIndex(Organization.LABEL); 71863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } else { 72863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return null; 73863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 74863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 75863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton final int type = cursor.getInt(colType); 76863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton final CharSequence label = cursor.getString(colLabel); 77863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 78863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return getDisplayLabel(context, mimeType, type, label); 79863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 80863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 81863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public static final CharSequence getDisplayLabel(Context context, String mimetype, int type, 82863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton CharSequence label) { 83863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton CharSequence display = ""; 84863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton final int customType; 85863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton final int defaultType; 86863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton final int arrayResId; 87863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 88863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (Phone.CONTENT_ITEM_TYPE.equals(mimetype)) { 89863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton defaultType = Phone.TYPE_HOME; 90863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton customType = Phone.TYPE_CUSTOM; 91863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton arrayResId = com.android.internal.R.array.phoneTypes; 92863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } else if (Email.CONTENT_ITEM_TYPE.equals(mimetype)) { 93863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton defaultType = Email.TYPE_HOME; 94863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton customType = Email.TYPE_CUSTOM; 95863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton arrayResId = com.android.internal.R.array.emailAddressTypes; 96863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } else if (StructuredPostal.CONTENT_ITEM_TYPE.equals(mimetype)) { 97863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton defaultType = StructuredPostal.TYPE_HOME; 98863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton customType = StructuredPostal.TYPE_CUSTOM; 99863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton arrayResId = com.android.internal.R.array.postalAddressTypes; 100863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } else if (Organization.CONTENT_ITEM_TYPE.equals(mimetype)) { 101863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton defaultType = Organization.TYPE_WORK; 102863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton customType = Organization.TYPE_CUSTOM; 103863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton arrayResId = com.android.internal.R.array.organizationTypes; 104863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } else { 105863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton // Can't return display label for given mimetype. 106863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return display; 107863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 108863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 109863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (type != customType) { 110863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton CharSequence[] labels = context.getResources().getTextArray(arrayResId); 111863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton try { 112863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton display = labels[type - 1]; 113863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } catch (ArrayIndexOutOfBoundsException e) { 114863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton display = labels[defaultType - 1]; 115863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 116863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } else { 117863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (!TextUtils.isEmpty(label)) { 118863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton display = label; 119863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 120863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 121863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return display; 122863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 123863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 124863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 125863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Opens an InputStream for the person's photo and returns the photo as a Bitmap. 126863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * If the person's photo isn't present returns null. 127863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * 128863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @param aggCursor the Cursor pointing to the data record containing the photo. 129863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @param bitmapColumnIndex the column index where the photo Uri is stored. 130863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @param options the decoding options, can be set to null 131863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @return the photo Bitmap 132863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 133863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public static Bitmap loadContactPhoto(Cursor cursor, int bitmapColumnIndex, 134863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton BitmapFactory.Options options) { 135863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (cursor == null) { 136863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return null; 137863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 138863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 139863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton byte[] data = cursor.getBlob(bitmapColumnIndex); 140863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return BitmapFactory.decodeByteArray(data, 0, data.length, options); 141863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 142863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 143863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 144863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Loads a placeholder photo. 145863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * 146863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @param placeholderImageResource the resource to use for the placeholder image 147863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @param context the Context 148863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @param options the decoding options, can be set to null 149863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @return the placeholder Bitmap. 150863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 151863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public static Bitmap loadPlaceholderPhoto(int placeholderImageResource, Context context, 152863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton BitmapFactory.Options options) { 153863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (placeholderImageResource == 0) { 154863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return null; 155863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 156863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return BitmapFactory.decodeResource(context.getResources(), 157863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton placeholderImageResource, options); 158863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 159863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 160863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public static Bitmap loadContactPhoto(Context context, long photoId, 161863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton BitmapFactory.Options options) { 162863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton Cursor photoCursor = null; 163863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton Bitmap photoBm = null; 164863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 165863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton try { 166863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton photoCursor = context.getContentResolver().query( 167863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton ContentUris.withAppendedId(Data.CONTENT_URI, photoId), 168863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton new String[] { Photo.PHOTO }, 169863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton null, null, null); 170863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 171863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (photoCursor.moveToFirst() && !photoCursor.isNull(0)) { 172863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton byte[] photoData = photoCursor.getBlob(0); 173863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton photoBm = BitmapFactory.decodeByteArray(photoData, 0, 174863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton photoData.length, options); 175863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 176863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } finally { 177863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (photoCursor != null) { 178863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton photoCursor.close(); 179863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 180863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 181863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 182863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return photoBm; 183863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 184863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 185863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton // TODO find a proper place for the canonical version of these 186863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public interface ProviderNames { 187863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton String YAHOO = "Yahoo"; 188863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton String GTALK = "GTalk"; 189863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton String MSN = "MSN"; 190863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton String ICQ = "ICQ"; 191863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton String AIM = "AIM"; 192863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton String XMPP = "XMPP"; 193863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton String JABBER = "JABBER"; 194863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton String SKYPE = "SKYPE"; 195863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton String QQ = "QQ"; 196863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 197863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 198863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 199863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * This looks up the provider name defined in 200863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * ProviderNames from the predefined IM protocol id. 201863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * This is used for interacting with the IM application. 202863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * 203863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @param protocol the protocol ID 204863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @return the provider name the IM app uses for the given protocol, or null if no 205863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * provider is defined for the given protocol 206863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @hide 207863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 208863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public static String lookupProviderNameFromId(int protocol) { 209863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton switch (protocol) { 210863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton case Im.PROTOCOL_GOOGLE_TALK: 211863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return ProviderNames.GTALK; 212863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton case Im.PROTOCOL_AIM: 213863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return ProviderNames.AIM; 214863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton case Im.PROTOCOL_MSN: 215863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return ProviderNames.MSN; 216863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton case Im.PROTOCOL_YAHOO: 217863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return ProviderNames.YAHOO; 218863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton case Im.PROTOCOL_ICQ: 219863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return ProviderNames.ICQ; 220863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton case Im.PROTOCOL_JABBER: 221863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return ProviderNames.JABBER; 222863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton case Im.PROTOCOL_SKYPE: 223863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return ProviderNames.SKYPE; 224863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton case Im.PROTOCOL_QQ: 225863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return ProviderNames.QQ; 226863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 227863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return null; 228863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 229863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 230863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 231863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Build {@link Intent} to launch an action for the given {@link Im} or 232863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * {@link Email} row. Returns null when missing protocol or data. 233863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 234863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public static Intent buildImIntent(ContentValues values) { 235863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton final boolean isEmail = Email.CONTENT_ITEM_TYPE.equals(values.getAsString(Data.MIMETYPE)); 236863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 237863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (!isEmail && !isProtocolValid(values)) { 238863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return null; 239863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 240863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 241863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton final int protocol = isEmail ? Im.PROTOCOL_GOOGLE_TALK : values.getAsInteger(Im.PROTOCOL); 242863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 243863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton String host = values.getAsString(Im.CUSTOM_PROTOCOL); 244863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton String data = values.getAsString(isEmail ? Email.DATA : Im.DATA); 245863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (protocol != Im.PROTOCOL_CUSTOM) { 246863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton // Try bringing in a well-known host for specific protocols 247863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton host = ContactsUtils.lookupProviderNameFromId(protocol); 248863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 249863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 250863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (!TextUtils.isEmpty(host) && !TextUtils.isEmpty(data)) { 251863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton final String authority = host.toLowerCase(); 252863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton final Uri imUri = new Uri.Builder().scheme(Constants.SCHEME_IMTO).authority( 253863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton authority).appendPath(data).build(); 254863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return new Intent(Intent.ACTION_SENDTO, imUri); 255863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } else { 256863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return null; 257863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 258863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 259863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 260863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton private static boolean isProtocolValid(ContentValues values) { 261863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton String protocolString = values.getAsString(Im.PROTOCOL); 262863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (protocolString == null) { 263863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return false; 264863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 265863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton try { 266863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton Integer.valueOf(protocolString); 267863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } catch (NumberFormatException e) { 268863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return false; 269863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 270863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return true; 271863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 272863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 273863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public static long queryForContactId(ContentResolver cr, long rawContactId) { 274863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton Cursor contactIdCursor = null; 275863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton long contactId = -1; 276863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton try { 277863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton contactIdCursor = cr.query(RawContacts.CONTENT_URI, 278863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton new String[] {RawContacts.CONTACT_ID}, 279863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton RawContacts._ID + "=" + rawContactId, null, null); 280863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (contactIdCursor != null && contactIdCursor.moveToFirst()) { 281863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton contactId = contactIdCursor.getLong(0); 282863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 283863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } finally { 284863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (contactIdCursor != null) { 285863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton contactIdCursor.close(); 286863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 287863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 288863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return contactId; 289863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 290863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 291863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public static String querySuperPrimaryPhone(ContentResolver cr, long contactId) { 292863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton Cursor c = null; 293863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton String phone = null; 294863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton try { 295863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId); 296863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton Uri dataUri = Uri.withAppendedPath(baseUri, Contacts.Data.CONTENT_DIRECTORY); 297863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 298863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton c = cr.query(dataUri, 299863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton new String[] {Phone.NUMBER}, 300863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton Data.MIMETYPE + "=" + Phone.MIMETYPE + 301863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton " AND " + Data.IS_SUPER_PRIMARY + "=1", 302863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton null, null); 303863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (c != null && c.moveToFirst()) { 304863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton // Just return the first one. 305863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton phone = c.getString(0); 306863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 307863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } finally { 308863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (c != null) { 309863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton c.close(); 310863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 311863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 312863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return phone; 313863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 314863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 315863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public static long queryForRawContactId(ContentResolver cr, long contactId) { 316863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton Cursor rawContactIdCursor = null; 317863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton long rawContactId = -1; 318863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton try { 319863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton rawContactIdCursor = cr.query(RawContacts.CONTENT_URI, 320863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton new String[] {RawContacts._ID}, 321863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton RawContacts.CONTACT_ID + "=" + contactId, null, null); 322863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (rawContactIdCursor != null && rawContactIdCursor.moveToFirst()) { 323863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton // Just return the first one. 324863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton rawContactId = rawContactIdCursor.getLong(0); 325863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 326863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } finally { 327863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (rawContactIdCursor != null) { 328863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton rawContactIdCursor.close(); 329863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 330863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 331863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return rawContactId; 332863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 333863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 334863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public static ArrayList<Long> queryForAllRawContactIds(ContentResolver cr, long contactId) { 335863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton Cursor rawContactIdCursor = null; 336863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton ArrayList<Long> rawContactIds = new ArrayList<Long>(); 337863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton try { 338863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton rawContactIdCursor = cr.query(RawContacts.CONTENT_URI, 339863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton new String[] {RawContacts._ID}, 340863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton RawContacts.CONTACT_ID + "=" + contactId, null, null); 341863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (rawContactIdCursor != null) { 342863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton while (rawContactIdCursor.moveToNext()) { 343863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton rawContactIds.add(rawContactIdCursor.getLong(0)); 344863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 345863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 346863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } finally { 347863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (rawContactIdCursor != null) { 348863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton rawContactIdCursor.close(); 349863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 350863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 351863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return rawContactIds; 352863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 353863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 354863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 355863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 356863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Kick off an intent to initiate a call. 357863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * 358863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @param phoneNumber must not be null. 359863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @throws NullPointerException when the given argument is null. 360863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 361863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public static void initiateCall(Context context, CharSequence phoneNumber) { 362863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED, 363863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton Uri.fromParts("tel", phoneNumber.toString(), null)); 364863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton context.startActivity(intent); 365863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 366863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 367863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 368863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Kick off an intent to initiate an Sms/Mms message. 369863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * 370863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @param phoneNumber must not be null. 371863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @throws NullPointerException when the given argument is null. 372863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 373863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public static void initiateSms(Context context, CharSequence phoneNumber) { 374863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton Intent intent = new Intent(Intent.ACTION_SENDTO, 375863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton Uri.fromParts("sms", phoneNumber.toString(), null)); 376863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton context.startActivity(intent); 377863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 378863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 379863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 380863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Test if the given {@link CharSequence} contains any graphic characters, 381863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * first checking {@link TextUtils#isEmpty(CharSequence)} to handle null. 382863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 383863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public static boolean isGraphic(CharSequence str) { 384863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return !TextUtils.isEmpty(str) && TextUtils.isGraphic(str); 385863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 386863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 387863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 388863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Returns true if two objects are considered equal. Two null references are equal here. 389863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 390863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public static boolean areObjectsEqual(Object a, Object b) { 391863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return a == b || (a != null && a.equals(b)); 392863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 393863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 394863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 395863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Returns true if two data with mimetypes which represent values in contact entries are 396863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * considered equal. 397863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 398863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public static final boolean areDataEqual(Context context, CharSequence mimetype1, 399863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton CharSequence data1, CharSequence mimetype2, CharSequence data2) { 400863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (TextUtils.equals(Phone.CONTENT_ITEM_TYPE, mimetype1) 401863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton && TextUtils.equals(Phone.CONTENT_ITEM_TYPE, mimetype2)) { 402863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (data1 == data2) { 403863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return true; 404863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 405863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (data1 == null || data2 == null) { 406863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return false; 407863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 408863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return PhoneNumberUtils.compare(context, data1.toString(), data2.toString()); 409863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } else { 410863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (mimetype1 == mimetype2 && data1 == data2) { 411863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return true; 412863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 413863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return TextUtils.equals(mimetype1, mimetype2) && TextUtils.equals(data1, data2); 414863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 415863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 416863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 417863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 418863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Returns true if two {@link Intent}s are both null, or have the same action. 419863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 420863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public static final boolean areIntentActionEqual(Intent a, Intent b) { 421863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (a == b) { 422863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return true; 423863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 424863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (a == null || b == null) { 425863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return false; 426863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 427863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return TextUtils.equals(a.getAction(), b.getAction()); 428863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 429863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton} 430