14199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa/*
24199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * Copyright (C) 2009 The Android Open Source Project
34199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa *
44199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * Licensed under the Apache License, Version 2.0 (the "License");
54199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * you may not use this file except in compliance with the License.
64199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * You may obtain a copy of the License at
74199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa *
84199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa *      http://www.apache.org/licenses/LICENSE-2.0
94199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa *
104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * Unless required by applicable law or agreed to in writing, software
114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * distributed under the License is distributed on an "AS IS" BASIS,
124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * See the License for the specific language governing permissions and
144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * limitations under the License.
154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa */
164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawapackage com.android.vcard;
174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.telephony.PhoneNumberUtils;
194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.util.Log;
204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport java.util.HashMap;
224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport java.util.HashSet;
234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport java.util.Map;
244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport java.util.Set;
254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa/**
274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * The class representing VCard related configurations. Useful static methods are not in this class
284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * but in VCardUtils.
294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa */
304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawapublic class VCardConfig {
3102117b3d19787ff65486b9f9db8abd338ae4c9f9Daisuke Miyakawa    private static final String LOG_TAG = VCardConstants.LOG_TAG;
324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /* package */ static final int LOG_LEVEL_NONE = 0;
344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /* package */ static final int LOG_LEVEL_PERFORMANCE_MEASUREMENT = 0x1;
354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /* package */ static final int LOG_LEVEL_SHOW_WARNING = 0x2;
364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /* package */ static final int LOG_LEVEL_VERBOSE =
374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        LOG_LEVEL_PERFORMANCE_MEASUREMENT | LOG_LEVEL_SHOW_WARNING;
384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /* package */ static final int LOG_LEVEL = LOG_LEVEL_NONE;
404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * The charset used during import.
444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * We cannot determine which charset should be used to interpret lines in vCard,
474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * while Java requires us to specify it when InputStream is used.
484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * We need to rely on the mechanism due to some performance reason.
494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * In order to avoid "misinterpretation" of charset and lose any data in vCard,
524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * "ISO-8859-1" is first used for reading the stream.
534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * When a charset is specified in a property (with "CHARSET=..." parameter),
544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * the string is decoded to raw bytes and encoded into the specific charset,
554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Unicode specification there's a one to one mapping between each byte in ISO-8859-1
584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * and a codepoint, and Java specification requires runtime must have the charset.
594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Thus, ISO-8859-1 is one effective mapping for intermediate mapping.
604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static final String DEFAULT_INTERMEDIATE_CHARSET = "ISO-8859-1";
634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * The charset used when there's no information affbout what charset should be used to
664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * encode the binary given from vCard.
674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static final String DEFAULT_IMPORT_CHARSET = "UTF-8";
694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static final String DEFAULT_EXPORT_CHARSET = "UTF-8";
704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    /**
7236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa     * Do not use statically like "version == VERSION_V21"
7336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa     */
74be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    public static final int VERSION_21 = 0;
75be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    public static final int VERSION_30 = 1;
76be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    public static final int VERSION_40 = 2;
77be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    public static final int VERSION_MASK = 3;
784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static final int NAME_ORDER_DEFAULT = 0;
804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static final int NAME_ORDER_EUROPE = 0x4;
814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static final int NAME_ORDER_JAPANESE = 0x8;
824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private static final int NAME_ORDER_MASK = 0xC;
834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    // 0x10 is reserved for safety
854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * The flag indicating the vCard composer will add some "X-" properties used only in Android
894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * when the formal vCard specification does not have appropriate fields for that data.
904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * For example, Android accepts nickname information while vCard 2.1 does not.
934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * When this flag is on, vCard composer emits alternative "X-" property (like "X-NICKNAME")
944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * instead of just dropping it.
954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * vCard parser code automatically parses the field emitted even when this flag is off.
984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
1004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private static final int FLAG_USE_ANDROID_PROPERTY = 0x80000000;
10102117b3d19787ff65486b9f9db8abd338ae4c9f9Daisuke Miyakawa
1024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
1034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
1044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * The flag indicating the vCard composer will add some "X-" properties seen in the
1054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * vCard data emitted by the other softwares/devices when the formal vCard specification
1064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * does not have appropriate field(s) for that data.
10702117b3d19787ff65486b9f9db8abd338ae4c9f9Daisuke Miyakawa     * </p>
1084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
1094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * One example is X-PHONETIC-FIRST-NAME/X-PHONETIC-MIDDLE-NAME/X-PHONETIC-LAST-NAME, which are
1104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * for phonetic name (how the name is pronounced), seen in the vCard emitted by some other
1114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * non-Android devices/softwares. We chose to enable the vCard composer to use those
1124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * defact properties since they are also useful for Android devices.
1134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
1144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
1154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Note for developers: only "X-" properties should be added with this flag. vCard 2.1/3.0
1164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * allows any kind of "X-" properties but does not allow non-"X-" properties (except IANA tokens
1174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * in vCard 3.0). Some external parsers may get confused with non-valid, non-"X-" properties.
1184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
1194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
1204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private static final int FLAG_USE_DEFACT_PROPERTY = 0x40000000;
1214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
1234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
1244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * The flag indicating some specific dialect seen in vCard of DoCoMo (one of Japanese
1254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * mobile careers) should be used. This flag does not include any other information like
1264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * that "the vCard is for Japanese". So it is "possible" that "the vCard should have DoCoMo's
1274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * dialect but the name order should be European", but it is not recommended.
1284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
1294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
1304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private static final int FLAG_DOCOMO = 0x20000000;
1314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
1334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
1344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * The flag indicating the vCard composer does "NOT" use Quoted-Printable toward "primary"
1354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * properties even though it is required by vCard 2.1 (QP is prohibited in vCard 3.0).
1364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
1374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
1384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * We actually cannot define what is the "primary" property. Note that this is NOT defined
1394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * in vCard specification either. Also be aware that it is NOT related to "primary" notion
1404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * used in {@link android.provider.ContactsContract}.
1414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * This notion is just for vCard composition in Android.
1424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
1434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
1444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * We added this Android-specific notion since some (incomplete) vCard exporters for vCard 2.1
1454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * do NOT use Quoted-Printable encoding toward some properties related names like "N", "FN", etc.
1464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * even when their values contain non-ascii or/and CR/LF, while they use the encoding in the
1474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * other properties like "ADR", "ORG", etc.
1484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
1494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * We are afraid of the case where some vCard importer also forget handling QP presuming QP is
1504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * not used in such fields.
1514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
1524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
1534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * This flag is useful when some target importer you are going to focus on does not accept
1544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * such properties with Quoted-Printable encoding.
1554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
1564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
1574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Again, we should not use this flag at all for complying vCard 2.1 spec.
1584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
1594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
1604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * In vCard 3.0, Quoted-Printable is explicitly "prohibitted", so we don't need to care this
1614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * kind of problem (hopefully).
1624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
1634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * @hide
1644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
1654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static final int FLAG_REFRAIN_QP_TO_NAME_PROPERTIES = 0x10000000;
1664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
1684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
1694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * The flag indicating that phonetic name related fields must be converted to
1704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * appropriate form. Note that "appropriate" is not defined in any vCard specification.
1714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * This is Android-specific.
1724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
1734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
1744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * One typical (and currently sole) example where we need this flag is the time when
1754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * we need to emit Japanese phonetic names into vCard entries. The property values
1764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * should be encoded into half-width katakana when the target importer is Japanese mobile
1774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * phones', which are probably not able to parse full-width hiragana/katakana for
1784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * historical reasons, while the vCard importers embedded to softwares for PC should be
1794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * able to parse them as we expect.
1804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
1814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
1824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static final int FLAG_CONVERT_PHONETIC_NAME_STRINGS = 0x08000000;
1834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
1854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
1864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * The flag indicating the vCard composer "for 2.1" emits "TYPE=" string toward TYPE params
1874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * every time possible. The default behavior does not emit it and is valid in the spec.
1884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * In vCrad 3.0, this flag is unnecessary, since "TYPE=" is MUST in vCard 3.0 specification.
1894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
1904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
1914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Detail:
1924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * How more than one TYPE fields are expressed is different between vCard 2.1 and vCard 3.0.
1934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
1944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
1954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * e.g.
1964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
1974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <ol>
1984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <li>Probably valid in both vCard 2.1 and vCard 3.0: "ADR;TYPE=DOM;TYPE=HOME:..."</li>
1994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <li>Valid in vCard 2.1 but not in vCard 3.0: "ADR;DOM;HOME:..."</li>
2004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <li>Valid in vCard 3.0 but not in vCard 2.1: "ADR;TYPE=DOM,HOME:..."</li>
2014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </ol>
2024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
2034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * If you are targeting to the importer which cannot accept TYPE params without "TYPE="
2044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * strings (which should be rare though), please use this flag.
2054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
2064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
2074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Example usage:
2084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <pre class="prettyprint">int type = (VCARD_TYPE_V21_GENERIC | FLAG_APPEND_TYPE_PARAM);</pre>
2094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
2104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
2114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static final int FLAG_APPEND_TYPE_PARAM = 0x04000000;
2124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
2134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
2144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
2154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * The flag indicating the vCard composer does touch nothing toward phone number Strings
2164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * but leave it as is.
2174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
2184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
2194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * The vCard specifications mention nothing toward phone numbers, while some devices
2204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * do (wrongly, but with innevitable reasons).
2214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * For example, there's a possibility Japanese mobile phones are expected to have
2224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * just numbers, hypens, plus, etc. but not usual alphabets, while US mobile phones
2234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * should get such characters. To make exported vCard simple for external parsers,
2244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * we have used {@link PhoneNumberUtils#formatNumber(String)} during export, and
2254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * removed unnecessary characters inside the number (e.g. "111-222-3333 (Miami)"
2264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * becomes "111-222-3333").
2274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Unfortunate side effect of that use was some control characters used in the other
2284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * areas may be badly affected by the formatting.
2294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
2304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
2314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * This flag disables that formatting, affecting both importer and exporter.
2324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * If the user is aware of some side effects due to the implicit formatting, use this flag.
2334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
2345fffd2ba2d7fc22271251251f89043ab345acd74Daisuke Miyakawa     * <p>
2355fffd2ba2d7fc22271251251f89043ab345acd74Daisuke Miyakawa     * Caution: this flag will be removed in the future, replaced by some richer functionality.
2365fffd2ba2d7fc22271251251f89043ab345acd74Daisuke Miyakawa     * </p>
2374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
2384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static final int FLAG_REFRAIN_PHONE_NUMBER_FORMATTING = 0x02000000;
2394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
2404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
2418c1cdbbccd5169122c183f6fbfd4436faacf2a1dDaisuke Miyakawa     * <P>
2428c1cdbbccd5169122c183f6fbfd4436faacf2a1dDaisuke Miyakawa     * The flag asking exporter to refrain image export.
2438c1cdbbccd5169122c183f6fbfd4436faacf2a1dDaisuke Miyakawa     * </P>
2448c1cdbbccd5169122c183f6fbfd4436faacf2a1dDaisuke Miyakawa     * @hide will be deleted in the near future.
2458c1cdbbccd5169122c183f6fbfd4436faacf2a1dDaisuke Miyakawa     */
2468c1cdbbccd5169122c183f6fbfd4436faacf2a1dDaisuke Miyakawa    public static final int FLAG_REFRAIN_IMAGE_EXPORT = 0x00800000;
2478c1cdbbccd5169122c183f6fbfd4436faacf2a1dDaisuke Miyakawa
2484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    //// The followings are VCard types available from importer/exporter. ////
2494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
2504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
2514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
2524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * The type indicating nothing. Used by {@link VCardSourceDetector} when it
2534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * was not able to guess the exact vCard type.
2544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
2554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
2564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static final int VCARD_TYPE_UNKNOWN = 0;
2574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
2584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
2594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
2604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Generic vCard format with the vCard 2.1. When composing a vCard entry,
2614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * the US convension will be used toward formatting some values.
2624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
2634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
2644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * e.g. The order of the display name would be "Prefix Given Middle Family Suffix",
2654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * while it should be "Prefix Family Middle Given Suffix" in Japan for example.
2664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
2674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
2684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Uses UTF-8 for the charset as a charset for exporting. Note that old vCard importer
2694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * outside Android cannot accept it since vCard 2.1 specifically does not allow
2704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * that charset, while we need to use it to support various languages around the world.
2714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
2724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
2734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * If you want to use alternative charset, you should notify the charset to the other
2744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * compontent to be used.
2754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
2764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
2774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static final int VCARD_TYPE_V21_GENERIC =
278be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa        (VERSION_21 | NAME_ORDER_DEFAULT | FLAG_USE_DEFACT_PROPERTY | FLAG_USE_ANDROID_PROPERTY);
2794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
2804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /* package */ static String VCARD_TYPE_V21_GENERIC_STR = "v21_generic";
28102117b3d19787ff65486b9f9db8abd338ae4c9f9Daisuke Miyakawa
2824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
2834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
2844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * General vCard format with the version 3.0. Uses UTF-8 for the charset.
2854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
2864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
2874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Not fully ready yet. Use with caution when you use this.
2884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
2894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
2904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static final int VCARD_TYPE_V30_GENERIC =
291be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa        (VERSION_30 | NAME_ORDER_DEFAULT | FLAG_USE_DEFACT_PROPERTY | FLAG_USE_ANDROID_PROPERTY);
2924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
2934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /* package */ static final String VCARD_TYPE_V30_GENERIC_STR = "v30_generic";
294be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa
295be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    /**
296be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa     * General vCard format with the version 4.0.
2974560bdde6dd75cca49fc55b58aafb5d416b88ca3Daisuke Miyakawa     * @hide vCard 4.0 is not published yet.
298be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa     */
299be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    public static final int VCARD_TYPE_V40_GENERIC =
300be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa        (VERSION_40 | NAME_ORDER_DEFAULT | FLAG_USE_DEFACT_PROPERTY | FLAG_USE_ANDROID_PROPERTY);
301be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa
302be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    /* package */ static final String VCARD_TYPE_V40_GENERIC_STR = "v40_generic";
303be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa
3044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
3054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
3064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * General vCard format for the vCard 2.1 with some Europe convension. Uses Utf-8.
3074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Currently, only name order is considered ("Prefix Middle Given Family Suffix")
3084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
3094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
3104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static final int VCARD_TYPE_V21_EUROPE =
311be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa        (VERSION_21 | NAME_ORDER_EUROPE | FLAG_USE_DEFACT_PROPERTY | FLAG_USE_ANDROID_PROPERTY);
3124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /* package */ static final String VCARD_TYPE_V21_EUROPE_STR = "v21_europe";
31402117b3d19787ff65486b9f9db8abd338ae4c9f9Daisuke Miyakawa
3154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
3164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
3174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * General vCard format with the version 3.0 with some Europe convension. Uses UTF-8.
3184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
3194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
3204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Not ready yet. Use with caution when you use this.
3214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
3224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
3234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static final int VCARD_TYPE_V30_EUROPE =
324be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa        (VERSION_30 | NAME_ORDER_EUROPE | FLAG_USE_DEFACT_PROPERTY | FLAG_USE_ANDROID_PROPERTY);
32502117b3d19787ff65486b9f9db8abd338ae4c9f9Daisuke Miyakawa
3264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /* package */ static final String VCARD_TYPE_V30_EUROPE_STR = "v30_europe";
3274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
3294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
3304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * The vCard 2.1 format for miscellaneous Japanese devices, using UTF-8 as default charset.
3314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
3324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
3334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Not ready yet. Use with caution when you use this.
3344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
3354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
3364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static final int VCARD_TYPE_V21_JAPANESE =
337be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa        (VERSION_21 | NAME_ORDER_JAPANESE | FLAG_USE_DEFACT_PROPERTY | FLAG_USE_ANDROID_PROPERTY);
3384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /* package */ static final String VCARD_TYPE_V21_JAPANESE_STR = "v21_japanese_utf8";
3404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
3424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
3434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * The vCard 3.0 format for miscellaneous Japanese devices, using UTF-8 as default charset.
3444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
3454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
3464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Not ready yet. Use with caution when you use this.
3474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
3484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
3494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static final int VCARD_TYPE_V30_JAPANESE =
350be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa        (VERSION_30 | NAME_ORDER_JAPANESE | FLAG_USE_DEFACT_PROPERTY | FLAG_USE_ANDROID_PROPERTY);
3514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /* package */ static final String VCARD_TYPE_V30_JAPANESE_STR = "v30_japanese_utf8";
3534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
3554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
3564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * The vCard 2.1 based format which (partially) considers the convention in Japanese
3574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * mobile phones, where phonetic names are translated to half-width katakana if
3584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * possible, etc. It would be better to use Shift_JIS as a charset for maximum
3594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * compatibility.
3604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
3614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * @hide Should not be available world wide.
3624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
3634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static final int VCARD_TYPE_V21_JAPANESE_MOBILE =
364be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa        (VERSION_21 | NAME_ORDER_JAPANESE |
3654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                FLAG_CONVERT_PHONETIC_NAME_STRINGS | FLAG_REFRAIN_QP_TO_NAME_PROPERTIES);
3664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /* package */ static final String VCARD_TYPE_V21_JAPANESE_MOBILE_STR = "v21_japanese_mobile";
3684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
3704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
3714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * The vCard format used in DoCoMo, which is one of Japanese mobile phone careers.
3724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
3734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * <p>
3744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Base version is vCard 2.1, but the data has several DoCoMo-specific convensions.
3754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * No Android-specific property nor defact property is included. The "Primary" properties
3764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * are NOT encoded to Quoted-Printable.
3774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * </p>
3784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * @hide Should not be available world wide.
3794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
3804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static final int VCARD_TYPE_DOCOMO =
3814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        (VCARD_TYPE_V21_JAPANESE_MOBILE | FLAG_DOCOMO);
3824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /* package */ static final String VCARD_TYPE_DOCOMO_STR = "docomo";
3844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static int VCARD_TYPE_DEFAULT = VCARD_TYPE_V21_GENERIC;
3864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private static final Map<String, Integer> sVCardTypeMap;
3884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private static final Set<Integer> sJapaneseMobileTypeSet;
38902117b3d19787ff65486b9f9db8abd338ae4c9f9Daisuke Miyakawa
3904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    static {
3914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        sVCardTypeMap = new HashMap<String, Integer>();
3924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        sVCardTypeMap.put(VCARD_TYPE_V21_GENERIC_STR, VCARD_TYPE_V21_GENERIC);
3934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        sVCardTypeMap.put(VCARD_TYPE_V30_GENERIC_STR, VCARD_TYPE_V30_GENERIC);
3944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        sVCardTypeMap.put(VCARD_TYPE_V21_EUROPE_STR, VCARD_TYPE_V21_EUROPE);
3954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        sVCardTypeMap.put(VCARD_TYPE_V30_EUROPE_STR, VCARD_TYPE_V30_EUROPE);
3964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        sVCardTypeMap.put(VCARD_TYPE_V21_JAPANESE_STR, VCARD_TYPE_V21_JAPANESE);
3974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        sVCardTypeMap.put(VCARD_TYPE_V30_JAPANESE_STR, VCARD_TYPE_V30_JAPANESE);
3984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        sVCardTypeMap.put(VCARD_TYPE_V21_JAPANESE_MOBILE_STR, VCARD_TYPE_V21_JAPANESE_MOBILE);
3994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        sVCardTypeMap.put(VCARD_TYPE_DOCOMO_STR, VCARD_TYPE_DOCOMO);
4004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        sJapaneseMobileTypeSet = new HashSet<Integer>();
4024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        sJapaneseMobileTypeSet.add(VCARD_TYPE_V21_JAPANESE);
4034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        sJapaneseMobileTypeSet.add(VCARD_TYPE_V30_JAPANESE);
4044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        sJapaneseMobileTypeSet.add(VCARD_TYPE_V21_JAPANESE_MOBILE);
4054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        sJapaneseMobileTypeSet.add(VCARD_TYPE_DOCOMO);
4064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static int getVCardTypeFromString(final String vcardTypeString) {
4094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        final String loweredKey = vcardTypeString.toLowerCase();
4104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        if (sVCardTypeMap.containsKey(loweredKey)) {
4114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            return sVCardTypeMap.get(loweredKey);
4124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        } else if ("default".equalsIgnoreCase(vcardTypeString)) {
4134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            return VCARD_TYPE_DEFAULT;
4144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        } else {
4154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            Log.e(LOG_TAG, "Unknown vCard type String: \"" + vcardTypeString + "\"");
4164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            return VCARD_TYPE_DEFAULT;
4174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        }
4184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
420be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    public static boolean isVersion21(final int vcardType) {
421be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa        return (vcardType & VERSION_MASK) == VERSION_21;
422be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    }
423be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa
424be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    public static boolean isVersion30(final int vcardType) {
425be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa        return (vcardType & VERSION_MASK) == VERSION_30;
426be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    }
427be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa
428be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    public static boolean isVersion40(final int vcardType) {
429be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa        return (vcardType & VERSION_MASK) == VERSION_40;
4304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static boolean shouldUseQuotedPrintable(final int vcardType) {
433be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa        return !isVersion30(vcardType);
4344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static int getNameOrderType(final int vcardType) {
4374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        return vcardType & NAME_ORDER_MASK;
4384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static boolean usesAndroidSpecificProperty(final int vcardType) {
4414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        return ((vcardType & FLAG_USE_ANDROID_PROPERTY) != 0);
4424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static boolean usesDefactProperty(final int vcardType) {
4454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        return ((vcardType & FLAG_USE_DEFACT_PROPERTY) != 0);
4464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static boolean showPerformanceLog() {
4494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        return (VCardConfig.LOG_LEVEL & VCardConfig.LOG_LEVEL_PERFORMANCE_MEASUREMENT) != 0;
4504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static boolean shouldRefrainQPToNameProperties(final int vcardType) {
4534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa       return (!shouldUseQuotedPrintable(vcardType) ||
4544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa               ((vcardType & FLAG_REFRAIN_QP_TO_NAME_PROPERTIES) != 0));
4554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static boolean appendTypeParamName(final int vcardType) {
458be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa        return (isVersion30(vcardType) || ((vcardType & FLAG_APPEND_TYPE_PARAM) != 0));
4594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
4624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * @return true if the device is Japanese and some Japanese convension is
4634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * applied to creating "formatted" something like FORMATTED_ADDRESS.
4644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
4654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static boolean isJapaneseDevice(final int vcardType) {
4664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // TODO: Some mask will be required so that this method wrongly interpret
4674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        //        Japanese"-like" vCard type.
4684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        //        e.g. VCARD_TYPE_V21_JAPANESE_SJIS | FLAG_APPEND_TYPE_PARAMS
4694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        return sJapaneseMobileTypeSet.contains(vcardType);
4704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /* package */ static boolean refrainPhoneNumberFormatting(final int vcardType) {
4734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        return ((vcardType & FLAG_REFRAIN_PHONE_NUMBER_FORMATTING) != 0);
4744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static boolean needsToConvertPhoneticString(final int vcardType) {
4774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        return ((vcardType & FLAG_CONVERT_PHONETIC_NAME_STRINGS) != 0);
4784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static boolean onlyOneNoteFieldIsAvailable(final int vcardType) {
4814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        return vcardType == VCARD_TYPE_DOCOMO;
4824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public static boolean isDoCoMo(final int vcardType) {
4854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        return ((vcardType & FLAG_DOCOMO) != 0);
4864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private VCardConfig() {
4894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa}