├── .gitignore
├── README-cn.md
├── README.md
├── build.gradle
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── import-summary.txt
├── leanchat-android.iml
├── leanchat
├── build.gradle
├── leanchat.iml
├── libs
│ ├── baidumapapi_v3_0_0.jar
│ └── locSDK_4.2.jar
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── avoscloud
│ │ └── chat
│ │ ├── base
│ │ ├── App.java
│ │ └── Constant.java
│ │ ├── entity
│ │ ├── AVIMUserInfoMessage.java
│ │ ├── SortUser.java
│ │ └── avobject
│ │ │ ├── AddRequest.java
│ │ │ ├── UpdateInfo.java
│ │ │ └── User.java
│ │ ├── service
│ │ ├── AddRequestManager.java
│ │ ├── CacheService.java
│ │ ├── ChatManagerAdapterImpl.java
│ │ ├── ColoredBitmapProvider.java
│ │ ├── ConversationChangeEvent.java
│ │ ├── ConversationManager.java
│ │ ├── LeanchatReceiver.java
│ │ ├── PreferenceMap.java
│ │ ├── PushManager.java
│ │ ├── UpdateService.java
│ │ ├── UserService.java
│ │ └── event
│ │ │ ├── ContactRefreshEvent.java
│ │ │ ├── FinishEvent.java
│ │ │ ├── InvitationEvent.java
│ │ │ └── LoginFinishEvent.java
│ │ ├── ui
│ │ ├── MainActivity.java
│ │ ├── base_activity
│ │ │ ├── BaseActivity.java
│ │ │ ├── BaseFragment.java
│ │ │ └── UpdateContentActivity.java
│ │ ├── chat
│ │ │ ├── ChatRoomActivity.java
│ │ │ ├── ImageBrowserActivity.java
│ │ │ └── LocationActivity.java
│ │ ├── contact
│ │ │ ├── ContactAddFriendActivity.java
│ │ │ ├── ContactFragment.java
│ │ │ ├── ContactFragmentAdapter.java
│ │ │ ├── ContactNewFriendActivity.java
│ │ │ └── ContactPersonInfoActivity.java
│ │ ├── conversation
│ │ │ ├── ConversationAddMembersActivity.java
│ │ │ ├── ConversationBaseActivity.java
│ │ │ ├── ConversationDetailActivity.java
│ │ │ ├── ConversationEventBaseActivity.java
│ │ │ ├── ConversationGroupListActivity.java
│ │ │ └── ConversationRecentFragment.java
│ │ ├── discover
│ │ │ ├── DiscoverFragment.java
│ │ │ └── DiscoverFragmentUserAdapter.java
│ │ ├── entry
│ │ │ ├── EntryBaseActivity.java
│ │ │ ├── EntryLoginActivity.java
│ │ │ ├── EntryRegisterActivity.java
│ │ │ └── EntrySplashActivity.java
│ │ ├── profile
│ │ │ ├── ProfileFragment.java
│ │ │ ├── ProfileNotifySettingActivity.java
│ │ │ └── ProfileNotifySettingFragment.java
│ │ └── view
│ │ │ ├── BaseCheckListAdapter.java
│ │ │ ├── BaseListAdapter.java
│ │ │ ├── BaseListView.java
│ │ │ ├── ClearEditText.java
│ │ │ ├── EnLetterView.java
│ │ │ ├── ExpandGridView.java
│ │ │ ├── HeaderLayout.java
│ │ │ ├── RefreshableView.java
│ │ │ └── xlist
│ │ │ ├── XListView.java
│ │ │ ├── XListViewFooter.java
│ │ │ └── XListViewHeader.java
│ │ └── util
│ │ ├── CharacterParser.java
│ │ ├── Connectivity.java
│ │ ├── Logger.java
│ │ ├── NetAsyncTask.java
│ │ ├── NotificationUtil.java
│ │ ├── PathUtils.java
│ │ ├── PhotoUtils.java
│ │ ├── PixelUtils.java
│ │ ├── RefreshTask.java
│ │ ├── Refreshable.java
│ │ ├── SimpleNetTask.java
│ │ └── Utils.java
│ ├── jniLibs
│ └── armeabi
│ │ ├── libBaiduMapSDK_v3_0_0.so
│ │ └── liblocSDK4d.so
│ └── res
│ ├── anim
│ ├── grow_from_bottom.xml
│ ├── push_top_in2.xml
│ ├── push_top_out2.xml
│ └── shrink_from_top.xml
│ ├── drawable-hdpi
│ ├── base_horizontal_line.9.png
│ ├── chat_btn_voice_normal.png
│ ├── chat_item_location_default.9.png
│ └── common_view_right_arrow_pic.png
│ ├── drawable-xhdpi
│ ├── avoscloud_feedback_dev_reply_background.9.png
│ ├── avoscloud_feedback_notification.9.png
│ ├── avoscloud_feedback_thread_actionbar_back.png
│ ├── avoscloud_feedback_user_reply_background.9.png
│ ├── base_action_bar_add_bg_normal.png
│ ├── base_action_bar_add_bg_pressed.png
│ ├── base_edit_input.9.png
│ ├── base_horizontal_line.9.png
│ ├── btn_logout_pressed.9.png
│ ├── chat_location_activity_icon_geo.png
│ ├── clear_edit_search_clear_normal.png
│ ├── clear_edit_search_clear_pressed.png
│ ├── common_input_bg.9.png
│ ├── common_msg_tips.png
│ ├── common_view_right_arrow_pic.png
│ ├── contact_fragment_icon_msg_search.png
│ ├── contact_group_icon.png
│ ├── contact_new_friends_icon.png
│ ├── contact_person_info_about_top_bg.9.png
│ ├── contact_person_info_mid_bg.9.png
│ ├── discover_lay_icn_order_artist.png
│ ├── discover_lay_icn_order_artist_p.png
│ ├── head.png
│ ├── icon.png
│ ├── login_bg.png
│ ├── login_icon_account.png
│ ├── login_icon_password.png
│ ├── main_acvitivy_top_bar.9.png
│ ├── profile_btn_logout_normal.9.png
│ ├── splash_back.9.png
│ ├── tabbar_chat.png
│ ├── tabbar_chat_active.png
│ ├── tabbar_contacts.png
│ ├── tabbar_contacts_active.png
│ ├── tabbar_discover.png
│ ├── tabbar_discover_active.png
│ ├── tabbar_me.png
│ ├── tabbar_me_active.png
│ └── utils_icon_info_2.png
│ ├── drawable
│ ├── base_action_bar_add_bg_selector.xml
│ ├── btn_logout_selector.xml
│ ├── btn_selector.xml
│ ├── button_normal_shape.xml
│ ├── clear_edittext_search_clear.xml
│ ├── common_btn.xml
│ ├── common_btn_normal.xml
│ ├── common_btn_pressed.xml
│ ├── contact_fragment_gallery_contacts_dialog_background.xml
│ ├── contact_fragment_sortlistview_sidebar_background.xml
│ ├── group_detail_btn.xml
│ ├── nearby_order.xml
│ ├── recent_message_text_color_selector.xml
│ ├── recent_name_text_color_selector.xml
│ └── tab_textcolor.xml
│ ├── layout
│ ├── chat_xlistview_footer.xml
│ ├── chat_xlistview_header.xml
│ ├── common_divider.xml
│ ├── common_header_layout.xml
│ ├── common_user_item.xml
│ ├── common_view_right_arrow.xml
│ ├── contact_add_friend_activity.xml
│ ├── contact_add_friend_item.xml
│ ├── contact_fragment.xml
│ ├── contact_fragment_header_layout.xml
│ ├── contact_new_friend_activity.xml
│ ├── contact_person_info_activity.xml
│ ├── conversation_add_members_item.xml
│ ├── conversation_add_members_layout.xml
│ ├── conversation_detail_activity.xml
│ ├── conversation_item.xml
│ ├── conversation_list_activity.xml
│ ├── conversation_list_item.xml
│ ├── conversation_member_item.xml
│ ├── discover_fragment.xml
│ ├── discover_near_people_item.xml
│ ├── entry_login_activity.xml
│ ├── entry_register_activity.xml
│ ├── entry_splash_layout.xml
│ ├── main_activity.xml
│ ├── message_fragment.xml
│ ├── profile_fragment.xml
│ ├── profile_setting_notify_layout.xml
│ ├── refreshable_view_pull_to_refresh_header.xml
│ └── update_content_layout.xml
│ ├── menu
│ ├── chat_ativity_menu.xml
│ └── update_content_menu.xml
│ ├── values-sw600dp
│ └── dimens.xml
│ ├── values-sw720dp-land
│ └── dimens.xml
│ ├── values-v11
│ └── styles.xml
│ ├── values-v14
│ └── styles.xml
│ ├── values
│ ├── bools.xml
│ ├── color_standard.xml
│ ├── colors.xml
│ ├── dimens.xml
│ ├── dimens_standard.xml
│ ├── strings.xml
│ ├── styles.xml
│ └── styles_standard.xml
│ └── xml
│ └── setting_preference.xml
├── leanchatlib-demo
├── .gitignore
├── build.gradle
├── leanchatlib-demo.iml
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── avoscloud
│ │ └── leanchatlib_demo
│ │ └── ApplicationTest.java
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── avoscloud
│ │ └── leanchatlib_demo
│ │ ├── App.java
│ │ ├── ChatRoomActivity.java
│ │ ├── LoginActivity.java
│ │ └── MainActivity.java
│ └── res
│ ├── layout
│ ├── activity_login.xml
│ └── activity_main.xml
│ ├── menu
│ ├── menu_login.xml
│ └── menu_main.xml
│ ├── mipmap-hdpi
│ └── ic_launcher.png
│ ├── mipmap-mdpi
│ └── ic_launcher.png
│ ├── mipmap-xhdpi
│ └── ic_launcher.png
│ ├── mipmap-xxhdpi
│ └── ic_launcher.png
│ ├── values-w820dp
│ └── dimens.xml
│ └── values
│ ├── dimens.xml
│ ├── strings.xml
│ └── styles.xml
├── leanchatlib
├── .gitignore
├── build.gradle
├── leanchatlib.iml
├── libs
│ └── prettytime-3.2.5.Final.jar
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── avoscloud
│ │ └── leanchatlib
│ │ └── ApplicationTest.java
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── avoscloud
│ │ └── leanchatlib
│ │ ├── activity
│ │ ├── ChatActivity.java
│ │ └── ChatActivityEventListener.java
│ │ ├── adapter
│ │ ├── ChatEmotionGridAdapter.java
│ │ ├── ChatEmotionPagerAdapter.java
│ │ └── ChatMessageAdapter.java
│ │ ├── controller
│ │ ├── AVIMTypedMessagesArrayCallback.java
│ │ ├── AudioHelper.java
│ │ ├── ChatManager.java
│ │ ├── ChatManagerAdapter.java
│ │ ├── ConversationHelper.java
│ │ ├── DBHelper.java
│ │ ├── EmotionHelper.java
│ │ ├── MessageAgent.java
│ │ ├── MessageHelper.java
│ │ ├── RoomsTable.java
│ │ └── SignatureFactory.java
│ │ ├── model
│ │ ├── ConversationType.java
│ │ ├── MessageEvent.java
│ │ ├── Room.java
│ │ └── UserInfo.java
│ │ ├── utils
│ │ ├── LogUtils.java
│ │ ├── PathUtils.java
│ │ ├── PhotoUtils.java
│ │ ├── ProviderPathUtils.java
│ │ └── Utils.java
│ │ └── view
│ │ ├── EmotionEditText.java
│ │ ├── PlayButton.java
│ │ ├── RecordButton.java
│ │ ├── RefreshableView.java
│ │ └── ViewHolder.java
│ └── res
│ ├── anim
│ ├── chat_anim_voice_left.xml
│ └── chat_anim_voice_right.xml
│ ├── drawable-xhdpi
│ ├── chat_add_camera_normal.png
│ ├── chat_add_camera_press.png
│ ├── chat_add_location_normal.png
│ ├── chat_add_location_press.png
│ ├── chat_add_normal.png
│ ├── chat_add_picture_normal.png
│ ├── chat_add_picture_pressed.png
│ ├── chat_add_pressed.png
│ ├── chat_base_action_bar_true_bg_normal.png
│ ├── chat_base_action_bar_true_bg_pressed.png
│ ├── chat_btn_voice_normal.png
│ ├── chat_common_base_header_back_btn.png
│ ├── chat_common_empty_photo.9.png
│ ├── chat_common_image_load_fail.png
│ ├── chat_default_user_avatar.png
│ ├── chat_emo_normal.png
│ ├── chat_emo_pressed.png
│ ├── chat_fail_resend_normal.png
│ ├── chat_fail_resend_press.png
│ ├── chat_icon_voice0.png
│ ├── chat_icon_voice1.png
│ ├── chat_icon_voice2.png
│ ├── chat_icon_voice3.png
│ ├── chat_icon_voice4.png
│ ├── chat_icon_voice5.png
│ ├── chat_item_location_default.9.png
│ ├── chat_keyboard_normal.png
│ ├── chat_keyboard_press.png
│ ├── chat_layout_home_bg_bottombar.png
│ ├── chat_left_qp.9.png
│ ├── chat_login_edit_normal.9.png
│ ├── chat_menu_people.png
│ ├── chat_message_send_fail.png
│ ├── chat_right_qp.9.png
│ ├── chat_send_normal.png
│ ├── chat_send_pressed.png
│ ├── chat_setmode_keyboard_btn_normal.png
│ ├── chat_setmode_keyboard_btn_pressed.png
│ ├── chat_time_block.9.png
│ ├── chat_top_voice_bg.9.png
│ ├── chat_voice_bg.9.png
│ ├── chat_voice_bg_pressed.9.png
│ ├── chat_voice_left.png
│ ├── chat_voice_left1.png
│ ├── chat_voice_left2.png
│ ├── chat_voice_left3.png
│ ├── chat_voice_pressed.png
│ ├── chat_voice_right.png
│ ├── chat_voice_right1.png
│ ├── chat_voice_right2.png
│ ├── chat_voice_right3.png
│ ├── chat_xlistview_arrow.png
│ ├── emoji_angry.png
│ ├── emoji_anguished.png
│ ├── emoji_astonished.png
│ ├── emoji_blush.png
│ ├── emoji_clap.png
│ ├── emoji_cold_sweat.png
│ ├── emoji_confounded.png
│ ├── emoji_confused.png
│ ├── emoji_cry.png
│ ├── emoji_disappointed.png
│ ├── emoji_disappointed_relieved.png
│ ├── emoji_dizzy_face.png
│ ├── emoji_expressionless.png
│ ├── emoji_fearful.png
│ ├── emoji_flushed.png
│ ├── emoji_frowning.png
│ ├── emoji_grimacing.png
│ ├── emoji_grin.png
│ ├── emoji_grinning.png
│ ├── emoji_heart_eyes.png
│ ├── emoji_hushed.png
│ ├── emoji_innocent.png
│ ├── emoji_joy.png
│ ├── emoji_kissing.png
│ ├── emoji_kissing_closed_eyes.png
│ ├── emoji_kissing_face.png
│ ├── emoji_kissing_heart.png
│ ├── emoji_kissing_smiling_eyes.png
│ ├── emoji_laughing.png
│ ├── emoji_mask.png
│ ├── emoji_neutral_face.png
│ ├── emoji_no_mouth.png
│ ├── emoji_open_mouth.png
│ ├── emoji_pensive.png
│ ├── emoji_persevere.png
│ ├── emoji_point_left.png
│ ├── emoji_point_right.png
│ ├── emoji_rage.png
│ ├── emoji_relaxed.png
│ ├── emoji_relieved.png
│ ├── emoji_satisfied.png
│ ├── emoji_scream.png
│ ├── emoji_sleeping.png
│ ├── emoji_sleepy.png
│ ├── emoji_smile.png
│ ├── emoji_smiley.png
│ ├── emoji_smirk.png
│ ├── emoji_sob.png
│ ├── emoji_stuck_out_tongue.png
│ ├── emoji_stuck_out_tongue_closed_eyes.png
│ ├── emoji_stuck_out_tongue_winking_eye.png
│ ├── emoji_sunglasses.png
│ ├── emoji_sweat.png
│ ├── emoji_sweat_smile.png
│ ├── emoji_thumbsdown.png
│ ├── emoji_thumbsup.png
│ ├── emoji_tired_face.png
│ ├── emoji_triumph.png
│ ├── emoji_unamused.png
│ ├── emoji_weary.png
│ ├── emoji_wink.png
│ ├── emoji_worried.png
│ └── emoji_yum.png
│ ├── drawable
│ ├── chat_base_action_bar_true_bg_selector.xml
│ ├── chat_bottom_add_camera_selector.xml
│ ├── chat_bottom_add_picture_selector.xml
│ ├── chat_btn_add_selector.xml
│ ├── chat_btn_emo_selector.xml
│ ├── chat_btn_fail_resend.xml
│ ├── chat_btn_keyboard.xml
│ ├── chat_btn_send_selector.xml
│ ├── chat_btn_voice_selector.xml
│ ├── chat_button_add_location_selector.xml
│ └── chat_record_button_round_background.xml
│ ├── layout
│ ├── chat_bottom_add_layout.xml
│ ├── chat_bottom_more_layout.xml
│ ├── chat_bottom_record_layout.xml
│ ├── chat_bottom_text_layout.xml
│ ├── chat_client_state_view.xml
│ ├── chat_common_base_header.xml
│ ├── chat_common_base_header_right_btn.xml
│ ├── chat_common_base_header_right_image_btn.xml
│ ├── chat_emotion_gridview.xml
│ ├── chat_emotion_item.xml
│ ├── chat_image_brower_layout.xml
│ ├── chat_item_audio.xml
│ ├── chat_item_base_left.xml
│ ├── chat_item_base_right.xml
│ ├── chat_item_base_status.xml
│ ├── chat_item_base_time.xml
│ ├── chat_item_image.xml
│ ├── chat_item_location.xml
│ ├── chat_item_text.xml
│ ├── chat_layout.xml
│ ├── chat_location_activity.xml
│ ├── chat_pull_to_refresh.xml
│ └── chat_record_layout.xml
│ └── values
│ ├── attrs.xml
│ ├── colors.xml
│ ├── dimens.xml
│ ├── strings.xml
│ └── styles.xml
├── libs
├── Java-WebSocket-1.2.0-leancloud.jar
├── android-async-http-1.4.6.jar
├── avoscloud-push-v3.1.4.jar
├── avoscloud-sdk-v3.1.4.jar
├── butterknife-6.1.0.jar
├── eventbus-2.4.0.jar
├── fastjson-1.1.37-leancloud.jar
├── httpmime-4.2.4.jar
├── support-v4-19.1.0.jar
└── universal-image-loader-1.9.3.jar
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | build
2 | gen
3 | *.apk
4 | lint-result.xml
5 | app/build
6 | .gradle
7 | local.properties
8 | .idea
9 | .DS_Store
10 | manifest-merger-release-report.txt
11 | gradle.properties
12 |
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 | buildscript {
3 | repositories {
4 | jcenter()
5 | maven {
6 | url "http://mvn.leancloud.cn/nexus/content/repositories/releases"
7 | }
8 | }
9 | dependencies {
10 | classpath 'com.android.tools.build:gradle:1.0.0'
11 | classpath 'org.robolectric:robolectric-gradle-plugin:0.14.+'
12 | }
13 | }
14 |
15 | allprojects {
16 | repositories {
17 | jcenter()
18 | maven {
19 | url "http://mvn.leancloud.cn/nexus/content/repositories/releases"
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Wed Apr 10 15:27:10 PDT 2013
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
7 |
--------------------------------------------------------------------------------
/leanchat-android.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/leanchat/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 21
5 | buildToolsVersion "21.1.2"
6 |
7 | defaultConfig {
8 | applicationId "com.avoscloud.chat"
9 | minSdkVersion 15
10 | targetSdkVersion 15
11 | multiDexEnabled true
12 | }
13 |
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
18 | }
19 | }
20 |
21 | packagingOptions {
22 | exclude 'META-INF/LICENSE.txt'
23 | exclude 'META-INF/NOTICE.txt'
24 | }
25 |
26 | lintOptions {
27 | // set to true to turn off analysis progress reporting by lint
28 | quiet false
29 | abortOnError false
30 | }
31 | }
32 |
33 | dependencies {
34 | compile project(':leanchatlib')
35 | compile 'cn.leancloud.android:avoscloud-statistics:v3.4.5@aar'
36 | compile 'com.jakewharton:butterknife:6.1.0'
37 | compile files('libs/baidumapapi_v3_0_0.jar')
38 | compile files('libs/locSDK_4.2.jar')
39 | }
40 |
--------------------------------------------------------------------------------
/leanchat/libs/baidumapapi_v3_0_0.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/libs/baidumapapi_v3_0_0.jar
--------------------------------------------------------------------------------
/leanchat/libs/locSDK_4.2.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/libs/locSDK_4.2.jar
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/base/Constant.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.base;
2 |
3 | /**
4 | * Created by lzw on 14-6-23.
5 | */
6 | public class Constant {
7 | public static final String OBJECT_ID = "objectId";
8 | public static final int PAGE_SIZE = 10;
9 | public static final String CREATED_AT = "createdAt";
10 | public static final String UPDATED_AT = "updatedAt";
11 | }
12 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/entity/AVIMUserInfoMessage.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.entity;
2 |
3 | import com.avos.avoscloud.im.v2.AVIMMessageField;
4 | import com.avos.avoscloud.im.v2.AVIMMessageType;
5 | import com.avos.avoscloud.im.v2.AVIMTypedMessage;
6 |
7 | import java.util.Map;
8 |
9 | /**
10 | * Created by lzw on 15/4/14.
11 | */
12 | @AVIMMessageType(type = 1)
13 | public class AVIMUserInfoMessage extends AVIMTypedMessage {
14 |
15 | @AVIMMessageField(name = "_lcattrs")
16 | Map attrs;
17 |
18 | public Map getAttrs() {
19 | return attrs;
20 | }
21 |
22 | public void setAttrs(Map attrs) {
23 | this.attrs = attrs;
24 | }
25 | }
26 |
27 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/entity/SortUser.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.entity;
2 |
3 | import com.avos.avoscloud.AVUser;
4 |
5 | /**
6 | * Created by lzw on 15/1/9.
7 | */
8 | public class SortUser {
9 | private AVUser innerUser;
10 | private String sortLetters;
11 |
12 | public AVUser getInnerUser() {
13 | return innerUser;
14 | }
15 |
16 | public void setInnerUser(AVUser innerUser) {
17 | this.innerUser = innerUser;
18 | }
19 |
20 | public String getSortLetters() {
21 | return sortLetters;
22 | }
23 |
24 | public void setSortLetters(String sortLetters) {
25 | this.sortLetters = sortLetters;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/entity/avobject/AddRequest.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.entity.avobject;
2 |
3 | import com.avos.avoscloud.AVClassName;
4 | import com.avos.avoscloud.AVObject;
5 | import com.avos.avoscloud.AVUser;
6 |
7 | /**
8 | * Created by lzw on 14-9-27.
9 | */
10 | @AVClassName("AddRequest")
11 | public class AddRequest extends AVObject {
12 | public static final int STATUS_WAIT = 0;
13 | public static final int STATUS_DONE = 1;
14 |
15 | public static final String FROM_USER = "fromUser";
16 | public static final String TO_USER = "toUser";
17 | public static final String STATUS = "status";
18 |
19 | /**
20 | * 标记接收方是否已读该消息
21 | */
22 | public static final String IS_READ = "isRead";
23 |
24 | public AddRequest() {
25 | }
26 |
27 | public AVUser getFromUser() {
28 | return getAVUser(FROM_USER);
29 | }
30 |
31 | public void setFromUser(AVUser fromUser) {
32 | put(FROM_USER, fromUser);
33 | }
34 |
35 | public AVUser getToUser() {
36 | return getAVUser(TO_USER);
37 | }
38 |
39 | public void setToUser(AVUser toUser) {
40 | put(TO_USER, toUser);
41 | }
42 |
43 | public int getStatus() {
44 | return getInt(STATUS);
45 | }
46 |
47 | public void setStatus(int status) {
48 | put(STATUS, status);
49 | }
50 |
51 | public boolean isRead() {
52 | return getBoolean(IS_READ);
53 | }
54 |
55 | public void setIsRead(boolean isRead) {
56 | put(IS_READ, isRead);
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/entity/avobject/UpdateInfo.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.entity.avobject;
2 |
3 | import com.avos.avoscloud.AVClassName;
4 | import com.avos.avoscloud.AVObject;
5 |
6 | @AVClassName("UpdateInfo")
7 | public class UpdateInfo extends AVObject {
8 | public static final String DESC = "desc";
9 | public static String VERSION = "version";
10 | public static String APK_URL = "apkUrl";
11 |
12 | public UpdateInfo() {
13 | }
14 |
15 | public int getVersion() {
16 | return getInt(VERSION);
17 | }
18 |
19 | public void setVersion(int version) {
20 | put(VERSION, version);
21 | }
22 |
23 | public String getApkUrl() {
24 | return getString(APK_URL);
25 | }
26 |
27 | public void setApkUrl(String apkUrl) {
28 | put(APK_URL, apkUrl);
29 | }
30 |
31 | public String getDesc() {
32 | return getString(DESC);
33 | }
34 |
35 | public void setDesc(String desc) {
36 | put(DESC, desc);
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/entity/avobject/User.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.entity.avobject;
2 |
3 | import com.avos.avoscloud.AVFile;
4 | import com.avos.avoscloud.AVInstallation;
5 | import com.avos.avoscloud.AVUser;
6 | import com.avoscloud.leanchatlib.utils.LogUtils;
7 |
8 | public class User {
9 | public static final String USERNAME = "username";
10 | public static final String PASSWORD = "password";
11 | public static final String AVATAR = "avatar";
12 | public static final String FRIENDS = "friends";
13 | public static final String LOCATION = "location";
14 | public static final String INSTALLATION = "installation";
15 |
16 |
17 | public static String getCurrentUserId() {
18 | AVUser user = AVUser.getCurrentUser();
19 | if (user != null) {
20 | return user.getObjectId();
21 | } else {
22 | return null;
23 | }
24 | }
25 |
26 | public static String getAvatarUrl(AVUser user) {
27 | AVFile avatar = user.getAVFile(AVATAR);
28 | if (avatar != null) {
29 | return avatar.getUrl();
30 | } else {
31 | return null;
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/service/ConversationChangeEvent.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.service;
2 |
3 | import com.avos.avoscloud.im.v2.AVIMConversation;
4 |
5 | /**
6 | * Created by lzw on 15/3/5.
7 | */
8 | //name, member change event
9 | public class ConversationChangeEvent {
10 | private AVIMConversation conv;
11 |
12 | public ConversationChangeEvent(AVIMConversation conv) {
13 | this.conv = conv;
14 | }
15 |
16 | public AVIMConversation getConv() {
17 | return conv;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/service/LeanchatReceiver.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.service;
2 |
3 | import android.content.BroadcastReceiver;
4 | import android.content.Context;
5 | import android.content.Intent;
6 | import android.text.TextUtils;
7 | import com.avoscloud.chat.R;
8 | import com.avoscloud.chat.service.event.InvitationEvent;
9 | import com.avoscloud.chat.ui.entry.EntrySplashActivity;
10 | import com.avoscloud.chat.util.NotificationUtil;
11 |
12 | import com.avoscloud.leanchatlib.utils.LogUtils;
13 | import org.json.JSONException;
14 | import org.json.JSONObject;
15 |
16 | import de.greenrobot.event.EventBus;
17 |
18 | /**
19 | * Created by wli on 15/7/10.
20 | */
21 | public class LeanchatReceiver extends BroadcastReceiver {
22 |
23 | public final static String AVOS_DATA = "com.avoscloud.Data";
24 |
25 | @Override
26 | public void onReceive(Context context, Intent intent) {
27 | String action = intent.getAction();
28 | if (!TextUtils.isEmpty(action)) {
29 | if (action.equals(context.getString(R.string.invitation_action))) {
30 | String avosData = intent.getStringExtra(AVOS_DATA);
31 | if (!TextUtils.isEmpty(avosData)) {
32 | try {
33 | JSONObject json = new JSONObject(avosData);
34 | if (null != json) {
35 | String alertStr = json.getString(PushManager.AVOS_ALERT);
36 | NotificationUtil.showNotification(context, "LeanChat", alertStr, EntrySplashActivity.class);
37 | }
38 | } catch (JSONException e) {
39 | LogUtils.logException(e);
40 | }
41 | }
42 | }
43 | }
44 | EventBus.getDefault().post(new InvitationEvent());
45 | }
46 | }
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/service/PushManager.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.service;
2 |
3 | import android.content.Context;
4 | import com.avos.avoscloud.AVInstallation;
5 | import com.avos.avoscloud.AVPush;
6 | import com.avos.avoscloud.AVQuery;
7 | import com.avos.avoscloud.AVUser;
8 | import com.avos.avoscloud.PushService;
9 | import com.avoscloud.chat.ui.entry.EntrySplashActivity;
10 |
11 | import java.util.HashMap;
12 | import java.util.Map;
13 |
14 | /**
15 | * Created by lzw on 15/6/11.
16 | */
17 | public class PushManager {
18 | public final static String AVOS_ALERT = "alert";
19 |
20 | private final static String AVOS_PUSH_ACTION = "action";
21 | public static final String INSTALLATION_CHANNELS = "channels";
22 | private static PushManager pushManager;
23 | private Context context;
24 |
25 | public synchronized static PushManager getInstance() {
26 | if (pushManager == null) {
27 | pushManager = new PushManager();
28 | }
29 | return pushManager;
30 | }
31 |
32 | public void init(Context context) {
33 | this.context = context;
34 | PushService.setDefaultPushCallback(context, EntrySplashActivity.class);
35 | subscribeCurrentUserChannel();
36 | }
37 |
38 | private void subscribeCurrentUserChannel() {
39 | if (AVUser.getCurrentUser() != null) {
40 | PushService.subscribe(context, AVUser.getCurrentUser().getObjectId(),
41 | EntrySplashActivity.class);
42 | }
43 | }
44 |
45 | public void unsubscribeCurrentUserChannel() {
46 | if (AVUser.getCurrentUser() != null) {
47 | PushService.unsubscribe(context, AVUser.getCurrentUser().getObjectId());
48 | }
49 | }
50 |
51 | public void pushMessage(String userId, String message, String action) {
52 | AVQuery query = AVInstallation.getQuery();
53 | query.whereContains(INSTALLATION_CHANNELS, userId);
54 | AVPush push = new AVPush();
55 | push.setQuery(query);
56 |
57 | Map dataMap = new HashMap();
58 | dataMap.put(AVOS_ALERT, message);
59 | dataMap.put(AVOS_PUSH_ACTION, action);
60 | push.setData(dataMap);
61 | push.sendInBackground();
62 | }
63 | }
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/service/event/ContactRefreshEvent.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.service.event;
2 |
3 | /**
4 | * Created by lzw on 15/6/24.
5 | */
6 | public class ContactRefreshEvent {
7 | }
8 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/service/event/FinishEvent.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.service.event;
2 |
3 | /**
4 | * Created by lzw on 15/3/8.
5 | */
6 | public class FinishEvent {
7 | }
8 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/service/event/InvitationEvent.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.service.event;
2 |
3 | /**
4 | * Created by wli on 15/7/11.
5 | */
6 | public class InvitationEvent {
7 | }
8 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/service/event/LoginFinishEvent.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.service.event;
2 |
3 | /**
4 | * Created by lzw on 15/4/1.
5 | */
6 | public class LoginFinishEvent {
7 | }
8 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/ui/base_activity/BaseFragment.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.ui.base_activity;
2 |
3 | import android.app.Fragment;
4 | import android.app.ProgressDialog;
5 | import android.content.Context;
6 | import android.os.Bundle;
7 | import android.widget.Toast;
8 | import com.avoscloud.chat.R;
9 | import com.avoscloud.chat.ui.view.HeaderLayout;
10 |
11 | public class BaseFragment extends Fragment {
12 | protected HeaderLayout headerLayout;
13 | protected Context ctx;
14 |
15 | @Override
16 | public void onActivityCreated(Bundle savedInstanceState) {
17 | super.onActivityCreated(savedInstanceState);
18 | ctx = getActivity();
19 | headerLayout = (HeaderLayout) getView().findViewById(R.id.headerLayout);
20 | }
21 |
22 | protected void toast(String str) {
23 | Toast.makeText(this.getActivity(), str, Toast.LENGTH_SHORT).show();
24 | }
25 |
26 | protected void toast(int id) {
27 | Toast.makeText(this.getActivity(), id, Toast.LENGTH_SHORT).show();
28 | }
29 |
30 | protected boolean filterException(Exception e) {
31 | if (e != null) {
32 | toast(e.getMessage());
33 | return false;
34 | } else {
35 | return true;
36 | }
37 | }
38 |
39 | protected ProgressDialog showSpinnerDialog() {
40 | //activity = modifyDialogContext(activity);
41 | ProgressDialog dialog = new ProgressDialog(getActivity());
42 | dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
43 | dialog.setCancelable(true);
44 | dialog.setMessage(getString(R.string.chat_utils_hardLoading));
45 | if (!getActivity().isFinishing()) {
46 | dialog.show();
47 | }
48 | return dialog;
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/ui/chat/ImageBrowserActivity.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.ui.chat;
2 |
3 | import android.app.Activity;
4 | import android.content.Context;
5 | import android.content.Intent;
6 | import android.os.Bundle;
7 | import android.widget.ImageView;
8 | import com.avoscloud.leanchatlib.R;
9 | import com.avoscloud.leanchatlib.utils.PhotoUtils;
10 |
11 | /**
12 | * Created by lzw on 14-9-21.
13 | */
14 | public class ImageBrowserActivity extends Activity {
15 | private static final String PATH = "path";
16 | private static final String URL = "url";
17 | private ImageView imageView;
18 |
19 | public static void go(Context ctx, String path, String url) {
20 | Intent intent = new Intent(ctx, ImageBrowserActivity.class);
21 | intent.putExtra(PATH, path);
22 | intent.putExtra(URL, url);
23 | ctx.startActivity(intent);
24 | }
25 |
26 | @Override
27 | protected void onCreate(Bundle savedInstanceState) {
28 | super.onCreate(savedInstanceState);
29 | setContentView(R.layout.chat_image_brower_layout);
30 | imageView = (ImageView) findViewById(R.id.imageView);
31 | Intent intent = getIntent();
32 | String path = intent.getStringExtra(PATH);
33 | String url = intent.getStringExtra(URL);
34 | PhotoUtils.displayImageCacheElseNetwork(imageView, path, url);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/ui/contact/ContactFragmentAdapter.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.ui.contact;
2 |
3 | import android.annotation.SuppressLint;
4 | import android.content.Context;
5 | import android.view.LayoutInflater;
6 | import android.view.View;
7 | import android.view.ViewGroup;
8 | import android.widget.ImageView;
9 | import android.widget.SectionIndexer;
10 | import android.widget.TextView;
11 | import com.avoscloud.chat.R;
12 | import com.avoscloud.chat.entity.SortUser;
13 | import com.avoscloud.chat.service.UserService;
14 | import com.avoscloud.chat.ui.view.BaseListAdapter;
15 | import com.avoscloud.leanchatlib.view.ViewHolder;
16 |
17 | @SuppressLint("DefaultLocale")
18 | public class ContactFragmentAdapter extends BaseListAdapter implements SectionIndexer {
19 |
20 | public ContactFragmentAdapter(Context ctx) {
21 | super(ctx);
22 | }
23 |
24 | @Override
25 | public View getView(int position, View convertView, ViewGroup parent) {
26 | if (convertView == null) {
27 | convertView = LayoutInflater.from(ctx).inflate(
28 | R.layout.common_user_item, null);
29 | }
30 | TextView alpha = ViewHolder.findViewById(convertView, R.id.alpha);
31 | TextView nameView = ViewHolder.findViewById(convertView, R.id.tv_friend_name);
32 | ImageView avatarView = ViewHolder.findViewById(convertView, R.id.img_friend_avatar);
33 |
34 | SortUser friend = datas.get(position);
35 | final String name = friend.getInnerUser().getUsername();
36 |
37 | UserService.displayAvatar(friend.getInnerUser(), avatarView);
38 | nameView.setText(name);
39 |
40 | int section = getSectionForPosition(position);
41 | if (position == getPositionForSection(section)) {
42 | alpha.setVisibility(View.VISIBLE);
43 | alpha.setText(friend.getSortLetters());
44 | } else {
45 | alpha.setVisibility(View.GONE);
46 | }
47 |
48 | return convertView;
49 | }
50 |
51 | public int getSectionForPosition(int position) {
52 | return datas.get(position).getSortLetters().charAt(0);
53 | }
54 |
55 |
56 | @SuppressLint("DefaultLocale")
57 | public int getPositionForSection(int section) {
58 | for (int i = 0; i < getCount(); i++) {
59 | String sortStr = datas.get(i).getSortLetters();
60 | char firstChar = sortStr.toUpperCase().charAt(0);
61 | if (firstChar == section) {
62 | return i;
63 | }
64 | }
65 | return -1;
66 | }
67 |
68 | @Override
69 | public Object[] getSections() {
70 | return null;
71 | }
72 |
73 | }
74 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/ui/conversation/ConversationBaseActivity.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.ui.conversation;
2 |
3 | import com.avos.avoscloud.im.v2.AVIMConversation;
4 | import com.avoscloud.chat.service.CacheService;
5 | import com.avoscloud.chat.service.ConversationChangeEvent;
6 |
7 | /**
8 | * Created by lzw on 14/12/20.
9 | */
10 | public abstract class ConversationBaseActivity extends ConversationEventBaseActivity {
11 |
12 | public static AVIMConversation conv() {
13 | return CacheService.getCurrentConversation();
14 | }
15 |
16 |
17 | @Override
18 | public void onEvent(ConversationChangeEvent conversationChangeEvent) {
19 | if (conv() != null && conv().getConversationId().
20 | equals(conversationChangeEvent.getConv().getConversationId())) {
21 | onConvChanged(conversationChangeEvent.getConv());
22 | }
23 | }
24 |
25 | protected abstract void onConvChanged(AVIMConversation conv);
26 | }
27 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/ui/conversation/ConversationEventBaseActivity.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.ui.conversation;
2 |
3 | import android.os.Bundle;
4 | import com.avoscloud.chat.service.ConversationChangeEvent;
5 | import com.avoscloud.chat.service.event.FinishEvent;
6 | import com.avoscloud.chat.ui.base_activity.BaseActivity;
7 | import de.greenrobot.event.EventBus;
8 |
9 | /**
10 | * Created by lzw on 15/3/5.
11 | */
12 | public abstract class ConversationEventBaseActivity extends BaseActivity {
13 | private EventBus eventBus;
14 |
15 | @Override
16 | protected void onCreate(Bundle savedInstanceState) {
17 | super.onCreate(savedInstanceState);
18 | eventBus = EventBus.getDefault();
19 | eventBus.register(this);
20 | }
21 |
22 | @Override
23 | protected void onDestroy() {
24 | super.onDestroy();
25 | eventBus.unregister(this);
26 | }
27 |
28 | abstract public void onEvent(ConversationChangeEvent conversationChangeEvent);
29 |
30 | public void onEvent(FinishEvent finishEvent) {
31 | this.finish();
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/ui/entry/EntryBaseActivity.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.ui.entry;
2 |
3 | import android.os.Bundle;
4 | import com.avoscloud.chat.service.event.LoginFinishEvent;
5 | import com.avoscloud.chat.ui.base_activity.BaseActivity;
6 | import de.greenrobot.event.EventBus;
7 |
8 | /**
9 | * Created by lzw on 14/11/20.
10 | */
11 | public class EntryBaseActivity extends BaseActivity {
12 | private EventBus eventBus = EventBus.getDefault();
13 |
14 | public void onEvent(LoginFinishEvent loginFinishEvent) {
15 | finish();
16 | }
17 |
18 | @Override
19 | protected void onCreate(Bundle savedInstanceState) {
20 | super.onCreate(savedInstanceState);
21 | eventBus.register(this);
22 | }
23 |
24 | @Override
25 | protected void onDestroy() {
26 | super.onDestroy();
27 | eventBus.unregister(this);
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/ui/entry/EntryLoginActivity.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.ui.entry;
2 |
3 | import android.app.ProgressDialog;
4 | import android.content.Intent;
5 | import android.os.Bundle;
6 | import android.text.TextUtils;
7 | import android.view.View;
8 | import android.widget.EditText;
9 | import com.avos.avoscloud.AVException;
10 | import com.avos.avoscloud.AVUser;
11 | import com.avos.avoscloud.LogInCallback;
12 | import com.avoscloud.chat.R;
13 | import com.avoscloud.chat.service.UserService;
14 | import com.avoscloud.chat.ui.MainActivity;
15 | import com.avoscloud.chat.util.Utils;
16 |
17 | import butterknife.ButterKnife;
18 | import butterknife.InjectView;
19 | import butterknife.OnClick;
20 |
21 |
22 | public class EntryLoginActivity extends EntryBaseActivity {
23 |
24 | @InjectView(R.id.activity_login_et_username)
25 | public EditText userNameView;
26 |
27 | @InjectView(R.id.activity_login_et_password)
28 | public EditText passwordView;
29 |
30 | @Override
31 | protected void onCreate(Bundle savedInstanceState) {
32 | // TODO Auto-generated method stub
33 | super.onCreate(savedInstanceState);
34 | setContentView(R.layout.entry_login_activity);
35 | ButterKnife.inject(this);
36 | }
37 |
38 | @OnClick(R.id.activity_login_btn_login)
39 | public void onLoginClick(View v) {
40 | login();
41 | }
42 |
43 | @OnClick(R.id.activity_login_btn_register)
44 | public void onRegisterClick(View v) {
45 | Intent intent = new Intent(ctx, EntryRegisterActivity.class);
46 | ctx.startActivity(intent);
47 | }
48 |
49 | private void login() {
50 | final String name = userNameView.getText().toString().trim();
51 | final String password = passwordView.getText().toString().trim();
52 |
53 | if (TextUtils.isEmpty(name)) {
54 | Utils.toast(R.string.username_cannot_null);
55 | return;
56 | }
57 |
58 | if (TextUtils.isEmpty(password)) {
59 | Utils.toast(R.string.password_can_not_null);
60 | return;
61 | }
62 |
63 | final ProgressDialog dialog = showSpinnerDialog();
64 | AVUser.logInInBackground(name, password, new LogInCallback() {
65 | @Override
66 | public void done(AVUser avUser, AVException e) {
67 | dialog.dismiss();
68 | if (filterException(e)) {
69 | UserService.updateUserLocation();
70 | MainActivity.goMainActivityFromActivity(EntryLoginActivity.this);
71 | }
72 | }
73 | });
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/ui/entry/EntrySplashActivity.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.ui.entry;
2 |
3 | import android.content.Intent;
4 | import android.os.Bundle;
5 | import android.os.Handler;
6 | import android.os.Message;
7 | import com.avos.avoscloud.AVUser;
8 | import com.avoscloud.chat.R;
9 | import com.avoscloud.chat.service.UserService;
10 | import com.avoscloud.chat.ui.MainActivity;
11 | import com.avoscloud.chat.ui.base_activity.BaseActivity;
12 |
13 | public class EntrySplashActivity extends BaseActivity {
14 | public static final int SPLASH_DURATION = 2000;
15 | private static final int GO_MAIN_MSG = 1;
16 | private static final int GO_LOGIN_MSG = 2;
17 |
18 | private Handler handler = new Handler() {
19 | @Override
20 | public void handleMessage(Message msg) {
21 | switch (msg.what) {
22 | case GO_MAIN_MSG:
23 | MainActivity.goMainActivityFromActivity(EntrySplashActivity.this);
24 | finish();
25 | break;
26 | case GO_LOGIN_MSG:
27 | Intent intent = new Intent(ctx, EntryLoginActivity.class);
28 | ctx.startActivity(intent);
29 | finish();
30 | break;
31 | }
32 | }
33 | };
34 |
35 | @Override
36 | protected void onCreate(Bundle savedInstanceState) {
37 | // TODO Auto-generated method stub
38 | super.onCreate(savedInstanceState);
39 | setContentView(R.layout.entry_splash_layout);
40 | if (AVUser.getCurrentUser() != null) {
41 | UserService.updateUserInfo();
42 | handler.sendEmptyMessageDelayed(GO_MAIN_MSG, SPLASH_DURATION);
43 | } else {
44 | handler.sendEmptyMessageDelayed(GO_LOGIN_MSG, SPLASH_DURATION);
45 | }
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/ui/profile/ProfileNotifySettingActivity.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.ui.profile;
2 |
3 | import android.os.Bundle;
4 | import com.avoscloud.chat.R;
5 | import com.avoscloud.chat.ui.base_activity.BaseActivity;
6 |
7 | /**
8 | * Created by lzw on 14-9-24.
9 | */
10 | public class ProfileNotifySettingActivity extends BaseActivity {
11 |
12 | @Override
13 | protected void onCreate(Bundle savedInstanceState) {
14 | super.onCreate(savedInstanceState);
15 | setContentView(R.layout.profile_setting_notify_layout);
16 | initActionBar(R.string.profile_notifySetting);
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/ui/profile/ProfileNotifySettingFragment.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.ui.profile;
2 |
3 | import android.os.Bundle;
4 | import android.preference.CheckBoxPreference;
5 | import android.preference.Preference;
6 | import android.preference.PreferenceFragment;
7 | import com.avoscloud.chat.R;
8 | import com.avoscloud.chat.service.PreferenceMap;
9 |
10 | /**
11 | * Created by lzw on 14-9-24.
12 | */
13 | public class ProfileNotifySettingFragment extends PreferenceFragment implements Preference.OnPreferenceChangeListener {
14 | public static final String NOTIFY_WHEN_NEWS = "notifyWhenNews";
15 | public static final String VOICE_NOTIFY = "voiceNotify";
16 | public static final String VIBRATE_NOTIFY = "vibrateNotify";
17 |
18 | PreferenceMap preferenceMap;
19 | CheckBoxPreference notifyWhenNews, voiceNotify, vibrateNotify;
20 |
21 | @Override
22 | public void onCreate(Bundle savedInstanceState) {
23 | super.onCreate(savedInstanceState);
24 | addPreferencesFromResource(R.xml.setting_preference);
25 | }
26 |
27 | @Override
28 | public void onActivityCreated(Bundle savedInstanceState) {
29 | super.onActivityCreated(savedInstanceState);
30 | preferenceMap = PreferenceMap.getCurUserPrefDao(getActivity());
31 | notifyWhenNews = (CheckBoxPreference) findPreference(NOTIFY_WHEN_NEWS);
32 | voiceNotify = (CheckBoxPreference) findPreference(VOICE_NOTIFY);
33 | vibrateNotify = (CheckBoxPreference) findPreference(VIBRATE_NOTIFY);
34 |
35 | notifyWhenNews.setOnPreferenceChangeListener(this);
36 | voiceNotify.setOnPreferenceChangeListener(this);
37 | vibrateNotify.setOnPreferenceChangeListener(this);
38 | }
39 |
40 | @Override
41 | public boolean onPreferenceChange(Preference preference, Object newValue) {
42 | String key = preference.getKey();
43 | boolean value = (Boolean) newValue;
44 | if (key.equals(NOTIFY_WHEN_NEWS)) {
45 | preferenceMap.setNotifyWhenNews(value);
46 | } else if (key.equals(VOICE_NOTIFY)) {
47 | preferenceMap.setVoiceNotify(value);
48 | } else if (key.equals(VIBRATE_NOTIFY)) {
49 | preferenceMap.setVibrateNotify(value);
50 | }
51 | return true;
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/ui/view/BaseListAdapter.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.ui.view;
2 |
3 | import android.content.Context;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.widget.BaseAdapter;
8 |
9 | import java.util.ArrayList;
10 | import java.util.List;
11 |
12 | /**
13 | * Created by lzw on 14-9-25.
14 | */
15 | public class BaseListAdapter extends BaseAdapter {
16 | protected Context ctx;
17 | protected LayoutInflater inflater;
18 | protected List datas = new ArrayList();
19 |
20 | public BaseListAdapter(Context ctx) {
21 | initWithContext(ctx);
22 | }
23 |
24 | public BaseListAdapter(Context ctx, List datas) {
25 | initWithContext(ctx);
26 | this.datas = datas;
27 | }
28 |
29 | public void initWithContext(Context ctx) {
30 | this.ctx = ctx;
31 | inflater = LayoutInflater.from(ctx);
32 | }
33 |
34 | public List getDatas() {
35 | return datas;
36 | }
37 |
38 | public void setDatas(List datas) {
39 | this.datas = datas;
40 | }
41 |
42 | public void addAll(List subDatas) {
43 | datas.addAll(subDatas);
44 | notifyDataSetChanged();
45 | }
46 |
47 | public void add(T object) {
48 | datas.add(object);
49 | notifyDataSetChanged();
50 | }
51 |
52 | public void remove(int position) {
53 | datas.remove(position);
54 | notifyDataSetChanged();
55 | }
56 |
57 | @Override
58 | public int getCount() {
59 | return datas.size();
60 | }
61 |
62 | @Override
63 | public Object getItem(int position) {
64 | return datas.get(position);
65 | }
66 |
67 | @Override
68 | public long getItemId(int position) {
69 | return position;
70 | }
71 |
72 | @Override
73 | public View getView(int position, View convertView, ViewGroup parent) {
74 | return null;
75 | }
76 |
77 | public void clear() {
78 | datas.clear();
79 | notifyDataSetChanged();
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/ui/view/ExpandGridView.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.ui.view;
2 |
3 | import android.content.Context;
4 | import android.util.AttributeSet;
5 | import android.widget.GridView;
6 |
7 | public class ExpandGridView extends GridView {
8 |
9 | public ExpandGridView(Context context, AttributeSet attrs) {
10 | super(context, attrs);
11 | }
12 |
13 | public ExpandGridView(Context context) {
14 | super(context);
15 | }
16 |
17 | public ExpandGridView(Context context, AttributeSet attrs, int defStyle) {
18 | super(context, attrs, defStyle);
19 | }
20 |
21 | @Override
22 | public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
23 | int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
24 | MeasureSpec.AT_MOST);
25 | super.onMeasure(widthMeasureSpec, expandSpec);
26 | }
27 | }
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/util/Connectivity.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.util;
2 |
3 | import android.content.Context;
4 | import android.net.ConnectivityManager;
5 | import android.net.NetworkInfo;
6 |
7 | /**
8 | * Created by lzw on 14/11/20.
9 | */
10 | public class Connectivity {
11 | public static NetworkInfo getNetworkInfo(Context context) {
12 | ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
13 | return cm.getActiveNetworkInfo();
14 | }
15 |
16 | public static boolean isConnected(Context context) {
17 | NetworkInfo info = getNetworkInfo(context);
18 | return isConnected(info);
19 | }
20 |
21 | public static boolean isConnected(NetworkInfo info) {
22 | return info != null && info.isConnected();
23 | }
24 |
25 | public static boolean isConnectedWifi(Context context) {
26 | NetworkInfo info = getNetworkInfo(context);
27 | return isConnected(info) && info.getType() == ConnectivityManager.TYPE_WIFI;
28 | }
29 |
30 | public static boolean isConnectedMobile(Context context) {
31 | NetworkInfo info = getNetworkInfo(context);
32 | return isConnected(info) && info.getType() == ConnectivityManager.TYPE_MOBILE;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/util/Logger.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.util;
2 |
3 | import android.util.Log;
4 |
5 | public class Logger {
6 | public static final int VERBOSE = 0;
7 | public static int level = VERBOSE;
8 | public static final int INFO = 1;
9 | public static final int DEBUG = 2;
10 | public static final int WARN = 3;
11 | public static final int ERROR = 4;
12 | public static final int NONE = 5;
13 | public static String tag = "leanchat";
14 |
15 | private static String getDebugInfo() {
16 | Throwable stack = new Throwable().fillInStackTrace();
17 | StackTraceElement[] trace = stack.getStackTrace();
18 | int n = 2;
19 | return trace[n].getClassName() + " " + trace[n].getMethodName() + "()" + ":" + trace[n].getLineNumber() + " ";
20 | }
21 |
22 | public static void v(String s) {
23 | if (VERBOSE >= level) {
24 | Log.v(tag, getDebugInfo() + s);
25 | }
26 | }
27 |
28 | public static void i(String s) {
29 | if (INFO >= level) {
30 | Log.i(tag, getDebugInfo() + s);
31 | }
32 | }
33 |
34 | public static void w(String s) {
35 | if (WARN >= level) {
36 | Log.w(tag, getDebugInfo() + s);
37 | }
38 | }
39 |
40 | public static void e(String s) {
41 | if (ERROR >= level) {
42 | Log.e(tag, getDebugInfo() + s);
43 | }
44 | }
45 |
46 | public static void d(String s) {
47 | if (DEBUG >= level) {
48 | Log.d(tag, getDebugInfo() + s);
49 | }
50 | }
51 |
52 | }
53 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/util/NetAsyncTask.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.util;
2 |
3 | import android.app.Activity;
4 | import android.app.ProgressDialog;
5 | import android.content.Context;
6 | import android.os.AsyncTask;
7 | import com.avoscloud.leanchatlib.utils.LogUtils;
8 |
9 | /**
10 | * Created by lzw on 14-6-7.
11 | */
12 | public abstract class NetAsyncTask extends AsyncTask {
13 | protected Context ctx;
14 | ProgressDialog dialog;
15 | boolean openDialog = true;
16 | Exception exception;
17 |
18 | protected NetAsyncTask(Context ctx) {
19 | this.ctx = ctx;
20 | }
21 |
22 | protected NetAsyncTask(Context ctx, boolean openDialog) {
23 | this.ctx = ctx;
24 | this.openDialog = openDialog;
25 | }
26 |
27 | public NetAsyncTask setOpenDialog(boolean openDialog) {
28 | this.openDialog = openDialog;
29 | return this;
30 | }
31 |
32 | public ProgressDialog getDialog() {
33 | return dialog;
34 | }
35 |
36 | @Override
37 | protected void onPreExecute() {
38 | super.onPreExecute();
39 | if (openDialog) {
40 | dialog = Utils.showSpinnerDialog((Activity) ctx);
41 | }
42 | }
43 |
44 | @Override
45 | protected Void doInBackground(Void... params) {
46 | try {
47 | doInBack();
48 | } catch (Exception e) {
49 | LogUtils.logException(e);
50 | exception = e;
51 | }
52 | return null;
53 | }
54 |
55 | @Override
56 | protected void onPostExecute(Void aVoid) {
57 | super.onPostExecute(aVoid);
58 | if (openDialog) {
59 | if (dialog.isShowing()) {
60 | dialog.dismiss();
61 | }
62 | }
63 | onPost(exception);
64 | }
65 |
66 | protected abstract void doInBack() throws Exception;
67 |
68 | protected abstract void onPost(Exception e);
69 | }
70 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/util/NotificationUtil.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.util;
2 |
3 | import android.app.Notification;
4 | import android.app.NotificationManager;
5 | import android.app.PendingIntent;
6 | import android.content.ComponentName;
7 | import android.content.ContentResolver;
8 | import android.content.Context;
9 | import android.content.Intent;
10 | import android.net.Uri;
11 |
12 | import com.avos.avospush.notification.NotificationCompat;
13 |
14 | import java.util.Random;
15 |
16 | /**
17 | * Created by wli on 15/7/15.
18 | */
19 | public class NotificationUtil {
20 |
21 | public static void showNotification(Context context, String title, String content, Class> className) {
22 | showNotification(context, title, content, null, className);
23 | }
24 |
25 | public static void showNotification(Context context, String title, String content, String sound, Class> className) {
26 |
27 | int notificationId = (new Random()).nextInt();
28 | Intent intent = new Intent();
29 | ComponentName cn = new ComponentName(context, className);
30 | intent.setComponent(cn);
31 | PendingIntent contentIntent = PendingIntent.getActivity(context, notificationId, intent, 0);
32 | NotificationCompat.Builder mBuilder =
33 | new NotificationCompat.Builder(context)
34 | .setSmallIcon(context.getApplicationInfo().icon)
35 | .setContentTitle(title).setAutoCancel(true).setContentIntent(contentIntent)
36 | .setDefaults(Notification.DEFAULT_VIBRATE | Notification.DEFAULT_SOUND)
37 | .setContentText(content);
38 | NotificationManager manager =
39 | (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
40 | Notification notification = mBuilder.build();
41 | if (sound != null && sound.trim().length() > 0) {
42 | notification.sound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + sound);
43 | }
44 | manager.notify(notificationId, notification);
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/util/PathUtils.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.util;
2 |
3 | import android.os.Environment;
4 | import com.avoscloud.chat.base.App;
5 |
6 | import java.io.File;
7 |
8 | /**
9 | * Created by lzw on 14-9-19.
10 | */
11 | public class PathUtils {
12 |
13 | private static boolean isExternalStorageWritable() {
14 | String state = Environment.getExternalStorageState();
15 | return Environment.MEDIA_MOUNTED.equals(state);
16 | }
17 |
18 | private static File getAvailableCacheDir() {
19 | if (isExternalStorageWritable()) {
20 | return App.ctx.getExternalCacheDir();
21 | } else {
22 | return App.ctx.getCacheDir();
23 | }
24 | }
25 |
26 | public static String checkAndMkdirs(String dir) {
27 | File file = new File(dir);
28 | if (file.exists() == false) {
29 | file.mkdirs();
30 | }
31 | return dir;
32 | }
33 |
34 | public static String getAvatarCropPath() {
35 | return new File(getAvailableCacheDir(), "avatar_crop").getAbsolutePath();
36 | }
37 |
38 | public static String getAvatarTmpPath() {
39 | return new File(getAvailableCacheDir(), "avatar_tmp").getAbsolutePath();
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/util/PixelUtils.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.util;
2 |
3 | import android.content.res.Resources;
4 |
5 | /**
6 | * 像素转换工具
7 | *
8 | * @author MarkMjw
9 | */
10 | public class PixelUtils {
11 | private static Resources resources = Resources.getSystem();
12 | private static int desityDpi = resources.getDisplayMetrics().densityDpi;
13 | private static float scaledDensity = resources.getDisplayMetrics().scaledDensity;
14 |
15 | public static int dp2px(float value) {
16 | final float scale = desityDpi;
17 | return (int) (value * (scale / 160) + 0.5f);
18 | }
19 |
20 | public static int px2dp(float value) {
21 | final float scale = desityDpi;
22 | return (int) ((value * 160) / scale + 0.5f);
23 | }
24 |
25 | public static int sp2px(float value) {
26 | float spvalue = value * scaledDensity;
27 | return (int) (spvalue + 0.5f);
28 | }
29 |
30 | public static int px2sp(float value) {
31 | final float scale = scaledDensity;
32 | return (int) (value / scale + 0.5f);
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/util/RefreshTask.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.util;
2 |
3 | import android.content.Context;
4 |
5 | /**
6 | * Created by lzw on 15/2/27.
7 | */
8 | public abstract class RefreshTask extends SimpleNetTask {
9 | private Refreshable refreshable;
10 |
11 | public RefreshTask(Context cxt, Refreshable refreshable) {
12 | super(cxt);
13 | this.refreshable = refreshable;
14 | }
15 |
16 | @Override
17 | protected void onSucceed() {
18 | this.refreshable.refresh();
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/util/Refreshable.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.util;
2 |
3 | /**
4 | * Created by lzw on 15/2/27.
5 | */
6 | public interface Refreshable {
7 | void refresh();
8 | }
9 |
--------------------------------------------------------------------------------
/leanchat/src/main/java/com/avoscloud/chat/util/SimpleNetTask.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.chat.util;
2 |
3 | import android.content.Context;
4 |
5 | /**
6 | * Created by lzw on 14-9-27.
7 | */
8 | public abstract class SimpleNetTask extends NetAsyncTask {
9 | protected SimpleNetTask(Context cxt) {
10 | super(cxt);
11 | }
12 |
13 | protected SimpleNetTask(Context cxt, boolean openDialog) {
14 | super(cxt, openDialog);
15 | }
16 |
17 |
18 | @Override
19 | protected void onPost(Exception e) {
20 | if (e != null) {
21 | e.printStackTrace();
22 | Utils.toast(e.getMessage());
23 | //Utils.toast(ctx, R.string.pleaseCheckNetwork);
24 | } else {
25 | onSucceed();
26 | }
27 | }
28 |
29 | protected abstract void doInBack() throws Exception;
30 |
31 | protected abstract void onSucceed();
32 | }
33 |
--------------------------------------------------------------------------------
/leanchat/src/main/jniLibs/armeabi/libBaiduMapSDK_v3_0_0.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/jniLibs/armeabi/libBaiduMapSDK_v3_0_0.so
--------------------------------------------------------------------------------
/leanchat/src/main/jniLibs/armeabi/liblocSDK4d.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/jniLibs/armeabi/liblocSDK4d.so
--------------------------------------------------------------------------------
/leanchat/src/main/res/anim/grow_from_bottom.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
16 |
17 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/anim/push_top_in2.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/anim/push_top_out2.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/anim/shrink_from_top.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
16 |
17 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-hdpi/base_horizontal_line.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-hdpi/base_horizontal_line.9.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-hdpi/chat_btn_voice_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-hdpi/chat_btn_voice_normal.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-hdpi/chat_item_location_default.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-hdpi/chat_item_location_default.9.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-hdpi/common_view_right_arrow_pic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-hdpi/common_view_right_arrow_pic.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/avoscloud_feedback_dev_reply_background.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/avoscloud_feedback_dev_reply_background.9.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/avoscloud_feedback_notification.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/avoscloud_feedback_notification.9.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/avoscloud_feedback_thread_actionbar_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/avoscloud_feedback_thread_actionbar_back.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/avoscloud_feedback_user_reply_background.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/avoscloud_feedback_user_reply_background.9.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/base_action_bar_add_bg_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/base_action_bar_add_bg_normal.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/base_action_bar_add_bg_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/base_action_bar_add_bg_pressed.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/base_edit_input.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/base_edit_input.9.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/base_horizontal_line.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/base_horizontal_line.9.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/btn_logout_pressed.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/btn_logout_pressed.9.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/chat_location_activity_icon_geo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/chat_location_activity_icon_geo.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/clear_edit_search_clear_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/clear_edit_search_clear_normal.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/clear_edit_search_clear_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/clear_edit_search_clear_pressed.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/common_input_bg.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/common_input_bg.9.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/common_msg_tips.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/common_msg_tips.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/common_view_right_arrow_pic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/common_view_right_arrow_pic.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/contact_fragment_icon_msg_search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/contact_fragment_icon_msg_search.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/contact_group_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/contact_group_icon.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/contact_new_friends_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/contact_new_friends_icon.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/contact_person_info_about_top_bg.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/contact_person_info_about_top_bg.9.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/contact_person_info_mid_bg.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/contact_person_info_mid_bg.9.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/discover_lay_icn_order_artist.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/discover_lay_icn_order_artist.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/discover_lay_icn_order_artist_p.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/discover_lay_icn_order_artist_p.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/head.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/head.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/icon.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/login_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/login_bg.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/login_icon_account.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/login_icon_account.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/login_icon_password.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/login_icon_password.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/main_acvitivy_top_bar.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/main_acvitivy_top_bar.9.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/profile_btn_logout_normal.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/profile_btn_logout_normal.9.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/splash_back.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/splash_back.9.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/tabbar_chat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/tabbar_chat.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/tabbar_chat_active.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/tabbar_chat_active.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/tabbar_contacts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/tabbar_contacts.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/tabbar_contacts_active.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/tabbar_contacts_active.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/tabbar_discover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/tabbar_discover.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/tabbar_discover_active.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/tabbar_discover_active.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/tabbar_me.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/tabbar_me.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/tabbar_me_active.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/tabbar_me_active.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable-xhdpi/utils_icon_info_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchat/src/main/res/drawable-xhdpi/utils_icon_info_2.png
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable/base_action_bar_add_bg_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable/btn_logout_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable/btn_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable/button_normal_shape.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable/clear_edittext_search_clear.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable/common_btn.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable/common_btn_normal.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable/common_btn_pressed.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable/contact_fragment_gallery_contacts_dialog_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
9 |
10 |
15 |
16 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable/contact_fragment_sortlistview_sidebar_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable/group_detail_btn.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable/nearby_order.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable/recent_message_text_color_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable/recent_name_text_color_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/drawable/tab_textcolor.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/layout/chat_xlistview_footer.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
11 |
12 |
18 |
19 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/layout/chat_xlistview_header.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
11 |
12 |
18 |
19 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/layout/common_divider.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/layout/common_header_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
10 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/layout/common_user_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
15 |
16 |
21 |
22 |
28 |
29 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/layout/common_view_right_arrow.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/layout/contact_add_friend_activity.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
12 |
13 |
25 |
26 |
36 |
37 |
38 |
48 |
49 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/layout/contact_new_friend_activity.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
18 |
19 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/layout/conversation_add_members_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
11 |
17 |
18 |
22 |
23 |
31 |
32 |
33 |
34 |
38 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/layout/conversation_add_members_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
12 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/layout/conversation_detail_activity.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
12 |
13 |
18 |
19 |
23 |
24 |
27 |
28 |
31 |
32 |
33 |
34 |
35 |
36 |
39 |
40 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/layout/conversation_list_activity.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
12 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/layout/conversation_list_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
12 |
13 |
18 |
19 |
26 |
27 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/layout/conversation_member_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
10 |
14 |
15 |
20 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/layout/discover_fragment.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
21 |
22 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/layout/discover_near_people_item.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
12 |
16 |
17 |
22 |
23 |
28 |
29 |
37 |
38 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/layout/entry_splash_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/layout/message_fragment.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
10 |
11 |
12 |
18 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/layout/profile_setting_notify_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/layout/refreshable_view_pull_to_refresh_header.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
13 |
17 |
18 |
24 |
25 |
31 |
32 |
33 |
38 |
39 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/layout/update_content_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
15 |
16 |
25 |
26 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/menu/chat_ativity_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/menu/update_content_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/values-sw600dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/values-sw720dp-land/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/values-v11/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/values-v14/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/values/bools.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | true
4 | true
5 | true
6 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/values/color_standard.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | #00000000
5 | #cccccc
6 |
7 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #72c0f2
4 | #9da0a4
5 | #4f9ef6
6 | #f0f2f5
7 | #9fa0a0
8 | #f5f5f5
9 | #f4f6f6
10 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 60dp
6 | 1dip
7 | 48.0dip
8 | 10.0dp
9 | 16dp
10 |
11 | 18sp
12 | 100dp
13 |
14 |
15 | 22.0sp
16 | 80dp
17 | 10dp
18 | 10dp
19 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/values/dimens_standard.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 15dp
5 | 10dp
6 | @dimen/common_horizontal_margin
7 | @dimen/common_horizontal_margin
8 |
9 |
10 | 60dp
11 | @dimen/common_vertical_margin
12 |
13 | 1px
14 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/values/styles_standard.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
11 |
12 |
16 |
17 |
18 |
19 |
23 |
24 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/leanchat/src/main/res/xml/setting_preference.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
10 |
15 |
16 |
21 |
--------------------------------------------------------------------------------
/leanchatlib-demo/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/leanchatlib-demo/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 22
5 | buildToolsVersion "21.1.2"
6 |
7 | defaultConfig {
8 | applicationId "com.avoscloud.leanchatlib_demo"
9 | minSdkVersion 14
10 | targetSdkVersion 22
11 | versionCode 1
12 | versionName "1.0"
13 | }
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18 | }
19 | }
20 |
21 | lintOptions {
22 | abortOnError false
23 | }
24 |
25 | packagingOptions {
26 | exclude 'META-INF/LICENSE.txt'
27 | exclude 'META-INF/NOTICE.txt'
28 | }
29 | }
30 |
31 | dependencies {
32 | compile project(':leanchatlib')
33 | compile 'com.jakewharton:butterknife:6.1.0'
34 | }
35 |
--------------------------------------------------------------------------------
/leanchatlib-demo/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in /Users/lzw/dev-env/android-sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/leanchatlib-demo/src/androidTest/java/com/avoscloud/leanchatlib_demo/ApplicationTest.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.leanchatlib_demo;
2 |
3 | import android.app.Application;
4 | import android.test.ApplicationTestCase;
5 |
6 | /**
7 | * Testing Fundamentals
8 | */
9 | public class ApplicationTest extends ApplicationTestCase {
10 | public ApplicationTest() {
11 | super(Application.class);
12 | }
13 | }
--------------------------------------------------------------------------------
/leanchatlib-demo/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
21 |
22 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
34 |
35 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/leanchatlib-demo/src/main/java/com/avoscloud/leanchatlib_demo/ChatRoomActivity.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.leanchatlib_demo;
2 |
3 | import android.os.Bundle;
4 | import android.view.View;
5 | import com.avos.avoscloud.im.v2.messages.AVIMImageMessage;
6 | import com.avos.avoscloud.im.v2.messages.AVIMLocationMessage;
7 | import com.avoscloud.leanchatlib.activity.ChatActivity;
8 | import com.avoscloud.leanchatlib.activity.ChatActivityEventListener;
9 |
10 | /**
11 | * Created by lzw on 15/4/27.
12 | */
13 | public class ChatRoomActivity extends ChatActivity implements ChatActivityEventListener {
14 |
15 | @Override
16 | public void onCreate(Bundle savedInstanceState) {
17 | super.onCreate(savedInstanceState);
18 | addLocationBtn.setVisibility(View.VISIBLE);
19 | // addLocationBtn.setVisibility(View.GONE);
20 | }
21 |
22 | @Override
23 | public void onAddLocationButtonClicked(View v) {
24 | toast("这里可以跳转到地图界面,选取地址");
25 | }
26 |
27 | @Override
28 | public void onLocationMessageViewClicked(AVIMLocationMessage locationMessage) {
29 | toast("这里跳转到地图界面,查看地理位置");
30 | }
31 |
32 | @Override
33 | public void onImageMessageViewClicked(AVIMImageMessage imageMessage, String localImagePath) {
34 | toast("这里跳转到图片浏览页面,查看图片消息详情");
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/leanchatlib-demo/src/main/java/com/avoscloud/leanchatlib_demo/LoginActivity.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.leanchatlib_demo;
2 |
3 | import android.app.Activity;
4 | import android.content.Intent;
5 | import android.os.Bundle;
6 | import android.text.TextUtils;
7 | import android.view.View;
8 | import android.widget.Button;
9 | import android.widget.EditText;
10 | import com.avos.avoscloud.AVException;
11 | import com.avos.avoscloud.im.v2.AVIMClient;
12 | import com.avos.avoscloud.im.v2.callback.AVIMClientCallback;
13 | import com.avoscloud.leanchatlib.controller.ChatManager;
14 | import com.avoscloud.leanchatlib.utils.LogUtils;
15 |
16 |
17 | public class LoginActivity extends Activity implements View.OnClickListener {
18 | private EditText selfIdEditText;
19 | private Button loginButton;
20 |
21 | @Override
22 | protected void onCreate(Bundle savedInstanceState) {
23 | super.onCreate(savedInstanceState);
24 | setContentView(R.layout.activity_login);
25 | selfIdEditText = (EditText) findViewById(R.id.selfIdEditText);
26 | loginButton = (Button) findViewById(R.id.login);
27 | loginButton.setOnClickListener(this);
28 | }
29 |
30 | @Override
31 | public void onClick(View view) {
32 | String selfId = selfIdEditText.getText().toString();
33 | if (!TextUtils.isEmpty(selfId)) {
34 | ChatManager chatManager = ChatManager.getInstance();
35 | chatManager.setupManagerWithUserId(selfId);
36 | chatManager.openClient(new AVIMClientCallback() {
37 | @Override
38 | public void done(AVIMClient avimClient, AVException e) {
39 | if (e != null) {
40 | LogUtils.logException(e);
41 | }
42 | Intent intent = new Intent(LoginActivity.this, MainActivity.class);
43 | startActivity(intent);
44 | finish();
45 | }
46 | });
47 | }
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/leanchatlib-demo/src/main/res/layout/activity_login.xml:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
18 |
19 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/leanchatlib-demo/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
11 |
12 |
17 |
18 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/leanchatlib-demo/src/main/res/menu/menu_login.xml:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/leanchatlib-demo/src/main/res/menu/menu_main.xml:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/leanchatlib-demo/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib-demo/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/leanchatlib-demo/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib-demo/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/leanchatlib-demo/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib-demo/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/leanchatlib-demo/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib-demo/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/leanchatlib-demo/src/main/res/values-w820dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 64dp
6 |
7 |
--------------------------------------------------------------------------------
/leanchatlib-demo/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 |
6 |
--------------------------------------------------------------------------------
/leanchatlib-demo/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | leanchatlib-demo
3 |
4 | Hello world!
5 | Settings
6 | MainActivity
7 |
8 |
--------------------------------------------------------------------------------
/leanchatlib-demo/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/leanchatlib/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/leanchatlib/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 |
3 | android {
4 | compileSdkVersion 22
5 | buildToolsVersion "21.1.2"
6 |
7 | defaultConfig {
8 | minSdkVersion 14
9 | targetSdkVersion 22
10 | versionCode 1
11 | versionName "1.0"
12 | multiDexEnabled true
13 | }
14 |
15 | lintOptions {
16 | abortOnError false
17 | }
18 |
19 | buildTypes {
20 | release {
21 | minifyEnabled false
22 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
23 | }
24 | }
25 | }
26 |
27 | //jar 包请见 ./libs,不是 ./leanchatlib/libs。转 Eclipse 的项目格式的时候可能用到。
28 | dependencies {
29 |
30 | compile 'com.android.support:support-v4:21.0.3'
31 |
32 | compile 'cn.leancloud.android:avoscloud-sdk:v3.7.2'
33 | compile 'cn.leancloud.android:avoscloud-push:v3.7.2@aar'
34 |
35 | compile files('libs/prettytime-3.2.5.Final.jar')
36 | compile 'cn.leancloud.android:Java-WebSocket:1.2.0-leancloud'
37 | compile 'com.loopj.android:android-async-http:1.4.6'
38 | compile 'cn.leancloud.android:fastjson:1.1.37-leancloud'
39 | compile 'org.apache.httpcomponents:httpmime:4.2.4'
40 | compile 'de.greenrobot:eventbus:2.4.0'
41 | compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'
42 |
43 | //compile fileTree(dir: 'libs', include: ['*.jar'])
44 | }
45 |
--------------------------------------------------------------------------------
/leanchatlib/libs/prettytime-3.2.5.Final.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/libs/prettytime-3.2.5.Final.jar
--------------------------------------------------------------------------------
/leanchatlib/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in /Users/lzw/dev-env/android-sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/leanchatlib/src/androidTest/java/com/avoscloud/leanchatlib/ApplicationTest.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.leanchatlib;
2 |
3 | import android.app.Application;
4 | import android.test.ApplicationTestCase;
5 |
6 | /**
7 | * Testing Fundamentals
8 | */
9 | public class ApplicationTest extends ApplicationTestCase {
10 | public ApplicationTest() {
11 | super(Application.class);
12 | }
13 | }
--------------------------------------------------------------------------------
/leanchatlib/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/java/com/avoscloud/leanchatlib/activity/ChatActivityEventListener.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.leanchatlib.activity;
2 |
3 | import android.view.View;
4 | import com.avos.avoscloud.im.v2.messages.AVIMImageMessage;
5 | import com.avos.avoscloud.im.v2.messages.AVIMLocationMessage;
6 |
7 | /**
8 | * Created by lzw on 15/7/16.
9 | */
10 | public interface ChatActivityEventListener {
11 |
12 | /**
13 | * 当发送地理位置按钮被点击时
14 | *
15 | * @param v
16 | */
17 | void onAddLocationButtonClicked(View v);
18 |
19 | /**
20 | * 当地图消息view被点击时
21 | *
22 | * @param locationMessage
23 | */
24 | void onLocationMessageViewClicked(AVIMLocationMessage locationMessage);
25 |
26 | /**
27 | * 当图片消息 view 被点击时
28 | *
29 | * @param imageMessage
30 | * @param localImagePath 本地缓存的路径,可能并没有文件
31 | */
32 | void onImageMessageViewClicked(AVIMImageMessage imageMessage, String localImagePath);
33 | }
34 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/java/com/avoscloud/leanchatlib/adapter/ChatEmotionGridAdapter.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.leanchatlib.adapter;
2 |
3 | import android.content.Context;
4 | import android.graphics.Bitmap;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.widget.BaseAdapter;
8 | import android.widget.ImageView;
9 | import com.avoscloud.leanchatlib.R;
10 | import com.avoscloud.leanchatlib.controller.EmotionHelper;
11 | import com.avoscloud.leanchatlib.view.ViewHolder;
12 |
13 | import java.util.ArrayList;
14 | import java.util.List;
15 |
16 | /**
17 | * Created by lzw on 14-9-25.
18 | */
19 | public class ChatEmotionGridAdapter extends BaseAdapter {
20 | private Context context;
21 | private List datas = new ArrayList<>();
22 |
23 | public ChatEmotionGridAdapter(Context ctx) {
24 | this.context = ctx;
25 | }
26 |
27 | public void setDatas(List datas) {
28 | this.datas = datas;
29 | }
30 |
31 | @Override
32 | public int getCount() {
33 | return datas.size();
34 | }
35 |
36 | @Override
37 | public Object getItem(int i) {
38 | return datas.get(i);
39 | }
40 |
41 | @Override
42 | public long getItemId(int i) {
43 | return i;
44 | }
45 |
46 | @Override
47 | public View getView(int position, View conView, ViewGroup parent) {
48 | if (conView == null) {
49 | conView = View.inflate(context, R.layout.chat_emotion_item, null);
50 | }
51 | ImageView emotionImageView = ViewHolder.findViewById(conView, R.id.emotionImageView);
52 | String emotion = (String) getItem(position);
53 | emotion = emotion.substring(1, emotion.length() - 1);
54 | Bitmap bitmap = EmotionHelper.getEmojiDrawable(context, emotion);
55 | emotionImageView.setImageBitmap(bitmap);
56 | return conView;
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/java/com/avoscloud/leanchatlib/adapter/ChatEmotionPagerAdapter.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.leanchatlib.adapter;
2 |
3 | import android.support.v4.view.PagerAdapter;
4 | import android.view.View;
5 | import android.view.ViewGroup;
6 |
7 | import java.util.ArrayList;
8 | import java.util.List;
9 |
10 | /**
11 | * Created by lzw on 14-9-25.
12 | */
13 | public class ChatEmotionPagerAdapter extends PagerAdapter {
14 |
15 | private List views = new ArrayList();
16 |
17 | public ChatEmotionPagerAdapter(List views) {
18 | this.views = views;
19 | }
20 |
21 | @Override
22 | public int getCount() {
23 | return views.size();
24 | }
25 |
26 | @Override
27 | public boolean isViewFromObject(View view, Object o) {
28 | return view == o;
29 | }
30 |
31 | @Override
32 | public Object instantiateItem(ViewGroup container, int position) {
33 | container.addView(views.get(position));
34 | return views.get(position);
35 | }
36 |
37 | @Override
38 | public void destroyItem(ViewGroup container, int position, Object object) {
39 | container.removeView(views.get(position));
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/java/com/avoscloud/leanchatlib/controller/AVIMTypedMessagesArrayCallback.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.leanchatlib.controller;
2 |
3 | import com.avos.avoscloud.AVException;
4 | import com.avos.avoscloud.im.v2.AVIMTypedMessage;
5 |
6 | import java.util.List;
7 |
8 | public interface AVIMTypedMessagesArrayCallback {
9 | void done(List typedMessages, AVException e);
10 | }
--------------------------------------------------------------------------------
/leanchatlib/src/main/java/com/avoscloud/leanchatlib/controller/AudioHelper.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.leanchatlib.controller;
2 |
3 | import android.media.MediaPlayer;
4 | import com.avoscloud.leanchatlib.utils.LogUtils;
5 |
6 | import java.io.IOException;
7 |
8 | /**
9 | * Created by lzw on 14/12/19.
10 | */
11 | public class AudioHelper {
12 | private static AudioHelper audioHelper;
13 | private MediaPlayer mediaPlayer;
14 | private Runnable finishCallback;
15 | private String audioPath;
16 | private boolean onceStart = false;
17 |
18 | private AudioHelper() {
19 | mediaPlayer = new MediaPlayer();
20 | }
21 |
22 | public static AudioHelper getInstance() {
23 | if (audioHelper == null) {
24 | audioHelper = new AudioHelper();
25 | }
26 | return audioHelper;
27 | }
28 |
29 | public String getAudioPath() {
30 | return audioPath;
31 | }
32 |
33 | public void stopPlayer() {
34 | if (mediaPlayer != null) {
35 | mediaPlayer.stop();
36 | mediaPlayer.release();
37 | mediaPlayer = null;
38 | }
39 | }
40 |
41 | public void pausePlayer() {
42 | if (mediaPlayer != null) {
43 | mediaPlayer.pause();
44 | }
45 | }
46 |
47 | public boolean isPlaying() {
48 | return mediaPlayer.isPlaying();
49 | }
50 |
51 | public void restartPlayer() {
52 | if (mediaPlayer != null && mediaPlayer.isPlaying() == false) {
53 | mediaPlayer.start();
54 | }
55 | }
56 |
57 | public synchronized void playAudio(String path, Runnable finishCallback) {
58 | if (onceStart) {
59 | mediaPlayer.reset();
60 | }
61 | tryRunFinishCallback();
62 | audioPath = path;
63 | AudioHelper.this.finishCallback = finishCallback;
64 | try {
65 | mediaPlayer.setDataSource(path);
66 | mediaPlayer.prepare();
67 | mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
68 | @Override
69 | public void onCompletion(MediaPlayer mp) {
70 | tryRunFinishCallback();
71 | }
72 | });
73 | mediaPlayer.start();
74 | onceStart = true;
75 | } catch (IOException e) {
76 | LogUtils.logException(e);
77 | }
78 | }
79 |
80 | public void tryRunFinishCallback() {
81 | if (finishCallback != null) {
82 | finishCallback.run();
83 | finishCallback = null;
84 | }
85 | }
86 | }
87 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/java/com/avoscloud/leanchatlib/controller/ChatManagerAdapter.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.leanchatlib.controller;
2 |
3 | import android.content.Context;
4 | import com.avos.avoscloud.im.v2.AVIMConversation;
5 | import com.avos.avoscloud.im.v2.AVIMTypedMessage;
6 | import com.avoscloud.leanchatlib.model.UserInfo;
7 |
8 | import java.util.List;
9 |
10 | /**
11 | * 配置用户信息和通知处理
12 | */
13 | public interface ChatManagerAdapter {
14 | /**
15 | * 同步获取用户信息,用在聊天页面的 MessageAdapter
16 | * @param userId
17 | * @return
18 | */
19 | UserInfo getUserInfoById(String userId);
20 |
21 | /**
22 | * 为了支持能够同步获取用户信息,请先缓存用户信息,会在后台线程调用此函数
23 | * @param userIds 将可能被 getUserInfoById() 用到的userId,也即聊天页面消息的发送者们
24 | * @throws Exception 可抛出网络异常
25 | */
26 | void cacheUserInfoByIdsInBackground(List userIds) throws Exception;
27 |
28 | /**
29 | * 当来了消息后发现是以下情况将触发此函数:
30 | * 应用在后台时、应用在前台但不在聊天页面时、在聊天页面但不是目标对话时
31 | * @param context 方便弹框
32 | * @param selfId 自己的 userid
33 | * @param conversation 消息所属的对话
34 | * @param message 到来的消息
35 | */
36 | void shouldShowNotification(Context context, String selfId, AVIMConversation conversation, AVIMTypedMessage message);
37 | }
38 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/java/com/avoscloud/leanchatlib/controller/DBHelper.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.leanchatlib.controller;
2 |
3 | import android.content.Context;
4 | import android.database.sqlite.SQLiteDatabase;
5 | import android.database.sqlite.SQLiteOpenHelper;
6 | import com.avoscloud.leanchatlib.utils.LogUtils;
7 |
8 | /**
9 | * Created by lzw on 15/7/14.
10 | */
11 | class DBHelper extends SQLiteOpenHelper {
12 | private static final int DB_VER = 6;
13 | private String userId;
14 |
15 | private DBHelper(Context context, String name, int version) {
16 | super(context, name, null, version);
17 | }
18 |
19 | DBHelper(Context context, String userId) {
20 | this(context, "chat_" + userId + ".db3", DB_VER);
21 | this.userId = userId;
22 | }
23 |
24 | @Override
25 | public void onCreate(SQLiteDatabase db) {
26 | }
27 |
28 | @Override
29 | public void onOpen(SQLiteDatabase db) {
30 | super.onOpen(db);
31 | LogUtils.d("chat db path", db.getPath());
32 | RoomsTable.createTableAndIndex(db);
33 | }
34 |
35 | @Override
36 | public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
37 | switch (newVersion) {
38 | case 6:
39 | RoomsTable.dropTable(db);
40 | RoomsTable.createTableAndIndex(db);
41 | case 2:
42 | case 1:
43 | break;
44 | }
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/java/com/avoscloud/leanchatlib/model/ConversationType.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.leanchatlib.model;
2 |
3 | /**
4 | * 对话类型。因为两个人对话可能是单聊,也可能是群聊。所以需要额外的类型区分
5 | * Created by lzw on 14/11/18.
6 | */
7 | public enum ConversationType {
8 | Single(0), Group(1);
9 | /**
10 | * 创建的时候直接设置 type 字段
11 | */
12 | public static final String TYPE_KEY = "type";
13 | /**
14 | * 查找对话的时候,要加前缀 attr. 其实type保存在conversation的attr中
15 | * 登录网站后台,_Conversation 表可看到
16 | */
17 | public static final String ATTR_TYPE_KEY = "attr.type";
18 |
19 | int value;
20 |
21 | ConversationType(int value) {
22 | this.value = value;
23 | }
24 |
25 | public static ConversationType fromInt(int i) {
26 | if (i < 2) {
27 | return values()[i];
28 | } else {
29 | return Group;
30 | }
31 | }
32 |
33 | public int getValue() {
34 | return value;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/java/com/avoscloud/leanchatlib/model/MessageEvent.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.leanchatlib.model;
2 |
3 | import com.avos.avoscloud.im.v2.AVIMTypedMessage;
4 |
5 | /**
6 | * Created by lzw on 15/3/4.
7 | */
8 | public class MessageEvent {
9 | public enum Type {
10 | Come, Receipt
11 | }
12 |
13 | private AVIMTypedMessage message;
14 | private Type type;
15 |
16 | public MessageEvent(AVIMTypedMessage message, Type type) {
17 | this.message = message;
18 | this.type = type;
19 | }
20 |
21 | public AVIMTypedMessage getMessage() {
22 | return message;
23 | }
24 |
25 | public Type getType() {
26 | return type;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/java/com/avoscloud/leanchatlib/model/Room.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.leanchatlib.model;
2 |
3 | import com.avos.avoscloud.im.v2.AVIMConversation;
4 | import com.avos.avoscloud.im.v2.AVIMTypedMessage;
5 |
6 | /**
7 | * Created by lzw on 14-9-26.
8 | */
9 | public class Room {
10 | private AVIMTypedMessage lastMessage;
11 | private AVIMConversation conversation;
12 | private String conversationId;
13 | private int unreadCount;
14 |
15 | public AVIMTypedMessage getLastMessage() {
16 | return lastMessage;
17 | }
18 |
19 | public void setLastMessage(AVIMTypedMessage lastMessage) {
20 | this.lastMessage = lastMessage;
21 | }
22 |
23 | public AVIMConversation getConversation() {
24 | return conversation;
25 | }
26 |
27 | public void setConversation(AVIMConversation conversation) {
28 | this.conversation = conversation;
29 | }
30 |
31 | public String getConversationId() {
32 | return conversationId;
33 | }
34 |
35 | public void setConversationId(String conversationId) {
36 | this.conversationId = conversationId;
37 | }
38 |
39 | public int getUnreadCount() {
40 | return unreadCount;
41 | }
42 |
43 | public void setUnreadCount(int unreadCount) {
44 | this.unreadCount = unreadCount;
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/java/com/avoscloud/leanchatlib/model/UserInfo.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.leanchatlib.model;
2 |
3 | /**
4 | * Created by lzw on 15/4/26.
5 | */
6 | public class UserInfo {
7 | private String username;
8 | private String avatarUrl;
9 |
10 | public String getUsername() {
11 | return username;
12 | }
13 |
14 | public void setUsername(String username) {
15 | this.username = username;
16 | }
17 |
18 | public String getAvatarUrl() {
19 | return avatarUrl;
20 | }
21 |
22 | public void setAvatarUrl(String avatarUrl) {
23 | this.avatarUrl = avatarUrl;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/java/com/avoscloud/leanchatlib/utils/LogUtils.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.leanchatlib.utils;
2 |
3 | import android.util.Log;
4 |
5 | /**
6 | * Created by lzw on 15/7/14.
7 | */
8 | public class LogUtils {
9 | public static final String LOGTAG = "leanchat";
10 | public static boolean debugEnabled;
11 |
12 | public LogUtils() {
13 | }
14 |
15 | private static String getDebugInfo() {
16 | Throwable stack = new Throwable().fillInStackTrace();
17 | StackTraceElement[] trace = stack.getStackTrace();
18 | int n = 2;
19 | return trace[n].getClassName() + " " + trace[n].getMethodName() + "()" + ":" + trace[n].getLineNumber() +
20 | " ";
21 | }
22 |
23 | private static String getLogInfoByArray(String[] infos) {
24 | StringBuilder sb = new StringBuilder();
25 | for (String info : infos) {
26 | sb.append(info);
27 | sb.append(" ");
28 | }
29 | return sb.toString();
30 | }
31 |
32 | public static void i(String... s) {
33 | if (debugEnabled) {
34 | Log.i(LOGTAG, getDebugInfo() + getLogInfoByArray(s));
35 | }
36 | }
37 |
38 | public static void e(String... s) {
39 | if (debugEnabled) {
40 | Log.e(LOGTAG, getDebugInfo() + getLogInfoByArray(s));
41 | }
42 | }
43 |
44 | public static void d(String... s) {
45 | if (debugEnabled) {
46 | Log.d(LOGTAG, getDebugInfo() + getLogInfoByArray(s));
47 | }
48 | }
49 |
50 | public static void v(String... s) {
51 | if (debugEnabled) {
52 | Log.v(LOGTAG, getDebugInfo() + getLogInfoByArray(s));
53 | }
54 | }
55 |
56 | public static void w(String... s) {
57 | if (debugEnabled) {
58 | Log.w(LOGTAG, getDebugInfo() + getLogInfoByArray(s));
59 | }
60 | }
61 |
62 | public static void logException(Throwable tr) {
63 | if (debugEnabled) {
64 | Log.e(LOGTAG, getDebugInfo(), tr);
65 | }
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/java/com/avoscloud/leanchatlib/utils/PathUtils.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.leanchatlib.utils;
2 |
3 | import android.os.Environment;
4 | import com.avoscloud.leanchatlib.controller.ChatManager;
5 |
6 | import java.io.File;
7 |
8 | /**
9 | * Created by lzw on 15/4/26.
10 | */
11 | public class PathUtils {
12 | private static File checkAndMkdirs(File file) {
13 | if (!file.exists()) {
14 | file.mkdirs();
15 | }
16 | return file;
17 | }
18 |
19 | private static boolean isExternalStorageWritable() {
20 | String state = Environment.getExternalStorageState();
21 | return Environment.MEDIA_MOUNTED.equals(state);
22 | }
23 |
24 | /**
25 | * 有 sdcard 的时候,小米是 /storage/sdcard0/Android/data/com.avoscloud.chat/cache/
26 | * 无 sdcard 的时候,小米是 /data/data/com.avoscloud.chat/cache
27 | * 依赖于包名。所以不同应用使用该库也没问题,要有点理想。
28 | * @return
29 | */
30 | private static File getAvailableCacheDir() {
31 | if (isExternalStorageWritable()) {
32 | return ChatManager.getContext().getExternalCacheDir();
33 | } else {
34 | // 只有此应用才能访问。拍照的时候有问题,因为拍照的应用写入不了该文件
35 | return ChatManager.getContext().getCacheDir();
36 | }
37 | }
38 |
39 | /**
40 | * 可能文件会被清除掉,需要检查是否存在
41 | *
42 | * @param id
43 | * @return
44 | */
45 | public static String getChatFilePath(String id) {
46 | String path = new File(getAvailableCacheDir(), id).getAbsolutePath();
47 | // LogUtils.d("path = ", path);
48 | return path;
49 | }
50 |
51 | /**
52 | * 录音保存的地址
53 | *
54 | * @return
55 | */
56 | public static String getRecordPathByCurrentTime() {
57 | return new File(getAvailableCacheDir(), "record_" + System.currentTimeMillis()).getAbsolutePath();
58 | }
59 |
60 | /**
61 | * 拍照保存的地址
62 | *
63 | * @return
64 | */
65 | public static String getPicturePathByCurrentTime() {
66 | String path = new File(getAvailableCacheDir(), "picture_" + System.currentTimeMillis()).getAbsolutePath();
67 | // LogUtils.d("picture path ", path);
68 | return path;
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/java/com/avoscloud/leanchatlib/view/EmotionEditText.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.leanchatlib.view;
2 |
3 | import android.content.Context;
4 | import android.text.TextUtils;
5 | import android.util.AttributeSet;
6 | import android.widget.EditText;
7 | import com.avoscloud.leanchatlib.controller.EmotionHelper;
8 |
9 | public class EmotionEditText extends EditText {
10 |
11 | public EmotionEditText(Context context) {
12 | super(context);
13 | }
14 |
15 | public EmotionEditText(Context context, AttributeSet attrs, int defStyle) {
16 | super(context, attrs, defStyle);
17 | }
18 |
19 | public EmotionEditText(Context context, AttributeSet attrs) {
20 | super(context, attrs);
21 | }
22 |
23 | @Override
24 | public void setText(CharSequence text, BufferType type) {
25 | if (!TextUtils.isEmpty(text)) {
26 | super.setText(EmotionHelper.replace(getContext(), text.toString()), type);
27 | } else {
28 | super.setText(text, type);
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/java/com/avoscloud/leanchatlib/view/ViewHolder.java:
--------------------------------------------------------------------------------
1 | package com.avoscloud.leanchatlib.view;
2 |
3 | import android.util.SparseArray;
4 | import android.view.View;
5 |
6 | /**
7 | * Created by lzw on 14-9-21.
8 | */
9 | public class ViewHolder {
10 | public static T findViewById(View view, int id) {
11 | SparseArray viewHolder = (SparseArray) view.getTag();
12 | if (viewHolder == null) {
13 | viewHolder = new SparseArray<>();
14 | view.setTag(viewHolder);
15 | }
16 | View childView = viewHolder.get(id);
17 | if (childView == null) {
18 | childView = view.findViewById(id);
19 | viewHolder.put(id, childView);
20 | }
21 | return (T) childView;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/anim/chat_anim_voice_left.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
10 |
13 |
16 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/anim/chat_anim_voice_right.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
10 |
13 |
16 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_add_camera_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_add_camera_normal.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_add_camera_press.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_add_camera_press.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_add_location_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_add_location_normal.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_add_location_press.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_add_location_press.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_add_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_add_normal.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_add_picture_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_add_picture_normal.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_add_picture_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_add_picture_pressed.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_add_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_add_pressed.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_base_action_bar_true_bg_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_base_action_bar_true_bg_normal.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_base_action_bar_true_bg_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_base_action_bar_true_bg_pressed.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_btn_voice_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_btn_voice_normal.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_common_base_header_back_btn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_common_base_header_back_btn.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_common_empty_photo.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_common_empty_photo.9.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_common_image_load_fail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_common_image_load_fail.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_default_user_avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_default_user_avatar.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_emo_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_emo_normal.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_emo_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_emo_pressed.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_fail_resend_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_fail_resend_normal.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_fail_resend_press.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_fail_resend_press.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_icon_voice0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_icon_voice0.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_icon_voice1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_icon_voice1.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_icon_voice2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_icon_voice2.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_icon_voice3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_icon_voice3.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_icon_voice4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_icon_voice4.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_icon_voice5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_icon_voice5.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_item_location_default.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_item_location_default.9.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_keyboard_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_keyboard_normal.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_keyboard_press.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_keyboard_press.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_layout_home_bg_bottombar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_layout_home_bg_bottombar.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_left_qp.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_left_qp.9.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_login_edit_normal.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_login_edit_normal.9.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_menu_people.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_menu_people.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_message_send_fail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_message_send_fail.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_right_qp.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_right_qp.9.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_send_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_send_normal.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_send_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_send_pressed.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_setmode_keyboard_btn_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_setmode_keyboard_btn_normal.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_setmode_keyboard_btn_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_setmode_keyboard_btn_pressed.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_time_block.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_time_block.9.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_top_voice_bg.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_top_voice_bg.9.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_bg.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_bg.9.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_bg_pressed.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_bg_pressed.9.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_left.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_left1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_left1.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_left2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_left2.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_left3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_left3.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_pressed.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_right.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_right1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_right1.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_right2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_right2.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_right3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_voice_right3.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/chat_xlistview_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/chat_xlistview_arrow.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_angry.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_angry.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_anguished.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_anguished.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_astonished.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_astonished.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_blush.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_blush.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_clap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_clap.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_cold_sweat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_cold_sweat.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_confounded.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_confounded.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_confused.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_confused.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_cry.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_cry.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_disappointed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_disappointed.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_disappointed_relieved.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_disappointed_relieved.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_dizzy_face.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_dizzy_face.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_expressionless.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_expressionless.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_fearful.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_fearful.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_flushed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_flushed.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_frowning.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_frowning.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_grimacing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_grimacing.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_grin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_grin.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_grinning.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_grinning.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_heart_eyes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_heart_eyes.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_hushed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_hushed.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_innocent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_innocent.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_joy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_joy.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_kissing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_kissing.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_kissing_closed_eyes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_kissing_closed_eyes.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_kissing_face.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_kissing_face.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_kissing_heart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_kissing_heart.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_kissing_smiling_eyes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_kissing_smiling_eyes.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_laughing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_laughing.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_mask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_mask.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_neutral_face.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_neutral_face.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_no_mouth.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_no_mouth.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_open_mouth.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_open_mouth.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_pensive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_pensive.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_persevere.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_persevere.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_point_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_point_left.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_point_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_point_right.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_rage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_rage.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_relaxed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_relaxed.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_relieved.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_relieved.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_satisfied.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_satisfied.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_scream.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_scream.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_sleeping.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_sleeping.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_sleepy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_sleepy.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_smile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_smile.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_smiley.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_smiley.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_smirk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_smirk.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_sob.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_sob.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_stuck_out_tongue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_stuck_out_tongue.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_stuck_out_tongue_closed_eyes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_stuck_out_tongue_closed_eyes.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_stuck_out_tongue_winking_eye.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_stuck_out_tongue_winking_eye.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_sunglasses.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_sunglasses.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_sweat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_sweat.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_sweat_smile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_sweat_smile.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_thumbsdown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_thumbsdown.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_thumbsup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_thumbsup.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_tired_face.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_tired_face.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_triumph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_triumph.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_unamused.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_unamused.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_weary.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_weary.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_wink.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_wink.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_worried.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_worried.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable-xhdpi/emoji_yum.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/leanchatlib/src/main/res/drawable-xhdpi/emoji_yum.png
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable/chat_base_action_bar_true_bg_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable/chat_bottom_add_camera_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable/chat_bottom_add_picture_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable/chat_btn_add_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable/chat_btn_emo_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable/chat_btn_fail_resend.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable/chat_btn_keyboard.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable/chat_btn_send_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable/chat_btn_voice_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable/chat_button_add_location_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/drawable/chat_record_button_round_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_bottom_add_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
21 |
22 |
31 |
32 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_bottom_more_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
11 |
16 |
17 |
23 |
24 |
28 |
29 |
30 |
33 |
34 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_bottom_record_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
10 |
19 |
20 |
27 |
28 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_bottom_text_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
11 |
21 |
22 |
28 |
29 |
39 |
40 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_client_state_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
18 |
19 |
27 |
28 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_common_base_header.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
16 |
17 |
27 |
28 |
29 |
37 |
38 |
47 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_common_base_header_right_btn.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
13 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_common_base_header_right_image_btn.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
16 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_emotion_gridview.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
20 |
21 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_emotion_item.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
12 |
13 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_image_brower_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
14 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_item_audio.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_item_base_left.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
10 |
16 |
17 |
20 |
21 |
30 |
31 |
32 |
33 |
43 |
44 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_item_base_right.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
10 |
14 |
15 |
16 |
17 |
22 |
23 |
33 |
34 |
35 |
36 |
37 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_item_base_status.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
16 |
17 |
24 |
25 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_item_base_time.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
14 |
15 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_item_image.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_item_location.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_item_text.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_location_activity.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
12 |
13 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_pull_to_refresh.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
11 |
12 |
16 |
17 |
23 |
24 |
30 |
31 |
32 |
37 |
38 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/layout/chat_record_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
11 |
16 |
17 |
24 |
25 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #2C97E8
4 | #ffff
5 | #3e3e39
6 | #ffa1a1a1
7 | #000
8 | #f00
9 | #fff
10 | #898989
11 | #fff
12 |
13 |
14 | #66ffffff
15 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 50dp
4 | 45dp
5 | 5dp
6 | 200dp
7 | 5dp
8 | 5dp
9 | 140dp
10 | 50dp
11 | 150dp
12 | 30dp
13 | 50dp
14 | 30dp
15 |
--------------------------------------------------------------------------------
/leanchatlib/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | LeanChatLib
3 | 无数据
4 | 已无更多
5 | 提示
6 | 请选择
7 | 分享
8 | 好的
9 | 努力加载中...
10 | 取消
11 | 按住录音
12 | 发送中
13 | 已接收
14 |
15 | 头像
16 | 用户名
17 | 昵称
18 | 请输入{0}
19 | {0}
20 | 已发送
21 | 失败
22 | 新的消息
23 | 图片
24 | 取消录音
25 | 语音
26 | 位置
27 |
28 |
29 | 抱歉,未能找到结果
30 | 照片
31 | 拍摄
32 | 位置
33 |
34 | 表情
35 | 请检查网络
36 | 聊天记录加载完毕
37 | 已阅读
38 | 手指上滑,取消发送
39 | 松开手指,取消录音
40 | 会话暂停,等网络良好
41 | 选择图片
42 | 云代码未部署,请到项目主页根据说明来部署
43 | 说多点吧~
44 |
45 | 下拉可以刷新
46 | 释放立即刷新
47 | 正在刷新…
48 |
49 |
50 |
--------------------------------------------------------------------------------
/libs/Java-WebSocket-1.2.0-leancloud.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/libs/Java-WebSocket-1.2.0-leancloud.jar
--------------------------------------------------------------------------------
/libs/android-async-http-1.4.6.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/libs/android-async-http-1.4.6.jar
--------------------------------------------------------------------------------
/libs/avoscloud-push-v3.1.4.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/libs/avoscloud-push-v3.1.4.jar
--------------------------------------------------------------------------------
/libs/avoscloud-sdk-v3.1.4.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/libs/avoscloud-sdk-v3.1.4.jar
--------------------------------------------------------------------------------
/libs/butterknife-6.1.0.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/libs/butterknife-6.1.0.jar
--------------------------------------------------------------------------------
/libs/eventbus-2.4.0.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/libs/eventbus-2.4.0.jar
--------------------------------------------------------------------------------
/libs/fastjson-1.1.37-leancloud.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/libs/fastjson-1.1.37-leancloud.jar
--------------------------------------------------------------------------------
/libs/httpmime-4.2.4.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/libs/httpmime-4.2.4.jar
--------------------------------------------------------------------------------
/libs/support-v4-19.1.0.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/libs/support-v4-19.1.0.jar
--------------------------------------------------------------------------------
/libs/universal-image-loader-1.9.3.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lzwjava/leanchat-android/2929877f6c688edcf4cc706d504953a89f0883ff/libs/universal-image-loader-1.9.3.jar
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | //include ':avoscloud-sdk'
2 | //project(':avoscloud-sdk').projectDir = new File('/Users/lzw/clojure/AndroidSDK/avoscloud-sdk')
3 | //include ':avoscloud-push'
4 | //project(':avoscloud-push').projectDir = new File('/Users/lzw/clojure/AndroidSDK/avoscloud-push')
5 |
6 | include ':leanchatlib', ':leanchatlib-demo', ':leanchat'
7 |
--------------------------------------------------------------------------------