OSDN Git Service

Rename the term "attribute"/"attr" to "parameter"/param".
authorDaisuke Miyakawa <dmiyakawa@google.com>
Tue, 3 Nov 2009 08:30:19 +0000 (17:30 +0900)
committerDaisuke Miyakawa <dmiyakawa@google.com>
Tue, 3 Nov 2009 08:30:19 +0000 (17:30 +0900)
We had been using "parameter"/"param" by mistake, while both vCard
formats uses theterm "attribute"/"attr". This is confusing.

Internal issue number: 2233884

core/java/android/pim/vcard/Constants.java
core/java/android/pim/vcard/ContactStruct.java
core/java/android/pim/vcard/VCardComposer.java
core/java/android/pim/vcard/VCardConfig.java
core/java/android/pim/vcard/VCardParser.java
core/java/android/pim/vcard/VCardUtils.java

index 052f329..1e2ccdf 100644 (file)
@@ -81,12 +81,7 @@ package android.pim.vcard;
     public static final String PROPERTY_X_NO = "X-NO";
     public static final String PROPERTY_X_DCM_HMN_MODE = "X-DCM-HMN-MODE";
 
-    // For some historical reason, we often use the term "ATTR"/"attribute" especially toward
-    // what is called "param" in both vCard specs, while vCard, while vCard importer side uses
-    // "param".
-    //
-    // TODO: Confusing. Fix it.
-    public static final String ATTR_TYPE = "TYPE";
+    public static final String PARAM_TYPE = "TYPE";
 
     // How more than one TYPE fields are expressed is different between vCard 2.1 and vCard 3.0
     //
@@ -100,62 +95,62 @@ package android.pim.vcard;
     //
     // So we are currently not sure which type is the best; probably we will have to change which
     // type should be emitted depending on the device.
-    public static final String ATTR_TYPE_HOME = "HOME";
-    public static final String ATTR_TYPE_WORK = "WORK";
-    public static final String ATTR_TYPE_FAX = "FAX";
-    public static final String ATTR_TYPE_CELL = "CELL";
-    public static final String ATTR_TYPE_VOICE = "VOICE";
-    public static final String ATTR_TYPE_INTERNET = "INTERNET";
+    public static final String PARAM_TYPE_HOME = "HOME";
+    public static final String PARAM_TYPE_WORK = "WORK";
+    public static final String PARAM_TYPE_FAX = "FAX";
+    public static final String PARAM_TYPE_CELL = "CELL";
+    public static final String PARAM_TYPE_VOICE = "VOICE";
+    public static final String PARAM_TYPE_INTERNET = "INTERNET";
 
     // Abbreviation of "prefered" according to vCard 2.1 specification.
     // We interpret this value as "primary" property during import/export.
     //
-    // Note: Both vCard specs does anything about the requirement about this attribute,
+    // Note: Both vCard specs does not mention anything about the requirement for this parameter,
     //       but there may be some vCard importer which will get confused with more than
     //       one "PREF"s in one property name, while Android accepts them.
-    public static final String ATTR_TYPE_PREF = "PREF";
+    public static final String PARAM_TYPE_PREF = "PREF";
 
-    // Phone types valid in vCard and known to ContactsContract, but not so common.
-    public static final String ATTR_TYPE_CAR = "CAR";
-    public static final String ATTR_TYPE_ISDN = "ISDN";
-    public static final String ATTR_TYPE_PAGER = "PAGER";
-    public static final String ATTR_TYPE_TLX = "TLX";  // Telex
+    // Phone type parameters valid in vCard and known to ContactsContract, but not so common.
+    public static final String PARAM_TYPE_CAR = "CAR";
+    public static final String PARAM_TYPE_ISDN = "ISDN";
+    public static final String PARAM_TYPE_PAGER = "PAGER";
+    public static final String PARAM_TYPE_TLX = "TLX";  // Telex
 
     // Phone types existing in vCard 2.1 but not known to ContactsContract.
     // TODO: should make parser make these TYPE_CUSTOM.
-    public static final String ATTR_TYPE_MODEM = "MODEM";
-    public static final String ATTR_TYPE_MSG = "MSG";
-    public static final String ATTR_TYPE_BBS = "BBS";
-    public static final String ATTR_TYPE_VIDEO = "VIDEO";
-
-    // Attribute for Phones, which are not formally valid in vCard (at least 2.1).
-    // These types are basically encoded to "X-" attributes when composing vCard.
-    // Parser passes these when "X-" is added to the attribute or not.
-    public static final String ATTR_PHONE_EXTRA_TYPE_CALLBACK = "CALLBACK";
-    public static final String ATTR_PHONE_EXTRA_TYPE_RADIO = "RADIO";
-    public static final String ATTR_PHONE_EXTRA_TYPE_TTY_TDD = "TTY-TDD";
-    public static final String ATTR_PHONE_EXTRA_TYPE_ASSISTANT = "ASSISTANT";
+    public static final String PARAM_TYPE_MODEM = "MODEM";
+    public static final String PARAM_TYPE_MSG = "MSG";
+    public static final String PARAM_TYPE_BBS = "BBS";
+    public static final String PARAM_TYPE_VIDEO = "VIDEO";
+
+    // TYPE parameters for Phones, which are not formally valid in vCard (at least 2.1).
+    // These types are basically encoded to "X-" parameters when composing vCard.
+    // Parser passes these when "X-" is added to the parameter or not.
+    public static final String PARAM_PHONE_EXTRA_TYPE_CALLBACK = "CALLBACK";
+    public static final String PARAM_PHONE_EXTRA_TYPE_RADIO = "RADIO";
+    public static final String PARAM_PHONE_EXTRA_TYPE_TTY_TDD = "TTY-TDD";
+    public static final String PARAM_PHONE_EXTRA_TYPE_ASSISTANT = "ASSISTANT";
     // vCard composer translates this type to "WORK" + "PREF". Just for parsing.
-    public static final String ATTR_PHONE_EXTRA_TYPE_COMPANY_MAIN = "COMPANY-MAIN";
+    public static final String PARAM_PHONE_EXTRA_TYPE_COMPANY_MAIN = "COMPANY-MAIN";
     // vCard composer translates this type to "VOICE" Just for parsing.
-    public static final String ATTR_PHONE_EXTRA_TYPE_OTHER = "OTHER";
+    public static final String PARAM_PHONE_EXTRA_TYPE_OTHER = "OTHER";
 
-    // Attribute for addresses.
-    public static final String ATTR_ADR_TYPE_PARCEL = "PARCEL";
-    public static final String ATTR_ADR_TYPE_DOM = "DOM";
-    public static final String ATTR_ADR_TYPE_INTL = "INTL";
+    // TYPE parameters for postal addresses.
+    public static final String PARAM_ADR_TYPE_PARCEL = "PARCEL";
+    public static final String PARAM_ADR_TYPE_DOM = "DOM";
+    public static final String PARAM_ADR_TYPE_INTL = "INTL";
 
-    // Attribute types not officially valid but used in some vCard exporter.
+    // TYPE parameters not officially valid but used in some vCard exporter.
     // Do not use in composer side.
-    public static final String ATTR_EXTRA_TYPE_COMPANY = "COMPANY";
+    public static final String PARAM_EXTRA_TYPE_COMPANY = "COMPANY";
 
-    // DoCoMo specific attribute. Used with "SOUND" property, which is alternate of SORT-STRING in
+    // DoCoMo specific type parameter. Used with "SOUND" property, which is alternate of SORT-STRING in
     // vCard 3.0.
-    public static final String ATTR_TYPE_X_IRMC_N = "X-IRMC-N";
+    public static final String PARAM_TYPE_X_IRMC_N = "X-IRMC-N";
 
     public interface ImportOnly {
         public static final String PROPERTY_X_NICKNAME = "X-NICKNAME";
-        // Some device emits this "X-" attribute for expressing Google Talk,
+        // Some device emits this "X-" parameter for expressing Google Talk,
         // which is specifically invalid but should be always properly accepted, and emitted
         // in some special case (for that device/application).
         public static final String PROPERTY_X_GOOGLE_TALK_WITH_SPACE = "X-GOOGLE TALK";
index 67c47d1..cab9dc1 100644 (file)
@@ -38,7 +38,6 @@ import android.provider.ContactsContract.CommonDataKinds.StructuredName;
 import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
 import android.provider.ContactsContract.CommonDataKinds.Website;
 import android.telephony.PhoneNumberUtils;
-import android.text.SpannableStringBuilder;
 import android.text.TextUtils;
 import android.util.Log;
 
@@ -720,8 +719,8 @@ public class ContactStruct {
                 propName.equals(Constants.ImportOnly.PROPERTY_X_NICKNAME)) {
             addNickName(propValue);
         } else if (propName.equals(Constants.PROPERTY_SOUND)) {
-            Collection<String> typeCollection = paramMap.get(Constants.ATTR_TYPE);
-            if (typeCollection != null && typeCollection.contains(Constants.ATTR_TYPE_X_IRMC_N)) {
+            Collection<String> typeCollection = paramMap.get(Constants.PARAM_TYPE);
+            if (typeCollection != null && typeCollection.contains(Constants.PARAM_TYPE_X_IRMC_N)) {
                 // As of 2009-10-08, Parser side does not split a property value into separated
                 // values using ';' (in other words, propValueList.size() == 1),
                 // which is correct behavior from the view of vCard 2.1.
@@ -748,25 +747,25 @@ public class ContactStruct {
             int type = -1;
             String label = "";
             boolean isPrimary = false;
-            Collection<String> typeCollection = paramMap.get(Constants.ATTR_TYPE);
+            Collection<String> typeCollection = paramMap.get(Constants.PARAM_TYPE);
             if (typeCollection != null) {
                 for (String typeString : typeCollection) {
                     typeString = typeString.toUpperCase();
-                    if (typeString.equals(Constants.ATTR_TYPE_PREF)) {
+                    if (typeString.equals(Constants.PARAM_TYPE_PREF)) {
                         isPrimary = true;
-                    } else if (typeString.equals(Constants.ATTR_TYPE_HOME)) {
+                    } else if (typeString.equals(Constants.PARAM_TYPE_HOME)) {
                         type = StructuredPostal.TYPE_HOME;
                         label = "";
-                    } else if (typeString.equals(Constants.ATTR_TYPE_WORK) || 
-                            typeString.equalsIgnoreCase(Constants.ATTR_EXTRA_TYPE_COMPANY)) {
+                    } else if (typeString.equals(Constants.PARAM_TYPE_WORK) || 
+                            typeString.equalsIgnoreCase(Constants.PARAM_EXTRA_TYPE_COMPANY)) {
                         // "COMPANY" seems emitted by Windows Mobile, which is not
                         // specifically supported by vCard 2.1. We assume this is same
                         // as "WORK".
                         type = StructuredPostal.TYPE_WORK;
                         label = "";
-                    } else if (typeString.equals(Constants.ATTR_ADR_TYPE_PARCEL) ||
-                            typeString.equals(Constants.ATTR_ADR_TYPE_DOM) ||
-                            typeString.equals(Constants.ATTR_ADR_TYPE_INTL)) {
+                    } else if (typeString.equals(Constants.PARAM_ADR_TYPE_PARCEL) ||
+                            typeString.equals(Constants.PARAM_ADR_TYPE_DOM) ||
+                            typeString.equals(Constants.PARAM_ADR_TYPE_INTL)) {
                         // We do not have any appropriate way to store this information.
                     } else {
                         if (typeString.startsWith("X-") && type < 0) {
@@ -789,17 +788,17 @@ public class ContactStruct {
             int type = -1;
             String label = null;
             boolean isPrimary = false;
-            Collection<String> typeCollection = paramMap.get(Constants.ATTR_TYPE);
+            Collection<String> typeCollection = paramMap.get(Constants.PARAM_TYPE);
             if (typeCollection != null) {
                 for (String typeString : typeCollection) {
                     typeString = typeString.toUpperCase();
-                    if (typeString.equals(Constants.ATTR_TYPE_PREF)) {
+                    if (typeString.equals(Constants.PARAM_TYPE_PREF)) {
                         isPrimary = true;
-                    } else if (typeString.equals(Constants.ATTR_TYPE_HOME)) {
+                    } else if (typeString.equals(Constants.PARAM_TYPE_HOME)) {
                         type = Email.TYPE_HOME;
-                    } else if (typeString.equals(Constants.ATTR_TYPE_WORK)) {
+                    } else if (typeString.equals(Constants.PARAM_TYPE_WORK)) {
                         type = Email.TYPE_WORK;
-                    } else if (typeString.equals(Constants.ATTR_TYPE_CELL)) {
+                    } else if (typeString.equals(Constants.PARAM_TYPE_CELL)) {
                         type = Email.TYPE_MOBILE;
                     } else {
                         if (typeString.startsWith("X-") && type < 0) {
@@ -821,10 +820,10 @@ public class ContactStruct {
             // vCard specification does not specify other types.
             final int type = Organization.TYPE_WORK;
             boolean isPrimary = false;
-            Collection<String> typeCollection = paramMap.get(Constants.ATTR_TYPE);
+            Collection<String> typeCollection = paramMap.get(Constants.PARAM_TYPE);
             if (typeCollection != null) {
                 for (String typeString : typeCollection) {
-                    if (typeString.equals(Constants.ATTR_TYPE_PREF)) {
+                    if (typeString.equals(Constants.PARAM_TYPE_PREF)) {
                         isPrimary = true;
                     }
                 }
@@ -846,7 +845,7 @@ public class ContactStruct {
                 boolean isPrimary = false;
                 if (typeCollection != null) {
                     for (String typeValue : typeCollection) {
-                        if (Constants.ATTR_TYPE_PREF.equals(typeValue)) {
+                        if (Constants.PARAM_TYPE_PREF.equals(typeValue)) {
                             isPrimary = true;
                         } else if (formatName == null){
                             formatName = typeValue;
@@ -856,7 +855,7 @@ public class ContactStruct {
                 addPhotoBytes(formatName, propBytes, isPrimary);
             }
         } else if (propName.equals(Constants.PROPERTY_TEL)) {
-            final Collection<String> typeCollection = paramMap.get(Constants.ATTR_TYPE);
+            final Collection<String> typeCollection = paramMap.get(Constants.PARAM_TYPE);
             final Object typeObject = VCardUtils.getPhoneTypeFromStrings(typeCollection);
             final int type;
             final String label;
@@ -869,7 +868,7 @@ public class ContactStruct {
             }
             
             final boolean isPrimary;
-            if (typeCollection != null && typeCollection.contains(Constants.ATTR_TYPE_PREF)) {
+            if (typeCollection != null && typeCollection.contains(Constants.PARAM_TYPE_PREF)) {
                 isPrimary = true;
             } else {
                 isPrimary = false;
@@ -877,12 +876,12 @@ public class ContactStruct {
             addPhone(type, propValue, label, isPrimary);
         } else if (propName.equals(Constants.PROPERTY_X_SKYPE_PSTNNUMBER)) {
             // The phone number available via Skype.
-            Collection<String> typeCollection = paramMap.get(Constants.ATTR_TYPE);
+            Collection<String> typeCollection = paramMap.get(Constants.PARAM_TYPE);
             // XXX: should use TYPE_CUSTOM + the label "Skype"? (which may need localization)
             int type = Phone.TYPE_OTHER;
             final String label = null;
             final boolean isPrimary;
-            if (typeCollection != null && typeCollection.contains(Constants.ATTR_TYPE_PREF)) {
+            if (typeCollection != null && typeCollection.contains(Constants.PARAM_TYPE_PREF)) {
                 isPrimary = true;
             } else {
                 isPrimary = false;
@@ -892,15 +891,15 @@ public class ContactStruct {
             final int protocol = sImMap.get(propName);
             boolean isPrimary = false;
             int type = -1;
-            final Collection<String> typeCollection = paramMap.get(Constants.ATTR_TYPE);
+            final Collection<String> typeCollection = paramMap.get(Constants.PARAM_TYPE);
             if (typeCollection != null) {
                 for (String typeString : typeCollection) {
-                    if (typeString.equals(Constants.ATTR_TYPE_PREF)) {
+                    if (typeString.equals(Constants.PARAM_TYPE_PREF)) {
                         isPrimary = true;
                     } else if (type < 0) {
-                        if (typeString.equalsIgnoreCase(Constants.ATTR_TYPE_HOME)) {
+                        if (typeString.equalsIgnoreCase(Constants.PARAM_TYPE_HOME)) {
                             type = Im.TYPE_HOME;
-                        } else if (typeString.equalsIgnoreCase(Constants.ATTR_TYPE_WORK)) {
+                        } else if (typeString.equalsIgnoreCase(Constants.PARAM_TYPE_WORK)) {
                             type = Im.TYPE_WORK;
                         }
                     }
index 6476e40..aff3831 100644 (file)
@@ -131,17 +131,17 @@ public class VCardComposer {
     private static final String VCARD_DATA_VCARD = "VCARD";
     private static final String VCARD_DATA_PUBLIC = "PUBLIC";
 
-    private static final String VCARD_ATTR_SEPARATOR = ";";
-    private static final String VCARD_COL_SEPARATOR = "\r\n";
+    private static final String VCARD_PARAM_SEPARATOR = ";";
+    private static final String VCARD_END_OF_LINE = "\r\n";
     private static final String VCARD_DATA_SEPARATOR = ":";
     private static final String VCARD_ITEM_SEPARATOR = ";";
     private static final String VCARD_WS = " ";
-    private static final String VCARD_ATTR_EQUAL = "=";
+    private static final String VCARD_PARAM_EQUAL = "=";
 
-    private static final String VCARD_ATTR_ENCODING_QP = "ENCODING=QUOTED-PRINTABLE";
+    private static final String VCARD_PARAM_ENCODING_QP = "ENCODING=QUOTED-PRINTABLE";
 
-    private static final String VCARD_ATTR_ENCODING_BASE64_V21 = "ENCODING=BASE64";
-    private static final String VCARD_ATTR_ENCODING_BASE64_V30 = "ENCODING=b";
+    private static final String VCARD_PARAM_ENCODING_BASE64_V21 = "ENCODING=BASE64";
+    private static final String VCARD_PARAM_ENCODING_BASE64_V30 = "ENCODING=b";
 
     private static final String SHIFT_JIS = "SHIFT_JIS";
 
@@ -309,7 +309,7 @@ public class VCardComposer {
     private int mIdColumn;
 
     private final String mCharsetString;
-    private final String mVCardAttributeCharset;
+    private final String mVCardCharsetParameter;
     private boolean mTerminateIsCalled;
     final private List<OneEntryHandler> mHandlerList;
 
@@ -378,13 +378,13 @@ public class VCardComposer {
             // Do not use mCharsetString bellow since it is different from "SHIFT_JIS" but
             // may be "DOCOMO_SHIFT_JIS" or something like that (internal expression used in
             // Android, not shown to the public).
-            mVCardAttributeCharset = "CHARSET=" + SHIFT_JIS;
+            mVCardCharsetParameter = "CHARSET=" + SHIFT_JIS;
         } else if (mUsesShiftJis) {
             mCharsetString = CharsetUtils.charsetForVendor(SHIFT_JIS).name();
-            mVCardAttributeCharset = "CHARSET=" + SHIFT_JIS;
+            mVCardCharsetParameter = "CHARSET=" + SHIFT_JIS;
         } else {
             mCharsetString = "UTF-8";
-            mVCardAttributeCharset = "CHARSET=UTF-8";
+            mVCardCharsetParameter = "CHARSET=UTF-8";
         }
     }
 
@@ -743,14 +743,14 @@ public class VCardComposer {
             }
 
             builder.append(Constants.PROPERTY_N);
-            if (shouldAppendCharsetAttribute(Arrays.asList(
+            if (shouldAppendCharsetParameters(Arrays.asList(
                     encodedFamily, encodedGiven, encodedMiddle, encodedPrefix, encodedSuffix))) {
-                builder.append(VCARD_ATTR_SEPARATOR);
-                builder.append(mVCardAttributeCharset);
+                builder.append(VCARD_PARAM_SEPARATOR);
+                builder.append(mVCardCharsetParameter);
             }
             if (reallyUseQuotedPrintableToName) {
-                builder.append(VCARD_ATTR_SEPARATOR);
-                builder.append(VCARD_ATTR_ENCODING_QP);
+                builder.append(VCARD_PARAM_SEPARATOR);
+                builder.append(VCARD_PARAM_ENCODING_QP);
             }
 
             builder.append(VCARD_DATA_SEPARATOR);
@@ -763,7 +763,7 @@ public class VCardComposer {
             builder.append(encodedPrefix);
             builder.append(VCARD_ITEM_SEPARATOR);
             builder.append(encodedSuffix);
-            builder.append(VCARD_COL_SEPARATOR);
+            builder.append(VCARD_END_OF_LINE);
 
             final String formattedName;
             if (!TextUtils.isEmpty(displayName)) {
@@ -785,17 +785,17 @@ public class VCardComposer {
 
             // FN property
             builder.append(Constants.PROPERTY_FN);
-            if (shouldAppendCharsetAttribute(encodedFullname)) {
-                builder.append(VCARD_ATTR_SEPARATOR);
-                builder.append(mVCardAttributeCharset);
+            if (shouldAppendCharsetParameter(encodedFullname)) {
+                builder.append(VCARD_PARAM_SEPARATOR);
+                builder.append(mVCardCharsetParameter);
             }
             if (reallyUseQuotedPrintableToFullname) {
-                builder.append(VCARD_ATTR_SEPARATOR);
-                builder.append(VCARD_ATTR_ENCODING_QP);
+                builder.append(VCARD_PARAM_SEPARATOR);
+                builder.append(VCARD_PARAM_ENCODING_QP);
             }
             builder.append(VCARD_DATA_SEPARATOR);
             builder.append(encodedFullname);
-            builder.append(VCARD_COL_SEPARATOR);
+            builder.append(VCARD_END_OF_LINE);
         } else if (!TextUtils.isEmpty(displayName)) {
             final boolean reallyUseQuotedPrintableToDisplayName =
                 (!mRefrainsQPToPrimaryProperties &&
@@ -806,13 +806,13 @@ public class VCardComposer {
                                 escapeCharacters(displayName);
 
             builder.append(Constants.PROPERTY_N);
-            if (shouldAppendCharsetAttribute(encodedDisplayName)) {
-                builder.append(VCARD_ATTR_SEPARATOR);
-                builder.append(mVCardAttributeCharset);
+            if (shouldAppendCharsetParameter(encodedDisplayName)) {
+                builder.append(VCARD_PARAM_SEPARATOR);
+                builder.append(mVCardCharsetParameter);
             }
             if (reallyUseQuotedPrintableToDisplayName) {
-                builder.append(VCARD_ATTR_SEPARATOR);
-                builder.append(VCARD_ATTR_ENCODING_QP);
+                builder.append(VCARD_PARAM_SEPARATOR);
+                builder.append(VCARD_PARAM_ENCODING_QP);
             }
             builder.append(VCARD_DATA_SEPARATOR);
             builder.append(encodedDisplayName);
@@ -820,17 +820,17 @@ public class VCardComposer {
             builder.append(VCARD_ITEM_SEPARATOR);
             builder.append(VCARD_ITEM_SEPARATOR);
             builder.append(VCARD_ITEM_SEPARATOR);
-            builder.append(VCARD_COL_SEPARATOR);
+            builder.append(VCARD_END_OF_LINE);
             if (mIsV30) {
                 builder.append(Constants.PROPERTY_FN);
                 // TODO: Not allowed formally...
-                if (shouldAppendCharsetAttribute(encodedDisplayName)) {
-                    builder.append(VCARD_ATTR_SEPARATOR);
-                    builder.append(mVCardAttributeCharset);
+                if (shouldAppendCharsetParameter(encodedDisplayName)) {
+                    builder.append(VCARD_PARAM_SEPARATOR);
+                    builder.append(mVCardCharsetParameter);
                 }
                 builder.append(VCARD_DATA_SEPARATOR);
                 builder.append(encodedDisplayName);
-                builder.append(VCARD_COL_SEPARATOR);
+                builder.append(VCARD_END_OF_LINE);
             }
         } else if (mIsV30) {
             // vCard 3.0 specification requires these fields.
@@ -872,13 +872,13 @@ public class VCardComposer {
 
                 // Do not need to care about QP, since vCard 3.0 does not allow it.
                 final String encodedSortString = escapeCharacters(sortString);
-                if (shouldAppendCharsetAttribute(encodedSortString)) {
-                    builder.append(VCARD_ATTR_SEPARATOR);
-                    builder.append(mVCardAttributeCharset);
+                if (shouldAppendCharsetParameter(encodedSortString)) {
+                    builder.append(VCARD_PARAM_SEPARATOR);
+                    builder.append(mVCardCharsetParameter);
                 }
                 builder.append(VCARD_DATA_SEPARATOR);
                 builder.append(encodedSortString);
-                builder.append(VCARD_COL_SEPARATOR);
+                builder.append(VCARD_END_OF_LINE);
             } else if (mIsJapaneseMobilePhone) {
                 // Note: There is no appropriate property for expressing
                 //       phonetic name in vCard 2.1, while there is in
@@ -888,8 +888,8 @@ public class VCardComposer {
                 //       a lot of Japanese mobile phones. This is "X-" property, so
                 //       any parser hopefully would not get confused with this.
                 builder.append(Constants.PROPERTY_SOUND);
-                builder.append(VCARD_ATTR_SEPARATOR);
-                builder.append(Constants.ATTR_TYPE_X_IRMC_N);
+                builder.append(VCARD_PARAM_SEPARATOR);
+                builder.append(Constants.PARAM_TYPE_X_IRMC_N);
 
                 boolean reallyUseQuotedPrintable =
                     (!mRefrainsQPToPrimaryProperties
@@ -913,11 +913,11 @@ public class VCardComposer {
                     encodedPhoneticGivenName = escapeCharacters(phoneticGivenName);
                 }
 
-                if (shouldAppendCharsetAttribute(Arrays.asList(
+                if (shouldAppendCharsetParameters(Arrays.asList(
                         encodedPhoneticFamilyName, encodedPhoneticMiddleName,
                         encodedPhoneticGivenName))) {
-                    builder.append(VCARD_ATTR_SEPARATOR);
-                    builder.append(mVCardAttributeCharset);
+                    builder.append(VCARD_PARAM_SEPARATOR);
+                    builder.append(mVCardCharsetParameter);
                 }
                 builder.append(VCARD_DATA_SEPARATOR);
                 builder.append(encodedPhoneticFamilyName);
@@ -927,18 +927,18 @@ public class VCardComposer {
                 builder.append(encodedPhoneticMiddleName);
                 builder.append(VCARD_ITEM_SEPARATOR);
                 builder.append(VCARD_ITEM_SEPARATOR);
-                builder.append(VCARD_COL_SEPARATOR);
+                builder.append(VCARD_END_OF_LINE);
             }
         } else if (mIsDoCoMo) {
             builder.append(Constants.PROPERTY_SOUND);
-            builder.append(VCARD_ATTR_SEPARATOR);
-            builder.append(Constants.ATTR_TYPE_X_IRMC_N);
+            builder.append(VCARD_PARAM_SEPARATOR);
+            builder.append(Constants.PARAM_TYPE_X_IRMC_N);
             builder.append(VCARD_DATA_SEPARATOR);
             builder.append(VCARD_ITEM_SEPARATOR);
             builder.append(VCARD_ITEM_SEPARATOR);
             builder.append(VCARD_ITEM_SEPARATOR);
             builder.append(VCARD_ITEM_SEPARATOR);
-            builder.append(VCARD_COL_SEPARATOR);
+            builder.append(VCARD_END_OF_LINE);
         }
 
         if (mUsesDefactProperty) {
@@ -952,17 +952,17 @@ public class VCardComposer {
                     encodedPhoneticGivenName = escapeCharacters(phoneticGivenName);
                 }
                 builder.append(Constants.PROPERTY_X_PHONETIC_FIRST_NAME);
-                if (shouldAppendCharsetAttribute(encodedPhoneticGivenName)) {
-                    builder.append(VCARD_ATTR_SEPARATOR);
-                    builder.append(mVCardAttributeCharset);
+                if (shouldAppendCharsetParameter(encodedPhoneticGivenName)) {
+                    builder.append(VCARD_PARAM_SEPARATOR);
+                    builder.append(mVCardCharsetParameter);
                 }
                 if (reallyUseQuotedPrintable) {
-                    builder.append(VCARD_ATTR_SEPARATOR);
-                    builder.append(VCARD_ATTR_ENCODING_QP);
+                    builder.append(VCARD_PARAM_SEPARATOR);
+                    builder.append(VCARD_PARAM_ENCODING_QP);
                 }
                 builder.append(VCARD_DATA_SEPARATOR);
                 builder.append(encodedPhoneticGivenName);
-                builder.append(VCARD_COL_SEPARATOR);
+                builder.append(VCARD_END_OF_LINE);
             }
             if (!TextUtils.isEmpty(phoneticMiddleName)) {
                 final boolean reallyUseQuotedPrintable =
@@ -974,17 +974,17 @@ public class VCardComposer {
                     encodedPhoneticMiddleName = escapeCharacters(phoneticMiddleName);
                 }
                 builder.append(Constants.PROPERTY_X_PHONETIC_MIDDLE_NAME);
-                if (shouldAppendCharsetAttribute(encodedPhoneticMiddleName)) {
-                    builder.append(VCARD_ATTR_SEPARATOR);
-                    builder.append(mVCardAttributeCharset);
+                if (shouldAppendCharsetParameter(encodedPhoneticMiddleName)) {
+                    builder.append(VCARD_PARAM_SEPARATOR);
+                    builder.append(mVCardCharsetParameter);
                 }
                 if (reallyUseQuotedPrintable) {
-                    builder.append(VCARD_ATTR_SEPARATOR);
-                    builder.append(VCARD_ATTR_ENCODING_QP);
+                    builder.append(VCARD_PARAM_SEPARATOR);
+                    builder.append(VCARD_PARAM_ENCODING_QP);
                 }
                 builder.append(VCARD_DATA_SEPARATOR);
                 builder.append(encodedPhoneticMiddleName);
-                builder.append(VCARD_COL_SEPARATOR);
+                builder.append(VCARD_END_OF_LINE);
             }
             if (!TextUtils.isEmpty(phoneticFamilyName)) {
                 final boolean reallyUseQuotedPrintable =
@@ -996,17 +996,17 @@ public class VCardComposer {
                     encodedPhoneticFamilyName = escapeCharacters(phoneticFamilyName);
                 }
                 builder.append(Constants.PROPERTY_X_PHONETIC_LAST_NAME);
-                if (shouldAppendCharsetAttribute(encodedPhoneticFamilyName)) {
-                    builder.append(VCARD_ATTR_SEPARATOR);
-                    builder.append(mVCardAttributeCharset);
+                if (shouldAppendCharsetParameter(encodedPhoneticFamilyName)) {
+                    builder.append(VCARD_PARAM_SEPARATOR);
+                    builder.append(mVCardCharsetParameter);
                 }
                 if (reallyUseQuotedPrintable) {
-                    builder.append(VCARD_ATTR_SEPARATOR);
-                    builder.append(VCARD_ATTR_ENCODING_QP);
+                    builder.append(VCARD_PARAM_SEPARATOR);
+                    builder.append(VCARD_PARAM_ENCODING_QP);
                 }
                 builder.append(VCARD_DATA_SEPARATOR);
                 builder.append(encodedPhoneticFamilyName);
-                builder.append(VCARD_COL_SEPARATOR);
+                builder.append(VCARD_END_OF_LINE);
             }
         }
     }
@@ -1128,10 +1128,10 @@ public class VCardComposer {
             }
         } else if (mIsDoCoMo) {
             builder.append(Constants.PROPERTY_ADR);
-            builder.append(VCARD_ATTR_SEPARATOR);
-            builder.append(Constants.ATTR_TYPE_HOME);
+            builder.append(VCARD_PARAM_SEPARATOR);
+            builder.append(Constants.PARAM_TYPE_HOME);
             builder.append(VCARD_DATA_SEPARATOR);
-            builder.append(VCARD_COL_SEPARATOR);
+            builder.append(VCARD_END_OF_LINE);
         }
     }
 
@@ -1225,11 +1225,11 @@ public class VCardComposer {
                 final Integer typeAsInteger = contentValues.getAsInteger(Im.TYPE);
                 switch (typeAsInteger != null ? typeAsInteger : Im.TYPE_OTHER) {
                     case Im.TYPE_HOME: {
-                        typeAsString = Constants.ATTR_TYPE_HOME;
+                        typeAsString = Constants.PARAM_TYPE_HOME;
                         break;
                     }
                     case Im.TYPE_WORK: {
-                        typeAsString = Constants.ATTR_TYPE_WORK;
+                        typeAsString = Constants.PARAM_TYPE_WORK;
                         break;
                     }
                     case Im.TYPE_CUSTOM: {
@@ -1245,19 +1245,19 @@ public class VCardComposer {
                 }
             }
 
-            List<String> attributeList = new ArrayList<String>();
+            List<String> parameterList = new ArrayList<String>();
             if (!TextUtils.isEmpty(typeAsString)) {
-                attributeList.add(typeAsString);
+                parameterList.add(typeAsString);
             }
             final Integer isPrimaryAsInteger = contentValues.getAsInteger(Im.IS_PRIMARY);
             final boolean isPrimary = (isPrimaryAsInteger != null ?
                     (isPrimaryAsInteger > 0) : false);
             if (isPrimary) {
-                attributeList.add(Constants.ATTR_TYPE_PREF);
+                parameterList.add(Constants.PARAM_TYPE_PREF);
             }
 
             appendVCardLineWithCharsetAndQPDetection(
-                    builder, propertyName, attributeList, data);
+                    builder, propertyName, parameterList, data);
         }
     }
 
@@ -1273,7 +1273,8 @@ public class VCardComposer {
             if (website != null) {
                 website = website.trim();
             }
-            // Note: vCard 3.0 does not allow any attribute addition toward "URL"
+
+            // Note: vCard 3.0 does not allow any parameter addition toward "URL"
             //       property, while there's no document in vCard 2.1.
             //
             // TODO: Should we allow adding it when appropriate?
@@ -1581,14 +1582,14 @@ public class VCardComposer {
             final String encodedData, final String photoType) {
         StringBuilder tmpBuilder = new StringBuilder();
         tmpBuilder.append(Constants.PROPERTY_PHOTO);
-        tmpBuilder.append(VCARD_ATTR_SEPARATOR);
+        tmpBuilder.append(VCARD_PARAM_SEPARATOR);
         if (mIsV30) {
-            tmpBuilder.append(VCARD_ATTR_ENCODING_BASE64_V30);
+            tmpBuilder.append(VCARD_PARAM_ENCODING_BASE64_V30);
         } else {
-            tmpBuilder.append(VCARD_ATTR_ENCODING_BASE64_V21);
+            tmpBuilder.append(VCARD_PARAM_ENCODING_BASE64_V21);
         }
-        tmpBuilder.append(VCARD_ATTR_SEPARATOR);
-        appendTypeAttribute(tmpBuilder, photoType);
+        tmpBuilder.append(VCARD_PARAM_SEPARATOR);
+        appendTypeParameter(tmpBuilder, photoType);
         tmpBuilder.append(VCARD_DATA_SEPARATOR);
         tmpBuilder.append(encodedData);
 
@@ -1600,14 +1601,14 @@ public class VCardComposer {
             tmpBuilder.append(tmpStr.charAt(i));
             lineCount++;
             if (lineCount > 72) {
-                tmpBuilder.append(VCARD_COL_SEPARATOR);
+                tmpBuilder.append(VCARD_END_OF_LINE);
                 tmpBuilder.append(VCARD_WS);
                 lineCount = 0;
             }
         }
         builder.append(tmpBuilder.toString());
-        builder.append(VCARD_COL_SEPARATOR);
-        builder.append(VCARD_COL_SEPARATOR);
+        builder.append(VCARD_END_OF_LINE);
+        builder.append(VCARD_END_OF_LINE);
     }
 
     private class PostalStruct {
@@ -1719,17 +1720,17 @@ public class VCardComposer {
             }
         }
 
-        List<String> attributeList = new ArrayList<String>();
+        List<String> parameterList = new ArrayList<String>();
         if (isPrimary) {
-            attributeList.add(Constants.ATTR_TYPE_PREF);
+            parameterList.add(Constants.PARAM_TYPE_PREF);
         }
         switch (type) {
             case StructuredPostal.TYPE_HOME: {
-                attributeList.add(Constants.ATTR_TYPE_HOME);
+                parameterList.add(Constants.PARAM_TYPE_HOME);
                 break;
             }
             case StructuredPostal.TYPE_WORK: {
-                attributeList.add(Constants.ATTR_TYPE_WORK);
+                parameterList.add(Constants.PARAM_TYPE_WORK);
                 break;
             }
             case StructuredPostal.TYPE_CUSTOM: {
@@ -1739,7 +1740,7 @@ public class VCardComposer {
                     // ("IANA-token" in the vCard 3.0 is unclear...)
                     // Just  for safety, we add "X-" at the beggining of each label.
                     // Also checks the label obeys with vCard 3.0 spec.
-                    attributeList.add("X-" + label);
+                    parameterList.add("X-" + label);
                 }
                 break;
             }
@@ -1754,42 +1755,42 @@ public class VCardComposer {
 
         // Actual data construction starts from here.
         // TODO: add a new version of appendVCardLine() for this purpose.
-
+        
         builder.append(Constants.PROPERTY_ADR);
-        builder.append(VCARD_ATTR_SEPARATOR);
+        builder.append(VCARD_PARAM_SEPARATOR);
 
-        // Attributes
+        // Parameters
         {
-            boolean shouldAppendAttrSeparator = false;
-            if (!attributeList.isEmpty()) {
-                appendTypeAttributes(builder, attributeList);
-                shouldAppendAttrSeparator = true;
+            boolean shouldAppendParamSeparator = false;
+            if (!parameterList.isEmpty()) {
+                appendTypeParameters(builder, parameterList);
+                shouldAppendParamSeparator = true;
             }
 
             if (appendCharset) {
                 // Strictly, vCard 3.0 does not allow exporters to emit charset information,
                 // but we will add it since the information should be useful for importers,
                 //
-                // Assume no parser does not emit error with this attribute in vCard 3.0.
-                if (shouldAppendAttrSeparator) {
-                    builder.append(VCARD_ATTR_SEPARATOR);
+                // Assume no parser does not emit error with this parameter in vCard 3.0.
+                if (shouldAppendParamSeparator) {
+                    builder.append(VCARD_PARAM_SEPARATOR);
                 }
-                builder.append(mVCardAttributeCharset);
-                shouldAppendAttrSeparator = true;
+                builder.append(mVCardCharsetParameter);
+                shouldAppendParamSeparator = true;
             }
 
             if (reallyUseQuotedPrintable) {
-                if (shouldAppendAttrSeparator) {
-                    builder.append(VCARD_ATTR_SEPARATOR);
+                if (shouldAppendParamSeparator) {
+                    builder.append(VCARD_PARAM_SEPARATOR);
                 }
-                builder.append(VCARD_ATTR_ENCODING_QP);
-                shouldAppendAttrSeparator = true;
+                builder.append(VCARD_PARAM_ENCODING_QP);
+                shouldAppendParamSeparator = true;
             }
         }
 
         builder.append(VCARD_DATA_SEPARATOR);
         builder.append(addressData);
-        builder.append(VCARD_COL_SEPARATOR);
+        builder.append(VCARD_END_OF_LINE);
     }
 
     private void appendVCardEmailLine(final StringBuilder builder,
@@ -1803,7 +1804,7 @@ public class VCardComposer {
                 //         To support mobile type at that time, this custom label had been used.
                 if (android.provider.Contacts.ContactMethodsColumns.MOBILE_EMAIL_TYPE_NAME
                         .equals(label)) {
-                    typeAsString = Constants.ATTR_TYPE_CELL;
+                    typeAsString = Constants.PARAM_TYPE_CELL;
                 } else if (mUsesAndroidProperty && !TextUtils.isEmpty(label)
                         && VCardUtils.containsOnlyAlphaDigitHyphen(label)) {
                     typeAsString = "X-" + label;
@@ -1813,11 +1814,11 @@ public class VCardComposer {
                 break;
             }
             case Email.TYPE_HOME: {
-                typeAsString = Constants.ATTR_TYPE_HOME;
+                typeAsString = Constants.PARAM_TYPE_HOME;
                 break;
             }
             case Email.TYPE_WORK: {
-                typeAsString = Constants.ATTR_TYPE_WORK;
+                typeAsString = Constants.PARAM_TYPE_WORK;
                 break;
             }
             case Email.TYPE_OTHER: {
@@ -1825,7 +1826,7 @@ public class VCardComposer {
                 break;
             }
             case Email.TYPE_MOBILE: {
-                typeAsString = Constants.ATTR_TYPE_CELL;
+                typeAsString = Constants.PARAM_TYPE_CELL;
                 break;
             }
             default: {
@@ -1835,23 +1836,23 @@ public class VCardComposer {
             }
         }
 
-        final List<String> attributeList = new ArrayList<String>();
+        final List<String> parameterList = new ArrayList<String>();
         if (isPrimary) {
-            attributeList.add(Constants.ATTR_TYPE_PREF);
+            parameterList.add(Constants.PARAM_TYPE_PREF);
         }
         if (!TextUtils.isEmpty(typeAsString)) {
-            attributeList.add(typeAsString);
+            parameterList.add(typeAsString);
         }
 
         appendVCardLineWithCharsetAndQPDetection(builder, Constants.PROPERTY_EMAIL,
-                attributeList, rawData);
+                parameterList, rawData);
     }
 
     private void appendVCardTelephoneLine(final StringBuilder builder,
             final Integer typeAsObject, final String label,
             final String encodedData, boolean isPrimary) {
         builder.append(Constants.PROPERTY_TEL);
-        builder.append(VCARD_ATTR_SEPARATOR);
+        builder.append(VCARD_PARAM_SEPARATOR);
 
         final int typeAsPrimitive;
         if (typeAsObject == null) {
@@ -1860,84 +1861,84 @@ public class VCardComposer {
             typeAsPrimitive = typeAsObject;
         }
 
-        ArrayList<String> attributeList = new ArrayList<String>();
+        ArrayList<String> parameterList = new ArrayList<String>();
         switch (typeAsPrimitive) {
         case Phone.TYPE_HOME:
-            attributeList.addAll(
-                    Arrays.asList(Constants.ATTR_TYPE_HOME, Constants.ATTR_TYPE_VOICE));
+            parameterList.addAll(
+                    Arrays.asList(Constants.PARAM_TYPE_HOME, Constants.PARAM_TYPE_VOICE));
             break;
         case Phone.TYPE_WORK:
-            attributeList.addAll(
-                    Arrays.asList(Constants.ATTR_TYPE_WORK, Constants.ATTR_TYPE_VOICE));
+            parameterList.addAll(
+                    Arrays.asList(Constants.PARAM_TYPE_WORK, Constants.PARAM_TYPE_VOICE));
             break;
         case Phone.TYPE_FAX_HOME:
-            attributeList.addAll(
-                    Arrays.asList(Constants.ATTR_TYPE_HOME, Constants.ATTR_TYPE_FAX));
+            parameterList.addAll(
+                    Arrays.asList(Constants.PARAM_TYPE_HOME, Constants.PARAM_TYPE_FAX));
             break;
         case Phone.TYPE_FAX_WORK:
-            attributeList.addAll(
-                    Arrays.asList(Constants.ATTR_TYPE_WORK, Constants.ATTR_TYPE_FAX));
+            parameterList.addAll(
+                    Arrays.asList(Constants.PARAM_TYPE_WORK, Constants.PARAM_TYPE_FAX));
             break;
         case Phone.TYPE_MOBILE:
-            attributeList.add(Constants.ATTR_TYPE_CELL);
+            parameterList.add(Constants.PARAM_TYPE_CELL);
             break;
         case Phone.TYPE_PAGER:
             if (mIsDoCoMo) {
                 // Not sure about the reason, but previous implementation had
                 // used "VOICE" instead of "PAGER"
-                attributeList.add(Constants.ATTR_TYPE_VOICE);
+                parameterList.add(Constants.PARAM_TYPE_VOICE);
             } else {
-                attributeList.add(Constants.ATTR_TYPE_PAGER);
+                parameterList.add(Constants.PARAM_TYPE_PAGER);
             }
             break;
         case Phone.TYPE_OTHER:
-            attributeList.add(Constants.ATTR_TYPE_VOICE);
+            parameterList.add(Constants.PARAM_TYPE_VOICE);
             break;
         case Phone.TYPE_CAR:
-            attributeList.add(Constants.ATTR_TYPE_CAR);
+            parameterList.add(Constants.PARAM_TYPE_CAR);
             break;
         case Phone.TYPE_COMPANY_MAIN:
             // There's no relevant field in vCard (at least 2.1).
-            attributeList.add(Constants.ATTR_TYPE_WORK);
+            parameterList.add(Constants.PARAM_TYPE_WORK);
             isPrimary = true;
             break;
         case Phone.TYPE_ISDN:
-            attributeList.add(Constants.ATTR_TYPE_ISDN);
+            parameterList.add(Constants.PARAM_TYPE_ISDN);
             break;
         case Phone.TYPE_MAIN:
             isPrimary = true;
             break;
         case Phone.TYPE_OTHER_FAX:
-            attributeList.add(Constants.ATTR_TYPE_FAX);
+            parameterList.add(Constants.PARAM_TYPE_FAX);
             break;
         case Phone.TYPE_TELEX:
-            attributeList.add(Constants.ATTR_TYPE_TLX);
+            parameterList.add(Constants.PARAM_TYPE_TLX);
             break;
         case Phone.TYPE_WORK_MOBILE:
-            attributeList.addAll(
-                    Arrays.asList(Constants.ATTR_TYPE_WORK, Constants.ATTR_TYPE_CELL));
+            parameterList.addAll(
+                    Arrays.asList(Constants.PARAM_TYPE_WORK, Constants.PARAM_TYPE_CELL));
             break;
         case Phone.TYPE_WORK_PAGER:
-            attributeList.add(Constants.ATTR_TYPE_WORK);
+            parameterList.add(Constants.PARAM_TYPE_WORK);
             // See above.
             if (mIsDoCoMo) {
-                attributeList.add(Constants.ATTR_TYPE_VOICE);
+                parameterList.add(Constants.PARAM_TYPE_VOICE);
             } else {
-                attributeList.add(Constants.ATTR_TYPE_PAGER);
+                parameterList.add(Constants.PARAM_TYPE_PAGER);
             }
             break;
         case Phone.TYPE_MMS:
-            attributeList.add(Constants.ATTR_TYPE_MSG);
+            parameterList.add(Constants.PARAM_TYPE_MSG);
             break;
         case Phone.TYPE_CUSTOM:
             if (mUsesAndroidProperty && !TextUtils.isEmpty(label)
                         && VCardUtils.containsOnlyAlphaDigitHyphen(label)) {
-                // Note: Strictly, vCard 2.1 does not allow "X-" attribute without
+                // Note: Strictly, vCard 2.1 does not allow "X-" parameter without
                 //       "TYPE=" string.
-                attributeList.add("X-" + label);
+                parameterList.add("X-" + label);
             } else {
                 // Just ignore the custom type.
-                attributeList.add(Constants.ATTR_TYPE_VOICE);
+                parameterList.add(Constants.PARAM_TYPE_VOICE);
             }
             break;
         case Phone.TYPE_RADIO:
@@ -1947,18 +1948,18 @@ public class VCardComposer {
         }
 
         if (isPrimary) {
-            attributeList.add(Constants.ATTR_TYPE_PREF);
+            parameterList.add(Constants.PARAM_TYPE_PREF);
         }
 
-        if (attributeList.isEmpty()) {
+        if (parameterList.isEmpty()) {
             appendUncommonPhoneType(builder, typeAsPrimitive);
         } else {
-            appendTypeAttributes(builder, attributeList);
+            appendTypeParameters(builder, parameterList);
         }
 
         builder.append(VCARD_DATA_SEPARATOR);
         builder.append(encodedData);
-        builder.append(VCARD_COL_SEPARATOR);
+        builder.append(VCARD_END_OF_LINE);
     }
 
     /**
@@ -1968,11 +1969,11 @@ public class VCardComposer {
         if (mIsDoCoMo) {
             // The previous implementation for DoCoMo had been conservative
             // about miscellaneous types.
-            builder.append(Constants.ATTR_TYPE_VOICE);
+            builder.append(Constants.PARAM_TYPE_VOICE);
         } else {
-            String phoneAttribute = VCardUtils.getPhoneAttributeString(type);
-            if (phoneAttribute != null) {
-                appendTypeAttribute(builder, phoneAttribute);
+            String phoneType = VCardUtils.getPhoneTypeString(type);
+            if (phoneType != null) {
+                appendTypeParameter(builder, phoneType);
             } else {
                 Log.e(LOG_TAG, "Unknown or unsupported (by vCard) Phone type: " + type);
             }
@@ -1988,12 +1989,12 @@ public class VCardComposer {
 
     private void appendVCardLineWithCharsetAndQPDetection(final StringBuilder builder,
             final String propertyName,
-            final List<String> attributeList, final String rawData) {
+            final List<String> parameterList, final String rawData) {
         final boolean needCharset =
             (mUsesQuotedPrintable && !VCardUtils.containsOnlyPrintableAscii(rawData));
         final boolean reallyUseQuotedPrintable =
             !VCardUtils.containsOnlyNonCrLfPrintableAscii(rawData);
-        appendVCardLine(builder, propertyName, attributeList,
+        appendVCardLine(builder, propertyName, parameterList,
                 rawData, needCharset, reallyUseQuotedPrintable);
     }
 
@@ -2010,23 +2011,23 @@ public class VCardComposer {
 
     private void appendVCardLine(final StringBuilder builder,
             final String propertyName,
-            final List<String> attributeList,
+            final List<String> parameterList,
             final String rawData, final boolean needCharset,
             boolean needQuotedPrintable) {
         builder.append(propertyName);
-        if (attributeList != null && attributeList.size() > 0) {
-            builder.append(VCARD_ATTR_SEPARATOR);
-            appendTypeAttributes(builder, attributeList);
+        if (parameterList != null && parameterList.size() > 0) {
+            builder.append(VCARD_PARAM_SEPARATOR);
+            appendTypeParameters(builder, parameterList);
         }
         if (needCharset) {
-            builder.append(VCARD_ATTR_SEPARATOR);
-            builder.append(mVCardAttributeCharset);
+            builder.append(VCARD_PARAM_SEPARATOR);
+            builder.append(mVCardCharsetParameter);
         }
 
         final String encodedData;
         if (needQuotedPrintable) {
-            builder.append(VCARD_ATTR_SEPARATOR);
-            builder.append(VCARD_ATTR_ENCODING_QP);
+            builder.append(VCARD_PARAM_SEPARATOR);
+            builder.append(VCARD_PARAM_ENCODING_QP);
             encodedData = encodeQuotedPrintable(rawData);
         } else {
             // TODO: one line may be too huge, which may be invalid in vCard spec, though
@@ -2036,7 +2037,7 @@ public class VCardComposer {
 
         builder.append(VCARD_DATA_SEPARATOR);
         builder.append(encodedData);
-        builder.append(VCARD_COL_SEPARATOR);
+        builder.append(VCARD_END_OF_LINE);
     }
 
     // appendVCardLine() variants accepting List<String>.
@@ -2048,7 +2049,7 @@ public class VCardComposer {
 
     private void appendVCardLineWithCharsetAndQPDetection(final StringBuilder builder,
             final String propertyName,
-            final List<String> attributeList, final List<String> rawDataList) {
+            final List<String> parameterList, final List<String> rawDataList) {
         boolean needCharset = false;
         boolean reallyUseQuotedPrintable = false;
         for (String rawData : rawDataList) {
@@ -2065,7 +2066,7 @@ public class VCardComposer {
             }
         }
 
-        appendVCardLine(builder, propertyName, attributeList,
+        appendVCardLine(builder, propertyName, parameterList,
                 rawDataList, needCharset, reallyUseQuotedPrintable);
     }
 
@@ -2083,17 +2084,17 @@ public class VCardComposer {
 
     private void appendVCardLine(final StringBuilder builder,
             final String propertyName,
-            final List<String> attributeList,
+            final List<String> parameterList,
             final List<String> rawDataList, final boolean needCharset,
             boolean needQuotedPrintable) {
         builder.append(propertyName);
-        if (attributeList != null && attributeList.size() > 0) {
-            builder.append(VCARD_ATTR_SEPARATOR);
-            appendTypeAttributes(builder, attributeList);
+        if (parameterList != null && parameterList.size() > 0) {
+            builder.append(VCARD_PARAM_SEPARATOR);
+            appendTypeParameters(builder, parameterList);
         }
         if (needCharset) {
-            builder.append(VCARD_ATTR_SEPARATOR);
-            builder.append(mVCardAttributeCharset);
+            builder.append(VCARD_PARAM_SEPARATOR);
+            builder.append(mVCardCharsetParameter);
         }
 
         builder.append(VCARD_DATA_SEPARATOR);
@@ -2101,8 +2102,8 @@ public class VCardComposer {
         for (String rawData : rawDataList) {
             final String encodedData;
             if (needQuotedPrintable) {
-                builder.append(VCARD_ATTR_SEPARATOR);
-                builder.append(VCARD_ATTR_ENCODING_QP);
+                builder.append(VCARD_PARAM_SEPARATOR);
+                builder.append(VCARD_PARAM_ENCODING_QP);
                 encodedData = encodeQuotedPrintable(rawData);
             } else {
                 // TODO: one line may be too huge, which may be invalid in vCard spec, though
@@ -2117,13 +2118,13 @@ public class VCardComposer {
             }
             builder.append(encodedData);
         }
-        builder.append(VCARD_COL_SEPARATOR);
+        builder.append(VCARD_END_OF_LINE);
     }
 
     /**
-     * VCARD_ATTR_SEPARATOR must be appended before this method being called.
+     * VCARD_PARAM_SEPARATOR must be appended before this method being called.
      */
-    private void appendTypeAttributes(final StringBuilder builder,
+    private void appendTypeParameters(final StringBuilder builder,
             final List<String> types) {
         // We may have to make this comma separated form like "TYPE=DOM,WORK" in the future,
         // which would be recommended way in vcard 3.0 though not valid in vCard 2.1.
@@ -2132,53 +2133,54 @@ public class VCardComposer {
             if (first) {
                 first = false;
             } else {
-                builder.append(VCARD_ATTR_SEPARATOR);
+                builder.append(VCARD_PARAM_SEPARATOR);
             }
-            appendTypeAttribute(builder, type);
+            appendTypeParameter(builder, type);
         }
     }
 
     /**
-     * VCARD_ATTR_SEPARATOR must be appended before this method being called.
+     * VCARD_PARAM_SEPARATOR must be appended before this method being called.
      */
-    private void appendTypeAttribute(final StringBuilder builder, final String type) {
+    private void appendTypeParameter(final StringBuilder builder, final String type) {
         // Refrain from using appendType() so that "TYPE=" is not be appended when the
         // device is DoCoMo's (just for safety).
         //
         // Note: In vCard 3.0, Type strings also can be like this: "TYPE=HOME,PREF"
         if ((mIsV30 || mAppendTypeParamName) && !mIsDoCoMo) {
-            builder.append(Constants.ATTR_TYPE).append(VCARD_ATTR_EQUAL);
+            builder.append(Constants.PARAM_TYPE).append(VCARD_PARAM_EQUAL);
         }
         builder.append(type);
     }
 
     /**
-     * Returns true when the property line should contain charset attribute
+     * Returns true when the property line should contain charset parameter
      * information. This method may return true even when vCard version is 3.0.
      *
      * Strictly, adding charset information is invalid in VCard 3.0.
-     * However we'll add the info only when used charset is not UTF-8
+     * However we'll add the info only when charset we use is not UTF-8
      * in vCard 3.0 format, since parser side may be able to use the charset
-     * via this field, though we may encounter another problem by adding it...
+     * via this field, though we may encounter another problem by adding it.
      *
      * e.g. Japanese mobile phones use Shift_Jis while RFC 2426
      * recommends UTF-8. By adding this field, parsers may be able
      * to know this text is NOT UTF-8 but Shift_Jis.
      */
-    private boolean shouldAppendCharsetAttribute(final String propertyValue) {
+    private boolean shouldAppendCharsetParameter(final String propertyValue) {
         return (!VCardUtils.containsOnlyPrintableAscii(propertyValue) &&
                         (!mIsV30 || !mUsesUtf8));
     }
 
-    private boolean shouldAppendCharsetAttribute(final List<String> propertyValueList) {
-        boolean shouldAppendBasically = false;
+    private boolean shouldAppendCharsetParameters(final List<String> propertyValueList) {
+        if (mIsV30 && mUsesUtf8) {
+            return false;
+        }
         for (String propertyValue : propertyValueList) {
             if (!VCardUtils.containsOnlyPrintableAscii(propertyValue)) {
-                shouldAppendBasically = true;
-                break;
+                return true;
             }
         }
-        return shouldAppendBasically && (!mIsV30 || !mUsesUtf8);
+        return false;
     }
 
     private String encodeQuotedPrintable(String str) {
@@ -2315,11 +2317,11 @@ public class VCardComposer {
 
         final long dateAsLong = mCursor.getLong(DATE_COLUMN_INDEX);
         builder.append(VCARD_PROPERTY_X_TIMESTAMP);
-        builder.append(VCARD_ATTR_SEPARATOR);
-        appendTypeAttribute(builder, callLogTypeStr);
+        builder.append(VCARD_PARAM_SEPARATOR);
+        appendTypeParameter(builder, callLogTypeStr);
         builder.append(VCARD_DATA_SEPARATOR);
         builder.append(toRfc2455Format(dateAsLong));
-        builder.append(VCARD_COL_SEPARATOR);
+        builder.append(VCARD_END_OF_LINE);
     }
 
     private String createOneCallLogEntryInternal() {
index 9581c74..545c09b 100644 (file)
@@ -163,7 +163,7 @@ public class VCardConfig {
      * is also valid. In vCrad 3.0, this flag is unnecessary, since "TYPE=" is MUST in
      * vCard 3.0 specification.
      *
-     * If you are targeting to some importer which cannot accept type attributes (params)
+     * If you are targeting to some importer which cannot accept type parameters
      * without "TYPE=" string (which should be rare though), please use this flag.
      *
      * XXX: Really rare?
index b5e5049..0ffdb6c 100644 (file)
@@ -35,7 +35,7 @@ public abstract class VCardParser {
      * 
      * In order to avoid "misunderstanding" charset as much as possible, this method
      * use "ISO-8859-1" for reading the stream. When charset is specified in some property
-     * (with "CHARSET=..." attribute), the string is decoded to raw bytes and encoded to
+     * (with "CHARSET=..." parameter), the string is decoded to raw bytes and encoded to
      * the charset. This method assumes that "ISO-8859-1" has 1 to 1 mapping in all 8bit
      * characters, which is not completely sure. In some cases, this "decoding-encoding"
      * scheme may fail. To avoid the case,
index 376327c..c59e258 100644 (file)
@@ -40,7 +40,7 @@ public class VCardUtils {
      */
 
     // Note that not all types are included in this map/set, since, for example, TYPE_HOME_FAX is
-    // converted to two attribute Strings. These only contain some minor fields valid in both
+    // converted to two parameter Strings. These only contain some minor fields valid in both
     // vCard and current (as of 2009-08-07) Contacts structure. 
     private static final Map<Integer, String> sKnownPhoneTypesMap_ItoS;
     private static final Set<String> sPhoneTypesSetUnknownToContacts;
@@ -53,30 +53,30 @@ public class VCardUtils {
         sKnownPhoneTypesMap_ItoS = new HashMap<Integer, String>();
         sKnownPhoneTypeMap_StoI = new HashMap<String, Integer>();
 
-        sKnownPhoneTypesMap_ItoS.put(Phone.TYPE_CAR, Constants.ATTR_TYPE_CAR);
-        sKnownPhoneTypeMap_StoI.put(Constants.ATTR_TYPE_CAR, Phone.TYPE_CAR);
-        sKnownPhoneTypesMap_ItoS.put(Phone.TYPE_PAGER, Constants.ATTR_TYPE_PAGER);
-        sKnownPhoneTypeMap_StoI.put(Constants.ATTR_TYPE_PAGER, Phone.TYPE_PAGER);
-        sKnownPhoneTypesMap_ItoS.put(Phone.TYPE_ISDN, Constants.ATTR_TYPE_ISDN);
-        sKnownPhoneTypeMap_StoI.put(Constants.ATTR_TYPE_ISDN, Phone.TYPE_ISDN);
+        sKnownPhoneTypesMap_ItoS.put(Phone.TYPE_CAR, Constants.PARAM_TYPE_CAR);
+        sKnownPhoneTypeMap_StoI.put(Constants.PARAM_TYPE_CAR, Phone.TYPE_CAR);
+        sKnownPhoneTypesMap_ItoS.put(Phone.TYPE_PAGER, Constants.PARAM_TYPE_PAGER);
+        sKnownPhoneTypeMap_StoI.put(Constants.PARAM_TYPE_PAGER, Phone.TYPE_PAGER);
+        sKnownPhoneTypesMap_ItoS.put(Phone.TYPE_ISDN, Constants.PARAM_TYPE_ISDN);
+        sKnownPhoneTypeMap_StoI.put(Constants.PARAM_TYPE_ISDN, Phone.TYPE_ISDN);
         
-        sKnownPhoneTypeMap_StoI.put(Constants.ATTR_TYPE_HOME, Phone.TYPE_HOME);
-        sKnownPhoneTypeMap_StoI.put(Constants.ATTR_TYPE_WORK, Phone.TYPE_WORK);
-        sKnownPhoneTypeMap_StoI.put(Constants.ATTR_TYPE_CELL, Phone.TYPE_MOBILE);
+        sKnownPhoneTypeMap_StoI.put(Constants.PARAM_TYPE_HOME, Phone.TYPE_HOME);
+        sKnownPhoneTypeMap_StoI.put(Constants.PARAM_TYPE_WORK, Phone.TYPE_WORK);
+        sKnownPhoneTypeMap_StoI.put(Constants.PARAM_TYPE_CELL, Phone.TYPE_MOBILE);
                 
-        sKnownPhoneTypeMap_StoI.put(Constants.ATTR_PHONE_EXTRA_TYPE_OTHER, Phone.TYPE_OTHER);
-        sKnownPhoneTypeMap_StoI.put(Constants.ATTR_PHONE_EXTRA_TYPE_CALLBACK, Phone.TYPE_CALLBACK);
+        sKnownPhoneTypeMap_StoI.put(Constants.PARAM_PHONE_EXTRA_TYPE_OTHER, Phone.TYPE_OTHER);
+        sKnownPhoneTypeMap_StoI.put(Constants.PARAM_PHONE_EXTRA_TYPE_CALLBACK, Phone.TYPE_CALLBACK);
         sKnownPhoneTypeMap_StoI.put(
-                Constants.ATTR_PHONE_EXTRA_TYPE_COMPANY_MAIN, Phone.TYPE_COMPANY_MAIN);
-        sKnownPhoneTypeMap_StoI.put(Constants.ATTR_PHONE_EXTRA_TYPE_RADIO, Phone.TYPE_RADIO);
-        sKnownPhoneTypeMap_StoI.put(Constants.ATTR_PHONE_EXTRA_TYPE_TTY_TDD, Phone.TYPE_TTY_TDD);
-        sKnownPhoneTypeMap_StoI.put(Constants.ATTR_PHONE_EXTRA_TYPE_ASSISTANT,
+                Constants.PARAM_PHONE_EXTRA_TYPE_COMPANY_MAIN, Phone.TYPE_COMPANY_MAIN);
+        sKnownPhoneTypeMap_StoI.put(Constants.PARAM_PHONE_EXTRA_TYPE_RADIO, Phone.TYPE_RADIO);
+        sKnownPhoneTypeMap_StoI.put(Constants.PARAM_PHONE_EXTRA_TYPE_TTY_TDD, Phone.TYPE_TTY_TDD);
+        sKnownPhoneTypeMap_StoI.put(Constants.PARAM_PHONE_EXTRA_TYPE_ASSISTANT,
                 Phone.TYPE_ASSISTANT);
 
         sPhoneTypesSetUnknownToContacts = new HashSet<String>();
-        sPhoneTypesSetUnknownToContacts.add(Constants.ATTR_TYPE_MODEM);
-        sPhoneTypesSetUnknownToContacts.add(Constants.ATTR_TYPE_BBS);
-        sPhoneTypesSetUnknownToContacts.add(Constants.ATTR_TYPE_VIDEO);
+        sPhoneTypesSetUnknownToContacts.add(Constants.PARAM_TYPE_MODEM);
+        sPhoneTypesSetUnknownToContacts.add(Constants.PARAM_TYPE_BBS);
+        sPhoneTypesSetUnknownToContacts.add(Constants.PARAM_TYPE_VIDEO);
 
         sKnownImPropNameMap_ItoS = new HashMap<Integer, String>();
         sKnownImPropNameMap_ItoS.put(Im.PROTOCOL_AIM, Constants.PROPERTY_X_AIM);
@@ -90,7 +90,7 @@ public class VCardUtils {
         sKnownImPropNameMap_ItoS.put(Im.PROTOCOL_NETMEETING, Constants.PROPERTY_X_NETMEETING);
     }
 
-    public static String getPhoneAttributeString(Integer type) {
+    public static String getPhoneTypeString(Integer type) {
         return sKnownPhoneTypesMap_ItoS.get(type);
     }
 
@@ -107,9 +107,9 @@ public class VCardUtils {
         if (types != null) {
             for (String typeString : types) {
                 typeString = typeString.toUpperCase(); 
-                if (typeString.equals(Constants.ATTR_TYPE_PREF)) {
+                if (typeString.equals(Constants.PARAM_TYPE_PREF)) {
                     hasPref = true;
-                } else if (typeString.equals(Constants.ATTR_TYPE_FAX)) {
+                } else if (typeString.equals(Constants.PARAM_TYPE_FAX)) {
                     isFax = true;
                 } else {
                     if (typeString.startsWith("X-") && type < 0) {
@@ -153,14 +153,14 @@ public class VCardUtils {
         return sKnownImPropNameMap_ItoS.get(protocol);
     }
 
-    public static boolean isValidPhoneAttribute(String phoneAttribute, int vcardType) {
+    public static boolean isValidPhoneType(String phoneType, int vcardType) {
         // TODO: check the following.
         // - it may violate vCard spec
         // - it may contain non-ASCII characters
         //
         // TODO: use vcardType
-        return (phoneAttribute.startsWith("X-") || phoneAttribute.startsWith("x-") ||
-                sPhoneTypesSetUnknownToContacts.contains(phoneAttribute));
+        return (phoneType.startsWith("X-") || phoneType.startsWith("x-") ||
+                sPhoneTypesSetUnknownToContacts.contains(phoneType));
     }
     
     public static String[] sortNameElements(int vcardType,