Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6cb76ac3 authored by Daisuke Miyakawa's avatar Daisuke Miyakawa
Browse files

Rename the term "attribute"/"attr" to "parameter"/param".

We had been using "parameter"/"param" by mistake, while both vCard
formats uses theterm "attribute"/"attr". This is confusing.

Internal issue number: 2233884
parent 66da163d
Loading
Loading
Loading
Loading
+37 −42
Original line number Diff line number Diff line
@@ -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";
+26 −27
Original line number Diff line number Diff line
@@ -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;
                        }
                    }
+190 −188

File changed.

Preview size limit exceeded, changes collapsed.

+1 −1
Original line number Diff line number Diff line
@@ -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?
+1 −1
Original line number Diff line number Diff line
@@ -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,
Loading