| Trevor Johns | 1e032d5 | 2017-05-17 03:46:42 -0700 | [diff] [blame] | 1 | Android EmojiCompat Sample (Kotlin) |
| 2 | =================================== |
| 3 | |
| 4 | This sample demonstrates usage of EmojiCompat support library. You can use this library |
| 5 | to prevent your app from showing missing emoji characters in the form of tofu (□). You |
| 6 | can use either bundled or downloadable emoji fonts. This sample shows both usages. |
| 7 | |
| 8 | Introduction |
| 9 | ------------ |
| 10 | |
| 11 | The EmojiCompat support library aims to keep Android devices up to date with the latest emoji. It |
| 12 | prevents your app from showing missing emoji characters in the form of ☐, which indicates that your |
| 13 | device does not have a font to display the text. By using the EmojiCompat support library, your app |
| 14 | users do not need to wait for Android OS updates to get the latest emoji. |
| 15 | |
| 16 | For further detail, read [Emoji Compatibility][1] documentation. |
| 17 | |
| 18 | ### Configuration |
| 19 | |
| 20 | You need to first initialize EmojiCompat to load the metadata and the typeface. You can use either |
| 21 | bundled or downloadable fonts. |
| 22 | |
| 23 | #### Use downloadable fonts |
| 24 | |
| 25 | ***You need the beta version of Google Play Services to use this feature.*** Join |
| 26 | [Google Play Services Public Beta Program][4] and make sure you have v11 installed on your device |
| 27 | running Android O Developer Preview 2. |
| 28 | |
| 29 | For the downloadable font configuration, you need to create an instance of the [FontRequest][5] |
| 30 | class, and provide the font provider authority, the font provider package, the font query, and a |
| 31 | list of set of hashes for the certificates. For more information about FontRequest, refer to the |
| 32 | Downloadable Fonts documentation. You can then create an instance of |
| 33 | [FontRequestEmojiCompatConfig][6] and pass it to EmojiCompat.init(). |
| 34 | |
| 35 | ```java |
| 36 | final FontRequest fontRequest = new FontRequest( |
| 37 | "com.google.android.gms.fonts", |
| 38 | "com.google.android.gms", |
| 39 | "Noto Color Emoji Compat", |
| 40 | R.array.com_google_android_gms_fonts_certs); |
| 41 | EmojiCompat.init(new FontRequestEmojiCompatConfig(getApplicationContext(), fontRequest) |
| 42 | .setReplaceAll(true) |
| 43 | .registerInitCallback(new EmojiCompat.InitCallback() { |
| 44 | @Override |
| 45 | public void onInitialized() { |
| 46 | Log.i(TAG, "EmojiCompat initialized"); |
| 47 | } |
| 48 | |
| 49 | @Override |
| 50 | public void onFailed(@Nullable Throwable throwable) { |
| 51 | Log.e(TAG, "EmojiCompat initialization failed", throwable); |
| 52 | } |
| 53 | });) |
| 54 | ``` |
| 55 | |
| 56 | #### Use bundled font |
| 57 | |
| 58 | In order the use the bundled font, call init() method of [EmojiCompat][2] with an instance of |
| 59 | [BundledEmojiCompatConfig][3]. |
| 60 | |
| 61 | ### Use EmojiCompat |
| 62 | |
| 63 | #### Built-in views |
| 64 | |
| 65 | The easiest way to use EmojiCompat in your layout, is to use [EmojiAppCompatTextView][7], |
| 66 | [EmojiAppCompatEditText][8], or [EmojiAppCompatButton][9]. You can use them in your layout XMLs or |
| 67 | code. You can just set any text containing emoji and the widgets handle the rest. |
| 68 | |
| 69 | #### With regular TextViews |
| 70 | |
| 71 | If you want to use EmojiCompat with a regular TextView, retrieve an instance of EmojiCompat by |
| 72 | calling EmojiCompat.get() and call registerInitCallback method. You can pass an |
| 73 | EmojiCompat.InitCallback and use the EmojiCompat#process() method there to transform emoji text into |
| 74 | a backward-compatible format. |
| 75 | |
| 76 | #### With custom TextViews |
| 77 | |
| 78 | If you want to use EmojiCompat in your custom TextView, you can create an instance of |
| 79 | [EmojiTextViewHelper][10] and use it in some overridden methods, namely setFilters and setAllCaps. |
| 80 | [CustomTextView.java][11] shows what to do inside them. |
| 81 | |
| 82 | [1]: https://developer.android.com/preview/features/emoji-compat.html |
| 83 | [2]: https://developer.android.com/reference/android/support/text/emoji/EmojiCompat.html |
| 84 | [3]: https://developer.android.com/reference/android/support/text/emoji/bundled/BundledEmojiCompatConfig.html |
| 85 | [4]: https://developers.google.com/android/guides/beta-program |
| 86 | [5]: https://developer.android.com/reference/android/support/v4/provider/FontRequest.html |
| 87 | [6]: https://developer.android.com/reference/android/support/text/emoji/FontRequestEmojiCompatConfig.html |
| 88 | [7]: https://developer.android.com/reference/android/support/text/emoji/widget/EmojiAppCompatTextView.html |
| 89 | [8]: https://developer.android.com/reference/android/support/text/emoji/widget/EmojiAppCompatEditText.html |
| 90 | [9]: https://developer.android.com/reference/android/support/text/emoji/widget/EmojiAppCompatButton.html |
| 91 | [10]: https://developer.android.com/reference/android/support/text/emoji/widget/EmojiCompatViewHelper.html |
| 92 | [11]: https://github.com/googlesamples/android-EmojiCompat/blog/master/app/src/main/java/com/example/android/emojicompat/CustomTextView.java |
| 93 | |
| 94 | Pre-requisites |
| 95 | -------------- |
| 96 | |
| 97 | - Android SDK 25 |
| 98 | - Android Build Tools v25.0.3 |
| 99 | - Android Support Repository |
| 100 | |
| 101 | Screenshots |
| 102 | ------------- |
| 103 | |
| 104 | <img src="screenshots/1-main.png" height="400" alt="Screenshot"/> |
| 105 | |
| 106 | Getting Started |
| 107 | --------------- |
| 108 | |
| 109 | This sample uses the Gradle build system. To build this project, use the |
| 110 | "gradlew build" command or use "Import Project" in Android Studio. |
| 111 | |
| 112 | Support |
| 113 | ------- |
| 114 | |
| 115 | - Google+ Community: https://plus.google.com/communities/105153134372062985968 |
| 116 | - Stack Overflow: http://stackoverflow.com/questions/tagged/android |
| 117 | |
| 118 | If you've found an error in this sample, please file an issue: |
| 119 | https://github.com/googlesamples/android-EmojiCompat |
| 120 | |
| 121 | Patches are encouraged, and may be submitted by forking this project and |
| 122 | submitting a pull request through GitHub. Please see CONTRIBUTING.md for more details. |
| 123 | |
| 124 | License |
| 125 | ------- |
| 126 | |
| 127 | Copyright 2017 The Android Open Source Project, Inc. |
| 128 | |
| 129 | Licensed to the Apache Software Foundation (ASF) under one or more contributor |
| 130 | license agreements. See the NOTICE file distributed with this work for |
| 131 | additional information regarding copyright ownership. The ASF licenses this |
| 132 | file to you under the Apache License, Version 2.0 (the "License"); you may not |
| 133 | use this file except in compliance with the License. You may obtain a copy of |
| 134 | the License at |
| 135 | |
| 136 | http://www.apache.org/licenses/LICENSE-2.0 |
| 137 | |
| 138 | Unless required by applicable law or agreed to in writing, software |
| 139 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| 140 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| 141 | License for the specific language governing permissions and limitations under |
| 142 | the License. |