Modify android.syncml.pim so that no one is going to use.

- Remove android.syncml.pim.vcalendar since no one is using it.
-- We have android.pim.ICalendar.java, so handling vCalendar (== ICalendar) is possble without android.syncml.pim
- Mark android.syncml.pim.vcard and related code as obsolete.
-- Refactored version is in android.pim.vcard, which supports new Contacts database schema.

Related issue: 2110530
diff --git a/core/java/android/syncml/pim/PropertyNode.java b/core/java/android/syncml/pim/PropertyNode.java
index 983ecb8..3a5c994 100644
--- a/core/java/android/syncml/pim/PropertyNode.java
+++ b/core/java/android/syncml/pim/PropertyNode.java
@@ -28,6 +28,7 @@
 import java.util.Map.Entry;
 import java.util.regex.Pattern;
 
+@Deprecated
 public class PropertyNode {
 
     public String propName;
diff --git a/core/java/android/syncml/pim/VBuilder.java b/core/java/android/syncml/pim/VBuilder.java
index 4528645..b6cb674 100644
--- a/core/java/android/syncml/pim/VBuilder.java
+++ b/core/java/android/syncml/pim/VBuilder.java
@@ -18,6 +18,7 @@
 
 import java.util.List;
 
+@Deprecated
 public interface VBuilder {
     void start();
 
diff --git a/core/java/android/syncml/pim/VBuilderCollection.java b/core/java/android/syncml/pim/VBuilderCollection.java
index f09c1c4..06e3100 100644
--- a/core/java/android/syncml/pim/VBuilderCollection.java
+++ b/core/java/android/syncml/pim/VBuilderCollection.java
@@ -19,6 +19,7 @@
 import java.util.Collection;
 import java.util.List;
 
+@Deprecated
 public class VBuilderCollection implements VBuilder {
 
     private final Collection<VBuilder> mVBuilderCollection;
diff --git a/core/java/android/syncml/pim/VDataBuilder.java b/core/java/android/syncml/pim/VDataBuilder.java
index f6e5b65..db8a299 100644
--- a/core/java/android/syncml/pim/VDataBuilder.java
+++ b/core/java/android/syncml/pim/VDataBuilder.java
@@ -36,6 +36,7 @@
  * VNode: standy by a vcard instance.
  * PropertyNode: standy by a property line of a card.
  */
+@Deprecated
 public class VDataBuilder implements VBuilder {
     static private String LOG_TAG = "VDATABuilder"; 
     
diff --git a/core/java/android/syncml/pim/VNode.java b/core/java/android/syncml/pim/VNode.java
index 9015415..378a9d1 100644
--- a/core/java/android/syncml/pim/VNode.java
+++ b/core/java/android/syncml/pim/VNode.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 
+@Deprecated
 public class VNode {
 
     public String VName;
diff --git a/core/java/android/syncml/pim/VParser.java b/core/java/android/syncml/pim/VParser.java
index 57c5f7a..14d2875 100644
--- a/core/java/android/syncml/pim/VParser.java
+++ b/core/java/android/syncml/pim/VParser.java
@@ -25,6 +25,7 @@
  * This interface is used to parse the V format files, such as VCard & VCal
  *
  */
+@Deprecated
 abstract public class VParser {
     // Assume that "iso-8859-1" is able to map "all" 8bit characters to some unicode and
     // decode the unicode to the original charset. If not, this setting will cause some bug. 
diff --git a/core/java/android/syncml/pim/vcalendar/CalendarStruct.java b/core/java/android/syncml/pim/vcalendar/CalendarStruct.java
deleted file mode 100644
index 3388ada..0000000
--- a/core/java/android/syncml/pim/vcalendar/CalendarStruct.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.syncml.pim.vcalendar;
-
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- * Same comment as ContactStruct.
- */
-public class CalendarStruct{
-
-    public static class EventStruct{
-        public String description;
-        public String dtend;
-        public String dtstart;
-        public String duration;
-        public String has_alarm;
-        public String last_date;
-        public String rrule;
-        public String status;
-        public String title;
-        public String event_location;
-        public String uid;
-        public List<String> reminderList;
-
-        public void addReminderList(String method){
-            if(reminderList == null)
-                reminderList = new ArrayList<String>();
-            reminderList.add(method);
-        }
-    }
-
-    public String timezone;
-    public List<EventStruct> eventList;
-
-    public void addEventList(EventStruct stru){
-        if(eventList == null)
-            eventList = new ArrayList<EventStruct>();
-        eventList.add(stru);
-    }
-}
diff --git a/core/java/android/syncml/pim/vcalendar/VCalComposer.java b/core/java/android/syncml/pim/vcalendar/VCalComposer.java
deleted file mode 100644
index 18b6719..0000000
--- a/core/java/android/syncml/pim/vcalendar/VCalComposer.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.syncml.pim.vcalendar;
-
-/**
- * vCalendar string composer class
- */
-public class VCalComposer {
-
-    public final static String VERSION_VCALENDAR10 = "vcalendar1.0";
-    public final static String VERSION_VCALENDAR20 = "vcalendar2.0";
-
-    public final static int VERSION_VCAL10_INT = 1;
-    public final static int VERSION_VCAL20_INT = 2;
-
-    private static String mNewLine = "\r\n";
-    private String mVersion = null;
-
-    public VCalComposer() {
-    }
-
-    /**
-     * Create a vCalendar String.
-     * @param struct see more from CalendarStruct class
-     * @param vcalversion MUST be VERSION_VCAL10 /VERSION_VCAL20
-     * @return vCalendar string
-     * @throws VcalException if version is invalid or create failed
-     */
-    public String createVCal(CalendarStruct struct, int vcalversion)
-                                                throws VCalException{
-
-        StringBuilder returnStr = new StringBuilder();
-
-        //Version check
-        if(vcalversion != 1 && vcalversion != 2)
-            throw new VCalException("version not match 1.0 or 2.0.");
-        if (vcalversion == 1)
-            mVersion = VERSION_VCALENDAR10;
-        else
-            mVersion = VERSION_VCALENDAR20;
-
-        //Build vCalendar:
-        returnStr.append("BEGIN:VCALENDAR").append(mNewLine);
-
-        if(vcalversion == VERSION_VCAL10_INT)
-            returnStr.append("VERSION:1.0").append(mNewLine);
-        else
-            returnStr.append("VERSION:2.0").append(mNewLine);
-
-        returnStr.append("PRODID:vCal ID default").append(mNewLine);
-
-        if(!isNull(struct.timezone)){
-            if(vcalversion == VERSION_VCAL10_INT)
-                returnStr.append("TZ:").append(struct.timezone).append(mNewLine);
-            else//down here MUST have
-                returnStr.append("BEGIN:VTIMEZONE").append(mNewLine).
-                    append("TZID:vCal default").append(mNewLine).
-                    append("BEGIN:STANDARD").append(mNewLine).
-                    append("DTSTART:16010101T000000").append(mNewLine).
-                    append("TZOFFSETFROM:").append(struct.timezone).append(mNewLine).
-                    append("TZOFFSETTO:").append(struct.timezone).append(mNewLine).
-                    append("END:STANDARD").append(mNewLine).
-                    append("END:VTIMEZONE").append(mNewLine);
-        }
-        //Build VEVNET
-        for(int i = 0; i < struct.eventList.size(); i++){
-            String str = buildEventStr( struct.eventList.get(i) );
-            returnStr.append(str);
-        }
-
-        //Build VTODO
-        //TODO
-
-        returnStr.append("END:VCALENDAR").append(mNewLine).append(mNewLine);
-
-        return returnStr.toString();
-    }
-
-    private String buildEventStr(CalendarStruct.EventStruct stru){
-
-        StringBuilder strbuf = new StringBuilder();
-
-        strbuf.append("BEGIN:VEVENT").append(mNewLine);
-
-        if(!isNull(stru.uid))
-            strbuf.append("UID:").append(stru.uid).append(mNewLine);
-
-        if(!isNull(stru.description))
-            strbuf.append("DESCRIPTION:").
-            append(foldingString(stru.description)).append(mNewLine);
-
-        if(!isNull(stru.dtend))
-            strbuf.append("DTEND:").append(stru.dtend).append(mNewLine);
-
-        if(!isNull(stru.dtstart))
-            strbuf.append("DTSTART:").append(stru.dtstart).append(mNewLine);
-
-        if(!isNull(stru.duration))
-            strbuf.append("DUE:").append(stru.duration).append(mNewLine);
-
-        if(!isNull(stru.event_location))
-            strbuf.append("LOCATION:").append(stru.event_location).append(mNewLine);
-
-        if(!isNull(stru.last_date))
-            strbuf.append("COMPLETED:").append(stru.last_date).append(mNewLine);
-
-        if(!isNull(stru.rrule))
-            strbuf.append("RRULE:").append(stru.rrule).append(mNewLine);
-
-        if(!isNull(stru.title))
-            strbuf.append("SUMMARY:").append(stru.title).append(mNewLine);
-
-        if(!isNull(stru.status)){
-            String stat = "TENTATIVE";
-            switch (Integer.parseInt(stru.status)){
-            case 0://Calendar.Calendars.STATUS_TENTATIVE
-                stat = "TENTATIVE";
-                break;
-            case 1://Calendar.Calendars.STATUS_CONFIRMED
-                stat = "CONFIRMED";
-                break;
-            case 2://Calendar.Calendars.STATUS_CANCELED
-                stat = "CANCELLED";
-                break;
-            }
-            strbuf.append("STATUS:").append(stat).append(mNewLine);
-        }
-        //Alarm
-        if(!isNull(stru.has_alarm)
-            && stru.reminderList != null
-            && stru.reminderList.size() > 0){
-
-            if (mVersion.equals(VERSION_VCALENDAR10)){
-                String prefix = "";
-                for(String method : stru.reminderList){
-                    switch (Integer.parseInt(method)){
-                    case 0:
-                        prefix = "DALARM";
-                        break;
-                    case 1:
-                        prefix = "AALARM";
-                        break;
-                    case 2:
-                        prefix = "MALARM";
-                        break;
-                    case 3:
-                    default:
-                        prefix = "DALARM";
-                        break;
-                    }
-                    strbuf.append(prefix).append(":default").append(mNewLine);
-                }
-            }else {//version 2.0 only support audio-method now.
-                strbuf.append("BEGIN:VALARM").append(mNewLine).
-                       append("ACTION:AUDIO").append(mNewLine).
-                       append("TRIGGER:-PT10M").append(mNewLine).
-                       append("END:VALARM").append(mNewLine);
-            }
-        }
-        strbuf.append("END:VEVENT").append(mNewLine);
-        return strbuf.toString();
-    }
-
-    /** Alter str to folding supported format. */
-    private String foldingString(String str){
-        return str.replaceAll("\r\n", "\n").replaceAll("\n", "\r\n ");
-    }
-
-    /** is null */
-    private boolean isNull(String str){
-        if(str == null || str.trim().equals(""))
-            return true;
-        return false;
-    }
-}
diff --git a/core/java/android/syncml/pim/vcalendar/VCalException.java b/core/java/android/syncml/pim/vcalendar/VCalException.java
deleted file mode 100644
index 48ea134..0000000
--- a/core/java/android/syncml/pim/vcalendar/VCalException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.syncml.pim.vcalendar;
-
-public class VCalException extends java.lang.Exception{
-    // constructors
-
-    /**
-     * Constructs a VCalException object
-     */
-
-    public VCalException()
-    {
-    }
-
-    /**
-     * Constructs a VCalException object
-     *
-     * @param message the error message
-     */
-
-    public VCalException( String message )
-    {
-        super( message );
-    }
-
-}
diff --git a/core/java/android/syncml/pim/vcalendar/VCalParser.java b/core/java/android/syncml/pim/vcalendar/VCalParser.java
deleted file mode 100644
index bc2d598..0000000
--- a/core/java/android/syncml/pim/vcalendar/VCalParser.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.syncml.pim.vcalendar;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import android.util.Config;
-import android.util.Log;
-
-import android.syncml.pim.VDataBuilder;
-import android.syncml.pim.VParser;
-
-public class VCalParser{
-
-    private final static String TAG = "VCalParser";
-
-    public final static String VERSION_VCALENDAR10 = "vcalendar1.0";
-    public final static String VERSION_VCALENDAR20 = "vcalendar2.0";
-
-    private VParser mParser = null;
-    private String mVersion = null;
-
-    public VCalParser() {
-    }
-
-    public boolean parse(String vcalendarStr, VDataBuilder builder)
-            throws VCalException {
-
-        vcalendarStr = verifyVCal(vcalendarStr);
-        try{
-            boolean isSuccess = mParser.parse(
-                    new ByteArrayInputStream(vcalendarStr.getBytes()),
-                    "US-ASCII", builder);
-
-            if (!isSuccess) {
-                if (mVersion.equals(VERSION_VCALENDAR10)) {
-                    if(Config.LOGD)
-                        Log.d(TAG, "Parse failed for vCal 1.0 parser."
-                            + " Try to use 2.0 parser.");
-                    mVersion = VERSION_VCALENDAR20;
-                    return parse(vcalendarStr, builder);
-                }else
-                    throw new VCalException("parse failed.(even use 2.0 parser)");
-            }
-        }catch (IOException e){
-            throw new VCalException(e.getMessage());
-        }
-        return true;
-    }
-
-    /**
-     * Verify vCalendar string, and initialize mVersion according to it.
-     * */
-    private String verifyVCal(String vcalStr) {
-
-        //Version check
-        judgeVersion(vcalStr);
-
-        vcalStr = vcalStr.replaceAll("\r\n", "\n");
-        String[] strlist = vcalStr.split("\n");
-
-        StringBuilder replacedStr = new StringBuilder();
-
-        for (int i = 0; i < strlist.length; i++) {
-            if (strlist[i].indexOf(":") < 0) {
-                if (strlist[i].length() == 0 && strlist[i + 1].indexOf(":") > 0)
-                    replacedStr.append(strlist[i]).append("\r\n");
-                else
-                    replacedStr.append(" ").append(strlist[i]).append("\r\n");
-            } else
-                replacedStr.append(strlist[i]).append("\r\n");
-        }
-        if(Config.LOGD)Log.d(TAG, "After verify:\r\n" + replacedStr.toString());
-
-        return replacedStr.toString();
-    }
-
-    /**
-     * If version not given. Search from vcal string of the VERSION property.
-     * Then instance mParser to appropriate parser.
-     */
-    private void judgeVersion(String vcalStr) {
-
-        if (mVersion == null) {
-            int versionIdx = vcalStr.indexOf("\nVERSION:");
-
-            mVersion = VERSION_VCALENDAR10;
-
-            if (versionIdx != -1){
-                String versionStr = vcalStr.substring(
-                        versionIdx, vcalStr.indexOf("\n", versionIdx + 1));
-                if (versionStr.indexOf("2.0") > 0)
-                    mVersion = VERSION_VCALENDAR20;
-            }
-        }
-        if (mVersion.equals(VERSION_VCALENDAR10))
-            mParser = new VCalParser_V10();
-        if (mVersion.equals(VERSION_VCALENDAR20))
-            mParser = new VCalParser_V20();
-    }
-}
-
diff --git a/core/java/android/syncml/pim/vcalendar/VCalParser_V10.java b/core/java/android/syncml/pim/vcalendar/VCalParser_V10.java
deleted file mode 100644
index 1b251f3..0000000
--- a/core/java/android/syncml/pim/vcalendar/VCalParser_V10.java
+++ /dev/null
@@ -1,1628 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.syncml.pim.vcalendar;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import android.syncml.pim.VParser;
-
-public class VCalParser_V10 extends VParser {
-
-    /*
-     * The names of the properties whose value are not separated by ";"
-     */
-    private static final HashSet<String> mEvtPropNameGroup1 = new HashSet<String>(
-            Arrays.asList("ATTACH", "ATTENDEE", "DCREATED", "COMPLETED",
-                    "DESCRIPTION", "DUE", "DTEND", "EXRULE", "LAST-MODIFIED",
-                    "LOCATION", "RNUM", "PRIORITY", "RELATED-TO", "RRULE",
-                    "SEQUENCE", "DTSTART", "SUMMARY", "TRANSP", "URL", "UID",
-                    // above belong to simprop
-                    "CLASS", "STATUS"));
-
-    /*
-     * The names of properties whose value are separated by ";"
-     */
-    private static final HashSet<String> mEvtPropNameGroup2 = new HashSet<String>(
-            Arrays.asList("AALARM", "CATEGORIES", "DALARM", "EXDATE", "MALARM",
-                    "PALARM", "RDATE", "RESOURCES"));
-
-    private static final HashSet<String> mValueCAT = new HashSet<String>(Arrays
-            .asList("APPOINTMENT", "BUSINESS", "EDUCATION", "HOLIDAY",
-                    "MEETING", "MISCELLANEOUS", "PERSONAL", "PHONE CALL",
-                    "SICK DAY", "SPECIAL OCCASION", "TRAVEL", "VACATION"));
-
-    private static final HashSet<String> mValueCLASS = new HashSet<String>(Arrays
-            .asList("PUBLIC", "PRIVATE", "CONFIDENTIAL"));
-
-    private static final HashSet<String> mValueRES = new HashSet<String>(Arrays
-            .asList("CATERING", "CHAIRS", "EASEL", "PROJECTOR", "VCR",
-                    "VEHICLE"));
-
-    private static final HashSet<String> mValueSTAT = new HashSet<String>(Arrays
-            .asList("ACCEPTED", "NEEDS ACTION", "SENT", "TENTATIVE",
-                    "CONFIRMED", "DECLINED", "COMPLETED", "DELEGATED"));
-
-    /*
-     * The names of properties whose value can contain escape characters
-     */
-    private static final HashSet<String> mEscAllowedProps = new HashSet<String>(
-            Arrays.asList("DESCRIPTION", "SUMMARY", "AALARM", "DALARM",
-                    "MALARM", "PALARM"));
-
-    private static final HashMap<String, HashSet<String>> mSpecialValueSetMap =
-        new HashMap<String, HashSet<String>>();
-
-    static {
-        mSpecialValueSetMap.put("CATEGORIES", mValueCAT);
-        mSpecialValueSetMap.put("CLASS", mValueCLASS);
-        mSpecialValueSetMap.put("RESOURCES", mValueRES);
-        mSpecialValueSetMap.put("STATUS", mValueSTAT);
-    }
-
-    public VCalParser_V10() {
-    }
-
-    protected int parseVFile(int offset) {
-        return parseVCalFile(offset);
-    }
-
-    private int parseVCalFile(int offset) {
-        int ret = 0, sum = 0;
-
-        /* remove wsls */
-        while (PARSE_ERROR != (ret = parseWsls(offset))) {
-            offset += ret;
-            sum += ret;
-        }
-
-        ret = parseVCal(offset); // BEGIN:VCAL ... END:VCAL
-        if (PARSE_ERROR != ret) {
-            offset += ret;
-            sum += ret;
-        } else {
-            return PARSE_ERROR;
-        }
-
-        /* remove wsls */
-        while (PARSE_ERROR != (ret = parseWsls(offset))) {
-            offset += ret;
-            sum += ret;
-        }
-        return sum;
-    }
-
-    /**
-     * "BEGIN" [ws] ":" [ws] "VCALENDAR" [ws] 1*crlf calprop calentities [ws]
-     * *crlf "END" [ws] ":" [ws] "VCALENDAR" [ws] 1*CRLF
-     */
-    private int parseVCal(int offset) {
-        int ret = 0, sum = 0;
-
-        /* BEGIN */
-        ret = parseString(offset, "BEGIN", false);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        // [ws]
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        // ":"
-        ret = parseString(offset, ":", false);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        // [ws]
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        // "VCALENDAR
-        ret = parseString(offset, "VCALENDAR", false);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.startRecord("VCALENDAR");
-        }
-
-        /* [ws] */
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        // 1*CRLF
-        ret = parseCrlf(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        while (PARSE_ERROR != (ret = parseCrlf(offset))) {
-            offset += ret;
-            sum += ret;
-        }
-
-        // calprop
-        ret = parseCalprops(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        // calentities
-        ret = parseCalentities(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        // [ws]
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        // *CRLF
-        while (PARSE_ERROR != (ret = parseCrlf(offset))) {
-            offset += ret;
-            sum += ret;
-        }
-
-        // "END"
-        ret = parseString(offset, "END", false);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        // [ws]
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        // ":"
-        // ":"
-        ret = parseString(offset, ":", false);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        // [ws]
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        // "VCALENDAR"
-        ret = parseString(offset, "VCALENDAR", false);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.endRecord();
-        }
-
-        // [ws]
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        // 1 * CRLF
-        ret = parseCrlf(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        while (PARSE_ERROR != (ret = parseCrlf(offset))) {
-            offset += ret;
-            sum += ret;
-        }
-
-        return sum;
-    }
-
-    /**
-     * calprops * CRLF calprop / calprop
-     */
-    private int parseCalprops(int offset) {
-        int ret = 0, sum = 0;
-
-        if (mBuilder != null) {
-            mBuilder.startProperty();
-        }
-        ret = parseCalprop(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.endProperty();
-        }
-
-        for (;;) {
-            /* *CRLF */
-            while (PARSE_ERROR != (ret = parseCrlf(offset))) {
-                offset += ret;
-                sum += ret;
-            }
-            // follow VEVENT ,it wont reach endProperty
-            if (mBuilder != null) {
-                mBuilder.startProperty();
-            }
-            ret = parseCalprop(offset);
-            if (PARSE_ERROR == ret) {
-                break;
-            }
-            offset += ret;
-            sum += ret;
-            if (mBuilder != null) {
-                mBuilder.endProperty();
-            }
-        }
-
-        return sum;
-    }
-
-    /**
-     * calentities *CRLF calentity / calentity
-     */
-    private int parseCalentities(int offset) {
-        int ret = 0, sum = 0;
-
-        ret = parseCalentity(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        for (;;) {
-            /* *CRLF */
-            while (PARSE_ERROR != (ret = parseCrlf(offset))) {
-                offset += ret;
-                sum += ret;
-            }
-
-            ret = parseCalentity(offset);
-            if (PARSE_ERROR == ret) {
-                break;
-            }
-            offset += ret;
-            sum += ret;
-        }
-
-        return sum;
-    }
-
-    /**
-     * calprop = DAYLIGHT/ GEO/ PRODID/ TZ/ VERSION
-     */
-    private int parseCalprop(int offset) {
-        int ret = 0;
-
-        ret = parseCalprop0(offset, "DAYLIGHT");
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseCalprop0(offset, "GEO");
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseCalprop0(offset, "PRODID");
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseCalprop0(offset, "TZ");
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseCalprop1(offset);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-        return PARSE_ERROR;
-    }
-
-    /**
-     * evententity / todoentity
-     */
-    private int parseCalentity(int offset) {
-        int ret = 0;
-
-        ret = parseEvententity(offset);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseTodoentity(offset);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-        return PARSE_ERROR;
-
-    }
-
-    /**
-     * propName [params] ":" value CRLF
-     */
-    private int parseCalprop0(int offset, String propName) {
-        int ret = 0, sum = 0, start = 0;
-
-        ret = parseString(offset, propName, true);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.propertyName(propName);
-        }
-
-        ret = parseParams(offset);
-        if (PARSE_ERROR != ret) {
-            offset += ret;
-            sum += ret;
-        }
-
-        ret = parseString(offset, ":", true);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        start = offset;
-        ret = parseValue(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            ArrayList<String> v = new ArrayList<String>();
-            v.add(mBuffer.substring(start, offset));
-            mBuilder.propertyValues(v);
-        }
-
-        ret = parseCrlf(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        sum += ret;
-
-        return sum;
-    }
-
-    /**
-     * "VERSION" [params] ":" "1.0" CRLF
-     */
-    private int parseCalprop1(int offset) {
-        int ret = 0, sum = 0;
-
-        ret = parseString(offset, "VERSION", true);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.propertyName("VERSION");
-        }
-
-        ret = parseParams(offset);
-        if (PARSE_ERROR != ret) {
-            offset += ret;
-            sum += ret;
-        }
-
-        ret = parseString(offset, ":", true);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        ret = parseString(offset, "1.0", true);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            ArrayList<String> v = new ArrayList<String>();
-            v.add("1.0");
-            mBuilder.propertyValues(v);
-        }
-        ret = parseCrlf(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        sum += ret;
-
-        return sum;
-    }
-
-    /**
-     * "BEGIN" [ws] ":" [ws] "VEVENT" [ws] 1*CRLF entprops [ws] *CRLF "END" [ws]
-     * ":" [ws] "VEVENT" [ws] 1*CRLF
-     */
-    private int parseEvententity(int offset) {
-        int ret = 0, sum = 0;
-
-        ret = parseString(offset, "BEGIN", false);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        // [ws]
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        // ":"
-        ret = parseString(offset, ":", false);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        // [ws]
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        // "VEVNET"
-        ret = parseString(offset, "VEVENT", false);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.startRecord("VEVENT");
-        }
-
-        /* [ws] */
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        // 1*CRLF
-        ret = parseCrlf(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        while (PARSE_ERROR != (ret = parseCrlf(offset))) {
-            offset += ret;
-            sum += ret;
-        }
-
-        ret = parseEntprops(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        // [ws]
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        // *CRLF
-        while (PARSE_ERROR != (ret = parseCrlf(offset))) {
-            offset += ret;
-            sum += ret;
-        }
-
-        // "END"
-        ret = parseString(offset, "END", false);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        // [ws]
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        // ":"
-        ret = parseString(offset, ":", false);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        // [ws]
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        // "VEVENT"
-        ret = parseString(offset, "VEVENT", false);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.endRecord();
-        }
-
-        // [ws]
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        // 1 * CRLF
-        ret = parseCrlf(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        while (PARSE_ERROR != (ret = parseCrlf(offset))) {
-            offset += ret;
-            sum += ret;
-        }
-
-        return sum;
-    }
-
-    /**
-     * "BEGIN" [ws] ":" [ws] "VTODO" [ws] 1*CRLF entprops [ws] *CRLF "END" [ws]
-     * ":" [ws] "VTODO" [ws] 1*CRLF
-     */
-    private int parseTodoentity(int offset) {
-        int ret = 0, sum = 0;
-
-        ret = parseString(offset, "BEGIN", false);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        // [ws]
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        // ":"
-        ret = parseString(offset, ":", false);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        // [ws]
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        // "VTODO"
-        ret = parseString(offset, "VTODO", false);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.startRecord("VTODO");
-        }
-
-        // 1*CRLF
-        ret = parseCrlf(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        while (PARSE_ERROR != (ret = parseCrlf(offset))) {
-            offset += ret;
-            sum += ret;
-        }
-
-        ret = parseEntprops(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        // [ws]
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        // *CRLF
-        while (PARSE_ERROR != (ret = parseCrlf(offset))) {
-            offset += ret;
-            sum += ret;
-        }
-
-        // "END"
-        ret = parseString(offset, "END", false);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        // [ws]
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        // ":"
-        ret = parseString(offset, ":", false);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        // [ws]
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        // "VTODO"
-        ret = parseString(offset, "VTODO", false);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.endRecord();
-        }
-
-        // [ws]
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        // 1 * CRLF
-        ret = parseCrlf(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        while (PARSE_ERROR != (ret = parseCrlf(offset))) {
-            offset += ret;
-            sum += ret;
-        }
-
-        return sum;
-    }
-
-    /**
-     * entprops *CRLF entprop / entprop
-     */
-    private int parseEntprops(int offset) {
-        int ret = 0, sum = 0;
-        if (mBuilder != null) {
-            mBuilder.startProperty();
-        }
-
-        ret = parseEntprop(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.endProperty();
-        }
-
-        for (;;) {
-            while (PARSE_ERROR != (ret = parseCrlf(offset))) {
-                offset += ret;
-                sum += ret;
-            }
-            if (mBuilder != null) {
-                mBuilder.startProperty();
-            }
-
-            ret = parseEntprop(offset);
-            if (PARSE_ERROR == ret) {
-                break;
-            }
-            offset += ret;
-            sum += ret;
-            if (mBuilder != null) {
-                mBuilder.endProperty();
-            }
-        }
-        return sum;
-    }
-
-    /**
-     * for VEVENT,VTODO prop. entprop0 / entprop1
-     */
-    private int parseEntprop(int offset) {
-        int ret = 0;
-        ret = parseEntprop0(offset);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseEntprop1(offset);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-        return PARSE_ERROR;
-    }
-
-    /**
-     * Same with card. ";" [ws] paramlist
-     */
-    private int parseParams(int offset) {
-        int ret = 0, sum = 0;
-
-        ret = parseString(offset, ";", true);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        ret = parseParamlist(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        sum += ret;
-
-        return sum;
-    }
-
-    /**
-     * Same with card. paramlist [ws] ";" [ws] param / param
-     */
-    private int parseParamlist(int offset) {
-        int ret = 0, sum = 0;
-
-        ret = parseParam(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        int offsetTemp = offset;
-        int sumTemp = sum;
-        for (;;) {
-            ret = removeWs(offsetTemp);
-            offsetTemp += ret;
-            sumTemp += ret;
-
-            ret = parseString(offsetTemp, ";", false);
-            if (PARSE_ERROR == ret) {
-                return sum;
-            }
-            offsetTemp += ret;
-            sumTemp += ret;
-
-            ret = removeWs(offsetTemp);
-            offsetTemp += ret;
-            sumTemp += ret;
-
-            ret = parseParam(offsetTemp);
-            if (PARSE_ERROR == ret) {
-                break;
-            }
-            offsetTemp += ret;
-            sumTemp += ret;
-
-            // offset = offsetTemp;
-            sum = sumTemp;
-        }
-        return sum;
-    }
-
-    /**
-     * param0 - param7 / knowntype
-     */
-    private int parseParam(int offset) {
-        int ret = 0;
-
-        ret = parseParam0(offset);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseParam1(offset);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseParam2(offset);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseParam3(offset);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseParam4(offset);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseParam5(offset);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseParam6(offset);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseParam7(offset);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        int start = offset;
-        ret = parseKnownType(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        if (mBuilder != null) {
-            mBuilder.propertyParamType(null);
-            mBuilder.propertyParamValue(mBuffer.substring(start, offset));
-        }
-
-        return ret;
-    }
-
-    /**
-     * simprop AND "CLASS" AND "STATUS" The value of these properties are not
-     * seperated by ";"
-     *
-     * [ws] simprop [params] ":" value CRLF
-     */
-    private int parseEntprop0(int offset) {
-        int ret = 0, sum = 0, start = 0;
-
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        String propName = getWord(offset).toUpperCase();
-        if (!mEvtPropNameGroup1.contains(propName)) {
-            if (PARSE_ERROR == parseXWord(offset))
-                return PARSE_ERROR;
-        }
-        ret = propName.length();
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.propertyName(propName);
-        }
-
-        ret = parseParams(offset);
-        if (PARSE_ERROR != ret) {
-            offset += ret;
-            sum += ret;
-        }
-
-        ret = parseString(offset, ":", false);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        start = offset;
-        ret = parseValue(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            ArrayList<String> v = new ArrayList<String>();
-            v.add(exportEntpropValue(propName, mBuffer.substring(start,
-                            offset)));
-            mBuilder.propertyValues(v);
-            // Filter value,match string, REFER:RFC
-            if (PARSE_ERROR == valueFilter(propName, v))
-                return PARSE_ERROR;
-        }
-
-        ret = parseCrlf(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        sum += ret;
-        return sum;
-    }
-
-    /**
-     * other event prop names except simprop AND "CLASS" AND "STATUS" The value
-     * of these properties are seperated by ";" [ws] proper name [params] ":"
-     * value CRLF
-     */
-    private int parseEntprop1(int offset) {
-        int ret = 0, sum = 0;
-
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        String propName = getWord(offset).toUpperCase();
-        if (!mEvtPropNameGroup2.contains(propName)) {
-            return PARSE_ERROR;
-        }
-        ret = propName.length();
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.propertyName(propName);
-        }
-
-        ret = parseParams(offset);
-        if (PARSE_ERROR != ret) {
-            offset += ret;
-            sum += ret;
-        }
-
-        ret = parseString(offset, ":", false);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        int start = offset;
-        ret = parseValue(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        // mutil-values
-        if (mBuilder != null) {
-            int end = 0;
-            ArrayList<String> v = new ArrayList<String>();
-            Pattern p = Pattern
-                    .compile("([^;\\\\]*(\\\\[\\\\;:,])*[^;\\\\]*)(;?)");
-            Matcher m = p.matcher(mBuffer.substring(start, offset));
-            while (m.find()) {
-                String s = exportEntpropValue(propName, m.group(1));
-                v.add(s);
-                end = m.end();
-                if (offset == start + end) {
-                    String endValue = m.group(3);
-                    if (";".equals(endValue)) {
-                        v.add("");
-                    }
-                    break;
-                }
-            }
-            mBuilder.propertyValues(v);
-            // Filter value,match string, REFER:RFC
-            if (PARSE_ERROR == valueFilter(propName, v))
-                return PARSE_ERROR;
-        }
-
-        ret = parseCrlf(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        sum += ret;
-        return sum;
-    }
-
-    /**
-     * "TYPE" [ws] = [ws] ptypeval
-     */
-    private int parseParam0(int offset) {
-        int ret = 0, sum = 0, start = offset;
-
-        ret = parseString(offset, "TYPE", true);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.propertyParamType(mBuffer.substring(start, offset));
-        }
-
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        ret = parseString(offset, "=", false);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        start = offset;
-        ret = parsePtypeval(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.propertyParamValue(mBuffer.substring(start, offset));
-        }
-        return sum;
-    }
-
-    /**
-     * ["VALUE" [ws] "=" [ws]] pvalueval
-     */
-    private int parseParam1(int offset) {
-        int ret = 0, sum = 0, start = offset;
-        boolean flag = false;
-
-        ret = parseString(offset, "VALUE", true);
-        if (PARSE_ERROR != ret) {
-            offset += ret;
-            sum += ret;
-            flag = true;
-        }
-        if (flag == true && mBuilder != null) {
-            mBuilder.propertyParamType(mBuffer.substring(start, offset));
-        }
-
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        ret = parseString(offset, "=", true);
-        if (PARSE_ERROR != ret) {
-            if (flag == false) { // "VALUE" does not exist
-                return PARSE_ERROR;
-            }
-            offset += ret;
-            sum += ret;
-        } else {
-            if (flag == true) { // "VALUE" exists
-                return PARSE_ERROR;
-            }
-        }
-
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        start = offset;
-        ret = parsePValueVal(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.propertyParamValue(mBuffer.substring(start, offset));
-        }
-
-        return sum;
-    }
-
-    /** ["ENCODING" [ws] "=" [ws]] pencodingval */
-    private int parseParam2(int offset) {
-        int ret = 0, sum = 0, start = offset;
-        boolean flag = false;
-
-        ret = parseString(offset, "ENCODING", true);
-        if (PARSE_ERROR != ret) {
-            offset += ret;
-            sum += ret;
-            flag = true;
-        }
-        if (flag == true && mBuilder != null) {
-            mBuilder.propertyParamType(mBuffer.substring(start, offset));
-        }
-
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        ret = parseString(offset, "=", true);
-        if (PARSE_ERROR != ret) {
-            if (flag == false) { // "VALUE" does not exist
-                return PARSE_ERROR;
-            }
-            offset += ret;
-            sum += ret;
-        } else {
-            if (flag == true) { // "VALUE" exists
-                return PARSE_ERROR;
-            }
-        }
-
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        start = offset;
-        ret = parsePEncodingVal(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.propertyParamValue(mBuffer.substring(start, offset));
-        }
-
-        return sum;
-    }
-
-    /**
-     * "CHARSET" [WS] "=" [WS] charsetval
-     */
-    private int parseParam3(int offset) {
-        int ret = 0, sum = 0, start = offset;
-
-        ret = parseString(offset, "CHARSET", true);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.propertyParamType(mBuffer.substring(start, offset));
-        }
-
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        ret = parseString(offset, "=", true);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        start = offset;
-        ret = parseCharsetVal(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.propertyParamValue(mBuffer.substring(start, offset));
-        }
-
-        return sum;
-    }
-
-    /**
-     * "LANGUAGE" [ws] "=" [ws] langval
-     */
-    private int parseParam4(int offset) {
-        int ret = 0, sum = 0, start = offset;
-
-        ret = parseString(offset, "LANGUAGE", true);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.propertyParamType(mBuffer.substring(start, offset));
-        }
-
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        ret = parseString(offset, "=", true);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        start = offset;
-        ret = parseLangVal(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.propertyParamValue(mBuffer.substring(start, offset));
-        }
-
-        return sum;
-    }
-
-    /**
-     * "ROLE" [ws] "=" [ws] roleval
-     */
-    private int parseParam5(int offset) {
-        int ret = 0, sum = 0, start = offset;
-
-        ret = parseString(offset, "ROLE", true);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.propertyParamType(mBuffer.substring(start, offset));
-        }
-
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        ret = parseString(offset, "=", true);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        start = offset;
-        ret = parseRoleVal(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.propertyParamValue(mBuffer.substring(start, offset));
-        }
-
-        return sum;
-    }
-
-    /**
-     * "STATUS" [ws] = [ws] statuval
-     */
-    private int parseParam6(int offset) {
-        int ret = 0, sum = 0, start = offset;
-
-        ret = parseString(offset, "STATUS", true);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.propertyParamType(mBuffer.substring(start, offset));
-        }
-
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        ret = parseString(offset, "=", true);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        start = offset;
-        ret = parseStatuVal(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.propertyParamValue(mBuffer.substring(start, offset));
-        }
-
-        return sum;
-
-    }
-
-    /**
-     * XWord [ws] "=" [ws] word
-     */
-    private int parseParam7(int offset) {
-        int ret = 0, sum = 0, start = offset;
-
-        ret = parseXWord(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.propertyParamType(mBuffer.substring(start, offset));
-        }
-
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        ret = parseString(offset, "=", true);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-
-        ret = removeWs(offset);
-        offset += ret;
-        sum += ret;
-
-        start = offset;
-        ret = parseWord(offset);
-        if (PARSE_ERROR == ret) {
-            return PARSE_ERROR;
-        }
-        offset += ret;
-        sum += ret;
-        if (mBuilder != null) {
-            mBuilder.propertyParamValue(mBuffer.substring(start, offset));
-        }
-
-        return sum;
-
-    }
-
-    /*
-     * "WAVE" / "PCM" / "VCARD" / XWORD
-     */
-    private int parseKnownType(int offset) {
-        int ret = 0;
-
-        ret = parseString(offset, "WAVE", true);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseString(offset, "PCM", true);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseString(offset, "VCARD", true);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseXWord(offset);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        return PARSE_ERROR;
-    }
-
-    /*
-     * knowntype / Xword
-     */
-    private int parsePtypeval(int offset) {
-        int ret = 0;
-
-        ret = parseKnownType(offset);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseXWord(offset);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        return PARSE_ERROR;
-    }
-
-    /**
-     * "ATTENDEE" / "ORGANIZER" / "OWNER" / XWORD
-     */
-    private int parseRoleVal(int offset) {
-        int ret = 0;
-
-        ret = parseString(offset, "ATTENDEE", true);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseString(offset, "ORGANIZER", true);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseString(offset, "OWNER", true);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseXWord(offset);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        return PARSE_ERROR;
-    }
-
-    /**
-     * "ACCEPTED" / "NEED ACTION" / "SENT" / "TENTATIVE" / "CONFIRMED" /
-     * "DECLINED" / "COMPLETED" / "DELEGATED / XWORD
-     */
-    private int parseStatuVal(int offset) {
-        int ret = 0;
-
-        ret = parseString(offset, "ACCEPTED", true);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseString(offset, "NEED ACTION", true);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseString(offset, "TENTATIVE", true);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-        ret = parseString(offset, "CONFIRMED", true);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-        ret = parseString(offset, "DECLINED", true);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-        ret = parseString(offset, "COMPLETED", true);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-        ret = parseString(offset, "DELEGATED", true);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        ret = parseXWord(offset);
-        if (PARSE_ERROR != ret) {
-            return ret;
-        }
-
-        return PARSE_ERROR;
-    }
-
-    /**
-     * Check 4 special propName and it's value to match Hash.
-     *
-     * @return PARSE_ERROR:value not match. 1:go on,like nothing happen.
-     */
-    private int valueFilter(String propName, ArrayList<String> values) {
-        if (propName == null || propName.equals("") || values == null
-                || values.isEmpty())
-            return 1; // go on, like nothing happen.
-
-        if (mSpecialValueSetMap.containsKey(propName)) {
-            for (String value : values) {
-                if (!mSpecialValueSetMap.get(propName).contains(value)) {
-                    if (!value.startsWith("X-"))
-                        return PARSE_ERROR;
-                }
-            }
-        }
-
-        return 1;
-    }
-
-    /**
-     *
-     * Translate escape characters("\\", "\;") which define in vcalendar1.0
-     * spec. But for fault tolerance, we will translate "\:" and "\,", which
-     * isn't define in vcalendar1.0 explicitly, as the same behavior as other
-     * client.
-     *
-     * Though vcalendar1.0 spec does not defined the value of property
-     * "description", "summary", "aalarm", "dalarm", "malarm" and "palarm" could
-     * contain escape characters, we do support escape characters in these
-     * properties.
-     *
-     * @param str:
-     *            the value string will be translated.
-     * @return the string which do not contain any escape character in
-     *         vcalendar1.0
-     */
-    private String exportEntpropValue(String propName, String str) {
-        if (null == propName || null == str)
-            return null;
-        if ("".equals(propName) || "".equals(str))
-            return "";
-
-        if (!mEscAllowedProps.contains(propName))
-            return str;
-
-        String tmp = str.replace("\\\\", "\n\r\n");
-        tmp = tmp.replace("\\;", ";");
-        tmp = tmp.replace("\\:", ":");
-        tmp = tmp.replace("\\,", ",");
-        tmp = tmp.replace("\n\r\n", "\\");
-        return tmp;
-    }
-}
diff --git a/core/java/android/syncml/pim/vcalendar/VCalParser_V20.java b/core/java/android/syncml/pim/vcalendar/VCalParser_V20.java
deleted file mode 100644
index 5748379..0000000
--- a/core/java/android/syncml/pim/vcalendar/VCalParser_V20.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.syncml.pim.vcalendar;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Arrays;
-import java.util.HashSet;
-
-import android.syncml.pim.VBuilder;
-
-public class VCalParser_V20 extends VCalParser_V10 {
-    private static final String V10LINEBREAKER = "\r\n";
-
-    private static final HashSet<String> acceptableComponents = new HashSet<String>(
-            Arrays.asList("VEVENT", "VTODO", "VALARM", "VTIMEZONE"));
-
-    private static final HashSet<String> acceptableV20Props = new HashSet<String>(
-            Arrays.asList("DESCRIPTION", "DTEND", "DTSTART", "DUE",
-                    "COMPLETED", "RRULE", "STATUS", "SUMMARY", "LOCATION"));
-
-    private boolean hasTZ = false; // MUST only have one TZ property
-
-    private String[] lines;
-
-    private int index;
-
-    @Override
-    public boolean parse(InputStream is, String encoding, VBuilder builder)
-            throws IOException {
-        // get useful info for android calendar, and alter to vcal 1.0
-        byte[] bytes = new byte[is.available()];
-        is.read(bytes);
-        String scStr = new String(bytes);
-        StringBuilder v10str = new StringBuilder("");
-
-        lines = splitProperty(scStr);
-        index = 0;
-
-        if ("BEGIN:VCALENDAR".equals(lines[index]))
-            v10str.append("BEGIN:VCALENDAR" + V10LINEBREAKER);
-        else
-            return false;
-        index++;
-        if (false == parseV20Calbody(lines, v10str)
-                || index > lines.length - 1)
-            return false;
-
-        if (lines.length - 1 == index && "END:VCALENDAR".equals(lines[index]))
-            v10str.append("END:VCALENDAR" + V10LINEBREAKER);
-        else
-            return false;
-
-        return super.parse(
-                // use vCal 1.0 parser
-                new ByteArrayInputStream(v10str.toString().getBytes()),
-                encoding, builder);
-    }
-
-    /**
-     * Parse and pick acceptable iCalendar body and translate it to
-     * calendarV1.0 format.
-     * @param lines iCalendar components/properties line list.
-     * @param buffer calendarV10 format string buffer
-     * @return true for success, or false
-     */
-    private boolean parseV20Calbody(String[] lines, StringBuilder buffer) {
-        try {
-            while (!"VERSION:2.0".equals(lines[index]))
-                index++;
-            buffer.append("VERSION:1.0" + V10LINEBREAKER);
-
-            index++;
-            for (; index < lines.length - 1; index++) {
-                String[] keyAndValue = lines[index].split(":", 2);
-                String key = keyAndValue[0];
-                String value = keyAndValue[1];
-
-                if ("BEGIN".equals(key.trim())) {
-                    if (!key.equals(key.trim()))
-                        return false; // MUST be "BEGIN:componentname"
-                    index++;
-                    if (false == parseV20Component(value, buffer))
-                        return false;
-                }
-            }
-        } catch (ArrayIndexOutOfBoundsException e) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Parse and pick acceptable calendar V2.0's component and translate it to
-     * V1.0 format.
-     * @param compName component name
-     * @param buffer calendarV10 format string buffer
-     * @return true for success, or false
-     * @throws ArrayIndexOutOfBoundsException
-     */
-    private boolean parseV20Component(String compName, StringBuilder buffer)
-            throws ArrayIndexOutOfBoundsException {
-        String endTag = "END:" + compName;
-        String[] propAndValue;
-        String propName, value;
-
-        if (acceptableComponents.contains(compName)) {
-            if ("VEVENT".equals(compName) || "VTODO".equals(compName)) {
-                buffer.append("BEGIN:" + compName + V10LINEBREAKER);
-                while (!endTag.equals(lines[index])) {
-                    propAndValue = lines[index].split(":", 2);
-                    propName = propAndValue[0].split(";", 2)[0];
-                    value = propAndValue[1];
-
-                    if ("".equals(lines[index]))
-                        buffer.append(V10LINEBREAKER);
-                    else if (acceptableV20Props.contains(propName)) {
-                        buffer.append(propName + ":" + value + V10LINEBREAKER);
-                    } else if ("BEGIN".equals(propName.trim())) {
-                        // MUST be BEGIN:VALARM
-                        if (propName.equals(propName.trim())
-                                && "VALARM".equals(value)) {
-                            buffer.append("AALARM:default" + V10LINEBREAKER);
-                            while (!"END:VALARM".equals(lines[index]))
-                                index++;
-                        } else
-                            return false;
-                    }
-                    index++;
-                } // end while
-                buffer.append(endTag + V10LINEBREAKER);
-            } else if ("VALARM".equals(compName)) { // VALARM component MUST
-                // only appear within either VEVENT or VTODO
-                return false;
-            } else if ("VTIMEZONE".equals(compName)) {
-                do {
-                    if (false == hasTZ) {// MUST only have 1 time TZ property
-                        propAndValue = lines[index].split(":", 2);
-                        propName = propAndValue[0].split(";", 2)[0];
-
-                        if ("TZOFFSETFROM".equals(propName)) {
-                            value = propAndValue[1];
-                            buffer.append("TZ" + ":" + value + V10LINEBREAKER);
-                            hasTZ = true;
-                        }
-                    }
-                    index++;
-                } while (!endTag.equals(lines[index]));
-            } else
-                return false;
-        } else {
-            while (!endTag.equals(lines[index]))
-                index++;
-        }
-
-        return true;
-    }
-
-    /** split ever property line to String[], not split folding line. */
-    private String[] splitProperty(String scStr) {
-        /*
-         * Property splitted by \n, and unfold folding lines by removing
-         * CRLF+LWSP-char
-         */
-        scStr = scStr.replaceAll("\r\n", "\n").replaceAll("\n ", "")
-                .replaceAll("\n\t", "");
-        String[] strs = scStr.split("\n");
-        return strs;
-    }
-}
diff --git a/core/java/android/syncml/pim/vcalendar/package.html b/core/java/android/syncml/pim/vcalendar/package.html
deleted file mode 100644
index cb4ca46..0000000
--- a/core/java/android/syncml/pim/vcalendar/package.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<HTML>
-<BODY>
-Support classes for SyncML.
-{@hide}
-</BODY>
-</HTML>
\ No newline at end of file
diff --git a/core/java/android/syncml/pim/vcard/ContactStruct.java b/core/java/android/syncml/pim/vcard/ContactStruct.java
index 4b4c394..687c1b4 100644
--- a/core/java/android/syncml/pim/vcard/ContactStruct.java
+++ b/core/java/android/syncml/pim/vcard/ContactStruct.java
@@ -49,8 +49,11 @@
  * This class standy by the person-contact in
  * Android system, we must use this class instance as parameter to transmit to
  * VCardComposer so that create vCard string.
+ * 
+ * @deprecated Please use the new code in android.pim.vcard
  */
 // TODO: rename the class name, next step
+@Deprecated
 public class ContactStruct {
     private static final String LOG_TAG = "ContactStruct";
     
diff --git a/core/java/android/syncml/pim/vcard/VCardComposer.java b/core/java/android/syncml/pim/vcard/VCardComposer.java
index 192736a..9823015 100644
--- a/core/java/android/syncml/pim/vcard/VCardComposer.java
+++ b/core/java/android/syncml/pim/vcard/VCardComposer.java
@@ -29,7 +29,10 @@
 
 /**
  * Compose VCard string
+ * 
+ * @depricated Please use the code in android.pim.vcard
  */
+@Deprecated
 public class VCardComposer {
     final public static int VERSION_VCARD21_INT = 1;
 
diff --git a/core/java/android/syncml/pim/vcard/VCardDataBuilder.java b/core/java/android/syncml/pim/vcard/VCardDataBuilder.java
index f2a2733..5fd8fdf 100644
--- a/core/java/android/syncml/pim/vcard/VCardDataBuilder.java
+++ b/core/java/android/syncml/pim/vcard/VCardDataBuilder.java
@@ -47,7 +47,10 @@
  * If we store all VNode entries in memory like VDataBuilder.java,
  * OutOfMemoryError may be thrown. Thus, this class push each VCard entry into
  * ContentResolver immediately.
+ * 
+ * @depricated Please use the code in android.pim.vcard
  */
+@Deprecated
 public class VCardDataBuilder implements VBuilder {
     static private String LOG_TAG = "VCardDataBuilder"; 
     
diff --git a/core/java/android/syncml/pim/vcard/VCardEntryCounter.java b/core/java/android/syncml/pim/vcard/VCardEntryCounter.java
index 03cd1d9..11372ce 100644
--- a/core/java/android/syncml/pim/vcard/VCardEntryCounter.java
+++ b/core/java/android/syncml/pim/vcard/VCardEntryCounter.java
@@ -20,6 +20,10 @@
 
 import android.syncml.pim.VBuilder;
 
+/**
+ * @depricated Please use the code in android.pim.vcard
+ */
+@Deprecated
 public class VCardEntryCounter implements VBuilder {
     private int mCount;
     
diff --git a/core/java/android/syncml/pim/vcard/VCardException.java b/core/java/android/syncml/pim/vcard/VCardException.java
index 35b31ec..326aa7f 100644
--- a/core/java/android/syncml/pim/vcard/VCardException.java
+++ b/core/java/android/syncml/pim/vcard/VCardException.java
@@ -16,6 +16,10 @@
 
 package android.syncml.pim.vcard;
 
+/**
+ * @depricated Please use the code in android.pim.vcard
+ */
+@Deprecated
 public class VCardException extends java.lang.Exception{
     // constructors
 
diff --git a/core/java/android/syncml/pim/vcard/VCardNestedException.java b/core/java/android/syncml/pim/vcard/VCardNestedException.java
index def6f3b7..5c49e40 100644
--- a/core/java/android/syncml/pim/vcard/VCardNestedException.java
+++ b/core/java/android/syncml/pim/vcard/VCardNestedException.java
@@ -18,7 +18,10 @@
 
 /**
  * VCardException thrown when VCard is nested without VCardParser's being notified.
+ *
+ * @depricated Please use the code in android.pim.vcard
  */
+@Deprecated
 public class VCardNestedException extends VCardException {
     public VCardNestedException() {}
     public VCardNestedException(String message) {
diff --git a/core/java/android/syncml/pim/vcard/VCardParser.java b/core/java/android/syncml/pim/vcard/VCardParser.java
index 9a590dd..a562973 100644
--- a/core/java/android/syncml/pim/vcard/VCardParser.java
+++ b/core/java/android/syncml/pim/vcard/VCardParser.java
@@ -23,6 +23,10 @@
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 
+/**
+ * @deprecated Please use the code in android.pim.vcard
+ */
+@Deprecated
 public class VCardParser {
 
     // TODO: fix this.
diff --git a/core/java/android/syncml/pim/vcard/VCardParser_V21.java b/core/java/android/syncml/pim/vcard/VCardParser_V21.java
index d865668..75ce564 100644
--- a/core/java/android/syncml/pim/vcard/VCardParser_V21.java
+++ b/core/java/android/syncml/pim/vcard/VCardParser_V21.java
@@ -31,7 +31,10 @@
 
 /**
  * This class is used to parse vcard. Please refer to vCard Specification 2.1.
+ *
+ * @deprecated Please use the code in android.pim.vcard
  */
+@Deprecated
 public class VCardParser_V21 {
     private static final String LOG_TAG = "VCardParser_V21";
     
diff --git a/core/java/android/syncml/pim/vcard/VCardParser_V30.java b/core/java/android/syncml/pim/vcard/VCardParser_V30.java
index e67525e..3aca258 100644
--- a/core/java/android/syncml/pim/vcard/VCardParser_V30.java
+++ b/core/java/android/syncml/pim/vcard/VCardParser_V30.java
@@ -25,7 +25,10 @@
 /**
  * This class is used to parse vcard3.0. <br>
  * Please refer to vCard Specification 3.0 (http://tools.ietf.org/html/rfc2426)
+ * 
+ * @deprecated Please use the code in android.pim.vcard
  */
+@Deprecated
 public class VCardParser_V30 extends VCardParser_V21 {
     private static final String LOG_TAG = "VCardParser_V30";
     
diff --git a/core/java/android/syncml/pim/vcard/VCardSourceDetector.java b/core/java/android/syncml/pim/vcard/VCardSourceDetector.java
index 8c48391..6873f04 100644
--- a/core/java/android/syncml/pim/vcard/VCardSourceDetector.java
+++ b/core/java/android/syncml/pim/vcard/VCardSourceDetector.java
@@ -26,8 +26,10 @@
 /**
  * Class which tries to detects the source of the vCard from its properties.
  * Currently this implementation is very premature.
- * @hide
+ * 
+ * @deprecated Please use the code in android.pim.vcard
  */
+@Deprecated
 public class VCardSourceDetector implements VBuilder {
     // Should only be used in package. 
     static final int TYPE_UNKNOWN = 0;
diff --git a/core/java/android/syncml/pim/vcard/VCardVersionException.java b/core/java/android/syncml/pim/vcard/VCardVersionException.java
index 1ca88d1..14bb45b 100644
--- a/core/java/android/syncml/pim/vcard/VCardVersionException.java
+++ b/core/java/android/syncml/pim/vcard/VCardVersionException.java
@@ -17,8 +17,11 @@
 package android.syncml.pim.vcard;
 
 /**
- * VCardException used only when the version of the vCard is different. 
+ * VCardException used only when the version of the vCard is different.
+ * 
+ * @deprecated Please use the code in android.pim.vcard
  */
+@Deprecated
 public class VCardVersionException extends VCardException {
     public VCardVersionException() {
     }