VCardConstants.java revision 422643669a44d08ca8b22a73286fae988a288b0e
1/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.android.vcard;
17
18/**
19 * Constants used in both exporter and importer code.
20 */
21public class VCardConstants {
22    public static final String VERSION_V21 = "2.1";
23    public static final String VERSION_V30 = "3.0";
24    public static final String VERSION_V40 = "4.0";
25
26    // The property names valid both in vCard 2.1 and 3.0.
27    public static final String PROPERTY_BEGIN = "BEGIN";
28    public static final String PROPERTY_VERSION = "VERSION";
29    public static final String PROPERTY_N = "N";
30    public static final String PROPERTY_FN = "FN";
31    public static final String PROPERTY_ADR = "ADR";
32    public static final String PROPERTY_EMAIL = "EMAIL";
33    public static final String PROPERTY_NOTE = "NOTE";
34    public static final String PROPERTY_ORG = "ORG";
35    public static final String PROPERTY_SOUND = "SOUND";  // Not fully supported.
36    public static final String PROPERTY_TEL = "TEL";
37    public static final String PROPERTY_TITLE = "TITLE";
38    public static final String PROPERTY_ROLE = "ROLE";
39    public static final String PROPERTY_PHOTO = "PHOTO";
40    public static final String PROPERTY_LOGO = "LOGO";
41    public static final String PROPERTY_URL = "URL";
42    public static final String PROPERTY_BDAY = "BDAY";  // Birthday (3.0, 4.0)
43    public static final String PROPERTY_BIRTH = "BIRTH";  // Place of birth (4.0)
44    public static final String PROPERTY_ANNIVERSARY = "ANNIVERSARY";  // Date of marriage (4.0)
45    public static final String PROPERTY_NAME = "NAME";  // (3.0, 4,0)
46    public static final String PROPERTY_NICKNAME = "NICKNAME";  // (3.0, 4.0)
47    public static final String PROPERTY_SORT_STRING = "SORT-STRING";  // (3.0, 4.0)
48    public static final String PROPERTY_IMPP = "IMPP";  // RFC 4770 (vCard 3.0) and vCard 4.0
49    public static final String PROPERTY_END = "END";
50
51    // defact SIP property which had been used till RFC 4770.
52    public static final String PROPERTY_X_SIP = "X-SIP";
53
54    // Valid property names not supported (not appropriately handled) by our importer.
55    // TODO: Should be removed from the view of memory efficiency?
56    public static final String PROPERTY_REV = "REV";
57    public static final String PROPERTY_AGENT = "AGENT";  // (3.0)
58    public static final String PROPERTY_DDAY = "DDAY";  // Date of death (4.0)
59    public static final String PROPERTY_DEATH = "DEATH";  // Place of death (4.0)
60
61    // Available in vCard 3.0. Shoud not use when composing vCard 2.1 file.
62
63    // De-fact property values expressing phonetic names.
64    public static final String PROPERTY_X_PHONETIC_FIRST_NAME = "X-PHONETIC-FIRST-NAME";
65    public static final String PROPERTY_X_PHONETIC_MIDDLE_NAME = "X-PHONETIC-MIDDLE-NAME";
66    public static final String PROPERTY_X_PHONETIC_LAST_NAME = "X-PHONETIC-LAST-NAME";
67
68    // Properties both ContactsStruct and de-fact vCard extensions
69    // Shown in http://en.wikipedia.org/wiki/VCard support are defined here.
70    public static final String PROPERTY_X_AIM = "X-AIM";
71    public static final String PROPERTY_X_MSN = "X-MSN";
72    public static final String PROPERTY_X_YAHOO = "X-YAHOO";
73    public static final String PROPERTY_X_ICQ = "X-ICQ";
74    public static final String PROPERTY_X_JABBER = "X-JABBER";
75    public static final String PROPERTY_X_GOOGLE_TALK = "X-GOOGLE-TALK";
76    public static final String PROPERTY_X_SKYPE_USERNAME = "X-SKYPE-USERNAME";
77    // Properties only ContactsStruct has. We alse use this.
78    public static final String PROPERTY_X_QQ = "X-QQ";
79    public static final String PROPERTY_X_NETMEETING = "X-NETMEETING";
80
81    // Phone number for Skype, available as usual phone.
82    public static final String PROPERTY_X_SKYPE_PSTNNUMBER = "X-SKYPE-PSTNNUMBER";
83
84    // Property for Android-specific fields.
85    public static final String PROPERTY_X_ANDROID_CUSTOM = "X-ANDROID-CUSTOM";
86
87    // Properties for DoCoMo vCard.
88    public static final String PROPERTY_X_CLASS = "X-CLASS";
89    public static final String PROPERTY_X_REDUCTION = "X-REDUCTION";
90    public static final String PROPERTY_X_NO = "X-NO";
91    public static final String PROPERTY_X_DCM_HMN_MODE = "X-DCM-HMN-MODE";
92
93    public static final String PARAM_TYPE = "TYPE";
94
95    public static final String PARAM_TYPE_HOME = "HOME";
96    public static final String PARAM_TYPE_WORK = "WORK";
97    public static final String PARAM_TYPE_FAX = "FAX";
98    public static final String PARAM_TYPE_CELL = "CELL";
99    public static final String PARAM_TYPE_VOICE = "VOICE";
100    public static final String PARAM_TYPE_INTERNET = "INTERNET";
101
102    public static final String PARAM_CHARSET = "CHARSET";
103    public static final String PARAM_ENCODING = "ENCODING";
104
105    // Abbreviation of "prefered" according to vCard 2.1 specification.
106    // We interpret this value as "primary" property during import/export.
107    //
108    // Note: Both vCard specs does not mention anything about the requirement for this parameter,
109    //       but there may be some vCard importer which will get confused with more than
110    //       one "PREF"s in one property name, while Android accepts them.
111    public static final String PARAM_TYPE_PREF = "PREF";
112
113    // Phone type parameters valid in vCard and known to ContactsContract, but not so common.
114    public static final String PARAM_TYPE_CAR = "CAR";
115    public static final String PARAM_TYPE_ISDN = "ISDN";
116    public static final String PARAM_TYPE_PAGER = "PAGER";
117    public static final String PARAM_TYPE_TLX = "TLX";  // Telex
118
119    // Phone types existing in vCard 2.1 but not known to ContactsContract.
120    public static final String PARAM_TYPE_MODEM = "MODEM";
121    public static final String PARAM_TYPE_MSG = "MSG";
122    public static final String PARAM_TYPE_BBS = "BBS";
123    public static final String PARAM_TYPE_VIDEO = "VIDEO";
124
125    public static final String PARAM_ENCODING_7BIT = "7BIT";
126    public static final String PARAM_ENCODING_8BIT = "8BIT";
127    public static final String PARAM_ENCODING_QP = "QUOTED-PRINTABLE";
128    public static final String PARAM_ENCODING_BASE64 = "BASE64";  // Available in vCard 2.1
129    public static final String PARAM_ENCODING_B = "B";  // Available in vCard 3.0
130
131    // TYPE parameters for Phones, which are not formally valid in vCard (at least 2.1).
132    // These types are basically encoded to "X-" parameters when composing vCard.
133    // Parser passes these when "X-" is added to the parameter or not.
134    public static final String PARAM_PHONE_EXTRA_TYPE_CALLBACK = "CALLBACK";
135    public static final String PARAM_PHONE_EXTRA_TYPE_RADIO = "RADIO";
136    public static final String PARAM_PHONE_EXTRA_TYPE_TTY_TDD = "TTY-TDD";
137    public static final String PARAM_PHONE_EXTRA_TYPE_ASSISTANT = "ASSISTANT";
138    // vCard composer translates this type to "WORK" + "PREF". Just for parsing.
139    public static final String PARAM_PHONE_EXTRA_TYPE_COMPANY_MAIN = "COMPANY-MAIN";
140    // vCard composer translates this type to "VOICE" Just for parsing.
141    public static final String PARAM_PHONE_EXTRA_TYPE_OTHER = "OTHER";
142
143    // TYPE parameters for postal addresses.
144    public static final String PARAM_ADR_TYPE_PARCEL = "PARCEL";
145    public static final String PARAM_ADR_TYPE_DOM = "DOM";
146    public static final String PARAM_ADR_TYPE_INTL = "INTL";
147
148    public static final String PARAM_LANGUAGE = "LANGUAGE";
149
150    // SORT-AS parameter introduced in vCard 4.0 (as of rev.13)
151    public static final String PARAM_SORT_AS = "SORT-AS";
152
153    // TYPE parameters not officially valid but used in some vCard exporter.
154    // Do not use in composer side.
155    public static final String PARAM_EXTRA_TYPE_COMPANY = "COMPANY";
156
157    public interface ImportOnly {
158        public static final String PROPERTY_X_NICKNAME = "X-NICKNAME";
159        // Some device emits this "X-" parameter for expressing Google Talk,
160        // which is specifically invalid but should be always properly accepted, and emitted
161        // in some special case (for that device/application).
162        public static final String PROPERTY_X_GOOGLE_TALK_WITH_SPACE = "X-GOOGLE TALK";
163    }
164
165    //// Mainly for package constants.
166
167    // DoCoMo specific type parameter. Used with "SOUND" property, which is alternate of
168    // SORT-STRING invCard 3.0.
169    /* package */ static final String PARAM_TYPE_X_IRMC_N = "X-IRMC-N";
170
171    // Used in unit test.
172    public static final int MAX_DATA_COLUMN = 15;
173
174    /* package */ static final int MAX_CHARACTER_NUMS_QP = 76;
175    static final int MAX_CHARACTER_NUMS_BASE64_V30 = 75;
176
177    private VCardConstants() {
178    }
179}