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