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}