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  */
16 package com.android.vcard;
17 
18 /**
19  * Constants used in both exporter and importer code.
20  */
21 public class VCardConstants {
22     /* package */ static final String LOG_TAG = "vCard";
23     public static final String VERSION_V21 = "2.1";
24     public static final String VERSION_V30 = "3.0";
25     public static final String VERSION_V40 = "4.0";
26 
27     // Valid and supported property names.
28     public static final String PROPERTY_BEGIN = "BEGIN";
29     public static final String PROPERTY_VERSION = "VERSION";
30     public static final String PROPERTY_N = "N";
31     public static final String PROPERTY_FN = "FN";
32     public static final String PROPERTY_ADR = "ADR";
33     public static final String PROPERTY_EMAIL = "EMAIL";
34     public static final String PROPERTY_NOTE = "NOTE";
35     public static final String PROPERTY_ORG = "ORG";
36     public static final String PROPERTY_SOUND = "SOUND";  // Not fully supported.
37     public static final String PROPERTY_TEL = "TEL";
38     public static final String PROPERTY_TITLE = "TITLE";
39     public static final String PROPERTY_ROLE = "ROLE";
40     public static final String PROPERTY_PHOTO = "PHOTO";
41     public static final String PROPERTY_LOGO = "LOGO";
42     public static final String PROPERTY_URL = "URL";
43     public static final String PROPERTY_BDAY = "BDAY";  // Birthday (3.0, 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)
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     // Valid property names which are not supported (not appropriately handled) by
52     // importer/exporter. Those properties will be read and discarded silently.
53     public static final String PROPERTY_REV = "REV";
54     public static final String PROPERTY_AGENT = "AGENT";  // (3.0)
55     public static final String PROPERTY_GENDER = "GENDER";  // (4.0)
56     public static final String PROPERTY_XML = "XML";  // (4.0)
57     public static final String PROPERTY_FBURL = "FBURL";  // (4.0)
58     public static final String PROPERTY_PRODID = "PRODID";  // (4.0)
59     public static final String PROPERTY_RELATED = "RELATED";  // (4.0)
60     public static final String PROPERTY_CATEGORIES = "CATEGORIES";  // (4.0)
61     public static final String PROPERTY_CLIENTPIDMAP = "CLIENTPIDMAP";  // (4.0)
62     public static final String PROPERTY_CALURI = "CALURI";  // (4.0)
63 
64 
65 
66     // defact SIP property which had been used till RFC 4770.
67     public static final String PROPERTY_X_SIP = "X-SIP";
68 
69     // Available in vCard 3.0. Shoud not use when composing vCard 2.1 file.
70 
71     // De-fact property values expressing phonetic names.
72     public static final String PROPERTY_X_PHONETIC_FIRST_NAME = "X-PHONETIC-FIRST-NAME";
73     public static final String PROPERTY_X_PHONETIC_MIDDLE_NAME = "X-PHONETIC-MIDDLE-NAME";
74     public static final String PROPERTY_X_PHONETIC_LAST_NAME = "X-PHONETIC-LAST-NAME";
75 
76     // Properties both ContactsStruct and de-fact vCard extensions
77     // Shown in http://en.wikipedia.org/wiki/VCard support are defined here.
78     public static final String PROPERTY_X_AIM = "X-AIM";
79     public static final String PROPERTY_X_MSN = "X-MSN";
80     public static final String PROPERTY_X_YAHOO = "X-YAHOO";
81     public static final String PROPERTY_X_ICQ = "X-ICQ";
82     public static final String PROPERTY_X_JABBER = "X-JABBER";
83     public static final String PROPERTY_X_GOOGLE_TALK = "X-GOOGLE-TALK";
84     public static final String PROPERTY_X_SKYPE_USERNAME = "X-SKYPE-USERNAME";
85     // Properties only ContactsStruct has. We alse use this.
86     public static final String PROPERTY_X_QQ = "X-QQ";
87     public static final String PROPERTY_X_NETMEETING = "X-NETMEETING";
88 
89     // Phone number for Skype, available as usual phone.
90     public static final String PROPERTY_X_SKYPE_PSTNNUMBER = "X-SKYPE-PSTNNUMBER";
91 
92     // Property for Android-specific fields.
93     public static final String PROPERTY_X_ANDROID_CUSTOM = "X-ANDROID-CUSTOM";
94 
95     // Properties for DoCoMo vCard.
96     public static final String PROPERTY_X_CLASS = "X-CLASS";
97     public static final String PROPERTY_X_REDUCTION = "X-REDUCTION";
98     public static final String PROPERTY_X_NO = "X-NO";
99     public static final String PROPERTY_X_DCM_HMN_MODE = "X-DCM-HMN-MODE";
100 
101     public static final String PARAM_TYPE = "TYPE";
102 
103     public static final String PARAM_TYPE_HOME = "HOME";
104     public static final String PARAM_TYPE_WORK = "WORK";
105     public static final String PARAM_TYPE_FAX = "FAX";
106     public static final String PARAM_TYPE_CELL = "CELL";
107     public static final String PARAM_TYPE_VOICE = "VOICE";
108     public static final String PARAM_TYPE_INTERNET = "INTERNET";
109 
110     public static final String PARAM_VALUE = "VALUE";
111     public static final String PARAM_CHARSET = "CHARSET";
112     public static final String PARAM_ENCODING = "ENCODING";
113 
114     // Abbreviation of "prefered" according to vCard 2.1 specification.
115     // We interpret this value as "primary" property during import/export.
116     //
117     // Note: Both vCard specs does not mention anything about the requirement for this parameter,
118     //       but there may be some vCard importer which will get confused with more than
119     //       one "PREF"s in one property name, while Android accepts them.
120     public static final String PARAM_TYPE_PREF = "PREF";
121 
122     // Phone type parameters valid in vCard and known to ContactsContract, but not so common.
123     public static final String PARAM_TYPE_CAR = "CAR";
124     public static final String PARAM_TYPE_ISDN = "ISDN";
125     public static final String PARAM_TYPE_PAGER = "PAGER";
126     public static final String PARAM_TYPE_TLX = "TLX";  // Telex
127 
128     // Phone types existing in vCard 2.1 but not known to ContactsContract.
129     public static final String PARAM_TYPE_MODEM = "MODEM";
130     public static final String PARAM_TYPE_MSG = "MSG";
131     public static final String PARAM_TYPE_BBS = "BBS";
132     public static final String PARAM_TYPE_VIDEO = "VIDEO";
133 
134     public static final String PARAM_ENCODING_7BIT = "7BIT";
135     public static final String PARAM_ENCODING_8BIT = "8BIT";
136     public static final String PARAM_ENCODING_QP = "QUOTED-PRINTABLE";
137     public static final String PARAM_ENCODING_BASE64 = "BASE64";  // Available in vCard 2.1
138     public static final String PARAM_ENCODING_B = "B";  // Available in vCard 3.0
139 
140     // TYPE parameters for Phones, which are not formally valid in vCard (at least 2.1).
141     // These types are basically encoded to "X-" parameters when composing vCard.
142     // Parser passes these when "X-" is added to the parameter or not.
143     public static final String PARAM_PHONE_EXTRA_TYPE_CALLBACK = "CALLBACK";
144     public static final String PARAM_PHONE_EXTRA_TYPE_RADIO = "RADIO";
145     public static final String PARAM_PHONE_EXTRA_TYPE_TTY_TDD = "TTY-TDD";
146     public static final String PARAM_PHONE_EXTRA_TYPE_ASSISTANT = "ASSISTANT";
147     // vCard composer translates this type to "WORK" + "PREF". Just for parsing.
148     public static final String PARAM_PHONE_EXTRA_TYPE_COMPANY_MAIN = "COMPANY-MAIN";
149     // vCard composer translates this type to "VOICE" Just for parsing.
150     public static final String PARAM_PHONE_EXTRA_TYPE_OTHER = "OTHER";
151 
152     // TYPE parameters for postal addresses.
153     public static final String PARAM_ADR_TYPE_PARCEL = "PARCEL";
154     public static final String PARAM_ADR_TYPE_DOM = "DOM";
155     public static final String PARAM_ADR_TYPE_INTL = "INTL";
156 
157     public static final String PARAM_LANGUAGE = "LANGUAGE";
158 
159     // SORT-AS parameter introduced in vCard 4.0 (as of rev.13)
160     public static final String PARAM_SORT_AS = "SORT-AS";
161 
162     // TYPE parameters not officially valid but used in some vCard exporter.
163     // Do not use in composer side.
164     public static final String PARAM_EXTRA_TYPE_COMPANY = "COMPANY";
165 
166     public interface ImportOnly {
167         public static final String PROPERTY_X_NICKNAME = "X-NICKNAME";
168         // Some device emits this "X-" parameter for expressing Google Talk,
169         // which is specifically invalid but should be always properly accepted, and emitted
170         // in some special case (for that device/application).
171         public static final String PROPERTY_X_GOOGLE_TALK_WITH_SPACE = "X-GOOGLE TALK";
172     }
173 
174     //// Mainly for package constants.
175 
176     // DoCoMo specific type parameter. Used with "SOUND" property, which is alternate of
177     // SORT-STRING invCard 3.0.
178     /* package */ static final String PARAM_TYPE_X_IRMC_N = "X-IRMC-N";
179 
180     // Used in unit test.
181     public static final int MAX_DATA_COLUMN = 15;
182 
183     /* package */ static final int MAX_CHARACTER_NUMS_QP = 76;
184     static final int MAX_CHARACTER_NUMS_BASE64_V30 = 75;
185 
VCardConstants()186     private VCardConstants() {
187     }
188 }