From e29bb92cfcfb287fc9c10eb20de721c2803c7eec Mon Sep 17 00:00:00 2001 From: Yuichi Araki Date: Tue, 16 May 2017 11:45:02 -0700 Subject: EmojiCompat: Add Kotlin implementation Test: Existing tests still pass Change-Id: I97870803a96237bef1b155626a2251aed5470cb0 --- views/EmojiCompat/kotlinApp/.gitignore | 1 + views/EmojiCompat/kotlinApp/build.gradle | 70 +++++++++++++++++++++ views/EmojiCompat/kotlinApp/proguard-rules.pro | 25 ++++++++ .../android/emojicompat/MainActivityTest.kt | 51 +++++++++++++++ .../kotlinApp/src/main/AndroidManifest.xml | 42 +++++++++++++ .../example/android/emojicompat/CustomTextView.kt | 68 ++++++++++++++++++++ .../android/emojicompat/EmojiCompatApplication.kt | 69 ++++++++++++++++++++ .../example/android/emojicompat/MainActivity.kt | 68 ++++++++++++++++++++ .../src/main/res/layout/activity_main.xml | 69 ++++++++++++++++++++ .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3545 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2182 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4598 bytes .../src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7372 bytes .../src/main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10555 bytes .../kotlinApp/src/main/res/values/colors.xml | 21 +++++++ .../kotlinApp/src/main/res/values/dimens.xml | 21 +++++++ .../kotlinApp/src/main/res/values/font_certs.xml | 32 ++++++++++ .../kotlinApp/src/main/res/values/strings.xml | 24 +++++++ .../kotlinApp/src/main/res/values/styles.xml | 25 ++++++++ views/EmojiCompat/settings.gradle | 1 + 20 files changed, 587 insertions(+) create mode 100644 views/EmojiCompat/kotlinApp/.gitignore create mode 100644 views/EmojiCompat/kotlinApp/build.gradle create mode 100644 views/EmojiCompat/kotlinApp/proguard-rules.pro create mode 100644 views/EmojiCompat/kotlinApp/src/androidTest/java/com/example/android/emojicompat/MainActivityTest.kt create mode 100644 views/EmojiCompat/kotlinApp/src/main/AndroidManifest.xml create mode 100644 views/EmojiCompat/kotlinApp/src/main/java/com/example/android/emojicompat/CustomTextView.kt create mode 100644 views/EmojiCompat/kotlinApp/src/main/java/com/example/android/emojicompat/EmojiCompatApplication.kt create mode 100644 views/EmojiCompat/kotlinApp/src/main/java/com/example/android/emojicompat/MainActivity.kt create mode 100644 views/EmojiCompat/kotlinApp/src/main/res/layout/activity_main.xml create mode 100644 views/EmojiCompat/kotlinApp/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 views/EmojiCompat/kotlinApp/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 views/EmojiCompat/kotlinApp/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 views/EmojiCompat/kotlinApp/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 views/EmojiCompat/kotlinApp/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 views/EmojiCompat/kotlinApp/src/main/res/values/colors.xml create mode 100644 views/EmojiCompat/kotlinApp/src/main/res/values/dimens.xml create mode 100644 views/EmojiCompat/kotlinApp/src/main/res/values/font_certs.xml create mode 100644 views/EmojiCompat/kotlinApp/src/main/res/values/strings.xml create mode 100644 views/EmojiCompat/kotlinApp/src/main/res/values/styles.xml (limited to 'views') diff --git a/views/EmojiCompat/kotlinApp/.gitignore b/views/EmojiCompat/kotlinApp/.gitignore new file mode 100644 index 00000000..796b96d1 --- /dev/null +++ b/views/EmojiCompat/kotlinApp/.gitignore @@ -0,0 +1 @@ +/build diff --git a/views/EmojiCompat/kotlinApp/build.gradle b/views/EmojiCompat/kotlinApp/build.gradle new file mode 100644 index 00000000..af061cdd --- /dev/null +++ b/views/EmojiCompat/kotlinApp/build.gradle @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +buildscript { + ext { + kotlin_version = '1.1.2-3' + } + repositories { + jcenter() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' + +ext { + supportLibVersion = '26.0.0-beta1' +} + +android { + compileSdkVersion 'android-O' + buildToolsVersion "26.0.0-rc1" + defaultConfig { + applicationId "com.example.android.emojicompat" + minSdkVersion 'O' + targetSdkVersion 'O' + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + configurations.all { + resolutionStrategy.force "com.android.support:support-annotations:$supportLibVersion" + } +} + +dependencies { + // Support Libraries + compile "com.android.support:appcompat-v7:$supportLibVersion" + compile "com.android.support:support-emoji:$supportLibVersion" + compile "com.android.support:support-emoji-appcompat:$supportLibVersion" + compile "com.android.support:support-emoji-bundled:$supportLibVersion" + + // Test + testCompile 'junit:junit:4.12' + androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' + + compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" +} diff --git a/views/EmojiCompat/kotlinApp/proguard-rules.pro b/views/EmojiCompat/kotlinApp/proguard-rules.pro new file mode 100644 index 00000000..06b266fc --- /dev/null +++ b/views/EmojiCompat/kotlinApp/proguard-rules.pro @@ -0,0 +1,25 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /usr/local/google/home/yaraki/Android/Sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/views/EmojiCompat/kotlinApp/src/androidTest/java/com/example/android/emojicompat/MainActivityTest.kt b/views/EmojiCompat/kotlinApp/src/androidTest/java/com/example/android/emojicompat/MainActivityTest.kt new file mode 100644 index 00000000..e4f93d5d --- /dev/null +++ b/views/EmojiCompat/kotlinApp/src/androidTest/java/com/example/android/emojicompat/MainActivityTest.kt @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.emojicompat + +import android.support.test.espresso.Espresso.onView +import android.support.test.espresso.assertion.ViewAssertions.matches +import android.support.test.espresso.matcher.ViewMatchers.isDisplayed +import android.support.test.espresso.matcher.ViewMatchers.withText +import android.support.test.filters.MediumTest +import android.support.test.rule.ActivityTestRule +import android.support.test.runner.AndroidJUnit4 +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + + +@RunWith(AndroidJUnit4::class) +class MainActivityTest { + + @Rule @JvmField + val rule = ActivityTestRule(MainActivity::class.java) + + @Test + @MediumTest + @Throws(Exception::class) + fun allTextsDisplayed() { + arrayOf(R.string.emoji_text_view, + R.string.emoji_edit_text, + R.string.emoji_button, + R.string.regular_text_view, + R.string.custom_text_view).forEach { + val text = rule.activity.getString(it, MainActivity.EMOJI) + onView(withText(text)).check(matches(isDisplayed())) + } + } + +} diff --git a/views/EmojiCompat/kotlinApp/src/main/AndroidManifest.xml b/views/EmojiCompat/kotlinApp/src/main/AndroidManifest.xml new file mode 100644 index 00000000..4f2453d4 --- /dev/null +++ b/views/EmojiCompat/kotlinApp/src/main/AndroidManifest.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + diff --git a/views/EmojiCompat/kotlinApp/src/main/java/com/example/android/emojicompat/CustomTextView.kt b/views/EmojiCompat/kotlinApp/src/main/java/com/example/android/emojicompat/CustomTextView.kt new file mode 100644 index 00000000..3da4e11e --- /dev/null +++ b/views/EmojiCompat/kotlinApp/src/main/java/com/example/android/emojicompat/CustomTextView.kt @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.emojicompat + +import android.content.Context +import android.support.text.emoji.widget.EmojiTextViewHelper +import android.support.v7.widget.AppCompatTextView +import android.text.InputFilter +import android.util.AttributeSet + + +/** + * A sample implementation of custom TextView. + + * + * You can use [EmojiTextViewHelper] to make your custom TextView compatible with + * EmojiCompat. + */ +class CustomTextView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0) + : AppCompatTextView(context, attrs, defStyleAttr) { + + private var mEmojiTextViewHelper: EmojiTextViewHelper? = null + + init { + emojiTextViewHelper.updateTransformationMethod() + } + + override fun setFilters(filters: Array) { + super.setFilters(emojiTextViewHelper.getFilters(filters)) + } + + override fun setAllCaps(allCaps: Boolean) { + super.setAllCaps(allCaps) + emojiTextViewHelper.setAllCaps(allCaps) + } + + /** + * Returns the [EmojiTextViewHelper] for this TextView. + + * + * This property can be called from super constructors through [#setFilters] or [#setAllCaps]. + */ + private val emojiTextViewHelper: EmojiTextViewHelper + get() { + if (mEmojiTextViewHelper == null) { + mEmojiTextViewHelper = EmojiTextViewHelper(this) + } + return mEmojiTextViewHelper as EmojiTextViewHelper + } + +} diff --git a/views/EmojiCompat/kotlinApp/src/main/java/com/example/android/emojicompat/EmojiCompatApplication.kt b/views/EmojiCompat/kotlinApp/src/main/java/com/example/android/emojicompat/EmojiCompatApplication.kt new file mode 100644 index 00000000..3f03de08 --- /dev/null +++ b/views/EmojiCompat/kotlinApp/src/main/java/com/example/android/emojicompat/EmojiCompatApplication.kt @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.emojicompat + +import android.app.Application +import android.support.text.emoji.EmojiCompat +import android.support.text.emoji.FontRequestEmojiCompatConfig +import android.support.text.emoji.bundled.BundledEmojiCompatConfig +import android.support.v4.provider.FontRequest +import android.util.Log + + +/** + * This application uses EmojiCompat. + */ +class EmojiCompatApplication : Application() { + + override fun onCreate() { + super.onCreate() + + val config: EmojiCompat.Config + if (USE_BUNDLED_EMOJI) { + // Use the bundled font for EmojiCompat + config = BundledEmojiCompatConfig(applicationContext) + } else { + // Use a downloadable font for EmojiCompat + val fontRequest = FontRequest( + "com.google.android.gms.fonts", + "com.google.android.gms", + "Noto Color Emoji Compat", + R.array.com_google_android_gms_fonts_certs) + config = FontRequestEmojiCompatConfig(applicationContext, fontRequest) + .setReplaceAll(true) + .registerInitCallback(object : EmojiCompat.InitCallback() { + override fun onInitialized() { + Log.i(TAG, "EmojiCompat initialized") + } + + override fun onFailed(throwable: Throwable?) { + Log.e(TAG, "EmojiCompat initialization failed", throwable) + } + }) + } + EmojiCompat.init(config) + } + + companion object { + + private val TAG = "EmojiCompatApplication" + + /** Change this to `false` when you want to use the downloadable Emoji font. */ + private val USE_BUNDLED_EMOJI = true + } + +} diff --git a/views/EmojiCompat/kotlinApp/src/main/java/com/example/android/emojicompat/MainActivity.kt b/views/EmojiCompat/kotlinApp/src/main/java/com/example/android/emojicompat/MainActivity.kt new file mode 100644 index 00000000..7cc90330 --- /dev/null +++ b/views/EmojiCompat/kotlinApp/src/main/java/com/example/android/emojicompat/MainActivity.kt @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.emojicompat + +import android.os.Bundle +import android.support.text.emoji.EmojiCompat +import android.support.v7.app.AppCompatActivity +import android.widget.TextView + + +class MainActivity : AppCompatActivity() { + + companion object { + // [U+1F469] (WOMAN) + [U+200D] (ZERO WIDTH JOINER) + [U+1F4BB] (PERSONAL COMPUTER) + private val WOMAN_TECHNOLOGIST = "\uD83D\uDC69\u200D\uD83D\uDCBB" + + // [U+1F469] (WOMAN) + [U+200D] (ZERO WIDTH JOINER) + [U+1F3A4] (MICROPHONE) + private val WOMAN_SINGER = "\uD83D\uDC69\u200D\uD83C\uDFA4" + + @JvmField + val EMOJI = WOMAN_TECHNOLOGIST + " " + WOMAN_SINGER + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + + // TextView variant provided by EmojiCompat library + val emojiTextView: TextView = findViewById(R.id.emoji_text_view) + emojiTextView.text = getString(R.string.emoji_text_view, EMOJI) + + // EditText variant provided by EmojiCompat library + val emojiEditText: TextView = findViewById(R.id.emoji_edit_text) + emojiEditText.text = getString(R.string.emoji_edit_text, EMOJI) + + // Button variant provided by EmojiCompat library + val emojiButton: TextView = findViewById(R.id.emoji_button) + emojiButton.text = getString(R.string.emoji_button, EMOJI) + + // Regular TextView without EmojiCompat support; you have to manually process the text + val regularTextView: TextView = findViewById(R.id.regular_text_view) + EmojiCompat.get().registerInitCallback(object : EmojiCompat.InitCallback() { + override fun onInitialized() { + val compat = EmojiCompat.get() + regularTextView.text = compat.process(getString(R.string.regular_text_view, EMOJI)) + } + }) + + // Custom TextView + val customTextView: TextView = findViewById(R.id.emoji_custom_text_view) + customTextView.text = getString(R.string.custom_text_view, EMOJI) + } + +} diff --git a/views/EmojiCompat/kotlinApp/src/main/res/layout/activity_main.xml b/views/EmojiCompat/kotlinApp/src/main/res/layout/activity_main.xml new file mode 100644 index 00000000..5be684f5 --- /dev/null +++ b/views/EmojiCompat/kotlinApp/src/main/res/layout/activity_main.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/views/EmojiCompat/kotlinApp/src/main/res/mipmap-hdpi/ic_launcher.png b/views/EmojiCompat/kotlinApp/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 00000000..9e0d97a9 Binary files /dev/null and b/views/EmojiCompat/kotlinApp/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/views/EmojiCompat/kotlinApp/src/main/res/mipmap-mdpi/ic_launcher.png b/views/EmojiCompat/kotlinApp/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 00000000..79d226b3 Binary files /dev/null and b/views/EmojiCompat/kotlinApp/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/views/EmojiCompat/kotlinApp/src/main/res/mipmap-xhdpi/ic_launcher.png b/views/EmojiCompat/kotlinApp/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 00000000..42716ab9 Binary files /dev/null and b/views/EmojiCompat/kotlinApp/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/views/EmojiCompat/kotlinApp/src/main/res/mipmap-xxhdpi/ic_launcher.png b/views/EmojiCompat/kotlinApp/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 00000000..4be1ff9b Binary files /dev/null and b/views/EmojiCompat/kotlinApp/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/views/EmojiCompat/kotlinApp/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/views/EmojiCompat/kotlinApp/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 00000000..ea78de30 Binary files /dev/null and b/views/EmojiCompat/kotlinApp/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/views/EmojiCompat/kotlinApp/src/main/res/values/colors.xml b/views/EmojiCompat/kotlinApp/src/main/res/values/colors.xml new file mode 100644 index 00000000..98ea8fa3 --- /dev/null +++ b/views/EmojiCompat/kotlinApp/src/main/res/values/colors.xml @@ -0,0 +1,21 @@ + + + + #3F51B5 + #303F9F + #009688 + diff --git a/views/EmojiCompat/kotlinApp/src/main/res/values/dimens.xml b/views/EmojiCompat/kotlinApp/src/main/res/values/dimens.xml new file mode 100644 index 00000000..04e76f04 --- /dev/null +++ b/views/EmojiCompat/kotlinApp/src/main/res/values/dimens.xml @@ -0,0 +1,21 @@ + + + + 16dp + 8dp + 20sp + diff --git a/views/EmojiCompat/kotlinApp/src/main/res/values/font_certs.xml b/views/EmojiCompat/kotlinApp/src/main/res/values/font_certs.xml new file mode 100644 index 00000000..d63462fc --- /dev/null +++ b/views/EmojiCompat/kotlinApp/src/main/res/values/font_certs.xml @@ -0,0 +1,32 @@ + + + + + @array/com_google_android_gms_fonts_certs_dev + @array/com_google_android_gms_fonts_certs_prod + + + + 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 + + + diff --git a/views/EmojiCompat/kotlinApp/src/main/res/values/strings.xml b/views/EmojiCompat/kotlinApp/src/main/res/values/strings.xml new file mode 100644 index 00000000..ed7068ce --- /dev/null +++ b/views/EmojiCompat/kotlinApp/src/main/res/values/strings.xml @@ -0,0 +1,24 @@ + + + + EmojiCompat + Emoji TextView %s + Emoji EditText %s + Emoji Button %s + Regular TextView %s + Custom TextView %s + diff --git a/views/EmojiCompat/kotlinApp/src/main/res/values/styles.xml b/views/EmojiCompat/kotlinApp/src/main/res/values/styles.xml new file mode 100644 index 00000000..e09b3882 --- /dev/null +++ b/views/EmojiCompat/kotlinApp/src/main/res/values/styles.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/views/EmojiCompat/settings.gradle b/views/EmojiCompat/settings.gradle index e7b4def4..9df712ea 100644 --- a/views/EmojiCompat/settings.gradle +++ b/views/EmojiCompat/settings.gradle @@ -1 +1,2 @@ include ':app' +include ':kotlinApp' -- cgit v1.2.3