首页 > 代码库 > android 匈牙利语环境下,联系人的姓名顺序颠倒

android 匈牙利语环境下,联系人的姓名顺序颠倒

联系人姓名由prefix / given name / middle name / family name / suffix组成。世界各地对于姓名显示的顺利是不同的。
例如中国习惯是:family name +  middle name + given name
     西方习惯是:given name + middle name + family name
Google定义了这几种类型:
FullNameStyle.UNDEFINED  //未定义
FullNameStyle.CHINESE   //中国
FullNameStyle.KOREAN     //韩国
FullNameStyle.JAPANESE   //日本
FullNameStyle.CJK     //中日韩之一
FullNameStyle.WESTERN    //西方
      匈牙利这个国家比较特殊,按照传统观念是属于西方的,但是姓名显示习惯却是family name +  given name + middle name
 [SOLUTION]
1、请先保证有添加匈牙利语(请参考FAQ04326\FAQ03761)
2、修改DataRowHandlerForStructuredName.java (alps\packages\providers\contactsprovider\src\com\android\providers\contacts)
修改    public void fixStructuredNameComponents(ContentValues augmented, ContentValues update) {
        final String unstruct = update.getAsString(StructuredName.DISPLAY_NAME);
        final boolean touchedUnstruct = !TextUtils.isEmpty(unstruct);
        final boolean touchedStruct = !areAllEmpty(update, STRUCTURED_FIELDS);
        if (touchedUnstruct && !touchedStruct) {
            NameSplitter.Name name = new NameSplitter.Name();
            mSplitter.split(name, unstruct);
            name.toValues(update);
        } else if (!touchedUnstruct
                && (touchedStruct || areAnySpecified(update, STRUCTURED_FIELDS))) {
            // We need to update the display name when any structured components
            // are specified, even when they are null, which is why we are checking
            // areAnySpecified.  The touchedStruct in the condition is an optimization:
            // if there are non-null values, we know for a fact that some values are present.
            NameSplitter.Name name = new NameSplitter.Name();
            name.fromValues(augmented);
            // 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);
            
            //XT and
            //final String joined = mSplitter.join(name, true, true);
            String mLanguage = mSplitter.getLanguage();
            if ((name.fullNameStyle == FullNameStyle.UNDEFINED || name.fullNameStyle == FullNameStyle.WESTERN) && mLanguage.equals("hu")){
                 final String joined = mSplitter.join(name, false, true);   //中间的参数为false,即为boolean givenNameFirst,决定是否givenName在最前面
            }else{
                 final String joined = mSplitter.join(name, true, true);
            }
            //XT and end
            update.put(StructuredName.DISPLAY_NAME, joined);
            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)) {
                update.put(StructuredName.FULL_NAME_STYLE,
                        mSplitter.guessFullNameStyle(unstruct));
            }
            if (!update.containsKey(StructuredName.PHONETIC_NAME_STYLE)) {
                update.put(StructuredName.PHONETIC_NAME_STYLE,
                        mSplitter.guessPhoneticNameStyle(unstruct));
            }
        }
    }
    
3、修改NameSplitter.java (alps\packages\providers\contactsprovider\src\com\android\providers\contacts)
新增函数
public String getLanguage(){
   return mLanguage;
}

android 匈牙利语环境下,联系人的姓名顺序颠倒