1. Rebuild locale related RowHandler when locale was changed
2. Don't save adjusted full name style into DB.
Bug: 2582391
Change-Id: I7f6720f59cb452ac19cb7fafac5e704c3d51c2bb
diff --git a/src/com/android/providers/contacts/ContactsDatabaseHelper.java b/src/com/android/providers/contacts/ContactsDatabaseHelper.java
index a4f672d..6a76a0b 100644
--- a/src/com/android/providers/contacts/ContactsDatabaseHelper.java
+++ b/src/com/android/providers/contacts/ContactsDatabaseHelper.java
@@ -1750,10 +1750,13 @@
NameSplitter splitter, StringBuilder sb) {
splitter.guessNameStyle(name);
+ int unadjustedFullNameStyle = name.fullNameStyle;
name.fullNameStyle = splitter.getAdjustedFullNameStyle(name.fullNameStyle);
String displayName = splitter.join(name, true);
- structuredNameUpdate.bindLong(1, name.fullNameStyle);
+ // Don't update database with the adjusted fullNameStyle as it is locale
+ // related
+ structuredNameUpdate.bindLong(1, unadjustedFullNameStyle);
DatabaseUtils.bindObjectToProgram(structuredNameUpdate, 2, displayName);
structuredNameUpdate.bindLong(3, name.phoneticNameStyle);
structuredNameUpdate.bindLong(4, dataId);
@@ -1767,8 +1770,10 @@
if (phoneticName != null) {
sortKey = sortKeyAlternative = phoneticName;
- } else if (name.fullNameStyle == FullNameStyle.CHINESE) {
- sortKey = sortKeyAlternative = splitter.convertHanziToPinyin(displayName);
+ } else if (name.fullNameStyle == FullNameStyle.CHINESE ||
+ name.fullNameStyle == FullNameStyle.CJK) {
+ sortKey = sortKeyAlternative = ContactLocaleUtils.getIntance()
+ .getSortKey(displayName, name.fullNameStyle);
}
if (sortKey == null) {
@@ -1829,8 +1834,10 @@
if (phoneticName == null && company != null) {
int nameStyle = splitter.guessFullNameStyle(company);
nameStyle = splitter.getAdjustedFullNameStyle(nameStyle);
- if (nameStyle == FullNameStyle.CHINESE) {
- sortKey = splitter.convertHanziToPinyin(company);
+ if (nameStyle == FullNameStyle.CHINESE ||
+ nameStyle == FullNameStyle.CJK ) {
+ sortKey = ContactLocaleUtils.getIntance()
+ .getSortKey(company, nameStyle);
}
}
diff --git a/src/com/android/providers/contacts/ContactsProvider2.java b/src/com/android/providers/contacts/ContactsProvider2.java
index 6b218a1..b65a113 100644
--- a/src/com/android/providers/contacts/ContactsProvider2.java
+++ b/src/com/android/providers/contacts/ContactsProvider2.java
@@ -1244,11 +1244,12 @@
// As the name could be changed, let's guess the name style again.
name.fullNameStyle = FullNameStyle.UNDEFINED;
mSplitter.guessNameStyle(name);
-
+ int unadjustedFullNameStyle = name.fullNameStyle;
+ name.fullNameStyle = mSplitter.getAdjustedFullNameStyle(name.fullNameStyle);
final String joined = mSplitter.join(name, true);
update.put(StructuredName.DISPLAY_NAME, joined);
- update.put(StructuredName.FULL_NAME_STYLE, name.fullNameStyle);
+ update.put(StructuredName.FULL_NAME_STYLE, unadjustedFullNameStyle);
update.put(StructuredName.PHONETIC_NAME_STYLE, name.phoneticNameStyle);
} else if (touchedUnstruct && touchedStruct){
if (!update.containsKey(StructuredName.FULL_NAME_STYLE)) {
@@ -1969,23 +1970,6 @@
" WHERE " + RawContacts._ID + "=?)" +
" AND " + RawContacts._ID + "!=?");
- mDataRowHandlers = new HashMap<String, DataRowHandler>();
-
- mDataRowHandlers.put(Email.CONTENT_ITEM_TYPE, new EmailDataRowHandler());
- mDataRowHandlers.put(Im.CONTENT_ITEM_TYPE,
- new CommonDataRowHandler(Im.CONTENT_ITEM_TYPE, Im.TYPE, Im.LABEL));
- mDataRowHandlers.put(Nickname.CONTENT_ITEM_TYPE, new CommonDataRowHandler(
- StructuredPostal.CONTENT_ITEM_TYPE, StructuredPostal.TYPE, StructuredPostal.LABEL));
- mDataRowHandlers.put(Organization.CONTENT_ITEM_TYPE, new OrganizationDataRowHandler());
- mDataRowHandlers.put(Phone.CONTENT_ITEM_TYPE, new PhoneDataRowHandler());
- mDataRowHandlers.put(Nickname.CONTENT_ITEM_TYPE, new NicknameDataRowHandler());
- mDataRowHandlers.put(StructuredName.CONTENT_ITEM_TYPE,
- new StructuredNameRowHandler(mNameSplitter));
- mDataRowHandlers.put(StructuredPostal.CONTENT_ITEM_TYPE,
- new StructuredPostalRowHandler(mPostalSplitter));
- mDataRowHandlers.put(GroupMembership.CONTENT_ITEM_TYPE, new GroupMembershipRowHandler());
- mDataRowHandlers.put(Photo.CONTENT_ITEM_TYPE, new PhotoDataRowHandler());
-
mMimeTypeIdEmail = mDbHelper.getMimeTypeId(Email.CONTENT_ITEM_TYPE);
mMimeTypeIdIm = mDbHelper.getMimeTypeId(Im.CONTENT_ITEM_TYPE);
mMimeTypeIdStructuredName = mDbHelper.getMimeTypeId(StructuredName.CONTENT_ITEM_TYPE);
@@ -2003,6 +1987,24 @@
return (mDb != null);
}
+ private void initDataRowHandlers() {
+ mDataRowHandlers = new HashMap<String, DataRowHandler>();
+
+ mDataRowHandlers.put(Email.CONTENT_ITEM_TYPE, new EmailDataRowHandler());
+ mDataRowHandlers.put(Im.CONTENT_ITEM_TYPE,
+ new CommonDataRowHandler(Im.CONTENT_ITEM_TYPE, Im.TYPE, Im.LABEL));
+ mDataRowHandlers.put(Nickname.CONTENT_ITEM_TYPE, new CommonDataRowHandler(
+ StructuredPostal.CONTENT_ITEM_TYPE, StructuredPostal.TYPE, StructuredPostal.LABEL));
+ mDataRowHandlers.put(Organization.CONTENT_ITEM_TYPE, new OrganizationDataRowHandler());
+ mDataRowHandlers.put(Phone.CONTENT_ITEM_TYPE, new PhoneDataRowHandler());
+ mDataRowHandlers.put(Nickname.CONTENT_ITEM_TYPE, new NicknameDataRowHandler());
+ mDataRowHandlers.put(StructuredName.CONTENT_ITEM_TYPE,
+ new StructuredNameRowHandler(mNameSplitter));
+ mDataRowHandlers.put(StructuredPostal.CONTENT_ITEM_TYPE,
+ new StructuredPostalRowHandler(mPostalSplitter));
+ mDataRowHandlers.put(GroupMembership.CONTENT_ITEM_TYPE, new GroupMembershipRowHandler());
+ mDataRowHandlers.put(Photo.CONTENT_ITEM_TYPE, new PhotoDataRowHandler());
+ }
/**
* Visible for testing.
*/
@@ -2020,6 +2022,7 @@
mPostalSplitter = new PostalSplitter(mCurrentLocale);
mCommonNicknameCache = new CommonNicknameCache(mDbHelper.getReadableDatabase());
ContactLocaleUtils.getIntance().setLocale(mCurrentLocale);
+ initDataRowHandlers();
}
@Override
@@ -2879,10 +2882,11 @@
}
displayNameStyle = mNameSplitter.getAdjustedFullNameStyle(displayNameStyle);
}
- if (displayNameStyle == FullNameStyle.CHINESE) {
+ if (displayNameStyle == FullNameStyle.CHINESE ||
+ displayNameStyle == FullNameStyle.CJK) {
sortKeyPrimary = sortKeyAlternative =
ContactLocaleUtils.getIntance().getSortKey(
- displayNamePrimary, FullNameStyle.CHINESE);
+ displayNamePrimary, displayNameStyle);
}
}
diff --git a/src/com/android/providers/contacts/NameSplitter.java b/src/com/android/providers/contacts/NameSplitter.java
index f47b490..3f9bc86 100644
--- a/src/com/android/providers/contacts/NameSplitter.java
+++ b/src/com/android/providers/contacts/NameSplitter.java
@@ -480,32 +480,6 @@
}
/**
- * Given a name in Chinese, returns a Pinyin representation.
- */
- public String convertHanziToPinyin(String name) {
-
- // TODO: move this code to HanziToPinyin and optimize
- ArrayList<Token> tokens = HanziToPinyin.getInstance().get(name);
- if (tokens != null) {
- int size = tokens.size();
- if (size != 0) {
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < size; i++) {
- String pinyin = tokens.get(i).target;
- if (!TextUtils.isEmpty(pinyin)) {
- if (sb.length() != 0) {
- sb.append(' ');
- }
- sb.append(pinyin);
- }
- }
- return sb.toString();
- }
- }
- return null;
- }
-
- /**
* Concatenates parts of a full name inserting spaces and commas as specified.
*/
private String join(String part1, String part2, String part3, String suffix,
@@ -805,9 +779,6 @@
*/
public void guessNameStyle(Name name) {
guessFullNameStyle(name);
- if (FullNameStyle.CJK == name.fullNameStyle) {
- name.fullNameStyle = getAdjustedFullNameStyle(name.fullNameStyle);
- }
guessPhoneticNameStyle(name);
name.fullNameStyle = getAdjustedNameStyleBasedOnPhoneticNameStyle(name.fullNameStyle,
name.phoneticNameStyle);