├── app
├── .gitignore
├── src
│ ├── main
│ │ ├── res
│ │ │ ├── values
│ │ │ │ ├── strings.xml
│ │ │ │ ├── colors.xml
│ │ │ │ └── styles.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
│ │ │ ├── drawable-xxhdpi
│ │ │ │ ├── input_emoji.png
│ │ │ │ └── input_emoji_hover.png
│ │ │ ├── drawable
│ │ │ │ ├── rc_emoji_selector.xml
│ │ │ │ └── input_send_button.xml
│ │ │ └── layout
│ │ │ │ └── activity_main.xml
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── green
│ │ │ │ └── hand
│ │ │ │ ├── APP.java
│ │ │ │ └── MainActivity.java
│ │ └── AndroidManifest.xml
│ └── test
│ │ └── java
│ │ └── com
│ │ └── goume
│ │ └── xuanfu
│ │ └── emoji
│ │ └── ExampleUnitTest.java
├── proguard-rules.pro
└── build.gradle
├── library
├── .gitignore
├── src
│ ├── main
│ │ ├── res
│ │ │ ├── values
│ │ │ │ ├── strings.xml
│ │ │ │ ├── attrs.xml
│ │ │ │ └── emoji_map.xml
│ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── u1f004.png
│ │ │ │ ├── u1f12.png
│ │ │ │ ├── u1f30f.png
│ │ │ │ ├── u1f319.png
│ │ │ │ ├── u1f332.png
│ │ │ │ ├── u1f339.png
│ │ │ │ ├── u1f33b.png
│ │ │ │ ├── u1f349.png
│ │ │ │ ├── u1f356.png
│ │ │ │ ├── u1f35a.png
│ │ │ │ ├── u1f366.png
│ │ │ │ ├── u1f36b.png
│ │ │ │ ├── u1f377.png
│ │ │ │ ├── u1f37b.png
│ │ │ │ ├── u1f381.png
│ │ │ │ ├── u1f382.png
│ │ │ │ ├── u1f384.png
│ │ │ │ ├── u1f389.png
│ │ │ │ ├── u1f393.png
│ │ │ │ ├── u1f3a4.png
│ │ │ │ ├── u1f3b2.png
│ │ │ │ ├── u1f3b5.png
│ │ │ │ ├── u1f3c0.png
│ │ │ │ ├── u1f3c2.png
│ │ │ │ ├── u1f3e1.png
│ │ │ │ ├── u1f434.png
│ │ │ │ ├── u1f436.png
│ │ │ │ ├── u1f437.png
│ │ │ │ ├── u1f44a.png
│ │ │ │ ├── u1f44c.png
│ │ │ │ ├── u1f44d.png
│ │ │ │ ├── u1f44e.png
│ │ │ │ ├── u1f44f.png
│ │ │ │ ├── u1f451.png
│ │ │ │ ├── u1f46a.png
│ │ │ │ ├── u1f46b.png
│ │ │ │ ├── u1f47b.png
│ │ │ │ ├── u1f47c.png
│ │ │ │ ├── u1f47d.png
│ │ │ │ ├── u1f47f.png
│ │ │ │ ├── u1f484.png
│ │ │ │ ├── u1f48a.png
│ │ │ │ ├── u1f48b.png
│ │ │ │ ├── u1f48d.png
│ │ │ │ ├── u1f494.png
│ │ │ │ ├── u1f4a1.png
│ │ │ │ ├── u1f4a2.png
│ │ │ │ ├── u1f4a3.png
│ │ │ │ ├── u1f4a4.png
│ │ │ │ ├── u1f4a9.png
│ │ │ │ ├── u1f4aa.png
│ │ │ │ ├── u1f4b0.png
│ │ │ │ ├── u1f4da.png
│ │ │ │ ├── u1f4de.png
│ │ │ │ ├── u1f4e2.png
│ │ │ │ ├── u1f525.png
│ │ │ │ ├── u1f52b.png
│ │ │ │ ├── u1f556.png
│ │ │ │ ├── u1f600.png
│ │ │ │ ├── u1f601.png
│ │ │ │ ├── u1f602.png
│ │ │ │ ├── u1f603.png
│ │ │ │ ├── u1f605.png
│ │ │ │ ├── u1f606.png
│ │ │ │ ├── u1f607.png
│ │ │ │ ├── u1f608.png
│ │ │ │ ├── u1f609.png
│ │ │ │ ├── u1f60a.png
│ │ │ │ ├── u1f60b.png
│ │ │ │ ├── u1f60c.png
│ │ │ │ ├── u1f60d.png
│ │ │ │ ├── u1f60e.png
│ │ │ │ ├── u1f60f.png
│ │ │ │ ├── u1f611.png
│ │ │ │ ├── u1f613.png
│ │ │ │ ├── u1f614.png
│ │ │ │ ├── u1f615.png
│ │ │ │ ├── u1f616.png
│ │ │ │ ├── u1f618.png
│ │ │ │ ├── u1f61a.png
│ │ │ │ ├── u1f61c.png
│ │ │ │ ├── u1f61d.png
│ │ │ │ ├── u1f61e.png
│ │ │ │ ├── u1f61f.png
│ │ │ │ ├── u1f621.png
│ │ │ │ ├── u1f622.png
│ │ │ │ ├── u1f623.png
│ │ │ │ ├── u1f624.png
│ │ │ │ ├── u1f628.png
│ │ │ │ ├── u1f629.png
│ │ │ │ ├── u1f62a.png
│ │ │ │ ├── u1f62b.png
│ │ │ │ ├── u1f62c.png
│ │ │ │ ├── u1f62d.png
│ │ │ │ ├── u1f62e.png
│ │ │ │ ├── u1f62f.png
│ │ │ │ ├── u1f630.png
│ │ │ │ ├── u1f631.png
│ │ │ │ ├── u1f632.png
│ │ │ │ ├── u1f633.png
│ │ │ │ ├── u1f634.png
│ │ │ │ ├── u1f635.png
│ │ │ │ ├── u1f636.png
│ │ │ │ ├── u1f637.png
│ │ │ │ ├── u1f648.png
│ │ │ │ ├── u1f649.png
│ │ │ │ ├── u1f64a.png
│ │ │ │ ├── u1f64f.png
│ │ │ │ ├── u1f680.png
│ │ │ │ ├── u1f6ab.png
│ │ │ │ ├── u1f6b2.png
│ │ │ │ ├── u1f6bf.png
│ │ │ │ ├── u1f91d.png
│ │ │ │ ├── u23f0.png
│ │ │ │ ├── u23f3.png
│ │ │ │ ├── u2600.png
│ │ │ │ ├── u2601.png
│ │ │ │ ├── u2614.png
│ │ │ │ ├── u2615.png
│ │ │ │ ├── u261d.png
│ │ │ │ ├── u263a.png
│ │ │ │ ├── u26a1.png
│ │ │ │ ├── u26bd.png
│ │ │ │ ├── u26c4.png
│ │ │ │ ├── u26c5.png
│ │ │ │ ├── u270a.png
│ │ │ │ ├── u270b.png
│ │ │ │ ├── u270c.png
│ │ │ │ ├── u270f.png
│ │ │ │ ├── u2744.png
│ │ │ │ ├── u2764.png
│ │ │ │ ├── u2b50.png
│ │ │ │ ├── input_emoji_delete.png
│ │ │ │ ├── input_emoji_indicator.png
│ │ │ │ └── input_emoji_indicator_hover.png
│ │ │ └── layout
│ │ │ │ └── input_emoji_board.xml
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── green
│ │ │ └── hand
│ │ │ └── library
│ │ │ ├── EmojiUtil.java
│ │ │ ├── EmojiGridAdapter.java
│ │ │ ├── EmojiconSpan.java
│ │ │ ├── widget
│ │ │ ├── EmojiMultiAutoCompleteTextView.java
│ │ │ ├── EmojiTextview.java
│ │ │ ├── EmojiEdittext.java
│ │ │ └── EmojiBoard.java
│ │ │ ├── EmojiManager.java
│ │ │ └── EmojiconHandler.java
│ ├── test
│ │ └── java
│ │ │ └── com
│ │ │ └── green
│ │ │ └── hand
│ │ │ └── library
│ │ │ └── ExampleUnitTest.java
│ └── androidTest
│ │ └── java
│ │ └── com
│ │ └── green
│ │ └── hand
│ │ └── library
│ │ └── ExampleInstrumentedTest.java
├── build.gradle
└── proguard-rules.pro
├── settings.gradle
├── img
└── emoji.gif
├── .gitattributes
├── gradle.properties
├── .idea
├── caches
│ ├── gradle_models.ser
│ └── build_file_checksums.ser
├── encodings.xml
├── vcs.xml
├── misc.xml
├── runConfigurations.xml
├── gradle.xml
├── jarRepositories.xml
└── codeStyles
│ └── Project.xml
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── .gitignore
├── gradlew.bat
├── README.md
└── gradlew
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/library/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app', ':library'
2 |
--------------------------------------------------------------------------------
/img/emoji.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/img/emoji.gif
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | android.enableJetifier=true
2 | android.useAndroidX=true
3 | org.gradle.jvmargs=-Xmx1536m
--------------------------------------------------------------------------------
/.idea/caches/gradle_models.ser:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/.idea/caches/gradle_models.ser
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | EMoji
3 |
4 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/library/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Library
3 |
4 |
--------------------------------------------------------------------------------
/.idea/caches/build_file_checksums.ser:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/.idea/caches/build_file_checksums.ser
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f004.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f004.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f12.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f30f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f30f.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f319.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f319.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f332.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f332.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f339.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f339.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f33b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f33b.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f349.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f349.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f356.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f356.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f35a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f35a.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f366.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f366.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f36b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f36b.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f377.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f377.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f37b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f37b.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f381.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f381.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f382.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f382.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f384.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f384.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f389.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f389.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f393.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f393.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f3a4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f3a4.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f3b2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f3b2.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f3b5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f3b5.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f3c0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f3c0.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f3c2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f3c2.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f3e1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f3e1.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f434.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f434.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f436.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f436.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f437.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f437.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f44a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f44a.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f44c.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f44c.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f44d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f44d.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f44e.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f44e.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f44f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f44f.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f451.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f451.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f46a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f46a.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f46b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f46b.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f47b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f47b.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f47c.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f47c.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f47d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f47d.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f47f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f47f.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f484.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f484.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f48a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f48a.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f48b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f48b.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f48d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f48d.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f494.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f494.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f4a1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f4a1.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f4a2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f4a2.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f4a3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f4a3.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f4a4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f4a4.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f4a9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f4a9.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f4aa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f4aa.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f4b0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f4b0.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f4da.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f4da.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f4de.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f4de.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f4e2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f4e2.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f525.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f525.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f52b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f52b.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f556.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f556.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f600.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f600.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f601.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f601.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f602.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f602.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f603.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f603.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f605.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f605.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f606.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f606.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f607.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f607.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f608.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f608.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f609.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f609.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f60a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f60a.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f60b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f60b.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f60c.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f60c.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f60d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f60d.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f60e.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f60e.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f60f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f60f.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f611.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f611.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f613.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f613.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f614.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f614.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f615.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f615.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f616.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f616.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f618.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f618.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f61a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f61a.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f61c.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f61c.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f61d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f61d.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f61e.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f61e.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f61f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f61f.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f621.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f621.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f622.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f622.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f623.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f623.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f624.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f624.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f628.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f628.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f629.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f629.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f62a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f62a.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f62b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f62b.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f62c.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f62c.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f62d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f62d.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f62e.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f62e.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f62f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f62f.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f630.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f630.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f631.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f631.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f632.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f632.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f633.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f633.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f634.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f634.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f635.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f635.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f636.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f636.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f637.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f637.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f648.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f648.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f649.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f649.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f64a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f64a.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f64f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f64f.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f680.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f680.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f6ab.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f6ab.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f6b2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f6b2.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f6bf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f6bf.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u1f91d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f91d.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u23f0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u23f0.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u23f3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u23f3.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u2600.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u2600.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u2601.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u2601.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u2614.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u2614.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u2615.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u2615.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u261d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u261d.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u263a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u263a.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u26a1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u26a1.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u26bd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u26bd.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u26c4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u26c4.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u26c5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u26c5.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u270a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u270a.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u270b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u270b.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u270c.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u270c.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u270f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u270f.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u2744.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u2744.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u2764.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u2764.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/u2b50.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u2b50.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/input_emoji.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/app/src/main/res/drawable-xxhdpi/input_emoji.png
--------------------------------------------------------------------------------
/library/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/input_emoji_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/app/src/main/res/drawable-xxhdpi/input_emoji_hover.png
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/input_emoji_delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/input_emoji_delete.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/input_emoji_indicator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/input_emoji_indicator.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xhdpi/input_emoji_indicator_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/input_emoji_indicator_hover.png
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/libraries
5 | /.idea/modules.xml
6 | /.idea/workspace.xml
7 | .DS_Store
8 | /build
9 | /captures
10 | .externalNativeBuild
11 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #3F51B5
4 | #303F9F
5 | #FF4081
6 |
7 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Thu Aug 29 18:45:07 CST 2019
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.4.1-all.zip
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/rc_emoji_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/java/com/green/hand/APP.java:
--------------------------------------------------------------------------------
1 | package com.green.hand;
2 |
3 | import android.app.Application;
4 | import android.content.Context;
5 |
6 | import com.green.hand.library.EmojiManager;
7 |
8 | public class APP extends Application {
9 |
10 | @Override
11 | public void onCreate() {
12 | super.onCreate();
13 | EmojiManager.init(this);//初始化
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/test/java/com/goume/xuanfu/emoji/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.goume.xuanfu.emoji;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * @see Testing documentation
11 | */
12 | public class ExampleUnitTest {
13 | @Test
14 | public void addition_isCorrect() {
15 | assertEquals(4, 2 + 2);
16 | }
17 | }
--------------------------------------------------------------------------------
/library/src/test/java/com/green/hand/library/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.green.hand.library;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * @see Testing documentation
11 | */
12 | public class ExampleUnitTest {
13 | @Test
14 | public void addition_isCorrect() {
15 | assertEquals(4, 2 + 2);
16 | }
17 | }
--------------------------------------------------------------------------------
/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
11 |
12 |
--------------------------------------------------------------------------------
/library/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'com.github.dcendents.android-maven'
3 | group = 'com.github.OneGreenHand'
4 | android {
5 | compileSdkVersion 29
6 | buildToolsVersion "29.0.3"
7 | defaultConfig {
8 | minSdkVersion 14
9 | targetSdkVersion 29
10 | versionCode 1
11 | versionName "1.0"
12 | testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
13 | }
14 |
15 | buildTypes {
16 | release {
17 | minifyEnabled false
18 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
19 | }
20 | }
21 |
22 | }
23 |
24 | dependencies {
25 | implementation 'androidx.appcompat:appcompat:1.2.0-rc01'
26 | implementation 'androidx.recyclerview:recyclerview:1.1.0'
27 | }
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/library/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/input_send_button.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
6 |
7 |
8 |
9 |
10 | -
11 |
13 |
14 |
15 |
16 |
17 | -
18 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/input_emoji_board.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
21 |
--------------------------------------------------------------------------------
/library/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/library/src/androidTest/java/com/green/hand/library/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.green.hand.library;
2 |
3 | import android.content.Context;
4 | import android.support.test.InstrumentationRegistry;
5 | import android.support.test.runner.AndroidJUnit4;
6 |
7 | import org.junit.Test;
8 | import org.junit.runner.RunWith;
9 |
10 | import static org.junit.Assert.*;
11 |
12 | /**
13 | * Instrumented test, which will execute on an Android device.
14 | *
15 | * @see Testing documentation
16 | */
17 | @RunWith(AndroidJUnit4.class)
18 | public class ExampleInstrumentedTest {
19 | @Test
20 | public void useAppContext() {
21 | // Context of the app under test.
22 | Context appContext = InstrumentationRegistry.getTargetContext();
23 |
24 | assertEquals("com.green.hand.library.test", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 29
5 | buildToolsVersion "29.0.3"
6 | defaultConfig {
7 | applicationId "com.green.hand.emoji"
8 | minSdkVersion 14
9 | targetSdkVersion 29
10 | versionCode 1
11 | versionName "1.0"
12 | testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
13 | javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } }
14 | }
15 | buildTypes {
16 | release {
17 | minifyEnabled false
18 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
19 | }
20 | }
21 | }
22 |
23 | dependencies {
24 | implementation fileTree(include: ['*.jar'], dir: 'libs')
25 | implementation 'androidx.appcompat:appcompat:1.3.0-alpha01'
26 | implementation project(':library')
27 | }
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
12 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/.idea/jarRepositories.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 |
--------------------------------------------------------------------------------
/library/src/main/java/com/green/hand/library/EmojiUtil.java:
--------------------------------------------------------------------------------
1 | package com.green.hand.library;
2 |
3 | import android.content.res.Resources;
4 |
5 | /**
6 | * @author OneGreenHand
7 | * @package com.green.hand.library
8 | * @fileName EmojiUtil
9 | * @data on 2019/1/3 17:17
10 | * @describe
11 | */
12 | public class EmojiUtil {
13 | public static final int ROW = 3;
14 | public static final int COLUMN = 7;
15 |
16 | public static int getPageSize() {//得到总共需要有多少页
17 | return (int) Math.ceil((double) EmojiManager.getSize() / (ROW * COLUMN - 1));
18 | }
19 |
20 | public static int getOnePageSize() {//得到每一页要显示的数量
21 | return EmojiUtil.ROW * EmojiUtil.COLUMN - 1;
22 | }
23 |
24 | /**
25 | * Value of dp to value of px.
26 | *
27 | * @param dpValue The value of dp.
28 | * @return value of px
29 | */
30 | public static int dp2px(final float dpValue) {
31 | final float scale = Resources.getSystem().getDisplayMetrics().density;
32 | return (int) (dpValue * scale + 0.5f);
33 | }
34 |
35 | /**
36 | * Value of px to value of dp.
37 | *
38 | * @param pxValue The value of px.
39 | * @return value of dp
40 | */
41 | public static int px2dp(final float pxValue) {
42 | final float scale = Resources.getSystem().getDisplayMetrics().density;
43 | return (int) (pxValue / scale + 0.5f);
44 | }
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/library/src/main/java/com/green/hand/library/EmojiGridAdapter.java:
--------------------------------------------------------------------------------
1 | package com.green.hand.library;
2 |
3 | import androidx.annotation.NonNull;
4 | import androidx.recyclerview.widget.RecyclerView;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.widget.ImageView;
8 | import android.widget.LinearLayout;
9 |
10 | import java.util.ArrayList;
11 | import java.util.List;
12 |
13 | public class EmojiGridAdapter extends RecyclerView.Adapter {
14 | List resList = new ArrayList<>();
15 | private EmojiClick emojiClick;
16 |
17 | public void setOnEmojiClick(EmojiClick emojiClick) {
18 | this.emojiClick = emojiClick;
19 | }
20 |
21 | public interface EmojiClick {
22 | void onClick(int position);
23 | }
24 |
25 | public void setResList(List list) {
26 | resList.clear();
27 | resList.addAll(list);
28 | }
29 |
30 | //创建ViewHolder并返回,后续item布局里控件都是从ViewHolder中取出
31 | @Override
32 | public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
33 | return new MyHolder(new ImageView(parent.getContext()));
34 | }
35 |
36 | //通过方法提供的ViewHolder,将数据绑定到ViewHolder中
37 | @Override
38 | public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder viewHolder, final int position) {
39 | ImageView img = (ImageView) viewHolder.itemView;
40 | LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, EmojiUtil.dp2px(23));
41 | layoutParams.topMargin = EmojiUtil.dp2px(10);
42 | img.setLayoutParams(layoutParams);
43 | img.setImageResource(resList.get(position));
44 | img.setOnClickListener(new View.OnClickListener() {
45 | @Override
46 | public void onClick(View v) {
47 | if (emojiClick != null)
48 | emojiClick.onClick(position);
49 | }
50 | });
51 | }
52 |
53 | //获取数据源总的条数
54 | @Override
55 | public int getItemCount() {
56 | return resList.size();
57 | }
58 |
59 | /**
60 | * 自定义的ViewHolder
61 | */
62 | class MyHolder extends RecyclerView.ViewHolder {
63 |
64 | public MyHolder(ImageView img) {
65 | super(img);
66 | }
67 | }
68 | }
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | set DIRNAME=%~dp0
12 | if "%DIRNAME%" == "" set DIRNAME=.
13 | set APP_BASE_NAME=%~n0
14 | set APP_HOME=%DIRNAME%
15 |
16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17 | set DEFAULT_JVM_OPTS=
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windows variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 |
53 | :win9xME_args
54 | @rem Slurp the command line arguments.
55 | set CMD_LINE_ARGS=
56 | set _SKIP=2
57 |
58 | :win9xME_args_slurp
59 | if "x%~1" == "x" goto execute
60 |
61 | set CMD_LINE_ARGS=%*
62 |
63 | :execute
64 | @rem Setup the command line
65 |
66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
67 |
68 | @rem Execute Gradle
69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
70 |
71 | :end
72 | @rem End local scope for the variables with windows NT shell
73 | if "%ERRORLEVEL%"=="0" goto mainEnd
74 |
75 | :fail
76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
77 | rem the _cmd.exe /c_ return code!
78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
79 | exit /b 1
80 |
81 | :mainEnd
82 | if "%OS%"=="Windows_NT" endlocal
83 |
84 | :omega
85 |
--------------------------------------------------------------------------------
/library/src/main/java/com/green/hand/library/EmojiconSpan.java:
--------------------------------------------------------------------------------
1 | package com.green.hand.library;
2 |
3 | import android.content.Context;
4 | import android.graphics.Canvas;
5 | import android.graphics.Paint;
6 | import android.graphics.drawable.Drawable;
7 | import android.text.style.DynamicDrawableSpan;
8 |
9 | import java.lang.ref.WeakReference;
10 |
11 | public class EmojiconSpan extends DynamicDrawableSpan {
12 | private final Context mContext;
13 | private final int mResourceId;
14 | private final int mSize;
15 | private final int mTextSize;
16 | private int mHeight;
17 | private int mWidth;
18 | private int mTop;
19 | private Drawable mDrawable;
20 | private WeakReference mDrawableRef;
21 |
22 | public EmojiconSpan(Context context, int resourceId, int size, int alignment, int textSize) {
23 | super(alignment);
24 | mContext = context;
25 | mResourceId = resourceId;
26 | mWidth = mHeight = mSize = size;
27 | mTextSize = textSize;
28 | }
29 |
30 | public Drawable getDrawable() {
31 | if (mDrawable == null) {
32 | try {
33 | mDrawable = mContext.getResources().getDrawable(mResourceId);
34 | mHeight = mSize;
35 | mWidth = mHeight * mDrawable.getIntrinsicWidth() / mDrawable.getIntrinsicHeight();
36 | mTop = (mTextSize - mHeight) / 2;
37 | mDrawable.setBounds(0, mTop, mWidth, mTop + mHeight);
38 | } catch (Exception e) {
39 | // swallow
40 | }
41 | }
42 | return mDrawable;
43 | }
44 |
45 | @Override
46 | public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
47 | //super.draw(canvas, text, start, end, x, top, y, bottom, paint);
48 | Drawable b = getCachedDrawable();
49 | canvas.save();
50 | int transY = bottom - b.getBounds().bottom;
51 | if (mVerticalAlignment == ALIGN_BASELINE) {
52 | transY = top + ((bottom - top) / 2) - ((b.getBounds().bottom - b.getBounds().top) / 2) - mTop;
53 | }
54 | canvas.translate(x, transY);
55 | b.draw(canvas);
56 | canvas.restore();
57 | }
58 |
59 | private Drawable getCachedDrawable() {
60 | if (mDrawableRef == null || mDrawableRef.get() == null) {
61 | mDrawableRef = new WeakReference(getDrawable());
62 | }
63 | return mDrawableRef.get();
64 | }
65 |
66 | }
67 |
--------------------------------------------------------------------------------
/library/src/main/java/com/green/hand/library/widget/EmojiMultiAutoCompleteTextView.java:
--------------------------------------------------------------------------------
1 | package com.green.hand.library.widget;
2 |
3 | import android.content.Context;
4 | import android.content.res.TypedArray;
5 | import androidx.appcompat.widget.AppCompatMultiAutoCompleteTextView;
6 | import android.text.style.DynamicDrawableSpan;
7 | import android.util.AttributeSet;
8 |
9 | import com.green.hand.library.EmojiconHandler;
10 | import com.green.hand.library.R;
11 |
12 | public class EmojiMultiAutoCompleteTextView extends AppCompatMultiAutoCompleteTextView {
13 | private int mEmojiconSize;
14 | private int mEmojiconAlignment;
15 | private int mEmojiconTextSize;
16 | private boolean mUseSystemDefault = false;
17 |
18 | public EmojiMultiAutoCompleteTextView(Context context) {
19 | super(context);
20 | init(null);
21 | }
22 |
23 | public EmojiMultiAutoCompleteTextView(Context context, AttributeSet attrs) {
24 | super(context, attrs);
25 | init(attrs);
26 | }
27 |
28 | public EmojiMultiAutoCompleteTextView(Context context, AttributeSet attrs, int defStyle) {
29 | super(context, attrs, defStyle);
30 | init(attrs);
31 | }
32 |
33 | private void init(AttributeSet attrs) {
34 | mEmojiconSize = (int) getTextSize();
35 | mEmojiconTextSize = (int) getTextSize();
36 | if (attrs != null) {
37 | TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.Emojicon);
38 | mEmojiconSize = (int) a.getDimension(R.styleable.Emojicon_emojiconSize, getTextSize());
39 | mEmojiconAlignment = a.getInt(R.styleable.Emojicon_emojiconAlignment, DynamicDrawableSpan.ALIGN_BASELINE);
40 | mUseSystemDefault = a.getBoolean(R.styleable.Emojicon_emojiconUseSystemDefault, false);
41 | a.recycle();
42 | }
43 | setText(getText());
44 | }
45 |
46 | @Override
47 | protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
48 | updateText();
49 | }
50 |
51 | /**
52 | * Set the size of emojicon in pixels.
53 | */
54 | public void setEmojiconSize(int pixels) {
55 | mEmojiconSize = pixels;
56 | updateText();
57 | }
58 |
59 | private void updateText() {
60 | EmojiconHandler.addEmojis(getContext(), getText(), mEmojiconSize, mEmojiconAlignment, mEmojiconTextSize, mUseSystemDefault);
61 | }
62 |
63 | /**
64 | * Set whether to use system default emojicon
65 | */
66 | public void setUseSystemDefault(boolean useSystemDefault) {
67 | mUseSystemDefault = useSystemDefault;
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 效果图
2 | 
3 | ## 如何使用
4 | ```java
5 | dependencies {
6 | implementation 'com.github.OneGreenHand:Emoji:v1.2.4'
7 | }
8 | ```
9 |
10 | **1、初始化**
11 | 在Application中进行初始化
12 | ```java
13 | EmojiManager.init(this)
14 | ```
15 |
16 | **2、在布局中应用**
17 | ```java
18 |
25 | ```
26 |
27 | *可选,如果不用此控件,需自行监听实现,具体参考[EmoniEdittext](https://github.com/OneGreenHand/Emoji/blob/master/library/src/main/java/com/green/hand/library/widget/EmojiEdittext.java)。
28 | ```java
29 |
33 | ```
34 |
35 | //兼容emoji显示的textview
36 | ```java
37 |
41 | ```
42 |
43 | **3、在页面中使用**
44 | 实现表情框Item单击事件(emojiBoard为[EmojiBoard](https://github.com/OneGreenHand/Emoji/blob/master/library/src/main/java/com/green/hand/library/widget/EmojiBoard.java)控件,textEditor为Edittext控件)
45 | ```java
46 | emojiBoard.setItemClickListener(new EmojiBoard.OnEmojiItemClickListener() {//表情框点击事件
47 | @Override
48 | public void onClick(String code) {
49 | if (code.equals("/DEL")) {//点击了删除图标
50 | textEditor.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_DEL));
51 | } else {//插入表情
52 | textEditor.getText().insert(textEditor.getSelectionStart(), code);
53 | }
54 | }
55 | });
56 | ```
57 |
58 | **4、其他方法**
59 | EmojiBoard ---> showBoard() //显示隐藏表情框
60 | EmoniEdittext ---> isEnable(view) //用于未输入文字时,其他按钮不可点击
61 | EmojiTextview ---> setUseSystemDefault(boolean) //是否使用系统默认表情
62 | ### 属性说明
63 | deleteIcon:删除icon
64 | emojiIndicator:底部未选中icon
65 | emojiIndicatorHover:底部选中icon
66 |
67 | ### **补充说明**
68 | 如果仍然出现显示为☐或者乱码情况,可尝试使用官方的 [EmojiCompat](https://www.jianshu.com/p/2a26502db899) 支持库或使用[emojicon](https://github.com/rockerhieu/emojicon)三方库
69 | ### 版本日志
70 | + v1.2.4
71 | - 升级为androidX
72 | + v1.2.3
73 | - GridView变更为Recycleview、资源优化、升级版本
74 | + v1.2.2
75 | - 新增、替换表情、去除ButterKnife依赖
76 | + v1.2.1
77 | - 新增、去除重复表情
78 | - 修复部分手机无法显示问题
79 | - 加入兼容Emoji显示的控件
80 |
81 | ### 其他
82 | 有任何问题,可以在[issues](https://github.com/OneGreenHand/Emoji/issues)给我留言反馈。
--------------------------------------------------------------------------------
/library/src/main/java/com/green/hand/library/widget/EmojiTextview.java:
--------------------------------------------------------------------------------
1 | package com.green.hand.library.widget;
2 |
3 | import android.content.Context;
4 | import android.content.res.TypedArray;
5 | import android.text.SpannableStringBuilder;
6 | import android.text.TextUtils;
7 | import android.text.style.DynamicDrawableSpan;
8 | import android.util.AttributeSet;
9 | import android.widget.TextView;
10 |
11 | import com.green.hand.library.EmojiconHandler;
12 | import com.green.hand.library.R;
13 |
14 | public class EmojiTextview extends TextView {
15 | private int mEmojiconSize;
16 | private int mEmojiconAlignment;
17 | private int mEmojiconTextSize;
18 | private int mTextStart = 0;
19 | private int mTextLength = -1;
20 | private boolean mUseSystemDefault = false;
21 |
22 | public EmojiTextview(Context context) {
23 | super(context);
24 | init(null);
25 | }
26 |
27 | public EmojiTextview(Context context, AttributeSet attrs) {
28 | super(context, attrs);
29 | init(attrs);
30 | }
31 |
32 | public EmojiTextview(Context context, AttributeSet attrs, int defStyle) {
33 | super(context, attrs, defStyle);
34 | init(attrs);
35 | }
36 |
37 | private void init(AttributeSet attrs) {
38 | mEmojiconTextSize = (int) getTextSize();
39 | mEmojiconSize = (int) getTextSize();
40 | if (attrs != null) {
41 | TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.Emojicon);
42 | mEmojiconSize = (int) a.getDimension(R.styleable.Emojicon_emojiconSize, getTextSize());
43 | mEmojiconAlignment = a.getInt(R.styleable.Emojicon_emojiconAlignment, DynamicDrawableSpan.ALIGN_BASELINE);
44 | mTextStart = a.getInteger(R.styleable.Emojicon_emojiconTextStart, 0);
45 | mTextLength = a.getInteger(R.styleable.Emojicon_emojiconTextLength, -1);
46 | mUseSystemDefault = a.getBoolean(R.styleable.Emojicon_emojiconUseSystemDefault, false);
47 | a.recycle();
48 | }
49 | setText(getText());
50 | }
51 |
52 | @Override
53 | public void setText(CharSequence text, BufferType type) {
54 | if (!TextUtils.isEmpty(text)) {
55 | SpannableStringBuilder builder = new SpannableStringBuilder(text);
56 | EmojiconHandler.addEmojis(getContext(), builder, mEmojiconSize, mEmojiconAlignment, mEmojiconTextSize, mTextStart, mTextLength, mUseSystemDefault);
57 | text = builder;
58 | }
59 | super.setText(text, type);
60 | }
61 |
62 | public void setEmojiconSize(int pixels) {
63 | mEmojiconSize = pixels;
64 | super.setText(getText());
65 | }
66 |
67 | public void setUseSystemDefault(boolean useSystemDefault) {
68 | mUseSystemDefault = useSystemDefault;
69 | }
70 |
71 | }
72 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
17 |
18 |
23 |
24 |
29 |
30 |
38 |
39 |
45 |
46 |
47 |
57 |
58 |
59 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/app/src/main/java/com/green/hand/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.green.hand;
2 |
3 | import android.os.Bundle;
4 | import androidx.appcompat.app.AppCompatActivity;
5 | import android.view.KeyEvent;
6 | import android.view.View;
7 | import android.view.View.OnClickListener;
8 | import android.widget.ImageView;
9 | import android.widget.TextView;
10 |
11 | import com.green.hand.emoji.R;
12 | import com.green.hand.library.widget.EmojiBoard;
13 | import com.green.hand.library.widget.EmojiEdittext;
14 | import com.green.hand.library.widget.EmojiTextview;
15 |
16 | import static android.view.View.GONE;
17 | import static android.view.View.VISIBLE;
18 |
19 | public class MainActivity extends AppCompatActivity implements OnClickListener {
20 |
21 | private EmojiEdittext textEditor;
22 | private ImageView emojiBtn;
23 | private TextView sendBtn;
24 | private EmojiBoard emojiBoard;
25 | private EmojiTextview messageContent;
26 | private String messages = "";//显示内容
27 |
28 | @Override
29 | protected void onCreate(Bundle savedInstanceState) {
30 | super.onCreate(savedInstanceState);
31 | setContentView(R.layout.activity_main);
32 | finID();
33 | textEditor.isEnable(sendBtn);//这里是为了让未输入内容的时候不让点击
34 | emojiBoard.setItemClickListener(new EmojiBoard.OnEmojiItemClickListener() {//表情框点击事件
35 | @Override
36 | public void onClick(String code) {
37 | if (code.equals("/DEL")) {//删除图标
38 | textEditor.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));
39 | } else {//插入表情
40 | textEditor.getText().insert(textEditor.getSelectionStart(), code);
41 | }
42 | }
43 | });
44 | }
45 |
46 | /**
47 | * findViewById
48 | */
49 | private void finID() {
50 | textEditor = findViewById(R.id.input_editor);
51 | emojiBtn = findViewById(R.id.input_emoji_btn);
52 | sendBtn = findViewById(R.id.input_send);
53 | emojiBoard = findViewById(R.id.input_emoji_board);
54 | messageContent = findViewById(R.id.message_content);
55 | emojiBtn.setOnClickListener(this);
56 | sendBtn.setOnClickListener(this);
57 | }
58 |
59 | @Override
60 | public void onBackPressed() {//监听返回键,如果表情框已显示就隐藏
61 | if (emojiBoard.getVisibility() == VISIBLE) {
62 | showEmojiBoard();
63 | } else {
64 | super.onBackPressed();
65 | }
66 | }
67 |
68 | /**
69 | * 展开or隐藏表情框
70 | */
71 | public void showEmojiBoard() {
72 | emojiBtn.setSelected(emojiBoard.getVisibility() == GONE);//设置图片选中效果
73 | emojiBoard.showBoard();//是否显示表情框
74 | }
75 |
76 | @Override
77 | public void onClick(View view) {
78 | switch (view.getId()) {
79 | case R.id.input_emoji_btn://表情按钮
80 | showEmojiBoard();
81 | break;
82 | case R.id.input_send://发送按钮
83 | messages = messages + textEditor.getText().toString();
84 | messageContent.setText(messages);
85 | textEditor.getText().clear();
86 | break;
87 | }
88 | }
89 | }
90 |
--------------------------------------------------------------------------------
/library/src/main/java/com/green/hand/library/widget/EmojiEdittext.java:
--------------------------------------------------------------------------------
1 | package com.green.hand.library.widget;
2 |
3 | import android.content.Context;
4 | import android.content.res.TypedArray;
5 | import android.text.Editable;
6 | import android.text.TextWatcher;
7 | import android.text.style.DynamicDrawableSpan;
8 | import android.util.AttributeSet;
9 | import android.view.View;
10 | import android.widget.EditText;
11 | import android.widget.TextView;
12 |
13 | import com.green.hand.library.EmojiManager;
14 | import com.green.hand.library.EmojiconHandler;
15 | import com.green.hand.library.R;
16 |
17 | public class EmojiEdittext extends EditText {
18 | private View view = null;
19 | private int mEmojiconSize;
20 | private int mEmojiconAlignment;
21 | private int mEmojiconTextSize;
22 | private boolean mUseSystemDefault = false;
23 |
24 | public EmojiEdittext(Context context) {
25 | super(context);
26 | initView(null);
27 | }
28 |
29 | public EmojiEdittext(Context context, AttributeSet attrs) {
30 | super(context, attrs);
31 | initView(attrs);
32 | }
33 |
34 | public EmojiEdittext(Context context, AttributeSet attrs, int defStyleAttr) {
35 | super(context, attrs, defStyleAttr);
36 | initView(attrs);
37 | }
38 |
39 | private void initView(AttributeSet attrs) {
40 | mEmojiconSize = (int) getTextSize();
41 | mEmojiconTextSize = (int) getTextSize();
42 | if (attrs != null) {
43 | TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.Emojicon);
44 | mEmojiconSize = (int) a.getDimension(R.styleable.Emojicon_emojiconSize, getTextSize());
45 | mEmojiconAlignment = a.getInt(R.styleable.Emojicon_emojiconAlignment, DynamicDrawableSpan.ALIGN_BASELINE);
46 | mUseSystemDefault = a.getBoolean(R.styleable.Emojicon_emojiconUseSystemDefault, false);
47 | a.recycle();
48 | }
49 | setText(getText());
50 | addTextChangedListener(textWatcher);
51 | }
52 |
53 | private TextWatcher textWatcher = new TextWatcher() {
54 | @Override
55 | public void beforeTextChanged(CharSequence s, int start, int count, int after) {
56 |
57 | }
58 |
59 | @Override
60 | public void onTextChanged(CharSequence s, int start, int before, int count) {
61 |
62 | }
63 |
64 | @Override
65 | public void afterTextChanged(Editable editable) {
66 | if (view != null)
67 | view.setEnabled(!editable.toString().isEmpty());//输入完不为空内容才可以点击
68 | int start = getSelectionStart();
69 | int end = getSelectionEnd();
70 | removeTextChangedListener(this);//取消监听
71 | updateText();
72 | CharSequence cs = EmojiManager.parse(editable.toString(), getTextSize());
73 | setText(cs, TextView.BufferType.SPANNABLE);
74 | setSelection(start, end);
75 | addTextChangedListener(this);
76 | }
77 | };
78 |
79 | public void setEmojiconSize(int pixels) {
80 | mEmojiconSize = pixels;
81 | updateText();
82 | }
83 |
84 | private void updateText() {
85 | EmojiconHandler.addEmojis(getContext(), getText(), mEmojiconSize, mEmojiconAlignment, mEmojiconTextSize, mUseSystemDefault);
86 | }
87 |
88 | public void setUseSystemDefault(boolean useSystemDefault) {
89 | mUseSystemDefault = useSystemDefault;
90 | }
91 |
92 | /**
93 | * 未输入的时候让其他控件不能点击
94 | */
95 | public void isEnable(View view) {
96 | this.view = view;
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/.idea/codeStyles/Project.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | xmlns:android
14 |
15 | ^$
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | xmlns:.*
25 |
26 | ^$
27 |
28 |
29 | BY_NAME
30 |
31 |
32 |
33 |
34 |
35 |
36 | .*:id
37 |
38 | http://schemas.android.com/apk/res/android
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | .*:name
48 |
49 | http://schemas.android.com/apk/res/android
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 | name
59 |
60 | ^$
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 | style
70 |
71 | ^$
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 | .*
81 |
82 | ^$
83 |
84 |
85 | BY_NAME
86 |
87 |
88 |
89 |
90 |
91 |
92 | .*
93 |
94 | http://schemas.android.com/apk/res/android
95 |
96 |
97 | ANDROID_ATTRIBUTE_ORDER
98 |
99 |
100 |
101 |
102 |
103 |
104 | .*
105 |
106 | .*
107 |
108 |
109 | BY_NAME
110 |
111 |
112 |
113 |
114 |
115 |
116 |
--------------------------------------------------------------------------------
/library/src/main/java/com/green/hand/library/EmojiManager.java:
--------------------------------------------------------------------------------
1 | package com.green.hand.library;
2 |
3 | import android.content.Context;
4 | import android.content.res.Resources;
5 | import android.content.res.TypedArray;
6 | import android.graphics.Bitmap;
7 | import android.graphics.BitmapFactory;
8 | import android.graphics.Canvas;
9 | import android.graphics.Paint;
10 | import android.graphics.drawable.BitmapDrawable;
11 | import android.graphics.drawable.Drawable;
12 | import android.text.SpannableStringBuilder;
13 | import android.text.Spanned;
14 | import android.text.style.ImageSpan;
15 |
16 | import java.util.ArrayList;
17 | import java.util.List;
18 |
19 | public class EmojiManager {
20 |
21 | public static Context gContext;
22 | private static List emojiCodeList = new ArrayList<>();//编码
23 | private static List emojiResourceList = new ArrayList<>();//资源文件
24 |
25 | public static void init(Context context) {
26 | gContext = context.getApplicationContext();
27 | Resources resources = gContext.getResources();
28 | int[] codes = resources.getIntArray(R.array.emoji_code_list);
29 | TypedArray array = resources.obtainTypedArray(R.array.emoji_res_list);
30 | if (codes.length != array.length()) {//数据长度必须一致
31 | array.recycle();
32 | throw new IndexOutOfBoundsException("Code and resource are not match in Emoji xml.");
33 | }
34 | for (int i = 0; i < codes.length; i++) {
35 | emojiCodeList.add(codes[i]);
36 | emojiResourceList.add(array.getResourceId(i, -1));
37 | }
38 | array.recycle();
39 | }
40 |
41 | public static int getSize() {//得到总数据
42 | return emojiCodeList.size();
43 | }
44 |
45 | public static int getCode(int position) {//得到编码
46 | return emojiCodeList.get(position);
47 | }
48 |
49 | public static List getResourceList(int start, int count) {//得到每页的数据
50 | return new ArrayList<>(emojiResourceList.subList(start, count));
51 | }
52 |
53 | private static int getResourceByCode(int code) throws Resources.NotFoundException {
54 | for (int i = 0; i < emojiCodeList.size(); i++) {
55 | if (emojiCodeList.get(i) == code)
56 | return emojiResourceList.get(i);
57 | }
58 | throw new Resources.NotFoundException("Unsupported emoji code <" + code + ">, which is not in Emoji list.");
59 | }
60 |
61 | public static CharSequence parse(String text, float textSize) {
62 | if (text == null)
63 | return "";
64 | final char[] chars = text.toCharArray();
65 | final SpannableStringBuilder ssb = new SpannableStringBuilder(text);
66 | int codePoint;
67 | boolean isSurrogatePair;
68 | for (int i = 0; i < chars.length; i++) {
69 | if (Character.isHighSurrogate(chars[i])) {
70 | continue;
71 | } else if (Character.isLowSurrogate(chars[i])) {
72 | if (i > 0 && Character.isSurrogatePair(chars[i - 1], chars[i])) {
73 | codePoint = Character.toCodePoint(chars[i - 1], chars[i]);
74 | isSurrogatePair = true;
75 | } else {
76 | continue;
77 | }
78 | } else {
79 | codePoint = (int) chars[i];
80 | isSurrogatePair = false;
81 | }
82 | if (emojiCodeList.contains(codePoint)) {
83 | Bitmap bitmap = BitmapFactory.decodeResource(gContext.getResources(), getResourceByCode(codePoint));
84 | BitmapDrawable bmpDrawable = new BitmapDrawable(gContext.getResources(), bitmap);
85 | bmpDrawable.setBounds(0, 0, (int) textSize, (int) textSize);
86 | CenterImageSpan imageSpan = new CenterImageSpan(bmpDrawable);
87 | ssb.setSpan(imageSpan, isSurrogatePair ? i - 1 : i, i + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
88 | }
89 | }
90 | return ssb;
91 | }
92 |
93 | private static class CenterImageSpan extends ImageSpan {
94 |
95 | public CenterImageSpan(Drawable draw) {
96 | super(draw);
97 | }
98 |
99 | @Override
100 | public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
101 | Drawable b = getDrawable();
102 | int transY = ((bottom - top) - getDrawable().getBounds().bottom) / 2 + top;
103 | canvas.save();
104 | canvas.translate(x, transY);
105 | b.draw(canvas);
106 | canvas.restore();
107 | }
108 | }
109 | }
110 |
--------------------------------------------------------------------------------
/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Attempt to set APP_HOME
10 | # Resolve links: $0 may be a link
11 | PRG="$0"
12 | # Need this for relative symlinks.
13 | while [ -h "$PRG" ] ; do
14 | ls=`ls -ld "$PRG"`
15 | link=`expr "$ls" : '.*-> \(.*\)$'`
16 | if expr "$link" : '/.*' > /dev/null; then
17 | PRG="$link"
18 | else
19 | PRG=`dirname "$PRG"`"/$link"
20 | fi
21 | done
22 | SAVED="`pwd`"
23 | cd "`dirname \"$PRG\"`/" >/dev/null
24 | APP_HOME="`pwd -P`"
25 | cd "$SAVED" >/dev/null
26 |
27 | APP_NAME="Gradle"
28 | APP_BASE_NAME=`basename "$0"`
29 |
30 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
31 | DEFAULT_JVM_OPTS=""
32 |
33 | # Use the maximum available, or set MAX_FD != -1 to use that value.
34 | MAX_FD="maximum"
35 |
36 | warn () {
37 | echo "$*"
38 | }
39 |
40 | die () {
41 | echo
42 | echo "$*"
43 | echo
44 | exit 1
45 | }
46 |
47 | # OS specific support (must be 'true' or 'false').
48 | cygwin=false
49 | msys=false
50 | darwin=false
51 | nonstop=false
52 | case "`uname`" in
53 | CYGWIN* )
54 | cygwin=true
55 | ;;
56 | Darwin* )
57 | darwin=true
58 | ;;
59 | MINGW* )
60 | msys=true
61 | ;;
62 | NONSTOP* )
63 | nonstop=true
64 | ;;
65 | esac
66 |
67 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
68 |
69 | # Determine the Java command to use to start the JVM.
70 | if [ -n "$JAVA_HOME" ] ; then
71 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
72 | # IBM's JDK on AIX uses strange locations for the executables
73 | JAVACMD="$JAVA_HOME/jre/sh/java"
74 | else
75 | JAVACMD="$JAVA_HOME/bin/java"
76 | fi
77 | if [ ! -x "$JAVACMD" ] ; then
78 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
79 |
80 | Please set the JAVA_HOME variable in your environment to match the
81 | location of your Java installation."
82 | fi
83 | else
84 | JAVACMD="java"
85 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
86 |
87 | Please set the JAVA_HOME variable in your environment to match the
88 | location of your Java installation."
89 | fi
90 |
91 | # Increase the maximum file descriptors if we can.
92 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
93 | MAX_FD_LIMIT=`ulimit -H -n`
94 | if [ $? -eq 0 ] ; then
95 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
96 | MAX_FD="$MAX_FD_LIMIT"
97 | fi
98 | ulimit -n $MAX_FD
99 | if [ $? -ne 0 ] ; then
100 | warn "Could not set maximum file descriptor limit: $MAX_FD"
101 | fi
102 | else
103 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
104 | fi
105 | fi
106 |
107 | # For Darwin, add options to specify how the application appears in the dock
108 | if $darwin; then
109 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
110 | fi
111 |
112 | # For Cygwin, switch paths to Windows format before running java
113 | if $cygwin ; then
114 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
115 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
116 | JAVACMD=`cygpath --unix "$JAVACMD"`
117 |
118 | # We build the pattern for arguments to be converted via cygpath
119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
120 | SEP=""
121 | for dir in $ROOTDIRSRAW ; do
122 | ROOTDIRS="$ROOTDIRS$SEP$dir"
123 | SEP="|"
124 | done
125 | OURCYGPATTERN="(^($ROOTDIRS))"
126 | # Add a user-defined pattern to the cygpath arguments
127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
129 | fi
130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
131 | i=0
132 | for arg in "$@" ; do
133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
135 |
136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
138 | else
139 | eval `echo args$i`="\"$arg\""
140 | fi
141 | i=$((i+1))
142 | done
143 | case $i in
144 | (0) set -- ;;
145 | (1) set -- "$args0" ;;
146 | (2) set -- "$args0" "$args1" ;;
147 | (3) set -- "$args0" "$args1" "$args2" ;;
148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
154 | esac
155 | fi
156 |
157 | # Escape application args
158 | save () {
159 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
160 | echo " "
161 | }
162 | APP_ARGS=$(save "$@")
163 |
164 | # Collect all arguments for the java command, following the shell quoting and substitution rules
165 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
166 |
167 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
168 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
169 | cd "$(dirname "$0")"
170 | fi
171 |
172 | exec "$JAVACMD" "$@"
173 |
--------------------------------------------------------------------------------
/library/src/main/java/com/green/hand/library/EmojiconHandler.java:
--------------------------------------------------------------------------------
1 | package com.green.hand.library;
2 |
3 | import android.content.Context;
4 | import android.text.Spannable;
5 | import android.util.SparseIntArray;
6 |
7 | public class EmojiconHandler {
8 | private EmojiconHandler() {
9 | }
10 |
11 | private static final SparseIntArray sEmojisMap = new SparseIntArray(1029);
12 |
13 | static {
14 | sEmojisMap.put(0x1f603, R.mipmap.u1f603);
15 | sEmojisMap.put(0x1f600, R.mipmap.u1f600);
16 | sEmojisMap.put(0x1f60a, R.mipmap.u1f60a);
17 | sEmojisMap.put(0x263a, R.mipmap.u263a);
18 | sEmojisMap.put(0x1f609, R.mipmap.u1f609);
19 | sEmojisMap.put(0x1f60d, R.mipmap.u1f60d);
20 | sEmojisMap.put(0x1f618, R.mipmap.u1f618);
21 | sEmojisMap.put(0x1f61a, R.mipmap.u1f61a);
22 | sEmojisMap.put(0x1f61c, R.mipmap.u1f61c);
23 | sEmojisMap.put(0x1f61d, R.mipmap.u1f61d);
24 | sEmojisMap.put(0x1f633, R.mipmap.u1f633);
25 | sEmojisMap.put(0x1f601, R.mipmap.u1f601);
26 | sEmojisMap.put(0x1f614, R.mipmap.u1f614);
27 | sEmojisMap.put(0x1f60c, R.mipmap.u1f60c);
28 | sEmojisMap.put(0x1ff12, R.mipmap.u1f12);
29 | sEmojisMap.put(0x1f61f, R.mipmap.u1f61f);
30 | sEmojisMap.put(0x1f61e, R.mipmap.u1f61e);
31 | sEmojisMap.put(0x1f623, R.mipmap.u1f623);
32 | sEmojisMap.put(0x1f622, R.mipmap.u1f622);
33 | sEmojisMap.put(0x1f602, R.mipmap.u1f602);
34 | sEmojisMap.put(0x1f62d, R.mipmap.u1f62d);
35 | sEmojisMap.put(0x1f62a, R.mipmap.u1f62a);
36 | sEmojisMap.put(0x1f630, R.mipmap.u1f630);
37 | sEmojisMap.put(0x1f605, R.mipmap.u1f605);
38 | sEmojisMap.put(0x1f613, R.mipmap.u1f613);
39 | sEmojisMap.put(0x1f62b, R.mipmap.u1f62b);
40 | sEmojisMap.put(0x1f629, R.mipmap.u1f629);
41 | sEmojisMap.put(0x1f628, R.mipmap.u1f628);
42 | sEmojisMap.put(0x1f631, R.mipmap.u1f631);
43 | sEmojisMap.put(0x1f621, R.mipmap.u1f621);
44 | sEmojisMap.put(0x1f624, R.mipmap.u1f624);
45 | sEmojisMap.put(0x1f616, R.mipmap.u1f616);
46 | sEmojisMap.put(0x1f606, R.mipmap.u1f606);
47 | sEmojisMap.put(0x1f60b, R.mipmap.u1f60b);
48 | sEmojisMap.put(0x1f637, R.mipmap.u1f637);
49 | sEmojisMap.put(0x1f60e, R.mipmap.u1f60e);
50 | sEmojisMap.put(0x1f634, R.mipmap.u1f634);
51 | sEmojisMap.put(0x1f632, R.mipmap.u1f632);
52 | sEmojisMap.put(0x1f62e, R.mipmap.u1f62e);
53 | sEmojisMap.put(0x1f608, R.mipmap.u1f608);
54 | sEmojisMap.put(0x1f47f, R.mipmap.u1f47f);
55 | sEmojisMap.put(0x1f62f, R.mipmap.u1f62f);
56 | sEmojisMap.put(0x1f62c, R.mipmap.u1f62c);
57 | sEmojisMap.put(0x1f615, R.mipmap.u1f615);
58 | sEmojisMap.put(0x1f635, R.mipmap.u1f635);
59 | sEmojisMap.put(0x1f636, R.mipmap.u1f636);
60 | sEmojisMap.put(0x1f607, R.mipmap.u1f607);
61 | sEmojisMap.put(0x1f60f, R.mipmap.u1f60f);
62 | sEmojisMap.put(0x1f611, R.mipmap.u1f611);
63 | sEmojisMap.put(0x1f648, R.mipmap.u1f648);
64 | sEmojisMap.put(0x1f649, R.mipmap.u1f649);
65 | sEmojisMap.put(0x1f64a, R.mipmap.u1f64a);
66 | sEmojisMap.put(0x1f47d, R.mipmap.u1f47d);
67 | sEmojisMap.put(0x1f4a9, R.mipmap.u1f4a9);
68 | sEmojisMap.put(0x2764, R.mipmap.u2764);
69 | sEmojisMap.put(0x1f494, R.mipmap.u1f494);
70 | sEmojisMap.put(0x1f525, R.mipmap.u1f525);
71 | sEmojisMap.put(0x1f4a2, R.mipmap.u1f4a2);
72 | sEmojisMap.put(0x1f4a4, R.mipmap.u1f4a4);
73 | sEmojisMap.put(0x1f6ab, R.mipmap.u1f6ab);
74 | sEmojisMap.put(0x2b50, R.mipmap.u2b50);
75 | sEmojisMap.put(0x26a1, R.mipmap.u26a1);
76 | sEmojisMap.put(0x1f319, R.mipmap.u1f319);
77 | sEmojisMap.put(0x2600, R.mipmap.u2600);
78 | sEmojisMap.put(0x26c5, R.mipmap.u26c5);
79 | sEmojisMap.put(0x2601, R.mipmap.u2601);
80 | sEmojisMap.put(0x2744, R.mipmap.u2744);
81 | sEmojisMap.put(0x2614, R.mipmap.u2614);
82 | sEmojisMap.put(0x26c4, R.mipmap.u26c4);
83 | sEmojisMap.put(0x1f44d, R.mipmap.u1f44d);
84 | sEmojisMap.put(0x1f44e, R.mipmap.u1f44e);
85 | sEmojisMap.put(0x1f44c, R.mipmap.u1f44c);
86 | sEmojisMap.put(0x1f44a, R.mipmap.u1f44a);
87 | sEmojisMap.put(0x270a, R.mipmap.u270a);
88 | sEmojisMap.put(0x270c, R.mipmap.u270c);
89 | sEmojisMap.put(0x270b, R.mipmap.u270b);
90 | sEmojisMap.put(0x1f64f, R.mipmap.u1f64f);
91 | sEmojisMap.put(0x261d, R.mipmap.u261d);
92 | sEmojisMap.put(0x1f44f, R.mipmap.u1f44f);
93 | sEmojisMap.put(0x1f91d, R.mipmap.u1f91d);
94 | sEmojisMap.put(0x1f4aa, R.mipmap.u1f4aa);
95 | sEmojisMap.put(0x1f46a, R.mipmap.u1f46a);
96 | sEmojisMap.put(0x1f46b, R.mipmap.u1f46b);
97 | sEmojisMap.put(0x1f47c, R.mipmap.u1f47c);
98 | sEmojisMap.put(0x1f434, R.mipmap.u1f434);
99 | sEmojisMap.put(0x1f436, R.mipmap.u1f436);
100 | sEmojisMap.put(0x1f437, R.mipmap.u1f437);
101 | sEmojisMap.put(0x1f47b, R.mipmap.u1f47b);
102 | sEmojisMap.put(0x1f339, R.mipmap.u1f339);
103 | sEmojisMap.put(0x1f33b, R.mipmap.u1f33b);
104 | sEmojisMap.put(0x1f332, R.mipmap.u1f332);
105 | sEmojisMap.put(0x1f384, R.mipmap.u1f384);
106 | sEmojisMap.put(0x1f381, R.mipmap.u1f381);
107 | sEmojisMap.put(0x1f389, R.mipmap.u1f389);
108 | sEmojisMap.put(0x1f4b0, R.mipmap.u1f4b0);
109 | sEmojisMap.put(0x1f382, R.mipmap.u1f382);
110 | sEmojisMap.put(0x1f356, R.mipmap.u1f356);
111 | sEmojisMap.put(0x1f35a, R.mipmap.u1f35a);
112 | sEmojisMap.put(0x1f366, R.mipmap.u1f366);
113 | sEmojisMap.put(0x1f36b, R.mipmap.u1f36b);
114 | sEmojisMap.put(0x1f349, R.mipmap.u1f349);
115 | sEmojisMap.put(0x1f377, R.mipmap.u1f377);
116 | sEmojisMap.put(0x1f37b, R.mipmap.u1f37b);
117 | sEmojisMap.put(0x2615, R.mipmap.u2615);
118 | sEmojisMap.put(0x1f3c0, R.mipmap.u1f3c0);
119 | sEmojisMap.put(0x26bd, R.mipmap.u26bd);
120 | sEmojisMap.put(0x1f3c2, R.mipmap.u1f3c2);
121 | sEmojisMap.put(0x1f6b2, R.mipmap.u1f6b2);
122 | sEmojisMap.put(0x1f3a4, R.mipmap.u1f3a4);
123 | sEmojisMap.put(0x1f3b5, R.mipmap.u1f3b5);
124 | sEmojisMap.put(0x1f3b2, R.mipmap.u1f3b2);
125 | sEmojisMap.put(0x1f004, R.mipmap.u1f004);
126 | sEmojisMap.put(0x1f451, R.mipmap.u1f451);
127 | sEmojisMap.put(0x1f484, R.mipmap.u1f484);
128 | sEmojisMap.put(0x1f48b, R.mipmap.u1f48b);
129 | sEmojisMap.put(0x1f48d, R.mipmap.u1f48d);
130 | sEmojisMap.put(0x1f4da, R.mipmap.u1f4da);
131 | sEmojisMap.put(0x1f393, R.mipmap.u1f393);
132 | sEmojisMap.put(0x270f, R.mipmap.u270f);
133 | sEmojisMap.put(0x1f3e1, R.mipmap.u1f3e1);
134 | sEmojisMap.put(0x1f6bf, R.mipmap.u1f6bf);
135 | sEmojisMap.put(0x1f4a1, R.mipmap.u1f4a1);
136 | sEmojisMap.put(0x1f4de, R.mipmap.u1f4de);
137 | sEmojisMap.put(0x1f4e2, R.mipmap.u1f4e2);
138 | sEmojisMap.put(0x1f556, R.mipmap.u1f556);
139 | sEmojisMap.put(0x23f0, R.mipmap.u23f0);
140 | sEmojisMap.put(0x23f3, R.mipmap.u23f3);
141 | sEmojisMap.put(0x1f4a3, R.mipmap.u1f4a3);
142 | sEmojisMap.put(0x1f52b, R.mipmap.u1f52b);
143 | sEmojisMap.put(0x1f48a, R.mipmap.u1f48a);
144 | sEmojisMap.put(0x1f680, R.mipmap.u1f680);
145 | sEmojisMap.put(0x1f30f, R.mipmap.u1f30f);
146 | }
147 |
148 | public static void addEmojis(Context context, Spannable text, int emojiSize, int emojiAlignment, int textSize, boolean useSystemDefault) {
149 | addEmojis(context, text, emojiSize, emojiAlignment, textSize, 0, -1, useSystemDefault);
150 | }
151 |
152 | public static void addEmojis(Context context, Spannable text, int emojiSize, int emojiAlignment, int textSize, int index, int length, boolean useSystemDefault) {
153 | if (useSystemDefault || text == null) {
154 | return;
155 | }
156 | int textLength = text.length();
157 | int textLengthToProcessMax = textLength - index;
158 | int textLengthToProcess = length < 0 || length >= textLengthToProcessMax ? textLength : (length + index);
159 | EmojiconSpan[] oldSpans = text.getSpans(0, textLength, EmojiconSpan.class);
160 | for (int i = 0; i < oldSpans.length; i++) {
161 | text.removeSpan(oldSpans[i]);
162 | }
163 | int skip;
164 | for (int i = index; i < textLengthToProcess; i += skip) {
165 | int icon = 0;
166 | int unicode = Character.codePointAt(text, i);
167 | skip = Character.charCount(unicode);
168 | if (unicode > 0xff) {
169 | icon = sEmojisMap.get(unicode);
170 | }
171 | if (icon > 0) {
172 | text.setSpan(new EmojiconSpan(context, icon, emojiSize, emojiAlignment, textSize), i, i + skip, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
173 | }
174 | }
175 | }
176 | }
177 |
--------------------------------------------------------------------------------
/library/src/main/java/com/green/hand/library/widget/EmojiBoard.java:
--------------------------------------------------------------------------------
1 | package com.green.hand.library.widget;
2 |
3 | import android.content.Context;
4 | import android.content.res.TypedArray;
5 | import androidx.viewpager.widget.PagerAdapter;
6 | import androidx.viewpager.widget.ViewPager;
7 | import androidx.recyclerview.widget.GridLayoutManager;
8 | import androidx.recyclerview.widget.RecyclerView;
9 | import android.util.AttributeSet;
10 | import android.view.LayoutInflater;
11 | import android.view.View;
12 | import android.view.ViewGroup;
13 | import android.widget.ImageView;
14 | import android.widget.LinearLayout;
15 |
16 | import com.green.hand.library.EmojiGridAdapter;
17 | import com.green.hand.library.EmojiManager;
18 | import com.green.hand.library.EmojiUtil;
19 | import com.green.hand.library.R;
20 |
21 | import java.util.ArrayList;
22 | import java.util.List;
23 |
24 |
25 | public class EmojiBoard extends LinearLayout {
26 |
27 | private ViewPager viewPager;
28 | private Indicator indicator;
29 | private OnEmojiItemClickListener listener;
30 | private int deleteIcon = -1;//删除按钮
31 | private int emojiIndicator = -1;//选中小圆点图片
32 | private int emojiIndicatorHover = -1;//未选中小圆点图片
33 | private Context context;
34 |
35 | public interface OnEmojiItemClickListener {
36 | void onClick(String code);
37 | }
38 |
39 | public EmojiBoard(Context context) {
40 | super(context);
41 | this.context = context;
42 | initView(null);
43 | }
44 |
45 | public EmojiBoard(Context context, AttributeSet attrs) {
46 | super(context, attrs);
47 | this.context = context;
48 | initView(attrs);
49 | }
50 |
51 | public EmojiBoard(Context context, AttributeSet attrs, int defStyleAttr) {
52 | super(context, attrs, defStyleAttr);
53 | this.context = context;
54 | initView(attrs);
55 | }
56 |
57 | private void initView(AttributeSet attrs) {
58 | LayoutInflater.from(getContext()).inflate(R.layout.input_emoji_board, this);
59 | viewPager = findViewById(R.id.view_pager);
60 | indicator = new Indicator((ViewGroup) findViewById(R.id.indicator));
61 | viewPager.setAdapter(new EmojiPageAdapter());
62 | viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
63 | @Override
64 | public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
65 | }
66 |
67 | @Override
68 | public void onPageSelected(int position) {
69 | indicator.setSelected(position);
70 | }
71 |
72 | @Override
73 | public void onPageScrollStateChanged(int state) {
74 | }
75 | });
76 | if (attrs != null) {
77 | TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.EmojiBoard);
78 | deleteIcon = array.getResourceId(R.styleable.EmojiBoard_deleteIcon, -1);
79 | emojiIndicator = array.getResourceId(R.styleable.EmojiBoard_emojiIndicator, -1);
80 | emojiIndicatorHover = array.getResourceId(R.styleable.EmojiBoard_emojiIndicatorHover, -1);
81 | array.recycle();
82 | }
83 | }
84 |
85 | public void setItemClickListener(OnEmojiItemClickListener listener) {
86 | this.listener = listener;
87 | }
88 |
89 | private class EmojiPageAdapter extends PagerAdapter {
90 |
91 | private List viewContainer = new ArrayList<>();
92 |
93 | public EmojiPageAdapter() {
94 | int pageSize = EmojiUtil.getPageSize();
95 | for (int i = 0; i < pageSize; i++) {
96 | RecyclerView recyclerView = new RecyclerView(context);
97 | recyclerView.setLayoutManager(new GridLayoutManager(context, 7));
98 | final EmojiGridAdapter adapter = new EmojiGridAdapter();
99 | int start = i * (EmojiUtil.getOnePageSize());
100 | int endIndex = (i + 1) * (EmojiUtil.getOnePageSize());
101 | if (EmojiManager.getSize() < endIndex)//最后一页数量不够填充一页
102 | endIndex = EmojiManager.getSize();
103 | if (isInEditMode()) {
104 | return;
105 | }
106 | final List list = EmojiManager.getResourceList(start, endIndex);//获取每一页的数据量
107 | if (deleteIcon == -1)//每页数据后面添加一个删除按钮
108 | list.add(R.mipmap.input_emoji_delete);
109 | else
110 | list.add(deleteIcon);
111 | adapter.setResList(list);
112 | recyclerView.setAdapter(adapter);
113 | adapter.setOnEmojiClick(new EmojiGridAdapter.EmojiClick() {
114 | @Override
115 | public void onClick(int position) {
116 | if (listener != null) {
117 | String code = "";
118 | if (position == adapter.getItemCount() - 1) {//点击的为每页最后一个数据,即为删除按钮
119 | code = "/DEL";
120 | } else {
121 | int pos = viewPager.getCurrentItem() * (EmojiUtil.getOnePageSize()) + position;
122 | char[] chars = Character.toChars(EmojiManager.getCode(pos));
123 | for (int i = 0; i < chars.length; i++) {
124 | code += Character.toString(chars[i]);
125 | }
126 | }
127 | listener.onClick(code);
128 | }
129 | }
130 | });
131 | viewContainer.add(recyclerView);
132 | }
133 | }
134 |
135 | @Override
136 | public int getCount() {
137 | return viewContainer.size();
138 | }
139 |
140 | @Override
141 | public boolean isViewFromObject(View view, Object object) {
142 | return view == object;
143 | }
144 |
145 | @Override
146 | public Object instantiateItem(ViewGroup container, int position) {
147 | container.addView(viewContainer.get(position));
148 | return viewContainer.get(position);
149 | }
150 |
151 | @Override
152 | public void destroyItem(ViewGroup container, int position, Object object) {
153 | container.removeView((View) object);
154 | }
155 |
156 | }
157 |
158 | /**
159 | * 底部小圆点
160 | */
161 | private class Indicator {
162 | private ViewGroup rootView;
163 | private List imageList = new ArrayList<>();
164 |
165 | public Indicator(ViewGroup root) {
166 | rootView = root;
167 | int pageSize = EmojiUtil.getPageSize();
168 | for (int i = 0; i < pageSize; i++) {//多少页数据就有多少个小圆点
169 | ImageView imageView = new ImageView(getContext());
170 | LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
171 | int px = (int) (4 * context.getResources().getDisplayMetrics().density + 0.5f);//设置间距
172 | params.setMargins(px, 0, px, 0);
173 | imageView.setLayoutParams(params);
174 | if (i == 0) {
175 | if (emojiIndicatorHover == -1)
176 | imageView.setImageResource(R.mipmap.input_emoji_indicator_hover);
177 | else
178 | imageView.setImageResource(emojiIndicatorHover);
179 | } else {
180 | if (emojiIndicator == -1)
181 | imageView.setImageResource(R.mipmap.input_emoji_indicator);
182 | else
183 | imageView.setImageResource(emojiIndicator);
184 | }
185 | imageList.add(imageView);
186 | rootView.addView(imageView);
187 | }
188 | }
189 |
190 | public void setSelected(int position) {
191 | for (int i = 0; i < imageList.size(); i++) {
192 | if (i != position) {
193 | if (emojiIndicator == -1)
194 | imageList.get(i).setImageResource(R.mipmap.input_emoji_indicator);
195 | else
196 | imageList.get(i).setImageResource(emojiIndicator);
197 | } else {
198 | if (emojiIndicatorHover == -1)
199 | imageList.get(i).setImageResource(R.mipmap.input_emoji_indicator_hover);
200 | else
201 | imageList.get(i).setImageResource(emojiIndicatorHover);
202 | }
203 | }
204 | }
205 | }
206 |
207 | /**
208 | * 是否显示表情框
209 | */
210 | public void showBoard() {
211 | setVisibility(getVisibility() == VISIBLE ? GONE : VISIBLE);
212 | }
213 | }
214 |
--------------------------------------------------------------------------------
/library/src/main/res/values/emoji_map.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - @mipmap/u1f603
5 | - @mipmap/u1f600
6 | - @mipmap/u1f60a
7 | - @mipmap/u263a
8 | - @mipmap/u1f609
9 | - @mipmap/u1f60d
10 | - @mipmap/u1f618
11 | - @mipmap/u1f61a
12 | - @mipmap/u1f61c
13 | - @mipmap/u1f61d
14 | - @mipmap/u1f633
15 | - @mipmap/u1f601
16 | - @mipmap/u1f614
17 | - @mipmap/u1f60c
18 | - @mipmap/u1f12
19 | - @mipmap/u1f61f
20 | - @mipmap/u1f61e
21 | - @mipmap/u1f623
22 | - @mipmap/u1f622
23 | - @mipmap/u1f602
24 | - @mipmap/u1f62d
25 | - @mipmap/u1f62a
26 | - @mipmap/u1f630
27 | - @mipmap/u1f605
28 | - @mipmap/u1f613
29 | - @mipmap/u1f62b
30 | - @mipmap/u1f629
31 | - @mipmap/u1f628
32 | - @mipmap/u1f631
33 | - @mipmap/u1f621
34 | - @mipmap/u1f624
35 | - @mipmap/u1f616
36 | - @mipmap/u1f606
37 | - @mipmap/u1f60b
38 | - @mipmap/u1f637
39 | - @mipmap/u1f60e
40 | - @mipmap/u1f634
41 | - @mipmap/u1f632
42 | - @mipmap/u1f62e
43 | - @mipmap/u1f608
44 | - @mipmap/u1f47f
45 | - @mipmap/u1f62f
46 | - @mipmap/u1f62c
47 | - @mipmap/u1f615
48 | - @mipmap/u1f635
49 | - @mipmap/u1f636
50 | - @mipmap/u1f607
51 | - @mipmap/u1f60f
52 | - @mipmap/u1f611
53 | - @mipmap/u1f648
54 | - @mipmap/u1f649
55 | - @mipmap/u1f64a
56 | - @mipmap/u1f47d
57 | - @mipmap/u1f4a9
58 | - @mipmap/u2764
59 | - @mipmap/u1f494
60 | - @mipmap/u1f525
61 | - @mipmap/u1f4a2
62 | - @mipmap/u1f4a4
63 | - @mipmap/u1f6ab
64 | - @mipmap/u2b50
65 | - @mipmap/u26a1
66 | - @mipmap/u1f319
67 | - @mipmap/u2600
68 | - @mipmap/u26c5
69 | - @mipmap/u2601
70 | - @mipmap/u2744
71 | - @mipmap/u2614
72 | - @mipmap/u26c4
73 | - @mipmap/u1f44d
74 | - @mipmap/u1f44e
75 | - @mipmap/u1f44c
76 | - @mipmap/u1f44a
77 | - @mipmap/u270a
78 | - @mipmap/u270c
79 | - @mipmap/u270b
80 | - @mipmap/u1f64f
81 | - @mipmap/u261d
82 | - @mipmap/u1f44f
83 | - @mipmap/u1f91d
84 | - @mipmap/u1f4aa
85 | - @mipmap/u1f46a
86 | - @mipmap/u1f46b
87 | - @mipmap/u1f47c
88 | - @mipmap/u1f434
89 | - @mipmap/u1f436
90 | - @mipmap/u1f437
91 | - @mipmap/u1f47b
92 | - @mipmap/u1f339
93 | - @mipmap/u1f33b
94 | - @mipmap/u1f332
95 | - @mipmap/u1f384
96 | - @mipmap/u1f381
97 | - @mipmap/u1f389
98 | - @mipmap/u1f4b0
99 | - @mipmap/u1f382
100 | - @mipmap/u1f356
101 | - @mipmap/u1f35a
102 | - @mipmap/u1f366
103 | - @mipmap/u1f36b
104 | - @mipmap/u1f349
105 | - @mipmap/u1f377
106 | - @mipmap/u1f37b
107 | - @mipmap/u2615
108 | - @mipmap/u1f3c0
109 | - @mipmap/u26bd
110 | - @mipmap/u1f3c2
111 | - @mipmap/u1f6b2
112 | - @mipmap/u1f3a4
113 | - @mipmap/u1f3b5
114 | - @mipmap/u1f3b2
115 | - @mipmap/u1f004
116 | - @mipmap/u1f451
117 | - @mipmap/u1f484
118 | - @mipmap/u1f48b
119 | - @mipmap/u1f48d
120 | - @mipmap/u1f4da
121 | - @mipmap/u1f393
122 | - @mipmap/u270f
123 | - @mipmap/u1f3e1
124 | - @mipmap/u1f6bf
125 | - @mipmap/u1f4a1
126 | - @mipmap/u1f4de
127 | - @mipmap/u1f4e2
128 | - @mipmap/u1f556
129 | - @mipmap/u23f0
130 | - @mipmap/u23f3
131 | - @mipmap/u1f4a3
132 | - @mipmap/u1f52b
133 | - @mipmap/u1f48a
134 | - @mipmap/u1f680
135 | - @mipmap/u1f30f
136 |
137 |
138 |
139 | - 0x1f603
140 | - 0x1f600
141 | - 0x1f60a
142 | - 0x263a
143 | - 0x1f609
144 | - 0x1f60d
145 | - 0x1f618
146 | - 0x1f61a
147 | - 0x1f61c
148 | - 0x1f61d
149 | - 0x1f633
150 | - 0x1f601
151 | - 0x1f614
152 | - 0x1f60c
153 | - 0x1ff12
154 | - 0x1f61f
155 | - 0x1f61e
156 | - 0x1f623
157 | - 0x1f622
158 | - 0x1f602
159 | - 0x1f62d
160 | - 0x1f62a
161 | - 0x1f630
162 | - 0x1f605
163 | - 0x1f613
164 | - 0x1f62b
165 | - 0x1f629
166 | - 0x1f628
167 | - 0x1f631
168 | - 0x1f621
169 | - 0x1f624
170 | - 0x1f616
171 | - 0x1f606
172 | - 0x1f60b
173 | - 0x1f637
174 | - 0x1f60e
175 | - 0x1f634
176 | - 0x1f632
177 | - 0x1f62e
178 | - 0x1f608
179 | - 0x1f47f
180 | - 0x1f62f
181 | - 0x1f62c
182 | - 0x1f615
183 | - 0x1f635
184 | - 0x1f636
185 | - 0x1f607
186 | - 0x1f60f
187 | - 0x1f611
188 | - 0x1f648
189 | - 0x1f649
190 | - 0x1f64a
191 | - 0x1f47d
192 | - 0x1f4a9
193 | - 0x2764
194 | - 0x1f494
195 | - 0x1f525
196 | - 0x1f4a2
197 | - 0x1f4a4
198 | - 0x1f6ab
199 | - 0x2b50
200 | - 0x26a1
201 | - 0x1f319
202 | - 0x2600
203 | - 0x26c5
204 | - 0x2601
205 | - 0x2744
206 | - 0x2614
207 | - 0x26c4
208 | - 0x1f44d
209 | - 0x1f44e
210 | - 0x1f44c
211 | - 0x1f44a
212 | - 0x270a
213 | - 0x270c
214 | - 0x270b
215 | - 0x1f64f
216 | - 0x261d
217 | - 0x1f44f
218 | - 0x1f91d
219 | - 0x1f4aa
220 | - 0x1f46a
221 | - 0x1f46b
222 | - 0x1f47c
223 | - 0x1f434
224 | - 0x1f436
225 | - 0x1f437
226 | - 0x1f47b
227 | - 0x1f339
228 | - 0x1f33b
229 | - 0x1f332
230 | - 0x1f384
231 | - 0x1f381
232 | - 0x1f389
233 | - 0x1f4b0
234 | - 0x1f382
235 | - 0x1f356
236 | - 0x1f35a
237 | - 0x1f366
238 | - 0x1f36b
239 | - 0x1f349
240 | - 0x1f377
241 | - 0x1f37b
242 | - 0x2615
243 | - 0x1f3c0
244 | - 0x26bd
245 | - 0x1f3c2
246 | - 0x1f6b2
247 | - 0x1f3a4
248 | - 0x1f3b5
249 | - 0x1f3b2
250 | - 0x1f004
251 | - 0x1f451
252 | - 0x1f484
253 | - 0x1f48b
254 | - 0x1f48d
255 | - 0x1f4da
256 | - 0x1f393
257 | - 0x270f
258 | - 0x1f3e1
259 | - 0x1f6bf
260 | - 0x1f4a1
261 | - 0x1f4de
262 | - 0x1f4e2
263 | - 0x1f556
264 | - 0x23f0
265 | - 0x23f3
266 | - 0x1f4a3
267 | - 0x1f52b
268 | - 0x1f48a
269 | - 0x1f680
270 | - 0x1f30f
271 |
272 |
--------------------------------------------------------------------------------