Fix lint baseline in emoji2
- Applied nullability annotations universally to annotate existing
behavior
- Supressed warnings for kotlin bean style
- Supressed warnings for api21 ctors
Refactored test constructor in MetadaRepository to allow new
nullability.
No changes to behavior, and no changes in nullability.
Bug: b/178035684
Test: automated manual
Change-Id: I8a29d4da785ff72ebcede6eb5750c8dd5c919965
diff --git a/emoji2/emoji2-bundled/lint-baseline.xml b/emoji2/emoji2-bundled/lint-baseline.xml
deleted file mode 100644
index 27e26a8..0000000
--- a/emoji2/emoji2-bundled/lint-baseline.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="5" by="lint 4.2.0-beta04" client="gradle" variant="debug" version="4.2.0-beta04">
-
-</issues>
diff --git a/emoji2/emoji2-views-core/lint-baseline.xml b/emoji2/emoji2-views-core/lint-baseline.xml
deleted file mode 100644
index b4d30ed..0000000
--- a/emoji2/emoji2-views-core/lint-baseline.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="5" by="lint 4.2.0-beta04" client="gradle" variant="debug" version="4.2.0-beta04">
-
- <issue
- id="UnsafeNewApiCall"
- message="This call is to a method from API 19, the call containing class androidx.emoji2.helpers.EmojiInputFilter.InitCallbackImpl is not annotated with @RequiresApi(x) where x is at least 19. Either annotate the containing class with at least @RequiresApi(19) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(19)."
- errorLine1=" if (textView != null && textView.isAttachedToWindow()) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/helpers/EmojiInputFilter.java"
- line="110"
- column="46"/>
- </issue>
-
- <issue
- id="UnsafeNewApiCall"
- message="This call is to a method from API 19, the call containing class androidx.emoji2.helpers.EmojiTextWatcher.InitCallbackImpl is not annotated with @RequiresApi(x) where x is at least 19. Either annotate the containing class with at least @RequiresApi(19) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(19)."
- errorLine1=" if (editText != null && editText.isAttachedToWindow()) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/helpers/EmojiTextWatcher.java"
- line="122"
- column="46"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" final KeyEvent event) {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/helpers/EmojiKeyListener.java"
- line="80"
- column="23"/>
- </issue>
-
-</issues>
diff --git a/emoji2/emoji2-views-core/src/androidTest/AndroidManifest.xml b/emoji2/emoji2-views-core/src/androidTest/AndroidManifest.xml
index ed2f1d2..6c30771 100644
--- a/emoji2/emoji2-views-core/src/androidTest/AndroidManifest.xml
+++ b/emoji2/emoji2-views-core/src/androidTest/AndroidManifest.xml
@@ -13,8 +13,7 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="androidx.emoji2.helpers">
+<manifest package="androidx.emoji2.helpers">
<application>
</application>
diff --git a/emoji2/emoji2-views-core/src/main/java/androidx/emoji2/helpers/EmojiInputFilter.java b/emoji2/emoji2-views-core/src/main/java/androidx/emoji2/helpers/EmojiInputFilter.java
index be05e42..ccb3033 100644
--- a/emoji2/emoji2-views-core/src/main/java/androidx/emoji2/helpers/EmojiInputFilter.java
+++ b/emoji2/emoji2-views-core/src/main/java/androidx/emoji2/helpers/EmojiInputFilter.java
@@ -96,6 +96,7 @@
return mInitCallback;
}
+ @RequiresApi(19)
private static class InitCallbackImpl extends InitCallback {
private final Reference<TextView> mViewRef;
diff --git a/emoji2/emoji2-views-core/src/main/java/androidx/emoji2/helpers/EmojiKeyListener.java b/emoji2/emoji2-views-core/src/main/java/androidx/emoji2/helpers/EmojiKeyListener.java
index fcd8e0a..a5b2129 100644
--- a/emoji2/emoji2-views-core/src/main/java/androidx/emoji2/helpers/EmojiKeyListener.java
+++ b/emoji2/emoji2-views-core/src/main/java/androidx/emoji2/helpers/EmojiKeyListener.java
@@ -77,7 +77,7 @@
public static class EmojiCompatHandleKeyDownHelper {
public boolean handleKeyDown(@NonNull final Editable editable, final int keyCode,
- final KeyEvent event) {
+ @NonNull final KeyEvent event) {
return EmojiCompat.handleOnKeyDown(editable, keyCode, event);
}
}
diff --git a/emoji2/emoji2-views-core/src/main/java/androidx/emoji2/helpers/EmojiTextWatcher.java b/emoji2/emoji2-views-core/src/main/java/androidx/emoji2/helpers/EmojiTextWatcher.java
index d6676c1..43887bb 100644
--- a/emoji2/emoji2-views-core/src/main/java/androidx/emoji2/helpers/EmojiTextWatcher.java
+++ b/emoji2/emoji2-views-core/src/main/java/androidx/emoji2/helpers/EmojiTextWatcher.java
@@ -108,6 +108,7 @@
return mInitCallback;
}
+ @RequiresApi(19)
private static class InitCallbackImpl extends InitCallback {
private final Reference<EditText> mViewRef;
diff --git a/emoji2/emoji2-views/lint-baseline.xml b/emoji2/emoji2-views/lint-baseline.xml
deleted file mode 100644
index 2f76b6b..0000000
--- a/emoji2/emoji2-views/lint-baseline.xml
+++ /dev/null
@@ -1,664 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="5" by="lint 4.2.0-beta04" client="gradle" variant="debug" version="4.2.0-beta04">
-
- <issue
- id="UnsafeNewApiCall"
- message="This call is to a method from API 21, the call containing class androidx.emoji2.widget.EmojiButton is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
- errorLine1=" super(context, attrs, defStyleAttr, defStyleRes);"
- errorLine2=" ~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiButton.java"
- line="59"
- column="9"/>
- </issue>
-
- <issue
- id="UnsafeNewApiCall"
- message="This call is to a method from API 21, the call containing class androidx.emoji2.widget.EmojiEditText is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
- errorLine1=" super(context, attrs, defStyleAttr, defStyleRes);"
- errorLine2=" ~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiEditText.java"
- line="66"
- column="9"/>
- </issue>
-
- <issue
- id="UnsafeNewApiCall"
- message="This call is to a method from API 21, the call containing class androidx.emoji2.widget.EmojiExtractEditText is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
- errorLine1=" super(context, attrs, defStyleAttr, defStyleRes);"
- errorLine2=" ~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiExtractEditText.java"
- line="75"
- column="9"/>
- </issue>
-
- <issue
- id="UnsafeNewApiCall"
- message="This call is to a method from API 21, the call containing class androidx.emoji2.widget.EmojiExtractTextLayout is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
- errorLine1=" super(context, attrs, defStyleAttr, defStyleRes);"
- errorLine2=" ~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiExtractTextLayout.java"
- line="99"
- column="9"/>
- </issue>
-
- <issue
- id="UnsafeNewApiCall"
- message="This call is to a method from API 21, the call containing class androidx.emoji2.widget.EmojiTextView is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
- errorLine1=" super(context, attrs, defStyleAttr, defStyleRes);"
- errorLine2=" ~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiTextView.java"
- line="59"
- column="9"/>
- </issue>
-
- <issue
- id="UnsafeNewApiCall"
- message="This call is to a method from API 21, the call containing class androidx.emoji2.widget.ExtractButtonCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
- errorLine1=" super(context, attrs, defStyleAttr, defStyleRes);"
- errorLine2=" ~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/ExtractButtonCompat.java"
- line="53"
- column="9"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EditTextAttributeHelper(@NonNull View view, AttributeSet attrs, int defStyleAttr,"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EditTextAttributeHelper.java"
- line="40"
- column="56"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiButton(Context context) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiButton.java"
- line="42"
- column="24"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiButton(Context context, AttributeSet attrs) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiButton.java"
- line="47"
- column="24"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiButton(Context context, AttributeSet attrs) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiButton.java"
- line="47"
- column="41"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiButton(Context context, AttributeSet attrs, int defStyleAttr) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiButton.java"
- line="52"
- column="24"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiButton(Context context, AttributeSet attrs, int defStyleAttr) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiButton.java"
- line="52"
- column="41"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiButton.java"
- line="58"
- column="24"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiButton.java"
- line="58"
- column="41"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void setFilters(InputFilter[] filters) {"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiButton.java"
- line="71"
- column="28"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void setCustomSelectionActionModeCallback(ActionMode.Callback actionModeCallback) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiButton.java"
- line="93"
- column="54"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiEditText(Context context) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiEditText.java"
- line="49"
- column="26"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiEditText(Context context, AttributeSet attrs) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiEditText.java"
- line="54"
- column="26"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiEditText(Context context, AttributeSet attrs) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiEditText.java"
- line="54"
- column="43"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiEditText(Context context, AttributeSet attrs, int defStyleAttr) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiEditText.java"
- line="59"
- column="26"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiEditText(Context context, AttributeSet attrs, int defStyleAttr) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiEditText.java"
- line="59"
- column="43"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiEditText.java"
- line="65"
- column="26"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiEditText.java"
- line="65"
- column="43"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiEditText.java"
- line="89"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiEditText.java"
- line="89"
- column="52"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void setCustomSelectionActionModeCallback(ActionMode.Callback actionModeCallback) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiEditText.java"
- line="134"
- column="54"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiExtractEditText(Context context) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiExtractEditText.java"
- line="57"
- column="33"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiExtractEditText(Context context, AttributeSet attrs) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiExtractEditText.java"
- line="62"
- column="33"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiExtractEditText(Context context, AttributeSet attrs) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiExtractEditText.java"
- line="62"
- column="50"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiExtractEditText(Context context, AttributeSet attrs, int defStyleAttr) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiExtractEditText.java"
- line="67"
- column="33"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiExtractEditText(Context context, AttributeSet attrs, int defStyleAttr) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiExtractEditText.java"
- line="67"
- column="50"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiExtractEditText(Context context, AttributeSet attrs, int defStyleAttr,"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiExtractEditText.java"
- line="73"
- column="33"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiExtractEditText(Context context, AttributeSet attrs, int defStyleAttr,"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiExtractEditText.java"
- line="73"
- column="50"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiExtractEditText.java"
- line="98"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiExtractEditText.java"
- line="98"
- column="52"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void setCustomSelectionActionModeCallback(ActionMode.Callback actionModeCallback) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiExtractEditText.java"
- line="162"
- column="54"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiExtractTextLayout(Context context) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiExtractTextLayout.java"
- line="79"
- column="35"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiExtractTextLayout(Context context,"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiExtractTextLayout.java"
- line="84"
- column="35"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiExtractTextLayout(Context context,"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiExtractTextLayout.java"
- line="90"
- column="35"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiExtractTextLayout(Context context, AttributeSet attrs,"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiExtractTextLayout.java"
- line="97"
- column="35"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiExtractTextLayout(Context context, AttributeSet attrs,"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiExtractTextLayout.java"
- line="97"
- column="52"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void onUpdateExtractingViews(InputMethodService inputMethodService, EditorInfo ei) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiExtractTextLayout.java"
- line="163"
- column="41"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void onUpdateExtractingViews(InputMethodService inputMethodService, EditorInfo ei) {"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiExtractTextLayout.java"
- line="163"
- column="80"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiTextView(Context context) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiTextView.java"
- line="42"
- column="26"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiTextView(Context context, AttributeSet attrs) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiTextView.java"
- line="47"
- column="26"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiTextView(Context context, AttributeSet attrs) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiTextView.java"
- line="47"
- column="43"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiTextView(Context context, AttributeSet attrs, int defStyleAttr) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiTextView.java"
- line="52"
- column="26"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiTextView(Context context, AttributeSet attrs, int defStyleAttr) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiTextView.java"
- line="52"
- column="43"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiTextView.java"
- line="58"
- column="26"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public EmojiTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiTextView.java"
- line="58"
- column="43"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void setFilters(InputFilter[] filters) {"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiTextView.java"
- line="71"
- column="28"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void setCustomSelectionActionModeCallback(ActionMode.Callback actionModeCallback) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/EmojiTextView.java"
- line="93"
- column="54"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public ExtractButtonCompat(Context context) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/ExtractButtonCompat.java"
- line="38"
- column="32"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public ExtractButtonCompat(Context context, AttributeSet attrs) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/ExtractButtonCompat.java"
- line="42"
- column="32"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public ExtractButtonCompat(Context context, AttributeSet attrs) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/ExtractButtonCompat.java"
- line="42"
- column="49"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public ExtractButtonCompat(Context context, AttributeSet attrs, int defStyleAttr) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/ExtractButtonCompat.java"
- line="46"
- column="32"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public ExtractButtonCompat(Context context, AttributeSet attrs, int defStyleAttr) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/ExtractButtonCompat.java"
- line="46"
- column="49"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public ExtractButtonCompat(Context context, AttributeSet attrs, int defStyleAttr,"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/ExtractButtonCompat.java"
- line="51"
- column="32"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public ExtractButtonCompat(Context context, AttributeSet attrs, int defStyleAttr,"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/ExtractButtonCompat.java"
- line="51"
- column="49"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void setCustomSelectionActionModeCallback(ActionMode.Callback actionModeCallback) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/widget/ExtractButtonCompat.java"
- line="70"
- column="54"/>
- </issue>
-
-</issues>
diff --git a/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EditTextAttributeHelper.java b/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EditTextAttributeHelper.java
index cc397a2..1fee3e1 100644
--- a/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EditTextAttributeHelper.java
+++ b/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EditTextAttributeHelper.java
@@ -24,6 +24,7 @@
import android.view.View;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.emoji2.text.EmojiDefaults;
@@ -36,8 +37,8 @@
public class EditTextAttributeHelper {
private int mMaxEmojiCount;
- public EditTextAttributeHelper(@NonNull View view, AttributeSet attrs, int defStyleAttr,
- int defStyleRes) {
+ public EditTextAttributeHelper(@NonNull View view, @Nullable AttributeSet attrs,
+ int defStyleAttr, int defStyleRes) {
if (attrs != null) {
final Context context = view.getContext();
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.EmojiEditText,
diff --git a/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EmojiButton.java b/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EmojiButton.java
index 737c951..1b20ab5 100644
--- a/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EmojiButton.java
+++ b/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EmojiButton.java
@@ -15,6 +15,7 @@
*/
package androidx.emoji2.widget;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Build;
import android.text.InputFilter;
@@ -22,6 +23,8 @@
import android.view.ActionMode;
import android.widget.Button;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.core.widget.TextViewCompat;
import androidx.emoji2.helpers.EmojiTextViewHelper;
@@ -39,23 +42,25 @@
*/
private boolean mInitialized;
- public EmojiButton(Context context) {
+ public EmojiButton(@NonNull Context context) {
super(context);
init();
}
- public EmojiButton(Context context, AttributeSet attrs) {
+ public EmojiButton(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
- public EmojiButton(Context context, AttributeSet attrs, int defStyleAttr) {
+ public EmojiButton(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
+ @SuppressLint("UnsafeNewApiCall")
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
- public EmojiButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ public EmojiButton(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr,
+ int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
@@ -68,7 +73,7 @@
}
@Override
- public void setFilters(InputFilter[] filters) {
+ public void setFilters(@NonNull InputFilter[] filters) {
super.setFilters(getEmojiTextViewHelper().getFilters(filters));
}
@@ -90,7 +95,9 @@
* {@link TextViewCompat#setCustomSelectionActionModeCallback(TextView, ActionMode.Callback)}
*/
@Override
- public void setCustomSelectionActionModeCallback(ActionMode.Callback actionModeCallback) {
+ public void setCustomSelectionActionModeCallback(
+ @NonNull ActionMode.Callback actionModeCallback
+ ) {
super.setCustomSelectionActionModeCallback(TextViewCompat
.wrapCustomSelectionActionModeCallback(this, actionModeCallback));
}
diff --git a/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EmojiEditText.java b/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EmojiEditText.java
index 722fd95..1dae701 100644
--- a/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EmojiEditText.java
+++ b/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EmojiEditText.java
@@ -15,6 +15,7 @@
*/
package androidx.emoji2.widget;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Build;
import android.text.method.KeyListener;
@@ -25,6 +26,7 @@
import android.widget.EditText;
import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.core.widget.TextViewCompat;
@@ -46,23 +48,25 @@
*/
private boolean mInitialized;
- public EmojiEditText(Context context) {
+ public EmojiEditText(@NonNull Context context) {
super(context);
init(null /*attrs*/, 0 /*defStyleAttr*/, 0 /*defStyleRes*/);
}
- public EmojiEditText(Context context, AttributeSet attrs) {
+ public EmojiEditText(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(attrs, android.R.attr.editTextStyle, 0 /*defStyleRes*/);
}
- public EmojiEditText(Context context, AttributeSet attrs, int defStyleAttr) {
+ public EmojiEditText(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(attrs, defStyleAttr, 0 /*defStyleRes*/);
}
+ @SuppressLint("UnsafeNewApiCall")
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
- public EmojiEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ public EmojiEditText(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr,
+ int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(attrs, defStyleAttr, defStyleRes);
}
@@ -85,8 +89,9 @@
super.setKeyListener(keyListener);
}
+ @Nullable
@Override
- public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
+ public InputConnection onCreateInputConnection(@NonNull EditorInfo outAttrs) {
final InputConnection inputConnection = super.onCreateInputConnection(outAttrs);
return getEmojiEditTextHelper().onCreateInputConnection(inputConnection, outAttrs);
}
@@ -131,7 +136,9 @@
* {@link TextViewCompat#setCustomSelectionActionModeCallback(TextView, ActionMode.Callback)}
*/
@Override
- public void setCustomSelectionActionModeCallback(ActionMode.Callback actionModeCallback) {
+ public void setCustomSelectionActionModeCallback(
+ @NonNull ActionMode.Callback actionModeCallback
+ ) {
super.setCustomSelectionActionModeCallback(TextViewCompat
.wrapCustomSelectionActionModeCallback(this, actionModeCallback));
}
diff --git a/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EmojiExtractEditText.java b/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EmojiExtractEditText.java
index 6058386..95df225 100644
--- a/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EmojiExtractEditText.java
+++ b/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EmojiExtractEditText.java
@@ -18,6 +18,7 @@
import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.inputmethodservice.ExtractEditText;
import android.os.Build;
@@ -29,6 +30,7 @@
import android.widget.TextView;
import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
@@ -54,24 +56,26 @@
*/
private boolean mInitialized;
- public EmojiExtractEditText(Context context) {
+ public EmojiExtractEditText(@NonNull Context context) {
super(context);
init(null /*attrs*/, 0 /*defStyleAttr*/, 0 /*defStyleRes*/);
}
- public EmojiExtractEditText(Context context, AttributeSet attrs) {
+ public EmojiExtractEditText(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(attrs, android.R.attr.editTextStyle, 0 /*defStyleRes*/);
}
- public EmojiExtractEditText(Context context, AttributeSet attrs, int defStyleAttr) {
+ public EmojiExtractEditText(@NonNull Context context, @Nullable AttributeSet attrs,
+ int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(attrs, defStyleAttr, 0 /*defStyleRes*/);
}
+ @SuppressLint("UnsafeNewApiCall")
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
- public EmojiExtractEditText(Context context, AttributeSet attrs, int defStyleAttr,
- int defStyleRes) {
+ public EmojiExtractEditText(@NonNull Context context, @Nullable AttributeSet attrs,
+ int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(attrs, defStyleAttr, defStyleRes);
}
@@ -94,8 +98,9 @@
super.setKeyListener(keyListener);
}
+ @Nullable
@Override
- public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
+ public InputConnection onCreateInputConnection(@NonNull EditorInfo outAttrs) {
final InputConnection inputConnection = super.onCreateInputConnection(outAttrs);
return getEmojiEditTextHelper().onCreateInputConnection(inputConnection, outAttrs);
}
@@ -159,7 +164,9 @@
* {@link TextViewCompat#setCustomSelectionActionModeCallback(TextView, ActionMode.Callback)}
*/
@Override
- public void setCustomSelectionActionModeCallback(ActionMode.Callback actionModeCallback) {
+ public void setCustomSelectionActionModeCallback(
+ @NonNull ActionMode.Callback actionModeCallback
+ ) {
super.setCustomSelectionActionModeCallback(TextViewCompat
.wrapCustomSelectionActionModeCallback(this, actionModeCallback));
}
diff --git a/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EmojiExtractTextLayout.java b/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EmojiExtractTextLayout.java
index 319b1db..c930389 100644
--- a/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EmojiExtractTextLayout.java
+++ b/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EmojiExtractTextLayout.java
@@ -16,6 +16,7 @@
package androidx.emoji2.widget;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.inputmethodservice.InputMethodService;
@@ -75,25 +76,26 @@
*/
private boolean mInitialized;
- public EmojiExtractTextLayout(Context context) {
+ public EmojiExtractTextLayout(@NonNull Context context) {
super(context);
init(context, null /*attrs*/, 0 /*defStyleAttr*/, 0 /*defStyleRes*/);
}
- public EmojiExtractTextLayout(Context context,
+ public EmojiExtractTextLayout(@NonNull Context context,
@Nullable AttributeSet attrs) {
super(context, attrs);
init(context, attrs, 0 /*defStyleAttr*/, 0 /*defStyleRes*/);
}
- public EmojiExtractTextLayout(Context context,
+ public EmojiExtractTextLayout(@NonNull Context context,
@Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs, defStyleAttr, 0 /*defStyleRes*/);
}
+ @SuppressLint("UnsafeNewApiCall")
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
- public EmojiExtractTextLayout(Context context, AttributeSet attrs,
+ public EmojiExtractTextLayout(@NonNull Context context, @Nullable AttributeSet attrs,
int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(context, attrs, defStyleAttr, defStyleRes);
@@ -159,7 +161,8 @@
* {@link InputMethodService#onUpdateExtractingViews(EditorInfo)
* InputMethodService#onUpdateExtractingViews(EditorInfo)}.
*/
- public void onUpdateExtractingViews(InputMethodService inputMethodService, EditorInfo ei) {
+ public void onUpdateExtractingViews(@NonNull InputMethodService inputMethodService,
+ @NonNull EditorInfo ei) {
// the following code is ported as it is from InputMethodService.onUpdateExtractingViews
if (!inputMethodService.isExtractViewShown()) {
return;
diff --git a/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EmojiTextView.java b/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EmojiTextView.java
index 7ec4875..709ddd3 100644
--- a/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EmojiTextView.java
+++ b/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/EmojiTextView.java
@@ -15,6 +15,7 @@
*/
package androidx.emoji2.widget;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Build;
import android.text.InputFilter;
@@ -22,6 +23,8 @@
import android.view.ActionMode;
import android.widget.TextView;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.core.widget.TextViewCompat;
import androidx.emoji2.helpers.EmojiTextViewHelper;
@@ -39,23 +42,25 @@
*/
private boolean mInitialized;
- public EmojiTextView(Context context) {
+ public EmojiTextView(@NonNull Context context) {
super(context);
init();
}
- public EmojiTextView(Context context, AttributeSet attrs) {
+ public EmojiTextView(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
- public EmojiTextView(Context context, AttributeSet attrs, int defStyleAttr) {
+ public EmojiTextView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
+ @SuppressLint("UnsafeNewApiCall")
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
- public EmojiTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ public EmojiTextView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr,
+ int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
@@ -68,7 +73,7 @@
}
@Override
- public void setFilters(InputFilter[] filters) {
+ public void setFilters(@NonNull InputFilter[] filters) {
super.setFilters(getEmojiTextViewHelper().getFilters(filters));
}
@@ -90,7 +95,9 @@
* {@link TextViewCompat#setCustomSelectionActionModeCallback(TextView, ActionMode.Callback)}
*/
@Override
- public void setCustomSelectionActionModeCallback(ActionMode.Callback actionModeCallback) {
+ public void setCustomSelectionActionModeCallback(
+ @NonNull ActionMode.Callback actionModeCallback
+ ) {
super.setCustomSelectionActionModeCallback(TextViewCompat
.wrapCustomSelectionActionModeCallback(this, actionModeCallback));
}
diff --git a/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/ExtractButtonCompat.java b/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/ExtractButtonCompat.java
index 26070ab..cf839e0 100644
--- a/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/ExtractButtonCompat.java
+++ b/emoji2/emoji2-views/src/main/java/androidx/emoji2/widget/ExtractButtonCompat.java
@@ -18,12 +18,15 @@
import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import android.view.ActionMode;
import android.widget.Button;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.core.widget.TextViewCompat;
@@ -35,21 +38,23 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
public class ExtractButtonCompat extends Button {
- public ExtractButtonCompat(Context context) {
+ public ExtractButtonCompat(@NonNull Context context) {
super(context, null);
}
- public ExtractButtonCompat(Context context, AttributeSet attrs) {
+ public ExtractButtonCompat(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
- public ExtractButtonCompat(Context context, AttributeSet attrs, int defStyleAttr) {
+ public ExtractButtonCompat(@NonNull Context context, @Nullable AttributeSet attrs,
+ int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
+ @SuppressLint("UnsafeNewApiCall")
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
- public ExtractButtonCompat(Context context, AttributeSet attrs, int defStyleAttr,
- int defStyleRes) {
+ public ExtractButtonCompat(@NonNull Context context, @Nullable AttributeSet attrs,
+ int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@@ -59,7 +64,7 @@
*/
@Override
public boolean hasWindowFocus() {
- return isEnabled() && getVisibility() == VISIBLE ? true : false;
+ return isEnabled() && getVisibility() == VISIBLE;
}
/**
@@ -67,7 +72,9 @@
* {@link TextViewCompat#setCustomSelectionActionModeCallback(TextView, ActionMode.Callback)}
*/
@Override
- public void setCustomSelectionActionModeCallback(ActionMode.Callback actionModeCallback) {
+ public void setCustomSelectionActionModeCallback(
+ @NonNull ActionMode.Callback actionModeCallback
+ ) {
super.setCustomSelectionActionModeCallback(TextViewCompat
.wrapCustomSelectionActionModeCallback(this, actionModeCallback));
}
diff --git a/emoji2/emoji2/lint-baseline.xml b/emoji2/emoji2/lint-baseline.xml
deleted file mode 100644
index d9ef293..0000000
--- a/emoji2/emoji2/lint-baseline.xml
+++ /dev/null
@@ -1,745 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="5" by="lint 4.2.0-beta04" client="gradle" variant="debug" version="4.2.0-beta04">
-
- <issue
- id="PrivateConstructorForUtilityClass"
- message="Utility class with non private constructor"
- errorLine1=" private static final class CodepointIndexFinder {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiProcessor.java"
- line="653"
- column="32"/>
- </issue>
-
- <issue
- id="UnsafeNewApiCall"
- message="This call is to a method from API 19, the call containing class androidx.emoji2.text.EmojiProcessor.CodepointIndexFinder is not annotated with @RequiresApi(x) where x is at least 19. Either annotate the containing class with at least @RequiresApi(19) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(19)."
- errorLine1=" if (!Character.isSurrogate(c)) {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiProcessor.java"
- line="701"
- column="32"/>
- </issue>
-
- <issue
- id="UnsafeNewApiCall"
- message="This call is to a method from API 19, the call containing class androidx.emoji2.text.EmojiProcessor.CodepointIndexFinder is not annotated with @RequiresApi(x) where x is at least 19. Either annotate the containing class with at least @RequiresApi(19) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(19)."
- errorLine1=" if (!Character.isSurrogate(c)) {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiProcessor.java"
- line="758"
- column="32"/>
- </issue>
-
- <issue
- id="KotlinPropertyAccess"
- message="The getter return type (`int`) and setter parameter type (`boolean`) getter and setter methods for property `hasGlyph` should have exactly the same type to allow be accessed as a property from Kotlin; see https://android.github.io/kotlin-guides/interop.html#property-prefixes"
- errorLine1=" public int getHasGlyph() {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiMetadata.java"
- line="184"
- column="16"/>
- <location
- file="src/main/java/androidx/emoji2/text/EmojiMetadata.java"
- line="193"
- column="17"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public static EmojiCompat init(@NonNull final Config config) {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiCompat.java"
- line="302"
- column="19"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public static EmojiCompat reset(@NonNull final Config config) {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiCompat.java"
- line="322"
- column="19"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public static EmojiCompat reset(final EmojiCompat emojiCompat) {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiCompat.java"
- line="337"
- column="19"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public static EmojiCompat reset(final EmojiCompat emojiCompat) {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiCompat.java"
- line="337"
- column="43"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public static EmojiCompat get() {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiCompat.java"
- line="352"
- column="19"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" final KeyEvent event) {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiCompat.java"
- line="541"
- column="19"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public CharSequence process(@NonNull final CharSequence charSequence) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiCompat.java"
- line="625"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public CharSequence process(@NonNull final CharSequence charSequence,"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiCompat.java"
- line="662"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public CharSequence process(@NonNull final CharSequence charSequence,"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiCompat.java"
- line="698"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public CharSequence process(@NonNull final CharSequence charSequence,"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiCompat.java"
- line="739"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public Config registerInitCallback(@NonNull InitCallback initCallback) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiCompat.java"
- line="982"
- column="16"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public Config unregisterInitCallback(@NonNull InitCallback initCallback) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiCompat.java"
- line="1000"
- column="16"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public Config setReplaceAll(final boolean replaceAll) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiCompat.java"
- line="1017"
- column="16"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public Config setUseEmojiAsDefaultStyle(final boolean useEmojiAsDefaultStyle) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiCompat.java"
- line="1037"
- column="16"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public Config setUseEmojiAsDefaultStyle(final boolean useEmojiAsDefaultStyle,"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiCompat.java"
- line="1057"
- column="16"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public Config setEmojiSpanIndicatorEnabled(boolean emojiSpanIndicatorEnabled) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiCompat.java"
- line="1081"
- column="16"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public Config setEmojiSpanIndicatorColor(@ColorInt int color) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiCompat.java"
- line="1092"
- column="16"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public Config setMetadataLoadStrategy(@LoadStrategy int strategy) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiCompat.java"
- line="1133"
- column="16"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" protected final MetadataRepoLoader getMetadataRepoLoader() {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiCompat.java"
- line="1154"
- column="25"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public Typeface getTypeface() {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiMetadata.java"
- line="120"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public int getSize(@NonNull final Paint paint, final CharSequence text, final int start,"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiSpan.java"
- line="77"
- column="58"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" final int end, final Paint.FontMetricsInt fm) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/EmojiSpan.java"
- line="78"
- column="34"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public FontRequestEmojiCompatConfig setHandler(Handler handler) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/FontRequestEmojiCompatConfig.java"
- line="143"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public FontRequestEmojiCompatConfig setHandler(Handler handler) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/FontRequestEmojiCompatConfig.java"
- line="143"
- column="52"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public FontRequestEmojiCompatConfig setRetryPolicy(RetryPolicy policy) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/FontRequestEmojiCompatConfig.java"
- line="156"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public FontRequestEmojiCompatConfig setRetryPolicy(RetryPolicy policy) {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/FontRequestEmojiCompatConfig.java"
- line="156"
- column="56"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public FontFamilyResult fetchFonts(@NonNull Context context,"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/FontRequestEmojiCompatConfig.java"
- line="335"
- column="16"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public Typeface buildTypeface(@NonNull Context context,"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/FontRequestEmojiCompatConfig.java"
- line="341"
- column="16"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public static MetadataRepo create(@NonNull final Typeface typeface,"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/MetadataRepo.java"
- line="103"
- column="19"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public static MetadataRepo create(@NonNull final Typeface typeface,"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/MetadataRepo.java"
- line="115"
- column="19"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public static MetadataRepo create(@NonNull final AssetManager assetManager,"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/MetadataRepo.java"
- line="127"
- column="19"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" final String assetPath) throws IOException {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/MetadataRepo.java"
- line="128"
- column="19"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public char[] getEmojiCharArray() {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/MetadataRepo.java"
- line="176"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public MetadataList getMetadataList() {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/MetadataRepo.java"
- line="184"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public static SpannableBuilder create(@NonNull Class<?> clazz, @NonNull CharSequence text) {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="95"
- column="19"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public CharSequence subSequence(int start, int end) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="122"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void setSpan(Object what, int start, int end, int flags) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="132"
- column="25"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public <T> T[] getSpans(int queryStart, int queryEnd, Class<T> kind) {"
- errorLine2=" ~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="147"
- column="16"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public <T> T[] getSpans(int queryStart, int queryEnd, Class<T> kind) {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="147"
- column="59"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void removeSpan(Object what) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="165"
- column="28"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public int getSpanStart(Object tag) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="187"
- column="29"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public int getSpanEnd(Object tag) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="201"
- column="27"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public int getSpanFlags(Object tag) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="215"
- column="29"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public int nextSpanTransition(int start, int limit, Class type) {"
- errorLine2=" ~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="229"
- column="57"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public SpannableStringBuilder replace(int start, int end, CharSequence tb) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="299"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public SpannableStringBuilder replace(int start, int end, CharSequence tb) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="299"
- column="63"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public SpannableStringBuilder replace(int start, int end, CharSequence tb, int tbstart,"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="307"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public SpannableStringBuilder replace(int start, int end, CharSequence tb, int tbstart,"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="307"
- column="63"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public SpannableStringBuilder insert(int where, CharSequence tb) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="316"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public SpannableStringBuilder insert(int where, CharSequence tb) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="316"
- column="53"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public SpannableStringBuilder insert(int where, CharSequence tb, int start, int end) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="322"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public SpannableStringBuilder insert(int where, CharSequence tb, int start, int end) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="322"
- column="53"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public SpannableStringBuilder delete(int start, int end) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="328"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public SpannableStringBuilder append(CharSequence text) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="334"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public SpannableStringBuilder append(CharSequence text) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="334"
- column="42"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public SpannableStringBuilder append(char text) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="340"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public SpannableStringBuilder append(CharSequence text, int start, int end) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="346"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public SpannableStringBuilder append(CharSequence text, int start, int end) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="346"
- column="42"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public SpannableStringBuilder append(CharSequence text, Object what, int flags) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="352"
- column="12"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public SpannableStringBuilder append(CharSequence text, Object what, int flags) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="352"
- column="42"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public SpannableStringBuilder append(CharSequence text, Object what, int flags) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/SpannableBuilder.java"
- line="352"
- column="61"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public TypefaceEmojiSpan(final EmojiMetadata metadata) {"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/TypefaceEmojiSpan.java"
- line="48"
- column="36"/>
- </issue>
-
- <issue
- id="UnknownNullness"
- message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
- errorLine1=" public void draw(@NonNull final Canvas canvas, final CharSequence text,"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/emoji2/text/TypefaceEmojiSpan.java"
- line="53"
- column="58"/>
- </issue>
-
-</issues>
diff --git a/emoji2/emoji2/src/androidTest/java/androidx/emoji2/text/MetadataRepoTest.java b/emoji2/emoji2/src/androidTest/java/androidx/emoji2/text/MetadataRepoTest.java
index cead30d..3039f17 100644
--- a/emoji2/emoji2/src/androidTest/java/androidx/emoji2/text/MetadataRepoTest.java
+++ b/emoji2/emoji2/src/androidTest/java/androidx/emoji2/text/MetadataRepoTest.java
@@ -15,12 +15,16 @@
*/
package androidx.emoji2.text;
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
+import static org.mockito.Mockito.mock;
+
+import android.graphics.Typeface;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SdkSuppress;
import androidx.test.filters.SmallTest;
+import androidx.text.emoji.flatbuffer.MetadataList;
import org.junit.Before;
import org.junit.Test;
@@ -35,7 +39,7 @@
@Before
public void clearResourceIndex() {
- mMetadataRepo = new MetadataRepo();
+ mMetadataRepo = MetadataRepo.create(mock(Typeface.class), new MetadataList());
}
@Test(expected = NullPointerException.class)
@@ -63,10 +67,10 @@
mMetadataRepo.put(metadata);
assertSame(metadata, getNode(codePoint));
- assertEquals(null, getNode(new int[]{1}));
- assertEquals(null, getNode(new int[]{1, 2}));
- assertEquals(null, getNode(new int[]{1, 2, 3}));
- assertEquals(null, getNode(new int[]{1, 2, 3, 5}));
+ assertNull(getNode(new int[]{1}));
+ assertNull(getNode(new int[]{1, 2}));
+ assertNull(getNode(new int[]{1, 2, 3}));
+ assertNull(getNode(new int[]{1, 2, 3, 5}));
}
@Test
@@ -88,8 +92,8 @@
assertSame(metadata2, getNode(codePoint2));
assertSame(metadata3, getNode(codePoint3));
- assertEquals(null, getNode(new int[]{1}));
- assertEquals(null, getNode(new int[]{1, 2, 3, 4, 5}));
+ assertNull(getNode(new int[]{1}));
+ assertNull(getNode(new int[]{1, 2, 3, 4, 5}));
}
final EmojiMetadata getNode(final int[] codepoints) {
diff --git a/emoji2/emoji2/src/androidTest/java/androidx/emoji2/text/TestConfigBuilder.java b/emoji2/emoji2/src/androidTest/java/androidx/emoji2/text/TestConfigBuilder.java
index 6753840..e44b5a4 100644
--- a/emoji2/emoji2/src/androidTest/java/androidx/emoji2/text/TestConfigBuilder.java
+++ b/emoji2/emoji2/src/androidTest/java/androidx/emoji2/text/TestConfigBuilder.java
@@ -16,13 +16,16 @@
package androidx.emoji2.text;
import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
import android.content.Context;
import android.content.res.AssetManager;
+import android.graphics.Typeface;
import androidx.annotation.GuardedBy;
import androidx.annotation.NonNull;
import androidx.test.core.app.ApplicationProvider;
+import androidx.text.emoji.flatbuffer.MetadataList;
import java.util.concurrent.CountDownLatch;
@@ -85,7 +88,8 @@
try {
mLoaderLatch.await();
if (mSuccess) {
- loaderCallback.onLoaded(new MetadataRepo());
+ loaderCallback.onLoaded(MetadataRepo.create(mock(Typeface.class),
+ new MetadataList()));
} else {
loaderCallback.onFailed(null);
}
diff --git a/emoji2/emoji2/src/androidTest/res/layout/activity_default.xml b/emoji2/emoji2/src/androidTest/res/layout/activity_default.xml
index c566d8f..486dfbd 100644
--- a/emoji2/emoji2/src/androidTest/res/layout/activity_default.xml
+++ b/emoji2/emoji2/src/androidTest/res/layout/activity_default.xml
@@ -1,11 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:id="@+id/root"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
+ android:id="@+id/root"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
<TextView
android:id="@+id/text"
diff --git a/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiCompat.java b/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiCompat.java
index 1dc1ac4..e660547 100644
--- a/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiCompat.java
+++ b/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiCompat.java
@@ -197,12 +197,12 @@
private static final Object INSTANCE_LOCK = new Object();
@GuardedBy("INSTANCE_LOCK")
- private static volatile EmojiCompat sInstance;
+ private static volatile @Nullable EmojiCompat sInstance;
- private final ReadWriteLock mInitLock;
+ private final @NonNull ReadWriteLock mInitLock;
@GuardedBy("mInitLock")
- private final Set<InitCallback> mInitCallbacks;
+ private final @NonNull Set<InitCallback> mInitCallbacks;
@GuardedBy("mInitLock")
@LoadState
@@ -211,18 +211,18 @@
/**
* Handler with main looper to run the callbacks on.
*/
- private final Handler mMainHandler;
+ private final @NonNull Handler mMainHandler;
/**
* Helper class for pre 19 compatibility.
*/
- private final CompatInternal mHelper;
+ private final @NonNull CompatInternal mHelper;
/**
* Metadata loader instance given in the Config instance.
*/
@SuppressWarnings("WeakerAccess") /* synthetic access */
- final MetadataRepoLoader mMetadataLoader;
+ final @NonNull MetadataRepoLoader mMetadataLoader;
/**
* @see Config#setReplaceAll(boolean)
@@ -240,7 +240,7 @@
* @see Config#setUseEmojiAsDefaultStyle(boolean, List)
*/
@SuppressWarnings("WeakerAccess") /* synthetic access */
- final int[] mEmojiAsDefaultStyleExceptions;
+ final @Nullable int[] mEmojiAsDefaultStyleExceptions;
/**
* @see Config#setEmojiSpanIndicatorEnabled(boolean)
@@ -299,15 +299,20 @@
* @see EmojiCompat.Config
*/
@SuppressWarnings("GuardedBy")
+ @NonNull
public static EmojiCompat init(@NonNull final Config config) {
- if (sInstance == null) {
+ EmojiCompat localInstance = sInstance;
+ if (localInstance == null) {
synchronized (INSTANCE_LOCK) {
- if (sInstance == null) {
- sInstance = new EmojiCompat(config);
+ // copy ref to local for nullness checker
+ localInstance = sInstance;
+ if (localInstance == null) {
+ localInstance = new EmojiCompat(config);
+ sInstance = localInstance;
}
}
}
- return sInstance;
+ return localInstance;
}
/**
@@ -319,11 +324,13 @@
@SuppressWarnings("GuardedBy")
@RestrictTo(LIBRARY_GROUP_PREFIX)
@VisibleForTesting
+ @NonNull
public static EmojiCompat reset(@NonNull final Config config) {
synchronized (INSTANCE_LOCK) {
- sInstance = new EmojiCompat(config);
+ EmojiCompat localInstance = new EmojiCompat(config);
+ sInstance = localInstance;
+ return localInstance;
}
- return sInstance;
}
/**
@@ -334,7 +341,8 @@
@SuppressWarnings("GuardedBy")
@RestrictTo(LIBRARY_GROUP_PREFIX)
@VisibleForTesting
- public static EmojiCompat reset(final EmojiCompat emojiCompat) {
+ @Nullable
+ public static EmojiCompat reset(@Nullable final EmojiCompat emojiCompat) {
synchronized (INSTANCE_LOCK) {
sInstance = emojiCompat;
}
@@ -349,11 +357,13 @@
*
* @throws IllegalStateException if called before {@link #init(EmojiCompat.Config)}
*/
+ @NonNull
public static EmojiCompat get() {
synchronized (INSTANCE_LOCK) {
- Preconditions.checkState(sInstance != null,
+ EmojiCompat localInstance = sInstance;
+ Preconditions.checkState(localInstance != null,
"EmojiCompat is not initialized. Please call EmojiCompat.init() first");
- return sInstance;
+ return localInstance;
}
}
@@ -538,7 +548,7 @@
* @return {@code true} if an {@link EmojiSpan} is deleted
*/
public static boolean handleOnKeyDown(@NonNull final Editable editable, final int keyCode,
- final KeyEvent event) {
+ @NonNull final KeyEvent event) {
if (Build.VERSION.SDK_INT >= 19) {
return EmojiProcessor.handleOnKeyDown(editable, keyCode, event);
} else {
@@ -621,11 +631,13 @@
* @throws IllegalStateException if not initialized yet
* @see #process(CharSequence, int, int)
*/
+ @Nullable
@CheckResult
public CharSequence process(@NonNull final CharSequence charSequence) {
// since charSequence might be null here we have to check it. Passing through here to the
// main function so that it can do all the checks including isInitialized. It will also
// be the main point that decides what to return.
+
//noinspection ConstantConditions
@IntRange(from = 0) final int length = charSequence == null ? 0 : charSequence.length();
return process(charSequence, 0, length);
@@ -658,6 +670,7 @@
* {@code start > charSequence.length()},
* {@code end > charSequence.length()}
*/
+ @Nullable
@CheckResult
public CharSequence process(@NonNull final CharSequence charSequence,
@IntRange(from = 0) final int start, @IntRange(from = 0) final int end) {
@@ -694,6 +707,7 @@
* {@code end > charSequence.length()}
* {@code maxEmojiCount < 0}
*/
+ @Nullable
@CheckResult
public CharSequence process(@NonNull final CharSequence charSequence,
@IntRange(from = 0) final int start, @IntRange(from = 0) final int end,
@@ -735,6 +749,7 @@
* {@code end > charSequence.length()}
* {@code maxEmojiCount < 0}
*/
+ @Nullable
@CheckResult
public CharSequence process(@NonNull final CharSequence charSequence,
@IntRange(from = 0) final int start, @IntRange(from = 0) final int end,
@@ -944,14 +959,17 @@
*/
public abstract static class Config {
@SuppressWarnings("WeakerAccess") /* synthetic access */
+ @NonNull
final MetadataRepoLoader mMetadataLoader;
@SuppressWarnings("WeakerAccess") /* synthetic access */
boolean mReplaceAll;
@SuppressWarnings("WeakerAccess") /* synthetic access */
boolean mUseEmojiAsDefaultStyle;
@SuppressWarnings("WeakerAccess") /* synthetic access */
+ @Nullable
int[] mEmojiAsDefaultStyleExceptions;
@SuppressWarnings("WeakerAccess") /* synthetic access */
+ @Nullable
Set<InitCallback> mInitCallbacks;
@SuppressWarnings("WeakerAccess") /* synthetic access */
boolean mEmojiSpanIndicatorEnabled;
@@ -960,6 +978,7 @@
@SuppressWarnings("WeakerAccess") /* synthetic access */
@LoadStrategy int mMetadataLoadStrategy = LOAD_STRATEGY_DEFAULT;
@SuppressWarnings("WeakerAccess") /* synthetic access */
+ @NonNull
GlyphChecker mGlyphChecker = new EmojiProcessor.DefaultGlyphChecker();
/**
@@ -979,6 +998,7 @@
*
* @return EmojiCompat.Config instance
*/
+ @NonNull
public Config registerInitCallback(@NonNull InitCallback initCallback) {
Preconditions.checkNotNull(initCallback, "initCallback cannot be null");
if (mInitCallbacks == null) {
@@ -997,6 +1017,7 @@
*
* @return EmojiCompat.Config instance
*/
+ @NonNull
public Config unregisterInitCallback(@NonNull InitCallback initCallback) {
Preconditions.checkNotNull(initCallback, "initCallback cannot be null");
if (mInitCallbacks != null) {
@@ -1014,6 +1035,7 @@
*
* @return EmojiCompat.Config instance
*/
+ @NonNull
public Config setReplaceAll(final boolean replaceAll) {
mReplaceAll = replaceAll;
return this;
@@ -1034,6 +1056,7 @@
* @param useEmojiAsDefaultStyle whether to use the emoji style presentation for all emojis
* that would be presented as text style by default
*/
+ @NonNull
public Config setUseEmojiAsDefaultStyle(final boolean useEmojiAsDefaultStyle) {
return setUseEmojiAsDefaultStyle(useEmojiAsDefaultStyle,
null);
@@ -1054,6 +1077,7 @@
* {@link #setUseEmojiAsDefaultStyle(boolean)} should
* be used instead.
*/
+ @NonNull
public Config setUseEmojiAsDefaultStyle(final boolean useEmojiAsDefaultStyle,
@Nullable final List<Integer> emojiAsDefaultStyleExceptions) {
mUseEmojiAsDefaultStyle = useEmojiAsDefaultStyle;
@@ -1078,6 +1102,7 @@
* @param emojiSpanIndicatorEnabled when {@code true} a background is drawn for each emoji
* that is replaced
*/
+ @NonNull
public Config setEmojiSpanIndicatorEnabled(boolean emojiSpanIndicatorEnabled) {
mEmojiSpanIndicatorEnabled = emojiSpanIndicatorEnabled;
return this;
@@ -1089,6 +1114,7 @@
*
* @see #setEmojiSpanIndicatorEnabled(boolean)
*/
+ @NonNull
public Config setEmojiSpanIndicatorColor(@ColorInt int color) {
mEmojiSpanIndicatorColor = color;
return this;
@@ -1130,6 +1156,7 @@
* {@link EmojiCompat#LOAD_STRATEGY_MANUAL}
*
*/
+ @NonNull
public Config setMetadataLoadStrategy(@LoadStrategy int strategy) {
mMetadataLoadStrategy = strategy;
return this;
@@ -1151,6 +1178,7 @@
/**
* Returns the {@link MetadataRepoLoader}.
*/
+ @NonNull
protected final MetadataRepoLoader getMetadataRepoLoader() {
return mMetadataLoader;
}
diff --git a/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiMetadata.java b/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiMetadata.java
index ba46f82..d6ef218 100644
--- a/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiMetadata.java
+++ b/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiMetadata.java
@@ -17,6 +17,7 @@
import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
+import android.annotation.SuppressLint;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Typeface;
@@ -78,6 +79,7 @@
/**
* MetadataRepo that holds this instance.
*/
+ @NonNull
private final MetadataRepo mMetadataRepo;
/**
@@ -117,6 +119,7 @@
/**
* @return return typeface to be used to render this metadata
*/
+ @NonNull
public Typeface getTypeface() {
return mMetadataRepo.getTypeface();
}
@@ -181,6 +184,7 @@
* style selector 0xFE0F)
*/
@HasGlyph
+ @SuppressLint("KotlinPropertyAccess")
public int getHasGlyph() {
return mHasGlyph;
}
@@ -190,6 +194,7 @@
*
* @param hasGlyph {@code true} if system can render the emoji
*/
+ @SuppressLint("KotlinPropertyAccess")
public void setHasGlyph(boolean hasGlyph) {
mHasGlyph = hasGlyph ? HAS_GLYPH_EXISTS : HAS_GLYPH_ABSENT;
}
diff --git a/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiProcessor.java b/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiProcessor.java
index ff25b2e..98849eb 100644
--- a/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiProcessor.java
+++ b/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiProcessor.java
@@ -80,16 +80,19 @@
/**
* Factory used to create EmojiSpans.
*/
+ @NonNull
private final EmojiCompat.SpanFactory mSpanFactory;
/**
* Emoji metadata repository.
*/
+ @NonNull
private final MetadataRepo mMetadataRepo;
/**
* Utility class that checks if the system can render a given glyph.
*/
+ @NonNull
private EmojiCompat.GlyphChecker mGlyphChecker;
/**
@@ -100,6 +103,7 @@
/**
* @see EmojiCompat.Config#setUseEmojiAsDefaultStyle(boolean, List)
*/
+ @Nullable
private final int[] mEmojiAsDefaultStyleExceptions;
EmojiProcessor(
@@ -297,7 +301,7 @@
* @return {@code true} if an {@link EmojiSpan} is deleted
*/
static boolean handleOnKeyDown(@NonNull final Editable editable, final int keyCode,
- final KeyEvent event) {
+ @NonNull final KeyEvent event) {
final boolean handled;
switch (keyCode) {
case KeyEvent.KEYCODE_DEL:
@@ -319,7 +323,7 @@
return false;
}
- private static boolean delete(final Editable content, final KeyEvent event,
+ private static boolean delete(@NonNull final Editable content, @NonNull final KeyEvent event,
final boolean forwardDelete) {
if (hasModifiers(event)) {
return false;
@@ -430,7 +434,7 @@
return start == -1 || end == -1 || start != end;
}
- private static boolean hasModifiers(KeyEvent event) {
+ private static boolean hasModifiers(@NonNull KeyEvent event) {
return !KeyEvent.metaStateHasNoModifiers(event.getMetaState());
}
@@ -650,9 +654,12 @@
/**
* Copy of BaseInputConnection findIndexBackward and findIndexForward functions.
*/
+ @RequiresApi(19)
private static final class CodepointIndexFinder {
private static final int INVALID_INDEX = -1;
+ private CodepointIndexFinder() {}
+
/**
* Find start index of the character in {@code cs} that is {@code numCodePoints} behind
* starting from {@code from}.
diff --git a/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiSpan.java b/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiSpan.java
index 70dd537..dd07ff1 100644
--- a/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiSpan.java
+++ b/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiSpan.java
@@ -17,10 +17,12 @@
import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
+import android.annotation.SuppressLint;
import android.graphics.Paint;
import android.text.style.ReplacementSpan;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.annotation.VisibleForTesting;
@@ -43,6 +45,7 @@
* representing same emoji to be in memory. When unparcelled, EmojiSpan tries to set it back
* using the singleton EmojiCompat instance.
*/
+ @NonNull
private final EmojiMetadata mMetadata;
/**
@@ -74,8 +77,11 @@
}
@Override
- public int getSize(@NonNull final Paint paint, final CharSequence text, final int start,
- final int end, final Paint.FontMetricsInt fm) {
+ public int getSize(@NonNull final Paint paint,
+ @SuppressLint("UnknownNullness") final CharSequence text,
+ final int start,
+ final int end,
+ @Nullable final Paint.FontMetricsInt fm) {
paint.getFontMetricsInt(mTmpFontMetrics);
final int fontHeight = Math.abs(mTmpFontMetrics.descent - mTmpFontMetrics.ascent);
diff --git a/emoji2/emoji2/src/main/java/androidx/emoji2/text/FontRequestEmojiCompatConfig.java b/emoji2/emoji2/src/main/java/androidx/emoji2/text/FontRequestEmojiCompatConfig.java
index 4ade79f..f20049c 100644
--- a/emoji2/emoji2/src/main/java/androidx/emoji2/text/FontRequestEmojiCompatConfig.java
+++ b/emoji2/emoji2/src/main/java/androidx/emoji2/text/FontRequestEmojiCompatConfig.java
@@ -140,7 +140,8 @@
* of {@code null}, the metadata loader creates own {@link HandlerThread} for
* initialization.
*/
- public FontRequestEmojiCompatConfig setHandler(Handler handler) {
+ @NonNull
+ public FontRequestEmojiCompatConfig setHandler(@Nullable Handler handler) {
((FontRequestMetadataLoader) getMetadataRepoLoader()).setHandler(handler);
return this;
}
@@ -153,7 +154,8 @@
* file. Can be {@code null}. In case of {@code null}, the metadata loader never
* retries.
*/
- public FontRequestEmojiCompatConfig setRetryPolicy(RetryPolicy policy) {
+ @NonNull
+ public FontRequestEmojiCompatConfig setRetryPolicy(@Nullable RetryPolicy policy) {
((FontRequestMetadataLoader) getMetadataRepoLoader()).setRetryPolicy(policy);
return this;
}
@@ -163,23 +165,23 @@
* given FontRequest.
*/
private static class FontRequestMetadataLoader implements EmojiCompat.MetadataRepoLoader {
- private final Context mContext;
- private final FontRequest mRequest;
- private final FontProviderHelper mFontProviderHelper;
+ private final @NonNull Context mContext;
+ private final @NonNull FontRequest mRequest;
+ private final @NonNull FontProviderHelper mFontProviderHelper;
- private final Object mLock = new Object();
+ private final @NonNull Object mLock = new Object();
@GuardedBy("mLock")
- private Handler mHandler;
+ private @Nullable Handler mHandler;
@GuardedBy("mLock")
- private HandlerThread mThread;
+ private @Nullable HandlerThread mThread;
@GuardedBy("mLock")
private @Nullable RetryPolicy mRetryPolicy;
// Following three variables must be touched only on the thread associated with mHandler.
@SuppressWarnings("WeakerAccess") /* synthetic access */
EmojiCompat.MetadataRepoLoaderCallback mCallback;
- private ContentObserver mObserver;
- private Runnable mHandleMetadataCreationRunner;
+ private @Nullable ContentObserver mObserver;
+ private @Nullable Runnable mHandleMetadataCreationRunner;
FontRequestMetadataLoader(@NonNull Context context, @NonNull FontRequest request,
@NonNull FontProviderHelper fontProviderHelper) {
@@ -190,13 +192,13 @@
mFontProviderHelper = fontProviderHelper;
}
- public void setHandler(Handler handler) {
+ public void setHandler(@Nullable Handler handler) {
synchronized (mLock) {
mHandler = handler;
}
}
- public void setRetryPolicy(RetryPolicy policy) {
+ public void setRetryPolicy(@Nullable RetryPolicy policy) {
synchronized (mLock) {
mRetryPolicy = policy;
}
@@ -332,12 +334,14 @@
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
public static class FontProviderHelper {
/** Calls FontsContractCompat.fetchFonts. */
+ @NonNull
public FontFamilyResult fetchFonts(@NonNull Context context,
@NonNull FontRequest request) throws NameNotFoundException {
return FontsContractCompat.fetchFonts(context, null /* cancellation signal */, request);
}
/** Calls FontsContractCompat.buildTypeface. */
+ @Nullable
public Typeface buildTypeface(@NonNull Context context,
@NonNull FontsContractCompat.FontInfo font) throws NameNotFoundException {
return FontsContractCompat.buildTypeface(context, null /* cancellation signal */,
diff --git a/emoji2/emoji2/src/main/java/androidx/emoji2/text/MetadataListReader.java b/emoji2/emoji2/src/main/java/androidx/emoji2/text/MetadataListReader.java
index f9f397f..6db7379 100644
--- a/emoji2/emoji2/src/main/java/androidx/emoji2/text/MetadataListReader.java
+++ b/emoji2/emoji2/src/main/java/androidx/emoji2/text/MetadataListReader.java
@@ -21,6 +21,7 @@
import androidx.annotation.AnyThread;
import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.text.emoji.flatbuffer.MetadataList;
@@ -236,9 +237,9 @@
*/
private static class InputStreamOpenTypeReader implements OpenTypeReader {
- private final byte[] mByteArray;
- private final ByteBuffer mByteBuffer;
- private final InputStream mInputStream;
+ private final @NonNull byte[] mByteArray;
+ private final @NonNull ByteBuffer mByteBuffer;
+ private final @NonNull InputStream mInputStream;
private long mPosition = 0;
/**
@@ -247,7 +248,7 @@
*
* @param inputStream InputStream to read from
*/
- InputStreamOpenTypeReader(final InputStream inputStream) {
+ InputStreamOpenTypeReader(@NonNull final InputStream inputStream) {
mInputStream = inputStream;
mByteArray = new byte[UINT32_BYTE_COUNT];
mByteBuffer = ByteBuffer.wrap(mByteArray);
@@ -306,14 +307,14 @@
*/
private static class ByteBufferReader implements OpenTypeReader {
- private final ByteBuffer mByteBuffer;
+ private final @NonNull ByteBuffer mByteBuffer;
/**
* Constructs the reader with the given ByteBuffer.
*
* @param byteBuffer ByteBuffer to read from
*/
- ByteBufferReader(final ByteBuffer byteBuffer) {
+ ByteBufferReader(@NonNull final ByteBuffer byteBuffer) {
mByteBuffer = byteBuffer;
mByteBuffer.order(ByteOrder.BIG_ENDIAN);
}
diff --git a/emoji2/emoji2/src/main/java/androidx/emoji2/text/MetadataRepo.java b/emoji2/emoji2/src/main/java/androidx/emoji2/text/MetadataRepo.java
index 2f5ea66..00fef53 100644
--- a/emoji2/emoji2/src/main/java/androidx/emoji2/text/MetadataRepo.java
+++ b/emoji2/emoji2/src/main/java/androidx/emoji2/text/MetadataRepo.java
@@ -47,36 +47,23 @@
/**
* MetadataList that contains the emoji metadata.
*/
- private final MetadataList mMetadataList;
+ private final @NonNull MetadataList mMetadataList;
/**
* char presentation of all EmojiMetadata's in a single array. All emojis we have are mapped to
* Private Use Area A, in the range U+F0000..U+FFFFD. Therefore each emoji takes 2 chars.
*/
- private final char[] mEmojiCharArray;
+ private final @NonNull char[] mEmojiCharArray;
/**
* Empty root node of the trie.
*/
- private final Node mRootNode;
+ private final @NonNull Node mRootNode;
/**
* Typeface to be used to render emojis.
*/
- private final Typeface mTypeface;
-
- /**
- * Constructor used for tests.
- *
- * @hide
- */
- @RestrictTo(LIBRARY_GROUP_PREFIX)
- MetadataRepo() {
- mTypeface = null;
- mMetadataList = null;
- mRootNode = new Node(DEFAULT_ROOT_SIZE);
- mEmojiCharArray = new char[0];
- }
+ private final @NonNull Typeface mTypeface;
/**
* Private constructor that is called by one of {@code create} methods.
@@ -94,12 +81,22 @@
}
/**
+ * Construct MetadataRepo from a preloaded MetadatList.
+ */
+ @NonNull
+ static MetadataRepo create(@NonNull final Typeface typeface,
+ @NonNull final MetadataList metadataList) {
+ return new MetadataRepo(typeface, metadataList);
+ }
+
+ /**
* Construct MetadataRepo from an input stream. The library does not close the given
* InputStream, therefore it is caller's responsibility to properly close the stream.
*
* @param typeface Typeface to be used to render emojis
* @param inputStream InputStream to read emoji metadata from
*/
+ @NonNull
public static MetadataRepo create(@NonNull final Typeface typeface,
@NonNull final InputStream inputStream) throws IOException {
return new MetadataRepo(typeface, MetadataListReader.read(inputStream));
@@ -112,6 +109,7 @@
* @param typeface Typeface to be used to render emojis
* @param byteBuffer ByteBuffer to read emoji metadata from
*/
+ @NonNull
public static MetadataRepo create(@NonNull final Typeface typeface,
@NonNull final ByteBuffer byteBuffer) throws IOException {
return new MetadataRepo(typeface, MetadataListReader.read(byteBuffer));
@@ -124,8 +122,9 @@
* @param assetPath asset manager path of the file that the Typeface and metadata will be
* created from
*/
+ @NonNull
public static MetadataRepo create(@NonNull final AssetManager assetManager,
- final String assetPath) throws IOException {
+ @NonNull final String assetPath) throws IOException {
final Typeface typeface = Typeface.createFromAsset(assetManager, assetPath);
return new MetadataRepo(typeface, MetadataListReader.read(assetManager, assetPath));
}
@@ -148,6 +147,7 @@
/**
* @hide
*/
+ @NonNull
@RestrictTo(LIBRARY_GROUP_PREFIX)
Typeface getTypeface() {
return mTypeface;
@@ -164,6 +164,7 @@
/**
* @hide
*/
+ @NonNull
@RestrictTo(LIBRARY_GROUP_PREFIX)
Node getRootNode() {
return mRootNode;
@@ -172,6 +173,7 @@
/**
* @hide
*/
+ @NonNull
@RestrictTo(LIBRARY_GROUP_PREFIX)
public char[] getEmojiCharArray() {
return mEmojiCharArray;
@@ -180,6 +182,7 @@
/**
* @hide
*/
+ @NonNull
@RestrictTo(LIBRARY_GROUP_PREFIX)
public MetadataList getMetadataList() {
return mMetadataList;
diff --git a/emoji2/emoji2/src/main/java/androidx/emoji2/text/SpannableBuilder.java b/emoji2/emoji2/src/main/java/androidx/emoji2/text/SpannableBuilder.java
index 73a6392..01399a4 100644
--- a/emoji2/emoji2/src/main/java/androidx/emoji2/text/SpannableBuilder.java
+++ b/emoji2/emoji2/src/main/java/androidx/emoji2/text/SpannableBuilder.java
@@ -17,6 +17,7 @@
import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
+import android.annotation.SuppressLint;
import android.text.Editable;
import android.text.SpanWatcher;
import android.text.Spannable;
@@ -51,12 +52,12 @@
/**
* DynamicLayout$ChangeWatcher class.
*/
- private final Class<?> mWatcherClass;
+ private final @NonNull Class<?> mWatcherClass;
/**
* All WatcherWrappers.
*/
- private final List<WatcherWrapper> mWatchers = new ArrayList<>();
+ private final @NonNull List<WatcherWrapper> mWatchers = new ArrayList<>();
/**
* @hide
@@ -91,6 +92,7 @@
/**
* @hide
*/
+ @NonNull
@RestrictTo(LIBRARY_GROUP_PREFIX)
public static SpannableBuilder create(@NonNull Class<?> clazz, @NonNull CharSequence text) {
return new SpannableBuilder(clazz, text);
@@ -118,6 +120,7 @@
return mWatcherClass == clazz;
}
+ @SuppressLint("UnknownNullness")
@Override
public CharSequence subSequence(int start, int end) {
return new SpannableBuilder(mWatcherClass, this, start, end);
@@ -129,7 +132,7 @@
* this new mObject as the span.
*/
@Override
- public void setSpan(Object what, int start, int end, int flags) {
+ public void setSpan(@Nullable Object what, int start, int end, int flags) {
if (isWatcher(what)) {
final WatcherWrapper span = new WatcherWrapper(what);
mWatchers.add(span);
@@ -142,9 +145,10 @@
* If previously a DynamicLayout$ChangeWatcher was wrapped in a WatcherWrapper, return the
* correct Object that the client has set.
*/
+ @SuppressLint("UnknownNullness")
@SuppressWarnings("unchecked")
@Override
- public <T> T[] getSpans(int queryStart, int queryEnd, Class<T> kind) {
+ public <T> T[] getSpans(int queryStart, int queryEnd, @NonNull Class<T> kind) {
if (isWatcher(kind)) {
final WatcherWrapper[] spans = super.getSpans(queryStart, queryEnd,
WatcherWrapper.class);
@@ -162,7 +166,7 @@
* instead.
*/
@Override
- public void removeSpan(Object what) {
+ public void removeSpan(@Nullable Object what) {
final WatcherWrapper watcher;
if (isWatcher(what)) {
watcher = getWatcherFor(what);
@@ -184,7 +188,7 @@
* Return the correct start for the DynamicLayout$ChangeWatcher span.
*/
@Override
- public int getSpanStart(Object tag) {
+ public int getSpanStart(@Nullable Object tag) {
if (isWatcher(tag)) {
final WatcherWrapper watcher = getWatcherFor(tag);
if (watcher != null) {
@@ -198,7 +202,7 @@
* Return the correct end for the DynamicLayout$ChangeWatcher span.
*/
@Override
- public int getSpanEnd(Object tag) {
+ public int getSpanEnd(@Nullable Object tag) {
if (isWatcher(tag)) {
final WatcherWrapper watcher = getWatcherFor(tag);
if (watcher != null) {
@@ -212,7 +216,7 @@
* Return the correct flags for the DynamicLayout$ChangeWatcher span.
*/
@Override
- public int getSpanFlags(Object tag) {
+ public int getSpanFlags(@Nullable Object tag) {
if (isWatcher(tag)) {
final WatcherWrapper watcher = getWatcherFor(tag);
if (watcher != null) {
@@ -226,8 +230,8 @@
* Return the correct transition for the DynamicLayout$ChangeWatcher span.
*/
@Override
- public int nextSpanTransition(int start, int limit, Class type) {
- if (isWatcher(type)) {
+ public int nextSpanTransition(int start, int limit, @Nullable Class type) {
+ if (type == null || isWatcher(type)) {
type = WatcherWrapper.class;
}
return super.nextSpanTransition(start, limit, type);
@@ -295,6 +299,7 @@
}
}
+ @SuppressLint("UnknownNullness")
@Override
public SpannableStringBuilder replace(int start, int end, CharSequence tb) {
blockWatchers();
@@ -303,6 +308,7 @@
return this;
}
+ @SuppressLint("UnknownNullness")
@Override
public SpannableStringBuilder replace(int start, int end, CharSequence tb, int tbstart,
int tbend) {
@@ -312,42 +318,51 @@
return this;
}
+ @SuppressLint("UnknownNullness")
@Override
public SpannableStringBuilder insert(int where, CharSequence tb) {
super.insert(where, tb);
return this;
}
+ @SuppressLint("UnknownNullness")
@Override
public SpannableStringBuilder insert(int where, CharSequence tb, int start, int end) {
super.insert(where, tb, start, end);
return this;
}
+ @SuppressLint("UnknownNullness")
@Override
public SpannableStringBuilder delete(int start, int end) {
super.delete(start, end);
return this;
}
+ @NonNull
@Override
- public SpannableStringBuilder append(CharSequence text) {
+ public SpannableStringBuilder append(@SuppressLint("UnknownNullness") CharSequence text) {
super.append(text);
return this;
}
+ @NonNull
@Override
public SpannableStringBuilder append(char text) {
super.append(text);
return this;
}
+ @NonNull
@Override
- public SpannableStringBuilder append(CharSequence text, int start, int end) {
+ public SpannableStringBuilder append(@SuppressLint("UnknownNullness") CharSequence text,
+ int start,
+ int end) {
super.append(text, start, end);
return this;
}
+ @SuppressLint("UnknownNullness")
@Override
public SpannableStringBuilder append(CharSequence text, Object what, int flags) {
super.append(text, what, flags);
diff --git a/emoji2/emoji2/src/main/java/androidx/emoji2/text/TypefaceEmojiSpan.java b/emoji2/emoji2/src/main/java/androidx/emoji2/text/TypefaceEmojiSpan.java
index 2c3ab58..5eb3ff9 100644
--- a/emoji2/emoji2/src/main/java/androidx/emoji2/text/TypefaceEmojiSpan.java
+++ b/emoji2/emoji2/src/main/java/androidx/emoji2/text/TypefaceEmojiSpan.java
@@ -17,12 +17,14 @@
import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
+import android.annotation.SuppressLint;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.text.TextPaint;
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
@@ -38,19 +40,20 @@
/**
* Paint object used to draw a background in debug mode.
*/
- private static Paint sDebugPaint;
+ private static @Nullable Paint sDebugPaint;
/**
* Default constructor.
*
* @param metadata metadata representing the emoji that this span will draw
*/
- public TypefaceEmojiSpan(final EmojiMetadata metadata) {
+ public TypefaceEmojiSpan(final @NonNull EmojiMetadata metadata) {
super(metadata);
}
@Override
- public void draw(@NonNull final Canvas canvas, final CharSequence text,
+ public void draw(@NonNull final Canvas canvas,
+ @SuppressLint("UnknownNullness") final CharSequence text,
@IntRange(from = 0) final int start, @IntRange(from = 0) final int end, final float x,
final int top, final int y, final int bottom, @NonNull final Paint paint) {
if (EmojiCompat.get().isEmojiSpanIndicatorEnabled()) {
@@ -59,6 +62,7 @@
getMetadata().draw(canvas, x, y, paint);
}
+ @NonNull
private static Paint getDebugPaint() {
if (sDebugPaint == null) {
sDebugPaint = new TextPaint();