├── .gitignore ├── LICENSE ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── cn │ │ └── hadcn │ │ └── keyboard_example │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ └── emoticons │ │ │ ├── emoji │ │ │ ├── config.xml │ │ │ ├── emoji_1.png │ │ │ ├── emoji_10.png │ │ │ ├── emoji_11.png │ │ │ ├── emoji_12.png │ │ │ ├── emoji_13.png │ │ │ ├── emoji_14.png │ │ │ ├── emoji_15.png │ │ │ ├── emoji_16.png │ │ │ ├── emoji_17.png │ │ │ ├── emoji_18.png │ │ │ ├── emoji_19.png │ │ │ ├── emoji_2.png │ │ │ ├── emoji_20.png │ │ │ ├── emoji_21.png │ │ │ ├── emoji_22.png │ │ │ ├── emoji_23.png │ │ │ ├── emoji_24.png │ │ │ ├── emoji_25.png │ │ │ ├── emoji_26.png │ │ │ ├── emoji_27.png │ │ │ ├── emoji_28.png │ │ │ ├── emoji_29.png │ │ │ ├── emoji_3.png │ │ │ ├── emoji_30.png │ │ │ ├── emoji_31.png │ │ │ ├── emoji_32.png │ │ │ ├── emoji_33.png │ │ │ ├── emoji_34.png │ │ │ ├── emoji_35.png │ │ │ ├── emoji_36.png │ │ │ ├── emoji_37.png │ │ │ ├── emoji_38.png │ │ │ ├── emoji_39.png │ │ │ ├── emoji_4.png │ │ │ ├── emoji_40.png │ │ │ ├── emoji_41.png │ │ │ ├── emoji_42.png │ │ │ ├── emoji_43.png │ │ │ ├── emoji_44.png │ │ │ ├── emoji_45.png │ │ │ ├── emoji_46.png │ │ │ ├── emoji_47.png │ │ │ ├── emoji_48.png │ │ │ ├── emoji_49.png │ │ │ ├── emoji_5.png │ │ │ ├── emoji_50.png │ │ │ ├── emoji_6.png │ │ │ ├── emoji_7.png │ │ │ ├── emoji_8.png │ │ │ ├── emoji_9.png │ │ │ └── emoji_icon.png │ │ │ ├── list │ │ │ ├── tusiji │ │ │ ├── config.xml │ │ │ ├── icon_002_cover.png │ │ │ ├── icon_007_cover.png │ │ │ ├── icon_010_cover.png │ │ │ ├── icon_012_cover.png │ │ │ ├── icon_013_cover.png │ │ │ ├── icon_018_cover.png │ │ │ ├── icon_019_cover.png │ │ │ ├── icon_020_cover.png │ │ │ ├── icon_021_cover.png │ │ │ ├── icon_022_cover.png │ │ │ ├── icon_024_cover.png │ │ │ ├── icon_027_cover.png │ │ │ ├── icon_029_cover.png │ │ │ ├── icon_030_cover.png │ │ │ ├── icon_035_cover.png │ │ │ └── icon_040_cover.png │ │ │ └── xhs │ │ │ ├── config.xml │ │ │ ├── xhsemoji_1.png │ │ │ ├── xhsemoji_10.png │ │ │ ├── xhsemoji_11.png │ │ │ ├── xhsemoji_12.png │ │ │ ├── xhsemoji_13.png │ │ │ ├── xhsemoji_14.png │ │ │ ├── xhsemoji_15.png │ │ │ ├── xhsemoji_16.png │ │ │ ├── xhsemoji_17.png │ │ │ ├── xhsemoji_18.png │ │ │ ├── xhsemoji_19.png │ │ │ ├── xhsemoji_2.png │ │ │ ├── xhsemoji_20.png │ │ │ ├── xhsemoji_21.png │ │ │ ├── xhsemoji_3.png │ │ │ ├── xhsemoji_4.png │ │ │ ├── xhsemoji_5.png │ │ │ ├── xhsemoji_6.png │ │ │ ├── xhsemoji_7.png │ │ │ ├── xhsemoji_8.png │ │ │ └── xhsemoji_9.png │ ├── java │ │ └── cn │ │ │ └── hadcn │ │ │ └── keyboard_example │ │ │ ├── AudioLib.java │ │ │ ├── ChatBean.java │ │ │ ├── LogUtil.java │ │ │ ├── MainActivity.java │ │ │ ├── MainApplication.java │ │ │ └── SimpleChatAdapter.java │ └── res │ │ ├── drawable-hdpi │ │ ├── addpic.png │ │ ├── emoji.png │ │ ├── keyboard.png │ │ ├── pic_select_n.png │ │ ├── qbi.png │ │ └── voice.png │ │ ├── drawable │ │ ├── icon_camera.png │ │ ├── icon_photo.png │ │ ├── keyboard_emoticon_selector.xml │ │ └── send_button_bg.xml │ │ ├── layout │ │ ├── activity_main.xml │ │ └── item_list.xml │ │ ├── menu │ │ └── menu_main.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-w820dp │ │ ├── arrays.xml │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── cn │ └── hadcn │ └── keyboard_example │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── keyboard ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── cn │ │ └── hadcn │ │ └── keyboard │ │ └── ApplicationTest.java │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── cn │ │ └── hadcn │ │ └── keyboard │ │ ├── ChatKeyboardLayout.java │ │ ├── ChatTextView.java │ │ ├── EmoticonEntity.java │ │ ├── RecordingLayout.java │ │ ├── emoticon │ │ ├── EmoticonBean.java │ │ ├── EmoticonSetBean.java │ │ ├── db │ │ │ ├── EmoticonDBHelper.java │ │ │ └── TableColumns.java │ │ ├── util │ │ │ ├── DefEmoticons.java │ │ │ ├── EmoticonHandler.java │ │ │ └── EmoticonsKeyboardBuilder.java │ │ └── view │ │ │ ├── EmoticonLayout.java │ │ │ ├── EmoticonsAdapter.java │ │ │ ├── EmoticonsPageView.java │ │ │ └── EmoticonsTabBarView.java │ │ ├── media │ │ ├── MediaBean.java │ │ ├── MediaGridAdapter.java │ │ ├── MediaLayout.java │ │ └── MediaPagerAdapter.java │ │ ├── utils │ │ ├── EmoticonBase.java │ │ ├── EmoticonLoader.java │ │ ├── HadLog.java │ │ └── Utils.java │ │ └── view │ │ ├── HadEditText.java │ │ ├── IndicatorView.java │ │ ├── SoftHandleLayout.java │ │ ├── SoftListenLayout.java │ │ └── VerticalImageSpan.java │ └── res │ ├── drawable-hdpi │ ├── emoji_0x1f319.png │ ├── emoji_0x1f31f.png │ ├── emoji_0x1f339.png │ ├── emoji_0x1f33b.png │ ├── emoji_0x1f341.png │ ├── emoji_0x1f343.png │ ├── emoji_0x1f37a.png │ ├── emoji_0x1f380.png │ ├── emoji_0x1f381.png │ ├── emoji_0x1f382.png │ ├── emoji_0x1f385.png │ ├── emoji_0x1f3e0.png │ ├── emoji_0x1f431.png │ ├── emoji_0x1f436.png │ ├── emoji_0x1f444.png │ ├── emoji_0x1f446.png │ ├── emoji_0x1f447.png │ ├── emoji_0x1f448.png │ ├── emoji_0x1f449.png │ ├── emoji_0x1f44a.png │ ├── emoji_0x1f44c.png │ ├── emoji_0x1f44d.png │ ├── emoji_0x1f44e.png │ ├── emoji_0x1f44f.png │ ├── emoji_0x1f457.png │ ├── emoji_0x1f466.png │ ├── emoji_0x1f467.png │ ├── emoji_0x1f468.png │ ├── emoji_0x1f469.png │ ├── emoji_0x1f47b.png │ ├── emoji_0x1f47f.png │ ├── emoji_0x1f48e.png │ ├── emoji_0x1f494.png │ ├── emoji_0x1f4a3.png │ ├── emoji_0x1f4aa.png │ ├── emoji_0x1f4f1.png │ ├── emoji_0x1f50d.png │ ├── emoji_0x1f559.png │ ├── emoji_0x1f601.png │ ├── emoji_0x1f602.png │ ├── emoji_0x1f603.png │ ├── emoji_0x1f604.png │ ├── emoji_0x1f609.png │ ├── emoji_0x1f60a.png │ ├── emoji_0x1f60c.png │ ├── emoji_0x1f60d.png │ ├── emoji_0x1f60f.png │ ├── emoji_0x1f612.png │ ├── emoji_0x1f613.png │ ├── emoji_0x1f614.png │ ├── emoji_0x1f616.png │ ├── emoji_0x1f618.png │ ├── emoji_0x1f61a.png │ ├── emoji_0x1f61c.png │ ├── emoji_0x1f61d.png │ ├── emoji_0x1f61e.png │ ├── emoji_0x1f620.png │ ├── emoji_0x1f621.png │ ├── emoji_0x1f622.png │ ├── emoji_0x1f623.png │ ├── emoji_0x1f625.png │ ├── emoji_0x1f628.png │ ├── emoji_0x1f62a.png │ ├── emoji_0x1f62d.png │ ├── emoji_0x1f630.png │ ├── emoji_0x1f631.png │ ├── emoji_0x1f632.png │ ├── emoji_0x1f633.png │ ├── emoji_0x1f637.png │ ├── emoji_0x1f64f.png │ ├── emoji_0x1f697.png │ ├── emoji_0x2600.png │ ├── emoji_0x2601.png │ ├── emoji_0x2614.png │ ├── emoji_0x2615.png │ ├── emoji_0x26a1.png │ ├── emoji_0x26bd.png │ ├── emoji_0x270a.png │ ├── emoji_0x270c.png │ ├── emoji_0x2764.png │ ├── icon_del.png │ ├── icon_emoji.png │ ├── icon_face_normal.png │ ├── icon_face_pop.png │ ├── input_bar_flat.png │ ├── input_bg.9.png │ ├── input_bg_gray.9.png │ ├── input_bg_green.9.png │ ├── recording_cancel.png │ ├── recording_level_1.png │ ├── recording_level_2.png │ ├── recording_level_3.png │ ├── recording_level_4.png │ ├── recording_level_5.png │ ├── recording_level_6.png │ ├── recording_level_7.png │ └── recording_mic.png │ ├── drawable-xhdpi │ ├── default_keyboard_icon.png │ ├── default_record_icon.png │ └── default_right_icon.png │ ├── drawable │ ├── btn_input_bg.xml │ ├── btn_voice_press.xml │ ├── circle_button_bg.xml │ ├── emoticon_bg.xml │ ├── indicator_point_normal.xml │ ├── indicator_point_select.xml │ ├── keyboard_face_icon.xml │ ├── media_image_bg.xml │ ├── recording_bg.xml │ ├── recording_n.xml │ ├── recording_p.xml │ ├── recording_text_bg.xml │ ├── send_button_bg.xml │ └── transparent_bg.xml │ ├── layout │ ├── keyboard_bar_layout.xml │ ├── keyboard_emoticon_item.xml │ ├── keyboard_emoticon_layout.xml │ ├── keyboard_emoticon_tabbar.xml │ ├── keyboard_emoticon_tabbar_item.xml │ ├── keyboard_media_item.xml │ ├── keyboard_media_layout.xml │ ├── keyboard_media_page.xml │ └── keyboard_recording_layout.xml │ ├── values-zh-rTW │ └── strings.xml │ └── values │ ├── attrs.xml │ ├── colors.xml │ ├── dimens.xml │ ├── ids.xml │ └── strings.xml ├── raw ├── chat_style.png ├── text_emoticon.png └── text_only.png └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | /local.properties 3 | /.idea 4 | .DS_Store 5 | /build 6 | /captures 7 | .idea 8 | *.iml 9 | /app/*.iml 10 | /keyboard/*.iml 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![](https://user-images.githubusercontent.com/4279515/46778964-8820f200-cd48-11e8-9b6b-7a3cc4e62d48.png) 2 | 3 | # ChatKeyboard [![](https://img.shields.io/badge/language-Java-green.svg)](https://github.com/CPPAlien/ChatKeyboard) 4 | 5 | ChatKeyboard is a powerful and easy using keyboard lib for Android, includes emoticons selection, audio recording, multi media functions, etc. 6 | 7 | - Let the lib handle the difficult keyboard actions, you just need listen the the results you want. 8 | - Apply different styles of the keyboard. 9 | - Custom your own icons in keyboard and the click action. 10 | - More to find out by yourself. 11 | 12 | 13 | ### Demo 14 |
15 | 16 |
17 | 18 | [Apk Download](http://cdn.flowergo.xyz/keyboard_new.apk) 19 | 20 | ### Import 21 | 22 | Gradle: 23 | 24 | dependencies { 25 | compile 'me.pengtao:ChatKeyboard:2.0.0' 26 | } 27 | 28 | If the jcenter is not ok, you can use jitpack way as below. 29 | 30 | ``` 31 | repositories{ 32 | maven { url "https://jitpack.io" } 33 | } 34 | dependencies { 35 | compile 'com.github.CPPAlien:ChatKeyboard:1.0.1' 36 | } 37 | ``` 38 | Latest Version:[![](https://jitpack.io/v/CPPAlien/ChatKeyboard.svg)](https://jitpack.io/#CPPAlien/ChatKeyboard) 39 | 40 | ### How to use 41 | 42 | #### 1, ChatKeyboardLayout 43 | 44 | make your layout get keyboard ability. 45 | 46 | ``` 47 | 56 | ...your layout 57 | 58 | ``` 59 | **Notice: You can only put one child view in ChatKeyboardLayout.** 60 | 61 | 62 | 63 | #### 2, Style and Custom 64 | 65 | There are three styles you can set. 66 | 67 | 68 | | chat_style | text_emoticon | text_only | 69 | | :---------------------: | :------------------------: | :--------------------: | 70 | | ![](raw/chat_style.png) | ![](raw/text_emoticon.png) | ![](raw/text_only.png) | 71 | 72 | 73 | You can use `app:keyboardStyle` in xml to set or `setKeyboardStyle(@KeyboardStyle int style)` method to set, once you set, the keyboard style will change. 74 | 75 | There are also some attributes you can custom the icons. 76 | 77 | `app:sendButtonBackground` custom send button background 78 | 79 | `app:faceIcon` custom keyboard bar face icon, you can use `state_selected` to distinguish emoticon layout pop or not state. 80 | 81 | `app:showRightIcon` when you set the style as `chat_style`, the right place will just show send button in default, you should set this attribute as `true` to show the right multi media icon. 82 | 83 | … more you need find out yourself in demo. 84 | 85 | 86 | 87 | #### 3, Emoticons and Stickers 88 | 89 | ```java 90 | if (!ChatKeyboardLayout.isEmoticonInitSuccess(this)) { 91 | List entities = new ArrayList<>(); 92 | entities.add(new EmoticonEntity("emoticons/xhs", EmoticonBase.Scheme.ASSETS)); 93 | entities.add(new EmoticonEntity("emoticons/tusiji", EmoticonBase.Scheme.ASSETS)); 94 | ChatKeyboardLayout.initEmoticonsDB(this, true, entities); 95 | } 96 | ``` 97 | **Notice: Add the code above before the ChatKeyboardLayout used, better in onCreate of Application** 98 | 99 | 100 | 101 | #### 4, Keyboard Listener 102 | 103 | ```java 104 | public interface OnChatKeyBoardListener { 105 | /** 106 | * When send button clicked 107 | * 108 | * @param text content in input area 109 | */ 110 | void onSendButtonClicked(String text); 111 | 112 | /** 113 | * When user input or delete text in input area 114 | * 115 | * @param text changing text 116 | */ 117 | void onInputTextChanged(String text); 118 | 119 | /** 120 | * Recording button action {@link RecordingAction} 121 | * 122 | * @param action action 123 | */ 124 | void onRecordingAction(RecordingAction action); 125 | 126 | /** 127 | * When sticker defined by developer clicked 128 | * 129 | * @param tag sticker tag 130 | * @param uri sticker location uri 131 | */ 132 | void onUserDefEmoticonClicked(String tag, String uri); 133 | 134 | /** 135 | * when keyboard popped or back, get the pixels of the height include keyboard bar 136 | * 137 | * @param height pixel height 138 | */ 139 | void onKeyboardHeightChanged(int height); 140 | 141 | /** 142 | * when left icon clicked, this will be called 143 | * 144 | * @param view view of clicked 145 | * @return true, won't execute default actions; false, execute default actions 146 | */ 147 | boolean onLeftIconClicked(View view); 148 | 149 | /** 150 | * when right icon clicked, this will be called 151 | * 152 | * @param view view of clicked 153 | * @return true, won't execute default actions; false, execute default actions 154 | */ 155 | boolean onRightIconClicked(View view); 156 | } 157 | ``` 158 | You can use `SimpleOnChatKeyboardListener` instead of the interface above, so you can just implement these call back method you use. 159 | 160 | 161 | 162 | ### These you should know 163 | 164 | 1. Make sure the bottom of `ChatKeyboardLayout` align the screen bottom. 165 | 2. Make sure the height of `ChatKeyboardLayout` be at least 2/3 of you screen height. 166 | 167 | ### Other usage 168 | 169 | Please refer to the demo code 170 | 171 | 172 | 173 | ## Thanks 174 | 175 | Thanks for [xhsEmoticonsKeyboard](https://github.com/w446108264/XhsEmoticonsKeyboard) powered by w446108264 which is inspired me. 176 | 177 | 178 | 179 | ## License 180 | 181 | ``` 182 | Copyright (c) 2017 CPPAlien 183 | 184 | Licensed under the Apache License, Version 2.0 (the "License"); 185 | you may not use this file except in compliance with the License. 186 | You may obtain a copy of the License at 187 | 188 | http://www.apache.org/licenses/LICENSE-2.0 189 | 190 | Unless required by applicable law or agreed to in writing, software 191 | distributed under the License is distributed on an "AS IS" BASIS, 192 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 193 | See the License for the specific language governing permissions and 194 | limitations under the License. 195 | ``` 196 | 197 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 27 5 | buildToolsVersion "26.0.2" 6 | 7 | defaultConfig { 8 | applicationId "cn.hadcn.keyboard_example" 9 | minSdkVersion 16 10 | targetSdkVersion 27 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | lintOptions { 21 | abortOnError false 22 | } 23 | } 24 | 25 | dependencies { 26 | compile fileTree(dir: 'libs', include: ['*.jar']) 27 | testCompile 'junit:junit:4.12' 28 | compile 'com.android.support:appcompat-v7:27.1.1' 29 | compile project(':keyboard') 30 | } 31 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in D:\Coding\android-sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/cn/hadcn/keyboard_example/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package cn.hadcn.keyboard_example; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 12 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_1.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_10.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_11.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_12.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_13.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_14.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_15.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_16.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_17.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_18.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_19.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_2.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_20.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_21.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_22.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_23.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_24.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_25.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_26.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_27.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_28.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_29.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_3.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_30.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_31.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_32.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_33.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_34.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_35.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_36.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_37.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_38.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_39.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_4.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_40.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_41.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_42.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_43.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_44.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_45.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_46.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_47.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_48.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_49.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_5.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_50.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_6.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_7.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_8.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_9.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/emoji/emoji_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/emoji/emoji_icon.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/list: -------------------------------------------------------------------------------- 1 | ["qbi"] -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/tusiji/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | tusiji 4 | 2 5 | 4 6 | 1 7 | icon_030_cover.png 8 | 0 9 | 30 10 | 0 11 | 0 12 | 13 | 14 | 2 15 | icon_002_cover.png 16 | 17 | tusiji_cry 18 | 19 | 20 | 2 21 | icon_007_cover.png 22 | 嘚瑟 23 | tusiji_dese 24 | 25 | 26 | 2 27 | icon_010_cover.png 28 | 手舞足蹈 29 | tusiji_dance 30 | 31 | 32 | 2 33 | icon_012_cover.png 34 | 叮铃 35 | tusiji_dingling 36 | 37 | 38 | 2 39 | icon_013_cover.png 40 | 拜拜 41 | tusiji_bye 42 | 43 | 44 | 2 45 | icon_018_cover.png 46 | 闪亮 47 | tusiji_shining 48 | 49 | 50 | 2 51 | icon_019_cover.png 52 | 抱奶瓶 53 | tusiji_milk 54 | 55 | 56 | 2 57 | icon_020_cover.png 58 | 晚安 59 | tusiji_goodnight 60 | 61 | 62 | 2 63 | icon_021_cover.png 64 | 飞吻 65 | tusiji_kiss 66 | 67 | 68 | 2 69 | icon_022_cover.png 70 | 71 | tusiji_qie 72 | 73 | 74 | 2 75 | icon_024_cover.png 76 | 使劲摇 77 | tusiji_shake 78 | 79 | 80 | 2 81 | icon_027_cover.png 82 | 生日快乐 83 | tusiji_happybirthday 84 | 85 | 86 | 2 87 | icon_029_cover.png 88 | 我最帅 89 | tusiji_handsome 90 | 91 | 92 | 2 93 | icon_030_cover.png 94 | 抓墙 95 | tusiji_zhuaqiang 96 | 97 | 98 | 2 99 | icon_035_cover.png 100 | 扭屁股 101 | tusiji_niupigu 102 | 103 | 104 | 2 105 | icon_040_cover.png 106 | 印度舞 107 | tusiji_india 108 | 109 | 110 | -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/tusiji/icon_002_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/tusiji/icon_002_cover.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/tusiji/icon_007_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/tusiji/icon_007_cover.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/tusiji/icon_010_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/tusiji/icon_010_cover.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/tusiji/icon_012_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/tusiji/icon_012_cover.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/tusiji/icon_013_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/tusiji/icon_013_cover.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/tusiji/icon_018_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/tusiji/icon_018_cover.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/tusiji/icon_019_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/tusiji/icon_019_cover.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/tusiji/icon_020_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/tusiji/icon_020_cover.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/tusiji/icon_021_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/tusiji/icon_021_cover.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/tusiji/icon_022_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/tusiji/icon_022_cover.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/tusiji/icon_024_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/tusiji/icon_024_cover.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/tusiji/icon_027_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/tusiji/icon_027_cover.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/tusiji/icon_029_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/tusiji/icon_029_cover.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/tusiji/icon_030_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/tusiji/icon_030_cover.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/tusiji/icon_035_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/tusiji/icon_035_cover.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/tusiji/icon_040_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/tusiji/icon_040_cover.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/config.xml: -------------------------------------------------------------------------------- 1 | 2 | xhs 3 | 3 4 | 7 5 | xhsemoji_19.png 6 | 0 7 | 1 8 | 20 9 | 0 10 | 0 11 | 12 | 13 | 0 14 | xhsemoji_1.png 15 | 生气 16 | [生气] 17 | 18 | 19 | 0 20 | xhsemoji_2.png 21 | 生气 22 | [生气] 23 | 24 | 25 | 0 26 | xhsemoji_3.png 27 | 28 | [晕] 29 | 30 | 31 | 0 32 | xhsemoji_4.png 33 | 34 | [酷] 35 | 36 | 37 | 0 38 | xhsemoji_5.png 39 | 40 | [哭] 41 | 42 | 43 | 0 44 | xhsemoji_6.png 45 | 可爱 46 | [可爱] 47 | 48 | 49 | 0 50 | xhsemoji_7.png 51 | 抠鼻 52 | [抠鼻] 53 | 54 | 55 | 0 56 | xhsemoji_8.png 57 | 昏掉 58 | [昏掉] 59 | 60 | 61 | 0 62 | xhsemoji_9.png 63 | 寒冷 64 | [寒冷] 65 | 66 | 67 | 0 68 | xhsemoji_10.png 69 | 哈哈 70 | [哈哈] 71 | 72 | 73 | 0 74 | xhsemoji_11.png 75 | 无语 76 | [无语] 77 | 78 | 79 | 0 80 | xhsemoji_12.png 81 | 亲亲 82 | [亲亲] 83 | 84 | 85 | 0 86 | xhsemoji_13.png 87 | 闪亮 88 | [闪亮] 89 | 90 | 91 | 0 92 | xhsemoji_14.png 93 | 爆炸 94 | [爆炸] 95 | 96 | 97 | 0 98 | xhsemoji_15.png 99 | 问号 100 | [问号] 101 | 102 | 103 | 0 104 | xhsemoji_16.png 105 | 绅士 106 | [绅士] 107 | 108 | 109 | 0 110 | xhsemoji_17.png 111 | 啊啊 112 | [啊啊] 113 | 114 | 115 | 0 116 | xhsemoji_18.png 117 | 闭嘴 118 | [闭嘴] 119 | 120 | 121 | 0 122 | xhsemoji_19.png 123 | 爱心 124 | [爱心] 125 | 126 | 127 | 0 128 | xhsemoji_20.png 129 | 窃喜 130 | [窃喜] 131 | 132 | 133 | 0 134 | xhsemoji_21.png 135 | 大笑 136 | [大笑] 137 | 138 | 139 | -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/xhsemoji_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/xhs/xhsemoji_1.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/xhsemoji_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/xhs/xhsemoji_10.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/xhsemoji_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/xhs/xhsemoji_11.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/xhsemoji_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/xhs/xhsemoji_12.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/xhsemoji_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/xhs/xhsemoji_13.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/xhsemoji_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/xhs/xhsemoji_14.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/xhsemoji_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/xhs/xhsemoji_15.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/xhsemoji_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/xhs/xhsemoji_16.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/xhsemoji_17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/xhs/xhsemoji_17.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/xhsemoji_18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/xhs/xhsemoji_18.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/xhsemoji_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/xhs/xhsemoji_19.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/xhsemoji_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/xhs/xhsemoji_2.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/xhsemoji_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/xhs/xhsemoji_20.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/xhsemoji_21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/xhs/xhsemoji_21.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/xhsemoji_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/xhs/xhsemoji_3.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/xhsemoji_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/xhs/xhsemoji_4.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/xhsemoji_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/xhs/xhsemoji_5.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/xhsemoji_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/xhs/xhsemoji_6.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/xhsemoji_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/xhs/xhsemoji_7.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/xhsemoji_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/xhs/xhsemoji_8.png -------------------------------------------------------------------------------- /app/src/main/assets/emoticons/xhs/xhsemoji_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/assets/emoticons/xhs/xhsemoji_9.png -------------------------------------------------------------------------------- /app/src/main/java/cn/hadcn/keyboard_example/AudioLib.java: -------------------------------------------------------------------------------- 1 | package cn.hadcn.keyboard_example; 2 | 3 | import android.content.Context; 4 | import android.media.MediaPlayer; 5 | import android.media.MediaRecorder; 6 | import android.os.Handler; 7 | 8 | import java.io.File; 9 | import java.io.IOException; 10 | import java.util.Timer; 11 | import java.util.TimerTask; 12 | 13 | /** 14 | * AudioLib 15 | * Created by 90Chris on 2015/12/2. 16 | */ 17 | public class AudioLib { 18 | private static final String TAG = "AudioLib"; 19 | private static AudioLib sAudioLib = null; 20 | private MediaRecorder recorder; 21 | private String mPath; 22 | private int mPeriod = 0; 23 | private static final int MIN_LENGTH = 2; 24 | 25 | public static AudioLib getInstance() { 26 | if (sAudioLib == null) { 27 | sAudioLib = new AudioLib(); 28 | } 29 | return sAudioLib; 30 | } 31 | 32 | public AudioLib() { 33 | new Timer().schedule(new AudioTimerTask(), 0, 1000); 34 | } 35 | 36 | private class AudioTimerTask extends TimerTask { 37 | @Override 38 | public void run() { 39 | ++mPeriod; 40 | } 41 | } 42 | 43 | public synchronized void start(String path, OnAudioListener listener) { 44 | LogUtil.d(TAG, "start recording"); 45 | mPeriod = 0; 46 | 47 | mListener = listener; 48 | recorder = new MediaRecorder(); 49 | recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 50 | recorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB); 51 | recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 52 | recorder.setOutputFile(path); 53 | 54 | try { 55 | recorder.prepare(); 56 | recorder.start(); 57 | updateMicStatus(); 58 | LogUtil.d(TAG, "record start success"); 59 | } catch (IllegalStateException e) { 60 | LogUtil.e(TAG, "IllegalStateException", e); 61 | } catch (IOException e) { 62 | LogUtil.e(TAG, "IOException", e); 63 | } 64 | 65 | mPath = path; 66 | } 67 | 68 | /** 69 | * cancel, not save the file 70 | * 71 | * @return true, cancel success, false, cancel failed 72 | */ 73 | public synchronized boolean cancel() { 74 | LogUtil.d(TAG, "cancel recording"); 75 | if (recorder == null) { 76 | LogUtil.e(TAG, "recorder is null "); 77 | return false; 78 | } 79 | try { 80 | stopRecord(); 81 | } catch (IllegalStateException e) { 82 | LogUtil.e(TAG, "illegal state happened when cancel", e); 83 | } 84 | 85 | File file = new File(mPath); 86 | return file.exists() && file.delete(); 87 | } 88 | 89 | /** 90 | * complete the recording 91 | * 92 | * @return recording last time 93 | */ 94 | public synchronized int complete() { 95 | LogUtil.i(TAG, "complete recording"); 96 | 97 | if (recorder == null) { 98 | LogUtil.e(TAG, "recorder is null "); 99 | return -1; 100 | } 101 | 102 | try { 103 | stopRecord(); 104 | } catch (IllegalStateException e) { 105 | LogUtil.e(TAG, "illegal state happened when complete", e); 106 | return -1; 107 | } 108 | 109 | if (mPeriod < MIN_LENGTH) { 110 | LogUtil.i(TAG, "record time is too short"); 111 | return -1; 112 | } 113 | 114 | return mPeriod; 115 | } 116 | 117 | public String generatePath(Context context) { 118 | boolean isSuccess = true; 119 | final String cachePath = context.getCacheDir().getAbsolutePath() + File.separator + 120 | "audioCache"; 121 | File file = new File(cachePath); 122 | if (!file.exists()) { 123 | isSuccess = file.mkdirs(); 124 | } 125 | if (isSuccess) { 126 | return cachePath + File.separator + System.currentTimeMillis() + ".amr"; 127 | } else { 128 | return null; 129 | } 130 | } 131 | 132 | private synchronized void stopRecord() { 133 | //mHandler.removeCallbacks(mUpdateMicStatusTimer); 134 | 135 | recorder.stop(); 136 | recorder.release(); 137 | recorder = null; 138 | } 139 | 140 | private final Handler mHandler = new Handler(); 141 | private Runnable mUpdateMicStatusTimer = new Runnable() { 142 | public void run() { 143 | updateMicStatus(); 144 | } 145 | }; 146 | 147 | private void updateMicStatus() { 148 | if (recorder != null) { 149 | double ratio = (double) recorder.getMaxAmplitude(); 150 | double db = 0; 151 | if (ratio > 1) { 152 | db = 20 * Math.log10(ratio); 153 | } 154 | if (mListener != null) { 155 | mListener.onDbChange(db); 156 | } 157 | mHandler.postDelayed(mUpdateMicStatusTimer, 500); 158 | } 159 | } 160 | 161 | private OnAudioListener mListener = null; 162 | 163 | public interface OnAudioListener { 164 | void onDbChange(double db); 165 | } 166 | 167 | private MediaPlayer mMediaPlayer = null; 168 | private String mCurrentPlayingAudioPath = null; 169 | private OnMediaPlayComplete mPlayListener = null; 170 | 171 | /** 172 | * play the audio 173 | * 174 | * @param path path of the audio file 175 | */ 176 | public synchronized void playAudio(String path, OnMediaPlayComplete listener) { 177 | mPlayListener = listener; 178 | if (mMediaPlayer != null) { 179 | stopPlay(); 180 | } 181 | mMediaPlayer = new MediaPlayer(); 182 | mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 183 | @Override 184 | public void onCompletion(MediaPlayer mp) { 185 | stopPlay(); 186 | if (mPlayListener != null) { 187 | mPlayListener.onPlayComplete(true); 188 | } 189 | } 190 | }); 191 | try { 192 | mMediaPlayer.setDataSource(path); 193 | mMediaPlayer.prepare(); 194 | } catch (IOException e) { 195 | mPlayListener.onPlayComplete(false); 196 | } 197 | 198 | mMediaPlayer.start(); 199 | 200 | mCurrentPlayingAudioPath = path; 201 | } 202 | 203 | public synchronized void stopPlay() { 204 | mMediaPlayer.stop(); 205 | mMediaPlayer.release(); 206 | mMediaPlayer = null; 207 | mCurrentPlayingAudioPath = null; 208 | } 209 | 210 | public boolean isPlaying(String path) { 211 | return (mMediaPlayer != null) && mMediaPlayer.isPlaying() && (path.equals 212 | (mCurrentPlayingAudioPath)); 213 | } 214 | 215 | public interface OnMediaPlayComplete { 216 | void onPlayComplete(boolean isSuccess); 217 | } 218 | } 219 | -------------------------------------------------------------------------------- /app/src/main/java/cn/hadcn/keyboard_example/ChatBean.java: -------------------------------------------------------------------------------- 1 | package cn.hadcn.keyboard_example; 2 | 3 | /** 4 | * ChatBean 5 | * Created by 90Chris on 2015/11/24. 6 | */ 7 | public class ChatBean { 8 | private String tag; 9 | private String textMsg; 10 | 11 | public ChatBean(String tag, String textMsg) { 12 | this.tag = tag; 13 | this.textMsg = textMsg; 14 | } 15 | 16 | public String getTag() { 17 | return tag; 18 | } 19 | 20 | public String getTextMsg() { 21 | return textMsg; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/cn/hadcn/keyboard_example/LogUtil.java: -------------------------------------------------------------------------------- 1 | package cn.hadcn.keyboard_example; 2 | 3 | import android.util.Log; 4 | 5 | 6 | /** 7 | * 自定义Log 8 | * @author 90Chris 9 | */ 10 | public class LogUtil { 11 | public static final String LOG_TAG = "Keyboard:"; 12 | private static boolean enableLogDisplay = true;//true: put on log display in logcat, put off it when release 13 | 14 | private static final int RETURN_NOLOG = 99; 15 | 16 | public static int d(String tag, String msg) { 17 | return enableLogDisplay ? Log.d(LOG_TAG + tag, msg) : RETURN_NOLOG; 18 | } 19 | 20 | public static int e(String tag, String msg) { 21 | return enableLogDisplay ? Log.e(LOG_TAG + tag, msg) : RETURN_NOLOG; 22 | } 23 | 24 | public static int e(String tag, String msg, Throwable e) { 25 | return enableLogDisplay ? Log.e(LOG_TAG + tag, msg, e) : RETURN_NOLOG; 26 | } 27 | 28 | public static int i(String tag, String msg) { 29 | return enableLogDisplay ? Log.i(LOG_TAG + tag, msg) : RETURN_NOLOG; 30 | } 31 | 32 | public static int w(String tag, String msg) { 33 | return enableLogDisplay ? Log.w(LOG_TAG + tag, msg) : RETURN_NOLOG; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/cn/hadcn/keyboard_example/MainApplication.java: -------------------------------------------------------------------------------- 1 | package cn.hadcn.keyboard_example; 2 | 3 | import android.app.Application; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | import cn.hadcn.keyboard.ChatKeyboardLayout; 9 | import cn.hadcn.keyboard.EmoticonEntity; 10 | import cn.hadcn.keyboard.utils.EmoticonBase; 11 | 12 | /** 13 | * MainApplication 14 | * Created by 90Chris on 2015/10/8. 15 | */ 16 | public class MainApplication extends Application { 17 | @Override 18 | public void onCreate() { 19 | super.onCreate(); 20 | 21 | if (!ChatKeyboardLayout.isEmoticonsDBInitSuccess(this)) { 22 | List entities = new ArrayList<>(); 23 | entities.add(new EmoticonEntity("emoticons/xhs", EmoticonBase.Scheme.ASSETS)); 24 | entities.add(new EmoticonEntity("emoticons/tusiji", EmoticonBase.Scheme.ASSETS)); 25 | entities.add(new EmoticonEntity("emoticons/emoji", EmoticonBase.Scheme.ASSETS)); 26 | ChatKeyboardLayout.initEmoticonsDB(this, true, entities); 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /app/src/main/java/cn/hadcn/keyboard_example/SimpleChatAdapter.java: -------------------------------------------------------------------------------- 1 | package cn.hadcn.keyboard_example; 2 | 3 | import android.content.Context; 4 | import android.view.LayoutInflater; 5 | import android.view.View; 6 | import android.view.ViewGroup; 7 | import android.widget.BaseAdapter; 8 | import android.widget.ImageView; 9 | import android.widget.TextView; 10 | 11 | import java.util.ArrayList; 12 | import java.util.List; 13 | 14 | import cn.hadcn.keyboard.utils.EmoticonLoader; 15 | 16 | /** 17 | * SimpleChatAdapter 18 | * Created by 90Chris on 2015/11/24. 19 | */ 20 | public class SimpleChatAdapter extends BaseAdapter { 21 | 22 | Context mContext; 23 | private List mChatBeans = new ArrayList<>(); 24 | 25 | public SimpleChatAdapter(Context mContext) { 26 | this.mContext = mContext; 27 | } 28 | 29 | public void addItem(ChatBean bean) { 30 | mChatBeans.add(bean); 31 | notifyDataSetChanged(); 32 | } 33 | 34 | @Override 35 | public int getCount() { 36 | return mChatBeans.size(); 37 | } 38 | 39 | @Override 40 | public ChatBean getItem(int i) { 41 | return mChatBeans.get(i); 42 | } 43 | 44 | @Override 45 | public long getItemId(int i) { 46 | return i; 47 | } 48 | 49 | private static class ViewHolder { 50 | ImageView ivEmoticon; 51 | TextView tvTextMsg; 52 | 53 | public ViewHolder(View view) { 54 | ivEmoticon = (ImageView)view.findViewById(R.id.item_image); 55 | tvTextMsg = (TextView)view.findViewById(R.id.item_text); 56 | } 57 | } 58 | 59 | @Override 60 | public View getView(int i, View view, ViewGroup viewGroup) { 61 | ViewHolder viewHolder; 62 | if ( view == null ) { 63 | view = LayoutInflater.from(mContext).inflate(R.layout.item_list, viewGroup, false); 64 | viewHolder = new ViewHolder(view); 65 | view.setTag(viewHolder); 66 | } else { 67 | viewHolder = (ViewHolder)view.getTag(); 68 | } 69 | if ( getItem(i).getTag() != null ) { 70 | viewHolder.ivEmoticon.setVisibility(View.VISIBLE); 71 | viewHolder.ivEmoticon.setImageDrawable(EmoticonLoader.getInstance(mContext).getDrawableByTag(getItem(i).getTag())); 72 | } else { 73 | viewHolder.ivEmoticon.setVisibility(View.GONE); 74 | } 75 | 76 | if ( getItem(i).getTextMsg() != null ) { 77 | viewHolder.tvTextMsg.setVisibility(View.VISIBLE); 78 | viewHolder.tvTextMsg.setText(getItem(i).getTextMsg()); 79 | } else { 80 | viewHolder.tvTextMsg.setVisibility(View.GONE); 81 | } 82 | 83 | return view; 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/addpic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/res/drawable-hdpi/addpic.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/emoji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/res/drawable-hdpi/emoji.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/keyboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/res/drawable-hdpi/keyboard.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/pic_select_n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/res/drawable-hdpi/pic_select_n.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/qbi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/res/drawable-hdpi/qbi.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/voice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/res/drawable-hdpi/voice.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/icon_camera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/res/drawable/icon_camera.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/icon_photo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CPPAlien/ChatKeyboard/7b256389a990e72cb23fac2d28247838392f8a25/app/src/main/res/drawable/icon_photo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/keyboard_emoticon_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/send_button_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 5 | 10 | 23 | 28 | 29 | 35 | 39 |