├── .classpath
├── .gitignore
├── .project
├── .settings
├── org.eclipse.core.resources.prefs
└── org.eclipse.jdt.core.prefs
├── AndroidManifest.xml
├── README.md
├── assets
└── crashlytics-build.properties
├── crashlytics.properties
├── gen
└── com
│ └── donal
│ └── wechat
│ ├── BuildConfig.java
│ └── R.java
├── libs
├── SMSSDK_fat.jar
├── armeabi
│ └── libbdpush_V1_0.so
├── asmack-android-8-0.8.10.jar
├── base.jar
├── basehttplibrary.jar
├── crashlytics.jar
├── libGoogleAnalyticsServices.jar
├── mips
│ └── libbdpush_V1_0.so
└── x86
│ └── libbdpush_V1_0.so
├── lint.xml
├── proguard-project.txt
├── project.properties
├── res
├── anim
│ ├── enter_in_from_right.xml
│ ├── enter_out_to_left.xml
│ ├── exit_in_from_left.xml
│ ├── exit_out_to_right.xml
│ ├── loading_page_loading.xml
│ ├── loadmore_animation.xml
│ ├── pophidden_anim.xml
│ ├── popshow_anim.xml
│ ├── receiver_voice_node_playing.xml
│ ├── refresh_button_rotation.xml
│ ├── sender_voice_node_playing.xml
│ ├── slide_in_up.xml
│ ├── slide_out_down.xml
│ ├── translucent_zoom_exit.xml
│ ├── translucent_zoom_in.xml
│ └── translucent_zoom_out.xml
├── color
│ └── tabbar_text.xml
├── drawable-hdpi
│ ├── avatar_placeholder.png
│ ├── btn_back_normal.png
│ ├── btn_next_normal.png
│ ├── chat_from_bg_normal.9.png
│ ├── chat_from_bg_pressed.9.png
│ ├── chat_to_bg_normal.9.png
│ ├── chat_to_bg_pressed.9.png
│ ├── chatfrom_voice_playing.png
│ ├── chatfrom_voice_playing_f1.png
│ ├── chatfrom_voice_playing_f2.png
│ ├── chatfrom_voice_playing_f3.png
│ ├── chatto_voice_playing_f1.png
│ ├── chatto_voice_playing_f2.png
│ ├── chatto_voice_playing_f3.png
│ ├── clearwords_bg_nor.png
│ ├── clearwords_bg_sel.png
│ ├── clearwords_icon.png
│ ├── content_image_loading.png
│ ├── default_round_head.png
│ ├── face.png
│ ├── face_hl.png
│ ├── ic_launcher.png
│ ├── ic_pulltorefresh_arrow.png
│ ├── input_bar_background.png
│ ├── input_bar_flat.png
│ ├── keyborad.png
│ ├── keyborad_hl.png
│ ├── loading_page_loading0.png
│ ├── loading_page_loading1.png
│ ├── loading_page_loading2.png
│ ├── loading_page_loading3.png
│ ├── multimedia.png
│ ├── multimedia_hl.png
│ ├── nav_refresh.png
│ ├── new_data_toast.9.png
│ ├── record_animate_01.png
│ ├── record_animate_02.png
│ ├── record_animate_03.png
│ ├── record_animate_04.png
│ ├── record_animate_05.png
│ ├── record_animate_06.png
│ ├── record_animate_07.png
│ ├── record_animate_08.png
│ ├── record_animate_09.png
│ ├── record_animate_10.png
│ ├── record_animate_11.png
│ ├── record_animate_12.png
│ ├── record_animate_13.png
│ ├── record_animate_14.png
│ ├── record_bg.png
│ ├── refreshlistview_arrow.png
│ ├── review_bg_blue.9.png
│ ├── round_1.png
│ ├── round_10.png
│ ├── round_2.png
│ ├── round_3.png
│ ├── round_4.png
│ ├── round_5.png
│ ├── round_6.png
│ ├── round_7.png
│ ├── round_8.png
│ ├── round_9.png
│ ├── sc_message_box_bubble.png
│ ├── shadow_bottom.png
│ ├── shadow_left.png
│ ├── shadow_right.png
│ ├── smssdk_back_arrow.png
│ ├── smssdk_back_arrow2.png
│ ├── smssdk_cl_divider.png
│ ├── smssdk_clear_search.png
│ ├── smssdk_cp_default_avatar.png
│ ├── smssdk_default_avatar.png
│ ├── smssdk_dialog_back.9.png
│ ├── smssdk_dialog_bg.9.png
│ ├── smssdk_input_bg_focus.9.png
│ ├── smssdk_input_bg_normal.9.png
│ ├── smssdk_input_bg_special_focus.9.png
│ ├── smssdk_input_bg_special_normal.9.png
│ ├── smssdk_search_icon.png
│ ├── smssdk_sharesdk_icon.png
│ ├── tabbar_contacts.png
│ ├── tabbar_contacts_highlighted.png
│ ├── tabbar_discover.png
│ ├── tabbar_discover_highlighted.png
│ ├── tabbar_mainframe.png
│ ├── tabbar_mainframe_highlighted.png
│ ├── tabbar_me.png
│ ├── tabbar_me_highlighted.png
│ ├── voice.png
│ ├── voice_hl.png
│ ├── voice_to_short.png
│ ├── voicebtn_black.png
│ ├── voicebtn_blackhl.png
│ ├── welcome.jpg
│ └── xlistview_arrow.png
├── drawable-mdpi
│ └── ic_launcher.png
├── drawable-xhdpi
│ └── ic_launcher.png
├── drawable
│ ├── bg_head.xml
│ ├── bg_head_normal.xml
│ ├── bg_head_pressed.xml
│ ├── clearwords_bg.xml
│ ├── incoming.xml
│ ├── outgoing.xml
│ ├── shadow.xml
│ ├── smssdk_btn_disenable.xml
│ ├── smssdk_btn_enable.xml
│ ├── smssdk_corners_bg.xml
│ ├── smssdk_corners_bg_nor.xml
│ ├── smssdk_corners_bg_pre.xml
│ ├── smssdk_country_bg_selector.xml
│ ├── smssdk_country_group_scroll_down.xml
│ ├── smssdk_country_group_scroll_up.xml
│ ├── smssdk_dialog_btn_back.xml
│ ├── smssdk_edittext_bg_selector.xml
│ ├── tabbar_button1.xml
│ ├── tabbar_button2.xml
│ ├── tabbar_button3.xml
│ ├── tabbar_button4.xml
│ └── view_progress.xml
├── layout-large
│ ├── bookmark_picker_list_item.xml
│ ├── encode.xml
│ ├── help.xml
│ ├── history_list_item.xml
│ ├── layout_refreshlistview_header.xml
│ ├── pull_to_refresh_head.xml
│ ├── refresh_footer.xml
│ ├── refresh_header.xml
│ ├── search_book_contents.xml
│ ├── search_book_contents_header.xml
│ ├── search_book_contents_list_item.xml
│ ├── share.xml
│ ├── toastmessage_text.xml
│ ├── update_dialog.xml
│ ├── xlistview_footer.xml
│ └── xlistview_header.xml
├── layout
│ ├── chat_cell.xml
│ ├── chat_left_image.xml
│ ├── chat_left_text.xml
│ ├── chat_left_voice.xml
│ ├── chat_right_image.xml
│ ├── chat_right_text.xml
│ ├── chat_right_voice.xml
│ ├── chating.xml
│ ├── des_cell.xml
│ ├── findfriend.xml
│ ├── friend.xml
│ ├── friend_card_cell.xml
│ ├── index.xml
│ ├── left_slide_drawer.xml
│ ├── login.xml
│ ├── login_header.xml
│ ├── lovecode_edit_edittext_dialog.xml
│ ├── main.xml
│ ├── me_footer.xml
│ ├── more_headerview.xml
│ ├── register1.xml
│ ├── register2.xml
│ ├── slide_draw_cell.xml
│ ├── smssdk_back_verify_dialog.xml
│ ├── smssdk_contact_detail_page.xml
│ ├── smssdk_contact_list_page.xml
│ ├── smssdk_contacts_listview_item.xml
│ ├── smssdk_country_list_page.xml
│ ├── smssdk_input_identify_num_page.xml
│ ├── smssdk_listview_title_layout.xml
│ ├── smssdk_progress_dialog.xml
│ ├── smssdk_regist_page.xml
│ ├── smssdk_search_title_layout.xml
│ ├── smssdk_send_msg_dialog.xml
│ ├── smssdk_title_layout.xml
│ ├── swipeback_layout.xml
│ ├── voice_dialog.xml
│ ├── wechat.xml
│ └── welcome_page.xml
├── values-v11
│ └── styles.xml
├── values-v14
│ └── styles.xml
└── values
│ ├── arrays.xml
│ ├── attrs.xml
│ ├── colors.xml
│ ├── com_crashlytics_export_strings.xml
│ ├── dimens.xml
│ ├── ids.xml
│ ├── smssdk_arrays.xml
│ ├── smssdk_colors.xml
│ ├── smssdk_errors.xml
│ ├── smssdk_strings.xml
│ ├── smssdk_styles.xml
│ ├── strings.xml
│ └── style.xml
├── src
├── bean
│ ├── JsonMessage.java
│ ├── KeyValue.java
│ ├── StrangerEntity.java
│ ├── Update.java
│ ├── UserDetail.java
│ ├── UserEntity.java
│ └── UserInfo.java
├── config
│ ├── ApiClent.java
│ ├── AppActivity.java
│ ├── AppActivitySupport.java
│ ├── CommonValue.java
│ ├── FriendManager.java
│ ├── MessageManager.java
│ ├── NoticeManager.java
│ ├── QYRestClient.java
│ ├── WCApplication.java
│ └── XmppConnectionManager.java
├── db
│ ├── DBManager.java
│ ├── DataBaseHelper.java
│ ├── SDCardSQLiteOpenHelper.java
│ └── SQLiteTemplate.java
├── im
│ ├── AChating.java
│ ├── AWechatActivity.java
│ ├── Chating.java
│ ├── VoiceBubbleListener.java
│ ├── WeChat.java
│ └── model
│ │ ├── HistoryChatBean.java
│ │ ├── IMMessage.java
│ │ └── Notice.java
├── qiniu
│ ├── auth
│ │ ├── CallRet.java
│ │ ├── Client.java
│ │ └── JSONObjectRet.java
│ ├── conf
│ │ └── Conf.java
│ ├── io
│ │ ├── IO.java
│ │ └── PutExtra.java
│ ├── resumableio
│ │ ├── PutExtra.java
│ │ ├── PutRet.java
│ │ ├── ResumableClient.java
│ │ └── ResumableIO.java
│ └── utils
│ │ ├── AuthException.java
│ │ ├── Config.java
│ │ ├── DigestAuth.java
│ │ ├── EncodeUtils.java
│ │ ├── ICancel.java
│ │ ├── IOnProcess.java
│ │ ├── InputStreamAt.java
│ │ ├── Mac.java
│ │ ├── MultipartEntity.java
│ │ └── PutPolicy.java
├── service
│ └── IMChatService.java
├── swipeback
│ ├── SwipeBackActivity.java
│ ├── SwipeBackActivityBase.java
│ ├── SwipeBackActivityHelper.java
│ ├── SwipeBackLayout.java
│ └── ViewDragHelper.java
├── tools
│ ├── AudioPlayManager.java
│ ├── AudioRecoderManager.java
│ └── UpdateManager.java
└── ui
│ ├── FindFriend.java
│ ├── Friend.java
│ ├── Login.java
│ ├── MainActivity.java
│ ├── Me.java
│ ├── Register1.java
│ ├── Register2.java
│ ├── Tabbar.java
│ ├── Welcome.java
│ ├── adapter
│ ├── FieldAdapter.java
│ ├── FriendCardAdapter.java
│ ├── LeftListViewAdapter.java
│ ├── StrangerAdapter.java
│ ├── TextAdapter.java
│ └── WeChatAdapter.java
│ └── view
│ └── SlideDrawerView.java
└── wechat.iml
/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | bin
2 | src/im/Chating.java
3 | out
4 | .idea
--------------------------------------------------------------------------------
/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | wechat
4 |
5 |
6 |
7 |
8 |
9 | com.android.ide.eclipse.adt.ResourceManagerBuilder
10 |
11 |
12 |
13 |
14 | com.android.ide.eclipse.adt.PreCompilerBuilder
15 |
16 |
17 |
18 |
19 | org.eclipse.jdt.core.javabuilder
20 |
21 |
22 |
23 |
24 | com.android.ide.eclipse.adt.ApkBuilder
25 |
26 |
27 |
28 |
29 |
30 | com.android.ide.eclipse.adt.AndroidNature
31 | org.eclipse.jdt.core.javanature
32 |
33 |
34 |
--------------------------------------------------------------------------------
/.settings/org.eclipse.core.resources.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | encoding//src/ui/Tabbar.java=UTF-8
3 | encoding/=UTF-8
4 |
--------------------------------------------------------------------------------
/.settings/org.eclipse.jdt.core.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
3 | org.eclipse.jdt.core.compiler.compliance=1.6
4 | org.eclipse.jdt.core.compiler.source=1.6
5 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | wechat xmpp
2 | ======
3 | 服务器可以到http://donal-tong.github.io/blog/2014/06/05/wechatserver
4 |
5 | 体验软件地址 http://fir.im/l9m5
6 |
7 | 该项目不再维护
8 |
9 | 新版的项目可以到https://github.com/donal-tong/Tut-android
10 |
--------------------------------------------------------------------------------
/assets/crashlytics-build.properties:
--------------------------------------------------------------------------------
1 | #This file is automatically generated by Crashlytics to uniquely
2 | #identify individual builds of your Android application.
3 | #
4 | #Do NOT modify, delete, or commit to source control!
5 | #
6 | #Fri Jun 13 16:31:57 CST 2014
7 | version_name=1.0
8 | package_name=com.donal.wechat
9 | build_id=8a053417-6ad0-4d8f-8f5a-a9cdc844d1b8
10 | version_code=1
11 | app_name=wechat
12 |
--------------------------------------------------------------------------------
/crashlytics.properties:
--------------------------------------------------------------------------------
1 | #Contains API Secret used to validate your application. Commit to internal source control; avoid making secret public.
2 | #Fri Jun 13 13:36:29 CST 2014
3 | apiSecret=9e2d0e6965d4be07d7cfff808a9d80a2a380f3087c3ce294e382f9db2a68670a
4 |
--------------------------------------------------------------------------------
/gen/com/donal/wechat/BuildConfig.java:
--------------------------------------------------------------------------------
1 | /** Automatically generated file. DO NOT MODIFY */
2 | package com.donal.wechat;
3 |
4 | public final class BuildConfig {
5 | public final static boolean DEBUG = true;
6 | }
--------------------------------------------------------------------------------
/libs/SMSSDK_fat.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/libs/SMSSDK_fat.jar
--------------------------------------------------------------------------------
/libs/armeabi/libbdpush_V1_0.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/libs/armeabi/libbdpush_V1_0.so
--------------------------------------------------------------------------------
/libs/asmack-android-8-0.8.10.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/libs/asmack-android-8-0.8.10.jar
--------------------------------------------------------------------------------
/libs/base.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/libs/base.jar
--------------------------------------------------------------------------------
/libs/basehttplibrary.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/libs/basehttplibrary.jar
--------------------------------------------------------------------------------
/libs/crashlytics.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/libs/crashlytics.jar
--------------------------------------------------------------------------------
/libs/libGoogleAnalyticsServices.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/libs/libGoogleAnalyticsServices.jar
--------------------------------------------------------------------------------
/libs/mips/libbdpush_V1_0.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/libs/mips/libbdpush_V1_0.so
--------------------------------------------------------------------------------
/libs/x86/libbdpush_V1_0.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/libs/x86/libbdpush_V1_0.so
--------------------------------------------------------------------------------
/lint.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/proguard-project.txt:
--------------------------------------------------------------------------------
1 | # To enable ProGuard in your project, edit project.properties
2 | # to define the proguard.config property as described in that file.
3 | #
4 | # Add project specific ProGuard rules here.
5 | # By default, the flags in this file are appended to flags specified
6 | # in ${sdk.dir}/tools/proguard/proguard-android.txt
7 | # You can edit the include path and order by changing the ProGuard
8 | # include property in project.properties.
9 | #
10 | # For more details, see
11 | # http://developer.android.com/guide/developing/tools/proguard.html
12 |
13 | # Add any project specific keep options here:
14 |
15 | # If your project uses WebView with JS, uncomment the following
16 | # and specify the fully qualified class name to the JavaScript interface
17 | # class:
18 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
19 | # public *;
20 | #}
21 |
--------------------------------------------------------------------------------
/project.properties:
--------------------------------------------------------------------------------
1 | # This file is automatically generated by Android Tools.
2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
3 | #
4 | # This file must be checked in Version Control Systems.
5 | #
6 | # To customize properties used by the Ant build system edit
7 | # "ant.properties", and override values to adapt the script to your
8 | # project structure.
9 | #
10 | # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
11 | #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
12 |
13 | # Project target.
14 | target=android-19
15 |
--------------------------------------------------------------------------------
/res/anim/enter_in_from_right.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
--------------------------------------------------------------------------------
/res/anim/enter_out_to_left.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
--------------------------------------------------------------------------------
/res/anim/exit_in_from_left.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
--------------------------------------------------------------------------------
/res/anim/exit_out_to_right.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
--------------------------------------------------------------------------------
/res/anim/loading_page_loading.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/res/anim/loadmore_animation.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/res/anim/pophidden_anim.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/res/anim/popshow_anim.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/res/anim/receiver_voice_node_playing.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
9 |
10 | -
13 |
14 | -
17 |
18 | -
21 |
22 |
23 |
--------------------------------------------------------------------------------
/res/anim/refresh_button_rotation.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/res/anim/sender_voice_node_playing.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
8 |
9 | -
12 |
13 | -
16 |
17 | -
20 |
21 |
22 |
--------------------------------------------------------------------------------
/res/anim/slide_in_up.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/res/anim/slide_out_down.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/res/anim/translucent_zoom_exit.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
10 |
--------------------------------------------------------------------------------
/res/anim/translucent_zoom_in.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
10 |
--------------------------------------------------------------------------------
/res/anim/translucent_zoom_out.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
10 |
--------------------------------------------------------------------------------
/res/color/tabbar_text.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/res/drawable-hdpi/avatar_placeholder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/avatar_placeholder.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/btn_back_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/btn_back_normal.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/btn_next_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/btn_next_normal.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/chat_from_bg_normal.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/chat_from_bg_normal.9.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/chat_from_bg_pressed.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/chat_from_bg_pressed.9.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/chat_to_bg_normal.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/chat_to_bg_normal.9.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/chat_to_bg_pressed.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/chat_to_bg_pressed.9.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/chatfrom_voice_playing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/chatfrom_voice_playing.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/chatfrom_voice_playing_f1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/chatfrom_voice_playing_f1.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/chatfrom_voice_playing_f2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/chatfrom_voice_playing_f2.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/chatfrom_voice_playing_f3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/chatfrom_voice_playing_f3.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/chatto_voice_playing_f1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/chatto_voice_playing_f1.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/chatto_voice_playing_f2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/chatto_voice_playing_f2.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/chatto_voice_playing_f3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/chatto_voice_playing_f3.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/clearwords_bg_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/clearwords_bg_nor.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/clearwords_bg_sel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/clearwords_bg_sel.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/clearwords_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/clearwords_icon.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/content_image_loading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/content_image_loading.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/default_round_head.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/default_round_head.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/face.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/face.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/face_hl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/face_hl.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/ic_pulltorefresh_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/ic_pulltorefresh_arrow.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/input_bar_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/input_bar_background.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/input_bar_flat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/input_bar_flat.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/keyborad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/keyborad.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/keyborad_hl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/keyborad_hl.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/loading_page_loading0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/loading_page_loading0.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/loading_page_loading1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/loading_page_loading1.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/loading_page_loading2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/loading_page_loading2.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/loading_page_loading3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/loading_page_loading3.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/multimedia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/multimedia.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/multimedia_hl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/multimedia_hl.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/nav_refresh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/nav_refresh.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/new_data_toast.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/new_data_toast.9.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/record_animate_01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/record_animate_01.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/record_animate_02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/record_animate_02.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/record_animate_03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/record_animate_03.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/record_animate_04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/record_animate_04.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/record_animate_05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/record_animate_05.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/record_animate_06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/record_animate_06.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/record_animate_07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/record_animate_07.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/record_animate_08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/record_animate_08.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/record_animate_09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/record_animate_09.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/record_animate_10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/record_animate_10.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/record_animate_11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/record_animate_11.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/record_animate_12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/record_animate_12.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/record_animate_13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/record_animate_13.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/record_animate_14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/record_animate_14.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/record_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/record_bg.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/refreshlistview_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/refreshlistview_arrow.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/review_bg_blue.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/review_bg_blue.9.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/round_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/round_1.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/round_10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/round_10.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/round_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/round_2.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/round_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/round_3.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/round_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/round_4.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/round_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/round_5.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/round_6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/round_6.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/round_7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/round_7.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/round_8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/round_8.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/round_9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/round_9.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/sc_message_box_bubble.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/sc_message_box_bubble.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/shadow_bottom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/shadow_bottom.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/shadow_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/shadow_left.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/shadow_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/shadow_right.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/smssdk_back_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/smssdk_back_arrow.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/smssdk_back_arrow2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/smssdk_back_arrow2.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/smssdk_cl_divider.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/smssdk_cl_divider.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/smssdk_clear_search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/smssdk_clear_search.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/smssdk_cp_default_avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/smssdk_cp_default_avatar.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/smssdk_default_avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/smssdk_default_avatar.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/smssdk_dialog_back.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/smssdk_dialog_back.9.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/smssdk_dialog_bg.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/smssdk_dialog_bg.9.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/smssdk_input_bg_focus.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/smssdk_input_bg_focus.9.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/smssdk_input_bg_normal.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/smssdk_input_bg_normal.9.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/smssdk_input_bg_special_focus.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/smssdk_input_bg_special_focus.9.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/smssdk_input_bg_special_normal.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/smssdk_input_bg_special_normal.9.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/smssdk_search_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/smssdk_search_icon.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/smssdk_sharesdk_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/smssdk_sharesdk_icon.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/tabbar_contacts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/tabbar_contacts.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/tabbar_contacts_highlighted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/tabbar_contacts_highlighted.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/tabbar_discover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/tabbar_discover.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/tabbar_discover_highlighted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/tabbar_discover_highlighted.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/tabbar_mainframe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/tabbar_mainframe.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/tabbar_mainframe_highlighted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/tabbar_mainframe_highlighted.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/tabbar_me.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/tabbar_me.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/tabbar_me_highlighted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/tabbar_me_highlighted.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/voice.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/voice.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/voice_hl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/voice_hl.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/voice_to_short.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/voice_to_short.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/voicebtn_black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/voicebtn_black.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/voicebtn_blackhl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/voicebtn_blackhl.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/welcome.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/welcome.jpg
--------------------------------------------------------------------------------
/res/drawable-hdpi/xlistview_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-hdpi/xlistview_arrow.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DLTech21/wechat/401bb6cc6f064038539ae8de3eedd05cee8c93c1/res/drawable-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/res/drawable/bg_head.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/res/drawable/bg_head_normal.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/res/drawable/bg_head_pressed.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/res/drawable/clearwords_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/res/drawable/incoming.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/res/drawable/outgoing.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/res/drawable/shadow.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
--------------------------------------------------------------------------------
/res/drawable/smssdk_btn_disenable.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/res/drawable/smssdk_btn_enable.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
11 |
12 |
--------------------------------------------------------------------------------
/res/drawable/smssdk_corners_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/res/drawable/smssdk_corners_bg_nor.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
11 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/res/drawable/smssdk_corners_bg_pre.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
11 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/res/drawable/smssdk_country_bg_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/res/drawable/smssdk_country_group_scroll_down.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/res/drawable/smssdk_country_group_scroll_up.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/res/drawable/smssdk_dialog_btn_back.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/res/drawable/smssdk_edittext_bg_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/res/drawable/tabbar_button1.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/res/drawable/tabbar_button2.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/res/drawable/tabbar_button3.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/res/drawable/tabbar_button4.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/res/drawable/view_progress.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
--------------------------------------------------------------------------------
/res/layout-large/bookmark_picker_list_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
23 |
24 |
28 |
29 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/res/layout-large/encode.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
25 |
26 |
31 |
32 |
36 |
37 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/res/layout-large/help.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
21 |
22 |
26 |
27 |
35 |
36 |
41 |
42 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/res/layout-large/history_list_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
10 |
15 |
16 |
21 |
22 |
--------------------------------------------------------------------------------
/res/layout-large/layout_refreshlistview_header.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
8 |
9 |
13 |
14 |
18 |
19 |
23 |
24 |
27 |
28 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/res/layout-large/pull_to_refresh_head.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
13 |
19 |
20 |
--------------------------------------------------------------------------------
/res/layout-large/refresh_footer.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
19 |
20 |
31 |
32 |
36 |
37 |
--------------------------------------------------------------------------------
/res/layout-large/refresh_header.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
25 |
26 |
35 |
36 |
47 |
48 |
57 |
58 |
62 |
63 |
--------------------------------------------------------------------------------
/res/layout-large/search_book_contents.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
21 |
22 |
27 |
28 |
36 |
37 |
42 |
43 |
44 |
45 |
46 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/res/layout-large/search_book_contents_header.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
24 |
--------------------------------------------------------------------------------
/res/layout-large/search_book_contents_list_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
23 |
24 |
31 |
32 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/res/layout-large/toastmessage_text.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
12 |
21 |
22 |
--------------------------------------------------------------------------------
/res/layout-large/update_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
14 |
20 |
21 |
--------------------------------------------------------------------------------
/res/layout-large/xlistview_footer.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
20 |
21 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/res/layout-large/xlistview_header.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
11 |
12 |
19 |
20 |
25 |
26 |
31 |
32 |
36 |
37 |
42 |
43 |
48 |
49 |
50 |
51 |
59 |
60 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/res/layout/chat_cell.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/res/layout/chat_left_image.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
19 |
20 |
27 |
33 |
34 |
40 |
41 |
49 |
50 |
60 |
67 |
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/res/layout/chat_left_text.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
19 |
20 |
27 |
33 |
34 |
40 |
41 |
49 |
50 |
60 |
67 |
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/res/layout/chat_left_voice.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
19 |
20 |
27 |
33 |
34 |
40 |
41 |
49 |
50 |
60 |
67 |
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/res/layout/chat_right_text.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
19 |
20 |
27 |
28 |
34 |
35 |
41 |
42 |
50 |
51 |
60 |
67 |
68 |
69 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/res/layout/chat_right_voice.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
19 |
20 |
27 |
28 |
34 |
35 |
41 |
42 |
50 |
51 |
60 |
69 |
70 |
71 |
81 |
82 |
83 |
--------------------------------------------------------------------------------
/res/layout/des_cell.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
16 |
28 |
35 |
36 |
--------------------------------------------------------------------------------
/res/layout/findfriend.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
12 |
13 |
22 |
23 |
32 |
33 |
39 |
40 |
41 |
46 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/res/layout/friend.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
12 |
13 |
22 |
23 |
32 |
33 |
39 |
40 |
41 |
46 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/res/layout/friend_card_cell.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
15 |
19 |
27 |
28 |
40 |
41 |
56 |
57 |
70 |
71 |
83 |
84 |
85 |
91 |
92 |
93 |
--------------------------------------------------------------------------------
/res/layout/index.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
11 |
16 |
22 |
31 |
40 |
49 |
58 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/res/layout/left_slide_drawer.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/res/layout/login.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
18 |
19 |
--------------------------------------------------------------------------------
/res/layout/login_header.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
15 |
16 |
25 |
26 |
41 |
42 |
43 |
57 |
70 |
71 |
85 |
86 |
87 |
88 |
89 |
--------------------------------------------------------------------------------
/res/layout/lovecode_edit_edittext_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
16 |
--------------------------------------------------------------------------------
/res/layout/main.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
19 |
20 |
29 |
30 |
31 |
39 |
40 |
49 |
50 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/res/layout/me_footer.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/res/layout/more_headerview.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
12 |
21 |
29 |
30 |
31 |
36 |
37 |
--------------------------------------------------------------------------------
/res/layout/register1.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
12 |
13 |
21 |
22 |
37 |
38 |
39 |
47 |
48 |
61 |
62 |
63 |
64 |
65 |
--------------------------------------------------------------------------------
/res/layout/slide_draw_cell.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
15 |
20 |
21 |
--------------------------------------------------------------------------------
/res/layout/smssdk_back_verify_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
20 |
21 |
25 |
26 |
29 |
30 |
40 |
41 |
45 |
46 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/res/layout/smssdk_contact_list_page.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
12 |
13 |
18 |
19 |
--------------------------------------------------------------------------------
/res/layout/smssdk_contacts_listview_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
16 |
23 |
29 |
35 |
36 |
46 |
--------------------------------------------------------------------------------
/res/layout/smssdk_country_list_page.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
12 |
13 |
18 |
19 |
--------------------------------------------------------------------------------
/res/layout/smssdk_listview_title_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
16 |
17 |
--------------------------------------------------------------------------------
/res/layout/smssdk_progress_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
11 |
12 |
--------------------------------------------------------------------------------
/res/layout/smssdk_send_msg_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
16 |
17 |
21 |
22 |
32 |
33 |
42 |
43 |
47 |
48 |
51 |
52 |
62 |
63 |
67 |
68 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/res/layout/smssdk_title_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
11 |
12 |
16 |
17 |
23 |
24 |
30 |
31 |
36 |
37 |
38 |
45 |
46 |
47 |
51 |
52 |
--------------------------------------------------------------------------------
/res/layout/swipeback_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/res/layout/voice_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
14 |
15 |
--------------------------------------------------------------------------------
/res/layout/wechat.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
12 |
26 |
27 |
36 |
37 |
46 |
47 |
53 |
54 |
55 |
65 |
66 |
--------------------------------------------------------------------------------
/res/layout/welcome_page.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
14 |
15 |
--------------------------------------------------------------------------------
/res/values-v11/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/res/values-v14/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/res/values/arrays.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | - 回复TA
6 | - 查看卡片
7 |
8 |
9 | - 回复TA
10 | - 查看内容
11 |
12 |
13 | - 回复
14 | - 删除
15 |
16 |
17 | - 回复
18 |
19 |
20 | - 取消收藏
21 |
22 |
23 |
24 | - 复制
25 |
26 |
27 |
28 | - 支付宝安全支付
29 | - 支付宝网页版
30 |
31 |
32 |
33 | - 拍照
34 | - 用户相册
35 |
36 |
37 |
38 | - -
39 | - AR
40 | - AU
41 | - BR
42 | - BG
43 | - CA
44 | - CN
45 | - CZ
46 | - DE
47 | - DK
48 | - ES
49 | - FI
50 | - FR
51 | - GB
52 | - GR
53 | - HU
54 | - ID
55 | - IT
56 | - JP
57 | - KR
58 | - NL
59 | - PL
60 | - PT
61 | - RU
62 | - SE
63 | - SK
64 | - SI
65 | - TR
66 | - TW
67 | - US
68 |
69 |
70 | - ON
71 | - AUTO
72 | - OFF
73 |
74 |
75 | - @string/preferences_front_light_on
76 | - @string/preferences_front_light_auto
77 | - @string/preferences_front_light_off
78 |
79 |
--------------------------------------------------------------------------------
/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/res/values/com_crashlytics_export_strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 | 8a053417-6ad0-4d8f-8f5a-a9cdc844d1b8
10 |
11 |
--------------------------------------------------------------------------------
/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 50dp
4 |
5 |
6 | 20dp
7 | 17dp
8 | 16dp
9 | 14dp
10 | 16dp
11 | 13dp
12 |
13 | 50.0dip
14 | 15.0dip
15 |
16 | 49dp
17 |
18 | 8dip
19 | 4dip
20 |
--------------------------------------------------------------------------------
/res/values/ids.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/res/values/smssdk_colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #00000000
4 | #ff282a2b
5 |
6 | #ffffffff
7 | #fff2f2f2
8 | #00000000
9 | #ff353535
10 | #ff999999
11 | #f7fcff
12 | #ffd9d9da
13 | #ff000000
14 | #ff898989
15 |
16 |
--------------------------------------------------------------------------------
/res/values/smssdk_errors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 服务器繁忙
4 | 无效请求
5 | 禁止访问
6 | 没有找到
7 | 不被接受
8 | 服务器内部错误
9 | 不可执行
10 | 参数缺损
11 | 非法手机号
12 | 请求验证超上限
13 | 验证码错误
14 | token无效
15 | duid无效
16 | 申请短信验证频繁
17 |
18 | 客户端请求不能被识别。
19 | 服务器拒绝访问,或者拒绝操作
20 | 表明服务器找不到任何匹配的内容,该内容可以是客户端发送消息的目的地。
21 | 用于服务器因为某些理由不接受该请求(如权限不够)。
22 | 当服务器遇到预期外的错误时发生。如数据库连接失败等。
23 | 服务器不支持客户端请求的功能。
24 | 请求的必要参数缺失或者损坏
25 | 请求中用户的手机号格式不正确(包括手机的区号)
26 | 请求发送验证码超出限制(每日、APP、单台设备以及运营商等都有各种发送验证码的上限)
27 | 服务器找不到验证码
28 | 请求的令牌无效或者非法
29 | 请求的duid非法或者无效
30 | 客户端请求发送短信验证过于频繁
31 |
32 |
--------------------------------------------------------------------------------
/res/values/smssdk_strings.xml:
--------------------------------------------------------------------------------
1 |
2 | 返回
3 | 使用手机号码注册
4 | 请确认你的国家或地区并输入手机号码
5 | 国家和地区
6 | 下一步
7 | 确认手机号码
8 | 取消
9 | 好
10 | 我们将发送<font color=#3cac17>验证码</font>短信到这个号码:
11 | 请填写手机号码
12 | 请填写正确的手机号码
13 | 填写验证码
14 | 我们已发送<font color=#209526>验证码</font>短信到这个号码:
15 | <font color=#a8b8cb> 收不到验证码?</font>
16 | 提交
17 | 验证码
18 | 接收短信大约需要<font color=#209526>%s</font>秒
19 | 重新获取验证码
20 | 选择国家和地区代码
21 | 网络异常,请稍后重试
22 | 当前服务暂不支持此国家,请选择其它国家
23 | 搜索
24 | 好友搜索
25 | 验证码已发送
26 | 验证码不正确,请重新输入
27 | 验证成功
28 | 用户资料已提交
29 | 已加入的用戶
30 | 待邀请的好友
31 | 邀请
32 | 发送邀请
33 | <font color=#209526> %s </font>还未加入
34 | 详细资料
35 | 手机号码:
36 | 选择一个号码发送邀请
37 | ShareSDK最新短信SDK,欢迎大家使用,你的好友邀请你加入;下载地址: http://www.sharesdk.cn
38 | 验证码短信可能略有延迟,确定返回并重新开始?
39 | 等待
40 | 添加
41 | 发送验证码太频繁,请稍后再发!
42 | 很抱歉,该手机号申请验证码次数过多,请明天重试!
43 |
44 |
--------------------------------------------------------------------------------
/res/values/smssdk_styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
11 |
--------------------------------------------------------------------------------
/src/bean/JsonMessage.java:
--------------------------------------------------------------------------------
1 | /**
2 | * wechatdonal
3 | */
4 | package bean;
5 |
6 | import tools.AppException;
7 | import tools.Logger;
8 |
9 | import com.google.gson.Gson;
10 |
11 | /**
12 | * wechat
13 | *
14 | * @author donal
15 | *
16 | */
17 | public class JsonMessage {
18 | public String file;
19 | public int messageType;
20 | public String text;
21 |
22 | public static JsonMessage parse(String res) {
23 | JsonMessage data = new JsonMessage();
24 | Gson gson = new Gson();
25 | data = gson.fromJson(res, JsonMessage.class);
26 | return data;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/bean/KeyValue.java:
--------------------------------------------------------------------------------
1 | package bean;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | public class KeyValue extends Entity{
7 | public String key;
8 | public String value;
9 | public KeyValue(String key, String value) {
10 | super();
11 | this.key = key;
12 | this.value = value;
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/bean/StrangerEntity.java:
--------------------------------------------------------------------------------
1 | /**
2 | * wechatdonal
3 | */
4 | package bean;
5 |
6 | import java.io.IOException;
7 | import java.io.Serializable;
8 | import java.util.List;
9 |
10 | import tools.AppException;
11 | import tools.Logger;
12 |
13 | import com.google.gson.Gson;
14 |
15 | /**
16 | * wechat
17 | *
18 | * @author donal
19 | *
20 | */
21 | public class StrangerEntity implements Serializable{
22 | public int status;
23 | public String msg;
24 | public List userList;
25 |
26 | public static StrangerEntity parse(String res) throws IOException, AppException{
27 | StrangerEntity data = new StrangerEntity();
28 | try {
29 | Gson gson = new Gson();
30 | data = gson.fromJson(res, StrangerEntity.class);
31 | } catch (Exception e) {
32 | Logger.i(res);
33 | Logger.i(e);
34 | throw AppException.json(e);
35 | }
36 | return data;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/bean/Update.java:
--------------------------------------------------------------------------------
1 | /**
2 | *
3 | */
4 | package bean;
5 |
6 | import java.io.Serializable;
7 |
8 | import org.json.JSONException;
9 | import org.json.JSONObject;
10 |
11 | import com.google.gson.Gson;
12 |
13 | import tools.AppException;
14 | import tools.Logger;
15 |
16 | /**
17 | * @author Donal Tong
18 | * momoka
19 | * 2013-1-12
20 | */
21 | public class Update extends Entity {
22 | public String version_code;
23 | public String version_name;
24 | public String app_name;
25 | public String app_url;
26 | public String update_log;
27 |
28 | /**
29 | * @param postRequest
30 | * @return
31 | */
32 | public static Update parse(String postRequest) throws AppException{
33 | Update update = new Update();
34 | try {
35 | Gson gson = new Gson();
36 | update = gson.fromJson(postRequest, Update.class);
37 | } catch (Exception e) {
38 | Logger.i(e);
39 | throw AppException.json(e);
40 | }
41 | return update;
42 | }
43 |
44 |
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/src/bean/UserDetail.java:
--------------------------------------------------------------------------------
1 | /**
2 | * wechatdonal
3 | */
4 | package bean;
5 |
6 | import java.io.IOException;
7 |
8 | import tools.AppException;
9 | import tools.Logger;
10 |
11 | import com.google.gson.Gson;
12 |
13 | /**
14 | * wechat
15 | *
16 | * @author donal
17 | *
18 | */
19 | public class UserDetail {
20 | public int status;
21 | public String msg;
22 | public String apiKey;
23 | public UserInfo userDetail;
24 |
25 | public static UserDetail parse(String res) throws AppException {
26 | UserDetail data = new UserDetail();
27 | try {
28 | Gson gson = new Gson();
29 | data = gson.fromJson(res, UserDetail.class);
30 | } catch (Exception e) {
31 | Logger.i(e);
32 | throw AppException.json(e);
33 | }
34 | return data;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/bean/UserEntity.java:
--------------------------------------------------------------------------------
1 | package bean;
2 |
3 | import java.io.IOException;
4 |
5 | import org.json.JSONException;
6 | import org.json.JSONObject;
7 |
8 | import com.google.gson.Gson;
9 |
10 | import tools.AppException;
11 | import tools.Logger;
12 |
13 | public class UserEntity extends Entity{
14 | public int status;
15 | public String msg;
16 | public String apiKey;
17 | public UserInfo userInfo;
18 |
19 | public static UserEntity parse(String res) throws IOException, AppException {
20 | UserEntity data = new UserEntity();
21 | try {
22 | Gson gson = new Gson();
23 | data = gson.fromJson(res, UserEntity.class);
24 | } catch (Exception e) {
25 | Logger.i(e);
26 | throw AppException.json(e);
27 | }
28 | return data;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/bean/UserInfo.java:
--------------------------------------------------------------------------------
1 | /**
2 | * wechatdonal
3 | */
4 | package bean;
5 |
6 | import java.io.Serializable;
7 |
8 | import tools.AppException;
9 | import tools.Logger;
10 |
11 | import com.google.gson.Gson;
12 |
13 | /**
14 | * wechat
15 | *
16 | * @author donal
17 | *
18 | */
19 | public class UserInfo implements Serializable {
20 | public String userId;
21 | public String nickName;
22 | public String description;
23 | public String registerDate;
24 | public String userHead;
25 |
26 | /**
27 | * @param string
28 | * @return
29 | * @throws AppException
30 | */
31 | public static UserInfo parse(String string) throws AppException {
32 | UserInfo data = new UserInfo();
33 | try {
34 | Gson gson = new Gson();
35 | data = gson.fromJson(string, UserInfo.class);
36 | } catch (Exception e) {
37 | Logger.i(e);
38 | throw AppException.json(e);
39 | }
40 | return data;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/config/AppActivitySupport.java:
--------------------------------------------------------------------------------
1 | /**
2 | * wechatdonal
3 | */
4 | package config;
5 |
6 | import android.app.ProgressDialog;
7 | import android.content.Context;
8 | import android.content.SharedPreferences;
9 |
10 | /**
11 | * wechat
12 | *
13 | * @author donal
14 | *
15 | */
16 | public interface AppActivitySupport {
17 |
18 | /**
19 | *
20 | * 获取EimApplication.
21 | *
22 | */
23 | public abstract WCApplication getWcApplication();
24 |
25 | /**
26 | *
27 | * 终止服务.
28 | *
29 | */
30 | public abstract void stopService();
31 |
32 | /**
33 | *
34 | * 开启服务.
35 | *
36 | */
37 | public abstract void startService();
38 |
39 | /**
40 | *
41 | * 校验网络-如果没有网络就弹出设置,并返回true.
42 | *
43 | * @return
44 | */
45 | public abstract boolean validateInternet();
46 |
47 | /**
48 | *
49 | * 校验网络-如果没有网络就返回true.
50 | *
51 | * @return
52 | */
53 | public abstract boolean hasInternetConnected();
54 |
55 | /**
56 | *
57 | * 退出应用.
58 | *
59 | */
60 | public abstract void isExit();
61 |
62 | /**
63 | *
64 | * 判断GPS是否已经开启.
65 | *
66 | * @return
67 | */
68 | public abstract boolean hasLocationGPS();
69 |
70 | /**
71 | *
72 | * 判断基站是否已经开启.
73 | *
74 | * @return
75 | */
76 | public abstract boolean hasLocationNetWork();
77 |
78 | /**
79 | *
80 | * 检查内存卡.
81 | *
82 | */
83 | public abstract void checkMemoryCard();
84 |
85 | /**
86 | *
87 | * 显示toast.
88 | *
89 | * @param text
90 | * 内容
91 | * @param longint
92 | * 内容显示多长时间
93 | */
94 | public abstract void showToast(String text, int longint);
95 |
96 | /**
97 | *
98 | * 短时间显示toast.
99 | *
100 | * @param text
101 | */
102 | public abstract void showToast(String text);
103 |
104 | /**
105 | *
106 | * 获取进度条.
107 | *
108 | * @return
109 | */
110 | public abstract ProgressDialog getProgressDialog();
111 |
112 | /**
113 | *
114 | * 返回当前Activity上下文.
115 | *
116 | * @return
117 | */
118 | public abstract Context getContext();
119 |
120 | /**
121 | *
122 | * 获取当前登录用户的SharedPreferences配置.
123 | *
124 | * @return
125 | */
126 | public SharedPreferences getLoginUserSharedPre();
127 |
128 |
129 | /**
130 | *
131 | * 发出Notification的method.
132 | *
133 | * @param iconId
134 | * 图标
135 | * @param contentTitle
136 | * 标题
137 | * @param contentText
138 | * 你内容
139 | * @param activity
140 | */
141 | public void setNotiType(int iconId, String contentTitle,
142 | String contentText, Class activity, String from);
143 | }
144 |
--------------------------------------------------------------------------------
/src/config/FriendManager.java:
--------------------------------------------------------------------------------
1 | /**
2 | * wechatdonal
3 | */
4 | package config;
5 |
6 | import bean.UserInfo;
7 | import im.model.IMMessage;
8 | import tools.Logger;
9 | import tools.StringUtils;
10 | import android.content.ContentValues;
11 | import android.content.Context;
12 | import android.content.SharedPreferences;
13 | import android.database.Cursor;
14 | import db.DBManager;
15 | import db.SQLiteTemplate;
16 | import db.SQLiteTemplate.RowMapper;
17 |
18 | /**
19 | *
20 | * 朋友历史记录
21 | *
22 | */
23 | public class FriendManager {
24 |
25 | private static FriendManager friendManager = null;
26 | private static DBManager manager = null;
27 |
28 | private FriendManager(Context context) {
29 | SharedPreferences sharedPre = context.getSharedPreferences(
30 | CommonValue.LOGIN_SET, Context.MODE_PRIVATE);
31 | String databaseName = sharedPre.getString(CommonValue.USERID, null);
32 | Logger.i(databaseName);
33 | manager = DBManager.getInstance(context, databaseName);
34 | }
35 |
36 | public static FriendManager getInstance(Context context) {
37 | if (friendManager == null) {
38 | friendManager = new FriendManager(context);
39 | }
40 | return friendManager;
41 | }
42 |
43 | public static void destroy() {
44 | friendManager = null;
45 | manager = null;
46 | }
47 | /**
48 | *
49 | * 保存朋友信息 or 更新朋友信息
50 | *
51 | * @param user
52 | */
53 | public void saveOrUpdateFriend(UserInfo user) {
54 | SQLiteTemplate st = SQLiteTemplate.getInstance(manager, false);
55 | ContentValues contentValues = new ContentValues();
56 | contentValues.put("nickName", user.nickName);
57 | contentValues.put("avatar", user.userHead);
58 | contentValues.put("description", user.description);
59 | int s = st.update("im_friend", contentValues, "userId", new String[]{user.userId});
60 | if (s == 0) {
61 | contentValues.put("userId", StringUtils.doEmpty(user.userId));
62 | st.insert("im_friend", contentValues);
63 | }
64 | }
65 |
66 | /**
67 | * 查找朋友
68 | *
69 | * @param userId
70 | * @return
71 | */
72 | public UserInfo getFriend(final String userId) {
73 | if (StringUtils.empty(userId)) {
74 | return null;
75 | }
76 | SQLiteTemplate st = SQLiteTemplate.getInstance(manager, false);
77 | UserInfo friend = st.queryForObject(new RowMapper() {
78 | @Override
79 | public UserInfo mapRow(Cursor cursor, int index) {
80 | UserInfo user = new UserInfo();
81 | user.userId = userId;
82 | user.nickName = cursor.getString(cursor.getColumnIndex("nickName"));
83 | user.userHead = cursor.getString(cursor.getColumnIndex("avatar"));
84 | user.description = cursor.getString(cursor.getColumnIndex("description"));
85 | return user;
86 | }
87 | }, "select nickName, avatar, description from im_friend where userId=?", new String[]{userId});
88 | return friend;
89 | }
90 | }
91 |
--------------------------------------------------------------------------------
/src/config/QYRestClient.java:
--------------------------------------------------------------------------------
1 | package config;
2 |
3 | import android.content.Context;
4 |
5 | import com.loopj.android.http.AsyncHttpClient;
6 | import com.loopj.android.http.AsyncHttpResponseHandler;
7 | import com.loopj.android.http.RequestParams;
8 |
9 | /**
10 | * wechat
11 | *
12 | * @author donal
13 | *
14 | */
15 | public class QYRestClient {
16 |
17 | private static AsyncHttpClient client = new AsyncHttpClient();
18 |
19 | public static AsyncHttpClient getIntance() {
20 | return client;
21 | }
22 |
23 | public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
24 | client.get(getAbsoluteUrl(url), params, responseHandler);
25 | }
26 |
27 | public static void getWeb(Context context, String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
28 | client.get(context, url, params, responseHandler);
29 | }
30 |
31 | public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
32 | client.post(getAbsoluteUrl(url), params, responseHandler);
33 | }
34 |
35 | public static void post(Context context, String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
36 | client.post(context, getAbsoluteUrl(url), params, responseHandler);
37 | }
38 |
39 | private static String getAbsoluteUrl(String relativeUrl) {
40 | client.setTimeout(10*1000);
41 | client.setMaxConnections(5);
42 | return CommonValue.BASE_API + relativeUrl;
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/db/DBManager.java:
--------------------------------------------------------------------------------
1 | package db;
2 |
3 | import android.content.Context;
4 | import android.database.Cursor;
5 | import android.database.sqlite.SQLiteDatabase;
6 |
7 | /**
8 | * SQLite数据库管理类
9 | *
10 | * 主要负责数据库资源的初始化,开启,关闭,以及获得DatabaseHelper帮助类操作
11 | *
12 | */
13 | public class DBManager {
14 | private int version = 1;
15 | private String databaseName;
16 |
17 | // 本地Context对象
18 | private Context mContext = null;
19 |
20 | private static DBManager dBManager = null;
21 |
22 | /**
23 | * 构造函数
24 | *
25 | * @param mContext
26 | */
27 | private DBManager(Context mContext) {
28 | super();
29 | this.mContext = mContext;
30 |
31 | }
32 |
33 | public static DBManager getInstance(Context mContext, String databaseName) {
34 | if (null == dBManager) {
35 | dBManager = new DBManager(mContext);
36 | }
37 | dBManager.databaseName = databaseName;
38 | return dBManager;
39 | }
40 |
41 | /**
42 | * 关闭数据库 注意:当事务成功或者一次性操作完毕时候再关闭
43 | */
44 | public void closeDatabase(SQLiteDatabase dataBase, Cursor cursor) {
45 | if (null != dataBase) {
46 | dataBase.close();
47 | }
48 | if (null != cursor) {
49 | cursor.close();
50 | }
51 | }
52 |
53 | /**
54 | * 打开数据库 注:SQLiteDatabase资源一旦被关闭,该底层会重新产生一个新的SQLiteDatabase
55 | */
56 | public SQLiteDatabase openDatabase() {
57 | return getDatabaseHelper().getWritableDatabase();
58 | }
59 |
60 | /**
61 | * 获取DataBaseHelper
62 | *
63 | * @return
64 | */
65 | public DataBaseHelper getDatabaseHelper() {
66 | return new DataBaseHelper(mContext, this.databaseName, null,
67 | this.version);
68 | }
69 |
70 | }
71 |
--------------------------------------------------------------------------------
/src/db/DataBaseHelper.java:
--------------------------------------------------------------------------------
1 | package db;
2 |
3 | import android.content.Context;
4 | import android.database.sqlite.SQLiteDatabase;
5 | import android.database.sqlite.SQLiteDatabase.CursorFactory;
6 |
7 | /**
8 | * SQLite数据库的帮助类
9 | *
10 | * 该类属于扩展类,主要承担数据库初始化和版本升级使用,其他核心全由核心父类完成
11 | *
12 | */
13 | public class DataBaseHelper extends SDCardSQLiteOpenHelper {
14 |
15 | public DataBaseHelper(Context context, String name, CursorFactory factory,
16 | int version) {
17 | super(context, name, factory, version);
18 | }
19 |
20 | @Override
21 | public void onCreate(SQLiteDatabase db) {
22 | db.execSQL("CREATE TABLE [im_msg_his] ([_id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, [content] NVARCHAR, [msg_from] NVARCHAR, [msg_to] NVARCHAR, [msg_time] TEXT, [msg_type] INTEGER);");
23 | db.execSQL("CREATE TABLE [im_notice] ([_id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, [type] INTEGER, [title] NVARCHAR, [content] NVARCHAR, [notice_from] NVARCHAR, [notice_to] NVARCHAR, [notice_time] TEXT, [status] INTEGER);");
24 | db.execSQL("create table [im_friend] ([_id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, [userId] nvarchar, [nickName] nvarchar, [description] nvarchar, [avatar] nvarchar);");
25 | }
26 |
27 | @Override
28 | public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
29 |
30 | }
31 |
32 | @Override
33 | public void onOpen(SQLiteDatabase db) {
34 | super.onOpen(db);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/im/AWechatActivity.java:
--------------------------------------------------------------------------------
1 | /**
2 | * wechatdonal
3 | */
4 | package im;
5 |
6 | import im.model.Notice;
7 |
8 | import java.util.List;
9 |
10 |
11 | import org.jivesoftware.smack.XMPPException;
12 | import org.jivesoftware.smack.packet.Presence;
13 |
14 | import config.AppActivity;
15 | import config.CommonValue;
16 | import config.XmppConnectionManager;
17 |
18 | import bean.UserInfo;
19 |
20 | import tools.Logger;
21 | import tools.StringUtils;
22 |
23 | import android.content.BroadcastReceiver;
24 | import android.content.Context;
25 | import android.content.Intent;
26 | import android.content.IntentFilter;
27 | import android.os.Bundle;
28 |
29 | /**
30 | * wechat
31 | *
32 | * @author donal
33 | *
34 | */
35 | public abstract class AWechatActivity extends AppActivity {
36 |
37 | private ChatterReceiver receiver = null;
38 | protected int noticeNum = 0;
39 |
40 | @Override
41 | protected void onCreate(Bundle savedInstanceState) {
42 | super.onCreate(savedInstanceState);
43 | init();
44 | }
45 |
46 | private void init() {
47 | receiver = new ChatterReceiver();
48 | IntentFilter filter = new IntentFilter();
49 | filter.addAction(CommonValue.NEW_MESSAGE_ACTION);
50 | filter.addAction(CommonValue.SEND_MESSAGE_ACTION);
51 | registerReceiver(receiver, filter);
52 | }
53 |
54 | @Override
55 | protected void onDestroy() {
56 | super.onDestroy();
57 | unregisterReceiver(receiver);
58 | }
59 | // @Override
60 | // protected void onPause() {
61 | //
62 | // super.onPause();
63 | // }
64 | //
65 | // @Override
66 | // protected void onResume() {
67 | // super.onResume();
68 | // }
69 |
70 | private class ChatterReceiver extends BroadcastReceiver {
71 |
72 | @Override
73 | public void onReceive(Context context, Intent intent) {
74 | String action = intent.getAction();
75 | if (CommonValue.NEW_MESSAGE_ACTION.equals(action)) {
76 | Notice notice = (Notice) intent.getSerializableExtra("notice");
77 | msgReceive(notice);
78 | }
79 | else if (CommonValue.ACTION_RECONNECT_STATE.equals(action)) {
80 | boolean isSuccess = intent.getBooleanExtra(
81 | CommonValue.RECONNECT_STATE, true);
82 | handReConnect(isSuccess);
83 | }
84 | else if (CommonValue.SEND_MESSAGE_ACTION.equals(action)) {
85 | String to = intent.getStringExtra("to");
86 | msgSend(to);
87 | }
88 | }
89 | }
90 | protected abstract void msgSend(String to);
91 |
92 | protected abstract void msgReceive(Notice notice);
93 |
94 | protected void createChat(String userId) {
95 | Intent intent = new Intent(context, Chating.class);
96 | intent.putExtra("to", userId);
97 | startActivity(intent);
98 | }
99 |
100 | protected abstract void handReConnect(boolean isSuccess);
101 | }
102 |
--------------------------------------------------------------------------------
/src/im/VoiceBubbleListener.java:
--------------------------------------------------------------------------------
1 | package im;
2 |
3 | import android.view.View;
4 |
5 |
6 | public interface VoiceBubbleListener {
7 |
8 | public void playFail(View messageBubble);
9 |
10 | public void playStoped(View messageBubble);
11 |
12 | public void playStart(View messageBubble);
13 |
14 | public void playDownload(View messageBubble);
15 |
16 | public void playCompletion(View messageBubble);
17 |
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/im/model/HistoryChatBean.java:
--------------------------------------------------------------------------------
1 | package im.model;
2 |
3 | /**
4 | *
5 | * 最近联系人显示的与某个的聊天记录
6 | *
7 | */
8 | public class HistoryChatBean implements Comparable{
9 | public static final int ADD_FRIEND = 1;
10 | public static final int SYS_MSG = 2;
11 | public static final int CHAT_MSG = 3;
12 |
13 | public static final int READ = 0;
14 | public static final int UNREAD = 1;
15 | private String id;
16 | private String title;
17 | private String content;
18 | private Integer status; // 0已读 1未读
19 | private String from;
20 | private String to;
21 | private String noticeTime;
22 | private Integer noticeSum;
23 | private Integer noticeType;
24 |
25 | public Integer getNoticeSum() {
26 | return noticeSum;
27 | }
28 |
29 | public void setNoticeSum(Integer noticeSum) {
30 | this.noticeSum = noticeSum;
31 | }
32 |
33 | public Integer getNoticeType() {
34 | return noticeType;
35 | }
36 |
37 | public void setNoticeType(Integer noticeType) {
38 | this.noticeType = noticeType;
39 | }
40 |
41 | public String getId() {
42 | return id;
43 | }
44 |
45 | public void setId(String id) {
46 | this.id = id;
47 | }
48 |
49 | public String getTitle() {
50 | return title;
51 | }
52 |
53 | public void setTitle(String title) {
54 | this.title = title;
55 | }
56 |
57 | public String getContent() {
58 | return content;
59 | }
60 |
61 | public void setContent(String content) {
62 | this.content = content;
63 | }
64 |
65 | public Integer getStatus() {
66 | return status;
67 | }
68 |
69 | public void setStatus(Integer status) {
70 | this.status = status;
71 | }
72 |
73 | public String getFrom() {
74 | return from;
75 | }
76 |
77 | public void setFrom(String from) {
78 | this.from = from;
79 | }
80 |
81 | public String getTo() {
82 | return to;
83 | }
84 |
85 | public void setTo(String to) {
86 | this.to = to;
87 | }
88 |
89 | public String getNoticeTime() {
90 | return noticeTime;
91 | }
92 |
93 | public void setNoticeTime(String noticeTime) {
94 | this.noticeTime = noticeTime;
95 | }
96 |
97 | @Override
98 | public int compareTo(HistoryChatBean other) {
99 | return other.noticeTime.compareTo(this.noticeTime);
100 | }
101 |
102 | }
103 |
--------------------------------------------------------------------------------
/src/im/model/IMMessage.java:
--------------------------------------------------------------------------------
1 | package im.model;
2 |
3 |
4 | import android.os.Parcel;
5 | import android.os.Parcelable;
6 |
7 | public class IMMessage implements Parcelable, Comparable {
8 | public static final String IMMESSAGE_KEY = "immessage.key";
9 | public static final String KEY_TIME = "immessage.time";
10 | public static final int SUCCESS = 0;
11 | public static final int ERROR = 1;
12 | private int type;
13 | private String content;
14 | private String time;
15 | private String fromSubJid;
16 | private int msgType = 0;//0:接受 1:发送
17 |
18 | public IMMessage() {
19 | this.type = SUCCESS;
20 | }
21 |
22 | public int getType() {
23 | return type;
24 | }
25 |
26 | public void setType(int type) {
27 | this.type = type;
28 | }
29 |
30 | public String getContent() {
31 | return content;
32 | }
33 |
34 | public void setContent(String content) {
35 | this.content = content;
36 | }
37 |
38 | public String getTime() {
39 | return time;
40 | }
41 |
42 | public void setTime(String time) {
43 | this.time = time;
44 | }
45 |
46 | public String getFromSubJid() {
47 | return fromSubJid;
48 | }
49 |
50 | public void setFromSubJid(String fromSubJid) {
51 | this.fromSubJid = fromSubJid;
52 | }
53 |
54 | public int getMsgType() {
55 | return msgType;
56 | }
57 |
58 | public void setMsgType(int msgType) {
59 | this.msgType = msgType;
60 | }
61 |
62 | @Override
63 | public int describeContents() {
64 | return 0;
65 | }
66 |
67 | @Override
68 | public void writeToParcel(Parcel dest, int flags) {
69 | dest.writeInt(type);
70 | dest.writeString(content);
71 | dest.writeString(time);
72 | dest.writeString(fromSubJid);
73 | dest.writeInt(msgType);
74 | }
75 |
76 | public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
77 |
78 | @Override
79 | public IMMessage createFromParcel(Parcel source) {
80 | IMMessage message = new IMMessage();
81 | message.setType(source.readInt());
82 | message.setContent(source.readString());
83 | message.setTime(source.readString());
84 | message.setFromSubJid(source.readString());
85 | message.setMsgType(source.readInt());
86 | return message;
87 | }
88 |
89 | @Override
90 | public IMMessage[] newArray(int size) {
91 | return new IMMessage[size];
92 | }
93 |
94 | };
95 |
96 | public IMMessage(String content, String time, String withSb, int msgType) {
97 | super();
98 | this.content = content;
99 | this.time = time;
100 | this.msgType = msgType;
101 | this.fromSubJid = withSb;
102 |
103 | }
104 |
105 | @Override
106 | public int compareTo(IMMessage oth) {
107 | if (null == this.getTime() || null == oth.getTime()) {
108 | return 0;
109 | }
110 | String time1 = "";
111 | String time2 = "";
112 | time1 = this.getTime();
113 | time2 = oth.getTime();
114 | return time1.compareTo(time2);
115 | }
116 | }
117 |
--------------------------------------------------------------------------------
/src/im/model/Notice.java:
--------------------------------------------------------------------------------
1 | /**
2 | * wechatdonal
3 | */
4 | package im.model;
5 |
6 | import java.io.Serializable;
7 | import java.util.Date;
8 |
9 | import tools.DateUtil;
10 |
11 |
12 | /**
13 | *
14 | * 消息实体.
15 | *
16 | */
17 | public class Notice implements Serializable, Comparable {
18 | /**
19 | *
20 | */
21 | private static final long serialVersionUID = 1L;
22 | public static final int ADD_FRIEND = 1;
23 | public static final int SYS_MSG = 2;
24 | public static final int CHAT_MSG = 3;
25 | public static final int READ = 0;
26 | public static final int UNREAD = 1;
27 | public static final int All = 2;
28 |
29 | private String id;
30 | private String title;
31 | private String content;
32 | private Integer status; // 状态 0已读 1未读
33 | private String from;
34 | private String to;
35 | private String noticeTime;
36 | private Integer noticeType;
37 |
38 | public Integer getNoticeType() {
39 | return noticeType;
40 | }
41 |
42 | public void setNoticeType(Integer noticeType) {
43 | this.noticeType = noticeType;
44 | }
45 |
46 | public String getId() {
47 | return id;
48 | }
49 |
50 | public void setId(String id) {
51 | this.id = id;
52 | }
53 |
54 | public String getTitle() {
55 | return title;
56 | }
57 |
58 | public void setTitle(String title) {
59 | this.title = title;
60 | }
61 |
62 | public String getContent() {
63 | return content;
64 | }
65 |
66 | public void setContent(String content) {
67 | this.content = content;
68 | }
69 |
70 | public Integer getStatus() {
71 | return status;
72 | }
73 |
74 | public void setStatus(Integer status) {
75 | this.status = status;
76 | }
77 |
78 | public String getFrom() {
79 | return from;
80 | }
81 |
82 | public void setFrom(String from) {
83 | this.from = from;
84 | }
85 |
86 | public String getTo() {
87 | return to;
88 | }
89 |
90 | public void setTo(String to) {
91 | this.to = to;
92 | }
93 |
94 | public String getNoticeTime() {
95 | return noticeTime;
96 | }
97 |
98 | public void setNoticeTime(String noticeTime) {
99 | this.noticeTime = noticeTime;
100 | }
101 |
102 | @Override
103 | public int compareTo(Notice oth) {
104 | if (null == this.getNoticeTime() || null == oth.getNoticeTime()) {
105 | return 0;
106 | }
107 | String time1 = "";
108 | String time2 = "";
109 | time1 = this.getNoticeTime();
110 | time2 = oth.getNoticeTime();
111 | return time1.compareTo(time2);
112 | }
113 |
114 | }
115 |
116 |
--------------------------------------------------------------------------------
/src/qiniu/auth/CallRet.java:
--------------------------------------------------------------------------------
1 | package qiniu.auth;
2 |
3 | import qiniu.utils.IOnProcess;
4 |
5 |
6 | public abstract class CallRet implements IOnProcess {
7 | public void onInit(int flag){}
8 | public abstract void onSuccess(byte[] body);
9 | public abstract void onFailure(Exception ex);
10 | public void onProcess(long current, long total){}
11 | public void onPause(Object tag){}
12 | }
13 |
--------------------------------------------------------------------------------
/src/qiniu/auth/JSONObjectRet.java:
--------------------------------------------------------------------------------
1 | package qiniu.auth;
2 |
3 | import org.json.JSONException;
4 | import org.json.JSONObject;
5 |
6 | public abstract class JSONObjectRet extends CallRet {
7 | public JSONObjectRet(){}
8 | protected int mIdx;
9 | public JSONObjectRet(int idx) { mIdx = idx; }
10 | @Override
11 | public void onSuccess(byte[] body) {
12 | if (body == null) {
13 | onSuccess(new JSONObject());
14 | }
15 | try {
16 | JSONObject obj = new JSONObject(new String(body));
17 | onSuccess(obj);
18 | } catch (JSONException e) {
19 | e.printStackTrace();
20 | onFailure(new Exception(new String(body)));
21 | }
22 | }
23 |
24 | public abstract void onSuccess(JSONObject obj);
25 | }
26 |
--------------------------------------------------------------------------------
/src/qiniu/conf/Conf.java:
--------------------------------------------------------------------------------
1 | package qiniu.conf;
2 |
3 | public class Conf {
4 | public static final String USER_AGENT = "qiniu android-sdk v6.0.0";
5 | public static final String UP_HOST = "http://up.qiniu.com";
6 | }
7 |
--------------------------------------------------------------------------------
/src/qiniu/io/PutExtra.java:
--------------------------------------------------------------------------------
1 | package qiniu.io;
2 |
3 | import java.util.HashMap;
4 |
5 | public class PutExtra {
6 | public final static int UNUSE_CRC32 = 0;
7 | public final static int AUTO_CRC32 = 1;
8 | public final static int SPECIFY_CRC32 = 2;
9 |
10 | public HashMap params = new HashMap(); // 用户自定义参数,key必须以 "x:" 开头
11 | public String mimeType;
12 | public long crc32;
13 | public int checkCrc = UNUSE_CRC32;
14 | }
15 |
--------------------------------------------------------------------------------
/src/qiniu/resumableio/PutExtra.java:
--------------------------------------------------------------------------------
1 | package qiniu.resumableio;
2 |
3 | import org.json.JSONArray;
4 | import org.json.JSONException;
5 | import org.json.JSONObject;
6 |
7 | import java.util.HashMap;
8 | import java.util.Iterator;
9 | import java.util.Map;
10 |
11 | public class PutExtra {
12 | public Map params;
13 | public PutRet[] processes;
14 | public String mimeType;
15 | public INotify notify;
16 |
17 | long totalSize;
18 |
19 | public PutExtra() {}
20 | public PutExtra(JSONObject obj) {
21 | mimeType = obj.optString("mimeType", "");
22 | JSONArray procs = obj.optJSONArray("processes");
23 | processes = new PutRet[procs.length()];
24 | for (int i=0; i();
28 | JSONObject paramsJson = obj.optJSONObject("params");
29 | for (Iterator> iter = paramsJson.keys(); iter.hasNext();) {
30 | String key = (String) iter.next();
31 | params.put(key, paramsJson.optString(key));
32 | }
33 | }
34 |
35 | public boolean isFinishAll() {
36 | if (totalSize <= 0) return false;
37 | long currentSize = 0;
38 | for (PutRet pr: processes) {
39 | currentSize += pr.offset;
40 | }
41 | return currentSize >= totalSize;
42 | }
43 |
44 | public JSONObject toJSON() throws JSONException {
45 | JSONObject json = new JSONObject();
46 | JSONArray process = new JSONArray();
47 | for (PutRet p: processes) {
48 | process.put(p.toJSON());
49 | }
50 | json.put("processes", process);
51 | json.put("mimeType", mimeType);
52 | if (params != null) json.put("params", new JSONObject(params));
53 | return json;
54 | }
55 | public interface INotify {
56 | public void onSuccessUpload(PutExtra ex);
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/src/qiniu/resumableio/PutRet.java:
--------------------------------------------------------------------------------
1 | package qiniu.resumableio;
2 |
3 | import org.json.JSONException;
4 | import org.json.JSONObject;
5 |
6 | public class PutRet {
7 | public String ctx;
8 | public String host;
9 | public long crc32;
10 | public String checksum;
11 | public int offset = 0;
12 | public boolean isInvalid() {
13 | return ctx == null || offset == 0;
14 | }
15 | public PutRet(){}
16 | public PutRet(JSONObject obj) {parse(obj);}
17 | public PutRet parse(JSONObject obj) {
18 | ctx = obj.optString("ctx", "");
19 | host = obj.optString("host", "");
20 | crc32 = Long.valueOf(obj.optString("crc32", "0"));
21 | checksum = obj.optString("checksum", "");
22 | offset = obj.optInt("offset", 0);
23 | return this;
24 | }
25 | public JSONObject toJSON() throws JSONException {
26 | JSONObject json = new JSONObject();
27 | json.put("crc32", crc32);
28 | json.put("checksum", checksum);
29 | json.put("offset", offset);
30 | json.put("host", host);
31 | json.put("ctx", ctx);
32 | return json;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/qiniu/utils/AuthException.java:
--------------------------------------------------------------------------------
1 | package qiniu.utils;
2 |
3 | public class AuthException extends Exception {
4 |
5 | private static final long serialVersionUID = 1L;
6 |
7 | protected AuthException() {
8 | super();
9 | }
10 |
11 | public AuthException(String detailMessage) {
12 | super(detailMessage);
13 | }
14 |
15 | public AuthException(String detailMessage, Throwable throwable) {
16 | super(detailMessage, throwable);
17 | }
18 |
19 | public AuthException(Throwable throwable) {
20 | super(throwable);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/qiniu/utils/Config.java:
--------------------------------------------------------------------------------
1 | package qiniu.utils;
2 |
3 | public class Config {
4 |
5 | public static String USER_AGENT="qiniu java-sdk v6.0.0";
6 |
7 | /**
8 | * You can get your accesskey from https://dev.qiniutek.com
10 | */
11 | public static String ACCESS_KEY = "";
12 |
13 | /**
14 | * You can get your accesskey from https://dev.qiniutek.com
16 | */
17 | public static String SECRET_KEY = "";
18 |
19 | public static String RS_HOST = "http://rs.qbox.me";
20 |
21 | public static String UP_HOST = "http://up.qbox.me";
22 |
23 | public static String RSF_HOST = "http://rsf.qbox.me";
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/src/qiniu/utils/DigestAuth.java:
--------------------------------------------------------------------------------
1 | package qiniu.utils;
2 |
3 | public class DigestAuth {
4 |
5 | public static String sign(Mac mac, byte[] data) throws AuthException {
6 | if (mac == null) {
7 | mac = new Mac(Config.ACCESS_KEY, Config.SECRET_KEY);
8 | }
9 | return mac.sign(data);
10 | }
11 |
12 |
13 | public static String signWithData(Mac mac, byte[] data) throws AuthException {
14 | if (mac == null) {
15 | mac = new Mac(Config.ACCESS_KEY, Config.SECRET_KEY);
16 | }
17 | return mac.signWithData(data);
18 | }
19 | }
--------------------------------------------------------------------------------
/src/qiniu/utils/EncodeUtils.java:
--------------------------------------------------------------------------------
1 | package qiniu.utils;
2 |
3 | import java.util.ArrayList;
4 | import java.util.HashMap;
5 | import java.util.Map;
6 | import java.util.Map.Entry;
7 |
8 | import org.apache.http.NameValuePair;
9 | import org.apache.http.client.utils.URLEncodedUtils;
10 | import org.apache.http.message.BasicNameValuePair;
11 |
12 | import android.util.Base64;
13 |
14 | public class EncodeUtils {
15 |
16 | public static byte[] urlsafeEncodeBytes(byte[] src) {
17 | if (src.length % 3 == 0) {
18 | return encodeBase64Ex(src);
19 | }
20 |
21 | byte[] b = encodeBase64Ex(src);
22 | if (b.length % 4 == 0) {
23 | return b;
24 | }
25 |
26 | int pad = 4 - b.length % 4;
27 | byte[] b2 = new byte[b.length + pad];
28 | System.arraycopy(b, 0, b2, 0, b.length);
29 | b2[b.length] = '=';
30 | if (pad > 1) {
31 | b2[b.length + 1] = '=';
32 | }
33 | return b2;
34 | }
35 |
36 | public static byte[] urlsafeBase64Decode(String encoded){
37 | byte[] rawbs = encoded.getBytes();
38 | for(int i=0;i) {
76 | @SuppressWarnings("unchecked")
77 | Map map = (HashMap) params;
78 | ArrayList list = new ArrayList();
79 | for (Entry entry : map.entrySet()) {
80 | list.add(new BasicNameValuePair(entry.getKey(), entry
81 | .getValue()));
82 | }
83 | return URLEncodedUtils.format(list, "UTF-8");
84 | }
85 | return null;
86 | }
87 | }
88 |
--------------------------------------------------------------------------------
/src/qiniu/utils/ICancel.java:
--------------------------------------------------------------------------------
1 | package qiniu.utils;
2 |
3 | public interface ICancel {
4 | public boolean cancel(boolean isIntercupt);
5 | }
6 |
--------------------------------------------------------------------------------
/src/qiniu/utils/IOnProcess.java:
--------------------------------------------------------------------------------
1 | package qiniu.utils;
2 |
3 | public interface IOnProcess {
4 | public void onProcess(long current, long total);
5 | public void onFailure(Exception ex);
6 | }
7 |
--------------------------------------------------------------------------------
/src/qiniu/utils/PutPolicy.java:
--------------------------------------------------------------------------------
1 | package qiniu.utils;
2 |
3 | import org.json.JSONException;
4 | import org.json.JSONStringer;
5 |
6 | public class PutPolicy {
7 | /** ������������������ bucketName ������ bucketName:key */
8 | public String scope;
9 | /** ������ */
10 | public String callbackUrl;
11 | /** ������ */
12 | public String callbackBody;
13 | /** ������ */
14 | public String returnUrl;
15 | /** ������ */
16 | public String returnBody;
17 | /** ������ */
18 | public String asyncOps;
19 | /** ������ */
20 | public String endUser;
21 | /** ������ */
22 | public long expires;
23 | /** ������ */
24 | public String saveKey;
25 | /** ��������� ������0, ������Scope��� Bucket:Key ���������������insert only*/
26 | public int insertOnly;
27 | /** ���������������0, ������������������������������������ MimeType */
28 | public int detectMime;
29 | /** ������ */
30 | public long fsizeLimit;
31 | /** ������ */
32 | public String persistentNotifyUrl;
33 | /** ������ */
34 | public String persistentOps;
35 |
36 | public long deadline;
37 |
38 | public PutPolicy(String scope) {
39 | this.scope = scope;
40 | }
41 |
42 | public String marshal() throws JSONException {
43 | JSONStringer stringer = new JSONStringer();
44 | stringer.object();
45 | stringer.key("scope").value(this.scope);
46 | if (this.callbackUrl != null && this.callbackUrl.length() > 0) {
47 | stringer.key("callbackUrl").value(this.callbackUrl);
48 | }
49 | if (this.callbackBody != null && this.callbackBody.length() > 0) {
50 | stringer.key("callbackBody").value(this.callbackBody);
51 | }
52 | if (this.returnUrl != null && this.returnUrl.length() > 0) {
53 | stringer.key("returnUrl").value(this.returnUrl);
54 | }
55 | if (this.returnBody != null && this.returnBody.length() > 0) {
56 | stringer.key("returnBody").value(this.returnBody);
57 | }
58 | if (this.asyncOps != null && this.asyncOps.length() > 0) {
59 | stringer.key("asyncOps").value(this.asyncOps);
60 | }
61 | if (this.saveKey != null && this.saveKey.length() > 0) {
62 | stringer.key("saveKey").value(this.saveKey);
63 | }
64 | if(this.insertOnly>0){
65 | stringer.key("insertOnly").value(this.insertOnly);
66 | }
67 | if(this.detectMime>0){
68 | stringer.key("detectMime").value(this.detectMime);
69 | }
70 | if(this.fsizeLimit>0){
71 | stringer.key("fsizeLimit").value(this.fsizeLimit);
72 | }
73 | if (this.endUser != null && this.endUser.length() > 0) {
74 | stringer.key("endUser").value(this.endUser);
75 | }
76 | if (this.persistentNotifyUrl != null && this.persistentNotifyUrl.length() > 0) {
77 | stringer.key("persistentNotifyUrl").value(this.persistentNotifyUrl);
78 | }
79 | if (this.persistentOps != null && this.persistentOps.length() > 0) {
80 | stringer.key("persistentOps").value(this.persistentOps);
81 | }
82 | stringer.key("deadline").value(this.deadline);
83 | stringer.endObject();
84 |
85 | return stringer.toString();
86 | }
87 |
88 |
89 | /**
90 | * makes an upload token.
91 | * @param mac
92 | * @return
93 | * @throws AuthException
94 | * @throws JSONException
95 | */
96 |
97 | public String token(Mac mac) throws AuthException, JSONException {
98 | if (this.expires == 0) {
99 | this.expires = 3600; // 3600s, default.
100 | }
101 | this.deadline = System.currentTimeMillis() / 1000 + this.expires;
102 | byte[] data = this.marshal().getBytes();
103 | return DigestAuth.signWithData(mac, data);
104 | }
105 |
106 | }
107 |
--------------------------------------------------------------------------------
/src/swipeback/SwipeBackActivity.java:
--------------------------------------------------------------------------------
1 |
2 | package swipeback;
3 |
4 | import config.AppActivity;
5 | import android.os.Bundle;
6 | import android.view.View;
7 |
8 |
9 | public class SwipeBackActivity extends AppActivity implements SwipeBackActivityBase {
10 | private SwipeBackActivityHelper mHelper;
11 |
12 | @Override
13 | protected void onCreate(Bundle savedInstanceState) {
14 | super.onCreate(savedInstanceState);
15 | mHelper = new SwipeBackActivityHelper(this);
16 | mHelper.onActivityCreate();
17 | }
18 |
19 | @Override
20 | protected void onPostCreate(Bundle savedInstanceState) {
21 | super.onPostCreate(savedInstanceState);
22 | mHelper.onPostCreate();
23 | }
24 |
25 | @Override
26 | public View findViewById(int id) {
27 | View v = super.findViewById(id);
28 | if (v == null && mHelper != null)
29 | return mHelper.findViewById(id);
30 | return v;
31 | }
32 |
33 | @Override
34 | public SwipeBackLayout getSwipeBackLayout() {
35 | return mHelper.getSwipeBackLayout();
36 | }
37 |
38 | @Override
39 | public void setSwipeBackEnable(boolean enable) {
40 | getSwipeBackLayout().setEnableGesture(enable);
41 | }
42 |
43 | @Override
44 | public void scrollToFinishActivity() {
45 | getSwipeBackLayout().scrollToFinishActivity();
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/src/swipeback/SwipeBackActivityBase.java:
--------------------------------------------------------------------------------
1 | package swipeback;
2 |
3 | /**
4 | * @author Yrom
5 | */
6 | public interface SwipeBackActivityBase {
7 | /**
8 | * @return the SwipeBackLayout associated with this activity.
9 | */
10 | public abstract SwipeBackLayout getSwipeBackLayout();
11 |
12 | public abstract void setSwipeBackEnable(boolean enable);
13 |
14 | /**
15 | * Scroll out contentView and finish the activity
16 | */
17 | public abstract void scrollToFinishActivity();
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/tools/AudioRecoderManager.java:
--------------------------------------------------------------------------------
1 | package tools;
2 |
3 | import java.io.File;
4 | import java.io.IOException;
5 |
6 | import config.CommonValue;
7 | import android.content.Context;
8 | import android.content.SharedPreferences;
9 | import android.media.MediaRecorder;
10 | import android.os.Environment;
11 |
12 | public class AudioRecoderManager {
13 |
14 | public static final String CACHE_VOICE_FILE_PATH = Environment.getExternalStorageDirectory() + "/donal/voice/";
15 |
16 | private static int SAMPLE_RATE_IN_HZ = 8000;
17 | private static AudioRecoderManager audioRecoderManager = null;
18 | private static MediaRecorder mediaRecorder = null;
19 | private String voicePath = null;
20 | private String userId;
21 |
22 | private AudioRecoderManager(Context context) {
23 | mediaRecorder = new MediaRecorder();
24 | SharedPreferences sharedPre = context.getSharedPreferences(
25 | CommonValue.LOGIN_SET, Context.MODE_PRIVATE);
26 | userId = sharedPre.getString(CommonValue.USERID, null);
27 | }
28 |
29 | public static AudioRecoderManager getInstance(Context context) {
30 | if (audioRecoderManager == null) {
31 | audioRecoderManager = new AudioRecoderManager(context);
32 | }
33 | return audioRecoderManager;
34 | }
35 |
36 | public static void destroy() {
37 | audioRecoderManager = null;
38 | mediaRecorder = null;
39 | }
40 |
41 | public void start() throws IllegalStateException, IOException {
42 | File dir = new File(CACHE_VOICE_FILE_PATH);
43 | if (!dir.exists()) {
44 | dir.mkdirs();
45 | }
46 | voicePath = CACHE_VOICE_FILE_PATH + userId + "-" +System.currentTimeMillis() + ".amr";
47 | mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
48 | mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
49 | mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
50 | mediaRecorder.setAudioSamplingRate(SAMPLE_RATE_IN_HZ);
51 | mediaRecorder.setOutputFile(voicePath);
52 | mediaRecorder.prepare();
53 | mediaRecorder.start();
54 | }
55 |
56 | public String stop() throws IOException {
57 | mediaRecorder.stop();
58 | mediaRecorder.release();
59 | return voicePath;
60 | }
61 |
62 | public int getAmplitude() {
63 | if (mediaRecorder != null){
64 | return mediaRecorder.getMaxAmplitude();
65 | }
66 | else {
67 | return 0;
68 | }
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/src/ui/MainActivity.java:
--------------------------------------------------------------------------------
1 | package ui;
2 |
3 | import ui.view.SlideDrawerView;
4 |
5 | import com.donal.wechat.R;
6 |
7 | import android.os.Bundle;
8 | import android.support.v4.app.FragmentActivity;
9 |
10 | public class MainActivity extends FragmentActivity{
11 | // protected SlidingMenu side_drawer;
12 |
13 | @Override
14 | protected void onCreate(Bundle arg0) {
15 | super.onCreate(arg0);
16 | setContentView(R.layout.main);
17 | initSlidingMenu();
18 | }
19 |
20 | protected void initSlidingMenu() {
21 | // side_drawer = new SlideDrawerView(this).initSlidingMenu();
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/ui/Register1.java:
--------------------------------------------------------------------------------
1 | package ui;
2 |
3 | import com.donal.wechat.R;
4 |
5 | import config.AppActivity;
6 | import config.CommonValue;
7 | import android.app.ProgressDialog;
8 | import android.content.Intent;
9 | import android.os.Bundle;
10 | import android.view.View;
11 | import android.widget.Button;
12 | import android.widget.EditText;
13 | import android.widget.Toast;
14 | import tools.AppManager;
15 | import tools.StringUtils;
16 | import tools.UIHelper;
17 |
18 | public class Register1 extends AppActivity{
19 | private EditText mobileET;
20 | // private CountDown cd;
21 | boolean canVertify ;
22 | int leftSeconds;
23 | private ProgressDialog loadingPd;
24 |
25 | @Override
26 | protected void onActivityResult(int requestCode, int resultCode, Intent data) {
27 | if (resultCode != RESULT_OK) {
28 | return;
29 | }
30 | switch (requestCode) {
31 | case CommonValue.REQUEST_REGISTER_INFO:
32 | AppManager.getAppManager().finishActivity(this);
33 | break;
34 | }
35 | }
36 |
37 | @Override
38 | protected void onCreate(Bundle savedInstanceState) {
39 | super.onCreate(savedInstanceState);
40 | setContentView(R.layout.register1);
41 | initUI();
42 | }
43 |
44 | private void initUI() {
45 | Button rightBarButton = (Button) findViewById(R.id.rightBarButton);
46 | accretionArea(rightBarButton);
47 | mobileET = (EditText) findViewById(R.id.editTextPhone);
48 | }
49 |
50 | public void ButtonClick(View v) {
51 | switch (v.getId()) {
52 | case R.id.rightBarButton:
53 | this.getVertifyCode();
54 | break;
55 | }
56 | }
57 |
58 | private void getVertifyCode() {
59 | if (StringUtils.isMobileNO(mobileET.getText().toString())) {
60 | step2();
61 | }
62 | else {
63 | showToast("请输入正确的手机号码");
64 | }
65 | }
66 |
67 | private void step2() {
68 | Intent intent = new Intent(Register1.this, Register2.class);
69 | intent.putExtra("mobile", mobileET.getText().toString());
70 | startActivityForResult(intent, CommonValue.REQUEST_REGISTER_INFO);
71 | }
72 |
73 | }
74 |
--------------------------------------------------------------------------------
/src/ui/Tabbar.java:
--------------------------------------------------------------------------------
1 | package ui;
2 |
3 |
4 | import im.WeChat;
5 | import tools.AppManager;
6 | import ui.view.SlideDrawerView;
7 |
8 | import com.donal.wechat.R;
9 |
10 | import android.app.AlertDialog;
11 | import android.app.TabActivity;
12 | import android.content.DialogInterface;
13 | import android.content.Intent;
14 | import android.os.Bundle;
15 | import android.view.View;
16 | import android.widget.RadioButton;
17 | import android.widget.RadioGroup;
18 | import android.widget.TabHost;
19 | import android.widget.RadioGroup.OnCheckedChangeListener;
20 |
21 | /**
22 | * wechat
23 | *
24 | * @author donal
25 | *
26 | */
27 | public class Tabbar extends TabActivity implements OnCheckedChangeListener{
28 | private RadioGroup mainTab;
29 | public static TabHost mTabHost;
30 |
31 | private Intent wechatIntent;
32 | private Intent friendIntent;
33 | private Intent findFriendIntent;
34 | private Intent meIntent;
35 |
36 | private final static String TAB_TAG_WECHAT = "tab_tag_wechat";
37 | private final static String TAB_TAG_FRIEND = "tab_tag_friend";
38 | private final static String TAB_TAG_ME = "tab_tag_me";
39 | private final static String TAB_TAG_FIND = "tab_tag_findfriend";
40 |
41 |
42 | @Override
43 | protected void onCreate(Bundle savedInstanceState) {
44 | super.onCreate(savedInstanceState);
45 | setContentView(R.layout.index);
46 | mainTab=(RadioGroup)findViewById(R.id.main_tab);
47 | mainTab.setOnCheckedChangeListener(this);
48 | prepareIntent();
49 | setupIntent();
50 | RadioButton homebutton = (RadioButton)findViewById(R.id.radio_button1);
51 | homebutton.setChecked(true);
52 | }
53 |
54 | private void prepareIntent() {
55 | wechatIntent = new Intent(this, WeChat.class);
56 | friendIntent = new Intent(this, Friend.class);
57 | meIntent = new Intent(this, Me.class);
58 | findFriendIntent = new Intent(this, FindFriend.class);
59 | }
60 |
61 | private void setupIntent() {
62 | mTabHost = getTabHost();
63 | TabHost localTabHost = mTabHost;
64 | localTabHost.addTab(buildTabSpec(TAB_TAG_WECHAT, R.string.main_wechat, R.drawable.tabbar_button1, wechatIntent));
65 | localTabHost.addTab(buildTabSpec(TAB_TAG_FRIEND, R.string.main_friend, R.drawable.tabbar_button2, friendIntent));
66 | localTabHost.addTab(buildTabSpec(TAB_TAG_FIND, R.string.main_find_friend, R.drawable.tabbar_button3, findFriendIntent));
67 | localTabHost.addTab(buildTabSpec(TAB_TAG_ME, R.string.main_me, R.drawable.tabbar_button4, meIntent));
68 | }
69 |
70 | private TabHost.TabSpec buildTabSpec(String tag, int resLabel, int resIcon,final Intent content) {
71 | return this.mTabHost.newTabSpec(tag).setIndicator(getString(resLabel),
72 | getResources().getDrawable(resIcon)).setContent(content);
73 | }
74 |
75 |
76 | @Override
77 | public void onCheckedChanged(RadioGroup arg0, int checkedId) {
78 | switch(checkedId){
79 | case R.id.radio_button1:
80 | this.mTabHost.setCurrentTabByTag(TAB_TAG_WECHAT);
81 | break;
82 | case R.id.radio_button2:
83 | this.mTabHost.setCurrentTabByTag(TAB_TAG_FRIEND);
84 | break;
85 | case R.id.radio_button3:
86 | this.mTabHost.setCurrentTabByTag(TAB_TAG_FIND);
87 | break;
88 | case R.id.radio_button4:
89 | this.mTabHost.setCurrentTabByTag(TAB_TAG_ME);
90 | break;
91 | }
92 | }
93 |
94 | public void tabClick(View v) {
95 |
96 | }
97 | }
98 |
--------------------------------------------------------------------------------
/src/ui/Welcome.java:
--------------------------------------------------------------------------------
1 | package ui;
2 |
3 |
4 |
5 | import com.crashlytics.android.Crashlytics;
6 | import im.WeChat;
7 |
8 | import com.baidu.android.pushservice.PushConstants;
9 | import com.baidu.android.pushservice.PushManager;
10 | import com.donal.wechat.R;
11 |
12 | import tools.AppContext;
13 | import tools.AppManager;
14 | import android.content.Intent;
15 | import android.content.SharedPreferences;
16 | import android.content.pm.PackageInfo;
17 | import android.content.pm.PackageManager;
18 | import android.os.Bundle;
19 | import android.preference.PreferenceManager;
20 | import android.util.DisplayMetrics;
21 | import android.view.View;
22 | import android.view.animation.AlphaAnimation;
23 | import android.view.animation.Animation;
24 | import android.view.animation.Animation.AnimationListener;
25 | import config.AppActivity;
26 | import config.CommonValue;
27 |
28 |
29 | /**
30 | * wechat
31 | *
32 | * @author donal
33 | *
34 | */
35 | public class Welcome extends AppActivity{
36 |
37 | public static final String KEY_HELP_VERSION_SHOWN = "preferences_help_version_shown";
38 |
39 | protected void onCreate(Bundle savedInstanceState) {
40 | super.onCreate(savedInstanceState);
41 | Crashlytics.start(this);
42 | final View view = View.inflate(this, R.layout.welcome_page, null);
43 | setContentView(view);
44 | DisplayMetrics dm = new DisplayMetrics();
45 | getWindowManager().getDefaultDisplay().getMetrics(dm);
46 | double diagonalPixels = Math.sqrt(Math.pow(dm.widthPixels, 2) + Math.pow(dm.heightPixels, 2));
47 | double screenSize = diagonalPixels / (160*dm.density);
48 | appContext.saveScreenSize(screenSize);
49 | AlphaAnimation aa = new AlphaAnimation(0.3f,1.0f);
50 | aa.setDuration(2000);
51 | view.startAnimation(aa);
52 | aa.setAnimationListener(new AnimationListener()
53 | {
54 | public void onAnimationEnd(Animation arg0) {
55 | redirectTo();
56 | }
57 | public void onAnimationRepeat(Animation animation) {}
58 | public void onAnimationStart(Animation animation) {}
59 |
60 | });
61 | }
62 |
63 | private void redirectTo(){
64 | if(!appContext.isLogin()){
65 | // if(!showWhatsNewOnFirstLaunch()){
66 | Intent intent = new Intent(this,Login.class);
67 | startActivity(intent);
68 | AppManager.getAppManager().finishActivity(this);
69 | // }
70 | }
71 | else {
72 | Intent intent = new Intent(this, Tabbar.class);
73 | startActivity(intent);
74 | AppManager.getAppManager().finishActivity(this);
75 | }
76 | }
77 |
78 | private boolean showWhatsNewOnFirstLaunch() {
79 | try {
80 | PackageInfo info = getPackageManager().getPackageInfo(CommonValue.PackageName, 0);
81 | int currentVersion = info.versionCode;
82 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
83 | int lastVersion = prefs.getInt(KEY_HELP_VERSION_SHOWN, 0);
84 | if (currentVersion > lastVersion) {
85 | prefs.edit().putInt(KEY_HELP_VERSION_SHOWN, currentVersion).commit();
86 | // Intent intent = new Intent(this, whatsnew.class);
87 | // intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
88 | // startActivity(intent);
89 | // finish();
90 | return true;
91 | }
92 | } catch (PackageManager.NameNotFoundException e) {
93 | e.printStackTrace();
94 | }
95 | return false;
96 | }
97 | }
98 |
--------------------------------------------------------------------------------
/src/ui/adapter/FieldAdapter.java:
--------------------------------------------------------------------------------
1 | package ui.adapter;
2 |
3 | import java.util.List;
4 |
5 | import bean.KeyValue;
6 |
7 | import com.donal.wechat.R;
8 |
9 | import android.content.Context;
10 | import android.view.LayoutInflater;
11 | import android.view.View;
12 | import android.view.View.OnClickListener;
13 | import android.view.ViewGroup;
14 | import android.widget.BaseAdapter;
15 | import android.widget.CheckBox;
16 | import android.widget.TextView;
17 |
18 | public class FieldAdapter extends BaseAdapter {
19 |
20 | private List datas;
21 | private Context context;
22 | private LayoutInflater inflater;
23 |
24 | static class ViewHolder {
25 | TextView title;
26 | TextView field;
27 | }
28 |
29 | public FieldAdapter(List datas, Context context) {
30 | super();
31 | this.datas = datas;
32 | this.context = context;
33 | this.inflater = LayoutInflater.from(context);
34 | }
35 |
36 | @Override
37 | public int getCount() {
38 | return datas.size();
39 | }
40 |
41 | @Override
42 | public Object getItem(int arg0) {
43 | return null;
44 | }
45 |
46 | @Override
47 | public long getItemId(int arg0) {
48 | return 0;
49 | }
50 |
51 | @Override
52 | public View getView(int position, View convertView, ViewGroup arg2) {
53 | ViewHolder viewHolder;
54 | if (convertView == null) {
55 | convertView = inflater.inflate(R.layout.des_cell, null);
56 | viewHolder = new ViewHolder();
57 | viewHolder.title = (TextView) convertView.findViewById(R.id.title);
58 | viewHolder.field = (TextView) convertView.findViewById(R.id.des);
59 | convertView.setTag(viewHolder);
60 | }
61 | else {
62 | viewHolder = (ViewHolder) convertView.getTag();
63 | }
64 | KeyValue model = datas.get(position);
65 | viewHolder.title.setText(model.key);
66 | viewHolder.field.setText(model.value);
67 | return convertView;
68 | }
69 |
70 |
71 | }
72 |
--------------------------------------------------------------------------------
/src/ui/adapter/FriendCardAdapter.java:
--------------------------------------------------------------------------------
1 | package ui.adapter;
2 |
3 | import java.util.List;
4 | import java.util.concurrent.ExecutionException;
5 |
6 | import tools.StringUtils;
7 | import ui.Friend;
8 |
9 | import com.donal.wechat.R;
10 | import com.nostra13.universalimageloader.core.ImageLoader;
11 |
12 | import config.CommonValue;
13 | import config.XmppConnectionManager;
14 | import bean.UserInfo;
15 | import android.content.Context;
16 | import android.content.Intent;
17 | import android.net.Uri;
18 | import android.view.LayoutInflater;
19 | import android.view.View;
20 | import android.view.View.OnLongClickListener;
21 | import android.view.ViewGroup;
22 | import android.view.View.OnClickListener;
23 | import android.widget.BaseAdapter;
24 | import android.widget.Button;
25 | import android.widget.ImageView;
26 | import android.widget.TextView;
27 |
28 | public class FriendCardAdapter extends BaseAdapter {
29 | private Context context;
30 | private LayoutInflater inflater;
31 | private List cards;
32 |
33 | static class CellHolder {
34 | TextView alpha;
35 | ImageView avatarImageView;
36 | TextView titleView;
37 | TextView desView;
38 | }
39 |
40 | public FriendCardAdapter(Context context, List cards) {
41 | this.context = context;
42 | this.inflater = LayoutInflater.from(context);
43 | this.cards = cards;
44 | }
45 |
46 | @Override
47 | public int getCount() {
48 | return cards.size();
49 | }
50 |
51 | @Override
52 | public Object getItem(int arg0) {
53 | return cards.get(arg0);
54 | }
55 |
56 | @Override
57 | public long getItemId(int arg0) {
58 | return arg0;
59 | }
60 |
61 | @Override
62 | public View getView(int position, View convertView, ViewGroup arg2) {
63 | CellHolder cell = null;
64 | if (convertView == null) {
65 | cell = new CellHolder();
66 | convertView = inflater.inflate(R.layout.friend_card_cell, null);
67 | cell.alpha = (TextView) convertView.findViewById(R.id.alpha);
68 | cell.avatarImageView = (ImageView) convertView.findViewById(R.id.avatarImageView);
69 | cell.titleView = (TextView) convertView.findViewById(R.id.title);
70 | cell.desView = (TextView) convertView.findViewById(R.id.des);
71 | convertView.setTag(cell);
72 | }
73 | else {
74 | cell = (CellHolder) convertView.getTag();
75 | }
76 | final UserInfo model = cards.get(position);
77 | ImageLoader.getInstance().displayImage(CommonValue.BASE_URL+model.userHead, cell.avatarImageView, CommonValue.DisplayOptions.default_options);
78 | cell.titleView.setText(model.nickName);
79 | cell.desView.setText( model.description);
80 | cell.alpha.setVisibility(View.GONE);
81 | convertView.setOnClickListener( new OnClickListener() {
82 | @Override
83 | public void onClick(View arg0) {
84 | ((Friend)context).createChat(model.userId+XmppConnectionManager.BASE_XMPP_SERVER_NAME);
85 | }
86 | });
87 | convertView.setOnLongClickListener(new OnLongClickListener() {
88 |
89 | @Override
90 | public boolean onLongClick(View arg0) {
91 | ((Friend)context).show2OptionsDialog(new String[]{"删除好友"}, model);
92 | return true;
93 | }
94 | });
95 | return convertView;
96 | }
97 |
98 | }
99 |
--------------------------------------------------------------------------------
/src/ui/adapter/LeftListViewAdapter.java:
--------------------------------------------------------------------------------
1 | package ui.adapter;
2 |
3 | import java.util.List;
4 |
5 | import com.donal.wechat.R;
6 |
7 | import android.content.Context;
8 | import android.view.LayoutInflater;
9 | import android.view.View;
10 | import android.view.ViewGroup;
11 | import android.widget.BaseAdapter;
12 | import android.widget.TextView;
13 |
14 | public class LeftListViewAdapter extends BaseAdapter{
15 | private List datas;
16 | private Context context;
17 | private LayoutInflater inflater;
18 |
19 | static class ViewHolder {
20 | TextView optionsTV;
21 | }
22 |
23 | public LeftListViewAdapter(List datas, Context context) {
24 | super();
25 | this.datas = datas;
26 | this.context = context;
27 | this.inflater = LayoutInflater.from(context);
28 | }
29 |
30 | @Override
31 | public int getCount() {
32 | return datas.size();
33 | }
34 |
35 | @Override
36 | public Object getItem(int arg0) {
37 | return null;
38 | }
39 |
40 | @Override
41 | public long getItemId(int arg0) {
42 | return 0;
43 | }
44 |
45 | @Override
46 | public View getView(int position, View convertView, ViewGroup parent) {
47 | ViewHolder viewHolder;
48 | if (convertView == null) {
49 | convertView = inflater.inflate(R.layout.slide_draw_cell, null);
50 | viewHolder = new ViewHolder() ;
51 | viewHolder.optionsTV = (TextView) convertView.findViewById(R.id.optionName);
52 | convertView.setTag(viewHolder);
53 | }
54 | else {
55 | viewHolder = (ViewHolder) convertView.getTag();
56 | }
57 | viewHolder.optionsTV.setText(datas.get(position));
58 | return convertView;
59 | }
60 |
61 |
62 | }
63 |
--------------------------------------------------------------------------------
/src/ui/adapter/StrangerAdapter.java:
--------------------------------------------------------------------------------
1 | package ui.adapter;
2 |
3 | import java.util.List;
4 | import java.util.concurrent.ExecutionException;
5 |
6 | import tools.StringUtils;
7 | import ui.FindFriend;
8 | import ui.Friend;
9 |
10 | import com.donal.wechat.R;
11 | import com.nostra13.universalimageloader.core.ImageLoader;
12 |
13 | import config.CommonValue;
14 |
15 | import bean.UserInfo;
16 | import android.content.Context;
17 | import android.content.Intent;
18 | import android.net.Uri;
19 | import android.view.LayoutInflater;
20 | import android.view.View;
21 | import android.view.ViewGroup;
22 | import android.view.View.OnClickListener;
23 | import android.widget.BaseAdapter;
24 | import android.widget.Button;
25 | import android.widget.ImageView;
26 | import android.widget.TextView;
27 |
28 | public class StrangerAdapter extends BaseAdapter {
29 | private Context context;
30 | private LayoutInflater inflater;
31 | private List cards;
32 |
33 | static class CellHolder {
34 | TextView alpha;
35 | ImageView avatarImageView;
36 | TextView titleView;
37 | TextView desView;
38 | }
39 |
40 | public StrangerAdapter(Context context, List cards) {
41 | this.context = context;
42 | this.inflater = LayoutInflater.from(context);
43 | this.cards = cards;
44 | }
45 |
46 | @Override
47 | public int getCount() {
48 | return cards.size();
49 | }
50 |
51 | @Override
52 | public Object getItem(int arg0) {
53 | return cards.get(arg0);
54 | }
55 |
56 | @Override
57 | public long getItemId(int arg0) {
58 | return arg0;
59 | }
60 |
61 | @Override
62 | public View getView(int position, View convertView, ViewGroup arg2) {
63 | CellHolder cell = null;
64 | if (convertView == null) {
65 | cell = new CellHolder();
66 | convertView = inflater.inflate(R.layout.friend_card_cell, null);
67 | cell.alpha = (TextView) convertView.findViewById(R.id.alpha);
68 | cell.avatarImageView = (ImageView) convertView.findViewById(R.id.avatarImageView);
69 | cell.titleView = (TextView) convertView.findViewById(R.id.title);
70 | cell.desView = (TextView) convertView.findViewById(R.id.des);
71 | convertView.setTag(cell);
72 | }
73 | else {
74 | cell = (CellHolder) convertView.getTag();
75 | }
76 | final UserInfo model = cards.get(position);
77 | ImageLoader.getInstance().displayImage(CommonValue.BASE_URL+model.userHead, cell.avatarImageView, CommonValue.DisplayOptions.default_options);
78 | cell.titleView.setText(model.nickName);
79 | cell.desView.setText( model.description);
80 | cell.alpha.setVisibility(View.GONE);
81 | convertView.setOnClickListener( new OnClickListener() {
82 | @Override
83 | public void onClick(View arg0) {
84 |
85 | ((FindFriend)context).show2OptionsDialog(new String[]{CommonValue.Operation.addFriend}, model);
86 | }
87 | });
88 | return convertView;
89 | }
90 |
91 | }
92 |
--------------------------------------------------------------------------------
/src/ui/view/SlideDrawerView.java:
--------------------------------------------------------------------------------
1 | package ui.view;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | import ui.FindFriend;
7 | import ui.Friend;
8 | import ui.adapter.LeftListViewAdapter;
9 | import android.app.Activity;
10 | import android.content.Intent;
11 | import android.view.View;
12 | import android.widget.AdapterView;
13 | import android.widget.AdapterView.OnItemClickListener;
14 | import android.widget.ListView;
15 | import android.widget.RelativeLayout;
16 | import android.widget.TextView;
17 |
18 | import com.donal.wechat.R;
19 |
20 | public class SlideDrawerView {
21 | private final Activity activity;
22 | // SlidingMenu localSlidingMenu;
23 |
24 | private ListView leftListView;
25 | private LeftListViewAdapter leftAdapter;
26 |
27 | public SlideDrawerView(Activity activity) {
28 | this.activity = activity;
29 | }
30 |
31 | // public SlidingMenu initSlidingMenu() {
32 | // localSlidingMenu = new SlidingMenu(activity);
33 | // localSlidingMenu.setMode(SlidingMenu.LEFT);//设置左右滑菜单
34 | // localSlidingMenu.setTouchModeAbove(SlidingMenu.SLIDING_WINDOW);//设置要使菜单滑动,触碰屏幕的范围
35 | //// localSlidingMenu.setTouchModeBehind(SlidingMenu.SLIDING_CONTENT);//设置了这个会获取不到菜单里面的焦点,所以先注释掉
36 | // localSlidingMenu.setShadowWidthRes(R.dimen.shadow_width);//设置阴影图片的宽度
37 | // localSlidingMenu.setShadowDrawable(R.drawable.shadow);//设置阴影图片
38 | // localSlidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);//SlidingMenu划出时主页面显示的剩余宽度
39 | // localSlidingMenu.setFadeDegree(0.35F);//SlidingMenu滑动时的渐变程度
40 | // localSlidingMenu.attachToActivity(activity, SlidingMenu.RIGHT);//使SlidingMenu附加在Activity右边
41 | //// localSlidingMenu.setBehindWidthRes(R.dimen.left_drawer_avatar_size);//设置SlidingMenu菜单的宽度
42 | // localSlidingMenu.setMenu(R.layout.left_slide_drawer);//设置menu的布局文件
43 | //// localSlidingMenu.toggle();//动态判断自动关闭或开启SlidingMenu
44 | // localSlidingMenu.setOnOpenedListener(new SlidingMenu.OnOpenedListener() {
45 | // public void onOpened() {
46 | //
47 | // }
48 | // });
49 | // localSlidingMenu.setOnClosedListener(new OnClosedListener() {
50 | //
51 | // @Override
52 | // public void onClosed() {
53 | // // TODO Auto-generated method stub
54 | //
55 | // }
56 | // });
57 | // initView();
58 | // return localSlidingMenu;
59 | // }
60 | //
61 | // private void initView() {
62 | // leftListView = (ListView) localSlidingMenu.findViewById(R.id.leftListView);
63 | // List options = new ArrayList();
64 | // options.add("微信");
65 | // options.add("好友");
66 | // options.add("用户列表");
67 | // leftAdapter = new LeftListViewAdapter(options, activity);
68 | // leftListView.setAdapter(leftAdapter);
69 | // leftListView.setOnItemClickListener(new OnItemClickListener() {
70 | //
71 | // @Override
72 | // public void onItemClick(AdapterView> arg0, View convertView, int position,
73 | // long arg3) {
74 | //
75 | // switch (position) {
76 | // case 0:
77 | // localSlidingMenu.showContent();
78 | // break;
79 | //
80 | // case 1:
81 | // activity.startActivity(new Intent(activity, Friend.class));
82 | // break;
83 | //
84 | // case 2:
85 | // activity.startActivity(new Intent(activity, FindFriend.class));
86 | // break;
87 | // }
88 | // }
89 | // });
90 | // }
91 | }
92 |
--------------------------------------------------------------------------------
/wechat.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------