/**
* increase pinyin field from phones table
*
* @return
*/
public boolean load3() {
mLoading = true;
boolean bOK = false;
Cursor managedCursor = null;
final List<NgnContact> contactsCopy = new ArrayList<NgnContact>();
if (mOnBeginLoadCallback != null) {
mOnBeginLoadCallback.callback(this);
}
try {
String phoneNumber, displayName, label;
String softkey;
NgnContact contact = null;
int id, type, photoId;
final Activity activity = NgnEngine.getInstance().getMainActivity();
final Resources res = NgnApplication.getContext().getResources();
if (NgnApplication.getSDKVersion() >= 8 && activity != null) {
{
// Uri uri = Uri
// .parse("content://com.android.contacts/data/phones");
String[] projection = { "_id", "data1", "data2", "data3",
"display_name", "photo_id", "contact_id",
"sort_key" };
managedCursor = activity.managedQuery(Phone.CONTENT_URI,
projection, // Which columns to
// return
null, // Which rows to return (all rows)
null, // Selection arguments (none)
// Put the results in ascending order by
// name
"sort_key COLLATE LOCALIZED asc");
int indexPhoneContactId = managedCursor
.getColumnIndex(Phone.CONTACT_ID);
int indexPhoneType = managedCursor
.getColumnIndex(Phone.TYPE);
int indexPhoneLabel = managedCursor
.getColumnIndex(Phone.LABEL);
int indexPhoneNumber = managedCursor
.getColumnIndex(Phone.NUMBER);
int indexPhonePhotoId = managedCursor
.getColumnIndex(Phone.PHOTO_ID);
int indexContactDisplayName = managedCursor
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
// important sentence
int indexSoftKey = managedCursor.getColumnIndex("sort_key");
// end
while (managedCursor.moveToNext()) {
id = managedCursor.getInt(indexPhoneContactId);
type = managedCursor.getInt(indexPhoneType);
label = managedCursor.getString(indexPhoneLabel);
phoneNumber = managedCursor.getString(indexPhoneNumber);
photoId = managedCursor.getInt(indexPhonePhotoId);
softkey = managedCursor.getString(indexSoftKey);
if (phoneNumber != null) {
phoneNumber = phoneNumber.replace("-", "");
if (NgnStringUtils.isNullOrEmpty(label)) {
final int resId = android.provider.ContactsContract.CommonDataKinds.Phone
.getTypeLabelResource(type);
label = res.getString(resId);
}
if (contact == null || contact.getId() != id) {
displayName = managedCursor
.getString(indexContactDisplayName);
contact = newContact(id, displayName);
if (photoId != 0) {
contact.setPhotoId(photoId);
}
// important sentence
contact.setPinyin(softkey);
// end
contactsCopy.add(contact);
}
contact.addPhoneNumber(NgnPhoneNumber
.fromAndroid2LocalType(type), phoneNumber,
label);
if (mOnNewPhoneNumberCallback != null) {
mOnNewPhoneNumberCallback.callback(phoneNumber);
}
}
}
mLoading = false;
mReady = true;
bOK = true;
}
}
} catch (Exception e) {
e.printStackTrace();
mLoading = false;
mReady = false;
} finally {
if (managedCursor != null) {
managedCursor.close();
}
}
if (bOK) {
synchronized (mContacts) {
mContacts.clear();
mContacts.add(contactsCopy);
}
}
if (mOnEndLoadCallback != null) {
mOnEndLoadCallback.callback(this);
}
return bOK;
}