Loading src/com/android/contacts/detail/ContactDetailDisplayUtils.java +10 −10 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.provider.ContactsContract; import android.provider.ContactsContract.DisplayNameSources; import android.provider.ContactsContract.Preferences; import android.provider.ContactsContract.StreamItems; import android.text.Html; import android.text.Html.ImageGetter; Loading Loading @@ -94,20 +95,19 @@ public class ContactDetailDisplayUtils { * Returns res/string/missing_name if there is no display name. */ public static CharSequence getDisplayName(Context context, Contact contactData) { CharSequence displayName = contactData.getDisplayName(); CharSequence altDisplayName = contactData.getAltDisplayName(); ContactsPreferences prefs = new ContactsPreferences(context); CharSequence styledName = ""; if (!TextUtils.isEmpty(displayName) && !TextUtils.isEmpty(altDisplayName)) { if (prefs.getDisplayOrder() == ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY) { styledName = displayName; } else { styledName = altDisplayName; final CharSequence displayName = contactData.getDisplayName(); if (prefs.getDisplayOrder() == Preferences.DISPLAY_ORDER_PRIMARY) { if (!TextUtils.isEmpty(displayName)) { return displayName; } } else { styledName = context.getResources().getString(R.string.missing_name); final CharSequence altDisplayName = contactData.getAltDisplayName(); if (!TextUtils.isEmpty(altDisplayName)) { return altDisplayName; } } return styledName; return context.getResources().getString(R.string.missing_name); } /** Loading src/com/android/contacts/editor/ContactEditorUtils.java +1 −1 Original line number Diff line number Diff line Loading @@ -70,7 +70,7 @@ public class ContactEditorUtils { public static synchronized ContactEditorUtils getInstance(Context context) { if (sInstance == null) { sInstance = new ContactEditorUtils(context); sInstance = new ContactEditorUtils(context.getApplicationContext()); } return sInstance; } Loading src/com/android/contacts/model/ContactLoader.java +89 −8 Original line number Diff line number Diff line Loading @@ -35,35 +35,34 @@ import android.provider.ContactsContract.Data; import android.provider.ContactsContract.Directory; import android.provider.ContactsContract.Groups; import android.provider.ContactsContract.RawContacts; import android.provider.ContactsContract.StreamItemPhotos; import android.provider.ContactsContract.StreamItems; import android.text.TextUtils; import android.util.Log; import android.util.LongSparseArray; import com.android.contacts.GroupMetaData; import com.android.contacts.common.GeoUtil; import com.android.contacts.common.model.AccountTypeManager; import com.android.contacts.common.model.account.AccountType; import com.android.contacts.common.model.account.AccountTypeWithDataSet; import com.android.contacts.common.util.Constants; import com.android.contacts.common.util.UriUtils; import com.android.contacts.model.dataitem.DataItem; import com.android.contacts.model.dataitem.PhoneDataItem; import com.android.contacts.model.dataitem.PhotoDataItem; import com.android.contacts.util.ContactLoaderUtils; import com.android.contacts.util.DataStatus; import com.android.contacts.util.StreamItemEntry; import com.android.contacts.util.StreamItemPhotoEntry; import com.android.contacts.common.util.UriUtils; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import org.json.JSONException; import org.json.JSONObject; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; Loading @@ -72,6 +71,7 @@ import java.util.Set; * Loads a single Contact and all it constituent RawContacts. */ public class ContactLoader extends AsyncTaskLoader<Contact> { private static final String TAG = ContactLoader.class.getSimpleName(); private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); Loading Loading @@ -315,8 +315,12 @@ public class ContactLoader extends AsyncTaskLoader<Contact> { // we are not doing any more network or disc accesses result = new Contact(mRequestedUri, cachedResult); resultIsCached = true; } else { if (uriCurrentFormat.getLastPathSegment().equals(Constants.LOOKUP_URI_ENCODED)) { result = loadEncodedContactEntity(uriCurrentFormat); } else { result = loadContactEntity(resolver, uriCurrentFormat); } resultIsCached = false; } if (result.isLoaded()) { Loading Loading @@ -346,6 +350,83 @@ public class ContactLoader extends AsyncTaskLoader<Contact> { } } private Contact loadEncodedContactEntity(Uri uri) throws JSONException { final String jsonString = uri.getQueryParameter(Constants.LOOKUP_URI_JSON); final JSONObject json = new JSONObject(jsonString); final long directoryId = Long.valueOf(uri.getQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY)); final String displayName = json.getString(Contacts.DISPLAY_NAME); final String altDisplayName = json.optString( Contacts.DISPLAY_NAME_ALTERNATIVE, displayName); final int displayNameSource = json.getInt(Contacts.DISPLAY_NAME_SOURCE); final Contact contact = new Contact( uri, uri, mLookupUri, directoryId, null /* lookupKey */, -1 /* id */, -1 /* nameRawContactId */, displayNameSource, -1 /* photoId */, null /* photoUri */, displayName, altDisplayName, null /* phoneticName */, false /* starred */, null /* presence */, false /* sendToVoicemail */, null /* customRingtone */, false /* isUserProfile */); contact.setStatuses(new ImmutableMap.Builder<Long, DataStatus>().build()); final String accountName = json.optString(RawContacts.ACCOUNT_NAME, null); final String directoryName = uri.getQueryParameter(Directory.DISPLAY_NAME); if (accountName != null) { final String accountType = json.getString(RawContacts.ACCOUNT_TYPE); contact.setDirectoryMetaData(directoryName, null, accountName, accountType, Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY); } else { contact.setDirectoryMetaData(directoryName, null, null, null, Directory.EXPORT_SUPPORT_ANY_ACCOUNT); } final ContentValues values = new ContentValues(); values.put(Data._ID, -1); values.put(Data.CONTACT_ID, -1); final RawContact rawContact = new RawContact(values); final JSONObject items = json.getJSONObject(Contacts.CONTENT_ITEM_TYPE); final Iterator keys = items.keys(); while (keys.hasNext()) { final String mimetype = (String) keys.next(); final JSONObject item = items.getJSONObject(mimetype); final ContentValues itemValues = new ContentValues(); itemValues.put(Data.MIMETYPE, mimetype); itemValues.put(Data._ID, -1); final Iterator iterator = item.keys(); while (iterator.hasNext()) { String name = (String) iterator.next(); final Object o = item.get(name); if (o instanceof String) { itemValues.put(name, (String) o); } else if (o instanceof Integer) { itemValues.put(name, (Integer) o); } } rawContact.addDataItemValues(itemValues); } contact.setRawContacts(new ImmutableList.Builder<RawContact>() .add(rawContact) .build()); return contact; } private Contact loadContactEntity(ContentResolver resolver, Uri contactUri) { Uri entityUri = Uri.withAppendedPath(contactUri, Contacts.Entity.CONTENT_DIRECTORY); Cursor cursor = resolver.query(entityUri, ContactQuery.COLUMNS, null, null, Loading Loading
src/com/android/contacts/detail/ContactDetailDisplayUtils.java +10 −10 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.provider.ContactsContract; import android.provider.ContactsContract.DisplayNameSources; import android.provider.ContactsContract.Preferences; import android.provider.ContactsContract.StreamItems; import android.text.Html; import android.text.Html.ImageGetter; Loading Loading @@ -94,20 +95,19 @@ public class ContactDetailDisplayUtils { * Returns res/string/missing_name if there is no display name. */ public static CharSequence getDisplayName(Context context, Contact contactData) { CharSequence displayName = contactData.getDisplayName(); CharSequence altDisplayName = contactData.getAltDisplayName(); ContactsPreferences prefs = new ContactsPreferences(context); CharSequence styledName = ""; if (!TextUtils.isEmpty(displayName) && !TextUtils.isEmpty(altDisplayName)) { if (prefs.getDisplayOrder() == ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY) { styledName = displayName; } else { styledName = altDisplayName; final CharSequence displayName = contactData.getDisplayName(); if (prefs.getDisplayOrder() == Preferences.DISPLAY_ORDER_PRIMARY) { if (!TextUtils.isEmpty(displayName)) { return displayName; } } else { styledName = context.getResources().getString(R.string.missing_name); final CharSequence altDisplayName = contactData.getAltDisplayName(); if (!TextUtils.isEmpty(altDisplayName)) { return altDisplayName; } } return styledName; return context.getResources().getString(R.string.missing_name); } /** Loading
src/com/android/contacts/editor/ContactEditorUtils.java +1 −1 Original line number Diff line number Diff line Loading @@ -70,7 +70,7 @@ public class ContactEditorUtils { public static synchronized ContactEditorUtils getInstance(Context context) { if (sInstance == null) { sInstance = new ContactEditorUtils(context); sInstance = new ContactEditorUtils(context.getApplicationContext()); } return sInstance; } Loading
src/com/android/contacts/model/ContactLoader.java +89 −8 Original line number Diff line number Diff line Loading @@ -35,35 +35,34 @@ import android.provider.ContactsContract.Data; import android.provider.ContactsContract.Directory; import android.provider.ContactsContract.Groups; import android.provider.ContactsContract.RawContacts; import android.provider.ContactsContract.StreamItemPhotos; import android.provider.ContactsContract.StreamItems; import android.text.TextUtils; import android.util.Log; import android.util.LongSparseArray; import com.android.contacts.GroupMetaData; import com.android.contacts.common.GeoUtil; import com.android.contacts.common.model.AccountTypeManager; import com.android.contacts.common.model.account.AccountType; import com.android.contacts.common.model.account.AccountTypeWithDataSet; import com.android.contacts.common.util.Constants; import com.android.contacts.common.util.UriUtils; import com.android.contacts.model.dataitem.DataItem; import com.android.contacts.model.dataitem.PhoneDataItem; import com.android.contacts.model.dataitem.PhotoDataItem; import com.android.contacts.util.ContactLoaderUtils; import com.android.contacts.util.DataStatus; import com.android.contacts.util.StreamItemEntry; import com.android.contacts.util.StreamItemPhotoEntry; import com.android.contacts.common.util.UriUtils; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import org.json.JSONException; import org.json.JSONObject; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; Loading @@ -72,6 +71,7 @@ import java.util.Set; * Loads a single Contact and all it constituent RawContacts. */ public class ContactLoader extends AsyncTaskLoader<Contact> { private static final String TAG = ContactLoader.class.getSimpleName(); private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); Loading Loading @@ -315,8 +315,12 @@ public class ContactLoader extends AsyncTaskLoader<Contact> { // we are not doing any more network or disc accesses result = new Contact(mRequestedUri, cachedResult); resultIsCached = true; } else { if (uriCurrentFormat.getLastPathSegment().equals(Constants.LOOKUP_URI_ENCODED)) { result = loadEncodedContactEntity(uriCurrentFormat); } else { result = loadContactEntity(resolver, uriCurrentFormat); } resultIsCached = false; } if (result.isLoaded()) { Loading Loading @@ -346,6 +350,83 @@ public class ContactLoader extends AsyncTaskLoader<Contact> { } } private Contact loadEncodedContactEntity(Uri uri) throws JSONException { final String jsonString = uri.getQueryParameter(Constants.LOOKUP_URI_JSON); final JSONObject json = new JSONObject(jsonString); final long directoryId = Long.valueOf(uri.getQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY)); final String displayName = json.getString(Contacts.DISPLAY_NAME); final String altDisplayName = json.optString( Contacts.DISPLAY_NAME_ALTERNATIVE, displayName); final int displayNameSource = json.getInt(Contacts.DISPLAY_NAME_SOURCE); final Contact contact = new Contact( uri, uri, mLookupUri, directoryId, null /* lookupKey */, -1 /* id */, -1 /* nameRawContactId */, displayNameSource, -1 /* photoId */, null /* photoUri */, displayName, altDisplayName, null /* phoneticName */, false /* starred */, null /* presence */, false /* sendToVoicemail */, null /* customRingtone */, false /* isUserProfile */); contact.setStatuses(new ImmutableMap.Builder<Long, DataStatus>().build()); final String accountName = json.optString(RawContacts.ACCOUNT_NAME, null); final String directoryName = uri.getQueryParameter(Directory.DISPLAY_NAME); if (accountName != null) { final String accountType = json.getString(RawContacts.ACCOUNT_TYPE); contact.setDirectoryMetaData(directoryName, null, accountName, accountType, Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY); } else { contact.setDirectoryMetaData(directoryName, null, null, null, Directory.EXPORT_SUPPORT_ANY_ACCOUNT); } final ContentValues values = new ContentValues(); values.put(Data._ID, -1); values.put(Data.CONTACT_ID, -1); final RawContact rawContact = new RawContact(values); final JSONObject items = json.getJSONObject(Contacts.CONTENT_ITEM_TYPE); final Iterator keys = items.keys(); while (keys.hasNext()) { final String mimetype = (String) keys.next(); final JSONObject item = items.getJSONObject(mimetype); final ContentValues itemValues = new ContentValues(); itemValues.put(Data.MIMETYPE, mimetype); itemValues.put(Data._ID, -1); final Iterator iterator = item.keys(); while (iterator.hasNext()) { String name = (String) iterator.next(); final Object o = item.get(name); if (o instanceof String) { itemValues.put(name, (String) o); } else if (o instanceof Integer) { itemValues.put(name, (Integer) o); } } rawContact.addDataItemValues(itemValues); } contact.setRawContacts(new ImmutableList.Builder<RawContact>() .add(rawContact) .build()); return contact; } private Contact loadContactEntity(ContentResolver resolver, Uri contactUri) { Uri entityUri = Uri.withAppendedPath(contactUri, Contacts.Entity.CONTENT_DIRECTORY); Cursor cursor = resolver.query(entityUri, ContactQuery.COLUMNS, null, null, Loading