diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/constant/BroadcastConstants.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/constant/BroadcastConstants.java
index 781589c..ad745aa 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/constant/BroadcastConstants.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/constant/BroadcastConstants.java
@@ -134,6 +134,9 @@
 
     /** Group has disband. */
     public static final String ACTION_TYPE_DELETED = "deleted";
+    
+    /** Group has gone. */
+    public static final String ACTION_TYPE_GONE = "gone";
 
     /** Update the subject of group. */
     public static final String ACTION_TYPE_UPDATE_SUBJECT = "updateSubject";
@@ -188,6 +191,9 @@
 
     /** UPDATE_DOWN_PROGRESS broadcast passed parameter name total long. */
     public static final String BC_VAR_TRANSFER_PRG_TOTAL = "total";
+    
+    /** Warning file is too large broadcast. */
+    public static final String UI_ALERT_FILE_NOT_EXISTS = "com.suntek.mway.rcs.ACTION_UI_MESSAGE_ALERT_FILE_NOT_EXISTS";
 
     /** Warning file is too large broadcast. */
     public static final String UI_ALERT_FILE_TOO_LARGE = "com.suntek.mway.rcs.ACTION_UI_MESSAGE_ALERT_FILE_TOO_LARGE";
@@ -269,7 +275,10 @@
 
     /** Create group not complete. */
     public static final String BC_VAR_SEND_ERROR_GROUP_NOT_COMPLETED = "group_not_completed";
-
+    
+    /** Wait other to join */
+    public static final String BC_VAR_SEND_ERROR_GROUP_NOT_MEMBER = "group_wait_member_join";
+    
     /** Group has deleted. */
     public static final String BC_VAR_SEND_ERROR_GROUP_HAS_DELETED = "group_has_deleted";
 
@@ -516,8 +525,11 @@
 
     /** Mcloud broadcast passed parameter name remoteNodeList list<FileNode>. */
     public static final String BC_VAR_MC_REMOTE_NODE_LIST = "remoteNodeList";
+
+    /** Mcloud broadcast passed parameter name chatMessage id String. */
+    public static final String BC_VAR_MC_CHATMESSAGE_ID = "chatMessageId";
     
-    /** . */
+    /** Mcloud broadcast passed parameter name exclude suffix id String. */
     public static final String BC_VAR_MC_EXCLUDE_SUFFIX = "excludeSuffix";
 
     /** The mcloud event type STARTED. */
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/constant/MediaConstants.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/constant/MediaConstants.java
index 512110d..ddb5510 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/constant/MediaConstants.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/constant/MediaConstants.java
@@ -37,6 +37,9 @@
     public static final String VIDEO_SUFFIX = "3GP,MP4";
     
     /** The suffixs of video. */
+    public static final String VCARD_SUFFIX = "VCF";
+    
+    /** The suffixs of video. */
     public static final String CLOUD_FILE_EXCLUDE_SUFFIX = "EXE,BAT,APK,SH,IPA,DEB,PXL,XAP";
 
     /** Maximum default file size. */
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/im/IGroupManagerApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/im/IGroupManagerApi.aidl
index edbfe43..418957b 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/im/IGroupManagerApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/im/IGroupManagerApi.aidl
@@ -77,6 +77,7 @@
     
     GroupChatModel getGroupChatByThreadId(String threadId);
        GroupChatModel getGroupChatByChatUri(String chatUri);
+       GroupChatModel getGroupChatByChatUriIgnoreState(String chatUri);
 
     String getGroupChatDomainName();
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/im/IInstantMessageApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/im/IInstantMessageApi.aidl
index 1f11790..b98ac5d 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/im/IInstantMessageApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/im/IInstantMessageApi.aidl
@@ -199,4 +199,49 @@
     void backupMessageList(in List<SimpleMsg> simpleMsgList);
 
 	ChatMessage getMessageByTransferId(String transferId);
+	
+	void cancelBackup();
+	
+	long sendTextMessageSync(long thread_id,String number, String text,
+            int burnFlag, int barCycle);
+	
+	long sendImageFileSync(long thread_id,long sms_id,String number, String filePath,
+            int burnFlag, int barCycle,int quality);
+    
+    long sendAudioFileSync(long thread_id,long sms_id,String number, String filePath,
+            int recordTime,int burnFlag, int barCycle) ;
+    long sendVideoFileSync(long thread_id,long sms_id,String number, String filePath,
+            int length,int burnFlag, int barCycle);
+            
+    long sendOne2ManyTextMessageSync(long thread_id,in List<String> numbers, String text,
+            int burnFlag, int barCycle);  
+          
+    long sendOne2ManyImageFileSync(long thread_id,long sms_id, in List<String> numbers, String filePath,
+            int burnFlag, int barCycle,int quality);
+    
+    long sendOne2ManyAudioFileSync(long thread_id,long sms_id,in List<String> numbers, String filePath,
+            int recordTime,int burnFlag, int barCycle);
+    long sendOne2ManyVideoFileSync(long thread_id,long sms_id,in List<String> numbers, String filePath,
+            int length,int burnFlag, int barCycle);
+            
+    long sendGroupMessageSync(long thread_id, String conversationId,long sms_id,String msg,
+            String groupId);
+          
+    long sendOne2ManyVCardByPathSync(long thread_id, long sms_id, 
+            in List<String> numbers, String vcardFilePath);
+    long sendVCardByPathSync(long thread_id,long sms_id,String number, String vcardFilePath);
+    
+    
+    void forwardImageFile(long thread_id,long sms_id,String number, String id,
+            int burnFlag, int barCycle);
+    void forwardVideoFile(long thread_id,long sms_id,String number, String id,
+            int length,int burnFlag, int barCycle);
+    void forwardOne2ManyImageFile(long thread_id,long sms_id, in List<String> numbers, String id,
+            int burnFlag, int barCycle);
+    void forwardOne2ManyVideoFile(long thread_id,long sms_id,in List<String> numbers, String id,
+            int length,int burnFlag, int barCycle);
+    void forwardGroupImageFile(long thread_id, String conversationId,long sms_id,String id,
+            String groupId);
+    void forwardGroupVideoFile(long thread_id, String conversationId,long sms_id,String id,
+            int  length ,String groupId);
 }
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/im/IPaMessageApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/im/IPaMessageApi.aidl
index b0b0efa..1f53f2e 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/im/IPaMessageApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/im/IPaMessageApi.aidl
@@ -57,4 +57,13 @@
     long getVideoMaxTime();
 
     long getVideoFtMaxSize();
+    
+    
+    long sendTextMessageSync(long thread_id, long sms_id, String uuid, String text);
+        
+    long sendImageFileSync(long thread_id, long sms_id, String uuid , String filepath, int quality);
+    
+    long sendAudioFileSync(long thread_id, long sms_id, String uuid, String filepath, int recordTime);
+    
+    long sendVideoFileSync(long thread_id, long sms_id, String uuid, String filepath, int length);
 }
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/mcloud/IMcloudFileApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/mcloud/IMcloudFileApi.aidl
index 2d2aa07..4dc78a6 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/mcloud/IMcloudFileApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/mcloud/IMcloudFileApi.aidl
@@ -29,12 +29,12 @@
     void shareFile(String fullPathInID, String shareDesc);
     void shareFileAndSend(String fullPathInID, String shareDesc, String contact, long threadId, String smsContentTemp);
     void getShareFileList(int beginIndex, int endIndex);
-    IMcloudOperationCtrl downloadFileFromUrl(String remoteUrl, String fileName, int transOper);
+    IMcloudOperationCtrl downloadFileFromUrl(String remoteUrl, String fileName, int transOper, int chatMessageId);
 
     void shareFileAndSendGroup(String fullPathInID, String shareDesc, long threadId, String conversationId, String groupId);
     void shareFileAndSendOne2Many(String fullPathInID, String shareDesc, in List<String> contacts, long threadId, String smsContentTemp);
 
     void getRemoteFileList(String remotePath, int beginIndex, int endIndex, int fileNodeOrder);
-
+	String getLocalRootPath();
 }
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMContactSyncListener.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMContactSyncListener.aidl
index 967b89e..92ea420 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMContactSyncListener.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMContactSyncListener.aidl
@@ -48,7 +48,7 @@
     void onProgress(in Auth auth, int contactAction, int value, int max);
     void onHttpResponeText(String message, String resultcode);
     void onSync(in Auth auth, int syncAction, boolean success);
-    //void onThrowException(in Auth auth, int syncAction, Exception e);
+    void onThrowException(in Auth auth, int syncAction, String exceptionMessage);
     void onRunning();
 
 }
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmoticonConstant.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmoticonConstant.java
index e32932a..982b9bd 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmoticonConstant.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmoticonConstant.java
@@ -35,14 +35,14 @@
 
     /** The Constant EMO_PACKAGE_FILE. */
     public static final int EMO_PACKAGE_FILE = 3;
-
+    
     /** The Constant EMO_DOWNLOAD_SUCCESS. */
     public static final int EMO_DOWNLOAD_SUCCESS = 1;
-
+    
     /** The Constant EMO_DOWNLOAD_FAILURE. */
     public static final int EMO_DOWNLOAD_FAILURE = 0;
-
+    
     /** The Constant EMO_DOWNLOAD_LOADING. */
     public static final int EMO_DOWNLOAD_LOADING = 2;
-
+    
 }
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MenuInfoMode.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MenuInfoMode.aidl
index e80f04e..9cb1d80 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MenuInfoMode.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MenuInfoMode.aidl
@@ -20,7 +20,6 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
-
 package com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct;
 
 parcelable MenuInfoMode;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MenuInfoMode.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MenuInfoMode.java
index c38b373..725fd8f 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MenuInfoMode.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MenuInfoMode.java
@@ -20,7 +20,6 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
-
 package com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct;
 
 import android.os.Parcel;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountConstant.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountConstant.java
index 79949d0..8a699f9 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountConstant.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountConstant.java
@@ -27,7 +27,7 @@
  * The Class PublicAccountConstant.
  */
 public class PublicAccountConstant {
-
+    
     /** account pre number. */
     public static final int ACCOUNT_PRE_NUMBER = 8;
 
@@ -87,4 +87,11 @@
 
     /** The Constant MENU_TYPE_APPLICATION. */
     public static final int MENU_TYPE_APPLICATION = 3;
+    
+    /** The Constant MESSAGE_FORWARD_ABLE. */
+    public static final int MESSAGE_FORWARD_ABLE = 0;
+    
+    /** The Constant MESSAGE_FORWARD_UNABLE. */
+    public static final int MESSAGE_FORWARD_UNABLE = 1;
+    
 }
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccounts.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccounts.java
index 8c2364c..c08dfa2 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccounts.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccounts.java
@@ -25,6 +25,8 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 
+import java.io.UnsupportedEncodingException;
+
 /**
  * <p>
  * Title: The public account entity
@@ -43,7 +45,7 @@
  * @version 1.0
  *
  */
-public class PublicAccounts implements Parcelable
+public class PublicAccounts implements Parcelable, Comparable<PublicAccounts>
 {
     /** The logo url. */
     private String    logo;
@@ -281,4 +283,41 @@
 
         return sbuffer.toString();
     }
+
+    @Override
+    public int compareTo(PublicAccounts account) {
+        int lenA = name.length();
+        int lenB = account.getName().length();
+        int lenComp = lenA >= lenB ? lenB : lenA;
+        int result = 0;
+        for(int i = 0; i < lenComp; i++){
+            result = getHexString(name.charAt(0)).compareTo(getHexString(account.getName().charAt(0)));
+            if(result == 0){
+                continue;
+            }else{
+                return result;
+            }
+        }
+        if(lenA > lenB){
+            return 1;
+        }else if(lenA == lenB){
+            return 0;
+        }else{
+            return -1;
+        }
+    }
+    
+    public static String getHexString(char c) {
+        byte[] b = null;
+        StringBuffer sb = new StringBuffer();
+        try {
+            b = new String(new char[] {c}).getBytes("gb2312");
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        for (int i = 0; i < b.length; i++) {
+            sb.append(Integer.toHexString(b[i] & 0xFF));
+        }
+        return sb.toString();
+    }
 }
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountsDetail.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountsDetail.java
index 74608f7..02db2bf 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountsDetail.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountsDetail.java
@@ -103,7 +103,7 @@
 
     /** The sip uri. */
 //    private String    sipUri;
-
+    
     /** The number. */
     private String    number;
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/SuntekMessageData.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/SuntekMessageData.java
index c713de7..78c5669 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/SuntekMessageData.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/SuntekMessageData.java
@@ -72,6 +72,9 @@
     /** The Constant CHAT_GROUP_CONTENT_URI. */
     public static final Uri CHAT_GROUP_CONTENT_URI = Uri.parse("content://" + MESSAGE_AUTHORITY + "/" + TABLE_CHAT_GROUP);
     
+    /** The Constant CHAT_THREAD_CONTENT_URI. */
+    public static final Uri CHAT_THREAD_CONTENT_URI = Uri.parse("content://" + MESSAGE_AUTHORITY + "/" + TABLE_MESSAGE_THREAD);
+    
     /** The Constant GROUP_CHAT_DIVICE_API_CONTENT_URI. */
     public static final Uri GROUP_CHAT_DIVICE_API_CONTENT_URI = Uri.parse("content://" + MESSAGE_AUTHORITY + "/" + TABLE_DIVICE_API_CHAT_GROUP);
     
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupChatUser.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupChatUser.java
index 5235ec1..ef678ea 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupChatUser.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupChatUser.java
@@ -432,7 +432,7 @@
      * @return
      */
     public String getAlias() {
-        return alias;
+        return alias == null ? "" : alias;
     }
 
     /**
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupNotificationConst.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupNotificationConst.java
index 2b1417e..d36e49a 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupNotificationConst.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupNotificationConst.java
@@ -45,6 +45,8 @@
     public static final String MEMBER_QUIT = "quit";
 
     public static final String DISBAND = "disband";
+    
+    public static final String GONE = "gone";
 
 
 }
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicMediaMessage.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicMediaMessage.java
index 9707136..1d15029 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicMediaMessage.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicMediaMessage.java
@@ -30,18 +30,6 @@
  */
 public class PublicMediaMessage extends PublicMessage implements Parcelable{
 
-    /** The createtime. */
-    private String createtime;
-
-    /** The forwardable. */
-//    private String forwardable;
-
-    /** The msgtype. */
-    private String msgtype;
-
-    /** The msg id. */
-//    private String msgId;
-
     /** The media. */
     private PublicMediaContent media;
 
@@ -74,9 +62,10 @@
     @Override
     public void writeToParcel(Parcel dest, int flags) {
         dest.writeString( createtime );
-//        dest.writeString( forwardable );
+        dest.writeInt( forwardable );
         dest.writeString( msgtype );
-//        dest.writeString( msgId );
+        dest.writeInt( activeStatus );
+        dest.writeString( paUuid );
         dest.writeValue( media );
     }
 
@@ -88,9 +77,10 @@
     public void readFromParcel( Parcel source )
     {
         createtime = source.readString();
-//        forwardable = source.readString();
+        forwardable = source.readInt();
         msgtype = source.readString();
-//        msgId = source.readString();
+        activeStatus = source.readInt();
+        paUuid = source.readString();
         media = (PublicMediaContent) source.readValue(this.getClass().getClassLoader());
     }
 
@@ -110,78 +100,6 @@
                                                                             };
 
     /**
-     * Gets the createtime.
-     *
-     * @return the createtime
-     */
-    public String getCreatetime() {
-        return createtime;
-    }
-
-    /**
-     * Sets the createtime.
-     *
-     * @param createtime the new createtime
-     */
-    public void setCreatetime(String createtime) {
-        this.createtime = createtime;
-    }
-
-    /**
-     * Gets the forwardable.
-     *
-     * @return the forwardable
-     */
-//    public String getForwardable() {
-//        return forwardable;
-//    }
-
-    /**
-     * Sets the forwardable.
-     *
-     * @param forwardable the new forwardable
-     */
-//    public void setForwardable(String forwardable) {
-//        this.forwardable = forwardable;
-//    }
-
-    /**
-     * Gets the msgtype.
-     *
-     * @return the msgtype
-     */
-    public String getMsgtype() {
-        return msgtype;
-    }
-
-    /**
-     * Sets the msgtype.
-     *
-     * @param msgtype the new msgtype
-     */
-    public void setMsgtype(String msgtype) {
-        this.msgtype = msgtype;
-    }
-
-    /**
-     * Gets the msg id.
-     *
-     * @return the msg id
-     */
-//    public String getMsgId() {
-//        return msgId;
-//    }
-
-    /**
-     * Sets the msg id.
-     *
-     * @param msgId the new msg id
-     */
-//    public void setMsgId(String msgId) {
-//        this.msgId = msgId;
-//    }
-
-    /**
      * Gets the media.
      *
      * @return the media
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicMessage.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicMessage.java
index 39bb182..c5361af 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicMessage.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicMessage.java
@@ -57,6 +57,22 @@
     /** The Constant VCARD. */
     public static final String VCARD = "18";
 
+    
+    /** The createtime. */
+    protected String createtime;
+
+    /** The forwardable. */
+    protected int forwardable;
+
+    /** The msgtype. */
+    protected String msgtype;
+
+    /** The activeStatus. */
+    protected int activeStatus;
+    
+    /** The paUuid. */
+    protected String paUuid;
+    
     /**
      * Instantiates a new public message.
      */
@@ -70,7 +86,47 @@
      * @param source the source
      */
     public PublicMessage(Parcel source) {
+        readFromParcel( source );
+    }
+    
+    public String getCreatetime() {
+        return createtime;
+    }
 
+    public void setCreatetime(String createtime) {
+        this.createtime = createtime;
+    }
+
+    public int getForwardable() {
+        return forwardable;
+    }
+
+    public void setForwardable(int forwardable) {
+        this.forwardable = forwardable;
+    }
+
+    public String getMsgtype() {
+        return msgtype;
+    }
+
+    public void setMsgtype(String msgtype) {
+        this.msgtype = msgtype;
+    }
+
+    public int getActiveStatus() {
+        return activeStatus;
+    }
+
+    public void setActiveStatus(int activeStatus) {
+        this.activeStatus = activeStatus;
+    }
+
+    public String getPaUuid() {
+        return paUuid;
+    }
+
+    public void setPaUuid(String paUuid) {
+        this.paUuid = paUuid;
     }
 
     /* (non-Javadoc)
@@ -85,10 +141,19 @@
      * @see android.os.Parcelable#writeToParcel(android.os.Parcel, int)
      */
     @Override
-    public void writeToParcel(Parcel arg0, int arg1) {
-
+    public void writeToParcel(Parcel dest, int flags) {
+        
     }
 
+    /**
+     * Read from parcel.
+     *
+     * @param source the source
+     */
+    public void readFromParcel( Parcel source ){
+        
+    }
+    
     /** The Constant CREATOR. */
     public static final Parcelable.Creator<PublicMessage> CREATOR = new Parcelable.Creator<PublicMessage>() {
         public PublicMessage createFromParcel(Parcel in) {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicTextMessage.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicTextMessage.java
index 67f1270..7bf3cf8 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicTextMessage.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicTextMessage.java
@@ -30,21 +30,9 @@
  */
 public class PublicTextMessage extends PublicMessage implements Parcelable{
 
-    /** The createtime. */
-    private String createtime;
-
-    /** The forwardable. */
-//    private String forwardable;
-
-    /** The msgtype. */
-    private String msgtype;
-
     /** The content. */
     private String content;
 
-    /** The msg id. */
-//    private String msgId;
-
     /**
      * Instantiates a new public text message.
      */
@@ -60,18 +48,25 @@
         readFromParcel( source );
     }
 
+    /* (non-Javadoc)
+     * @see com.suntek.mway.rcs.client.aidl.provider.model.PublicMessage#describeContents()
+     */
     @Override
     public int describeContents() {
         return 0;
     }
 
+    /* (non-Javadoc)
+     * @see com.suntek.mway.rcs.client.aidl.provider.model.PublicMessage#writeToParcel(android.os.Parcel, int)
+     */
     @Override
     public void writeToParcel(Parcel dest, int flags) {
         dest.writeString( createtime );
-//        dest.writeString( forwardable );
+        dest.writeInt( forwardable );
         dest.writeString( msgtype );
         dest.writeString( content );
-//        dest.writeString( msgId );
+        dest.writeInt( activeStatus );
+        dest.writeString( paUuid );
     }
 
     /**
@@ -82,10 +77,11 @@
     public void readFromParcel( Parcel source )
     {
         createtime = source.readString();
-//        forwardable = source.readString();
+        forwardable = source.readInt();
         msgtype = source.readString();
         content = source.readString();
-//        msgId = source.readString();
+        activeStatus = source.readInt();
+        paUuid = source.readString();
     }
 
     /** The parcel creator. */
@@ -103,59 +99,6 @@
                                                                                 }
                                                                             };
 
-    /**
-     * Gets the createtime.
-     *
-     * @return the createtime
-     */
-    public String getCreatetime() {
-        return createtime;
-    }
-
-    /**
-     * Sets the createtime.
-     *
-     * @param createtime the new createtime
-     */
-    public void setCreatetime(String createtime) {
-        this.createtime = createtime;
-    }
-
-    /**
-     * Gets the forwardable.
-     *
-     * @return the forwardable
-     */
-//    public String getForwardable() {
-//        return forwardable;
-//    }
-
-    /**
-     * Sets the forwardable.
-     *
-     * @param forwardable the new forwardable
-     */
-//    public void setForwardable(String forwardable) {
-//        this.forwardable = forwardable;
-//    }
-
-    /**
-     * Gets the msgtype.
-     *
-     * @return the msgtype
-     */
-    public String getMsgtype() {
-        return msgtype;
-    }
-
-    /**
-     * Sets the msgtype.
-     *
-     * @param msgtype the new msgtype
-     */
-    public void setMsgtype(String msgtype) {
-        this.msgtype = msgtype;
-    }
 
     /**
      * Gets the content.
@@ -175,22 +118,4 @@
         this.content = content;
     }
 
-    /**
-     * Gets the msg id.
-     *
-     * @return the msg id
-     */
-//    public String getMsgId() {
-//        return msgId;
-//    }
-
-    /**
-     * Sets the msg id.
-     *
-     * @param msgId the new msg id
-     */
-//    public void setMsgId(String msgId) {
-//        this.msgId = msgId;
-//    }
-
 }
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicTopicMessage.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicTopicMessage.java
index a1f1bcb..fcbfcf6 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicTopicMessage.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicTopicMessage.java
@@ -33,24 +33,6 @@
  */
 public class PublicTopicMessage extends PublicMessage implements Parcelable{
 
-    /** The createtime. */
-    private String createtime;
-
-    /** The forwardable. */
-//    private String forwardable;
-
-    /** The msgtype. */
-    private String msgtype;
-
-    /** The msg id. */
-//    private String msgId;
-
-    /** The smscontent. */
-//    private String smscontent;
-
-    /** The sectioncount. */
-//    private String sectioncount;
-
     /** The topics. */
     private List<PublicTopicContent> topics;
 
@@ -83,11 +65,10 @@
     @Override
     public void writeToParcel(Parcel dest, int flags) {
         dest.writeString( createtime );
-//        dest.writeString( forwardable );
+        dest.writeInt( forwardable );
         dest.writeString( msgtype );
-//        dest.writeString( msgId );
-//        dest.writeString( smscontent );
-//        dest.writeString( sectioncount );
+        dest.writeInt( activeStatus );
+        dest.writeString( paUuid );
         dest.writeList( topics );
     }
 
@@ -99,11 +80,10 @@
     public void readFromParcel( Parcel source )
     {
         createtime = source.readString();
-//        forwardable = source.readString();
+        forwardable = source.readInt();
         msgtype = source.readString();
-//        msgId = source.readString();
-//        smscontent = source.readString();
-//        sectioncount = source.readString();
+        activeStatus = source.readInt();
+        paUuid = source.readString();
         topics = new LinkedList<PublicTopicContent>();
         source.readList( topics, this.getClass().getClassLoader() );
     }
@@ -123,115 +103,6 @@
                                                                                 }
                                                                             };
 
-
-    /**
-     * Gets the createtime.
-     *
-     * @return the createtime
-     */
-    public String getCreatetime() {
-        return createtime;
-    }
-
-    /**
-     * Sets the createtime.
-     *
-     * @param createtime the new createtime
-     */
-    public void setCreatetime(String createtime) {
-        this.createtime = createtime;
-    }
-
-    /**
-     * Gets the forwardable.
-     *
-     * @return the forwardable
-     */
-//    public String getForwardable() {
-//        return forwardable;
-//    }
-
-    /**
-     * Sets the forwardable.
-     *
-     * @param forwardable the new forwardable
-     */
-//    public void setForwardable(String forwardable) {
-//        this.forwardable = forwardable;
-//    }
-
-    /**
-     * Gets the msgtype.
-     *
-     * @return the msgtype
-     */
-    public String getMsgtype() {
-        return msgtype;
-    }
-
-    /**
-     * Sets the msgtype.
-     *
-     * @param msgtype the new msgtype
-     */
-    public void setMsgtype(String msgtype) {
-        this.msgtype = msgtype;
-    }
-
-    /**
-     * Gets the msg id.
-     *
-     * @return the msg id
-     */
-//    public String getMsgId() {
-//        return msgId;
-//    }
-
-    /**
-     * Sets the msg id.
-     *
-     * @param msgId the new msg id
-     */
-//    public void setMsgId(String msgId) {
-//        this.msgId = msgId;
-//    }
-
-    /**
-     * Gets the smscontent.
-     *
-     * @return the smscontent
-     */
-//    public String getSmscontent() {
-//        return smscontent;
-//    }
-
-    /**
-     * Sets the smscontent.
-     *
-     * @param smscontent the new smscontent
-     */
-//    public void setSmscontent(String smscontent) {
-//        this.smscontent = smscontent;
-//    }
-
-    /**
-     * Gets the sectioncount.
-     *
-     * @return the sectioncount
-     */
-//    public String getSectioncount() {
-//        return sectioncount;
-//    }
-
-    /**
-     * Sets the sectioncount.
-     *
-     * @param sectioncount the new sectioncount
-     */
-//    public void setSectioncount(String sectioncount) {
-//        this.sectioncount = sectioncount;
-//    }
-
     /**
      * Gets the topics.
      *
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/utils/MediaUtils.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/utils/MediaUtils.java
index 4b15dd3..e468775 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/utils/MediaUtils.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/utils/MediaUtils.java
@@ -96,6 +96,26 @@
             return false;
         }
     }
+    
+    /**
+     * Checks if is vcard file.
+     *
+     * @param fileName the file name
+     * @return true, if is vcard file
+     */
+    public static boolean isVcardFile(String fileName){
+        if(TextUtils.isEmpty(fileName)){
+            return false;
+        }
+        
+        int suffixIndex = fileName.lastIndexOf(".");
+        if(suffixIndex != -1){
+            String suffix = fileName.substring(suffixIndex + 1);
+            return isVcardSuffix(suffix);
+        }else{
+            return false;
+        }
+    }
 
     /**
      * Checks if is video file.
@@ -160,6 +180,20 @@
     }
     
     /**
+     * Checks if is vcard suffix.
+     *
+     * @param suffix the suffix
+     * @return true, if is vcard suffix
+     */
+    public static boolean isVcardSuffix(String suffix){
+        if(TextUtils.isEmpty(suffix)){
+            return false;
+        }
+        
+        return MediaConstants.VCARD_SUFFIX.indexOf(suffix.toUpperCase(Locale.getDefault())) != -1;
+    }
+    
+    /**
      * Checks if is cloud file exclude suffix.
      *
      * @param suffix the suffix
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/im/impl/MessageApi.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/im/impl/MessageApi.java
index e634e11..02d0542 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/im/impl/MessageApi.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/im/impl/MessageApi.java
@@ -29,6 +29,7 @@
 import android.content.ComponentName;
 import android.content.ServiceConnection;
 import android.os.IBinder;
+import android.text.TextUtils;
 
 import com.suntek.mway.rcs.client.api.ClientApi;
 import com.suntek.mway.rcs.client.aidl.constant.APIConstant;
@@ -1607,4 +1608,199 @@
         }
         return null;
     }
+    
+    public void cancelBackup() throws ServiceDisconnectedException {
+        LogHelper.i("enter method:cancelBackup.");
+        VerificationUtil.ApiIsNull(myApi);
+        try {
+            myApi.cancelBackup();
+        } catch (Exception ex) {
+            LogHelper.e(ex.getMessage(), ex);
+        }
+    }
+    
+    public void forwardImageFile(long thread_id, long sms_id, String number, String id,
+            int burnFlag, int barCycle) throws ServiceDisconnectedException {
+        VerificationUtil.ApiIsNull(myApi);
+        LogHelper
+                .i(String.format(
+                        Locale.getDefault(),
+                        "enter method forwardImageFile. [thread_id,sms_id,number,id,burnFlag,barCycle]=%d,%d,%s,%s,%d,%d",
+                        thread_id, sms_id, number, id, burnFlag, barCycle));
+
+        if(TextUtils.isEmpty(id)){
+            LogHelper.i("id field value error");
+            return;
+        }
+        
+        if (!VerificationUtil.isNumber(number)) {
+            LogHelper.i("number field value error");
+            return;
+        }
+        if (!VerificationUtil.isBurnFlagCorrect(burnFlag)) {
+            LogHelper.i("burnFlag field must be 0 or 1");
+            return;
+        }
+        if (barCycle < 0) {
+            LogHelper.i("barCycle field must be a positive int");
+            return;
+        }
+
+        try {
+            myApi.forwardImageFile(thread_id, sms_id, VerificationUtil.formatNumber(number), id,
+                    burnFlag, barCycle);
+        } catch (Exception ex) {
+            LogHelper.e(ex.getMessage(), ex);
+        }
+    }
+    
+    public void forwardVideoFile(long thread_id, long sms_id, String number, String id,
+            int length, int burnFlag, int barCycle, boolean isRecord)
+            throws ServiceDisconnectedException {
+        VerificationUtil.ApiIsNull(myApi);
+        LogHelper
+                .i(String.format(
+                        Locale.getDefault(),
+                        "enter method forwardVideoFile. [thread_id,sms_id,number,id,length,burnFlag,barCycle,isRecord]=%d,%d,%s,%s,%d,%d,%d,%b",
+                        thread_id, sms_id, number, id, length, burnFlag, barCycle, isRecord));
+
+        if(TextUtils.isEmpty(id)){
+            LogHelper.i("id field value error");
+            return;
+        }
+        
+        if (!VerificationUtil.isNumber(number)) {
+            LogHelper.i("number field value error");
+            return;
+        }
+        if (!VerificationUtil.isBurnFlagCorrect(burnFlag)) {
+            LogHelper.i("burnFlag field must be 0 or 1");
+            return;
+        }
+        if (barCycle < 0) {
+            LogHelper.i("barCycle field must be a positive int");
+            return;
+        }
+        try {
+            myApi.forwardVideoFile(thread_id, sms_id, VerificationUtil.formatNumber(number), id,
+                    length, burnFlag, barCycle);
+        } catch (Exception ex) {
+            LogHelper.e(ex.getMessage(), ex);
+        }
+    }
+
+    public void forwardOne2ManyImageFile(long thread_id, long sms_id, List<String> numbers,
+            String id, int burnFlag, int barCycle)
+            throws ServiceDisconnectedException {
+        VerificationUtil.ApiIsNull(myApi);
+        LogHelper
+                .i(String.format(
+                        Locale.getDefault(),
+                        "enter method forwardOne2ManyImageFile. [thread_id,sms_id,numbers,id,burnFlag,barCycle]=%d,%d,%s,%s,%d,%d",
+                        thread_id, sms_id, numbers.toString(), id, burnFlag, barCycle));
+        
+        if(TextUtils.isEmpty(id)){
+            LogHelper.i("id field value error");
+            return;
+        }
+        
+        if (!VerificationUtil.isAllNumber(numbers)) {
+            LogHelper.i("number field value error");
+            return;
+        }
+        if (!VerificationUtil.isBurnFlagCorrect(burnFlag)) {
+            LogHelper.i("burnFlag field must be 0 or 1");
+            return;
+        }
+        if (barCycle < 0) {
+            LogHelper.i("barCycle field must be a positive int");
+            return;
+        }
+        
+        try {
+            myApi.forwardOne2ManyImageFile(thread_id, sms_id, VerificationUtil.formatNumbers(numbers),
+                    id, burnFlag, barCycle);
+        } catch (Exception ex) {
+            LogHelper.e(ex.getMessage(), ex);
+        }
+    }
+    
+    public void forwardOne2ManyVideoFile(long thread_id, long sms_id, List<String> numbers,
+            String id, int length, int burnFlag, int barCycle, boolean isRecord)
+            throws ServiceDisconnectedException {
+        VerificationUtil.ApiIsNull(myApi);
+        LogHelper
+                .i(String.format(
+                        Locale.getDefault(),
+                        "enter method forwardOne2ManyVideoFile. [thread_id,sms_id,numbers,id,length,burnFlag,barCycle,isRecord]=%d,%d,%s,%s,%d,%d,%d,%b",
+                        thread_id, sms_id, numbers.toString(), id, length, burnFlag,
+                        barCycle, isRecord));
+        
+        if(TextUtils.isEmpty(id)){
+            LogHelper.i("id field value error");
+            return;
+        }
+        
+        if (!VerificationUtil.isAllNumber(numbers)) {
+            LogHelper.i("number field value error");
+            return;
+        }
+        if (!VerificationUtil.isBurnFlagCorrect(burnFlag)) {
+            LogHelper.i("burnFlag field must be 0 or 1");
+            return;
+        }
+        if (barCycle < 0) {
+            LogHelper.i("barCycle field must be a positive int");
+            return;
+        }
+        try {
+            myApi.forwardOne2ManyVideoFile(thread_id, sms_id, VerificationUtil.formatNumbers(numbers),
+                    id, length, burnFlag, barCycle);
+        } catch (Exception ex) {
+            LogHelper.e(ex.getMessage(), ex);
+        }
+    }
+    
+    public void forwardGroupImageFile(long thread_id, String conversationId, long sms_id,
+            String id, String groupId) throws ServiceDisconnectedException {
+        VerificationUtil.ApiIsNull(myApi);
+        LogHelper
+                .i(String.format(
+                        Locale.getDefault(),
+                        "enter method forwardGroupImageFile. [thread_id,conversationId,sms_id,id,groupId]=%d,%s,%d,%s,%s",
+                        thread_id, conversationId, sms_id, id, groupId));
+        
+        if(TextUtils.isEmpty(id)){
+            LogHelper.i("id field value error");
+            return;
+        }
+
+        try {
+            myApi.forwardGroupImageFile(thread_id, conversationId, sms_id, id, groupId);
+        } catch (Exception ex) {
+            LogHelper.e(ex.getMessage(), ex);
+        }
+    }
+
+    public void forwardGroupVideoFile(long thread_id, String conversationId, long sms_id,
+            String id, int length, String groupId, boolean isRecord)
+            throws ServiceDisconnectedException {
+        VerificationUtil.ApiIsNull(myApi);
+        LogHelper
+                .i(String.format(
+                        Locale.getDefault(),
+                        "enter method forwardGroupVideoFile. [thread_id,conversationId,sms_id,id,length,groupId,isRecord]=%d,%s,%d,%s,%d,%s,%b",
+                        thread_id, conversationId, sms_id, id, length, groupId, isRecord));
+        
+        if(TextUtils.isEmpty(id)){
+            LogHelper.i("id field value error");
+            return;
+        }
+
+        try {
+            myApi.forwardGroupVideoFile(thread_id, conversationId, sms_id, id, length, groupId);
+        } catch (Exception ex) {
+            LogHelper.e(ex.getMessage(), ex);
+        }
+    }
 }
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/mcloud/McloudFileApi.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/mcloud/McloudFileApi.java
index e109c02..7b55d3f 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/mcloud/McloudFileApi.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/mcloud/McloudFileApi.java
@@ -74,12 +74,14 @@
         super.initServiceConnect(mConnection);
     }
 
-    public IMcloudOperationCtrl downloadFileFromUrl(String remoteUrl, String fileName, TransNode.TransOper transOper) throws ServiceDisconnectedException {
+    public IMcloudOperationCtrl downloadFileFromUrl(String remoteUrl, String fileName, TransNode.TransOper transOper, int chatMessageId) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
-                "enter method:downloadFileFromUrl. [remoteUrl,fileName,transOper]=%s,%d", remoteUrl, fileName, transOper.ordinal()));
+                "enter method:downloadFileFromUrl. [remoteUrl,fileName,transOper,chatMessageId]=%s,%s,%d,%d", remoteUrl, fileName, transOper.ordinal(), chatMessageId));
         try {
-            return myApi.downloadFileFromUrl(remoteUrl, fileName, transOper.ordinal());
+            IMcloudOperationCtrl operation = myApi.downloadFileFromUrl(remoteUrl, fileName, transOper.ordinal(), chatMessageId);
+            LogHelper.d("operation=" + operation);
+            return operation;
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
             return null;
@@ -105,7 +107,9 @@
                 localPath, remotePath, transOper.ordinal()));
         VerificationUtil.isCloudFile(localPath);
         try {
-            return myApi.putFile(localPath, remotePath, transOper.ordinal());
+            IMcloudOperationCtrl operation = myApi.putFile(localPath, remotePath, transOper.ordinal());
+            LogHelper.d("operation=" + operation);
+            return operation;
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
             return null;
@@ -184,4 +188,15 @@
             LogHelper.e(ex.getMessage(), ex);
         }
     }
+    
+    public String getLocalRootPath() throws ServiceDisconnectedException {
+        VerificationUtil.ApiIsNull(myApi);
+        LogHelper.i("enter method:getLocalRootPath");
+        try {
+            return myApi.getLocalRootPath();
+        } catch (Exception ex) {
+            LogHelper.e(ex.getMessage(), ex);
+            return "";
+        }
+    }
 }
