diff --git a/rcs_service_aidl/Android.mk b/rcs_service_aidl/Android.mk
index 62fff5b..618d15d 100644
--- a/rcs_service_aidl/Android.mk
+++ b/rcs_service_aidl/Android.mk
@@ -7,47 +7,47 @@
 # Important: Must not contain any aidl files for parcelables
 LOCAL_SRC_FILES := \
     $(call all-java-files-under, src) \
-    src/com/suntek/mway/rcs/client/api/autoconfig/IAutoConfigApi.aidl \
-    src/com/suntek/mway/rcs/client/api/blacklist/IBlackListApi.aidl \
-    src/com/suntek/mway/rcs/client/api/capability/ICapabilityApi.aidl \
-    src/com/suntek/mway/rcs/client/api/capability/IRcsCapabilityApi.aidl \
-    src/com/suntek/mway/rcs/client/api/emoticon/IEmoticonApi.aidl \
-    src/com/suntek/mway/rcs/client/api/im/IGroupManagerApi.aidl \
-    src/com/suntek/mway/rcs/client/api/im/IInstantMessageApi.aidl \
-    src/com/suntek/mway/rcs/client/api/im/IPaMessageApi.aidl \
-    src/com/suntek/mway/rcs/client/api/IRCSServiceListener.aidl \
-    src/com/suntek/mway/rcs/client/api/login/ILoginApi.aidl \
-    src/com/suntek/mway/rcs/client/api/login/ILoginEventListener.aidl \
-    src/com/suntek/mway/rcs/client/api/mcloud/IMcloudFileApi.aidl \
-    src/com/suntek/mway/rcs/client/api/mcontact/IMcontactApi.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/ICapabiltyListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IConferenceCallback.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IEmoticonCallbackApi.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IEmoticonCanSendCallback.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IEmoticonPackagesNetCallbackApi.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IEmoticonSetSuccessDownListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudAuthListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudConfListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudFileListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudMsgListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudOperationCtrl.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudSdkListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudShareListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudTransListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IMContactSyncListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IProfileGetCallback.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IProfileListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IProfilePutCallback.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IPublicAccountCallbackAPI.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/IMcloudFileApi.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/IProfileApi.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/IPublicAccountAPI.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/IRichScreenApi.aidl \
-    src/com/suntek/mway/rcs/client/api/plugincenter/IPluginCenterApi.aidl \
-    src/com/suntek/mway/rcs/client/api/registration/IRegistrationApi.aidl \
-    src/com/suntek/mway/rcs/client/api/setting/callback/IAccountEventListener.aidl \
-    src/com/suntek/mway/rcs/client/api/setting/IRcsSettingApi.aidl \
-    src/com/suntek/mway/rcs/client/api/specialnumber/ISpecialServiceNumApi.aidl
+    src/com/suntek/mway/rcs/client/aidl/autoconfig/IAutoConfigApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/blacklist/IBlackListApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/capability/ICapabilityApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/capability/IRcsCapabilityApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/emoticon/IEmoticonApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/im/IGroupManagerApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/im/IInstantMessageApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/im/IPaMessageApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/IRCSServiceListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/login/ILoginApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/login/ILoginEventListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/mcloud/IMcloudFileApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/mcontact/IMcontactApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/ICapabiltyListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IConferenceCallback.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IEmoticonCallbackApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IEmoticonCanSendCallback.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IEmoticonPackagesNetCallbackApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IEmoticonSetSuccessDownListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudAuthListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudConfListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudFileListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudMsgListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudOperationCtrl.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudSdkListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudShareListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudTransListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMContactSyncListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IProfileGetCallback.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IProfileListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IProfilePutCallback.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IPublicAccountCallbackAPI.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/IMcloudFileApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/IProfileApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/IPublicAccountAPI.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/IRichScreenApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugincenter/IPluginCenterApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/registration/IRegistrationApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/setting/callback/IAccountEventListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/setting/IRcsSettingApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/specialnumber/ISpecialServiceNumApi.aidl
 
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE := rcs_service_aidl
@@ -61,47 +61,47 @@
 # Important: Must not contain any aidl files for parcelables
 LOCAL_SRC_FILES := \
     $(call all-java-files-under, src) \
-    src/com/suntek/mway/rcs/client/api/autoconfig/IAutoConfigApi.aidl \
-    src/com/suntek/mway/rcs/client/api/blacklist/IBlackListApi.aidl \
-    src/com/suntek/mway/rcs/client/api/capability/ICapabilityApi.aidl \
-    src/com/suntek/mway/rcs/client/api/capability/IRcsCapabilityApi.aidl \
-    src/com/suntek/mway/rcs/client/api/emoticon/IEmoticonApi.aidl \
-    src/com/suntek/mway/rcs/client/api/im/IGroupManagerApi.aidl \
-    src/com/suntek/mway/rcs/client/api/im/IInstantMessageApi.aidl \
-    src/com/suntek/mway/rcs/client/api/im/IPaMessageApi.aidl \
-    src/com/suntek/mway/rcs/client/api/IRCSServiceListener.aidl \
-    src/com/suntek/mway/rcs/client/api/login/ILoginApi.aidl \
-    src/com/suntek/mway/rcs/client/api/login/ILoginEventListener.aidl \
-    src/com/suntek/mway/rcs/client/api/mcloud/IMcloudFileApi.aidl \
-    src/com/suntek/mway/rcs/client/api/mcontact/IMcontactApi.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/ICapabiltyListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IConferenceCallback.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IEmoticonCallbackApi.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IEmoticonCanSendCallback.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IEmoticonPackagesNetCallbackApi.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IEmoticonSetSuccessDownListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudAuthListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudConfListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudFileListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudMsgListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudOperationCtrl.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudSdkListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudShareListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudTransListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IMContactSyncListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IProfileGetCallback.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IProfileListener.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IProfilePutCallback.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/callback/IPublicAccountCallbackAPI.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/IMcloudFileApi.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/IProfileApi.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/IPublicAccountAPI.aidl \
-    src/com/suntek/mway/rcs/client/api/plugin/IRichScreenApi.aidl \
-    src/com/suntek/mway/rcs/client/api/plugincenter/IPluginCenterApi.aidl \
-    src/com/suntek/mway/rcs/client/api/registration/IRegistrationApi.aidl \
-    src/com/suntek/mway/rcs/client/api/setting/callback/IAccountEventListener.aidl \
-    src/com/suntek/mway/rcs/client/api/setting/IRcsSettingApi.aidl \
-    src/com/suntek/mway/rcs/client/api/specialnumber/ISpecialServiceNumApi.aidl
+    src/com/suntek/mway/rcs/client/aidl/autoconfig/IAutoConfigApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/blacklist/IBlackListApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/capability/ICapabilityApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/capability/IRcsCapabilityApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/emoticon/IEmoticonApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/im/IGroupManagerApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/im/IInstantMessageApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/im/IPaMessageApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/IRCSServiceListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/login/ILoginApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/login/ILoginEventListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/mcloud/IMcloudFileApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/mcontact/IMcontactApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/ICapabiltyListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IConferenceCallback.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IEmoticonCallbackApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IEmoticonCanSendCallback.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IEmoticonPackagesNetCallbackApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IEmoticonSetSuccessDownListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudAuthListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudConfListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudFileListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudMsgListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudOperationCtrl.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudSdkListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudShareListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudTransListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMContactSyncListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IProfileGetCallback.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IProfileListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IProfilePutCallback.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/callback/IPublicAccountCallbackAPI.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/IMcloudFileApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/IProfileApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/IPublicAccountAPI.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugin/IRichScreenApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/plugincenter/IPluginCenterApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/registration/IRegistrationApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/setting/callback/IAccountEventListener.aidl \
+    src/com/suntek/mway/rcs/client/aidl/setting/IRcsSettingApi.aidl \
+    src/com/suntek/mway/rcs/client/aidl/specialnumber/ISpecialServiceNumApi.aidl
 
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE := rcs_service_aidl_static
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/ClientInterface.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/ClientInterface.java
similarity index 97%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/ClientInterface.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/ClientInterface.java
index 387c1de..dc1139f 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/ClientInterface.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/ClientInterface.java
@@ -20,13 +20,12 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api;
+package com.suntek.mway.rcs.client.aidl;
 
 import java.util.List;
 import java.util.Vector;
 
-import com.suntek.mway.rcs.client.api.constant.APIConstant;
+import com.suntek.mway.rcs.client.aidl.constant.APIConstant;
 
 import android.app.ActivityManager;
 import android.content.ComponentName;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/ClientInterfaceException.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/ClientInterfaceException.java
similarity index 97%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/ClientInterfaceException.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/ClientInterfaceException.java
index c8c213b..04a061b 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/ClientInterfaceException.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/ClientInterfaceException.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api;
+package com.suntek.mway.rcs.client.aidl;
 
 /**
  * <p>Title: ClientInterfaceException base class</p>
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/ClientInterfaceIntents.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/ClientInterfaceIntents.java
similarity index 89%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/ClientInterfaceIntents.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/ClientInterfaceIntents.java
index a0f2bb3..b262fe4 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/ClientInterfaceIntents.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/ClientInterfaceIntents.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api;
+package com.suntek.mway.rcs.client.aidl;
 
 /**
  * <p>Title: ClientInterfaceIntents interface</p>
@@ -129,7 +128,7 @@
      *     <th>extra variable name</th><th>type</th><th>description</th>
      * </tr>
      * <tr>
-     *     <td>status</td><td>int</td><td>{@link com.suntek.mway.rcs.client.api.provider.SuntekMessageData#MSG_STATE_SEND_OK}<br/>{@link com.suntek.mway.rcs.client.api.provider.SuntekMessageData#MSG_STATE_SEND_REC}<br/>{@link com.suntek.mway.rcs.client.api.provider.SuntekMessageData#MSG_STATE_SENDED}<br/>{@link com.suntek.mway.rcs.client.api.provider.SuntekMessageData#MSG_STATE_SEND_ING}<br/>{@link com.suntek.mway.rcs.client.api.provider.SuntekMessageData#MSG_STATE_SEND_FAIL}</td>
+     *     <td>status</td><td>int</td><td>{@link com.suntek.mway.rcs.client.aidl.provider.SuntekMessageData#MSG_STATE_SEND_OK}<br/>{@link com.suntek.mway.rcs.client.aidl.provider.SuntekMessageData#MSG_STATE_SEND_REC}<br/>{@link com.suntek.mway.rcs.client.aidl.provider.SuntekMessageData#MSG_STATE_SENDED}<br/>{@link com.suntek.mway.rcs.client.aidl.provider.SuntekMessageData#MSG_STATE_SEND_ING}<br/>{@link com.suntek.mway.rcs.client.aidl.provider.SuntekMessageData#MSG_STATE_SEND_FAIL}</td>
      * </tr>
      * <tr>
      *     <td>messageId</td><td>String</td><td>message id</td>
@@ -148,7 +147,7 @@
      *     <th>extra variable name</th><th>type</th><th>description</th>
      * </tr>
      * <tr>
-     *     <td>msgType</td><td>int</td><td>{@link com.suntek.mway.rcs.client.api.provider.SuntekMessageData#MSG_TYPE_TEXT}<br/>{@link com.suntek.mway.rcs.client.api.provider.SuntekMessageData#MSG_TYPE_FILE}<br/>{@link com.suntek.mway.rcs.client.api.provider.SuntekMessageData#MSG_TYPE_LOCATION}<br/>{@link com.suntek.mway.rcs.client.api.provider.SuntekMessageData#MSG_TYPE_CONTACT}<br/>{@link com.suntek.mway.rcs.client.api.provider.SuntekMessageData#MSG_TYPE_GROUP_INFO}</td>
+     *     <td>msgType</td><td>int</td><td>{@link com.suntek.mway.rcs.client.aidl.provider.SuntekMessageData#MSG_TYPE_TEXT}<br/>{@link com.suntek.mway.rcs.client.aidl.provider.SuntekMessageData#MSG_TYPE_FILE}<br/>{@link com.suntek.mway.rcs.client.aidl.provider.SuntekMessageData#MSG_TYPE_LOCATION}<br/>{@link com.suntek.mway.rcs.client.aidl.provider.SuntekMessageData#MSG_TYPE_CONTACT}<br/>{@link com.suntek.mway.rcs.client.aidl.provider.SuntekMessageData#MSG_TYPE_GROUP_INFO}</td>
      * </tr>
      * <tr>
      *     <td>contact</td><td>String</td><td>phone number</td>
@@ -283,7 +282,7 @@
      *     <td>sessionId</td><td>long</td><td>session id of group chat</td>
      * </tr>
      * <tr>
-     *     <td>msgType</td><td>int</td><td>{@link com.suntek.mway.rcs.client.api.provider.SuntekMessageData#MSG_TYPE_TEXT}<br/>{@link com.suntek.mway.rcs.client.api.provider.SuntekMessageData#MSG_TYPE_FILE}<br/>{@link com.suntek.mway.rcs.client.api.provider.SuntekMessageData#MSG_TYPE_LOCATION}<br/>{@link com.suntek.mway.rcs.client.api.provider.SuntekMessageData#MSG_TYPE_CONTACT}<br/>{@link com.suntek.mway.rcs.client.api.provider.SuntekMessageData#MSG_TYPE_GROUP_INFO}</td>
+     *     <td>msgType</td><td>int</td><td>{@link com.suntek.mway.rcs.client.aidl.provider.SuntekMessageData#MSG_TYPE_TEXT}<br/>{@link com.suntek.mway.rcs.client.aidl.provider.SuntekMessageData#MSG_TYPE_FILE}<br/>{@link com.suntek.mway.rcs.client.aidl.provider.SuntekMessageData#MSG_TYPE_LOCATION}<br/>{@link com.suntek.mway.rcs.client.aidl.provider.SuntekMessageData#MSG_TYPE_CONTACT}<br/>{@link com.suntek.mway.rcs.client.aidl.provider.SuntekMessageData#MSG_TYPE_GROUP_INFO}</td>
      * </tr>
      * <tr>
      *     <td>contact</td><td>String</td><td>phone number</td>
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/ClientInterfaceListener.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/ClientInterfaceListener.java
similarity index 97%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/ClientInterfaceListener.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/ClientInterfaceListener.java
index 23e76bf..ba00d52 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/ClientInterfaceListener.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/ClientInterfaceListener.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api;
+package com.suntek.mway.rcs.client.aidl;
 
 /**
  * <p>Title: ClientInterfaceListener interface</p>
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/ClientInterfaceNotify.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/ClientInterfaceNotify.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/ClientInterfaceNotify.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/ClientInterfaceNotify.java
index e477b2e..c608222 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/ClientInterfaceNotify.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/ClientInterfaceNotify.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api;
+package com.suntek.mway.rcs.client.aidl;
 
 /**
  * <p>Title: ClientInterfaceNotify class</p>
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/CoreServiceNotAvailableException.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/CoreServiceNotAvailableException.java
similarity index 97%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/CoreServiceNotAvailableException.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/CoreServiceNotAvailableException.java
index d700afc..d8bbbfe 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/CoreServiceNotAvailableException.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/CoreServiceNotAvailableException.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api;
+package com.suntek.mway.rcs.client.aidl;
 
 /**
  * <p>Title: CoreServiceNotAvailableException base class</p>
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/IRCSServiceListener.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/IRCSServiceListener.aidl
similarity index 95%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/IRCSServiceListener.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/IRCSServiceListener.aidl
index b104d54..5bd322f 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/IRCSServiceListener.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/IRCSServiceListener.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api;
+package com.suntek.mway.rcs.client.aidl;
 
 interface IRCSServiceListener
 {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/RCSApplication.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/RCSApplication.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/RCSApplication.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/RCSApplication.java
index 582150b..7cde74f 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/RCSApplication.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/RCSApplication.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api;
+package com.suntek.mway.rcs.client.aidl;
 
 import android.app.Application;
 import android.content.Context;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/ServiceInterface.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/ServiceInterface.java
similarity index 97%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/ServiceInterface.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/ServiceInterface.java
index 04c5e0d..9bb6560 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/ServiceInterface.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/ServiceInterface.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api;
+package com.suntek.mway.rcs.client.aidl;
 
 import android.content.Context;
 import android.content.Intent;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/ServiceUnknownException.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/ServiceUnknownException.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/ServiceUnknownException.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/ServiceUnknownException.java
index 2a3f46d..04e90b7 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/ServiceUnknownException.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/ServiceUnknownException.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api;
+package com.suntek.mway.rcs.client.aidl;
 
 import android.os.RemoteException;
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/autoconfig/IAutoConfigApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/autoconfig/IAutoConfigApi.aidl
similarity index 95%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/autoconfig/IAutoConfigApi.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/autoconfig/IAutoConfigApi.aidl
index 9c4f756..d16b727 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/autoconfig/IAutoConfigApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/autoconfig/IAutoConfigApi.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.autoconfig;
+package com.suntek.mway.rcs.client.aidl.autoconfig;
 
 /**
  * AutoConfig API
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/blacklist/IBlackListApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/blacklist/IBlackListApi.aidl
similarity index 92%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/blacklist/IBlackListApi.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/blacklist/IBlackListApi.aidl
index 26d57eb..ae1c648 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/blacklist/IBlackListApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/blacklist/IBlackListApi.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,12 +20,12 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.blacklist;
+package com.suntek.mway.rcs.client.aidl.blacklist;
 
 interface IBlackListApi
 {
     boolean add(String number);
+    boolean addEx(String number, String name);
     boolean remove(String number);
     void clear();
     boolean checkIsBlack(String number);
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/capability/ICapabilityApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/capability/ICapabilityApi.aidl
similarity index 90%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/capability/ICapabilityApi.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/capability/ICapabilityApi.aidl
index 2a2ea0b..3ad43c6 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/capability/ICapabilityApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/capability/ICapabilityApi.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,10 +20,9 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.capability;
+package com.suntek.mway.rcs.client.aidl.capability;
 
-import com.suntek.mway.rcs.client.api.plugin.callback.ICapabiltyListener;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.ICapabiltyListener;
 
 interface ICapabilityApi
 {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/capability/IRcsCapabilityApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/capability/IRcsCapabilityApi.aidl
similarity index 91%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/capability/IRcsCapabilityApi.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/capability/IRcsCapabilityApi.aidl
index 084828a..4e8a79d 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/capability/IRcsCapabilityApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/capability/IRcsCapabilityApi.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,10 +20,9 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.capability;
+package com.suntek.mway.rcs.client.aidl.capability;
 
-import com.suntek.mway.rcs.client.api.capability.RCSCapabilities;
+import com.suntek.mway.rcs.client.aidl.capability.RCSCapabilities;
 
 /**
  * Rcs Capability API
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/capability/RCSCapabilities.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/capability/RCSCapabilities.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/capability/RCSCapabilities.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/capability/RCSCapabilities.aidl
index cdded0a..b06adce 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/capability/RCSCapabilities.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/capability/RCSCapabilities.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.capability;
+package com.suntek.mway.rcs.client.aidl.capability;
 
 parcelable RCSCapabilities;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/capability/RCSCapabilities.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/capability/RCSCapabilities.java
similarity index 99%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/capability/RCSCapabilities.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/capability/RCSCapabilities.java
index 515afc9..a28ad90 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/capability/RCSCapabilities.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/capability/RCSCapabilities.java
@@ -20,13 +20,12 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.capability;
+package com.suntek.mway.rcs.client.aidl.capability;
 
 import java.io.Serializable;
 import java.util.ArrayList;
 
-import com.suntek.mway.rcs.client.api.constant.APIConstant;
+import com.suntek.mway.rcs.client.aidl.constant.APIConstant;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/constant/APIConstant.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/constant/APIConstant.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/constant/APIConstant.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/constant/APIConstant.java
index 8e16757..449cdc6 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/constant/APIConstant.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/constant/APIConstant.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.constant;
+package com.suntek.mway.rcs.client.aidl.constant;
 
 /**
  * <p>Title: APIConstant class</p>
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/constant/BroadcastConstants.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/constant/BroadcastConstants.java
similarity index 80%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/constant/BroadcastConstants.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/constant/BroadcastConstants.java
index 519e1b9..f87b752 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/constant/BroadcastConstants.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/constant/BroadcastConstants.java
@@ -20,14 +20,14 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
-package com.suntek.mway.rcs.client.api.constant;
+package com.suntek.mway.rcs.client.aidl.constant;
 
 /**
  * The Class BroadcastContstants.
  */
 public class BroadcastConstants {
 
-    /** Text send by system SMS broadcast action */
+    /**  Text send by system SMS broadcast action. */
     public static final String SYSTEM_SMS_SEND_TEXT = "com.suntek.mway.rcs.ACTION_SYSTEM_SMS_SEND";
 
     /** SYSTEM_SMS_SEND_TEXT broadcast passed parameter name text String. */
@@ -48,30 +48,26 @@
     /** Notify UI to show group message notification. */
     public static final String UI_SHOW_GROUP_MESSAGE_NOTIFY = "com.suntek.mway.rcs.ACTION_UI_SHOW_GROUP_MESSAGE_NOTIFY";
 
-    /**
-     * Notify UI that changed group information
-     */
+    /** Notify UI that changed group information. */
     public static final String UI_GROUP_MANAGE_NOTIFY = "com.suntek.mway.rcs.ACTION_UI_GROUP_MANAGE_NOTIFY";
 
-    /**
-     * Notify UI that group operation failed
-     */
+    /** Notify UI that group operation failed. */
     public static final String UI_GROUP_ERROR = "com.suntek.mway.rcs.ACTION_UI_GROUP_ERROR";
 
-    /**
-     * Notify UI that group state is invalid
-     * contains parameter groupId, state
-     */
+    /** Notify UI that group state is invalid contains parameter groupId, state. */
     public static final String UI_GROUP_STATE_ERROR = "com.suntek.mway.rcs.ACTION_UI_GROUP_STATE_ERROR";
 
-    /** Notify UI that message status has changed */
+    /**  Notify UI that message status has changed. */
     public static final String UI_MESSAGE_STATUS_CHANGE_NOTIFY = "com.suntek.mway.rcs.ACTION_UI_MESSAGE_STATUS_CHANGE_NOTIFY";
 
-    /** Notify UI that message has added to database */
+    /**  Notify UI that message has added to database. */
     public static final String UI_MESSAGE_ADD_DATABASE = "com.suntek.mway.rcs.ACTION_UI_MESSAGE_ADD_TO_DATABASE";
 
-    /** Notify Native UI that message has been transfered to SMS */
+    /**  Notify Native UI that message has been transfered to SMS. */
     public static final String UI_MESSAGE_TRANSFER_SMS = "com.suntek.mway.rcs.ACTION_UI_MESSAGE_TRANSFER_SMS";
+    
+    /**  Notify Native UI that download paid emoction result. */
+    public static final String UI_MESSAGE_PAID_EMO_DOWNLOAD_RESULT = "com.suntek.mway.rcs.ACTION_UI_MESSAGE_PAID_EMO_DOWNLOAD_RESULTS";
 
     /** UI_MESSAGE_ADD_DATABASE broadcast passed parameter name chatMessage long. */
     public static final String BC_VAR_CHAT_MESSAGE = "chatMessage";
@@ -121,67 +117,43 @@
 
     public static final String BC_VAR_MSG_ACTION_TYPE = "actionType";
 
-    /***
-     * Group created
-     */
+    /** * Group created. */
     public static final String ACTION_TYPE_CREATE = "create";
 
-    /**
-     * Group create but not active
-     */
+    /** Group create but not active. */
     public static final String ACTION_TYPE_CREATE_NOT_ACTIVE = "create_not_active";
 
-    /***
-     * New member to join the group
-     */
+    /** * New member to join the group. */
     public static final String ACTION_TYPE_CONNECTED = "connected";
-    /**
-     * Group member quit
-     */
+    
+    /** Group member quit. */
     public static final String ACTION_TYPE_DEPARTED = "departed";
-    /**
-     * Member has been kicked out of the group
-     */
+    
+    /** Member has been kicked out of the group. */
     public static final String ACTION_TYPE_BOOTED = "booted";
 
-    /**
-     * Group has disband
-     */
+    /** Group has disband. */
     public static final String ACTION_TYPE_DELETED = "deleted";
 
-    /**
-     * Update the subject of group
-     */
+    /** Update the subject of group. */
     public static final String ACTION_TYPE_UPDATE_SUBJECT = "updateSubject";
 
-    /**
-     * Update the remark of group
-     */
+    /** Update the remark of group. */
     public static final String ACTION_TYPE_UPDATE_REMARK = "updateRemark";
 
-    /**
-     * Update the alias of group member
-     */
+    /** Update the alias of group member. */
     public static final String ACTION_TYPE_UPDATE_ALIAS = "updateAlias";
 
-    /**
-     * Update the alias of group member
-     */
+    /** Update the alias of group member. */
     public static final String ACTION_TYPE_UPDATE_CHAIRMAN = "updateChairman";
 
-    /**
-     * Update the max count of group
-     */
+    /** Update the max count of group. */
     public static final String ACTION_TYPE_UPDATE_MAXCOUNT = "updateMaxCount";
 
-    /**
-     * Over the max count of group
-     */
+    /** Over the max count of group. */
     public static final String ACTION_TYPE_OVER_MAXCOUNT = "overMaxCount";
 
-    /**
-     * Update the policy of group
-     */
+    /** Update the policy of group. */
     public static final String ACTION_TYPE_POLICY_UPDATE = "updatePolicy";
 
     /** UI_SHOW_MESSAGE_NOTIFY broadcast passed parameter name phoneNumber String. */
@@ -265,10 +237,10 @@
     /** UI_INVITE_TO_JOIN_GROUP broadcast passed parameter name alias String. */
     public static final String BC_VAR_ALIAS = "alias";
 
-    /** Error code of group operation */
+    /**  Error code of group operation. */
     public static final String BC_VAR_ERROR_CODE = "errorCode";
 
-    /** Description of code */
+    /**  Description of code. */
     public static final String BC_VAR_ERROR_DESC = "errorDesc";
 
     /**
@@ -276,11 +248,12 @@
      */
     public static final String BC_VAR_MAXCOUNT = "maxCount";
 
-    /**
-     * Group chat element change
-     */
+    /** Group chat element change. */
     public static final String UI_GROUP_CHAT_SUBJECT_CHANGE = "ui_groupchat_subject_change";
 
+    /**  Description of code. */
+    public static final String BC_VAR_RESULT = "result";
+
     /** ************************************** send message error begin ******************************************************. */
 
     /**
@@ -288,24 +261,16 @@
      */
     public static final String UI_SHOW_MESSAGE_SEND_ERROR = "com.suntek.mway.rcs.ACTION_UI_SHOW_MESSAGE_SEND_ERROR";
 
-    /**
-     * Sip not registered
-     */
+    /** Sip not registered. */
     public static final String BC_VAR_SEND_ERROR_NOT_REG = "sip_not_register";
 
-    /**
-     * Group not exist
-     */
+    /** Group not exist. */
     public static final String BC_VAR_SEND_ERROR_GROUP_NOT_EXIST = "group_not_exist";
 
-    /**
-     * Create group not complete
-     */
+    /** Create group not complete. */
     public static final String BC_VAR_SEND_ERROR_GROUP_NOT_COMPLETED = "group_not_completed";
 
-    /**
-     * Group has deleted
-     */
+    /** Group has deleted. */
     public static final String BC_VAR_SEND_ERROR_GROUP_HAS_DELETED = "group_has_deleted";
 
     /** ************************************** send message error end ******************************************************. */
@@ -321,15 +286,25 @@
      */
     public static final String BC_VAR_REFER_TYPE = "referType";
 
-    /**
-     * Send group refer type define
-     */
+    /** Send group refer type define. */
     public static final String REFER_TYPE_INVITE = "invite";
+    
+    /** The Constant REFER_TYPE_SUBJECT. */
     public static final String REFER_TYPE_SUBJECT = "updateSubject";
+    
+    /** The Constant REFER_TYPE_ALIAS. */
     public static final String REFER_TYPE_ALIAS = "setAlias";
+    
+    /** The Constant REFER_TYPE_TRANSFER_CHAIRMAN. */
     public static final String REFER_TYPE_TRANSFER_CHAIRMAN = "transferChairman";
+    
+    /** The Constant REFER_TYPE_KICKOUT. */
     public static final String REFER_TYPE_KICKOUT = "kickout";
+    
+    /** The Constant REFER_TYPE_QUIT. */
     public static final String REFER_TYPE_QUIT = "quit";
+    
+    /** The Constant REFER_TYPE_DISBAND. */
     public static final String REFER_TYPE_DISBAND= "disband";
 
     /** ************************************** send group refer error end ******************************************************. */
@@ -392,10 +367,7 @@
      */
     public static final String UI_SHOW_GROUP_TRANSFER_CHAIRMAN_CONFIRM = "com.suntek.mway.rcs.ACTION_UI_SHOW_GROUP_TRANSFER_CHAIRMAN_CONFIRM";
 
-    /**
-     * The broadcast of group chairman transfer confirm
-     * parameter contains chaturi, subject, contributionId, conversationId
-     */
+    /** The broadcast of group chairman transfer confirm parameter contains chaturi, subject, contributionId, conversationId. */
     public static final String UI_SHOW_GROUP_TRANSFER_CHAIRMAN_TIMEOUT = "com.suntek.mway.rcs.ACTION_UI_SHOW_GROUP_TRANSFER_CHAIRMAN_TIMEOUT";
 
     /** ************************************** send group transfer chairman confirm broadcast end ******************************************************. */
@@ -428,6 +400,11 @@
      * UI_DOWNLOADING_FILE_CHANGE broadcast passed parameter name current long.
      */
     public static final String BC_VAR_CURRENT_LEN = "current";
+    
+    /**
+     * UI_DOWNLOADING_FILE_CHANGE broadcast passed parameter name transferId String.
+     */
+    public static final String BC_VAR_TRANSFER_ID = "transferId";
 
 
     /** ************************************** download file end ******************************************************. */
@@ -539,6 +516,9 @@
 
     /** Mcloud broadcast passed parameter name remoteNodeList list<FileNode>. */
     public static final String BC_VAR_MC_REMOTE_NODE_LIST = "remoteNodeList";
+    
+    /** . */
+    public static final String BC_VAR_MC_EXCLUDE_SUFFIX = "excludeSuffix";
 
     /** The mcloud event type STARTED. */
     public static final String BC_V_MC_EVENTTYPE_STARTED = "started";
@@ -554,55 +534,157 @@
 
     /** The mcloud event type FILE_TOO_LARGE. */
     public static final String BC_V_MC_EVENTTYPE_FILE_TOO_LARGE = "fileToLarge";
+    
+    /** The mcloud event type SUFFIX_NOT_ALLOWED. */
+    public static final String BC_V_MC_EVENTTYPE_SUFFIX_NOT_ALLOWED = "suffixNotAllowed";
 
     /** The mcloud event type OTHER. */
     public static final String BC_V_MC_EVENTTYPE_OTHER = "other";
-
-    /** The broadcast for plug-in service unavailable */
-    public static final String PLUGIN_SERVICE_UNAVAILABLE = "com.suntek.mway.rcs.action.PLUGIN_SERVICE_UNAVAILABLE";
-
-    /** The broadcast for plug-in apk uninstalled */
-    public static final String PLUGIN_APK_UNINSTALLED = "com.suntek.mway.rcs.action.PLUGIN_APK_UNINSTALLED";
-
+    
     /** ************************************** IMAP ******************************************************. */
     public static final String BACKUP_ALL_MESSAGE = "com.suntek.mway.rcs.BACKUP_ALL_MESSAGE";
 
+    /** The Constant RESTORE_ALL_MESSAGE. */
     public static final String RESTORE_ALL_MESSAGE = "com.suntek.mway.rcs.RESTORE_ALL_MESSAGE";
 
+    /** The Constant RESTORE_ALL_MESSAGE_RESULT. */
     public static final String RESTORE_ALL_MESSAGE_RESULT = "com.suntek.mway.rcs.RESTORE_ALL_MESSAGE_RESULT";
 
+    /** The Constant BACKUP_STATUS_EXCEPTION. */
     public static final int BACKUP_STATUS_EXCEPTION = -1;
+    
+    /** The Constant BACKUP_STATUS_START. */
     public static final int BACKUP_STATUS_START = 0;
+    
+    /** The Constant BACKUP_STATUS_WORKING. */
     public static final int BACKUP_STATUS_WORKING = 1;
+    
+    /** The Constant BACKUP_STATUS_FINISH. */
     public static final int BACKUP_STATUS_FINISH = 2;
 
+    /** The Constant RESTORE_STATUS_EXCEPTION. */
     public static final int RESTORE_STATUS_EXCEPTION = -1;
+    
+    /** The Constant RESTORE_STATUS_START. */
     public static final int RESTORE_STATUS_START = 0;
+    
+    /** The Constant RESTORE_STATUS_WORKING. */
     public static final int RESTORE_STATUS_WORKING = 1;
+    
+    /** The Constant RESTORE_STATUS_FINISH. */
     public static final int RESTORE_STATUS_FINISH = 2;
 
+    /** The Constant ACTION_DMS_OPEN_BUSS. */
     public static final String ACTION_DMS_OPEN_BUSS = "com.suntek.mway.rcs.ACTION_DMS_OPEN_BUSS";
+    
+    /** The Constant ACTION_DMS_OPEN_BUSS_RESULT. */
     public static final String ACTION_DMS_OPEN_BUSS_RESULT = "com.suntek.mway.rcs.ACTION_DMS_OPEN_BUSS_RESULT";
+
+    /** The Constant ACTION_FETCH_CONFIG_FINISH. */
+    public static final String ACTION_FETCH_CONFIG_FINISH = "com.suntek.mway.rcs.ACTION_FETCH_CONFIG_FINISH";
+
+    /** The Constant OPER_RESULTCODE. */
     public static final String OPER_RESULTCODE = "resultCode";
+    
+    /** The Constant OPER_RESULTDESC. */
     public static final String OPER_RESULTDESC = "resultDesc";
+    
+    /** The Constant DMS_OPEN_BUSS_IMSI. */
     public static final String DMS_OPEN_BUSS_IMSI = "imsi";
+    
+    /** The Constant DMS_OPEN_BUSS_MSISDN. */
     public static final String DMS_OPEN_BUSS_MSISDN = "number";
+    
+    /** The Constant DMS_TIPS_TITLE. */
     public static final String DMS_TIPS_TITLE = "title";
+    
+    /** The Constant DMS_TIPS_MESSAGE. */
     public static final String DMS_TIPS_MESSAGE = "message";
+    
+    /** The Constant DMS_TIPS_ACCEPT_BTN. */
     public static final String DMS_TIPS_ACCEPT_BTN = "Accept_btn";
+    
+    /** The Constant DMS_TIPS_REJECT_BTN. */
     public static final String DMS_TIPS_REJECT_BTN = "Reject_btn";
 
+    /** The Constant DMS_USER_STATUS. */
     public static final String DMS_USER_STATUS = "status";
 
+    /** The Constant DMS_OPEN_BUSS_RESULTCODE_SUCCESS. */
     public static final int DMS_OPEN_BUSS_RESULTCODE_SUCCESS = 0;
+    
+    /** The Constant DMS_OPEN_BUSS_RESULTCODE_FAILED. */
     public static final int DMS_OPEN_BUSS_RESULTCODE_FAILED = -1;
+    
+    /** The Constant ACTION_DMS_NEW_CONFIG. */
     public static final String ACTION_DMS_NEW_CONFIG = "com.suntek.mway.rcs.ACTION_DMS_NEW_CONFIG";
+    
+    /** The Constant ACTION_DMS_UPDATE_CONFIG. */
     public static final String ACTION_DMS_UPDATE_CONFIG = "com.suntek.mway.rcs.ACTION_DMS_UPDATE_CONFIG";
+    
+    /** The Constant ACTION_SHOW_DIALOG_INFO. */
     public static final String ACTION_SHOW_DIALOG_INFO = "com.suntek.mway.rcs.ACTION_SHOW_DIALOG_INFO";
+    
+    /** The Constant ACTION_OPEN_PS. */
     public static final String ACTION_OPEN_PS = "com.suntek.mway.rcs.ACTION_OPEN_PS";
+    
+    /** The Constant ACTION_CLOSE_WIFI_AND_OPEN_PS. */
     public static final String ACTION_CLOSE_WIFI_AND_OPEN_PS = "com.suntek.mway.rcs.ACTION_CLOSE_WIFI_AND_OPEN_PS";
+    
+    /** The Constant ACTION_DMS_USER_STATUS_CHANGED. */
     public static final String ACTION_DMS_USER_STATUS_CHANGED = "com.suntek.mway.rcs.ACTION_DMS_USER_STATUS_CHANGED";
+    
+    /** The Constant ACTION_CONFIRM_USE_NEW_IMSI. */
     public static final String ACTION_CONFIRM_USE_NEW_IMSI = "com.suntek.mway.rcs.ACTION_CONFIRM_USE_NEW_IMSI";
+    
+    /** The Constant ACTION_INPUT_SMS_VERIFY_CODE. */
     public static final String ACTION_INPUT_SMS_VERIFY_CODE = "com.suntek.mway.rcs.ACTION_INPUT_SMS_VERIFY_CODE";
+    
+    /** ************************************** PLUGIN ******************************************************. */
+    /** The broadcast for plug-in service unavailable */
+    public static final String PLUGIN_SERVICE_UNAVAILABLE = "com.suntek.mway.rcs.action.PLUGIN_SERVICE_UNAVAILABLE";
+    
+    /**  The broadcast for plug-in apk installed. */
+    public static final String PLUGIN_APK_INSTALLED = "com.suntek.mway.rcs.action.PLUGIN_APK_INSTALLED";
 
+    /**  The broadcast for plug-in apk uninstalled. */
+    public static final String PLUGIN_APK_UNINSTALLED = "com.suntek.mway.rcs.action.PLUGIN_APK_UNINSTALLED";
+    
+    /** The Constant PLUGIN_SERVICE_UNBIND. */
+    public static final String PLUGIN_SERVICE_UNBIND = "com.suntek.mway.rcs.action.PLUGIN_SERVICE_UNBIND";
+
+    /** The Constant PLUGIN_SERVICE_NOT_SSO_LOGIN. */
+    public static final String PLUGIN_SERVICE_NOT_SSO_LOGIN = "com.suntek.mway.rcs.action.PLUGIN_SERVICE_NOT_SSO_LOGIN";
+
+
+    /** The Constant BC_VAR_PLUGIN_MODULE. */
+    public static final String BC_VAR_PLUGIN_MODULE = "pluginModuleName";
+
+    /** The Constant BC_V_PLUGIN_MODULE_EMOTICON. */
+    public static final String BC_V_PLUGIN_MODULE_EMOTICON = "emoticon";
+    
+    /** The Constant BC_V_PLUGIN_MODULE_MCLOUDFILE. */
+    public static final String BC_V_PLUGIN_MODULE_MCLOUDFILE = "mCloudFile";
+    
+    /** The Constant BC_V_PLUGIN_MODULE_MCONTACT. */
+    public static final String BC_V_PLUGIN_MODULE_MCONTACT = "mContact";
+    
+    /** The Constant BC_V_PLUGIN_MODULE_PLUGINCENTER. */
+    public static final String BC_V_PLUGIN_MODULE_PLUGINCENTER = "pluginCenter";
+    
+    /** The Constant BC_V_PLUGIN_MODULE_PLUGINUPDATE. */
+    public static final String BC_V_PLUGIN_MODULE_PLUGINUPDATE = "pluginUpdate";
+    
+    /** The Constant BC_V_PLUGIN_MODULE_PROFILE. */
+    public static final String BC_V_PLUGIN_MODULE_PROFILE = "profile";
+    
+    /** The Constant BC_V_PLUGIN_MODULE_PUBLICACCOUNT. */
+    public static final String BC_V_PLUGIN_MODULE_PUBLICACCOUNT = "publicAccount";
+    
+    /** The Constant BC_V_PLUGIN_MODULE_QRCODER. */
+    public static final String BC_V_PLUGIN_MODULE_QRCODER = "qrCoder";
+    
+    /** The Constant BC_V_PLUGIN_MODULE_richScreen. */
+    public static final String BC_V_PLUGIN_MODULE_RICHSCREEN = "richScreen";
+    
 }
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/constant/MediaConstants.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/constant/MediaConstants.java
similarity index 85%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/constant/MediaConstants.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/constant/MediaConstants.java
index 4882f18..512110d 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/constant/MediaConstants.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/constant/MediaConstants.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.constant;
+package com.suntek.mway.rcs.client.aidl.constant;
 
 /**
  * The Class MediaConstants.
@@ -32,10 +31,13 @@
     public static final String IMAGE_SUFFIX = "JPG,JPEG,PNG,GIF,BMP";
 
     /** The suffixs of audio. */
-    public static final String AUDIO_SUFFIX = "MP3,M4A,AAC,AMR";
+    public static final String AUDIO_SUFFIX = "MP3,M4A,AAC,AMR,3GP";
 
     /** The suffixs of video. */
     public static final String VIDEO_SUFFIX = "3GP,MP4";
+    
+    /** The suffixs of video. */
+    public static final String CLOUD_FILE_EXCLUDE_SUFFIX = "EXE,BAT,APK,SH,IPA,DEB,PXL,XAP";
 
     /** Maximum default file size. */
     public static final long DEFAULT_FT_MAX_SIZE = 10 * 1024;
@@ -45,6 +47,9 @@
 
     /** Maximum video file size. */
     public static final long VIDEO_FT_MAX_SIZE = 500 * 1024;
+    
+    /** Maximum cloud file size. */
+    public static final long CLOUD_FT_MAX_SIZE = 500 * 1024;
 
     /** Maximum video file time. */
     public static final long VIDEO_MAX_TIME = 90;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/contacts/ContactGroup.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/contacts/ContactGroup.aidl
similarity index 95%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/contacts/ContactGroup.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/contacts/ContactGroup.aidl
index 3504f8a..c50853d 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/contacts/ContactGroup.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/contacts/ContactGroup.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.contacts;
+package com.suntek.mway.rcs.client.aidl.contacts;
 
 parcelable ContactGroup;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/contacts/ContactGroup.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/contacts/ContactGroup.java
similarity index 97%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/contacts/ContactGroup.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/contacts/ContactGroup.java
index 2a0fd47..c06f0b4 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/contacts/ContactGroup.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/contacts/ContactGroup.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.contacts;
+package com.suntek.mway.rcs.client.aidl.contacts;
 
 
 public class ContactGroup {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/contacts/RCSContact.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/contacts/RCSContact.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/contacts/RCSContact.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/contacts/RCSContact.aidl
index c8782fe..30576ac 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/contacts/RCSContact.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/contacts/RCSContact.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.contacts;
+package com.suntek.mway.rcs.client.aidl.contacts;
 
 parcelable RCSContact;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/contacts/RCSContact.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/contacts/RCSContact.java
similarity index 97%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/contacts/RCSContact.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/contacts/RCSContact.java
index b2362b5..aae4f2e 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/contacts/RCSContact.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/contacts/RCSContact.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.contacts;
+package com.suntek.mway.rcs.client.aidl.contacts;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -29,7 +28,7 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 
-import com.suntek.mway.rcs.client.api.plugin.entity.profile.Profile;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.profile.Profile;
 
 /**
  * <p>Title: RCSContact class</p>
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/emoticon/IEmoticonApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/emoticon/IEmoticonApi.aidl
similarity index 89%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/emoticon/IEmoticonApi.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/emoticon/IEmoticonApi.aidl
index ed19935..8bd35fb 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/emoticon/IEmoticonApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/emoticon/IEmoticonApi.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,16 +20,15 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.emoticon;
-import com.suntek.mway.rcs.client.api.plugin.entity.emoticon.EmojiPackageBO;
-import com.suntek.mway.rcs.client.api.plugin.entity.emoticon.ResultBO;
-import com.suntek.mway.rcs.client.api.plugin.entity.emoticon.EmoticonBO;
-import com.suntek.mway.rcs.client.api.plugin.entity.emoticon.UserBO;
-import com.suntek.mway.rcs.client.api.plugin.callback.IEmoticonCallbackApi;
-import com.suntek.mway.rcs.client.api.plugin.callback.IEmoticonCanSendCallback;
-import com.suntek.mway.rcs.client.api.plugin.callback.IEmoticonPackagesNetCallbackApi;
-import com.suntek.mway.rcs.client.api.plugin.callback.IEmoticonSetSuccessDownListener;
+package com.suntek.mway.rcs.client.aidl.emoticon;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.emoticon.EmojiPackageBO;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.emoticon.ResultBO;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.emoticon.EmoticonBO;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.emoticon.UserBO;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IEmoticonCallbackApi;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IEmoticonCanSendCallback;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IEmoticonPackagesNetCallbackApi;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IEmoticonSetSuccessDownListener;
 interface IEmoticonApi {
 //    boolean doRegister();
     
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/im/IGroupManagerApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/im/IGroupManagerApi.aidl
similarity index 92%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/im/IGroupManagerApi.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/im/IGroupManagerApi.aidl
index 2108daa..edbfe43 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/im/IGroupManagerApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/im/IGroupManagerApi.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,14 +20,13 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.im;
+package com.suntek.mway.rcs.client.aidl.im;
 
 import java.util.List;
 
-import com.suntek.mway.rcs.client.api.provider.model.GroupChatUser;
-import com.suntek.mway.rcs.client.api.plugin.callback.IConferenceCallback;
-import com.suntek.mway.rcs.client.api.provider.model.GroupChatModel;
+import com.suntek.mway.rcs.client.aidl.provider.model.GroupChatUser;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IConferenceCallback;
+import com.suntek.mway.rcs.client.aidl.provider.model.GroupChatModel;
 
 interface IGroupManagerApi {
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/im/IInstantMessageApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/im/IInstantMessageApi.aidl
similarity index 92%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/im/IInstantMessageApi.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/im/IInstantMessageApi.aidl
index 7c83b1c..1f11790 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/im/IInstantMessageApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/im/IInstantMessageApi.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,16 +20,16 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
-package com.suntek.mway.rcs.client.api.im;
+package com.suntek.mway.rcs.client.aidl.im;
 
-import com.suntek.mway.rcs.client.api.contacts.RCSContact;
-import com.suntek.mway.rcs.client.api.provider.model.ChatMessage;
-import com.suntek.mway.rcs.client.api.provider.model.MessageSessionModel;
-import com.suntek.mway.rcs.client.api.provider.model.GroupChatModel;
-import com.suntek.mway.rcs.client.api.provider.model.GroupChatUser;
-import com.suntek.mway.rcs.client.api.provider.model.TopMessageData;
-import com.suntek.mway.rcs.client.api.provider.model.SimpleMsg;
-import com.suntek.mway.rcs.client.api.provider.model.FavoriteMessage;
+import com.suntek.mway.rcs.client.aidl.contacts.RCSContact;
+import com.suntek.mway.rcs.client.aidl.provider.model.ChatMessage;
+import com.suntek.mway.rcs.client.aidl.provider.model.MessageSessionModel;
+import com.suntek.mway.rcs.client.aidl.provider.model.GroupChatModel;
+import com.suntek.mway.rcs.client.aidl.provider.model.GroupChatUser;
+import com.suntek.mway.rcs.client.aidl.provider.model.TopMessageData;
+import com.suntek.mway.rcs.client.aidl.provider.model.SimpleMsg;
+import com.suntek.mway.rcs.client.aidl.provider.model.FavoriteMessage;
 
 interface IInstantMessageApi {
     void sendTextMessage(long thread_id,String number, String text,
@@ -197,4 +197,6 @@
     void removeMsgWithNotificationByThread(long threadId);
 
     void backupMessageList(in List<SimpleMsg> simpleMsgList);
+
+	ChatMessage getMessageByTransferId(String transferId);
 }
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/im/IPaMessageApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/im/IPaMessageApi.aidl
similarity index 95%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/im/IPaMessageApi.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/im/IPaMessageApi.aidl
index c9349c7..b0b0efa 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/im/IPaMessageApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/im/IPaMessageApi.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,10 +20,9 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.im;
+package com.suntek.mway.rcs.client.aidl.im;
 
-import com.suntek.mway.rcs.client.api.contacts.RCSContact;
+import com.suntek.mway.rcs.client.aidl.contacts.RCSContact;
 
 interface IPaMessageApi{
     
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/login/ILoginApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/login/ILoginApi.aidl
similarity index 87%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/login/ILoginApi.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/login/ILoginApi.aidl
index f69f7e4..0acd085 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/login/ILoginApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/login/ILoginApi.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,11 +20,10 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.login;
+package com.suntek.mway.rcs.client.aidl.login;
 
-import com.suntek.mway.rcs.client.api.login.ILoginEventListener;
-import com.suntek.mway.rcs.client.api.setting.LoginUser;
+import com.suntek.mway.rcs.client.aidl.login.ILoginEventListener;
+import com.suntek.mway.rcs.client.aidl.setting.LoginUser;
 
 interface ILoginApi {
     void login(in LoginUser userModel, ILoginEventListener listener);
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/login/ILoginEventListener.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/login/ILoginEventListener.aidl
similarity index 95%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/login/ILoginEventListener.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/login/ILoginEventListener.aidl
index 0e97a2d..458db99 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/login/ILoginEventListener.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/login/ILoginEventListener.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.login;
+package com.suntek.mway.rcs.client.aidl.login;
 
 interface ILoginEventListener {
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/mcloud/IMcloudFileApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/mcloud/IMcloudFileApi.aidl
similarity index 96%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/mcloud/IMcloudFileApi.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/mcloud/IMcloudFileApi.aidl
index 34d72e7..69dcfba 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/mcloud/IMcloudFileApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/mcloud/IMcloudFileApi.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,7 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
-package com.suntek.mway.rcs.client.api.mcloud;
+package com.suntek.mway.rcs.client.aidl.mcloud;
 
 interface IMcloudFileApi {
     void putFile(String localPath, String remotePath, int transOper);
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/mcontact/IMcontactApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/mcontact/IMcontactApi.aidl
similarity index 92%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/mcontact/IMcontactApi.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/mcontact/IMcontactApi.aidl
index af31e6f..d4476ca 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/mcontact/IMcontactApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/mcontact/IMcontactApi.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,10 +20,9 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.mcontact;
+package com.suntek.mway.rcs.client.aidl.mcontact;
 
-import com.suntek.mway.rcs.client.api.plugin.callback.IMContactSyncListener;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IMContactSyncListener;
 
 interface IMcontactApi {
     void doSync(int action, IMContactSyncListener listener);
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/IMcloudFileApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/IMcloudFileApi.aidl
similarity index 87%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/IMcloudFileApi.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/IMcloudFileApi.aidl
index d83ffa5..c2c099d 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/IMcloudFileApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/IMcloudFileApi.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,19 +20,18 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin;
+package com.suntek.mway.rcs.client.aidl.plugin;
 
-import com.suntek.mway.rcs.client.api.plugin.callback.IMcloudOperationCtrl;
-import com.suntek.mway.rcs.client.api.plugin.callback.IMcloudAuthListener;
-import com.suntek.mway.rcs.client.api.plugin.callback.IMcloudSdkListener;
-import com.suntek.mway.rcs.client.api.plugin.callback.IMcloudConfListener;
-import com.suntek.mway.rcs.client.api.plugin.callback.IMcloudFileListener;
-import com.suntek.mway.rcs.client.api.plugin.callback.IMcloudMsgListener;
-import com.suntek.mway.rcs.client.api.plugin.callback.IMcloudShareListener;
-import com.suntek.mway.rcs.client.api.plugin.callback.IMcloudTransListener;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IMcloudOperationCtrl;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IMcloudAuthListener;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IMcloudSdkListener;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IMcloudConfListener;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IMcloudFileListener;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IMcloudMsgListener;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IMcloudShareListener;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IMcloudTransListener;
 
-import com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile.MsgNode;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile.MsgNode;
 
 interface IMcloudFileApi
 {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/IProfileApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/IProfileApi.aidl
similarity index 87%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/IProfileApi.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/IProfileApi.aidl
index a273b08..2b88dd6 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/IProfileApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/IProfileApi.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,12 +20,11 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin;
+package com.suntek.mway.rcs.client.aidl.plugin;
 
-import com.suntek.mway.rcs.client.api.plugin.callback.IProfileListener;
-import com.suntek.mway.rcs.client.api.plugin.entity.profile.Profile;
-import com.suntek.mway.rcs.client.api.plugin.entity.profile.Avatar;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IProfileListener;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.profile.Profile;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.profile.Avatar;
 
 interface IProfileApi
 {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/IPublicAccountAPI.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/IPublicAccountAPI.aidl
similarity index 93%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/IPublicAccountAPI.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/IPublicAccountAPI.aidl
index 2e19436..ad2d56f 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/IPublicAccountAPI.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/IPublicAccountAPI.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,14 +20,13 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin;
+package com.suntek.mway.rcs.client.aidl.plugin;
 
-import com.suntek.mway.rcs.client.api.plugin.callback.IPublicAccountCallbackAPI;
-import com.suntek.mway.rcs.client.api.plugin.entity.pubacct.MsgContent;
-import com.suntek.mway.rcs.client.api.plugin.entity.pubacct.PublicAccountReqEntity;
-import com.suntek.mway.rcs.client.api.plugin.entity.pubacct.PublicAccountsDetail;
-import com.suntek.mway.rcs.client.api.plugin.entity.pubacct.PublicAccounts;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IPublicAccountCallbackAPI;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.MsgContent;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.PublicAccountReqEntity;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.PublicAccountsDetail;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.PublicAccounts;
 
 /**
  * <p>Title: Public account api</p>
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/IRichScreenApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/IRichScreenApi.aidl
similarity index 91%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/IRichScreenApi.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/IRichScreenApi.aidl
index dc2fbd0..e982dec 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/IRichScreenApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/IRichScreenApi.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,13 +20,12 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin;
+package com.suntek.mway.rcs.client.aidl.plugin;
 
-import com.suntek.mway.rcs.client.api.plugin.entity.richscrn.ResultInfo;
-import com.suntek.mway.rcs.client.api.plugin.entity.richscrn.ResultUtil;
-import com.suntek.mway.rcs.client.api.plugin.entity.richscrn.PhoneList;
-import com.suntek.mway.rcs.client.api.plugin.entity.richscrn.RichScrnShowing;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.richscrn.ResultInfo;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.richscrn.ResultUtil;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.richscrn.PhoneList;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.richscrn.RichScrnShowing;
 
 /**
  * <p>
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/ICapabiltyListener.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/ICapabiltyListener.aidl
similarity index 90%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/ICapabiltyListener.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/ICapabiltyListener.aidl
index d577fd6..39e9a32 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/ICapabiltyListener.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/ICapabiltyListener.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,10 +20,9 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.callback;
+package com.suntek.mway.rcs.client.aidl.plugin.callback;
 
-import com.suntek.mway.rcs.client.api.capability.RCSCapabilities;
+import com.suntek.mway.rcs.client.aidl.capability.RCSCapabilities;
 
 interface ICapabiltyListener
 {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IConferenceCallback.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IConferenceCallback.aidl
similarity index 90%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IConferenceCallback.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IConferenceCallback.aidl
index ecc7207..14e9897 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IConferenceCallback.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IConferenceCallback.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,10 +20,9 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.callback;
+package com.suntek.mway.rcs.client.aidl.plugin.callback;
 
-import com.suntek.mway.rcs.client.api.plugin.entity.profile.Avatar;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.profile.Avatar;
 
 interface IConferenceCallback
 {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IEmoticonCallbackApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IEmoticonCallbackApi.aidl
similarity index 90%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IEmoticonCallbackApi.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IEmoticonCallbackApi.aidl
index d088862..5229c94 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IEmoticonCallbackApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IEmoticonCallbackApi.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,11 +20,10 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.callback;
+package com.suntek.mway.rcs.client.aidl.plugin.callback;
 
-import com.suntek.mway.rcs.client.api.plugin.entity.emoticon.EmoticonBO;
-import com.suntek.mway.rcs.client.api.plugin.entity.emoticon.ResultBO;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.emoticon.EmoticonBO;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.emoticon.ResultBO;
 
 /**
  * <p>
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IEmoticonCanSendCallback.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IEmoticonCanSendCallback.aidl
similarity index 96%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IEmoticonCanSendCallback.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IEmoticonCanSendCallback.aidl
index 16d38d9..a816ceb 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IEmoticonCanSendCallback.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IEmoticonCanSendCallback.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.callback;
+package com.suntek.mway.rcs.client.aidl.plugin.callback;
 
 /**
  * <p>
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IEmoticonPackagesNetCallbackApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IEmoticonPackagesNetCallbackApi.aidl
similarity index 92%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IEmoticonPackagesNetCallbackApi.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IEmoticonPackagesNetCallbackApi.aidl
index 853512d..7d70946 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IEmoticonPackagesNetCallbackApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IEmoticonPackagesNetCallbackApi.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,10 +20,9 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.callback;
+package com.suntek.mway.rcs.client.aidl.plugin.callback;
 
-import com.suntek.mway.rcs.client.api.plugin.entity.emoticon.EmojiPackageBO;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.emoticon.EmojiPackageBO;
 /**
  * <p>
  * Title: The emoticon callback api interface
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IEmoticonSetSuccessDownListener.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IEmoticonSetSuccessDownListener.aidl
similarity index 92%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IEmoticonSetSuccessDownListener.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IEmoticonSetSuccessDownListener.aidl
index 425dd54..9cc2b58 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IEmoticonSetSuccessDownListener.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IEmoticonSetSuccessDownListener.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,10 +20,9 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.callback;
+package com.suntek.mway.rcs.client.aidl.plugin.callback;
 
-import com.suntek.mway.rcs.client.api.plugin.entity.emoticon.EmojiPackageBO;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.emoticon.EmojiPackageBO;
 /**
  * <p>Title: The emoticon sdk listener</p>
  * <p>Description: the emoticon sdk listener used in the emoticon api</p>
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMContactSyncListener.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMContactSyncListener.aidl
similarity index 93%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMContactSyncListener.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMContactSyncListener.aidl
index 3b1ae92..967b89e 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMContactSyncListener.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMContactSyncListener.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,10 +20,9 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.callback;
+package com.suntek.mway.rcs.client.aidl.plugin.callback;
 
-import com.suntek.mway.rcs.client.api.plugin.entity.mcontact.Auth;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.mcontact.Auth;
 
 /**
  * <p>
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudAuthListener.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudAuthListener.aidl
similarity index 82%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudAuthListener.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudAuthListener.aidl
index b60567f..9003844 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudAuthListener.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudAuthListener.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,12 +20,11 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.callback;
+package com.suntek.mway.rcs.client.aidl.plugin.callback;
 
-import com.suntek.mway.rcs.client.api.plugin.callback.IMcloudOperationCtrl;
-import com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile.Param;
-import com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile.AuthNode;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IMcloudOperationCtrl;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile.Param;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile.AuthNode;
 
 interface IMcloudAuthListener
 {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudConfListener.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudConfListener.aidl
similarity index 85%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudConfListener.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudConfListener.aidl
index f6dbf34..b252859 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudConfListener.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudConfListener.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,11 +20,10 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.callback;
+package com.suntek.mway.rcs.client.aidl.plugin.callback;
 
-import com.suntek.mway.rcs.client.api.plugin.callback.IMcloudOperationCtrl;
-import com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile.ConfNode;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IMcloudOperationCtrl;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile.ConfNode;
 
 interface IMcloudConfListener
 {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudFileListener.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudFileListener.aidl
similarity index 82%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudFileListener.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudFileListener.aidl
index f27a673..ef452dd 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudFileListener.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudFileListener.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,12 +20,11 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.callback;
+package com.suntek.mway.rcs.client.aidl.plugin.callback;
 
-import com.suntek.mway.rcs.client.api.plugin.callback.IMcloudOperationCtrl;
-import com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile.Param;
-import com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile.FileNode;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IMcloudOperationCtrl;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile.Param;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile.FileNode;
 
 interface IMcloudFileListener
 {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudMsgListener.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudMsgListener.aidl
similarity index 82%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudMsgListener.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudMsgListener.aidl
index 7994ec5..9427596 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudMsgListener.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudMsgListener.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,12 +20,11 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.callback;
+package com.suntek.mway.rcs.client.aidl.plugin.callback;
 
-import com.suntek.mway.rcs.client.api.plugin.callback.IMcloudOperationCtrl;
-import com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile.Param;
-import com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile.MsgNode;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IMcloudOperationCtrl;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile.Param;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile.MsgNode;
 
 interface IMcloudMsgListener
 {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudOperationCtrl.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudOperationCtrl.aidl
similarity index 90%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudOperationCtrl.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudOperationCtrl.aidl
index 60711f5..d581d8c 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudOperationCtrl.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudOperationCtrl.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,10 +20,9 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.callback;
+package com.suntek.mway.rcs.client.aidl.plugin.callback;
 
-import com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile.Result;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile.Result;
 
 interface IMcloudOperationCtrl
 {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudSdkListener.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudSdkListener.aidl
similarity index 90%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudSdkListener.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudSdkListener.aidl
index 961ee04..d91ce7e 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudSdkListener.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudSdkListener.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,10 +20,9 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.callback;
+package com.suntek.mway.rcs.client.aidl.plugin.callback;
 
-import com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile.Param;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile.Param;
 
 interface IMcloudSdkListener
 {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudShareListener.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudShareListener.aidl
similarity index 82%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudShareListener.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudShareListener.aidl
index 9e32320..93536bd 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudShareListener.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudShareListener.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,12 +20,11 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.callback;
+package com.suntek.mway.rcs.client.aidl.plugin.callback;
 
-import com.suntek.mway.rcs.client.api.plugin.callback.IMcloudOperationCtrl;
-import com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile.Param;
-import com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile.ShareNode;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IMcloudOperationCtrl;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile.Param;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile.ShareNode;
 
 interface IMcloudShareListener
 {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudTransListener.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudTransListener.aidl
similarity index 82%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudTransListener.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudTransListener.aidl
index e2fee72..40361e3 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IMcloudTransListener.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IMcloudTransListener.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,12 +20,11 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.callback;
+package com.suntek.mway.rcs.client.aidl.plugin.callback;
 
-import com.suntek.mway.rcs.client.api.plugin.callback.IMcloudOperationCtrl;
-import com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile.Param;
-import com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile.TransNode;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IMcloudOperationCtrl;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile.Param;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile.TransNode;
 
 interface IMcloudTransListener
 {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IProfileGetCallback.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IProfileGetCallback.aidl
similarity index 95%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IProfileGetCallback.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IProfileGetCallback.aidl
index 6677bfa..0fc8e6f 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IProfileGetCallback.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IProfileGetCallback.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.callback;
+package com.suntek.mway.rcs.client.aidl.plugin.callback;
 
 interface IProfileGetCallback
 {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IProfileListener.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IProfileListener.aidl
similarity index 82%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IProfileListener.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IProfileListener.aidl
index fa53fdf..080f35f 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IProfileListener.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IProfileListener.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,13 +20,12 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.callback;
+package com.suntek.mway.rcs.client.aidl.plugin.callback;
 
-import com.suntek.mway.rcs.client.api.plugin.entity.profile.Avatar;
-import com.suntek.mway.rcs.client.api.plugin.entity.profile.Profile;
-import com.suntek.mway.rcs.client.api.plugin.entity.profile.QRCardImg;
-import com.suntek.mway.rcs.client.api.plugin.entity.profile.QRCardInfo;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.profile.Avatar;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.profile.Profile;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.profile.QRCardImg;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.profile.QRCardInfo;
 
 interface IProfileListener
 {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IProfilePutCallback.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IProfilePutCallback.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IProfilePutCallback.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IProfilePutCallback.aidl
index 7f84544..6f5fb55 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IProfilePutCallback.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IProfilePutCallback.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.callback;
+package com.suntek.mway.rcs.client.aidl.plugin.callback;
 
 interface IProfilePutCallback
 {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IPublicAccountCallbackAPI.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IPublicAccountCallbackAPI.aidl
similarity index 91%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IPublicAccountCallbackAPI.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IPublicAccountCallbackAPI.aidl
index 1353eca..029bb99 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/callback/IPublicAccountCallbackAPI.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IPublicAccountCallbackAPI.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,14 +20,13 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.callback;
+package com.suntek.mway.rcs.client.aidl.plugin.callback;
 
-import com.suntek.mway.rcs.client.api.plugin.entity.pubacct.MsgContent;
-import com.suntek.mway.rcs.client.api.plugin.entity.pubacct.MenuInfo;
-import com.suntek.mway.rcs.client.api.plugin.entity.pubacct.PublicAccounts;
-import com.suntek.mway.rcs.client.api.plugin.entity.pubacct.PublicAccountsDetail;
-import com.suntek.mway.rcs.client.api.plugin.entity.pubacct.PublicAccounts;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.MsgContent;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.MenuInfo;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.PublicAccounts;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.PublicAccountsDetail;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.PublicAccounts;
 
 /**
  * <p>Title: Public account callback api</p>
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/EmojiPackageBO.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmojiPackageBO.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/EmojiPackageBO.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmojiPackageBO.aidl
index 8c13101..6727156 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/EmojiPackageBO.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmojiPackageBO.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.emoticon;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.emoticon;
 
 parcelable EmojiPackageBO;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/EmojiPackageBO.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmojiPackageBO.java
similarity index 99%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/EmojiPackageBO.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmojiPackageBO.java
index d33f9d8..9affe5c 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/EmojiPackageBO.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmojiPackageBO.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.emoticon;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.emoticon;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/EmoticonBO.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmoticonBO.aidl
similarity index 93%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/EmoticonBO.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmoticonBO.aidl
index c9acf16..ad8a3e9 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/EmoticonBO.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmoticonBO.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.emoticon;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.emoticon;
 
 parcelable EmoticonBO;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/EmoticonBO.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmoticonBO.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/EmoticonBO.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmoticonBO.java
index 1e9a7d4..4b161ac 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/EmoticonBO.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmoticonBO.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.emoticon;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.emoticon;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/EmoticonConstant.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmoticonConstant.java
similarity index 95%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/EmoticonConstant.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmoticonConstant.java
index 6394365..9ac2b8d 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/EmoticonConstant.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmoticonConstant.java
@@ -20,7 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
-package com.suntek.mway.rcs.client.api.plugin.entity.emoticon;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.emoticon;
 
 /**
  * The Class EmoticonConstant.
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/ResultBO.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/ResultBO.aidl
similarity index 93%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/ResultBO.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/ResultBO.aidl
index 672b600..6b52e61 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/ResultBO.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/ResultBO.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.emoticon;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.emoticon;
 
 parcelable ResultBO;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/ResultBO.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/ResultBO.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/ResultBO.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/ResultBO.java
index e97913d..9d9e39e 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/ResultBO.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/ResultBO.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.emoticon;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.emoticon;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/UserBO.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/UserBO.aidl
similarity index 93%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/UserBO.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/UserBO.aidl
index 68020c2..dbe2afb 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/UserBO.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/UserBO.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.emoticon;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.emoticon;
 
 parcelable UserBO;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/UserBO.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/UserBO.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/UserBO.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/UserBO.java
index 1694f41..c3155fa 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/emoticon/UserBO.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/UserBO.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.emoticon;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.emoticon;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/AuthNode.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/AuthNode.aidl
similarity index 93%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/AuthNode.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/AuthNode.aidl
index 63a56ab..7fc3411 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/AuthNode.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/AuthNode.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 parcelable AuthNode;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/AuthNode.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/AuthNode.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/AuthNode.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/AuthNode.java
index 0dc078a..d887db9 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/AuthNode.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/AuthNode.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 import java.util.Map;
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/AuthNodeUpdateInfo.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/AuthNodeUpdateInfo.aidl
similarity index 93%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/AuthNodeUpdateInfo.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/AuthNodeUpdateInfo.aidl
index 5c1e618..9baf5c3 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/AuthNodeUpdateInfo.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/AuthNodeUpdateInfo.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 parcelable AuthNodeUpdateInfo;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/AuthNodeUpdateInfo.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/AuthNodeUpdateInfo.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/AuthNodeUpdateInfo.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/AuthNodeUpdateInfo.java
index 27db0e2..c9a36ab 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/AuthNodeUpdateInfo.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/AuthNodeUpdateInfo.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/ConfNode.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/ConfNode.aidl
similarity index 93%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/ConfNode.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/ConfNode.aidl
index db782b2..d367e3a 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/ConfNode.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/ConfNode.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 parcelable ConfNode;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/ConfNode.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/ConfNode.java
similarity index 97%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/ConfNode.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/ConfNode.java
index 505518a..fa6b7b3 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/ConfNode.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/ConfNode.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 import java.util.Map;
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Config.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Config.aidl
similarity index 93%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Config.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Config.aidl
index daed9ab..586158e 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Config.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Config.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 parcelable Config;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Config.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Config.java
similarity index 99%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Config.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Config.java
index d256fcd..1a384ba 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Config.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Config.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 /**
  * The Class Config.
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Error.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Error.java
similarity index 96%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Error.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Error.java
index 98af8bc..72f149f 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Error.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Error.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 
 public enum Error {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Event.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Event.java
similarity index 95%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Event.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Event.java
index 6db1c7d..40bbb72 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Event.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Event.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 
 public enum Event {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/FileNode.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/FileNode.aidl
similarity index 93%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/FileNode.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/FileNode.aidl
index 08291c3..63fe2ed 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/FileNode.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/FileNode.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 parcelable FileNode;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/FileNode.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/FileNode.java
similarity index 99%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/FileNode.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/FileNode.java
index b80780b..c7888e9 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/FileNode.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/FileNode.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 import java.util.Map;
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/MsgNode.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/MsgNode.aidl
similarity index 93%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/MsgNode.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/MsgNode.aidl
index 4e0015f..85fe823 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/MsgNode.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/MsgNode.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 parcelable MsgNode;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/MsgNode.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/MsgNode.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/MsgNode.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/MsgNode.java
index ba5edc1..429d31d 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/MsgNode.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/MsgNode.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 import java.util.Map;
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Param.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Param.aidl
similarity index 93%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Param.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Param.aidl
index f1d3fce..ea52577 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Param.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Param.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 parcelable Param;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Param.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Param.java
similarity index 97%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Param.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Param.java
index 04e1611..9ce33b2 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Param.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Param.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Result.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Result.aidl
similarity index 93%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Result.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Result.aidl
index 9af04af..8e2e2dd 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Result.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Result.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 parcelable Result;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Result.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Result.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Result.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Result.java
index 355fe1b..b55087d 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Result.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Result.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/SdkType.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/SdkType.java
similarity index 95%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/SdkType.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/SdkType.java
index e60c853..0b4a368 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/SdkType.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/SdkType.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 public enum SdkType {
     Static,
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/ShareNode.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/ShareNode.aidl
similarity index 93%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/ShareNode.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/ShareNode.aidl
index 0605166..b490703 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/ShareNode.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/ShareNode.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 parcelable ShareNode;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/ShareNode.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/ShareNode.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/ShareNode.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/ShareNode.java
index a2d2348..c2656cf 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/ShareNode.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/ShareNode.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 import java.util.Arrays;
 import java.util.Map;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Status.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Status.java
similarity index 95%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Status.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Status.java
index 0638387..382ffbd 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/Status.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/Status.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 
 public enum Status {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/TransNode.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/TransNode.aidl
similarity index 93%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/TransNode.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/TransNode.aidl
index 1872506..b2ea946 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/TransNode.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/TransNode.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 parcelable TransNode;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/TransNode.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/TransNode.java
similarity index 81%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/TransNode.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/TransNode.java
index 4b980c5..c363eab 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcloudfile/TransNode.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/TransNode.java
@@ -1,27 +1,32 @@
 /*
- * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
- * pci-suntektech Technologies Proprietary and Confidential.
+ * Copyright (c) 2014, The Linux Foundation. All rights reserved.
  *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile;
 
 import java.util.Map;
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcontact/Auth.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcontact/Auth.aidl
similarity index 93%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcontact/Auth.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcontact/Auth.aidl
index 0b76ec5..7465ed5 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcontact/Auth.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcontact/Auth.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.mcontact;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcontact;
 
 parcelable Auth;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcontact/Auth.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcontact/Auth.java
similarity index 99%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcontact/Auth.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcontact/Auth.java
index 291c763..fc72ef6 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcontact/Auth.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcontact/Auth.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.mcontact;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcontact;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcontact/ContactAction.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcontact/ContactAction.java
similarity index 96%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcontact/ContactAction.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcontact/ContactAction.java
index d63d131..c811064 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcontact/ContactAction.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcontact/ContactAction.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.mcontact;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcontact;
 
 
 public enum ContactAction {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcontact/IntervalAction.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcontact/IntervalAction.java
similarity index 96%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcontact/IntervalAction.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcontact/IntervalAction.java
index 1116e1d..21468c8 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcontact/IntervalAction.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcontact/IntervalAction.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.mcontact;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcontact;
 
 public enum IntervalAction {
     INTERVAL_SYNC_ONE_DAY,
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcontact/SyncAction.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcontact/SyncAction.java
similarity index 96%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcontact/SyncAction.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcontact/SyncAction.java
index 23e5bae..74762cc 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/mcontact/SyncAction.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcontact/SyncAction.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.mcontact;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.mcontact;
 
 public enum SyncAction {
     CONTACT_DOWNLOAD,
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/Avatar.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/Avatar.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/Avatar.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/Avatar.aidl
index 28f2c68..2357919 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/Avatar.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/Avatar.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.profile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.profile;
 
 parcelable Avatar;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/Avatar.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/Avatar.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/Avatar.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/Avatar.java
index 814cdf3..e3e44c4 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/Avatar.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/Avatar.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.profile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.profile;
 
 import java.io.Serializable;
 import java.util.ArrayList;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/BaseModel.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/BaseModel.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/BaseModel.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/BaseModel.aidl
index 57f9644..3615bec 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/BaseModel.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/BaseModel.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.profile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.profile;
 
 parcelable BaseModel;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/BaseModel.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/BaseModel.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/BaseModel.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/BaseModel.java
index 888583a..0c44c41 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/BaseModel.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/BaseModel.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.profile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.profile;
 
 import java.io.Serializable;
 import java.util.ArrayList;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/OtherTels.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/OtherTels.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/OtherTels.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/OtherTels.aidl
index 05c645a..c0c72ba 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/OtherTels.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/OtherTels.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.profile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.profile;
 
 parcelable OtherTels;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/OtherTels.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/OtherTels.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/OtherTels.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/OtherTels.java
index e41bdc4..c582e4c 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/OtherTels.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/OtherTels.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.profile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.profile;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/Profile.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/Profile.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/Profile.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/Profile.aidl
index bfe7e6f..dea50e0 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/Profile.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/Profile.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.profile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.profile;
 
 parcelable Profile;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/Profile.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/Profile.java
similarity index 97%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/Profile.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/Profile.java
index 6dd5900..098a3c8 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/Profile.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/Profile.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.profile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.profile;
 
 import java.io.Serializable;
 import java.util.ArrayList;
@@ -33,7 +32,7 @@
 
 /**
  * <p>Title: The profile entity class</p>
- * <p>Description: the profile include the home address, the email …… and so on</p>
+ * <p>Description: the profile include the home address, the email and so on</p>
  * <p>Copyright: Copyright (c) 2014</p>
  * <p>Company: pci-suntek</p>.
  *
@@ -370,10 +369,9 @@
         String first = firstName; // given name.
         String last = lastName; // family name.
 
-        // 按照中文名/英文名决定排序
         boolean isLettersOnly = true;
 
-           isLettersOnly = isLettersOnly && isNullOrLettersOnly(first);
+        isLettersOnly = isLettersOnly && isNullOrLettersOnly(first);
         isLettersOnly = isLettersOnly && isNullOrLettersOnly(last);
 
         // Avoid "null" to show in the UI.
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/ProfileName.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/ProfileName.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/ProfileName.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/ProfileName.aidl
index 0c6114f..cccac8a 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/ProfileName.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/ProfileName.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.profile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.profile;
 
 parcelable ProfileName; 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/ProfileName.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/ProfileName.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/ProfileName.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/ProfileName.java
index 1bc7bd9..f31cfd6 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/ProfileName.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/ProfileName.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.profile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.profile;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/QRCardBusinessFlag.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/QRCardBusinessFlag.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/QRCardBusinessFlag.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/QRCardBusinessFlag.aidl
index 2ad1001..71e2858 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/QRCardBusinessFlag.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/QRCardBusinessFlag.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.profile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.profile;
 
 parcelable QRCardBusinessFlag;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/QRCardBusinessFlag.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/QRCardBusinessFlag.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/QRCardBusinessFlag.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/QRCardBusinessFlag.java
index 30f0e40..d6529ff 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/QRCardBusinessFlag.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/QRCardBusinessFlag.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.profile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.profile;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/QRCardImg.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/QRCardImg.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/QRCardImg.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/QRCardImg.aidl
index 98e8f13..c4654e6 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/QRCardImg.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/QRCardImg.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.profile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.profile;
 
 parcelable QRCardImg;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/QRCardImg.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/QRCardImg.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/QRCardImg.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/QRCardImg.java
index b038ecc..932fe2c 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/QRCardImg.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/QRCardImg.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.profile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.profile;
 
 import java.io.Serializable;
 import java.util.ArrayList;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/QRCardInfo.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/QRCardInfo.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/QRCardInfo.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/QRCardInfo.aidl
index cf0a486..4142f24 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/QRCardInfo.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/QRCardInfo.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.profile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.profile;
 
 parcelable QRCardInfo;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/QRCardInfo.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/QRCardInfo.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/QRCardInfo.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/QRCardInfo.java
index 1c1e37d..d39e082 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/QRCardInfo.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/QRCardInfo.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.profile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.profile;
 
 import java.io.Serializable;
 import java.util.ArrayList;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/TelephoneModel.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/TelephoneModel.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/TelephoneModel.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/TelephoneModel.aidl
index 2e04a37..434bd38 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/TelephoneModel.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/TelephoneModel.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.profile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.profile;
 
 parcelable TelephoneModel;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/TelephoneModel.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/TelephoneModel.java
similarity index 97%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/TelephoneModel.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/TelephoneModel.java
index 89d6f2a..62fe121 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/profile/TelephoneModel.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/profile/TelephoneModel.java
@@ -20,9 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-
-package com.suntek.mway.rcs.client.api.plugin.entity.profile;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.profile;
 
 import java.io.Serializable;
 import java.util.ArrayList;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MediaArticle.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MediaArticle.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MediaArticle.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MediaArticle.aidl
index d513aad..11b9105 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MediaArticle.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MediaArticle.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.pubacct;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct;
 
 parcelable MediaArticle;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MediaArticle.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MediaArticle.java
new file mode 100644
index 0000000..166122d
--- /dev/null
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MediaArticle.java
@@ -0,0 +1,464 @@
+/*
+ * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
+ * pci-suntektech Technologies Proprietary and Confidential.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * 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;
+import android.os.Parcelable;
+
+/**
+ * <p>
+ * Title: The media article entity
+ * </p>
+ * <p>
+ * Description: The media article entity
+ * </p>
+ * <p>
+ * Copyright: Copyright (c) 2014
+ * </p>
+ * <p>
+ * Company: pci-suntek
+ * </p>
+ * 
+ * @author zrq
+ * @version 1.0
+ */
+public class MediaArticle implements Parcelable {
+
+    /** The title. */
+    private String title;
+
+    /** The author. */
+    private String author;
+
+    /** The thumb picture link. */
+    private String thumbLink;
+
+    /** The original picture link. */
+    private String originalLink;
+
+    /** The source link. */
+    private String sourceLink;
+
+    /** The main text. */
+    private String mainText;
+
+    /** The media uuid. */
+    private String mediaUuid;
+
+    /** The middle link. */
+    // private String middleLink;
+
+    /** The media type. */
+    // private String mediaType;
+
+    /** The digest. */
+    private String digest;
+
+    /** The view type. */
+    // private String viewType;
+
+    /** The major article. */
+//    private int majorArticle;
+
+    /** The child articles. */
+    // private List<MediaArticle> childArticles;
+
+    private String bodyLink;
+
+    /**
+     * Instantiates a new media article.
+     */
+    public MediaArticle() {
+    }
+
+    /**
+     * Instantiates a new media article.
+     * 
+     * @param source the source
+     */
+    public MediaArticle(Parcel source) {
+        readFromParcel(source);
+    }
+
+    /**
+     * The parcel describe contents, defaul is 0.
+     * 
+     * @return the int
+     */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    /**
+     * Write the media article entity to parcel stream. Pay attention to read
+     * and write variables variables sequence should be consistent or not the
+     * correct results
+     * 
+     * @param dest the dest parcel stream
+     * @param flags the flags
+     */
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(title);
+        dest.writeString(author);
+        dest.writeString(thumbLink);
+        dest.writeString(originalLink);
+        dest.writeString(sourceLink);
+        dest.writeString(mainText);
+        dest.writeString(mediaUuid);
+        // dest.writeString( middleLink );
+        // dest.writeString( mediaType );
+        dest.writeString(digest);
+        // dest.writeString( viewType );
+//        dest.writeInt(majorArticle);
+        // dest.writeList( childArticles );
+        dest.writeString(bodyLink);
+    }
+
+    /**
+     * Create the media article entity from parcel stream. Pay attention to read
+     * and write variables variables sequence should be consistent or not the
+     * correct results
+     * 
+     * @param source The parcel stream
+     */
+    public void readFromParcel(Parcel source) {
+        title = source.readString();
+        author = source.readString();
+        thumbLink = source.readString();
+        originalLink = source.readString();
+        sourceLink = source.readString();
+        mainText = source.readString();
+        mediaUuid = source.readString();
+        // middleLink = source.readString();
+        // mediaType = source.readString();
+        digest = source.readString();
+        // viewType = source.readString();
+//        majorArticle = source.readInt();
+        // childArticles = new LinkedList<MediaArticle>();
+        // source.readList( childArticles, this.getClass().getClassLoader() );
+        bodyLink = source.readString();
+    }
+
+    /** The parcel creator. */
+    public static final Parcelable.Creator<MediaArticle> CREATOR = new Parcelable.Creator<MediaArticle>() {
+        @Override
+        public MediaArticle createFromParcel(Parcel source) {
+            return new MediaArticle(source);
+        }
+
+        @Override
+        public MediaArticle[] newArray(int size) {
+            return new MediaArticle[size];
+        }
+    };
+
+    /**
+     * Gets the title.
+     * 
+     * @return the title
+     */
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * Sets the title.
+     * 
+     * @param title the new title
+     */
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    /**
+     * Gets the author.
+     * 
+     * @return the author
+     */
+    public String getAuthor() {
+        return author;
+    }
+
+    /**
+     * Sets the author.
+     * 
+     * @param author the new author
+     */
+    public void setAuthor(String author) {
+        this.author = author;
+    }
+
+    /**
+     * Gets the thumb picture link.
+     * 
+     * @return the thumb picture link
+     */
+    public String getThumbLink() {
+        return thumbLink;
+    }
+
+    /**
+     * Sets the thumb picture link.
+     * 
+     * @param thumbLink the new thumb picture link
+     */
+    public void setThumbLink(String thumbLink) {
+        this.thumbLink = thumbLink;
+    }
+
+    /**
+     * Gets the original picture link.
+     * 
+     * @return the original picture link
+     */
+    public String getOriginalLink() {
+        return originalLink;
+    }
+
+    /**
+     * Sets the original picture link.
+     * 
+     * @param originalLink the new original picture link
+     */
+    public void setOriginalLink(String originalLink) {
+        this.originalLink = originalLink;
+    }
+
+    /**
+     * Gets the source link.
+     * 
+     * @return the source link
+     */
+    public String getSourceLink() {
+        return sourceLink;
+    }
+
+    /**
+     * Sets the source link.
+     * 
+     * @param sourceLink the new source link
+     */
+    public void setSourceLink(String sourceLink) {
+        this.sourceLink = sourceLink;
+    }
+
+    /**
+     * Gets the main text.
+     * 
+     * @return the main text
+     */
+    public String getMainText() {
+        return mainText;
+    }
+
+    /**
+     * Sets the main text.
+     * 
+     * @param mainText the new main text
+     */
+    public void setMainText(String mainText) {
+        this.mainText = mainText;
+    }
+
+    /**
+     * Gets the media uuid.
+     * 
+     * @return the media uuid
+     */
+    public String getMediaUuid() {
+        return mediaUuid;
+    }
+
+    /**
+     * Sets the media uuid.
+     * 
+     * @param mediaUuid the new media uuid
+     */
+    public void setMediaUuid(String mediaUuid) {
+        this.mediaUuid = mediaUuid;
+    }
+
+    /**
+     * Gets the middle link.
+     * 
+     * @return the middle link
+     */
+    // public String getMiddleLink()
+    // {
+    // return middleLink;
+    // }
+
+    /**
+     * Sets the middle link.
+     * 
+     * @param middleLink the new middle link
+     */
+    // public void setMiddleLink( String middleLink )
+    // {
+    // this.middleLink = middleLink;
+    // }
+
+    /**
+     * Gets the media type.
+     * 
+     * @return the media type
+     */
+    // public String getMediaType()
+    // {
+    // return mediaType;
+    // }
+
+    /**
+     * Sets the media type.
+     * 
+     * @param mediaType the new media type
+     */
+    // public void setMediaType( String mediaType )
+    // {
+    // this.mediaType = mediaType;
+    // }
+
+    /**
+     * Gets the digest.
+     * 
+     * @return the digest
+     */
+    public String getDigest() {
+        return digest;
+    }
+
+    /**
+     * Sets the digest.
+     * 
+     * @param digest the new digest
+     */
+    public void setDigest(String digest) {
+        this.digest = digest;
+    }
+
+    /**
+     * Gets the view type.
+     * 
+     * @return the view type
+     */
+    // public String getViewType()
+    // {
+    // return viewType;
+    // }
+
+    /**
+     * Sets the view type.
+     * 
+     * @param viewType the new view type
+     */
+    // public void setViewType( String viewType )
+    // {
+    // this.viewType = viewType;
+    // }
+
+    /**
+     * Gets the major article.
+     * 
+     * @return the major article
+     */
+//    public int getMajorArticle() {
+//        return majorArticle;
+//    }
+
+    /**
+     * Sets the major article.
+     * 
+     * @param majorArticle the new major article
+     */
+//    public void setMajorArticle(int majorArticle) {
+//        this.majorArticle = majorArticle;
+//    }
+
+    /**
+     * Gets the child articles.
+     * 
+     * @return the child articles
+     */
+    // public List<MediaArticle> getChildArticles()
+    // {
+    // return childArticles;
+    // }
+
+    public String getBodyLink() {
+        return bodyLink;
+    }
+
+    public void setBodyLink(String bodyLink) {
+        this.bodyLink = bodyLink;
+    }
+
+    /**
+     * Sets the child articles.
+     * 
+     * @return the string
+     */
+    // public void setChildArticles( List<MediaArticle> childArticles )
+    // {
+    // this.childArticles = childArticles;
+    // }
+
+    @Override
+    public String toString() {
+        StringBuffer sbuffer = new StringBuffer();
+        if (null != this.title) {
+            sbuffer.append(",title=").append(this.title);
+        }
+        if (null != this.thumbLink) {
+            sbuffer.append(",thumbLink=").append(this.thumbLink);
+        }
+        if (null != this.originalLink) {
+            sbuffer.append(",originalLink=").append(this.originalLink);
+        }
+        if (null != this.sourceLink) {
+            sbuffer.append(",sourceLink=").append(this.sourceLink);
+        }
+        if (null != this.mainText) {
+            sbuffer.append(",mainText=").append(this.mainText);
+        }
+        if (null != this.mediaUuid) {
+            sbuffer.append(",mediaUuid=").append(this.mediaUuid);
+        }
+        if (null != this.digest) {
+            sbuffer.append(",digest=").append(this.digest);
+        }
+        if (null != this.bodyLink) {
+            sbuffer.append(",bodyLink=").append(this.bodyLink);
+        }
+//        sbuffer.append(",majorArticle=").append(this.majorArticle);
+
+        if (sbuffer.length() > 1) {
+            return sbuffer.substring(1).toString();
+        } else {
+            return "";
+        }
+
+    }
+}
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MediaBasic.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MediaBasic.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MediaBasic.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MediaBasic.aidl
index 61ba226..952d1c9 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MediaBasic.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MediaBasic.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.pubacct;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct;
 
 parcelable MediaBasic;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MediaBasic.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MediaBasic.java
similarity index 99%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MediaBasic.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MediaBasic.java
index a534c24..0cab53e 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MediaBasic.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MediaBasic.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.pubacct;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MenuInfo.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MenuInfo.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MenuInfo.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MenuInfo.aidl
index 04248dd..f7bff7e 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MenuInfo.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MenuInfo.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.pubacct;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct;
 
 parcelable MenuInfo;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MenuInfo.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MenuInfo.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MenuInfo.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MenuInfo.java
index 4b237ca..b07be88 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MenuInfo.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MenuInfo.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.pubacct;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct;
 
 import java.util.LinkedList;
 import java.util.List;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MsgContent.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MsgContent.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MsgContent.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MsgContent.aidl
index e21af9b..53974ba 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MsgContent.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MsgContent.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.pubacct;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct;
 
 parcelable MsgContent;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MsgContent.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MsgContent.java
similarity index 99%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MsgContent.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MsgContent.java
index d325940..ba869a4 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MsgContent.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/MsgContent.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.pubacct;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct;
 
 import java.util.LinkedList;
 import java.util.List;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccountCallbackType.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountCallbackType.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccountCallbackType.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountCallbackType.aidl
index 60f03cb..a865d87 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccountCallbackType.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountCallbackType.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.pubacct;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct;
 
 parcelable PublicAccountCallbackType;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccountCallbackType.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountCallbackType.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccountCallbackType.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountCallbackType.java
index 2c19d62..f9da0bd 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccountCallbackType.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountCallbackType.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.pubacct;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct;
 
 
 /**
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
new file mode 100644
index 0000000..5e408d3
--- /dev/null
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountConstant.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
+ * pci-suntektech Technologies Proprietary and Confidential.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * 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;
+
+/**
+ * The Class PublicAccountConstant.
+ */
+public class PublicAccountConstant {
+
+    /** order type: 0 is desc order by the follow time. */
+    public static final int ACCOUNTLIST_ORDER_TYPE_FOLLOWTIME_DESC = 0;
+
+    /** order type: 1 is asc order by the public account. */
+    public static final int ACCOUNTLIST_ORDER_TYPE_ACCOUNT_NAME_ASC = 1;
+
+    /** order type: 0 is Forward from a time. */
+    public static final int PREMESSAGE_ORDER_TYPE_TIME_FORWARD = 0;
+
+    /** order type: 1 is Backward from a time. */
+    public static final int PREMESSAGE_ORDER_TYPE_TIME_BACKWARD = 1;
+
+    /** complain type: 1 is complain account. */
+    public static final int COMPLAIN_TYPE_ACCOUNT = 1;
+
+    /** complain type: 2 is complain content. */
+    public static final int COMPLAIN_TYPE_CONTENT = 2;
+
+    /** The Constant ACCEPT_STATUS_ACCEPT. */
+    public static final int ACCEPT_STATUS_ACCEPT = 1;
+
+    /** The Constant ACCEPT_STATUS_NOT. */
+    public static final int ACCEPT_STATUS_NOT = 0;
+
+    /** The Constant SUBSCRIBE_STATUS_FOLLOWED. */
+    public static final int SUBSCRIBE_STATUS_FOLLOWED = 1;
+
+    /** The Constant SUBSCRIBE_STATUS_UNFOLLOWED. */
+    public static final int SUBSCRIBE_STATUS_UNFOLLOWED = 0;
+
+    /** The Constant MENU_HAVE_YES. */
+    public static final int MENU_HAVE_YES = 1;
+
+    /** The Constant MENU_HAVE_NO. */
+    public static final int MENU_HAVE_NO = 0;
+
+    /** The Constant ACCOUNT_STATUS_NORMAL. */
+    public static final int ACCOUNT_STATUS_NORMAL = 0;
+
+    /** The Constant ACCOUNT_STATUS_PAUSE. */
+    public static final int ACCOUNT_STATUS_PAUSE = 1;
+
+    /** The Constant ACCOUNT_STATUS_CLOSE. */
+    public static final int ACCOUNT_STATUS_CLOSE = 2;
+
+    /** The Constant MENU_TYPE_SEND_MESSAGE. */
+    public static final int MENU_TYPE_SEND_MESSAGE = 0;
+
+    /** The Constant MENU_TYPE_URL. */
+    public static final int MENU_TYPE_URL = 1;
+
+    /** The Constant MENU_TYPE_DEVICE_API. */
+    public static final int MENU_TYPE_DEVICE_API = 2;
+
+    /** The Constant MENU_TYPE_APPLICATION. */
+    public static final int MENU_TYPE_APPLICATION = 3;
+}
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccountReqEntity.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountReqEntity.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccountReqEntity.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountReqEntity.aidl
index 8d6f181..20ba30a 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccountReqEntity.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountReqEntity.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.pubacct;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct;
 
 parcelable PublicAccountReqEntity;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccountReqEntity.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountReqEntity.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccountReqEntity.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountReqEntity.java
index 321c92d..19826c6 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccountReqEntity.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountReqEntity.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.pubacct;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccounts.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccounts.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccounts.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccounts.aidl
index 7e05818..637cd43 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccounts.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccounts.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.pubacct;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct;
 
 parcelable PublicAccounts;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccounts.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccounts.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccounts.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccounts.java
index b1d8ed0..8c2364c 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccounts.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccounts.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.pubacct;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccountsDetail.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountsDetail.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccountsDetail.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountsDetail.aidl
index ba3c85f..721b579 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccountsDetail.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountsDetail.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.pubacct;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct;
 
 parcelable PublicAccountsDetail;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccountsDetail.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountsDetail.java
similarity index 99%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccountsDetail.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountsDetail.java
index 75a92a3..cd484b0 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccountsDetail.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountsDetail.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.pubacct;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/PhoneEvent.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/PhoneEvent.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/PhoneEvent.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/PhoneEvent.java
index 4f8d4db..c175f31 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/PhoneEvent.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/PhoneEvent.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.richscrn;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.richscrn;
 
 /**
  * <p>Title: The phone event</p>
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/PhoneList.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/PhoneList.aidl
similarity index 93%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/PhoneList.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/PhoneList.aidl
index 3c74e43..d421ca4 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/PhoneList.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/PhoneList.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.richscrn;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.richscrn;
 
 parcelable PhoneList;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/PhoneList.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/PhoneList.java
similarity index 97%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/PhoneList.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/PhoneList.java
index 1257478..294c618 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/PhoneList.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/PhoneList.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.richscrn;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.richscrn;
 
 import java.util.ArrayList;
 
@@ -49,6 +48,7 @@
 public class PhoneList implements Parcelable
 {
 
+
     /** The phone list . */
     private ArrayList<String>    phoneList;
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/ResultInfo.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/ResultInfo.aidl
similarity index 93%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/ResultInfo.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/ResultInfo.aidl
index 28cc497..bd34e26 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/ResultInfo.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/ResultInfo.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.richscrn;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.richscrn;
 
 parcelable ResultInfo;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/ResultInfo.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/ResultInfo.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/ResultInfo.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/ResultInfo.java
index f7d68dc..c8ccd83 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/ResultInfo.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/ResultInfo.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.richscrn;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.richscrn;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/ResultUtil.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/ResultUtil.aidl
similarity index 93%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/ResultUtil.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/ResultUtil.aidl
index b25c304..188f0a0 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/ResultUtil.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/ResultUtil.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.richscrn;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.richscrn;
 
 parcelable ResultUtil;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/ResultUtil.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/ResultUtil.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/ResultUtil.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/ResultUtil.java
index bb7b8d6..dc51fbd 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/ResultUtil.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/ResultUtil.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.richscrn;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.richscrn;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/autoconfig/IAutoConfigApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/RichScrnConstant.java
similarity index 68%
copy from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/autoconfig/IAutoConfigApi.aidl
copy to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/RichScrnConstant.java
index 9c4f756..0c9229c 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/autoconfig/IAutoConfigApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/RichScrnConstant.java
@@ -20,14 +20,23 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.autoconfig;
+
+package com.suntek.mway.rcs.client.aidl.plugin.entity.richscrn;
 
 /**
- * AutoConfig API
+ * The Class RichScrnConstant.
  */
-interface IAutoConfigApi {
+public class RichScrnConstant {
 
-    // User accept rcs auto registration provisions and press accept button to continue
-    void acceptAutoReg();
+    /** The Constant SOURCE_TYPE_STATIC_IMAGE. */
+    public static final String SOURCE_TYPE_STATIC_IMAGE = "0";
+
+    /** The Constant SOURCE_TYPE_DYNAMIC_IMAGE. */
+    public static final String SOURCE_TYPE_DYNAMIC_IMAGE = "1";
+
+    /** The Constant SOURCE_TYPE_VIDEO. */
+    public static final String SOURCE_TYPE_VIDEO = "2";
+
+    /** The Constant SOURCE_TYPE_UNKNOWN. */
+    public static final String SOURCE_TYPE_UNKNOWN = "3";
 }
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/RichScrnShowing.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/RichScrnShowing.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/RichScrnShowing.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/RichScrnShowing.aidl
index 9f73553..ff877f9 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/RichScrnShowing.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/RichScrnShowing.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.plugin.entity.richscrn;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.richscrn;
 
 parcelable RichScrnShowing; 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/RichScrnShowing.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/RichScrnShowing.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/RichScrnShowing.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/RichScrnShowing.java
index 6b83942..03b117b 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/richscrn/RichScrnShowing.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/richscrn/RichScrnShowing.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.richscrn;
+package com.suntek.mway.rcs.client.aidl.plugin.entity.richscrn;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugincenter/IPluginCenterApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugincenter/IPluginCenterApi.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugincenter/IPluginCenterApi.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugincenter/IPluginCenterApi.aidl
index d8aaf34..09e8588 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugincenter/IPluginCenterApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugincenter/IPluginCenterApi.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.plugincenter;
+package com.suntek.mway.rcs.client.aidl.plugincenter;
 
 interface IPluginCenterApi {
     void intentApk();
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/GroupUserData.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/GroupUserData.java
similarity index 97%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/GroupUserData.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/GroupUserData.java
index a76dcf0..931a291 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/GroupUserData.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/GroupUserData.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.provider;
+package com.suntek.mway.rcs.client.aidl.provider;
 
 import java.io.Serializable;
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/NewAddressBookData.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/NewAddressBookData.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/NewAddressBookData.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/NewAddressBookData.java
index 391fafa..67221b1 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/NewAddressBookData.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/NewAddressBookData.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.provider;
+package com.suntek.mway.rcs.client.aidl.provider;
 
 import android.net.Uri;
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/PublicAccountData.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/PublicAccountData.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/PublicAccountData.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/PublicAccountData.java
index e07d3a8..724a88f 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/PublicAccountData.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/PublicAccountData.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.provider;
+package com.suntek.mway.rcs.client.aidl.provider;
 
 import android.net.Uri;
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/SuntekMessageData.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/SuntekMessageData.java
similarity index 90%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/SuntekMessageData.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/SuntekMessageData.java
index 624351a..c713de7 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/SuntekMessageData.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/SuntekMessageData.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.provider;
+package com.suntek.mway.rcs.client.aidl.provider;
 
 import android.net.Uri;
 
@@ -61,12 +60,29 @@
 
     /** Table name of group */
     public static final String TABLE_CHAT_GROUP= "chatGroup";
+    
+    public static final String TABLE_DIVICE_API_CHAT_GROUP = "group_chat_device_api";
+    public static final String TABLE_DIVICE_API_CHAT_GROUP_USER = "group_chat_user_device_api";
+    public static final String TABLE_DIVICE_API_MESSAGE = "message_device_api";
+    public static final String TABLE_DIVICE_API_FAVOR_MESSAGE = "favor_message_device_api";
 
     /** The Constant SUNTEK_MESSAGE_CONTENT_URI. */
     public static final Uri SUNTEK_MESSAGE_CONTENT_URI = Uri.parse("content://" + MESSAGE_AUTHORITY + "/" + TABLE_RICH_MESSAGE);
 
     /** The Constant CHAT_GROUP_CONTENT_URI. */
     public static final Uri CHAT_GROUP_CONTENT_URI = Uri.parse("content://" + MESSAGE_AUTHORITY + "/" + TABLE_CHAT_GROUP);
+    
+    /** 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);
+    
+    /** The Constant GROUP_CHAT_USER_DIVICE_API_CONTENT_URI. */
+    public static final Uri GROUP_CHAT_USER_DIVICE_API_CONTENT_URI = Uri.parse("content://" + MESSAGE_AUTHORITY + "/" + TABLE_DIVICE_API_CHAT_GROUP_USER);
+    
+    /** The Constant MESSAGE_DIVICE_API_CONTENT_URI. */
+    public static final Uri MESSAGE_DIVICE_API_CONTENT_URI = Uri.parse("content://" + MESSAGE_AUTHORITY + "/" + TABLE_DIVICE_API_MESSAGE);
+    
+    /** The Constant FAVOR_MESSAGE_DIVICE_API_CONTENT_URI. */
+    public static final Uri FAVOR_MESSAGE_DIVICE_API_CONTENT_URI = Uri.parse("content://" + MESSAGE_AUTHORITY + "/" + TABLE_DIVICE_API_FAVOR_MESSAGE);
 
     /**
      * Chat type about one to one.
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/SuntekMessageDbSlct.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/SuntekMessageDbSlct.java
similarity index 97%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/SuntekMessageDbSlct.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/SuntekMessageDbSlct.java
index b919d8a..78bf56f 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/SuntekMessageDbSlct.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/SuntekMessageDbSlct.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.provider;
+package com.suntek.mway.rcs.client.aidl.provider;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -32,9 +31,9 @@
 import android.content.Context;
 import android.database.Cursor;
 
-import com.suntek.mway.rcs.client.api.provider.model.ChatMessage;
-import com.suntek.mway.rcs.client.api.provider.model.ChatThread;
-import com.suntek.mway.rcs.client.api.provider.model.GroupChatModel;
+import com.suntek.mway.rcs.client.aidl.provider.model.ChatMessage;
+import com.suntek.mway.rcs.client.aidl.provider.model.ChatThread;
+import com.suntek.mway.rcs.client.aidl.provider.model.GroupChatModel;
 
 /**
  * <p>Title: SuntekMessageDbSlct class</p>
@@ -199,7 +198,7 @@
      * Transform a record pointed by an android.database.Cursor to
      * a chat message information represented by class {@link com.suntek.mway.rcs.client.api.contacts.ChatMessage}
      * @param cursor an android.database.Cursor
-     * @return a chat message information represented by class {@link  com.suntek.mway.rcs.client.api.provider.model.ChatMessage}
+     * @return a chat message information represented by class {@link  com.suntek.mway.rcs.client.aidl.provider.model.ChatMessage}
      */
     private ChatMessage cursorToChatMessage(Cursor cursor) {
         int id = cursor.getInt(cursor.getColumnIndex(SuntekMessageData.KEY_ID));
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/ChatMessage.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/ChatMessage.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/ChatMessage.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/ChatMessage.aidl
index bbff80b..5fc4323 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/ChatMessage.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/ChatMessage.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 parcelable ChatMessage;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/ChatMessage.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/ChatMessage.java
similarity index 92%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/ChatMessage.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/ChatMessage.java
index 71632af..c386337 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/ChatMessage.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/ChatMessage.java
@@ -1,26 +1,32 @@
 /*
- * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
- * pci-suntektech Technologies Proprietary and Confidential.
+ * Copyright (c) 2014, The Linux Foundation. All rights reserved.
  *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-package com.suntek.mway.rcs.client.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/ChatThread.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/ChatThread.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/ChatThread.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/ChatThread.java
index 77a251c..dd44d81 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/ChatThread.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/ChatThread.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/CloudFileMessage.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/CloudFileMessage.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/CloudFileMessage.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/CloudFileMessage.java
index 94f1903..b480777 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/CloudFileMessage.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/CloudFileMessage.java
@@ -20,7 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
-package com.suntek.mway.rcs.client.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/FavoriteMessage.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/FavoriteMessage.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/FavoriteMessage.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/FavoriteMessage.aidl
index d46dc0e..f47212f 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/FavoriteMessage.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/FavoriteMessage.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 parcelable FavoriteMessage;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/FavoriteMessage.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/FavoriteMessage.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/FavoriteMessage.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/FavoriteMessage.java
index c2419f9..99c230b 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/FavoriteMessage.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/FavoriteMessage.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/GroupChatModel.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupChatModel.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/GroupChatModel.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupChatModel.aidl
index 343ab30..bc1bfeb 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/GroupChatModel.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupChatModel.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 parcelable GroupChatModel;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/GroupChatModel.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupChatModel.java
similarity index 99%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/GroupChatModel.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupChatModel.java
index da040b1..f8c1a6e 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/GroupChatModel.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupChatModel.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 import java.util.ArrayList;
 import java.util.LinkedList;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/GroupChatUser.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupChatUser.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/GroupChatUser.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupChatUser.aidl
index 61d03ea..301b7eb 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/GroupChatUser.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupChatUser.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 parcelable GroupChatUser;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/GroupChatUser.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupChatUser.java
similarity index 99%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/GroupChatUser.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupChatUser.java
index 68fd4e6..5235ec1 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/GroupChatUser.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupChatUser.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 import android.content.Context;
 import android.database.Cursor;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/GroupNotificationConst.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupNotificationConst.java
similarity index 96%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/GroupNotificationConst.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupNotificationConst.java
index 27d4b5f..2b1417e 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/GroupNotificationConst.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/GroupNotificationConst.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 public class GroupNotificationConst {
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/ImdnNotification.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/ImdnNotification.java
similarity index 97%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/ImdnNotification.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/ImdnNotification.java
index e4fbaa3..4f6217b 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/ImdnNotification.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/ImdnNotification.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 public class ImdnNotification {
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/MMSMessage.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/MMSMessage.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/MMSMessage.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/MMSMessage.aidl
index 86bf9ce..b6c4ede 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/MMSMessage.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/MMSMessage.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 parcelable MMSMessage;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/MMSMessage.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/MMSMessage.java
similarity index 96%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/MMSMessage.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/MMSMessage.java
index d752bb0..571f8e5 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/MMSMessage.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/MMSMessage.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 import android.os.Parcel;
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/MessageSessionModel.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/MessageSessionModel.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/MessageSessionModel.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/MessageSessionModel.aidl
index f13c901..004b733 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/MessageSessionModel.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/MessageSessionModel.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 parcelable MessageSessionModel;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/MessageSessionModel.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/MessageSessionModel.java
similarity index 97%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/MessageSessionModel.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/MessageSessionModel.java
index 7b55335..3b8d2d4 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/MessageSessionModel.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/MessageSessionModel.java
@@ -20,14 +20,13 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 import android.os.Parcel;
 import android.os.Parcelable;
 
-import com.suntek.mway.rcs.client.api.plugin.entity.pubacct.PublicAccounts;
-import com.suntek.mway.rcs.client.api.provider.SuntekMessageData;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.PublicAccounts;
+import com.suntek.mway.rcs.client.aidl.provider.SuntekMessageData;
 
 /**
  * <p>
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/PublicAccount.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicAccount.java
similarity index 99%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/PublicAccount.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicAccount.java
index a2d109e..92a024d 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/PublicAccount.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicAccount.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 /**
  * The Class PublicAccount.
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/PublicMediaMessage.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicMediaMessage.java
similarity index 99%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/PublicMediaMessage.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicMediaMessage.java
index 4ca9e13..9707136 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/PublicMediaMessage.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicMediaMessage.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/PublicMessage.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicMessage.java
similarity index 92%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/PublicMessage.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicMessage.java
index 8a7e661..39bb182 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/PublicMessage.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicMessage.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 import android.os.Parcel;
 import android.os.Parcelable;
@@ -51,6 +50,12 @@
 
     /** The Constant TOPIC MORE. */
     public static final String TOPIC_MORE = "52";
+    
+    /** The Constant LOCATION. */
+    public static final String LOCATION = "19";
+    
+    /** The Constant VCARD. */
+    public static final String VCARD = "18";
 
     /**
      * Instantiates a new public message.
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/PublicTextMessage.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicTextMessage.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/PublicTextMessage.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicTextMessage.java
index f0bcad2..67f1270 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/PublicTextMessage.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicTextMessage.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/PublicTopicMessage.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicTopicMessage.java
similarity index 99%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/PublicTopicMessage.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicTopicMessage.java
index 5dc8d2c..a1f1bcb 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/PublicTopicMessage.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/PublicTopicMessage.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 import java.util.LinkedList;
 import java.util.List;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/SimpleMsg.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/SimpleMsg.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/SimpleMsg.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/SimpleMsg.aidl
index 8f10e72..79f381f 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/SimpleMsg.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/SimpleMsg.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 parcelable SimpleMsg;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/SimpleMsg.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/SimpleMsg.java
similarity index 97%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/SimpleMsg.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/SimpleMsg.java
index 900ef1a..f4846bb 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/SimpleMsg.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/SimpleMsg.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/TopMessageData.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/TopMessageData.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/TopMessageData.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/TopMessageData.aidl
index d92ee01..5008d0c 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/TopMessageData.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/TopMessageData.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 parcelable TopMessageData;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/TopMessageData.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/TopMessageData.java
similarity index 97%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/TopMessageData.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/TopMessageData.java
index a6c69a1..10fbe0d 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/provider/model/TopMessageData.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/provider/model/TopMessageData.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.provider.model;
+package com.suntek.mway.rcs.client.aidl.provider.model;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/registration/IRegistrationApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/registration/IRegistrationApi.aidl
similarity index 95%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/registration/IRegistrationApi.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/registration/IRegistrationApi.aidl
index 06026f2..dc514a7 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/registration/IRegistrationApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/registration/IRegistrationApi.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.registration;
+package com.suntek.mway.rcs.client.aidl.registration;
 
 interface IRegistrationApi {
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/IRcsSettingApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/IRcsSettingApi.aidl
similarity index 89%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/IRcsSettingApi.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/IRcsSettingApi.aidl
index 1c57d48..d8748b7 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/IRcsSettingApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/IRcsSettingApi.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,11 +20,10 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.setting;
+package com.suntek.mway.rcs.client.aidl.setting;
 
-import com.suntek.mway.rcs.client.api.setting.RcsUserProfileInfo;
-import com.suntek.mway.rcs.client.api.setting.SystemInfo;
+import com.suntek.mway.rcs.client.aidl.setting.RcsUserProfileInfo;
+import com.suntek.mway.rcs.client.aidl.setting.SystemInfo;
 
 interface IRcsSettingApi {
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/LoginUser.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/LoginUser.aidl
similarity index 95%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/LoginUser.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/LoginUser.aidl
index c6024be..7361b5c 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/LoginUser.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/LoginUser.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.setting;
+package com.suntek.mway.rcs.client.aidl.setting;
 
 parcelable LoginUser;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/LoginUser.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/LoginUser.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/LoginUser.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/LoginUser.java
index 4c781d5..2942ea4 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/LoginUser.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/LoginUser.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.setting;
+package com.suntek.mway.rcs.client.aidl.setting;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/RcsUserProfileInfo.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/RcsUserProfileInfo.aidl
similarity index 95%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/RcsUserProfileInfo.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/RcsUserProfileInfo.aidl
index de99883..ed01470 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/RcsUserProfileInfo.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/RcsUserProfileInfo.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.setting;
+package com.suntek.mway.rcs.client.aidl.setting;
 
 parcelable RcsUserProfileInfo;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/RcsUserProfileInfo.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/RcsUserProfileInfo.java
similarity index 97%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/RcsUserProfileInfo.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/RcsUserProfileInfo.java
index 9ee3d05..0c4fa6f 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/RcsUserProfileInfo.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/RcsUserProfileInfo.java
@@ -20,10 +20,9 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.setting;
+package com.suntek.mway.rcs.client.aidl.setting;
 
-import com.suntek.mway.rcs.client.api.constant.APIConstant;
+import com.suntek.mway.rcs.client.aidl.constant.APIConstant;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/SystemInfo.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/SystemInfo.aidl
similarity index 95%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/SystemInfo.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/SystemInfo.aidl
index ba36d22..5ada838 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/SystemInfo.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/SystemInfo.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -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.api.setting;
+package com.suntek.mway.rcs.client.aidl.setting;
 
 parcelable SystemInfo;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/SystemInfo.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/SystemInfo.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/SystemInfo.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/SystemInfo.java
index 91cde20..e335227 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/SystemInfo.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/SystemInfo.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.setting;
+package com.suntek.mway.rcs.client.aidl.setting;
 
 import android.os.Parcel;
 import android.os.Parcelable;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/callback/IAccountEventListener.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/callback/IAccountEventListener.aidl
similarity index 94%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/callback/IAccountEventListener.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/callback/IAccountEventListener.aidl
index bc6744e..a7b25bf 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/setting/callback/IAccountEventListener.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/setting/callback/IAccountEventListener.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.setting.callback;
+package com.suntek.mway.rcs.client.aidl.setting.callback;
 
 interface IAccountEventListener
 {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/specialnumber/ISpecialServiceNumApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/specialnumber/ISpecialServiceNumApi.aidl
similarity index 95%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/specialnumber/ISpecialServiceNumApi.aidl
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/specialnumber/ISpecialServiceNumApi.aidl
index 4915fb4..fd14220 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/specialnumber/ISpecialServiceNumApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/specialnumber/ISpecialServiceNumApi.aidl
@@ -1,17 +1,17 @@
 /*
  * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
  * pci-suntektech Technologies Proprietary and Confidential.
- *
+ * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
  * deal in the Software without restriction, including without limitation the
  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  * sell copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- *
+ * 
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- *
+ * 
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.specialnumber;
+package com.suntek.mway.rcs.client.aidl.specialnumber;
 
 interface ISpecialServiceNumApi
 {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/utils/CloseFileUtils.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/utils/CloseFileUtils.java
similarity index 97%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/utils/CloseFileUtils.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/utils/CloseFileUtils.java
index b989194..26b46e6 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/utils/CloseFileUtils.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/utils/CloseFileUtils.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.utils;
+package com.suntek.mway.rcs.client.aidl.utils;
 
 import java.io.Closeable;
 import java.io.IOException;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/utils/FirstInFirstOutBuffer.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/utils/FirstInFirstOutBuffer.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/utils/FirstInFirstOutBuffer.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/utils/FirstInFirstOutBuffer.java
index 7a07a02..80fde73 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/utils/FirstInFirstOutBuffer.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/utils/FirstInFirstOutBuffer.java
@@ -20,9 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
- 
-package com.suntek.mway.rcs.client.api.utils;
+package com.suntek.mway.rcs.client.aidl.utils;
 
 import java.util.Vector;
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/utils/MediaUtils.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/utils/MediaUtils.java
similarity index 82%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/utils/MediaUtils.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/utils/MediaUtils.java
index 00adc84..4b15dd3 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/utils/MediaUtils.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/utils/MediaUtils.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.utils;
+package com.suntek.mway.rcs.client.aidl.utils;
 
 import java.io.File;
 import java.util.Locale;
@@ -31,7 +30,7 @@
 import android.net.Uri;
 import android.text.TextUtils;
 
-import com.suntek.mway.rcs.client.api.constant.MediaConstants;
+import com.suntek.mway.rcs.client.aidl.constant.MediaConstants;
 
 /**
  * The Class MediaUtils.
@@ -99,6 +98,26 @@
     }
 
     /**
+     * Checks if is video file.
+     *
+     * @param fileName the file name
+     * @return true, if is video file
+     */
+    public static boolean isCloudFileAllowedFile(String fileName){
+        if(TextUtils.isEmpty(fileName)){
+            return false;
+        }
+
+        int suffixIndex = fileName.lastIndexOf(".");
+        if(suffixIndex != -1){
+            String suffix = fileName.substring(suffixIndex + 1);
+            return !isCloudFileExcludeSuffix(suffix);
+        }else{
+            return false;
+        }
+    }
+
+    /**
      * Checks if is image suffix.
      *
      * @param suffix the suffix
@@ -139,6 +158,20 @@
 
         return MediaConstants.VIDEO_SUFFIX.indexOf(suffix.toUpperCase(Locale.getDefault())) != -1;
     }
+    
+    /**
+     * Checks if is cloud file exclude suffix.
+     *
+     * @param suffix the suffix
+     * @return true, if is cloud file exclude suffix
+     */
+    public static boolean isCloudFileExcludeSuffix(String suffix){
+        if(TextUtils.isEmpty(suffix)){
+            return false;
+        }
+
+        return MediaConstants.CLOUD_FILE_EXCLUDE_SUFFIX.indexOf(suffix.toUpperCase(Locale.getDefault())) != -1;
+    }
 
     /**
      * Gets the amr file duration.
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/utils/RcsPhoneUtils.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/utils/RcsPhoneUtils.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/utils/RcsPhoneUtils.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/utils/RcsPhoneUtils.java
index ee653de..afbb729 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/utils/RcsPhoneUtils.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/utils/RcsPhoneUtils.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.utils;
+package com.suntek.mway.rcs.client.aidl.utils;
 
 import android.telephony.PhoneNumberUtils;
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/utils/SettingUtils.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/utils/SettingUtils.java
similarity index 98%
rename from rcs_service_aidl/src/com/suntek/mway/rcs/client/api/utils/SettingUtils.java
rename to rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/utils/SettingUtils.java
index eb31973..07a830d 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/utils/SettingUtils.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/utils/SettingUtils.java
@@ -20,8 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
-package com.suntek.mway.rcs.client.api.utils;
+package com.suntek.mway.rcs.client.aidl.utils;
 
 import android.content.Context;
 import android.content.SharedPreferences;
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MediaArticle.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MediaArticle.java
deleted file mode 100644
index c186e4f..0000000
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/MediaArticle.java
+++ /dev/null
@@ -1,492 +0,0 @@
-/*
- * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
- * pci-suntektech Technologies Proprietary and Confidential.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.pubacct;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-
-/**
- * <p>
- * Title: The media article entity
- * </p>
- * <p>
- * Description: The media article entity
- * </p>
- * <p>
- * Copyright: Copyright (c) 2014
- * </p>
- * <p>
- * Company: pci-suntek
- * </p>
- *
- * @author zrq
- * @version 1.0
- *
- */
-public class MediaArticle implements Parcelable
-{
-
-    /** The title. */
-    private String                title;
-
-    /** The author. */
-    private String                author;
-
-    /** The thumb picture link. */
-    private String                thumbLink;
-
-    /** The original picture link. */
-    private String                originalLink;
-
-    /** The source link. */
-    private String                sourceLink;
-
-    /** The main text. */
-    private String                mainText;
-
-    /** The media uuid. */
-    private String                mediaUuid;
-
-    /** The middle link. */
-//    private String                middleLink;
-
-    /** The media type. */
-//    private String                mediaType;
-
-    /** The digest. */
-    private String                digest;
-
-    /** The view type. */
-//    private String                viewType;
-
-    /** The major article. */
-    private int                    majorArticle;
-
-    /** The child articles. */
-//    private List<MediaArticle>    childArticles;
-
-    /**
-     * Instantiates a new media article.
-     */
-    public MediaArticle()
-    {}
-
-    /**
-     * Instantiates a new media article.
-     *
-     * @param source
-     *            the source
-     */
-    public MediaArticle( Parcel source )
-    {
-        readFromParcel( source );
-    }
-
-    /**
-     * The parcel describe contents, defaul is 0.
-     *
-     * @return the int
-     */
-    @Override
-    public int describeContents()
-    {
-        return 0;
-    }
-
-    /**
-     * Write the media article entity to parcel stream. Pay attention to read
-     * and write variables variables sequence should be consistent or not the
-     * correct results
-     *
-     * @param dest
-     *            the dest parcel stream
-     * @param flags
-     *            the flags
-     */
-    @Override
-    public void writeToParcel( Parcel dest, int flags )
-    {
-        dest.writeString( title );
-        dest.writeString( author );
-        dest.writeString( thumbLink );
-        dest.writeString( originalLink );
-        dest.writeString( sourceLink );
-        dest.writeString( mainText );
-        dest.writeString( mediaUuid );
-//        dest.writeString( middleLink );
-//        dest.writeString( mediaType );
-        dest.writeString( digest );
-//        dest.writeString( viewType );
-        dest.writeInt(majorArticle);
-//        dest.writeList( childArticles );
-    }
-
-    /**
-     * Create the media article entity from parcel stream. Pay attention to read
-     * and write variables variables sequence should be consistent or not the
-     * correct results
-     *
-     * @param source
-     *            The parcel stream
-     */
-    public void readFromParcel( Parcel source )
-    {
-        title = source.readString();
-        author = source.readString();
-        thumbLink = source.readString();
-        originalLink = source.readString();
-        sourceLink = source.readString();
-        mainText = source.readString();
-        mediaUuid = source.readString();
-//        middleLink = source.readString();
-//        mediaType = source.readString();
-        digest = source.readString();
-//        viewType = source.readString();
-        majorArticle = source.readInt();
-//        childArticles = new LinkedList<MediaArticle>();
-//        source.readList( childArticles, this.getClass().getClassLoader() );
-    }
-
-    /** The parcel creator. */
-    public static final Parcelable.Creator<MediaArticle>    CREATOR    = new Parcelable.Creator<MediaArticle>() {
-                                                                        @Override
-                                                                        public MediaArticle createFromParcel( Parcel source )
-                                                                        {
-                                                                            return new MediaArticle( source );
-                                                                        }
-
-                                                                        @Override
-                                                                        public MediaArticle[] newArray( int size )
-                                                                        {
-                                                                            return new MediaArticle[ size ];
-                                                                        }
-                                                                    };
-
-    /**
-     * Gets the title.
-     *
-     * @return the title
-     */
-    public String getTitle()
-    {
-        return title;
-    }
-
-    /**
-     * Sets the title.
-     *
-     * @param title
-     *            the new title
-     */
-    public void setTitle( String title )
-    {
-        this.title = title;
-    }
-
-    /**
-     * Gets the author.
-     *
-     * @return the author
-     */
-    public String getAuthor()
-    {
-        return author;
-    }
-
-    /**
-     * Sets the author.
-     *
-     * @param author
-     *            the new author
-     */
-    public void setAuthor( String author )
-    {
-        this.author = author;
-    }
-
-    /**
-     * Gets the thumb picture link.
-     *
-     * @return the thumb picture link
-     */
-    public String getThumbLink()
-    {
-        return thumbLink;
-    }
-
-    /**
-     * Sets the thumb picture link.
-     *
-     * @param thumbLink
-     *            the new thumb picture link
-     */
-    public void setThumbLink( String thumbLink )
-    {
-        this.thumbLink = thumbLink;
-    }
-
-    /**
-     * Gets the original picture link.
-     *
-     * @return the original picture link
-     */
-    public String getOriginalLink()
-    {
-        return originalLink;
-    }
-
-    /**
-     * Sets the original picture link.
-     *
-     * @param originalLink
-     *            the new original picture link
-     */
-    public void setOriginalLink( String originalLink )
-    {
-        this.originalLink = originalLink;
-    }
-
-    /**
-     * Gets the source link.
-     *
-     * @return the source link
-     */
-    public String getSourceLink()
-    {
-        return sourceLink;
-    }
-
-    /**
-     * Sets the source link.
-     *
-     * @param sourceLink
-     *            the new source link
-     */
-    public void setSourceLink( String sourceLink )
-    {
-        this.sourceLink = sourceLink;
-    }
-
-    /**
-     * Gets the main text.
-     *
-     * @return the main text
-     */
-    public String getMainText()
-    {
-        return mainText;
-    }
-
-    /**
-     * Sets the main text.
-     *
-     * @param mainText
-     *            the new main text
-     */
-    public void setMainText( String mainText )
-    {
-        this.mainText = mainText;
-    }
-
-    /**
-     * Gets the media uuid.
-     *
-     * @return the media uuid
-     */
-    public String getMediaUuid()
-    {
-        return mediaUuid;
-    }
-
-    /**
-     * Sets the media uuid.
-     *
-     * @param mediaUuid
-     *            the new media uuid
-     */
-    public void setMediaUuid( String mediaUuid )
-    {
-        this.mediaUuid = mediaUuid;
-    }
-
-    /**
-     * Gets the middle link.
-     *
-     * @return the middle link
-     */
-//    public String getMiddleLink()
-//    {
-//        return middleLink;
-//    }
-
-    /**
-     * Sets the middle link.
-     *
-     * @param middleLink
-     *            the new middle link
-     */
-//    public void setMiddleLink( String middleLink )
-//    {
-//        this.middleLink = middleLink;
-//    }
-
-    /**
-     * Gets the media type.
-     *
-     * @return the media type
-     */
-//    public String getMediaType()
-//    {
-//        return mediaType;
-//    }
-
-    /**
-     * Sets the media type.
-     *
-     * @param mediaType
-     *            the new media type
-     */
-//    public void setMediaType( String mediaType )
-//    {
-//        this.mediaType = mediaType;
-//    }
-
-    /**
-     * Gets the digest.
-     *
-     * @return the digest
-     */
-    public String getDigest()
-    {
-        return digest;
-    }
-
-    /**
-     * Sets the digest.
-     *
-     * @param digest
-     *            the new digest
-     */
-    public void setDigest( String digest )
-    {
-        this.digest = digest;
-    }
-
-    /**
-     * Gets the view type.
-     *
-     * @return the view type
-     */
-//    public String getViewType()
-//    {
-//        return viewType;
-//    }
-
-    /**
-     * Sets the view type.
-     *
-     * @param viewType
-     *            the new view type
-     */
-//    public void setViewType( String viewType )
-//    {
-//        this.viewType = viewType;
-//    }
-
-    /**
-     * Gets the major article.
-     *
-     * @return the major article
-     */
-    public int getMajorArticle()
-    {
-        return majorArticle;
-    }
-
-    /**
-     * Sets the major article.
-     *
-     * @param majorArticle
-     *            the new major article
-     */
-    public void setMajorArticle( int majorArticle )
-    {
-        this.majorArticle = majorArticle;
-    }
-
-    /**
-     * Gets the child articles.
-     *
-     * @return the child articles
-     */
-//    public List<MediaArticle> getChildArticles()
-//    {
-//        return childArticles;
-//    }
-
-    /**
-     * Sets the child articles.
-     *
-     * @param childArticles
-     *            the new child articles
-     */
-//    public void setChildArticles( List<MediaArticle> childArticles )
-//    {
-//        this.childArticles = childArticles;
-//    }
-
-    @Override
-    public String toString() {
-        StringBuffer sbuffer = new StringBuffer();
-        if(null != this.title){
-            sbuffer.append(",title=").append(this.title);
-        }
-        if(null != this.thumbLink){
-            sbuffer.append(",thumbLink=").append(this.thumbLink);
-        }
-        if(null != this.originalLink){
-            sbuffer.append(",originalLink=").append(this.originalLink);
-        }
-        if(null != this.sourceLink){
-            sbuffer.append(",sourceLink=").append(this.sourceLink);
-        }
-        if(null != this.mainText){
-            sbuffer.append(",mainText=").append(this.mainText);
-        }
-        if(null != this.mediaUuid){
-            sbuffer.append(",mediaUuid=").append(this.mediaUuid);
-        }
-        if(null != this.digest){
-            sbuffer.append(",digest=").append(this.digest);
-        }
-        sbuffer.append(",majorArticle=").append(this.majorArticle);
-
-        if(sbuffer.length() > 1){
-            return sbuffer.substring(1).toString();
-        }else{
-            return "";
-        }
-
-    }
-}
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccountConstant.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccountConstant.java
deleted file mode 100644
index 76dcb45..0000000
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/api/plugin/entity/pubacct/PublicAccountConstant.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2014 pci-suntektech Technologies, Inc.  All Rights Reserved.
- * pci-suntektech Technologies Proprietary and Confidential.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
- 
-package com.suntek.mway.rcs.client.api.plugin.entity.pubacct;
-
-public class PublicAccountConstant {
-
-    /** order type: 0 is desc order by the follow time */
-    public static final int ORDER_TYPE_FOLLOWTIME_DESC = 0;
-
-    /** order type: 0 is asc order by the public account */
-    public static final int ORDER_TYPE_ACCOUNT_NAME_ASC = 1;
-
-
-    /** The Constant ACCEPT_STATUS_ACCEPT. */
-    public static final int ACCEPT_STATUS_ACCEPT = 1;
-
-    /** The Constant ACCEPT_STATUS_NOT. */
-    public static final int ACCEPT_STATUS_NOT = 0;
-}
diff --git a/rcs_service_api/rcs_service_api.xml b/rcs_service_api/rcs_service_api.xml
index 15727a6..42642aa 100644
--- a/rcs_service_api/rcs_service_api.xml
+++ b/rcs_service_api/rcs_service_api.xml
@@ -6,7 +6,6 @@
     -->
 
 <permissions>
-
     <library name="com.suntek.mway.rcs.client.api"
             file="/system/framework/rcs_service_api.jar" />
 </permissions>
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/ClientApi.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/ClientApi.java
index 1278397..a30d8c5 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/ClientApi.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/ClientApi.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.api;
 
 import java.util.List;
@@ -33,7 +32,7 @@
 import android.os.RemoteException;
 import android.util.Log;
 
-import com.suntek.mway.rcs.client.api.constant.APIConstant;
+import com.suntek.mway.rcs.client.aidl.constant.APIConstant;
 import com.suntek.mway.rcs.client.api.util.log.LogHelper;
 
 public abstract class ClientApi implements ClientApiInterface {
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/ClientApiInterface.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/ClientApiInterface.java
index d6638af..5decdd0 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/ClientApiInterface.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/ClientApiInterface.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.api;
 
 import android.content.Context;
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/RCSServiceListener.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/RCSServiceListener.java
index 0a157ba..54fdfc6 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/RCSServiceListener.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/RCSServiceListener.java
@@ -20,10 +20,9 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
 package com.suntek.mway.rcs.client.api;
 
-import com.suntek.mway.rcs.client.api.IRCSServiceListener;
+import com.suntek.mway.rcs.client.aidl.IRCSServiceListener;
 
 public abstract class RCSServiceListener extends IRCSServiceListener.Stub{
 }
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/autoconfig/RcsAccountApi.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/autoconfig/RcsAccountApi.java
index 5762fea..e2a2f0a 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/autoconfig/RcsAccountApi.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/autoconfig/RcsAccountApi.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.api.autoconfig;
 
 import java.util.Locale;
@@ -33,10 +32,10 @@
 
 import com.suntek.mway.rcs.client.api.ClientApi;
 import com.suntek.mway.rcs.client.api.autoconfig.callback.AccountEventListener;
-import com.suntek.mway.rcs.client.api.setting.IRcsSettingApi;
-import com.suntek.mway.rcs.client.api.setting.LoginUser;
-import com.suntek.mway.rcs.client.api.setting.RcsUserProfileInfo;
-import com.suntek.mway.rcs.client.api.setting.SystemInfo;
+import com.suntek.mway.rcs.client.aidl.setting.IRcsSettingApi;
+import com.suntek.mway.rcs.client.aidl.setting.LoginUser;
+import com.suntek.mway.rcs.client.aidl.setting.RcsUserProfileInfo;
+import com.suntek.mway.rcs.client.aidl.setting.SystemInfo;
 import com.suntek.mway.rcs.client.api.util.ServiceDisconnectedException;
 import com.suntek.mway.rcs.client.api.util.VerificationUtil;
 import com.suntek.mway.rcs.client.api.util.log.LogHelper;
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/autoconfig/callback/AccountEventListener.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/autoconfig/callback/AccountEventListener.java
index 10dbdcd..779a391 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/autoconfig/callback/AccountEventListener.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/autoconfig/callback/AccountEventListener.java
@@ -20,10 +20,9 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
 package com.suntek.mway.rcs.client.api.autoconfig.callback;
 
-import com.suntek.mway.rcs.client.api.setting.callback.IAccountEventListener;
+import com.suntek.mway.rcs.client.aidl.setting.callback.IAccountEventListener;
 
 public abstract class AccountEventListener extends IAccountEventListener.Stub{
 
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/blacklist/impl/BlackListApi.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/blacklist/impl/BlackListApi.java
index 5609775..1fedd87 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/blacklist/impl/BlackListApi.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/blacklist/impl/BlackListApi.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.api.blacklist.impl;
 
 import java.util.List;
@@ -31,7 +30,7 @@
 import android.os.IBinder;
 
 import com.suntek.mway.rcs.client.api.ClientApi;
-import com.suntek.mway.rcs.client.api.blacklist.IBlackListApi;
+import com.suntek.mway.rcs.client.aidl.blacklist.IBlackListApi;
 import com.suntek.mway.rcs.client.api.util.ServiceDisconnectedException;
 import com.suntek.mway.rcs.client.api.util.VerificationUtil;
 import com.suntek.mway.rcs.client.api.util.log.LogHelper;
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/capability/callback/CapabiltyListener.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/capability/callback/CapabiltyListener.java
index 1869ede..0e12d30 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/capability/callback/CapabiltyListener.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/capability/callback/CapabiltyListener.java
@@ -20,11 +20,10 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
 package com.suntek.mway.rcs.client.api.capability.callback;
 
 
-import com.suntek.mway.rcs.client.api.plugin.callback.ICapabiltyListener;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.ICapabiltyListener;
 
 public abstract class CapabiltyListener extends ICapabiltyListener.Stub{
 
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/capability/impl/CapabilityApi.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/capability/impl/CapabilityApi.java
index 652eff5..6f42951 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/capability/impl/CapabilityApi.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/capability/impl/CapabilityApi.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.api.capability.impl;
 
 import java.util.Locale;
@@ -30,7 +29,7 @@
 import android.os.IBinder;
 
 import com.suntek.mway.rcs.client.api.ClientApi;
-import com.suntek.mway.rcs.client.api.capability.ICapabilityApi;
+import com.suntek.mway.rcs.client.aidl.capability.ICapabilityApi;
 import com.suntek.mway.rcs.client.api.capability.callback.CapabiltyListener;
 import com.suntek.mway.rcs.client.api.util.ServiceDisconnectedException;
 import com.suntek.mway.rcs.client.api.util.VerificationUtil;
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/emoticon/EmoticonApi.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/emoticon/EmoticonApi.java
index bcf034d..2382f99 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/emoticon/EmoticonApi.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/emoticon/EmoticonApi.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.api.emoticon;
 
 import java.util.List;
@@ -32,14 +31,15 @@
 import android.os.IBinder;
 
 import com.suntek.mway.rcs.client.api.ClientApi;
-import com.suntek.mway.rcs.client.api.plugin.callback.IEmoticonCallbackApi;
-import com.suntek.mway.rcs.client.api.plugin.callback.IEmoticonCanSendCallback;
-import com.suntek.mway.rcs.client.api.plugin.callback.IEmoticonPackagesNetCallbackApi;
-import com.suntek.mway.rcs.client.api.plugin.callback.IEmoticonSetSuccessDownListener;
-import com.suntek.mway.rcs.client.api.plugin.entity.emoticon.EmojiPackageBO;
-import com.suntek.mway.rcs.client.api.plugin.entity.emoticon.EmoticonBO;
-import com.suntek.mway.rcs.client.api.plugin.entity.emoticon.ResultBO;
-import com.suntek.mway.rcs.client.api.plugin.entity.emoticon.UserBO;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IEmoticonCallbackApi;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IEmoticonCanSendCallback;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IEmoticonPackagesNetCallbackApi;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IEmoticonSetSuccessDownListener;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.emoticon.EmojiPackageBO;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.emoticon.EmoticonBO;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.emoticon.ResultBO;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.emoticon.UserBO;
+import com.suntek.mway.rcs.client.aidl.emoticon.IEmoticonApi;
 import com.suntek.mway.rcs.client.api.util.ServiceDisconnectedException;
 import com.suntek.mway.rcs.client.api.util.VerificationUtil;
 import com.suntek.mway.rcs.client.api.util.log.LogHelper;
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/exception/MemberFullException.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/exception/MemberFullException.java
index 0c99765..51fe1ff 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/exception/MemberFullException.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/exception/MemberFullException.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.api.exception;
 
 /**
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/exception/OperatorException.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/exception/OperatorException.java
index ff816f8..6249910 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/exception/OperatorException.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/exception/OperatorException.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.api.exception;
 
 /**
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 3e17e4a..e634e11 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
@@ -20,7 +20,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
+
 package com.suntek.mway.rcs.client.api.im.impl;
 
 import java.util.List;
@@ -31,16 +31,16 @@
 import android.os.IBinder;
 
 import com.suntek.mway.rcs.client.api.ClientApi;
-import com.suntek.mway.rcs.client.api.constant.APIConstant;
-import com.suntek.mway.rcs.client.api.contacts.RCSContact;
+import com.suntek.mway.rcs.client.aidl.constant.APIConstant;
+import com.suntek.mway.rcs.client.aidl.contacts.RCSContact;
 import com.suntek.mway.rcs.client.api.exception.OperatorException;
-import com.suntek.mway.rcs.client.api.im.IInstantMessageApi;
-import com.suntek.mway.rcs.client.api.provider.model.ChatMessage;
-import com.suntek.mway.rcs.client.api.provider.model.FavoriteMessage;
-import com.suntek.mway.rcs.client.api.provider.model.GroupChatModel;
-import com.suntek.mway.rcs.client.api.provider.model.MessageSessionModel;
-import com.suntek.mway.rcs.client.api.provider.model.SimpleMsg;
-import com.suntek.mway.rcs.client.api.provider.model.TopMessageData;
+import com.suntek.mway.rcs.client.aidl.im.IInstantMessageApi;
+import com.suntek.mway.rcs.client.aidl.provider.model.ChatMessage;
+import com.suntek.mway.rcs.client.aidl.provider.model.FavoriteMessage;
+import com.suntek.mway.rcs.client.aidl.provider.model.GroupChatModel;
+import com.suntek.mway.rcs.client.aidl.provider.model.MessageSessionModel;
+import com.suntek.mway.rcs.client.aidl.provider.model.SimpleMsg;
+import com.suntek.mway.rcs.client.aidl.provider.model.TopMessageData;
 import com.suntek.mway.rcs.client.api.util.FileDurationException;
 import com.suntek.mway.rcs.client.api.util.FileSuffixException;
 import com.suntek.mway.rcs.client.api.util.FileTransferException;
@@ -53,6 +53,7 @@
     private static String serviceName = "com.suntek.mway.rcs.app.service.api.impl.im.MessageApiService";
 
     IInstantMessageApi myApi;
+
     private ServiceConnection mConnection = new ServiceConnection() {
         public void onServiceConnected(ComponentName className, IBinder service) {
             LogHelper.d("client api connect service");
@@ -61,13 +62,12 @@
         }
 
         public void onServiceDisconnected(ComponentName className) {
-            if(isNormallyClosed || reconnectionTimes > MAX_RECONECTION_TIMES) {
+            if (isNormallyClosed || reconnectionTimes > MAX_RECONECTION_TIMES) {
                 LogHelper.d("client api disconnect service");
                 myApi = null;
                 notifyServiceDisconnected();
             } else {
-                LogHelper.d("illegal call client api disconnect service :"
-                        + reconnectionTimes);
+                LogHelper.d("illegal call client api disconnect service :" + reconnectionTimes);
                 init(context, rcsListener);
                 if (!isBinded()) {
                     // app is uninstalled
@@ -85,8 +85,8 @@
         super.initServiceConnect(mConnection);
     }
 
-    public void sendTextMessage(long thread_id, String number, String text,
-            int burnFlag, int barCycle) throws ServiceDisconnectedException {
+    public void sendTextMessage(long thread_id, String number, String text, int burnFlag,
+            int barCycle) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper
                 .i(String.format(
@@ -110,22 +110,22 @@
             return;
         }
         try {
-            myApi.sendTextMessage(thread_id, VerificationUtil.formatNumber(number), text, burnFlag, barCycle);
+            myApi.sendTextMessage(thread_id, VerificationUtil.formatNumber(number), text, burnFlag,
+                    barCycle);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendImageFile(long thread_id, long sms_id, String number,
-            String filePath, int burnFlag, int barCycle, int quality)
-            throws ServiceDisconnectedException, FileSuffixException, FileTransferException {
+    public void sendImageFile(long thread_id, long sms_id, String number, String filePath,
+            int burnFlag, int barCycle, int quality) throws ServiceDisconnectedException,
+            FileSuffixException, FileTransferException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper
                 .i(String.format(
                         Locale.getDefault(),
                         "enter method sendImageFile. [thread_id,sms_id,number,filePath,burnFlag,barCycle,quality]=%d,%d,%s,%s,%d,%d,%d",
-                        thread_id, sms_id, number, filePath, burnFlag,
-                        barCycle, quality));
+                        thread_id, sms_id, number, filePath, burnFlag, barCycle, quality));
         VerificationUtil.isImageFile(filePath);
 
         if (!VerificationUtil.isNumber(number)) {
@@ -145,33 +145,35 @@
             return;
         }
 
-        if( quality == 100 ) {
+        if (quality == 100) {
             VerificationUtil.isFileSizeToLarge(filePath, this.getImageFtMaxSize());
         }
 
         try {
-            myApi.sendImageFile(thread_id, sms_id, VerificationUtil.formatNumber(number), filePath, burnFlag,
-                    barCycle, quality);
+            myApi.sendImageFile(thread_id, sms_id, VerificationUtil.formatNumber(number), filePath,
+                    burnFlag, barCycle, quality);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendAudioFile(long thread_id, long sms_id, String number,
-            String filePath, int recordTime, int burnFlag, int barCycle, boolean isRecord)
-            throws ServiceDisconnectedException, FileSuffixException, FileTransferException, FileDurationException {
+    public void sendAudioFile(long thread_id, long sms_id, String number, String filePath,
+            int recordTime, int burnFlag, int barCycle, boolean isRecord)
+            throws ServiceDisconnectedException, FileSuffixException, FileTransferException,
+            FileDurationException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper
                 .i(String.format(
                         Locale.getDefault(),
                         "enter method sendAudioFile. [thread_id,sms_id,number,filePath,recordTime,burnFlag,barCycle,isRecord]=%d,%d,%s,%s,%d,%d,%d,%b",
-                        thread_id, sms_id, number, filePath, recordTime,
-                        burnFlag, barCycle, isRecord));
+                        thread_id, sms_id, number, filePath, recordTime, burnFlag, barCycle,
+                        isRecord));
         VerificationUtil.isAudioFile(filePath);
-        if(isRecord){
-            VerificationUtil.isAudioDurationToLong(context, filePath, this.getAudioMaxTime(), recordTime);//VerificationUtil.getAudioMaxTime(context)
+        if (isRecord) {
+            VerificationUtil.isAudioDurationToLong(context, filePath, this.getAudioMaxTime(),
+                    recordTime);// VerificationUtil.getAudioMaxTime(context)
         }
-        VerificationUtil.isFileSizeToLarge(filePath, this.getVideoFtMaxSize());//VerificationUtil.getVideoFtMaxSize(context)
+        VerificationUtil.isFileSizeToLarge(filePath, this.getVideoFtMaxSize());// VerificationUtil.getVideoFtMaxSize(context)
         if (!VerificationUtil.isNumber(number)) {
             LogHelper.i("number field value error");
             return;
@@ -192,21 +194,22 @@
         }
     }
 
-    public void sendVideoFile(long thread_id, long sms_id, String number,
-            String filePath, int length, int burnFlag, int barCycle, boolean isRecord)
-            throws ServiceDisconnectedException, FileSuffixException, FileTransferException, FileDurationException {
+    public void sendVideoFile(long thread_id, long sms_id, String number, String filePath,
+            int length, int burnFlag, int barCycle, boolean isRecord)
+            throws ServiceDisconnectedException, FileSuffixException, FileTransferException,
+            FileDurationException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper
                 .i(String.format(
                         Locale.getDefault(),
                         "enter method sendVideoFile. [thread_id,sms_id,number,filePath,length,burnFlag,barCycle,isRecord]=%d,%d,%s,%s,%d,%d,%d,%b",
-                        thread_id, sms_id, number, filePath, length, burnFlag,
-                        barCycle, isRecord));
+                        thread_id, sms_id, number, filePath, length, burnFlag, barCycle, isRecord));
         VerificationUtil.isVideoFile(filePath);
-        if(isRecord){
-            VerificationUtil.isVedioDurationToLong(context, filePath, this.getVideoMaxTime(), length);//VerificationUtil.getVideoMaxTime(context)
+        if (isRecord) {
+            VerificationUtil.isVedioDurationToLong(context, filePath, this.getVideoMaxTime(),
+                    length);// VerificationUtil.getVideoMaxTime(context)
         }
-        VerificationUtil.isFileSizeToLarge(filePath, this.getVideoFtMaxSize());//VerificationUtil.getVideoFtMaxSize(context)
+        VerificationUtil.isFileSizeToLarge(filePath, this.getVideoFtMaxSize());// VerificationUtil.getVideoFtMaxSize(context)
         if (!VerificationUtil.isNumber(number)) {
             LogHelper.i("number field value error");
             return;
@@ -220,16 +223,15 @@
             return;
         }
         try {
-            myApi.sendVideoFile(thread_id, sms_id, VerificationUtil.formatNumber(number), filePath, length,
-                    burnFlag, barCycle);
+            myApi.sendVideoFile(thread_id, sms_id, VerificationUtil.formatNumber(number), filePath,
+                    length, burnFlag, barCycle);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendLocation(long thread_id, long sms_id, String number,
-            double lat, double lng, String text)
-            throws ServiceDisconnectedException {
+    public void sendLocation(long thread_id, long sms_id, String number, double lat, double lng,
+            String text) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper
                 .i(String.format(
@@ -241,41 +243,36 @@
             return;
         }
         try {
-            myApi.sendLocation(thread_id, sms_id, VerificationUtil.formatNumber(number), lat, lng, text);
+            myApi.sendLocation(thread_id, sms_id, VerificationUtil.formatNumber(number), lat, lng,
+                    text);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendPaidEmo(long thread_id, long sms_id, String number,
-            String emoid, String emoName)
+    public void sendPaidEmo(long thread_id, long sms_id, String number, String emoid, String emoName)
             throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper
-                .i(String.format(
-                        Locale.getDefault(),
-                        "enter method sendPaidEmo. [thread_id,sms_id,number,emoid,emoName]=%d,%d,%s,%s,%s",
-                        thread_id, sms_id, number, emoid, emoName));
+        LogHelper.i(String.format(Locale.getDefault(),
+                "enter method sendPaidEmo. [thread_id,sms_id,number,emoid,emoName]=%d,%d,%s,%s,%s",
+                thread_id, sms_id, number, emoid, emoName));
         if (!VerificationUtil.isNumber(number)) {
             LogHelper.i("number field value error");
             return;
         }
         try {
-            myApi.sendPaidEmo(thread_id, sms_id, number, emoid,
-                    emoName);
+            myApi.sendPaidEmo(thread_id, sms_id, number, emoid, emoName);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendVCard(long thread_id, long sms_id, String number,
-            RCSContact rcsContact) throws ServiceDisconnectedException {
+    public void sendVCard(long thread_id, long sms_id, String number, RCSContact rcsContact)
+            throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper
-                .i(String.format(
-                        Locale.getDefault(),
-                        "enter method sendVCard. [thread_id,sms_id,number,rcsContact]=%d,%d,%s,%s",
-                        thread_id, sms_id, number, rcsContact.toString()));
+        LogHelper.i(String.format(Locale.getDefault(),
+                "enter method sendVCard. [thread_id,sms_id,number,rcsContact]=%d,%d,%s,%s",
+                thread_id, sms_id, number, rcsContact.toString()));
         if (!VerificationUtil.isNumber(number)) {
             LogHelper.i("number field value error");
             return;
@@ -287,28 +284,26 @@
         }
     }
 
-    public void sendVCard(long thread_id, long sms_id, String number,
-            String vcardFilePath) throws ServiceDisconnectedException {
+    public void sendVCard(long thread_id, long sms_id, String number, String vcardFilePath)
+            throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper
-                .i(String.format(
-                        Locale.getDefault(),
-                        "enter method sendVCard. [thread_id,sms_id,number,vcardFilePath]=%d,%d,%s,%s",
-                        thread_id, sms_id, number, vcardFilePath));
+        LogHelper.i(String.format(Locale.getDefault(),
+                "enter method sendVCard. [thread_id,sms_id,number,vcardFilePath]=%d,%d,%s,%s",
+                thread_id, sms_id, number, vcardFilePath));
         if (!VerificationUtil.isNumber(number)) {
             LogHelper.i("number field value error");
             return;
         }
         try {
-            myApi.sendVCardByPath(thread_id, sms_id, VerificationUtil.formatNumber(number), vcardFilePath);
+            myApi.sendVCardByPath(thread_id, sms_id, VerificationUtil.formatNumber(number),
+                    vcardFilePath);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendOne2ManyTextMessage(long thread_id, List<String> numbers,
-            String text, int burnFlag, int barCycle)
-            throws ServiceDisconnectedException {
+    public void sendOne2ManyTextMessage(long thread_id, List<String> numbers, String text,
+            int burnFlag, int barCycle) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         if ("".equals(text.trim())) {
             LogHelper.i("text value is null/Space");
@@ -332,23 +327,23 @@
             return;
         }
         try {
-            myApi.sendOne2ManyTextMessage(thread_id, VerificationUtil.formatNumbers(numbers), text, burnFlag,
-                    barCycle);
+            myApi.sendOne2ManyTextMessage(thread_id, VerificationUtil.formatNumbers(numbers), text,
+                    burnFlag, barCycle);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendOne2ManyImageFile(long thread_id, long sms_id,
-            List<String> numbers, String filePath, int burnFlag, int barCycle,
-            int quality) throws ServiceDisconnectedException, FileSuffixException, FileTransferException {
+    public void sendOne2ManyImageFile(long thread_id, long sms_id, List<String> numbers,
+            String filePath, int burnFlag, int barCycle, int quality)
+            throws ServiceDisconnectedException, FileSuffixException, FileTransferException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper
                 .i(String.format(
                         Locale.getDefault(),
                         "enter method sendOne2ManyImageFile. [thread_id,sms_id,numbers,filePath,burnFlag,barCycle,quality]=%d,%d,%s,%s,%d,%d,%d",
-                        thread_id, sms_id, numbers.toString(), filePath,
-                        burnFlag, barCycle, quality));
+                        thread_id, sms_id, numbers.toString(), filePath, burnFlag, barCycle,
+                        quality));
         VerificationUtil.isImageFile(filePath);
         if (!VerificationUtil.isAllNumber(numbers)) {
             LogHelper.i("number field value error");
@@ -367,35 +362,35 @@
             return;
         }
 
-        if( quality == 100 ) {
-            VerificationUtil.isFileSizeToLarge(filePath,
-                    VerificationUtil.getImageFtMaxSize(context));
+        if (quality == 100) {
+            VerificationUtil.isFileSizeToLarge(filePath, this.getImageFtMaxSize());
         }
 
         try {
-            myApi.sendOne2ManyImageFile(thread_id, sms_id, VerificationUtil.formatNumbers(numbers), filePath,
-                    burnFlag, barCycle, quality);
+            myApi.sendOne2ManyImageFile(thread_id, sms_id, VerificationUtil.formatNumbers(numbers),
+                    filePath, burnFlag, barCycle, quality);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendOne2ManyAudioFile(long thread_id, long sms_id,
-            List<String> numbers, String filePath, int recordTime,
-            int burnFlag, int barCycle, boolean isRecord) throws ServiceDisconnectedException, FileSuffixException, FileTransferException, FileDurationException {
+    public void sendOne2ManyAudioFile(long thread_id, long sms_id, List<String> numbers,
+            String filePath, int recordTime, int burnFlag, int barCycle, boolean isRecord)
+            throws ServiceDisconnectedException, FileSuffixException, FileTransferException,
+            FileDurationException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper
                 .i(String.format(
                         Locale.getDefault(),
                         "enter method sendOne2ManyAudioFile. [thread_id,sms_id,numbers,filePath,recordTime,burnFlag,barCycle,isRecord]=%d,%d,%s,%s,%d,%d,%d,%b",
-                        thread_id, sms_id, numbers.toString(), filePath,
-                        recordTime, burnFlag, barCycle, isRecord));
+                        thread_id, sms_id, numbers.toString(), filePath, recordTime, burnFlag,
+                        barCycle, isRecord));
         VerificationUtil.isAudioFile(filePath);
-        if(isRecord){
-            VerificationUtil.isAudioDurationToLong(context, filePath, VerificationUtil.getAudioMaxTime(context), recordTime);
+        if (isRecord) {
+            VerificationUtil.isAudioDurationToLong(context, filePath, this.getAudioMaxTime(),
+                    recordTime);
         }
-        VerificationUtil.isFileSizeToLarge(filePath,
-                VerificationUtil.getVideoFtMaxSize(context));
+        VerificationUtil.isFileSizeToLarge(filePath, this.getVideoFtMaxSize());
         if (!VerificationUtil.isAllNumber(numbers)) {
             LogHelper.i("number field value error");
             return;
@@ -409,29 +404,30 @@
             return;
         }
         try {
-            myApi.sendOne2ManyAudioFile(thread_id, sms_id, VerificationUtil.formatNumbers(numbers), filePath,
-                    recordTime, burnFlag, barCycle);
+            myApi.sendOne2ManyAudioFile(thread_id, sms_id, VerificationUtil.formatNumbers(numbers),
+                    filePath, recordTime, burnFlag, barCycle);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendOne2ManyVideoFile(long thread_id, long sms_id,
-            List<String> numbers, String filePath, int length, int burnFlag,
-            int barCycle, boolean isRecord) throws ServiceDisconnectedException, FileSuffixException, FileTransferException, FileDurationException {
+    public void sendOne2ManyVideoFile(long thread_id, long sms_id, List<String> numbers,
+            String filePath, int length, int burnFlag, int barCycle, boolean isRecord)
+            throws ServiceDisconnectedException, FileSuffixException, FileTransferException,
+            FileDurationException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper
                 .i(String.format(
                         Locale.getDefault(),
                         "enter method sendOne2ManyVideoFile. [thread_id,sms_id,numbers,filePath,length,burnFlag,barCycle,isRecord]=%d,%d,%s,%s,%d,%d,%d,%b",
-                        thread_id, sms_id, numbers.toString(), filePath,
-                        length, burnFlag, barCycle, isRecord));
+                        thread_id, sms_id, numbers.toString(), filePath, length, burnFlag,
+                        barCycle, isRecord));
         VerificationUtil.isVideoFile(filePath);
-        if(isRecord){
-            VerificationUtil.isVedioDurationToLong(context, filePath, VerificationUtil.getVideoMaxTime(context), length);
+        if (isRecord) {
+            VerificationUtil.isVedioDurationToLong(context, filePath, this.getVideoMaxTime(),
+                    length);
         }
-        VerificationUtil.isFileSizeToLarge(filePath,
-                VerificationUtil.getVideoFtMaxSize(context));
+        VerificationUtil.isFileSizeToLarge(filePath, this.getVideoFtMaxSize());
         if (!VerificationUtil.isAllNumber(numbers)) {
             LogHelper.i("number field value error");
             return;
@@ -445,16 +441,15 @@
             return;
         }
         try {
-            myApi.sendOne2ManyVideoFile(thread_id, sms_id, VerificationUtil.formatNumbers(numbers), filePath,
-                    length, burnFlag, barCycle);
+            myApi.sendOne2ManyVideoFile(thread_id, sms_id, VerificationUtil.formatNumbers(numbers),
+                    filePath, length, burnFlag, barCycle);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendOne2ManyLocation(long thread_id, long sms_id,
-            List<String> numbers, double lat, double lng, String text)
-            throws ServiceDisconnectedException {
+    public void sendOne2ManyLocation(long thread_id, long sms_id, List<String> numbers, double lat,
+            double lng, String text) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper
                 .i(String.format(
@@ -466,16 +461,15 @@
             return;
         }
         try {
-            myApi.sendOne2ManyLocation(thread_id, sms_id, VerificationUtil.formatNumbers(numbers), lat, lng,
-                    text);
+            myApi.sendOne2ManyLocation(thread_id, sms_id, VerificationUtil.formatNumbers(numbers),
+                    lat, lng, text);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendGroupMessage(long thread_id, String conversationId,
-            long sms_id, String msg, String groupId)
-            throws ServiceDisconnectedException {
+    public void sendGroupMessage(long thread_id, String conversationId, long sms_id, String msg,
+            String groupId) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         if ("".equals(msg.trim())) {
             LogHelper.i("msg value is null/Space");
@@ -487,139 +481,125 @@
                         "enter method sendGroupMessage. [thread_id,conversationId,sms_id,msg,groupId]=%d,%s,%d,%s,%s",
                         thread_id, conversationId, sms_id, msg, groupId));
         try {
-            myApi.sendGroupMessage(thread_id, conversationId, sms_id, msg,
-                    groupId);
+            myApi.sendGroupMessage(thread_id, conversationId, sms_id, msg, groupId);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendGroupImageFile(long thread_id, String conversationId,
-            long sms_id, String filepath, String groupId, int quality)
-            throws ServiceDisconnectedException, FileSuffixException, FileTransferException {
+    public void sendGroupImageFile(long thread_id, String conversationId, long sms_id,
+            String filepath, String groupId, int quality) throws ServiceDisconnectedException,
+            FileSuffixException, FileTransferException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper
                 .i(String.format(
                         Locale.getDefault(),
                         "enter method sendGroupImageFile. [thread_id,conversationId,sms_id,filepath,groupId,quality]=%d,%s,%d,%s,%s,%d",
-                        thread_id, conversationId, sms_id, filepath, groupId,
-                        quality));
+                        thread_id, conversationId, sms_id, filepath, groupId, quality));
         VerificationUtil.isImageFile(filepath);
         if (quality < 0 || quality > 100) {
             LogHelper.i("quality field value must be between 0 to 100");
             return;
         }
 
-        if( quality == 100 ) {
-            VerificationUtil.isFileSizeToLarge(filepath,
-                    VerificationUtil.getImageFtMaxSize(context));
+        if (quality == 100) {
+            VerificationUtil.isFileSizeToLarge(filepath, this.getImageFtMaxSize());
         }
 
         try {
-            myApi.sendGroupImageFile(thread_id, conversationId, sms_id,
-                    filepath, groupId, quality);
+            myApi.sendGroupImageFile(thread_id, conversationId, sms_id, filepath, groupId, quality);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendGroupAudioFile(long thread_id, String conversationId,
-            long sms_id, String filepath, int recordTime, String groupId, boolean isRecord)
-            throws ServiceDisconnectedException, FileSuffixException, FileTransferException, FileDurationException {
+    public void sendGroupAudioFile(long thread_id, String conversationId, long sms_id,
+            String filepath, int recordTime, String groupId, boolean isRecord)
+            throws ServiceDisconnectedException, FileSuffixException, FileTransferException,
+            FileDurationException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper
                 .i(String.format(
                         Locale.getDefault(),
                         "enter method sendGroupAudioFile. [thread_id,conversationId,sms_id,filepath,recordTime,groupId,isRecord]=%d,%s,%d,%s,%d,%s,%b",
-                        thread_id, conversationId, sms_id, filepath,
-                        recordTime, groupId, isRecord));
+                        thread_id, conversationId, sms_id, filepath, recordTime, groupId, isRecord));
         VerificationUtil.isAudioFile(filepath);
-        if(isRecord){
-            VerificationUtil.isAudioDurationToLong(context, filepath, VerificationUtil.getAudioMaxTime(context), recordTime);
+        if (isRecord) {
+            VerificationUtil.isAudioDurationToLong(context, filepath, this.getAudioMaxTime(),
+                    recordTime);
         }
-        VerificationUtil.isFileSizeToLarge(filepath,
-                VerificationUtil.getVideoFtMaxSize(context));
+        VerificationUtil.isFileSizeToLarge(filepath, this.getVideoFtMaxSize());
         try {
-            myApi.sendGroupAudioFile(thread_id, conversationId, sms_id,
-                    filepath, recordTime, groupId);
+            myApi.sendGroupAudioFile(thread_id, conversationId, sms_id, filepath, recordTime,
+                    groupId);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendGroupVideoFile(long thread_id, String conversationId,
-            long sms_id, String filepath, int length, String groupId, boolean isRecord)
-            throws ServiceDisconnectedException, FileSuffixException, FileTransferException, FileDurationException {
+    public void sendGroupVideoFile(long thread_id, String conversationId, long sms_id,
+            String filepath, int length, String groupId, boolean isRecord)
+            throws ServiceDisconnectedException, FileSuffixException, FileTransferException,
+            FileDurationException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper
                 .i(String.format(
                         Locale.getDefault(),
                         "enter method sendGroupVideoFile. [thread_id,conversationId,sms_id,filepath,length,groupId,isRecord]=%d,%s,%d,%s,%d,%s,%b",
-                        thread_id, conversationId, sms_id, filepath, length,
-                        groupId, isRecord));
+                        thread_id, conversationId, sms_id, filepath, length, groupId, isRecord));
         VerificationUtil.isVideoFile(filepath);
-        if(isRecord){
-            VerificationUtil.isVedioDurationToLong(context, filepath, VerificationUtil.getVideoMaxTime(context), length);
+        if (isRecord) {
+            VerificationUtil.isVedioDurationToLong(context, filepath, this.getVideoMaxTime(),
+                    length);
         }
-        VerificationUtil.isFileSizeToLarge(filepath,
-                VerificationUtil.getVideoFtMaxSize(context));
+        VerificationUtil.isFileSizeToLarge(filepath, this.getVideoFtMaxSize());
         try {
-            myApi.sendGroupVideoFile(thread_id, conversationId, sms_id,
-                    filepath, length, groupId);
+            myApi.sendGroupVideoFile(thread_id, conversationId, sms_id, filepath, length, groupId);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendGroupLocation(long thread_id, String conversationId,
-            long sms_id, double lat, double lng, String text, String groupId)
-            throws ServiceDisconnectedException {
+    public void sendGroupLocation(long thread_id, String conversationId, long sms_id, double lat,
+            double lng, String text, String groupId) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper
                 .i(String.format(
                         Locale.getDefault(),
                         "enter method sendGroupLocation. [thread_id,conversationId,sms_id,lat,lng,text,groupId]=%d,%s,%d,%f,%f,%s,%s",
-                        thread_id, conversationId, sms_id, lat, lng, text,
-                        groupId));
+                        thread_id, conversationId, sms_id, lat, lng, text, groupId));
         try {
-            myApi.sendGroupLocation(thread_id, conversationId, sms_id, lat,
-                    lng, text, groupId);
+            myApi.sendGroupLocation(thread_id, conversationId, sms_id, lat, lng, text, groupId);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendGroupVCard(long thread_id, String conversationId,
-            long sms_id, RCSContact rcsContact, String groupId)
-            throws ServiceDisconnectedException {
+    public void sendGroupVCard(long thread_id, String conversationId, long sms_id,
+            RCSContact rcsContact, String groupId) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper
                 .i(String.format(
                         Locale.getDefault(),
                         "enter method sendGroupVCard. [thread_id,conversationId,sms_id,rcsContact,groupId]=%d,%s,%d,%s,%s",
-                        thread_id, conversationId, sms_id,
-                        rcsContact.toString(), groupId));
+                        thread_id, conversationId, sms_id, rcsContact.toString(), groupId));
         try {
-            myApi.sendGroupVCard(thread_id, conversationId, sms_id, rcsContact,
-                    groupId);
+            myApi.sendGroupVCard(thread_id, conversationId, sms_id, rcsContact, groupId);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendGroupVCard(long thread_id, String conversationId,
-            long sms_id, String vcardFilePath, String groupId)
-            throws ServiceDisconnectedException {
+    public void sendGroupVCard(long thread_id, String conversationId, long sms_id,
+            String vcardFilePath, String groupId) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper
                 .i(String.format(
                         Locale.getDefault(),
                         "enter method sendGroupVCard. [thread_id,conversationId,sms_id,vcardFilePath,groupId]=%d,%s,%d,%s,%s",
-                        thread_id, conversationId, sms_id,
-                        vcardFilePath, groupId));
+                        thread_id, conversationId, sms_id, vcardFilePath, groupId));
         try {
-            myApi.sendGroupVCardByPath(thread_id, conversationId, sms_id, vcardFilePath,
-                    groupId);
+            myApi.sendGroupVCardByPath(thread_id, conversationId, sms_id, vcardFilePath, groupId);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
@@ -628,8 +608,7 @@
     public void acceptFile(ChatMessage chatMessage) throws OperatorException,
             ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method acceptFile. [chatMessage]=%s",
+        LogHelper.i(String.format(Locale.getDefault(), "enter method acceptFile. [chatMessage]=%s",
                 chatMessage.toString()));
         try {
             myApi.acceptFile(chatMessage);
@@ -639,12 +618,10 @@
         }
     }
 
-    public boolean interruptFile(ChatMessage chatMessage)
-            throws ServiceDisconnectedException {
+    public boolean interruptFile(ChatMessage chatMessage) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
-                "enter method interruptFile. [chatMessage]=%s",
-                chatMessage.toString()));
+                "enter method interruptFile. [chatMessage]=%s", chatMessage.toString()));
         boolean flag = false;
         try {
             return myApi.interruptFile(chatMessage);
@@ -658,8 +635,7 @@
             throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
-                "enter method getMessageSessionByThreadId. [threadId]=%d",
-                threadId));
+                "enter method getMessageSessionByThreadId. [threadId]=%d", threadId));
         try {
             return myApi.getMessageSessionByThreadId(threadId);
         } catch (Exception ex) {
@@ -668,12 +644,11 @@
         }
     }
 
-    public List<MessageSessionModel> getMessageSessionList(int offset,
-            int number) throws ServiceDisconnectedException {
+    public List<MessageSessionModel> getMessageSessionList(int offset, int number)
+            throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
-                "enter method getMessageSessionList. [offset,number]=%d,%d",
-                offset, number));
+                "enter method getMessageSessionList. [offset,number]=%d,%d", offset, number));
         try {
             return myApi.getMessageSessionList(offset, number);
         } catch (Exception ex) {
@@ -682,14 +657,12 @@
         }
     }
 
-    public List<ChatMessage> getChatMessageList(long threadId, boolean less,
-            int specifiedMsgId, int count) throws ServiceDisconnectedException {
+    public List<ChatMessage> getChatMessageList(long threadId, boolean less, int specifiedMsgId,
+            int count) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper
-                .i(String.format(
-                        Locale.getDefault(),
-                        "enter method getChatMessageList. [threadId,specifiedMsgId,count]=%d,%d,%d",
-                        threadId, specifiedMsgId, count));
+        LogHelper.i(String.format(Locale.getDefault(),
+                "enter method getChatMessageList. [threadId,specifiedMsgId,count]=%d,%d,%d",
+                threadId, specifiedMsgId, count));
         try {
             return myApi.getChatMessageList(threadId, less, specifiedMsgId, count);
         } catch (Exception ex) {
@@ -698,13 +671,10 @@
         }
     }
 
-    public boolean removeMessageByThreadId(long threadId)
-            throws ServiceDisconnectedException {
+    public boolean removeMessageByThreadId(long threadId) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper
-                .i(String.format(Locale.getDefault(),
-                        "enter method removeMessageByThreadId. [threadId]=%d",
-                        threadId));
+        LogHelper.i(String.format(Locale.getDefault(),
+                "enter method removeMessageByThreadId. [threadId]=%d", threadId));
         try {
             myApi.removeMessageByThreadId(threadId);
             return true;
@@ -714,8 +684,7 @@
         }
     }
 
-    public void removeOneMessage(String messageId)
-            throws ServiceDisconnectedException {
+    public void removeOneMessage(String messageId) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
                 "enter method removeOneMessage. [messageId]=%s", messageId));
@@ -728,8 +697,7 @@
 
     public void removeAllMessage() throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method removeAllMessage. "));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method removeAllMessage. "));
         try {
             myApi.removeAllMessage();
         } catch (Exception ex) {
@@ -737,8 +705,8 @@
         }
     }
 
-    public List<ChatMessage> searchMessageByText(String text, int offset,
-            int number, boolean timaAsc) throws ServiceDisconnectedException {
+    public List<ChatMessage> searchMessageByText(String text, int offset, int number,
+            boolean timaAsc) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         try {
             return myApi.searchMessageByText(text, offset, number, timaAsc);
@@ -748,8 +716,7 @@
         }
     }
 
-    public ChatMessage getTheLastMessage(long threadId)
-            throws ServiceDisconnectedException {
+    public ChatMessage getTheLastMessage(long threadId) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
                 "enter method getTheLastMessage. [threadId]=%d", threadId));
@@ -761,12 +728,10 @@
         }
     }
 
-    public String getThreadIdByNumber(List<String> numbers)
-            throws ServiceDisconnectedException {
+    public String getThreadIdByNumber(List<String> numbers) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
-                "enter method getThreadIdByNumber. [numbers]=%s",
-                numbers.toString()));
+                "enter method getThreadIdByNumber. [numbers]=%s", numbers.toString()));
         if (!VerificationUtil.isAllNumber(numbers)) {
             LogHelper.i("number field value error");
             return null;
@@ -781,8 +746,7 @@
 
     public long getNewThreadId() throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method getNewThreadId. "));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method getNewThreadId. "));
         try {
             return myApi.getNewThreadId();
         } catch (Exception ex) {
@@ -791,11 +755,10 @@
         }
     }
 
-    public ChatMessage getMessageById(String rowId)
-            throws ServiceDisconnectedException {
+    public ChatMessage getMessageById(String rowId) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method getMessageById. [rowId]=%s", rowId));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method getMessageById. [rowId]=%s",
+                rowId));
         try {
             return myApi.getMessageById(rowId);
         } catch (Exception ex) {
@@ -804,13 +767,10 @@
         }
     }
 
-    public ChatMessage getMessageByMessageId(String messageId)
-            throws ServiceDisconnectedException {
+    public ChatMessage getMessageByMessageId(String messageId) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper
-                .i(String.format(Locale.getDefault(),
-                        "enter method getMessageByMessageId. [messageId]=%s",
-                        messageId));
+        LogHelper.i(String.format(Locale.getDefault(),
+                "enter method getMessageByMessageId. [messageId]=%s", messageId));
         try {
             return myApi.getMessageByMessageId(messageId);
         } catch (Exception ex) {
@@ -819,8 +779,7 @@
         }
     }
 
-    public GroupChatModel getGroupChatById(String groupId)
-            throws ServiceDisconnectedException {
+    public GroupChatModel getGroupChatById(String groupId) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         try {
             return myApi.getGroupChatById(groupId);
@@ -830,13 +789,10 @@
         }
     }
 
-    public GroupChatModel getGroupChatByThreadId(long threadId)
-            throws ServiceDisconnectedException {
+    public GroupChatModel getGroupChatByThreadId(long threadId) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper
-                .i(String.format(Locale.getDefault(),
-                        "enter method getGroupChatByThreadId. [threadId]=%d",
-                        threadId));
+        LogHelper.i(String.format(Locale.getDefault(),
+                "enter method getGroupChatByThreadId. [threadId]=%d", threadId));
         try {
             return myApi.getGroupChatByThreadId(threadId);
         } catch (Exception ex) {
@@ -845,16 +801,17 @@
         }
     }
 
-    public String getFilepath(ChatMessage message)
-            throws ServiceDisconnectedException {
+    public String getFilepath(ChatMessage message) throws ServiceDisconnectedException {
 
-        //LogHelper.e("error log, enter method getFilepath. [message]=" + message.toString());
+        // LogHelper.e("error log, enter method getFilepath. [message]=" +
+        // message.toString());
 
-        //System.out.println("========enter method getFilepath. [message]=" + message);
+        // System.out.println("========enter method getFilepath. [message]=" +
+        // message);
 
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method getFilepath. [message]=%s", message.toString()));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method getFilepath. [message]=%s",
+                message.toString()));
         try {
             return myApi.getFilepath(message);
         } catch (Exception ex) {
@@ -863,12 +820,10 @@
         }
     }
 
-    public String getThumbFilepath(ChatMessage message)
-            throws ServiceDisconnectedException {
+    public String getThumbFilepath(ChatMessage message) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
-                "enter method getThumbFilepath. [message]=%s",
-                message.toString()));
+                "enter method getThumbFilepath. [message]=%s", message.toString()));
         try {
             return myApi.getThumbFilepath(message);
         } catch (Exception ex) {
@@ -879,8 +834,8 @@
 
     public void topMessage(long threadId) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method topMessage. [threadId]=%d", threadId));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method topMessage. [threadId]=%d",
+                threadId));
         try {
             myApi.topMessage(threadId);
         } catch (Exception ex) {
@@ -888,8 +843,7 @@
         }
     }
 
-    public void cancelTopMessage(long threadId)
-            throws ServiceDisconnectedException {
+    public void cancelTopMessage(long threadId) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
                 "enter method cancelTopMessage. [threadId]=%d", threadId));
@@ -902,8 +856,7 @@
 
     public void backupAllMessage() throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method backupAllMessage. "));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method backupAllMessage. "));
         try {
             myApi.backupAllMessage();
         } catch (Exception ex) {
@@ -913,8 +866,7 @@
 
     public void restoreAllMessage() throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method restoreAllMessage. "));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method restoreAllMessage. "));
         try {
             myApi.restoreAllMessage();
         } catch (Exception ex) {
@@ -922,12 +874,10 @@
         }
     }
 
-    public void collectMessage(List<SimpleMsg> simpleMsgList)
-            throws ServiceDisconnectedException {
+    public void collectMessage(List<SimpleMsg> simpleMsgList) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
-                "enter method collectMessage. [simpleMsgList]=%s",
-                simpleMsgList.toString()));
+                "enter method collectMessage. [simpleMsgList]=%s", simpleMsgList.toString()));
         try {
             myApi.collectMessage(simpleMsgList);
         } catch (Exception ex) {
@@ -935,8 +885,7 @@
         }
     }
 
-    public List<TopMessageData> getTopMsgsInOrder(boolean asc)
-            throws ServiceDisconnectedException {
+    public List<TopMessageData> getTopMsgsInOrder(boolean asc) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
                 "enter method getTopMsgsInOrder. [threadId]=%b", asc));
@@ -948,12 +897,10 @@
         return null;
     }
 
-    public void accuseMessage(final long thread_id, String id)
-            throws ServiceDisconnectedException {
+    public void accuseMessage(final long thread_id, String id) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
-                "enter method accuseMessage. [thread_id,id]=%d,%s", thread_id,
-                id));
+                "enter method accuseMessage. [thread_id,id]=%d,%s", thread_id, id));
         try {
             myApi.accuseMessage(thread_id, id);
         } catch (Exception ex) {
@@ -961,11 +908,10 @@
         }
     }
 
-    public List<ChatMessage> qryNotifyArchiveMsgList()
-            throws ServiceDisconnectedException {
+    public List<ChatMessage> qryNotifyArchiveMsgList() throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method getMessageOfSpecialService. "));
+        LogHelper
+                .i(String.format(Locale.getDefault(), "enter method getMessageOfSpecialService. "));
         try {
             return myApi.getMessageOfSpecialService();
         } catch (Exception ex) {
@@ -974,11 +920,9 @@
         return null;
     }
 
-    public List<ChatMessage> qryNonFriendMsgList()
-            throws ServiceDisconnectedException {
+    public List<ChatMessage> qryNonFriendMsgList() throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method getMessageOfStrangeNumber. "));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method getMessageOfStrangeNumber. "));
         try {
             return myApi.getMessageOfStrangeNumber();
         } catch (Exception ex) {
@@ -990,8 +934,8 @@
     public List<MessageSessionModel> qryNonFriendMsgSessionList()
             throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method qryNonFriendMsgSessionList. "));
+        LogHelper
+                .i(String.format(Locale.getDefault(), "enter method qryNonFriendMsgSessionList. "));
         try {
             return myApi.qryNonFriendMsgSessionList();
         } catch (Exception ex) {
@@ -1013,71 +957,63 @@
         return null;
     }
 
-    public void sendGroupPaidEmo(long thread_id, String conversationId,
-            long sms_id, String emoid, String emoName, String groupId)
-            throws ServiceDisconnectedException {
+    public void sendGroupPaidEmo(long thread_id, String conversationId, long sms_id, String emoid,
+            String emoName, String groupId) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper
                 .i(String.format(
                         Locale.getDefault(),
                         "enter method:sendGroupPaidEmo. [thread_id,conversationId,sms_id,emoid,emoName,groupId]=%d,%s,%d,%s,%s,%s",
-                        thread_id, conversationId, sms_id, emoid,
-                        emoName, groupId));
+                        thread_id, conversationId, sms_id, emoid, emoName, groupId));
         try {
-            myApi.sendGroupPaidEmo(thread_id, conversationId, sms_id, emoid,
-                    emoName, groupId);
+            myApi.sendGroupPaidEmo(thread_id, conversationId, sms_id, emoid, emoName, groupId);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendOne2ManyPaidEmoMessage(long thread_id, long sms_id,
-            List<String> numbers, String emoid, String emoName)
-            throws ServiceDisconnectedException {
+    public void sendOne2ManyPaidEmoMessage(long thread_id, long sms_id, List<String> numbers,
+            String emoid, String emoName) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper
                 .i(String.format(
                         Locale.getDefault(),
                         "enter method:sendOne2ManyPaidEmoMessage. [thread_id,sms_id,numbers,emoid,emoName]=%d,%d,%s,%s,%s",
-                        thread_id, sms_id, numbers.toString(), emoid,
-                        emoName));
+                        thread_id, sms_id, numbers.toString(), emoid, emoName));
         if (!VerificationUtil.isAllNumber(numbers)) {
             LogHelper.i("number field value error");
             return;
         }
         try {
-            myApi.sendOne2ManyPaidEmoMessage(thread_id, sms_id, VerificationUtil.formatNumbers(numbers), emoid,
-                    emoName);
+            myApi.sendOne2ManyPaidEmoMessage(thread_id, sms_id,
+                    VerificationUtil.formatNumbers(numbers), emoid, emoName);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public List<ChatMessage> getMsgListGreatOrLessThanSpecifiedForBlack(
-            long threadId, boolean less, int specifiedId, int number) throws ServiceDisconnectedException {
+    public List<ChatMessage> getMsgListGreatOrLessThanSpecifiedForBlack(long threadId,
+            boolean less, int specifiedId, int number) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper
                 .i(String.format(
                         Locale.getDefault(),
                         "enter method:getMsgListGreatThanSpecifiedForBlack. [threadId,less,specifiedId,number]=%d,%b,%d,%d",
-                        threadId, less, specifiedId,number));
+                        threadId, less, specifiedId, number));
         try {
-            return myApi.getMsgListGreatOrLessThanSpecifiedForBlack(threadId, less,
-                    specifiedId, number);
+            return myApi.getMsgListGreatOrLessThanSpecifiedForBlack(threadId, less, specifiedId,
+                    number);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
         return null;
     }
 
-    public MessageSessionModel getMessageSessionByThreadIdForBlack(
-            String threadId) throws ServiceDisconnectedException {
+    public MessageSessionModel getMessageSessionByThreadIdForBlack(String threadId)
+            throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper
-                .i(String.format(
-                        Locale.getDefault(),
-                        "enter method:getMessageSessionByThreadIdForBlack. [threadId]=%s",
-                        threadId));
+        LogHelper.i(String.format(Locale.getDefault(),
+                "enter method:getMessageSessionByThreadIdForBlack. [threadId]=%s", threadId));
         try {
             return myApi.getMessageSessionByThreadIdForBlack(threadId);
         } catch (Exception ex) {
@@ -1086,14 +1022,12 @@
         return null;
     }
 
-    public List<MessageSessionModel> getMessageSessionListForBlack(int offset,
-            int number) throws ServiceDisconnectedException {
+    public List<MessageSessionModel> getMessageSessionListForBlack(int offset, int number)
+            throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper
-                .i(String.format(
-                        Locale.getDefault(),
-                        "enter method:getMessageSessionListForBlack. [thread_id,number]=%d,%d",
-                        offset, number));
+        LogHelper.i(String.format(Locale.getDefault(),
+                "enter method:getMessageSessionListForBlack. [thread_id,number]=%d,%d", offset,
+                number));
         try {
             return myApi.getMessageSessionListForBlack(offset, number);
         } catch (Exception ex) {
@@ -1106,8 +1040,7 @@
             throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
-                "enter method:getTheLastMsgOfThreadForBlack. [threadId]=%d",
-                threadId));
+                "enter method:getTheLastMsgOfThreadForBlack. [threadId]=%d", threadId));
         try {
             return myApi.getTheLastMsgOfThreadForBlack(threadId);
         } catch (Exception ex) {
@@ -1116,54 +1049,50 @@
         return null;
     }
 
-    public void sendOne2ManyVCard(long thread_id, long sms_id,
-            List<String> numbers, RCSContact rcsContact)
-            throws ServiceDisconnectedException {
+    public void sendOne2ManyVCard(long thread_id, long sms_id, List<String> numbers,
+            RCSContact rcsContact) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper
                 .i(String.format(
                         Locale.getDefault(),
                         "enter method:sendOne2ManyVCard. [thread_id,sms_id,numbers,rcsContact]=%d,%d,%s,%s",
-                        thread_id, sms_id, numbers.toString(),
-                        rcsContact.toString()));
+                        thread_id, sms_id, numbers.toString(), rcsContact.toString()));
         if (!VerificationUtil.isAllNumber(numbers)) {
             LogHelper.i("number field value error");
             return;
         }
         try {
-            myApi.sendOne2ManyVCard(thread_id, sms_id, VerificationUtil.formatNumbers(numbers), rcsContact);
+            myApi.sendOne2ManyVCard(thread_id, sms_id, VerificationUtil.formatNumbers(numbers),
+                    rcsContact);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendOne2ManyVCard(long thread_id, long sms_id,
-            List<String> numbers, String vcardFilePath)
-            throws ServiceDisconnectedException {
+    public void sendOne2ManyVCard(long thread_id, long sms_id, List<String> numbers,
+            String vcardFilePath) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper
                 .i(String.format(
                         Locale.getDefault(),
                         "enter method:sendOne2ManyVCard. [thread_id,sms_id,numbers,vcardFilePath]=%d,%d,%s,%s",
-                        thread_id, sms_id, numbers.toString(),
-                        vcardFilePath));
+                        thread_id, sms_id, numbers.toString(), vcardFilePath));
         if (!VerificationUtil.isAllNumber(numbers)) {
             LogHelper.i("number field value error");
             return;
         }
         try {
-            myApi.sendOne2ManyVCardByPath(thread_id, sms_id, VerificationUtil.formatNumbers(numbers), vcardFilePath);
+            myApi.sendOne2ManyVCardByPath(thread_id, sms_id,
+                    VerificationUtil.formatNumbers(numbers), vcardFilePath);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public int recoveBlackMsgByMessageId(String messageId)
-            throws ServiceDisconnectedException {
+    public int recoveBlackMsgByMessageId(String messageId) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
-                "enter method:recoveBlackMsgByMessageId. [messageId]=%s",
-                messageId));
+                "enter method:recoveBlackMsgByMessageId. [messageId]=%s", messageId));
         try {
             return myApi.recoveBlackMsgByMessageId(messageId);
         } catch (Exception ex) {
@@ -1172,12 +1101,10 @@
         return 0;
     }
 
-    public int recoveBlackMsgByThreadId(long threadId)
-            throws ServiceDisconnectedException {
+    public int recoveBlackMsgByThreadId(long threadId) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
-                "enter method:recoveBlackMsgByThreadId. [threadId]=%d",
-                threadId));
+                "enter method:recoveBlackMsgByThreadId. [threadId]=%d", threadId));
         try {
             return myApi.recoveBlackMsgByThreadId(threadId);
         } catch (Exception ex) {
@@ -1188,8 +1115,7 @@
 
     public int recoveBlackMsgAll() throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method:recoveBlackMsgAll. "));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method:recoveBlackMsgAll. "));
         try {
             return myApi.recoveBlackMsgAll();
         } catch (Exception ex) {
@@ -1198,14 +1124,10 @@
         return 0;
     }
 
-    public void retransmitMessageById(String id)
-            throws ServiceDisconnectedException {
+    public void retransmitMessageById(String id) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper
-                .i(String.format(
-                        Locale.getDefault(),
-                        "enter method:retransmitMessageById. [id]=%s",
-                        id));
+        LogHelper.i(String.format(Locale.getDefault(),
+                "enter method:retransmitMessageById. [id]=%s", id));
         try {
             myApi.retransmitMessageById(id);
         } catch (Exception ex) {
@@ -1213,9 +1135,8 @@
         }
     }
 
-    public void sendDisplayNotification(final String conversationId,
-            final String number, final String messageId)
-            throws ServiceDisconnectedException {
+    public void sendDisplayNotification(final String conversationId, final String number,
+            final String messageId) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper
                 .i(String.format(
@@ -1227,17 +1148,16 @@
             return;
         }
         try {
-            myApi.sendDisplayNotification(conversationId, VerificationUtil.formatNumber(number), messageId);
+            myApi.sendDisplayNotification(conversationId, VerificationUtil.formatNumber(number),
+                    messageId);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public List<GroupChatModel> getAllGroupChat()
-            throws ServiceDisconnectedException {
+    public List<GroupChatModel> getAllGroupChat() throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method:getAllGroupChat. "));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method:getAllGroupChat. "));
         try {
             return myApi.getAllGroupChat();
         } catch (Exception ex) {
@@ -1248,8 +1168,7 @@
 
     public void burnMessage(String id) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method:burnMessage. [id]=%s", id));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method:burnMessage. [id]=%s", id));
         try {
             myApi.burnMessage(id);
         } catch (Exception ex) {
@@ -1261,8 +1180,7 @@
             throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
-                "enter method:cancelCollectSimpleMsg. [simpleMsgList]=%s",
-                simpleMsgList));
+                "enter method:cancelCollectSimpleMsg. [simpleMsgList]=%s", simpleMsgList));
         try {
             myApi.cancelCollectSimpleMsg(simpleMsgList);
         } catch (Exception ex) {
@@ -1270,11 +1188,9 @@
         }
     }
 
-    public List<FavoriteMessage> getFavouriteMessageList()
-            throws ServiceDisconnectedException {
+    public List<FavoriteMessage> getFavouriteMessageList() throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method:getFavouriteMessageList. "));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method:getFavouriteMessageList. "));
         try {
             return myApi.getFavouriteMessageList();
         } catch (Exception ex) {
@@ -1283,11 +1199,10 @@
         return null;
     }
 
-    public void burnMessageAtOnce(String id)
-            throws ServiceDisconnectedException {
+    public void burnMessageAtOnce(String id) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method:burnMessageAtOnce. [id]=%s", id));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method:burnMessageAtOnce. [id]=%s",
+                id));
         try {
             myApi.burnMessageAtOnce(id);
         } catch (Exception ex) {
@@ -1297,8 +1212,7 @@
 
     public String getAccuseNumber() throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method:getAccuseNumber. "));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method:getAccuseNumber. "));
         try {
             return myApi.getAccuseNumber();
         } catch (Exception ex) {
@@ -1307,16 +1221,16 @@
         return null;
     }
 
-    public byte[] getImageThumbnails(String filepath)
-            throws ServiceDisconnectedException {
+    public byte[] getImageThumbnails(String filepath) throws ServiceDisconnectedException {
 
-        //LogHelper.e("error log, enter method getImageThumbnails. [filepath]=" + filepath);
+        // LogHelper.e("error log, enter method getImageThumbnails. [filepath]="
+        // + filepath);
 
-        //System.out.println("========enter method getImageThumbnails. [filepath]=" + filepath);
+        // System.out.println("========enter method getImageThumbnails. [filepath]="
+        // + filepath);
 
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method:getImageThumbnails. "));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method:getImageThumbnails. "));
         try {
             return myApi.getImageThumbnails(filepath);
         } catch (Exception ex) {
@@ -1325,13 +1239,12 @@
         return null;
     }
 
-    public byte[] getVideoThumbnails(String filepath)
-            throws ServiceDisconnectedException {
-        //LogHelper.e("error log, enter method getVideoThumbnails. [filepath]=" + filepath);
+    public byte[] getVideoThumbnails(String filepath) throws ServiceDisconnectedException {
+        // LogHelper.e("error log, enter method getVideoThumbnails. [filepath]="
+        // + filepath);
 
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method:getVideoThumbnails. "));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method:getVideoThumbnails. "));
         try {
             return myApi.getVideoThumbnails(filepath);
         } catch (Exception ex) {
@@ -1342,8 +1255,7 @@
 
     public int getAllUnreadCount() throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method:getAllUnreadCount. "));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method:getAllUnreadCount. "));
         try {
             return myApi.getAllUnreadCount();
         } catch (Exception ex) {
@@ -1352,12 +1264,10 @@
         return 0;
     }
 
-    public int getUnreadMsgCountByThreadId(String threadId)
-            throws ServiceDisconnectedException {
+    public int getUnreadMsgCountByThreadId(String threadId) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
-                "enter method:getUnreadMsgCountByThreadId. [threadId]=%s",
-                threadId));
+                "enter method:getUnreadMsgCountByThreadId. [threadId]=%s", threadId));
         try {
             return myApi.getUnreadMsgCountByThreadId(threadId);
         } catch (Exception ex) {
@@ -1366,12 +1276,10 @@
         return 0;
     }
 
-    public void removeUnreadMessageByThreadId(String threadId)
-            throws ServiceDisconnectedException {
+    public void removeUnreadMessageByThreadId(String threadId) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
-                "enter method:removeUnreadMessageByThreadId. [threadId]=%s",
-                threadId));
+                "enter method:removeUnreadMessageByThreadId. [threadId]=%s", threadId));
         try {
             myApi.removeUnreadMessageByThreadId(threadId);
         } catch (Exception ex) {
@@ -1392,30 +1300,29 @@
     public void setMsgSendPolicy(int policy) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
-                "enter method:setMsgSendPolicy. [policy]=%s",
-                policy));
+                "enter method:setMsgSendPolicy. [policy]=%s", policy));
 
-        switch(policy) {
-        case APIConstant.MSG_SEND_POLICY_AUTO :
-        case APIConstant.MSG_SEND_POLICY_SMS :
-        case APIConstant.MSG_SEND_POLICY_IM :
-            try {
-                myApi.setMsgSendPolicy(policy);
-            } catch (Exception ex) {
-                LogHelper.e(ex.getMessage(), ex);
-            }
-            break ;
+        switch (policy) {
+            case APIConstant.MSG_SEND_POLICY_AUTO:
+            case APIConstant.MSG_SEND_POLICY_SMS:
+            case APIConstant.MSG_SEND_POLICY_IM:
+                try {
+                    myApi.setMsgSendPolicy(policy);
+                } catch (Exception ex) {
+                    LogHelper.e(ex.getMessage(), ex);
+                }
+                break;
 
-            default :
+            default:
                 LogHelper.d("method:setMsgSendPolicy input param not defined, param error.");
-                break ;
+                break;
         }
     }
 
     public int updateMessageRead(String id) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method:updateMessageRead. [id]=%s", id));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method:updateMessageRead. [id]=%s",
+                id));
         try {
             return myApi.updateMessageRead(id);
         } catch (Exception ex) {
@@ -1424,11 +1331,9 @@
         return 0;
     }
 
-    public void uploadFile(ChatMessage chatMessage)
-            throws ServiceDisconnectedException {
+    public void uploadFile(ChatMessage chatMessage) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method:uploadFile. [chatMessage]=%s",
+        LogHelper.i(String.format(Locale.getDefault(), "enter method:uploadFile. [chatMessage]=%s",
                 chatMessage.toString()));
         try {
             myApi.uploadFile(chatMessage);
@@ -1440,8 +1345,7 @@
     public int getPlayTime(int msgType, String data) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
-                "enter method:getPlayTime. [msgType,data]=%d,%s",
-                msgType, data));
+                "enter method:getPlayTime. [msgType,data]=%d,%s", msgType, data));
         try {
             return myApi.getPlayTime(msgType, data);
         } catch (Exception ex) {
@@ -1453,11 +1357,8 @@
     public GroupChatModel getGroupChatByConversationId(String conversationId)
             throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper
-                .i(String.format(
-                        Locale.getDefault(),
-                        "enter method:getGroupChatByConversationId. [conversationId]=%s",
-                        conversationId));
+        LogHelper.i(String.format(Locale.getDefault(),
+                "enter method:getGroupChatByConversationId. [conversationId]=%s", conversationId));
         try {
             return myApi.getGroupChatByConversationId(conversationId);
         } catch (Exception ex) {
@@ -1479,8 +1380,7 @@
 
     public int getSMSSentRemind() throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
-        LogHelper.i(String.format(Locale.getDefault(),
-                "enter method:getSMSSentRemind. "));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method:getSMSSentRemind. "));
         try {
             return myApi.getSMSSentRemind();
         } catch (Exception ex) {
@@ -1490,7 +1390,7 @@
     }
 
     public void burnAllMsgAtOnce() throws ServiceDisconnectedException {
-        LogHelper.i(String.format( Locale.getDefault(),"enter method:burnAllMsgAtOnce. "));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method:burnAllMsgAtOnce. "));
         VerificationUtil.ApiIsNull(myApi);
         try {
             myApi.burnAllMsgAtOnce();
@@ -1499,36 +1399,53 @@
         }
     }
 
-    public void sendComposingMsg(long threadId, String contact, String contentType, int seconds) throws ServiceDisconnectedException {
-        LogHelper.i(String.format( Locale.getDefault(),"enter method:sendComposingMsg. [threadId,contact,contentType,seconds]=%d,%s,%s,%d", threadId,contact,contentType,seconds));
+    public void sendComposingMsg(long threadId, String contact, String contentType, int seconds)
+            throws ServiceDisconnectedException {
+        LogHelper
+                .i(String.format(
+                        Locale.getDefault(),
+                        "enter method:sendComposingMsg. [threadId,contact,contentType,seconds]=%d,%s,%s,%d",
+                        threadId, contact, contentType, seconds));
         VerificationUtil.ApiIsNull(myApi);
         if (!VerificationUtil.isNumber(contact)) {
             LogHelper.i("number field value error");
             return;
         }
         try {
-            myApi.sendComposingMsg(threadId, VerificationUtil.formatNumber(contact), contentType, seconds);
+            myApi.sendComposingMsg(threadId, VerificationUtil.formatNumber(contact), contentType,
+                    seconds);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendCancelComposingMsg(long threadId, String contact, String contentType, long lastActive) throws ServiceDisconnectedException {
-        LogHelper.i(String.format( Locale.getDefault(),"enter method:sendCancelComposingMsg. [threadId,contact,contentType,lastActive]=%d,%s,%s,%d", threadId,contact,contentType,lastActive));
+    public void sendCancelComposingMsg(long threadId, String contact, String contentType,
+            long lastActive) throws ServiceDisconnectedException {
+        LogHelper
+                .i(String.format(
+                        Locale.getDefault(),
+                        "enter method:sendCancelComposingMsg. [threadId,contact,contentType,lastActive]=%d,%s,%s,%d",
+                        threadId, contact, contentType, lastActive));
         VerificationUtil.ApiIsNull(myApi);
         if (!VerificationUtil.isNumber(contact)) {
             LogHelper.i("number field value error");
             return;
         }
         try {
-            myApi.sendCancelComposingMsg(threadId, VerificationUtil.formatNumber(contact), contentType, lastActive);
+            myApi.sendCancelComposingMsg(threadId, VerificationUtil.formatNumber(contact),
+                    contentType, lastActive);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendComposingMsgToGroup(long threadId, int id, String contentType, int seconds) throws ServiceDisconnectedException {
-        LogHelper.i(String.format( Locale.getDefault(),"enter method:sendComposingMsgToGroup. [threadId,id,contentType,seconds]=%d,%d,%s,%d", threadId,id,contentType,seconds));
+    public void sendComposingMsgToGroup(long threadId, int id, String contentType, int seconds)
+            throws ServiceDisconnectedException {
+        LogHelper
+                .i(String.format(
+                        Locale.getDefault(),
+                        "enter method:sendComposingMsgToGroup. [threadId,id,contentType,seconds]=%d,%d,%s,%d",
+                        threadId, id, contentType, seconds));
         VerificationUtil.ApiIsNull(myApi);
         try {
             myApi.sendComposingMsgToGroup(threadId, id, contentType, seconds);
@@ -1537,8 +1454,13 @@
         }
     }
 
-    public void sendCancelComposingMsgToGroup(long threadId, int id, String contentType, long lastActive) throws ServiceDisconnectedException {
-        LogHelper.i(String.format( Locale.getDefault(),"enter method:sendCancelComposingMsgToGroup. [threadId,id,contentType,lastActive]=%d,%d,%s,%d", threadId,id,contentType,lastActive));
+    public void sendCancelComposingMsgToGroup(long threadId, int id, String contentType,
+            long lastActive) throws ServiceDisconnectedException {
+        LogHelper
+                .i(String.format(
+                        Locale.getDefault(),
+                        "enter method:sendCancelComposingMsgToGroup. [threadId,id,contentType,lastActive]=%d,%d,%s,%d",
+                        threadId, id, contentType, lastActive));
         VerificationUtil.ApiIsNull(myApi);
         try {
             myApi.sendCancelComposingMsgToGroup(threadId, id, contentType, lastActive);
@@ -1547,36 +1469,56 @@
         }
     }
 
-    public void sendVCardList(final long thread_id, final long sms_id, final String number, final List<RCSContact> contactList, final int chatType) throws ServiceDisconnectedException {
-        LogHelper.i(String.format( Locale.getDefault(),"enter method:sendVCardList. [thread_id, sms_id, number, contactList, chatType]=%d,%d,%s,%s,%d", thread_id, sms_id, number, contactList.toString(), chatType));
+    public void sendVCardList(final long thread_id, final long sms_id, final String number,
+            final List<RCSContact> contactList, final int chatType)
+            throws ServiceDisconnectedException {
+        LogHelper
+                .i(String.format(
+                        Locale.getDefault(),
+                        "enter method:sendVCardList. [thread_id, sms_id, number, contactList, chatType]=%d,%d,%s,%s,%d",
+                        thread_id, sms_id, number, contactList.toString(), chatType));
         VerificationUtil.ApiIsNull(myApi);
         if (!VerificationUtil.isNumber(number)) {
             LogHelper.i("number field value error");
             return;
         }
         try {
-            myApi.sendVCardList(thread_id, sms_id, VerificationUtil.formatNumber(number), contactList, chatType);
+            myApi.sendVCardList(thread_id, sms_id, VerificationUtil.formatNumber(number),
+                    contactList, chatType);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendOne2ManyVCardList(final long thread_id, final long sms_id, final List<String> numbers, final List<RCSContact> contactList) throws ServiceDisconnectedException {
-        LogHelper.i(String.format( Locale.getDefault(),"enter method:sendOne2ManyVCardList. [thread_id, sms_id, numbers, contactList]=%d,%d,%s,%s", thread_id, sms_id, numbers.toString(), contactList.toString()));
+    public void sendOne2ManyVCardList(final long thread_id, final long sms_id,
+            final List<String> numbers, final List<RCSContact> contactList)
+            throws ServiceDisconnectedException {
+        LogHelper
+                .i(String.format(
+                        Locale.getDefault(),
+                        "enter method:sendOne2ManyVCardList. [thread_id, sms_id, numbers, contactList]=%d,%d,%s,%s",
+                        thread_id, sms_id, numbers.toString(), contactList.toString()));
         VerificationUtil.ApiIsNull(myApi);
         if (!VerificationUtil.isAllNumber(numbers)) {
             LogHelper.i("number field value error");
             return;
         }
         try {
-            myApi.sendOne2ManyVCardList(thread_id, sms_id, VerificationUtil.formatNumbers(numbers), contactList);
+            myApi.sendOne2ManyVCardList(thread_id, sms_id, VerificationUtil.formatNumbers(numbers),
+                    contactList);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
     }
 
-    public void sendGroupVCardList(final long thread_id, final String conversationId, final long sms_id, final List<RCSContact> contactList, final String groupId) throws ServiceDisconnectedException {
-        LogHelper.i(String.format( Locale.getDefault(),"enter method:sendGroupVCardList. [thread_id, conversationId, sms_id, contactList, groupId]=%d,%s,%d,%s,%s", thread_id, conversationId, sms_id, contactList.toString(), groupId));
+    public void sendGroupVCardList(final long thread_id, final String conversationId,
+            final long sms_id, final List<RCSContact> contactList, final String groupId)
+            throws ServiceDisconnectedException {
+        LogHelper
+                .i(String.format(
+                        Locale.getDefault(),
+                        "enter method:sendGroupVCardList. [thread_id, conversationId, sms_id, contactList, groupId]=%d,%s,%d,%s,%s",
+                        thread_id, conversationId, sms_id, contactList.toString(), groupId));
         VerificationUtil.ApiIsNull(myApi);
         try {
             myApi.sendGroupVCardList(thread_id, conversationId, sms_id, contactList, groupId);
@@ -1586,7 +1528,7 @@
     }
 
     public long getImageFtMaxSize() throws ServiceDisconnectedException {
-        LogHelper.i(String.format( Locale.getDefault(),"enter method:getImageFtMaxSize. "));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method:getImageFtMaxSize. "));
         VerificationUtil.ApiIsNull(myApi);
         try {
             return myApi.getImageFtMaxSize();
@@ -1597,7 +1539,7 @@
     }
 
     public long getAudioMaxTime() throws ServiceDisconnectedException {
-        LogHelper.i(String.format( Locale.getDefault(),"enter method:getAudioMaxTime. "));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method:getAudioMaxTime. "));
         VerificationUtil.ApiIsNull(myApi);
         try {
             return myApi.getAudioMaxTime();
@@ -1608,7 +1550,7 @@
     }
 
     public long getVideoMaxTime() throws ServiceDisconnectedException {
-        LogHelper.i(String.format( Locale.getDefault(),"enter method:getVideoMaxTime. "));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method:getVideoMaxTime. "));
         VerificationUtil.ApiIsNull(myApi);
         try {
             return myApi.getVideoMaxTime();
@@ -1619,7 +1561,7 @@
     }
 
     public long getVideoFtMaxSize() throws ServiceDisconnectedException {
-        LogHelper.i(String.format( Locale.getDefault(),"enter method:getVideoFtMaxSize. "));
+        LogHelper.i(String.format(Locale.getDefault(), "enter method:getVideoFtMaxSize. "));
         VerificationUtil.ApiIsNull(myApi);
         try {
             return myApi.getVideoFtMaxSize();
@@ -1629,8 +1571,10 @@
         return 0;
     }
 
-    public void removeMsgWithNotificationByThread(long threadId) throws ServiceDisconnectedException {
-        LogHelper.i(String.format( Locale.getDefault(),"enter method:removeMsgWithNotificationByThread. [threadId]=%d", threadId));
+    public void removeMsgWithNotificationByThread(long threadId)
+            throws ServiceDisconnectedException {
+        LogHelper.i(String.format(Locale.getDefault(),
+                "enter method:removeMsgWithNotificationByThread. [threadId]=%d", threadId));
         VerificationUtil.ApiIsNull(myApi);
         try {
             myApi.removeMsgWithNotificationByThread(threadId);
@@ -1650,4 +1594,17 @@
             LogHelper.e(ex.getMessage(), ex);
         }
     }
+
+    public ChatMessage getMessageByTransferId(String transferId)
+            throws ServiceDisconnectedException {
+        LogHelper.i(String.format(Locale.getDefault(),
+                "enter method:getMessageByTransferId. [transferId]=%s", transferId));
+        VerificationUtil.ApiIsNull(myApi);
+        try {
+            return myApi.getMessageByTransferId(transferId);
+        } catch (Exception ex) {
+            LogHelper.e(ex.getMessage(), ex);
+        }
+        return null;
+    }
 }
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/im/impl/PaMessageApi.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/im/impl/PaMessageApi.java
index ebc9497..1de322f 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/im/impl/PaMessageApi.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/im/impl/PaMessageApi.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.api.im.impl;
 
 import java.util.List;
@@ -32,8 +31,8 @@
 import android.os.RemoteException;
 
 import com.suntek.mway.rcs.client.api.ClientApi;
-import com.suntek.mway.rcs.client.api.contacts.RCSContact;
-import com.suntek.mway.rcs.client.api.im.IPaMessageApi;
+import com.suntek.mway.rcs.client.aidl.contacts.RCSContact;
+import com.suntek.mway.rcs.client.aidl.im.IPaMessageApi;
 import com.suntek.mway.rcs.client.api.util.FileDurationException;
 import com.suntek.mway.rcs.client.api.util.FileSuffixException;
 import com.suntek.mway.rcs.client.api.util.FileTransferException;
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/impl/callback/ConferenceCallback.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/impl/callback/ConferenceCallback.java
index db53e7e..5c6150f 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/impl/callback/ConferenceCallback.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/impl/callback/ConferenceCallback.java
@@ -20,13 +20,12 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
 package com.suntek.mway.rcs.client.api.impl.callback;
 
 import android.os.RemoteException;
 
-import com.suntek.mway.rcs.client.api.plugin.callback.IConferenceCallback;
-import com.suntek.mway.rcs.client.api.plugin.entity.profile.Avatar;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IConferenceCallback;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.profile.Avatar;
 
 public abstract class ConferenceCallback extends IConferenceCallback.Stub {
     public ConferenceCallback() {
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/impl/groupchat/ConfApi.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/impl/groupchat/ConfApi.java
index 5b249be..4919689 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/impl/groupchat/ConfApi.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/impl/groupchat/ConfApi.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.api.impl.groupchat;
 
 import java.util.List;
@@ -33,10 +32,10 @@
 
 import com.suntek.mway.rcs.client.api.ClientApi;
 import com.suntek.mway.rcs.client.api.exception.MemberFullException;
-import com.suntek.mway.rcs.client.api.im.IGroupManagerApi;
+import com.suntek.mway.rcs.client.aidl.im.IGroupManagerApi;
 import com.suntek.mway.rcs.client.api.impl.callback.ConferenceCallback;
-import com.suntek.mway.rcs.client.api.provider.model.GroupChatModel;
-import com.suntek.mway.rcs.client.api.provider.model.GroupChatUser;
+import com.suntek.mway.rcs.client.aidl.provider.model.GroupChatModel;
+import com.suntek.mway.rcs.client.aidl.provider.model.GroupChatUser;
 import com.suntek.mway.rcs.client.api.util.ServiceDisconnectedException;
 import com.suntek.mway.rcs.client.api.util.VerificationUtil;
 import com.suntek.mway.rcs.client.api.util.log.LogHelper;
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/login/impl/LoginApi.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/login/impl/LoginApi.java
index 5b8be6e..94fc388 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/login/impl/LoginApi.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/login/impl/LoginApi.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.api.login.impl;
 
 import java.util.Locale;
@@ -30,8 +29,8 @@
 import android.os.IBinder;
 
 import com.suntek.mway.rcs.client.api.ClientApi;
-import com.suntek.mway.rcs.client.api.login.ILoginApi;
-import com.suntek.mway.rcs.client.api.setting.LoginUser;
+import com.suntek.mway.rcs.client.aidl.login.ILoginApi;
+import com.suntek.mway.rcs.client.aidl.setting.LoginUser;
 import com.suntek.mway.rcs.client.api.util.ServiceDisconnectedException;
 import com.suntek.mway.rcs.client.api.util.VerificationUtil;
 import com.suntek.mway.rcs.client.api.util.log.LogHelper;
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/login/impl/LoginEventListener.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/login/impl/LoginEventListener.java
index 9bd1723..487283b 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/login/impl/LoginEventListener.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/login/impl/LoginEventListener.java
@@ -20,9 +20,8 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
 package com.suntek.mway.rcs.client.api.login.impl;
-import com.suntek.mway.rcs.client.api.login.ILoginEventListener;
+import com.suntek.mway.rcs.client.aidl.login.ILoginEventListener;
 public abstract class LoginEventListener extends ILoginEventListener.Stub{
     public LoginEventListener(){}
 }
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 d732dfd..39038ea 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
@@ -20,22 +20,23 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
 package com.suntek.mway.rcs.client.api.mcloud;
 
-import java.util.List;
-import java.util.Locale;
+import com.suntek.mway.rcs.client.aidl.mcloud.IMcloudFileApi;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile.FileNode;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile.TransNode;
+import com.suntek.mway.rcs.client.api.ClientApi;
+import com.suntek.mway.rcs.client.api.util.FileSuffixException;
+import com.suntek.mway.rcs.client.api.util.ServiceDisconnectedException;
+import com.suntek.mway.rcs.client.api.util.VerificationUtil;
+import com.suntek.mway.rcs.client.api.util.log.LogHelper;
 
 import android.content.ComponentName;
 import android.content.ServiceConnection;
 import android.os.IBinder;
 
-import com.suntek.mway.rcs.client.api.ClientApi;
-import com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile.FileNode;
-import com.suntek.mway.rcs.client.api.plugin.entity.mcloudfile.TransNode;
-import com.suntek.mway.rcs.client.api.util.ServiceDisconnectedException;
-import com.suntek.mway.rcs.client.api.util.VerificationUtil;
-import com.suntek.mway.rcs.client.api.util.log.LogHelper;
+import java.util.List;
+import java.util.Locale;
 
 public class McloudFileApi extends ClientApi {
     private static String serviceName = "com.suntek.mway.rcs.app.service.api.impl.mcloud.McloudApiService";
@@ -95,11 +96,12 @@
         }
     }
 
-    public void putFile(String localPath, String remotePath, TransNode.TransOper transOper) throws ServiceDisconnectedException {
+    public void putFile(String localPath, String remotePath, TransNode.TransOper transOper) throws ServiceDisconnectedException, FileSuffixException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
                 "enter method:putFile. [localPath,remotePath,transOper]=%s,%s,%d",
                 localPath, remotePath, transOper.ordinal()));
+        VerificationUtil.isCloudFile(localPath);
         try {
             myApi.putFile(localPath, remotePath, transOper.ordinal());
         } catch (Exception ex) {
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/mcontact/McontactApi.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/mcontact/McontactApi.java
index d7324e0..d0e6d85 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/mcontact/McontactApi.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/mcontact/McontactApi.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.api.mcontact;
 
 import java.util.Locale;
@@ -30,12 +29,13 @@
 import android.os.IBinder;
 
 import com.suntek.mway.rcs.client.api.ClientApi;
-import com.suntek.mway.rcs.client.api.plugin.callback.IMContactSyncListener;
-import com.suntek.mway.rcs.client.api.plugin.entity.mcontact.IntervalAction;
-import com.suntek.mway.rcs.client.api.plugin.entity.mcontact.SyncAction;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IMContactSyncListener;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.mcontact.IntervalAction;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.mcontact.SyncAction;
 import com.suntek.mway.rcs.client.api.util.ServiceDisconnectedException;
 import com.suntek.mway.rcs.client.api.util.VerificationUtil;
 import com.suntek.mway.rcs.client.api.util.log.LogHelper;
+import com.suntek.mway.rcs.client.aidl.mcontact.IMcontactApi;
 
 public class McontactApi extends ClientApi {
     private static String serviceName = "com.suntek.mway.rcs.app.service.api.impl.mcontact.McontactApiService";
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/plugincenter/PluginCenterApi.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/plugincenter/PluginCenterApi.java
index 5a60e22..0303956 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/plugincenter/PluginCenterApi.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/plugincenter/PluginCenterApi.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.api.plugincenter;
 
 import java.util.Locale;
@@ -34,6 +33,7 @@
 import com.suntek.mway.rcs.client.api.util.ServiceDisconnectedException;
 import com.suntek.mway.rcs.client.api.util.VerificationUtil;
 import com.suntek.mway.rcs.client.api.util.log.LogHelper;
+import com.suntek.mway.rcs.client.aidl.plugincenter.IPluginCenterApi;
 
 public class PluginCenterApi extends ClientApi {
     private static String serviceName = "com.suntek.mway.rcs.app.service.api.impl.plugincenter.PluginCenterApiService";
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/profile/callback/ProfileListener.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/profile/callback/ProfileListener.java
index a8f963c..4f532b3 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/profile/callback/ProfileListener.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/profile/callback/ProfileListener.java
@@ -20,11 +20,10 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
 package com.suntek.mway.rcs.client.api.profile.callback;
 
-import com.suntek.mway.rcs.client.api.plugin.callback.IProfileListener;
-import com.suntek.mway.rcs.client.api.plugin.entity.profile.QRCardImg;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IProfileListener;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.profile.QRCardImg;
 import com.suntek.mway.rcs.client.api.util.log.LogHelper;
 
 public abstract class ProfileListener extends IProfileListener.Stub {
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/profile/callback/QRImgListener.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/profile/callback/QRImgListener.java
index 0357f3c..1b762f1 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/profile/callback/QRImgListener.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/profile/callback/QRImgListener.java
@@ -20,12 +20,11 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
 package com.suntek.mway.rcs.client.api.profile.callback;
 
-import com.suntek.mway.rcs.client.api.plugin.callback.IProfileListener;
-import com.suntek.mway.rcs.client.api.plugin.entity.profile.Avatar;
-import com.suntek.mway.rcs.client.api.plugin.entity.profile.Profile;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IProfileListener;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.profile.Avatar;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.profile.Profile;
 import com.suntek.mway.rcs.client.api.util.log.LogHelper;
 
 public abstract class QRImgListener extends IProfileListener.Stub {
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/profile/impl/ProfileApi.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/profile/impl/ProfileApi.java
index e8d2373..b638f75 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/profile/impl/ProfileApi.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/profile/impl/ProfileApi.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.api.profile.impl;
 
 import java.util.Locale;
@@ -31,10 +30,10 @@
 import android.os.RemoteException;
 
 import com.suntek.mway.rcs.client.api.ClientApi;
-import com.suntek.mway.rcs.client.api.plugin.IProfileApi;
-import com.suntek.mway.rcs.client.api.plugin.callback.IProfileListener;
-import com.suntek.mway.rcs.client.api.plugin.entity.profile.Avatar;
-import com.suntek.mway.rcs.client.api.plugin.entity.profile.Profile;
+import com.suntek.mway.rcs.client.aidl.plugin.IProfileApi;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IProfileListener;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.profile.Avatar;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.profile.Profile;
 import com.suntek.mway.rcs.client.api.profile.callback.ProfileListener;
 import com.suntek.mway.rcs.client.api.profile.callback.QRImgListener;
 import com.suntek.mway.rcs.client.api.util.ServiceDisconnectedException;
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/publicaccount/callback/PublicAccountCallback.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/publicaccount/callback/PublicAccountCallback.java
index 9f6dfd4..ffcfa1f 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/publicaccount/callback/PublicAccountCallback.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/publicaccount/callback/PublicAccountCallback.java
@@ -20,18 +20,17 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
 package com.suntek.mway.rcs.client.api.publicaccount.callback;
 
 import java.util.List;
 
 import android.os.RemoteException;
 
-import com.suntek.mway.rcs.client.api.plugin.callback.IPublicAccountCallbackAPI;
-import com.suntek.mway.rcs.client.api.plugin.entity.pubacct.MenuInfo;
-import com.suntek.mway.rcs.client.api.plugin.entity.pubacct.MsgContent;
-import com.suntek.mway.rcs.client.api.plugin.entity.pubacct.PublicAccounts;
-import com.suntek.mway.rcs.client.api.plugin.entity.pubacct.PublicAccountsDetail;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IPublicAccountCallbackAPI;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.MenuInfo;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.MsgContent;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.PublicAccounts;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.PublicAccountsDetail;
 
 public abstract class PublicAccountCallback extends IPublicAccountCallbackAPI.Stub{
 
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/publicaccount/callback/PublicAccountCallbackImpl.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/publicaccount/callback/PublicAccountCallbackImpl.java
index 333607a..f3cad9f 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/publicaccount/callback/PublicAccountCallbackImpl.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/publicaccount/callback/PublicAccountCallbackImpl.java
@@ -20,17 +20,16 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  * IN THE SOFTWARE.
  */
- 
 package com.suntek.mway.rcs.client.api.publicaccount.callback;
 
 import java.util.List;
 
 import android.os.RemoteException;
 
-import com.suntek.mway.rcs.client.api.plugin.entity.pubacct.MenuInfo;
-import com.suntek.mway.rcs.client.api.plugin.entity.pubacct.MsgContent;
-import com.suntek.mway.rcs.client.api.plugin.entity.pubacct.PublicAccounts;
-import com.suntek.mway.rcs.client.api.plugin.entity.pubacct.PublicAccountsDetail;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.MenuInfo;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.MsgContent;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.PublicAccounts;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.PublicAccountsDetail;
 
 public class PublicAccountCallbackImpl extends PublicAccountCallback {
 
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/publicaccount/impl/PublicAccountApi.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/publicaccount/impl/PublicAccountApi.java
index 68ef5c5..5f2811b 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/publicaccount/impl/PublicAccountApi.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/publicaccount/impl/PublicAccountApi.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.api.publicaccount.impl;
 
 import java.util.List;
@@ -32,9 +31,9 @@
 import android.os.RemoteException;
 
 import com.suntek.mway.rcs.client.api.ClientApi;
-import com.suntek.mway.rcs.client.api.plugin.IPublicAccountAPI;
-import com.suntek.mway.rcs.client.api.plugin.entity.pubacct.PublicAccounts;
-import com.suntek.mway.rcs.client.api.plugin.entity.pubacct.PublicAccountsDetail;
+import com.suntek.mway.rcs.client.aidl.plugin.IPublicAccountAPI;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.PublicAccounts;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.PublicAccountsDetail;
 import com.suntek.mway.rcs.client.api.publicaccount.callback.PublicAccountCallback;
 import com.suntek.mway.rcs.client.api.util.ServiceDisconnectedException;
 import com.suntek.mway.rcs.client.api.util.VerificationUtil;
@@ -224,7 +223,7 @@
         }
     }
 
-    public boolean getRecommendPublic(int type, int pageSize, int pageNum)
+    public boolean getRecommendPublic(int type, int pageSize, int pageNum, PublicAccountCallback callback)
             throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         if (pageSize <= 0 || pageNum <= 0) {
@@ -234,6 +233,7 @@
 
         boolean flag = false;
         try {
+            myApi.registerCallback(callback);
             flag = myApi.getRecommendPublic(type, pageSize, pageNum);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(),ex);
@@ -241,14 +241,16 @@
         return flag;
     }
 
-    public boolean setAcceptStatus(String uuid, int acceptStatus)
+    public boolean setAcceptStatus(String uuid, int acceptStatus, PublicAccountCallback callback)
             throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
+        boolean flag = false;
         try {
-            return myApi.setAcceptStatus(uuid, acceptStatus);
+            myApi.registerCallback(callback);
+            flag = myApi.setAcceptStatus(uuid, acceptStatus);
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
         }
-        return isNormallyClosed;
+        return flag;
     }
 }
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/specialnumber/impl/SpecialServiceNumApi.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/specialnumber/impl/SpecialServiceNumApi.java
index e8edc44..072776c 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/specialnumber/impl/SpecialServiceNumApi.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/specialnumber/impl/SpecialServiceNumApi.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.api.specialnumber.impl;
 
 import java.util.List;
@@ -30,7 +29,7 @@
 import android.os.IBinder;
 
 import com.suntek.mway.rcs.client.api.ClientApi;
-import com.suntek.mway.rcs.client.api.specialnumber.ISpecialServiceNumApi;
+import com.suntek.mway.rcs.client.aidl.specialnumber.ISpecialServiceNumApi;
 import com.suntek.mway.rcs.client.api.util.ServiceDisconnectedException;
 import com.suntek.mway.rcs.client.api.util.VerificationUtil;
 import com.suntek.mway.rcs.client.api.util.log.LogHelper;
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/support/RcsSupportApi.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/support/RcsSupportApi.java
index 163b2e9..bb5bf6c 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/support/RcsSupportApi.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/support/RcsSupportApi.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.api.support;
 
 import android.content.Context;
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/FileDurationException.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/FileDurationException.java
index 8eab4e5..d898284 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/FileDurationException.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/FileDurationException.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.api.util;
 
 public class FileDurationException extends Exception {
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/FileSuffixException.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/FileSuffixException.java
index c6c203a..6c8770f 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/FileSuffixException.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/FileSuffixException.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.api.util;
 
 public class FileSuffixException extends Exception {
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/FileTransferException.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/FileTransferException.java
index 7d3bce0..77407bc 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/FileTransferException.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/FileTransferException.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.api.util;
 
 public class FileTransferException extends Exception {
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/ServiceDisconnectedException.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/ServiceDisconnectedException.java
index 122f243..38c630e 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/ServiceDisconnectedException.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/ServiceDisconnectedException.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.api.util;
 
 public class ServiceDisconnectedException extends Exception {
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/VerificationUtil.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/VerificationUtil.java
index 45b1a76..0e65079 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/VerificationUtil.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/VerificationUtil.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.api.util;
 
 import java.io.File;
@@ -29,10 +28,11 @@
 
 import android.content.Context;
 
-import com.suntek.mway.rcs.client.api.constant.MediaConstants;
-import com.suntek.mway.rcs.client.api.provider.SuntekMessageData;
-import com.suntek.mway.rcs.client.api.utils.MediaUtils;
-import com.suntek.mway.rcs.client.api.utils.SettingUtils;
+import com.suntek.mway.rcs.client.aidl.constant.MediaConstants;
+import com.suntek.mway.rcs.client.aidl.provider.SuntekMessageData;
+import com.suntek.mway.rcs.client.aidl.utils.MediaUtils;
+import com.suntek.mway.rcs.client.aidl.utils.SettingUtils;
+import com.suntek.mway.rcs.client.api.util.log.LogHelper;
 
 public class VerificationUtil {
     private static final String SIP_PREFIX = "sip:";
@@ -103,6 +103,14 @@
                             + MediaConstants.VIDEO_SUFFIX + "'");
         }
     }
+    
+    public static void isCloudFile(String filename) throws FileSuffixException {
+        if (!MediaUtils.isCloudFileAllowedFile(filename)) {
+            throw new FileSuffixException(
+                    "File extension is incorrect, the incorrect extension is '"
+                            + MediaConstants.CLOUD_FILE_EXCLUDE_SUFFIX + "'");
+        }
+    }
 
     public static void isFileSizeToLarge(String filename, long maxSize)
             throws FileTransferException {
@@ -120,7 +128,8 @@
         File file = new File(filename);
         if (file.exists() && file.isFile()){
             int duration = MediaUtils.getAmrFileDuration(context, file);
-            if(duration > maxDuration * 1000 || recordTime > maxDuration){
+            if(duration >= (maxDuration + 1) * 1000 || recordTime > maxDuration){
+                LogHelper.i("throw FileDurationException, duration=" + duration);
                 throw new FileDurationException("File duration too long "
                         + duration
                         + " s. Max duration is " + maxDuration
@@ -134,7 +143,8 @@
         File file = new File(filename);
         if (file.exists() && file.isFile()){
             int duration = MediaUtils.getVideoFileDuration(context, file);
-            if(duration > maxDuration * 1000 || recordTime > maxDuration){
+            if(duration >= (maxDuration + 1) * 1000 || recordTime > maxDuration){
+                LogHelper.i("throw FileDurationException, duration=" + duration);
                 throw new FileDurationException("File duration too long "
                         + duration
                         + " s. Max duration is " + maxDuration
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/log/LogHelper.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/log/LogHelper.java
index 0baba01..0f8a69f 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/log/LogHelper.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/util/log/LogHelper.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.api.util.log;
 
 import java.io.BufferedWriter;
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/voip/impl/RichScreenApi.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/voip/impl/RichScreenApi.java
index c40652b..daa2d01 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/voip/impl/RichScreenApi.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/voip/impl/RichScreenApi.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.api.voip.impl;
 
 import java.util.ArrayList;
@@ -33,11 +32,11 @@
 
 import com.suntek.mway.rcs.client.api.ClientApi;
 import com.suntek.mway.rcs.client.api.RCSServiceListener;
-import com.suntek.mway.rcs.client.api.plugin.IRichScreenApi;
-import com.suntek.mway.rcs.client.api.plugin.entity.richscrn.PhoneList;
-import com.suntek.mway.rcs.client.api.plugin.entity.richscrn.ResultInfo;
-import com.suntek.mway.rcs.client.api.plugin.entity.richscrn.ResultUtil;
-import com.suntek.mway.rcs.client.api.plugin.entity.richscrn.RichScrnShowing;
+import com.suntek.mway.rcs.client.aidl.plugin.IRichScreenApi;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.richscrn.PhoneList;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.richscrn.ResultInfo;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.richscrn.ResultUtil;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.richscrn.RichScrnShowing;
 import com.suntek.mway.rcs.client.api.util.ServiceDisconnectedException;
 import com.suntek.mway.rcs.client.api.util.VerificationUtil;
 import com.suntek.mway.rcs.client.api.util.log.LogHelper;
