Merge "Migrate heifwriter to use JSpecify annotations" into androidx-main
diff --git a/appcompat/appcompat-lint/integration-tests/build.gradle b/appcompat/appcompat-lint/integration-tests/build.gradle
index 5153ca8..309699d 100644
--- a/appcompat/appcompat-lint/integration-tests/build.gradle
+++ b/appcompat/appcompat-lint/integration-tests/build.gradle
@@ -12,6 +12,7 @@
}
dependencies {
+ api(libs.jspecify)
implementation(project(":appcompat:appcompat"))
implementation(project(":core:core"))
api(libs.kotlinStdlib)
diff --git a/appcompat/appcompat-lint/integration-tests/src/main/java/com/example/android/appcompat/ActivityWithClick.java b/appcompat/appcompat-lint/integration-tests/src/main/java/com/example/android/appcompat/ActivityWithClick.java
index 52e1d0a..22ce10e 100644
--- a/appcompat/appcompat-lint/integration-tests/src/main/java/com/example/android/appcompat/ActivityWithClick.java
+++ b/appcompat/appcompat-lint/integration-tests/src/main/java/com/example/android/appcompat/ActivityWithClick.java
@@ -20,9 +20,10 @@
import android.view.View;
import android.widget.Toast;
-import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
+import org.jspecify.annotations.Nullable;
+
/**
* Activity for testing the android:onClick Lint rule
*/
diff --git a/appcompat/appcompat-resources/build.gradle b/appcompat/appcompat-resources/build.gradle
index 0172efc..b5e53c11 100644
--- a/appcompat/appcompat-resources/build.gradle
+++ b/appcompat/appcompat-resources/build.gradle
@@ -30,6 +30,7 @@
}
dependencies {
+ api(libs.jspecify)
api("androidx.annotation:annotation:1.8.1")
api("androidx.core:core:1.6.0")
implementation("androidx.collection:collection:1.4.2")
diff --git a/appcompat/appcompat-resources/src/androidTest/java/androidx/appcompat/widget/TestResources.java b/appcompat/appcompat-resources/src/androidTest/java/androidx/appcompat/widget/TestResources.java
index 9da3eb9..f18047b 100644
--- a/appcompat/appcompat-resources/src/androidTest/java/androidx/appcompat/widget/TestResources.java
+++ b/appcompat/appcompat-resources/src/androidTest/java/androidx/appcompat/widget/TestResources.java
@@ -19,7 +19,7 @@
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
-import androidx.annotation.NonNull;
+import org.jspecify.annotations.NonNull;
/**
* Observable Resources class.
@@ -39,9 +39,8 @@
return super.getDrawable(id);
}
- @NonNull
@Override
- public String getString(int id) throws NotFoundException {
+ public @NonNull String getString(int id) throws NotFoundException {
mGetStringCalled = true;
return super.getString(id);
}
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/content/res/AppCompatResources.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/content/res/AppCompatResources.java
index b97ec39..0e732bc 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/content/res/AppCompatResources.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/content/res/AppCompatResources.java
@@ -22,11 +22,12 @@
import androidx.annotation.ColorRes;
import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.widget.ResourceManagerInternal;
import androidx.core.content.ContextCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* Class for accessing an application's resources through AppCompat, and thus any backward
* compatible functionality.
@@ -59,8 +60,7 @@
* @return Drawable An object that can be used to draw this resource.
* @see ContextCompat#getDrawable(Context, int)
*/
- @Nullable
- public static Drawable getDrawable(@NonNull Context context, @DrawableRes int resId) {
+ public static @Nullable Drawable getDrawable(@NonNull Context context, @DrawableRes int resId) {
return ResourceManagerInternal.get().getDrawable(context, resId);
}
}
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java
index ecff44f..ae5f51d 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java
@@ -36,8 +36,6 @@
import android.util.Xml;
import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.resources.Compatibility;
import androidx.appcompat.resources.R;
import androidx.appcompat.widget.ResourceManagerInternal;
@@ -48,6 +46,8 @@
import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat;
import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@@ -129,11 +129,10 @@
* @param theme the theme to apply, may be null.
* @return a new AnimatedStateListDrawableCompat or null if parsing error is found.
*/
- @Nullable
- public static AnimatedStateListDrawableCompat create(
+ public static @Nullable AnimatedStateListDrawableCompat create(
@NonNull Context context,
@DrawableRes int resId,
- @Nullable Resources.Theme theme) {
+ Resources.@Nullable Theme theme) {
try {
final Resources res = context.getResources();
@SuppressLint("ResourceType")
@@ -162,13 +161,12 @@
* {@link Resources.Theme}. Called on a parser positioned at a tag in an XML
* document, tries to create an AnimatedStateListDrawableCompat from that tag.
*/
- @NonNull
- public static AnimatedStateListDrawableCompat createFromXmlInner(
+ public static @NonNull AnimatedStateListDrawableCompat createFromXmlInner(
@NonNull Context context,
@NonNull Resources resources,
@NonNull XmlPullParser parser,
@NonNull AttributeSet attrs,
- @Nullable Resources.Theme theme)
+ Resources.@Nullable Theme theme)
throws IOException, XmlPullParserException {
final String name = parser.getName();
if (!name.equals("animated-selector")) {
@@ -198,7 +196,7 @@
@NonNull Resources resources,
@NonNull XmlPullParser parser,
@NonNull AttributeSet attrs,
- @Nullable Resources.Theme theme)
+ Resources.@Nullable Theme theme)
throws XmlPullParserException, IOException {
final TypedArray a = obtainAttributes(
resources, theme, attrs, R.styleable.AnimatedStateListDrawableCompat);
@@ -232,7 +230,7 @@
* @param drawable The drawable to show when in the specified state, may not be null
* @param id The unique identifier for the keyframe
*/
- public void addState(@NonNull int[] stateSet, @NonNull Drawable drawable, int id) {
+ public void addState(int @NonNull [] stateSet, @NonNull Drawable drawable, int id) {
ObjectsCompat.requireNonNull(drawable);
mState.addStateSet(stateSet, drawable, id);
onStateChange(getState());
@@ -270,7 +268,7 @@
}
@Override
- protected boolean onStateChange(@NonNull int[] stateSet) {
+ protected boolean onStateChange(int @NonNull [] stateSet) {
// If we're not already at the target index, either attempt to find a
// valid transition to it or jump directly there.
final int targetIndex = mState.indexOfKeyframe(stateSet);
@@ -473,7 +471,7 @@
@NonNull Resources resources,
@NonNull XmlPullParser parser,
@NonNull AttributeSet attrs,
- @Nullable Resources.Theme theme)
+ Resources.@Nullable Theme theme)
throws XmlPullParserException, IOException {
int type;
final int innerDepth = parser.getDepth() + 1;
@@ -500,7 +498,7 @@
@NonNull Resources resources,
@NonNull XmlPullParser parser,
@NonNull AttributeSet attrs,
- @Nullable Resources.Theme theme)
+ Resources.@Nullable Theme theme)
throws XmlPullParserException, IOException {
final TypedArray a = obtainAttributes(resources, theme, attrs,
@@ -556,7 +554,7 @@
@NonNull Resources resources,
@NonNull XmlPullParser parser,
@NonNull AttributeSet attrs,
- @Nullable Resources.Theme theme)
+ Resources.@Nullable Theme theme)
throws XmlPullParserException, IOException {
final TypedArray a = obtainAttributes(resources, theme, attrs,
R.styleable.AnimatedStateListDrawableItem);
@@ -598,9 +596,8 @@
return mState.addStateSet(states, dr, keyframeId);
}
- @NonNull
@Override
- public Drawable mutate() {
+ public @NonNull Drawable mutate() {
if (!mMutated && super.mutate() == this) {
mState.mutate();
mMutated = true;
@@ -662,13 +659,13 @@
return pos;
}
- int addStateSet(@NonNull int[] stateSet, @NonNull Drawable drawable, int id) {
+ int addStateSet(int @NonNull [] stateSet, @NonNull Drawable drawable, int id) {
final int index = super.addStateSet(stateSet, drawable);
mStateIds.put(index, id);
return index;
}
- int indexOfKeyframe(@NonNull int[] stateSet) {
+ int indexOfKeyframe(int @NonNull [] stateSet) {
final int index = super.indexOfStateSet(stateSet);
if (index >= 0) {
return index;
@@ -695,15 +692,13 @@
return (mTransitions.get(keyFromTo, -1L) & REVERSIBLE_FLAG_BIT) != 0L;
}
- @NonNull
@Override
- public Drawable newDrawable() {
+ public @NonNull Drawable newDrawable() {
return new AnimatedStateListDrawableCompat(this, null);
}
- @NonNull
@Override
- public Drawable newDrawable(Resources res) {
+ public @NonNull Drawable newDrawable(Resources res) {
return new AnimatedStateListDrawableCompat(this, res);
}
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java
index 104efb4..44b9bbc 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java
@@ -35,11 +35,12 @@
import android.view.View;
import androidx.annotation.ColorInt;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.core.graphics.drawable.DrawableCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* A helper class that contains several {@link Drawable}s and selects which one to use.
* <p>
@@ -299,7 +300,7 @@
}
@Override
- protected boolean onStateChange(@NonNull int[] state) {
+ protected boolean onStateChange(int @NonNull [] state) {
if (mLastDrawable != null) {
return mLastDrawable.setState(state);
}
@@ -568,9 +569,8 @@
}
}
- @NonNull
@Override
- public Drawable getCurrent() {
+ public @NonNull Drawable getCurrent() {
return mCurrDrawable;
}
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java
index 0531212..bff5a61 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java
@@ -25,10 +25,11 @@
import android.graphics.drawable.Drawable;
import android.view.View;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.core.graphics.drawable.DrawableCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* Drawable which delegates all calls to its wrapped {@link Drawable}.
* <p>
@@ -222,8 +223,7 @@
/**
* @return the wrapped drawable
*/
- @Nullable
- public Drawable getDrawable() {
+ public @Nullable Drawable getDrawable() {
return mDrawable;
}
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/StateListDrawableCompat.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/StateListDrawableCompat.java
index 7e33bca..0ba6046 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/StateListDrawableCompat.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/StateListDrawableCompat.java
@@ -29,13 +29,13 @@
import android.util.AttributeSet;
import android.util.StateSet;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.appcompat.resources.Compatibility;
import androidx.appcompat.resources.R;
import androidx.appcompat.widget.ResourceManagerInternal;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@@ -105,7 +105,7 @@
}
@Override
- protected boolean onStateChange(@NonNull int[] stateSet) {
+ protected boolean onStateChange(int @NonNull [] stateSet) {
final boolean changed = super.onStateChange(stateSet);
int idx = mStateListState.indexOfStateSet(stateSet);
if (DEBUG) {
@@ -300,9 +300,8 @@
return mStateListState.indexOfStateSet(stateSet);
}
- @NonNull
@Override
- public Drawable mutate() {
+ public @NonNull Drawable mutate() {
if (!mMutated && super.mutate() == this) {
mStateListState.mutate();
mMutated = true;
@@ -360,15 +359,13 @@
return -1;
}
- @NonNull
@Override
- public Drawable newDrawable() {
+ public @NonNull Drawable newDrawable() {
return new StateListDrawableCompat(this, null);
}
- @NonNull
@Override
- public Drawable newDrawable(Resources res) {
+ public @NonNull Drawable newDrawable(Resources res) {
return new StateListDrawableCompat(this, res);
}
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/resources/Compatibility.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/resources/Compatibility.java
index 40ae0b8..a25c8d1 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/resources/Compatibility.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/resources/Compatibility.java
@@ -21,11 +21,11 @@
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@@ -49,7 +49,7 @@
public static void inflate(@NonNull Drawable drawable, @NonNull Resources r,
@NonNull XmlPullParser parser, @NonNull AttributeSet attrs,
- @Nullable Resources.Theme theme) throws IOException, XmlPullParserException {
+ Resources.@Nullable Theme theme) throws IOException, XmlPullParserException {
drawable.inflate(r, parser, attrs, theme);
}
@@ -57,10 +57,9 @@
return typedArray.getChangingConfigurations();
}
- @NonNull
- public static Drawable createFromXmlInner(@NonNull Resources r,
+ public static @NonNull Drawable createFromXmlInner(@NonNull Resources r,
@NonNull XmlPullParser parser, @NonNull AttributeSet attrs,
- @Nullable Resources.Theme theme) throws IOException, XmlPullParserException {
+ Resources.@Nullable Theme theme) throws IOException, XmlPullParserException {
return Drawable.createFromXmlInner(r, parser, attrs, theme);
}
}
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/DrawableUtils.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/DrawableUtils.java
index 2329750..675f466 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/DrawableUtils.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/DrawableUtils.java
@@ -26,11 +26,12 @@
import android.graphics.drawable.Drawable;
import android.os.Build;
-import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.core.graphics.drawable.DrawableCompat;
+import org.jspecify.annotations.NonNull;
+
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -51,8 +52,7 @@
* Allows us to get the optical insets for a {@link Drawable}. Since this is hidden we need to
* use reflection. Since the {@code Insets} class is hidden also, we return a Rect instead.
*/
- @NonNull
- public static Rect getOpticalBounds(@NonNull Drawable drawable) {
+ public static @NonNull Rect getOpticalBounds(@NonNull Drawable drawable) {
if (Build.VERSION.SDK_INT >= 29) {
final Insets insets = Api29Impl.getOpticalInsets(drawable);
return new Rect(
@@ -189,8 +189,7 @@
// This class is not instantiable.
}
- @NonNull
- static Rect getOpticalInsets(@NonNull Drawable drawable) {
+ static @NonNull Rect getOpticalInsets(@NonNull Drawable drawable) {
// Check the SDK_INT to avoid UncheckedReflection error.
if (Build.VERSION.SDK_INT < 29 && sReflectionSuccessful) {
try {
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java
index d64a144e..20e193a 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java
@@ -35,8 +35,6 @@
import android.util.Xml;
import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat;
import androidx.appcompat.resources.Compatibility;
@@ -50,6 +48,8 @@
import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat;
import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@@ -62,22 +62,21 @@
public final class ResourceManagerInternal {
@RestrictTo(LIBRARY_GROUP_PREFIX)
public interface ResourceManagerHooks {
- @Nullable
- Drawable createDrawableFor(@NonNull ResourceManagerInternal appCompatDrawableManager,
+ @Nullable Drawable createDrawableFor(
+ @NonNull ResourceManagerInternal appCompatDrawableManager,
@NonNull Context context, @DrawableRes final int resId);
boolean tintDrawable(@NonNull Context context, @DrawableRes int resId,
@NonNull Drawable drawable);
- @Nullable
- ColorStateList getTintListForDrawableRes(@NonNull Context context, @DrawableRes int resId);
+ @Nullable ColorStateList getTintListForDrawableRes(
+ @NonNull Context context, @DrawableRes int resId);
boolean tintDrawableUsingColorFilter(@NonNull Context context,
@DrawableRes final int resId, @NonNull Drawable drawable);
- @Nullable
- PorterDuff.Mode getTintModeForDrawableRes(final int resId);
+ PorterDuff.@Nullable Mode getTintModeForDrawableRes(final int resId);
}
private interface InflateDelegate {
Drawable createFromXmlInner(@NonNull Context context, @NonNull XmlPullParser parser,
- @NonNull AttributeSet attrs, @Nullable Resources.Theme theme);
+ @NonNull AttributeSet attrs, Resources.@Nullable Theme theme);
}
private static final String TAG = "ResourceManagerInternal";
@@ -311,7 +310,7 @@
return null;
}
- private synchronized Drawable getCachedDrawable(@NonNull final Context context,
+ private synchronized Drawable getCachedDrawable(final @NonNull Context context,
final long key) {
final LongSparseArray<WeakReference<ConstantState>> cache = mDrawableCaches.get(context);
if (cache == null) {
@@ -332,8 +331,8 @@
return null;
}
- private synchronized boolean addDrawableToCache(@NonNull final Context context, final long key,
- @NonNull final Drawable drawable) {
+ private synchronized boolean addDrawableToCache(final @NonNull Context context, final long key,
+ final @NonNull Drawable drawable) {
final ConstantState cs = drawable.getConstantState();
if (cs != null) {
LongSparseArray<WeakReference<ConstantState>> cache = mDrawableCaches.get(context);
@@ -515,7 +514,7 @@
@Override
public Drawable createFromXmlInner(@NonNull Context context, @NonNull XmlPullParser parser,
- @NonNull AttributeSet attrs, @Nullable Resources.Theme theme) {
+ @NonNull AttributeSet attrs, Resources.@Nullable Theme theme) {
try {
return VectorDrawableCompat
.createFromXmlInner(context.getResources(), parser, attrs, theme);
@@ -532,7 +531,7 @@
@Override
public Drawable createFromXmlInner(@NonNull Context context, @NonNull XmlPullParser parser,
- @NonNull AttributeSet attrs, @Nullable Resources.Theme theme) {
+ @NonNull AttributeSet attrs, Resources.@Nullable Theme theme) {
try {
return AnimatedVectorDrawableCompat
.createFromXmlInner(context, context.getResources(), parser, attrs, theme);
@@ -546,7 +545,7 @@
static class AsldcInflateDelegate implements InflateDelegate {
@Override
public Drawable createFromXmlInner(@NonNull Context context, @NonNull XmlPullParser parser,
- @NonNull AttributeSet attrs, @Nullable Resources.Theme theme) {
+ @NonNull AttributeSet attrs, Resources.@Nullable Theme theme) {
try {
return AnimatedStateListDrawableCompat
.createFromXmlInner(context, context.getResources(), parser, attrs, theme);
@@ -560,7 +559,7 @@
static class DrawableDelegate implements InflateDelegate {
@Override
public Drawable createFromXmlInner(@NonNull Context context, @NonNull XmlPullParser parser,
- @NonNull AttributeSet attrs, @Nullable Resources.Theme theme) {
+ @NonNull AttributeSet attrs, Resources.@Nullable Theme theme) {
String className = attrs.getClassAttribute();
if (className != null) {
try {
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/TintContextWrapper.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/TintContextWrapper.java
index dae6e11..92a8b07 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/TintContextWrapper.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/TintContextWrapper.java
@@ -24,9 +24,10 @@
import android.content.res.Resources;
import android.os.Build;
-import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
+import org.jspecify.annotations.NonNull;
+
import java.lang.ref.WeakReference;
import java.util.ArrayList;
@@ -41,7 +42,7 @@
private static final Object CACHE_LOCK = new Object();
private static ArrayList<WeakReference<TintContextWrapper>> sCache;
- public static Context wrap(@NonNull final Context context) {
+ public static Context wrap(final @NonNull Context context) {
if (shouldWrap(context)) {
synchronized (CACHE_LOCK) {
if (sCache == null) {
@@ -73,7 +74,7 @@
return context;
}
- private static boolean shouldWrap(@NonNull final Context context) {
+ private static boolean shouldWrap(final @NonNull Context context) {
if (context instanceof TintContextWrapper
|| context.getResources() instanceof TintResources
|| context.getResources() instanceof VectorEnabledTintResources) {
@@ -87,7 +88,7 @@
private final Resources mResources;
private final Resources.Theme mTheme;
- private TintContextWrapper(@NonNull final Context base) {
+ private TintContextWrapper(final @NonNull Context base) {
super(base);
if (VectorEnabledTintResources.shouldBeUsed()) {
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/TintResources.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/TintResources.java
index 9461000..c536410 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/TintResources.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/TintResources.java
@@ -20,7 +20,7 @@
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
-import androidx.annotation.NonNull;
+import org.jspecify.annotations.NonNull;
import java.lang.ref.WeakReference;
@@ -31,7 +31,7 @@
private final WeakReference<Context> mContextRef;
- public TintResources(@NonNull Context context, @NonNull final Resources res) {
+ public TintResources(@NonNull Context context, final @NonNull Resources res) {
super(res);
mContextRef = new WeakReference<>(context);
}
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/VectorEnabledTintResources.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/VectorEnabledTintResources.java
index dd9b704..2efd63a8 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/VectorEnabledTintResources.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/VectorEnabledTintResources.java
@@ -23,9 +23,10 @@
import android.graphics.drawable.Drawable;
import android.os.Build;
-import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
+import org.jspecify.annotations.NonNull;
+
import java.lang.ref.WeakReference;
/**
@@ -50,8 +51,8 @@
private final WeakReference<Context> mContextRef;
@SuppressWarnings("deprecation")
- public VectorEnabledTintResources(@NonNull final Context context,
- @NonNull final Resources res) {
+ public VectorEnabledTintResources(final @NonNull Context context,
+ final @NonNull Resources res) {
super(res);
mContextRef = new WeakReference<>(context);
}
diff --git a/appcompat/appcompat/build.gradle b/appcompat/appcompat/build.gradle
index 5dfee05..8fa8635 100644
--- a/appcompat/appcompat/build.gradle
+++ b/appcompat/appcompat/build.gradle
@@ -15,6 +15,7 @@
}
dependencies {
+ api(libs.jspecify)
api("androidx.annotation:annotation:1.8.1")
api("androidx.core:core:1.13.0")
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatDialogFragmentTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatDialogFragmentTest.java
index cf7049e..8613f5d 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatDialogFragmentTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatDialogFragmentTest.java
@@ -22,13 +22,13 @@
import android.app.Dialog;
import android.os.Bundle;
-import androidx.annotation.NonNull;
import androidx.appcompat.test.R;
import androidx.fragment.app.DialogFragment;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.LargeTest;
import androidx.test.platform.app.InstrumentationRegistry;
+import org.jspecify.annotations.NonNull;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -82,9 +82,8 @@
}
public static class TestDialogFragment extends AppCompatDialogFragment {
- @NonNull
@Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
+ public @NonNull Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(requireContext())
.setTitle("Test")
.setMessage("Message")
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatMenuItemIconTintingTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatMenuItemIconTintingTest.java
index 4b12878..f3e1ffc 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatMenuItemIconTintingTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatMenuItemIconTintingTest.java
@@ -29,7 +29,6 @@
import android.view.MenuItem;
import androidx.annotation.ColorInt;
-import androidx.annotation.NonNull;
import androidx.appcompat.test.R;
import androidx.appcompat.testutils.TestUtils;
import androidx.core.content.res.ResourcesCompat;
@@ -40,6 +39,7 @@
import androidx.test.filters.LargeTest;
import androidx.test.rule.ActivityTestRule;
+import org.jspecify.annotations.NonNull;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/BaseBasicsTestCase.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/BaseBasicsTestCase.java
index 9cf5964..f5ab27a 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/BaseBasicsTestCase.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/BaseBasicsTestCase.java
@@ -40,7 +40,6 @@
import android.view.View;
import android.view.WindowManager;
-import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.custom.FitWindowsContentLayout;
import androidx.appcompat.test.R;
@@ -56,6 +55,7 @@
import androidx.test.filters.SmallTest;
import androidx.test.rule.ActivityTestRule;
+import org.jspecify.annotations.NonNull;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
@@ -386,7 +386,7 @@
verify(apCallback).onSupportActionModeFinished(any(ActionMode.class));
}
- private WindowInsetsCompat waitForWindowInsets(@NonNull final View view) throws Throwable {
+ private WindowInsetsCompat waitForWindowInsets(final @NonNull View view) throws Throwable {
final CountDownLatch latch = new CountDownLatch(1);
final AtomicReference<WindowInsetsCompat> received = new AtomicReference<>();
// Set a listener to catch WindowInsets
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/CustomCollapsibleView.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/CustomCollapsibleView.java
index 76ee4ad..be13793 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/CustomCollapsibleView.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/CustomCollapsibleView.java
@@ -20,9 +20,10 @@
import android.util.AttributeSet;
import android.view.View;
-import androidx.annotation.Nullable;
import androidx.appcompat.view.CollapsibleActionView;
+import org.jspecify.annotations.Nullable;
+
public class CustomCollapsibleView extends View implements CollapsibleActionView {
public CustomCollapsibleView(Context context) {
this(context, null, 0);
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/FragmentContentIdActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/FragmentContentIdActivity.java
index 935ec3f..2d2cef9 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/FragmentContentIdActivity.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/FragmentContentIdActivity.java
@@ -20,11 +20,11 @@
import android.view.View;
import android.view.ViewGroup;
-import androidx.annotation.Nullable;
import androidx.appcompat.test.R;
import androidx.appcompat.testutils.BaseTestActivity;
import androidx.fragment.app.Fragment;
+import org.jspecify.annotations.Nullable;
public class FragmentContentIdActivity extends BaseTestActivity {
@@ -60,9 +60,8 @@
}
public static class FragmentB extends Fragment {
- @Nullable
@Override
- public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
+ public @Nullable View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = new View(getContext());
view.setId(R.id.fragment_b);
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesUpdateActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesUpdateActivity.java
index 7678876..c7fcc95 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesUpdateActivity.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesUpdateActivity.java
@@ -22,12 +22,13 @@
import android.os.Build;
import android.os.Bundle;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.test.R;
import androidx.appcompat.testutils.BaseTestActivity;
import androidx.core.os.LocaleListCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
@@ -83,8 +84,7 @@
mOnDestroySemaphore.release();
}
- @Nullable
- Configuration getLastConfigurationChangeAndClear() {
+ @Nullable Configuration getLastConfigurationChangeAndClear() {
final Configuration config = mLastConfigurationChange;
mLastConfigurationChange = null;
return config;
@@ -94,8 +94,7 @@
* @return a copy of the {@link Configuration} from the most recent call to {@link #onCreate} or
* {@link #onConfigurationChanged}, or {@code null} if neither has been called yet
*/
- @Nullable
- Configuration getEffectiveConfiguration() {
+ @Nullable Configuration getEffectiveConfiguration() {
return mEffectiveConfiguration;
}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeActivity.java
index 376c362..ce04aa3 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeActivity.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeActivity.java
@@ -19,11 +19,12 @@
import android.content.res.Configuration;
import android.os.Bundle;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.test.R;
import androidx.appcompat.testutils.BaseTestActivity;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
@@ -81,8 +82,7 @@
mOnDestroySemaphore.release();
}
- @Nullable
- Configuration getLastConfigurationChangeAndClear() {
+ @Nullable Configuration getLastConfigurationChangeAndClear() {
final Configuration config = mLastConfigurationChange;
mLastConfigurationChange = null;
return config;
@@ -92,8 +92,7 @@
* @return a copy of the {@link Configuration} from the most recent call to {@link #onCreate} or
* {@link #onConfigurationChanged}, or {@code null} if neither has been called yet
*/
- @Nullable
- Configuration getEffectiveConfiguration() {
+ @Nullable Configuration getEffectiveConfiguration() {
return mEffectiveConfiguration;
}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/TestDialogFragment.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/TestDialogFragment.java
index 907c068..d00422c 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/TestDialogFragment.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/TestDialogFragment.java
@@ -19,10 +19,11 @@
import android.app.Dialog;
import android.os.Bundle;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* Test class extending DialogFragment used for testing of configuration changes like nightMode and
* locales.
@@ -37,9 +38,8 @@
return new TestDialogFragment();
}
- @NonNull
@Override
- public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+ public @NonNull Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(requireContext());
builder.setTitle("TestDialogFragment");
builder.setMessage("TestDialogFragment");
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorActivity.java
index 1aff03c..e2555bb 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorActivity.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorActivity.java
@@ -19,9 +19,10 @@
import android.content.res.Configuration;
import android.os.Bundle;
-import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
+import org.jspecify.annotations.NonNull;
+
import java.util.concurrent.CountDownLatch;
public class FilternatorActivity extends AppCompatActivity {
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorActivityWithCustomDefault.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorActivityWithCustomDefault.java
index f8763e9..ac2f7c5 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorActivityWithCustomDefault.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorActivityWithCustomDefault.java
@@ -19,10 +19,11 @@
import android.content.res.Configuration;
import android.os.Bundle;
-import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
+import org.jspecify.annotations.NonNull;
+
import java.util.concurrent.CountDownLatch;
public class FilternatorActivityWithCustomDefault extends AppCompatActivity {
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/OldTranslateActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/OldTranslateActivity.java
index 3e554f1..2e78dbe 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/OldTranslateActivity.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/OldTranslateActivity.java
@@ -18,10 +18,11 @@
import android.os.Bundle;
-import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.test.R;
+import org.jspecify.annotations.Nullable;
+
public class OldTranslateActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/inflater/CustomViewInflater.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/inflater/CustomViewInflater.java
index b1804b9..58968fa 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/inflater/CustomViewInflater.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/inflater/CustomViewInflater.java
@@ -19,14 +19,15 @@
import android.content.Context;
import android.util.AttributeSet;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatViewInflater;
import androidx.appcompat.widget.AppCompatButton;
import androidx.appcompat.widget.AppCompatImageButton;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.appcompat.widget.AppCompatToggleButton;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* Custom view inflater that takes over the inflation of a few widget types.
*/
@@ -89,27 +90,24 @@
}
}
- @NonNull
@Override
- protected AppCompatButton createButton(Context context, AttributeSet attrs) {
+ protected @NonNull AppCompatButton createButton(Context context, AttributeSet attrs) {
return new CustomButton(context, attrs);
}
- @NonNull
@Override
- protected AppCompatTextView createTextView(Context context, AttributeSet attrs) {
+ protected @NonNull AppCompatTextView createTextView(Context context, AttributeSet attrs) {
return new CustomTextView(context, attrs);
}
- @NonNull
@Override
- protected AppCompatImageButton createImageButton(Context context, AttributeSet attrs) {
+ protected @NonNull AppCompatImageButton createImageButton(Context context, AttributeSet attrs) {
return new CustomImageButton(context, attrs);
}
- @NonNull
@Override
- protected AppCompatToggleButton createToggleButton(Context context, AttributeSet attrs) {
+ protected @NonNull AppCompatToggleButton createToggleButton(
+ Context context, AttributeSet attrs) {
return new CustomToggleButton(context, attrs);
}
}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/inflater/MisbehavingViewInflater.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/inflater/MisbehavingViewInflater.java
index fbe91cc2..a1aec1c 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/inflater/MisbehavingViewInflater.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/inflater/MisbehavingViewInflater.java
@@ -19,19 +19,19 @@
import android.content.Context;
import android.util.AttributeSet;
-import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatViewInflater;
import androidx.appcompat.widget.AppCompatButton;
+import org.jspecify.annotations.NonNull;
+
/**
* Custom view inflater that declares that it takes over the view inflation but
* does not honor the contract to return non-null instance in its
* {@link #createButton(Context, AttributeSet)} method.
*/
public class MisbehavingViewInflater extends AppCompatViewInflater {
- @NonNull
@Override
- protected AppCompatButton createButton(Context context, AttributeSet attrs) {
+ protected @NonNull AppCompatButton createButton(Context context, AttributeSet attrs) {
return null;
}
}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/BaseTestActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/BaseTestActivity.java
index bb1de01..9c29c97 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/BaseTestActivity.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/BaseTestActivity.java
@@ -25,14 +25,15 @@
import android.view.MenuItem;
import android.view.WindowManager;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatCallback;
import androidx.appcompat.test.R;
import androidx.appcompat.view.ActionMode;
import androidx.testutils.LocaleTestUtils;
import androidx.testutils.RecreatedAppCompatActivity;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.util.Locale;
public abstract class BaseTestActivity extends RecreatedAppCompatActivity {
@@ -244,9 +245,9 @@
}
}
- @Nullable
@Override
- public ActionMode onWindowStartingSupportActionMode(@NonNull ActionMode.Callback callback) {
+ public @Nullable ActionMode onWindowStartingSupportActionMode(
+ ActionMode.@NonNull Callback callback) {
if (mAppCompatCallback != null) {
return mAppCompatCallback.onWindowStartingSupportActionMode(callback);
}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/DrawerLayoutActions.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/DrawerLayoutActions.java
index 495491c..ed5107a 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/DrawerLayoutActions.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/DrawerLayoutActions.java
@@ -20,7 +20,6 @@
import android.view.View;
-import androidx.annotation.Nullable;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.test.espresso.Espresso;
import androidx.test.espresso.IdlingResource;
@@ -28,6 +27,7 @@
import androidx.test.espresso.ViewAction;
import org.hamcrest.Matcher;
+import org.jspecify.annotations.Nullable;
public class DrawerLayoutActions {
/**
@@ -38,7 +38,7 @@
implements DrawerLayout.DrawerListener, IdlingResource {
private int mCurrState = DrawerLayout.STATE_IDLE;
- @Nullable private IdlingResource.ResourceCallback mCallback;
+ private IdlingResource.@Nullable ResourceCallback mCallback;
private boolean mNeedsIdle = false;
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/TestUtils.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/TestUtils.java
index e13aa1a..cfcf7da 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/TestUtils.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/TestUtils.java
@@ -36,14 +36,15 @@
import android.view.ViewTreeObserver.OnDrawListener;
import androidx.annotation.ColorInt;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.appcompat.widget.TintTypedArray;
import androidx.core.util.Pair;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.rule.ActivityTestRule;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
@@ -371,8 +372,8 @@
* @param runner the runnable to run on the main thread, or {@code null} to
* simply force invalidation and a draw pass
*/
- public static void runOnMainAndDrawSync(@NonNull final ActivityTestRule activityTestRule,
- @NonNull final View view, @Nullable final Runnable runner) {
+ public static void runOnMainAndDrawSync(final @NonNull ActivityTestRule activityTestRule,
+ final @NonNull View view, final @Nullable Runnable runner) {
final CountDownLatch latch = new CountDownLatch(1);
try {
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAutoCompleteTextViewEmojiTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAutoCompleteTextViewEmojiTest.java
index 2eefa1f..a11f943 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAutoCompleteTextViewEmojiTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAutoCompleteTextViewEmojiTest.java
@@ -22,12 +22,12 @@
import android.text.method.DigitsKeyListener;
import android.text.method.KeyListener;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.test.annotation.UiThreadTest;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseImageViewTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseImageViewTest.java
index 44ce501..e3e6b80 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseImageViewTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseImageViewTest.java
@@ -30,7 +30,6 @@
import androidx.annotation.ColorInt;
import androidx.annotation.IdRes;
-import androidx.annotation.NonNull;
import androidx.appcompat.test.R;
import androidx.appcompat.testutils.AppCompatTintableViewActions;
import androidx.appcompat.testutils.BaseTestActivity;
@@ -40,6 +39,7 @@
import androidx.test.annotation.UiThreadTest;
import androidx.test.filters.MediumTest;
+import org.jspecify.annotations.NonNull;
import org.junit.Test;
/**
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseViewTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseViewTest.java
index d87f8fb..0798649 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseViewTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseViewTest.java
@@ -25,8 +25,8 @@
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
-import static androidx.testutils.lifecycle.LifecycleOwnerUtils.waitUntilState;
import static androidx.testutils.PollingCheck.waitFor;
+import static androidx.testutils.lifecycle.LifecycleOwnerUtils.waitUntilState;
import static org.junit.Assert.assertNull;
@@ -39,7 +39,6 @@
import androidx.annotation.ColorInt;
import androidx.annotation.IdRes;
-import androidx.annotation.NonNull;
import androidx.appcompat.test.R;
import androidx.appcompat.testutils.AppCompatTintableViewActions;
import androidx.appcompat.testutils.BaseTestActivity;
@@ -51,6 +50,7 @@
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.MediumTest;
+import org.jspecify.annotations.NonNull;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextEmojiTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextEmojiTest.java
index 534c451..11a91cd 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextEmojiTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextEmojiTest.java
@@ -24,13 +24,13 @@
import android.text.method.NumberKeyListener;
import android.view.KeyEvent;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.test.R;
import androidx.test.annotation.UiThreadTest;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextReceiveContentTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextReceiveContentTest.java
index 005ca1a..ccfb32f 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextReceiveContentTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextReceiveContentTest.java
@@ -47,8 +47,6 @@
import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputContentInfo;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.test.R;
import androidx.core.util.ObjectsCompat;
@@ -64,6 +62,8 @@
import androidx.test.filters.SdkSuppress;
import androidx.test.rule.ActivityTestRule;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
@@ -598,14 +598,11 @@
private static class PayloadArgumentMatcher implements ArgumentMatcher<ContentInfoCompat> {
public static final String EXTRA_KEY = "testExtra";
- @NonNull
- private final ClipData mClip;
+ private final @NonNull ClipData mClip;
private final int mSource;
private final int mFlags;
- @Nullable
- private final Uri mLinkUri;
- @Nullable
- private final String mExtraValue;
+ private final @Nullable Uri mLinkUri;
+ private final @Nullable String mExtraValue;
private PayloadArgumentMatcher(@NonNull ClipData clip, int source, int flags,
@Nullable Uri linkUri, @Nullable String extraValue) {
@@ -616,9 +613,8 @@
mExtraValue = extraValue;
}
- @NonNull
@Override
- public String toString() {
+ public @NonNull String toString() {
return "[" + "clip=" + mClip + ", source=" + mSource + ", flags=" + mFlags
+ ", linkUri=" + mLinkUri + ", extraValue=" + mExtraValue + "]";
}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextViewEmojiTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextViewEmojiTest.java
index 49640e8..137aa96 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextViewEmojiTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextViewEmojiTest.java
@@ -22,12 +22,12 @@
import android.text.method.DigitsKeyListener;
import android.text.method.KeyListener;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.test.annotation.UiThreadTest;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeTest.java
index 2a3c537..f8c4b67 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeTest.java
@@ -26,13 +26,13 @@
import android.util.AttributeSet;
import android.widget.LinearLayout;
-import androidx.annotation.Nullable;
import androidx.appcompat.test.R;
import androidx.core.widget.TextViewCompat;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.MediumTest;
import androidx.test.filters.SmallTest;
+import org.jspecify.annotations.Nullable;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/ToolbarTestActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/ToolbarTestActivity.java
index b4123e9..5ff5184 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/ToolbarTestActivity.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/ToolbarTestActivity.java
@@ -18,10 +18,11 @@
import android.os.Bundle;
-import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.test.R;
+import org.jspecify.annotations.Nullable;
+
public class ToolbarTestActivity extends AppCompatActivity {
@Override
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/ActionBar.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/ActionBar.java
index fb0241a..4333c77 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/ActionBar.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/ActionBar.java
@@ -32,8 +32,6 @@
import androidx.annotation.DrawableRes;
import androidx.annotation.IntDef;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.annotation.StringRes;
import androidx.appcompat.R;
@@ -42,6 +40,9 @@
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -549,8 +550,7 @@
*
* @return The current ActionBar title or null.
*/
- @Nullable
- public abstract CharSequence getTitle();
+ public abstract @Nullable CharSequence getTitle();
/**
* Returns the current ActionBar subtitle in standard mode.
@@ -559,8 +559,7 @@
*
* @return The current ActionBar subtitle or null.
*/
- @Nullable
- public abstract CharSequence getSubtitle();
+ public abstract @Nullable CharSequence getSubtitle();
/**
* Returns the current navigation mode. The result will be one of:
@@ -745,8 +744,7 @@
* navigation patterns</a> instead.
*/
@Deprecated
- @Nullable
- public abstract Tab getSelectedTab();
+ public abstract @Nullable Tab getSelectedTab();
/**
* Returns the tab at the specified index.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java
index c3925bf..71d5d6a 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java
@@ -25,14 +25,15 @@
import android.view.MenuItem;
import android.view.View;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.appcompat.graphics.drawable.DrawerArrowDrawable;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* This class provides a handy way to tie together the functionality of
* {@link DrawerLayout} and the framework <code>ActionBar</code> to
@@ -74,8 +75,7 @@
* @return Delegate to use for ActionBarDrawableToggles, or null if the Activity
* does not wish to override the default behavior.
*/
- @Nullable
- Delegate getDrawerToggleDelegate();
+ @Nullable Delegate getDrawerToggleDelegate();
}
public interface Delegate {
@@ -365,8 +365,7 @@
/**
* @return DrawerArrowDrawable that is currently shown by the ActionBarDrawerToggle.
*/
- @NonNull
- public DrawerArrowDrawable getDrawerArrowDrawable() {
+ public @NonNull DrawerArrowDrawable getDrawerArrowDrawable() {
return mSlider;
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AlertController.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AlertController.java
index e1ca2bc..7dabfdd 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AlertController.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AlertController.java
@@ -54,12 +54,13 @@
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
-import androidx.annotation.Nullable;
import androidx.appcompat.R;
import androidx.appcompat.widget.LinearLayoutCompat;
import androidx.core.view.ViewCompat;
import androidx.core.widget.NestedScrollView;
+import org.jspecify.annotations.Nullable;
+
import java.lang.ref.WeakReference;
class AlertController {
@@ -437,8 +438,8 @@
* @param defaultPanel the default panel
* @return the panel to use
*/
- @Nullable
- private ViewGroup resolvePanel(@Nullable View customPanel, @Nullable View defaultPanel) {
+ private @Nullable ViewGroup resolvePanel(
+ @Nullable View customPanel, @Nullable View defaultPanel) {
if (customPanel == null) {
// Inflate the default panel, if needed.
if (defaultPanel instanceof ViewStub) {
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AlertDialog.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AlertDialog.java
index 1e4fc9d..ce6244b 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AlertDialog.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AlertDialog.java
@@ -37,13 +37,14 @@
import androidx.annotation.ArrayRes;
import androidx.annotation.AttrRes;
import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.annotation.StringRes;
import androidx.annotation.StyleRes;
import androidx.appcompat.R;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* A subclass of Dialog that can display one, two or three buttons. If you only want to
* display a String in this dialog box, use the setMessage() method. If you
@@ -352,8 +353,7 @@
*
* @return A Context for built Dialogs.
*/
- @NonNull
- public Context getContext() {
+ public @NonNull Context getContext() {
return P.mContext;
}
@@ -975,8 +975,7 @@
* processing is needed, {@link #show()} may be called instead to both
* create and display the dialog.
*/
- @NonNull
- public AlertDialog create() {
+ public @NonNull AlertDialog create() {
// We can't use Dialog's 3-arg constructor with the createThemeContextWrapper param,
// so we always have to re-set the theme
final AlertDialog dialog = new AlertDialog(P.mContext, mTheme);
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
index cfe80b38..bd983f3 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
@@ -36,8 +36,6 @@
import androidx.annotation.ContentView;
import androidx.annotation.IdRes;
import androidx.annotation.LayoutRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.StyleRes;
import androidx.appcompat.app.AppCompatDelegate.NightMode;
import androidx.appcompat.view.ActionMode;
@@ -53,6 +51,9 @@
import androidx.savedstate.SavedStateRegistry;
import androidx.savedstate.ViewTreeSavedStateRegistryOwner;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* Base class for activities that wish to use some of the newer platform features on older
* Android devices. Some of these backported features include:
@@ -117,9 +118,8 @@
// TODO: Directly connect AppCompatDelegate to SavedStateRegistry
getSavedStateRegistry().registerSavedStateProvider(DELEGATE_TAG,
new SavedStateRegistry.SavedStateProvider() {
- @NonNull
@Override
- public Bundle saveState() {
+ public @NonNull Bundle saveState() {
Bundle outState = new Bundle();
getDelegate().onSaveInstanceState(outState);
return outState;
@@ -160,8 +160,7 @@
*
* @return The Activity's ActionBar, or null if it does not have one.
*/
- @Nullable
- public ActionBar getSupportActionBar() {
+ public @Nullable ActionBar getSupportActionBar() {
return getDelegate().getSupportActionBar();
}
@@ -185,9 +184,8 @@
getDelegate().setSupportActionBar(toolbar);
}
- @NonNull
@Override
- public MenuInflater getMenuInflater() {
+ public @NonNull MenuInflater getMenuInflater() {
return getDelegate().getMenuInflater();
}
@@ -265,7 +263,7 @@
}
@Override
- public final boolean onMenuItemSelected(int featureId, @NonNull android.view.MenuItem item) {
+ public final boolean onMenuItemSelected(int featureId, android.view.@NonNull MenuItem item) {
if (super.onMenuItemSelected(featureId, item)) {
return true;
}
@@ -350,9 +348,9 @@
* @param callback Callback to control the lifecycle of this action mode
* @return The ActionMode that was started, or null if the system should present it
*/
- @Nullable
@Override
- public ActionMode onWindowStartingSupportActionMode(@NonNull ActionMode.Callback callback) {
+ public @Nullable ActionMode onWindowStartingSupportActionMode(
+ ActionMode.@NonNull Callback callback) {
return null;
}
@@ -362,8 +360,7 @@
* @param callback Callback that will manage lifecycle events for this context mode
* @return The ContextMode that was started, or null if it was canceled
*/
- @Nullable
- public ActionMode startSupportActionMode(@NonNull ActionMode.Callback callback) {
+ public @Nullable ActionMode startSupportActionMode(ActionMode.@NonNull Callback callback) {
return getDelegate().startSupportActionMode(callback);
}
@@ -499,9 +496,8 @@
*
* @return a new Intent targeting the defined parent activity of sourceActivity
*/
- @Nullable
@Override
- public Intent getSupportParentActivityIntent() {
+ public @Nullable Intent getSupportParentActivityIntent() {
return NavUtils.getParentActivityIntent(this);
}
@@ -552,9 +548,8 @@
public void onSupportContentChanged() {
}
- @Nullable
@Override
- public ActionBarDrawerToggle.Delegate getDrawerToggleDelegate() {
+ public ActionBarDrawerToggle.@Nullable Delegate getDrawerToggleDelegate() {
return getDelegate().getDrawerToggleDelegate();
}
@@ -583,8 +578,7 @@
/**
* @return The {@link AppCompatDelegate} being used by this Activity.
*/
- @NonNull
- public AppCompatDelegate getDelegate() {
+ public @NonNull AppCompatDelegate getDelegate() {
if (mDelegate == null) {
mDelegate = AppCompatDelegate.create(this, this);
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatCallback.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatCallback.java
index 0447939..cae571e 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatCallback.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatCallback.java
@@ -16,9 +16,10 @@
package androidx.appcompat.app;
-import androidx.annotation.Nullable;
import androidx.appcompat.view.ActionMode;
+import org.jspecify.annotations.Nullable;
+
/**
* Implemented this in order for AppCompat to be able to callback in certain situations.
* <p>
@@ -50,6 +51,5 @@
* @param callback Callback to control the lifecycle of this action mode
* @return The ActionMode that was started, or null if the system should present it
*/
- @Nullable
- ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback);
+ @Nullable ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback);
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
index a1d6165b..e6a1cd5 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
@@ -47,8 +47,6 @@
import androidx.annotation.IdRes;
import androidx.annotation.IntDef;
import androidx.annotation.LayoutRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.annotation.StyleRes;
@@ -62,6 +60,9 @@
import androidx.core.view.WindowCompat;
import androidx.fragment.app.FragmentActivity;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.ref.WeakReference;
@@ -305,8 +306,7 @@
*
* @param callback An optional callback for AppCompat specific events
*/
- @NonNull
- public static AppCompatDelegate create(@NonNull Activity activity,
+ public static @NonNull AppCompatDelegate create(@NonNull Activity activity,
@Nullable AppCompatCallback callback) {
return new AppCompatDelegateImpl(activity, callback);
}
@@ -316,8 +316,7 @@
*
* @param callback An optional callback for AppCompat specific events
*/
- @NonNull
- public static AppCompatDelegate create(@NonNull Dialog dialog,
+ public static @NonNull AppCompatDelegate create(@NonNull Dialog dialog,
@Nullable AppCompatCallback callback) {
return new AppCompatDelegateImpl(dialog, callback);
}
@@ -328,9 +327,8 @@
*
* @param callback An optional callback for AppCompat specific events
*/
- @NonNull
- public static AppCompatDelegate create(@NonNull Context context, @NonNull Window window,
- @Nullable AppCompatCallback callback) {
+ public static @NonNull AppCompatDelegate create(@NonNull Context context,
+ @NonNull Window window, @Nullable AppCompatCallback callback) {
return new AppCompatDelegateImpl(context, window, callback);
}
@@ -340,9 +338,8 @@
*
* @param callback An optional callback for AppCompat specific events
*/
- @NonNull
- public static AppCompatDelegate create(@NonNull Context context, @NonNull Activity activity,
- @Nullable AppCompatCallback callback) {
+ public static @NonNull AppCompatDelegate create(@NonNull Context context,
+ @NonNull Activity activity, @Nullable AppCompatCallback callback) {
return new AppCompatDelegateImpl(context, activity, callback);
}
@@ -356,8 +353,7 @@
*
* @return AppCompat's action bar, or null if it does not have one.
*/
- @Nullable
- public abstract ActionBar getSupportActionBar();
+ public abstract @Nullable ActionBar getSupportActionBar();
/**
* Set a {@link Toolbar} to act as the {@link ActionBar} for this delegate.
@@ -435,8 +431,7 @@
* @return The view if found or null otherwise.
*/
@SuppressWarnings("TypeParameterUnusedInFormals")
- @Nullable
- public abstract <T extends View> T findViewById(@IdRes int id);
+ public abstract <T extends View> @Nullable T findViewById(@IdRes int id);
/**
* Should be called instead of {@link Activity#setContentView(android.view.View)}}
@@ -470,9 +465,8 @@
/**
* Should be called from {@link Activity#attachBaseContext(Context)}.
*/
- @NonNull
@CallSuper
- public Context attachBaseContext2(@NonNull Context context) {
+ public @NonNull Context attachBaseContext2(@NonNull Context context) {
attachBaseContext(context);
return context;
}
@@ -497,8 +491,7 @@
* Returns an {@link ActionBarDrawerToggle.Delegate} which can be returned from your Activity
* if it implements {@link ActionBarDrawerToggle.DelegateProvider}.
*/
- @Nullable
- public abstract ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
+ public abstract ActionBarDrawerToggle.@Nullable Delegate getDrawerToggleDelegate();
/**
* Enable extended window features. This should be called instead of
@@ -527,8 +520,8 @@
* @param callback Callback that will manage lifecycle events for this context mode
* @return The ContextMode that was started, or null if it was canceled
*/
- @Nullable
- public abstract ActionMode startSupportActionMode(@NonNull ActionMode.Callback callback);
+ public abstract @Nullable ActionMode startSupportActionMode(
+ ActionMode.@NonNull Callback callback);
/**
* Installs AppCompat's {@link android.view.LayoutInflater} Factory so that it can replace
@@ -637,8 +630,7 @@
/**
* Returns the context for the current delegate.
*/
- @Nullable
- public Context getContextForDelegate() {
+ public @Nullable Context getContextForDelegate() {
return null;
}
@@ -815,8 +807,7 @@
* Activity.onCreate().</b></p>
*/
@AnyThread
- @NonNull
- public static LocaleListCompat getApplicationLocales() {
+ public static @NonNull LocaleListCompat getApplicationLocales() {
if (Build.VERSION.SDK_INT >= 33) {
// If the API version is 33 or above we want to redirect the call to the framework API.
Object localeManager = getLocaleManagerForApplication();
@@ -849,8 +840,7 @@
*
* @see #setApplicationLocales(LocaleListCompat)
*/
- @Nullable
- static LocaleListCompat getRequestedAppLocales() {
+ static @Nullable LocaleListCompat getRequestedAppLocales() {
return sRequestedAppLocales;
}
@@ -859,8 +849,7 @@
*
* @see #setApplicationLocales(LocaleListCompat)
*/
- @Nullable
- static LocaleListCompat getStoredAppLocales() {
+ static @Nullable LocaleListCompat getStoredAppLocales() {
return sStoredAppLocales;
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
index 6f787f3..9347e01 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
@@ -79,8 +79,6 @@
import androidx.annotation.CallSuper;
import androidx.annotation.IdRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.annotation.StyleRes;
@@ -126,6 +124,8 @@
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleOwner;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
import org.xmlpull.v1.XmlPullParser;
import java.util.List;
@@ -376,10 +376,9 @@
}
}
- @NonNull
@Override
@CallSuper
- public Context attachBaseContext2(@NonNull final Context baseContext) {
+ public @NonNull Context attachBaseContext2(final @NonNull Context baseContext) {
mBaseContextAttached = true;
// This is a tricky method. Here are some things to avoid:
@@ -660,9 +659,8 @@
}
@SuppressWarnings({"TypeParameterUnusedInFormals", "unchecked"})
- @Nullable
@Override
- public <T extends View> T findViewById(@IdRes int id) {
+ public <T extends View> @Nullable T findViewById(@IdRes int id) {
ensureSubDecor();
return (T) mWindow.findViewById(id);
}
@@ -1243,7 +1241,7 @@
}
@Override
- public ActionMode startSupportActionMode(@NonNull final ActionMode.Callback callback) {
+ public ActionMode startSupportActionMode(final ActionMode.@NonNull Callback callback) {
if (callback == null) {
throw new IllegalArgumentException("ActionMode callback can not be null.");
}
@@ -1280,7 +1278,7 @@
invalidatePanelMenu(FEATURE_OPTIONS_PANEL);
}
- ActionMode startSupportActionModeFromWindow(@NonNull ActionMode.Callback callback) {
+ ActionMode startSupportActionModeFromWindow(ActionMode.@NonNull Callback callback) {
endOnGoingFadeAnimation();
if (mActionMode != null) {
mActionMode.finish();
@@ -1713,8 +1711,7 @@
return onCreateView(null, name, context, attrs);
}
- @Nullable
- private AppCompatActivity tryUnwrapContext() {
+ private @Nullable AppCompatActivity tryUnwrapContext() {
Context context = mContext;
while (context != null) {
if (context instanceof AppCompatActivity) {
@@ -2297,8 +2294,8 @@
* @param rectInsets the current system window insets if {@code insets} is not available
* @return the new top system window inset
*/
- final int updateStatusGuard(@Nullable final WindowInsetsCompat insets,
- @Nullable final Rect rectInsets) {
+ final int updateStatusGuard(final @Nullable WindowInsetsCompat insets,
+ final @Nullable Rect rectInsets) {
int systemWindowInsetTop = 0;
if (insets != null) {
systemWindowInsetTop = insets.getSystemWindowInsetTop();
@@ -2557,8 +2554,7 @@
* checks for requested app-specific locales and returns them after an overlay
* with the system locales. If requested app-specific do not exist, it returns a null.
*/
- @Nullable
- LocaleListCompat calculateApplicationLocales(@NonNull Context context) {
+ @Nullable LocaleListCompat calculateApplicationLocales(@NonNull Context context) {
if (Build.VERSION.SDK_INT >= 33) {
return null;
}
@@ -2686,8 +2682,7 @@
}
}
- @NonNull
- private Configuration createOverrideAppConfiguration(@NonNull Context context,
+ private @NonNull Configuration createOverrideAppConfiguration(@NonNull Context context,
@ApplyableNightMode int mode, @Nullable LocaleListCompat locales,
@Nullable Configuration configOverlay, boolean ignoreFollowSystem) {
int newNightMode;
@@ -2858,7 +2853,7 @@
}
private void updateResourcesConfiguration(int uiModeNightModeValue,
- @Nullable final LocaleListCompat locales, final boolean callOnConfigChange,
+ final @Nullable LocaleListCompat locales, final boolean callOnConfigChange,
@Nullable Configuration configOverlay) {
// If the Activity is not set to handle config changes we will
// update the Resources with a new Configuration with updated nightMode and locales.
@@ -2918,10 +2913,9 @@
/**
*/
- @NonNull
@RestrictTo(LIBRARY)
@VisibleForTesting
- final AutoNightModeManager getAutoTimeNightModeManager() {
+ final @NonNull AutoNightModeManager getAutoTimeNightModeManager() {
return getAutoTimeNightModeManager(mContext);
}
@@ -3368,8 +3362,7 @@
interface ActionBarMenuCallback {
boolean onPreparePanel(int featureId);
- @Nullable
- View onCreatePanelView(int featureId);
+ @Nullable View onCreatePanelView(int featureId);
}
class AppCompatWindowCallback extends WindowCallbackWrapper {
@@ -3636,8 +3629,7 @@
mContext.registerReceiver(mReceiver, filter);
}
- @Nullable
- abstract IntentFilter createIntentFilterForBroadcastReceiver();
+ abstract @Nullable IntentFilter createIntentFilterForBroadcastReceiver();
void cleanup() {
if (mReceiver != null) {
@@ -3778,8 +3770,7 @@
* <p>
* This is fine for device configurations as no member is ever undefined.
*/
- @NonNull
- private static Configuration generateConfigDelta(@NonNull Configuration base,
+ private static @NonNull Configuration generateConfigDelta(@NonNull Configuration base,
@Nullable Configuration change) {
final Configuration delta = new Configuration();
delta.fontScale = 0;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialog.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialog.java
index 6b4759e..45a10d7 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialog.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialog.java
@@ -29,8 +29,6 @@
import androidx.activity.ViewTreeOnBackPressedDispatcherOwner;
import androidx.annotation.IdRes;
import androidx.annotation.LayoutRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.appcompat.view.ActionMode;
@@ -38,6 +36,9 @@
import androidx.lifecycle.ViewTreeLifecycleOwner;
import androidx.savedstate.ViewTreeSavedStateRegistryOwner;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* Base class for AppCompat themed {@link android.app.Dialog}s.
*/
@@ -120,9 +121,8 @@
}
@SuppressWarnings("TypeParameterUnusedInFormals")
- @Nullable
@Override
- public <T extends View> T findViewById(@IdRes int id) {
+ public <T extends View> @Nullable T findViewById(@IdRes int id) {
return getDelegate().findViewById(id);
}
@@ -186,8 +186,7 @@
/**
* @return The {@link AppCompatDelegate} being used by this Dialog.
*/
- @NonNull
- public AppCompatDelegate getDelegate() {
+ public @NonNull AppCompatDelegate getDelegate() {
if (mDelegate == null) {
mDelegate = AppCompatDelegate.create(this, this);
}
@@ -212,9 +211,8 @@
public void onSupportActionModeFinished(ActionMode mode) {
}
- @Nullable
@Override
- public ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback) {
+ public @Nullable ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback) {
return null;
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialogFragment.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialogFragment.java
index ffa9967..345b83d 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialogFragment.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialogFragment.java
@@ -25,11 +25,12 @@
import android.view.WindowManager;
import androidx.annotation.LayoutRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.fragment.app.DialogFragment;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* A special version of {@link DialogFragment} which uses an {@link AppCompatDialog} in place of a
* platform-styled dialog.
@@ -48,9 +49,8 @@
super(contentLayoutId);
}
- @NonNull
@Override
- public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+ public @NonNull Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
return new AppCompatDialog(getContext(), getTheme());
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatViewInflater.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatViewInflater.java
index f6de633..6f4dc4c 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatViewInflater.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatViewInflater.java
@@ -25,8 +25,6 @@
import android.view.InflateException;
import android.view.View;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.R;
import androidx.appcompat.view.ContextThemeWrapper;
import androidx.appcompat.widget.AppCompatAutoCompleteTextView;
@@ -47,6 +45,9 @@
import androidx.collection.SimpleArrayMap;
import androidx.core.view.ViewCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -120,8 +121,7 @@
* additional resource system feature backports
* @return an AppCompat-compatible widget
*/
- @Nullable
- public final View createView(@Nullable View parent, @NonNull final String name,
+ public final @Nullable View createView(@Nullable View parent, final @NonNull String name,
@NonNull Context context,
@NonNull AttributeSet attrs, boolean inheritContext,
boolean readAndroidTheme, boolean readAppTheme, boolean wrapContext) {
@@ -223,75 +223,63 @@
return view;
}
- @NonNull
- protected AppCompatTextView createTextView(Context context, AttributeSet attrs) {
+ protected @NonNull AppCompatTextView createTextView(Context context, AttributeSet attrs) {
return new AppCompatTextView(context, attrs);
}
- @NonNull
- protected AppCompatImageView createImageView(Context context, AttributeSet attrs) {
+ protected @NonNull AppCompatImageView createImageView(Context context, AttributeSet attrs) {
return new AppCompatImageView(context, attrs);
}
- @NonNull
- protected AppCompatButton createButton(Context context, AttributeSet attrs) {
+ protected @NonNull AppCompatButton createButton(Context context, AttributeSet attrs) {
return new AppCompatButton(context, attrs);
}
- @NonNull
- protected AppCompatEditText createEditText(Context context, AttributeSet attrs) {
+ protected @NonNull AppCompatEditText createEditText(Context context, AttributeSet attrs) {
return new AppCompatEditText(context, attrs);
}
- @NonNull
- protected AppCompatSpinner createSpinner(Context context, AttributeSet attrs) {
+ protected @NonNull AppCompatSpinner createSpinner(Context context, AttributeSet attrs) {
return new AppCompatSpinner(context, attrs);
}
- @NonNull
- protected AppCompatImageButton createImageButton(Context context, AttributeSet attrs) {
+ protected @NonNull AppCompatImageButton createImageButton(Context context, AttributeSet attrs) {
return new AppCompatImageButton(context, attrs);
}
- @NonNull
- protected AppCompatCheckBox createCheckBox(Context context, AttributeSet attrs) {
+ protected @NonNull AppCompatCheckBox createCheckBox(Context context, AttributeSet attrs) {
return new AppCompatCheckBox(context, attrs);
}
- @NonNull
- protected AppCompatRadioButton createRadioButton(Context context, AttributeSet attrs) {
+ protected @NonNull AppCompatRadioButton createRadioButton(Context context, AttributeSet attrs) {
return new AppCompatRadioButton(context, attrs);
}
- @NonNull
- protected AppCompatCheckedTextView createCheckedTextView(Context context, AttributeSet attrs) {
+ protected @NonNull AppCompatCheckedTextView createCheckedTextView(Context context,
+ AttributeSet attrs) {
return new AppCompatCheckedTextView(context, attrs);
}
- @NonNull
- protected AppCompatAutoCompleteTextView createAutoCompleteTextView(Context context,
+ protected @NonNull AppCompatAutoCompleteTextView createAutoCompleteTextView(Context context,
AttributeSet attrs) {
return new AppCompatAutoCompleteTextView(context, attrs);
}
- @NonNull
- protected AppCompatMultiAutoCompleteTextView createMultiAutoCompleteTextView(Context context,
- AttributeSet attrs) {
+ protected @NonNull AppCompatMultiAutoCompleteTextView createMultiAutoCompleteTextView(
+ Context context, AttributeSet attrs) {
return new AppCompatMultiAutoCompleteTextView(context, attrs);
}
- @NonNull
- protected AppCompatRatingBar createRatingBar(Context context, AttributeSet attrs) {
+ protected @NonNull AppCompatRatingBar createRatingBar(Context context, AttributeSet attrs) {
return new AppCompatRatingBar(context, attrs);
}
- @NonNull
- protected AppCompatSeekBar createSeekBar(Context context, AttributeSet attrs) {
+ protected @NonNull AppCompatSeekBar createSeekBar(Context context, AttributeSet attrs) {
return new AppCompatSeekBar(context, attrs);
}
- @NonNull
- protected AppCompatToggleButton createToggleButton(Context context, AttributeSet attrs) {
+ protected @NonNull AppCompatToggleButton createToggleButton(Context context,
+ AttributeSet attrs) {
return new AppCompatToggleButton(context, attrs);
}
@@ -302,8 +290,7 @@
}
}
- @Nullable
- protected View createView(Context context, String name, AttributeSet attrs) {
+ protected @Nullable View createView(Context context, String name, AttributeSet attrs) {
return null;
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesMetadataHolderService.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesMetadataHolderService.java
index de453cf..12a0bd4 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesMetadataHolderService.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesMetadataHolderService.java
@@ -25,10 +25,11 @@
import android.os.Build;
import android.os.IBinder;
-import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.core.os.LocaleListCompat;
+import org.jspecify.annotations.NonNull;
+
/**
* A placeholder service to avoid adding application-level metadata. The service
* is only used to expose metadata defined in the library's manifest. It is
@@ -41,9 +42,9 @@
public final class AppLocalesMetadataHolderService extends Service {
public AppLocalesMetadataHolderService() {}
- @NonNull
@Override
- public IBinder onBind(@SuppressWarnings("InvalidNullabilityOverride") @NonNull Intent intent) {
+ public @NonNull IBinder onBind(
+ @SuppressWarnings("InvalidNullabilityOverride") @NonNull Intent intent) {
throw new UnsupportedOperationException();
}
@@ -53,9 +54,8 @@
* <p>This serviceInfo contains the attribute "autoStoreLocales", its value being a boolean
* that informs us if the developer wants us to handle the storage of locales or not.</p>
*/
- @NonNull
@SuppressWarnings("deprecation") // GET_DISABLED_COMPONENTS, getServiceInfo
- public static ServiceInfo getServiceInfo(@NonNull Context context) throws
+ public static @NonNull ServiceInfo getServiceInfo(@NonNull Context context) throws
PackageManager.NameNotFoundException {
int flags = PackageManager.GET_META_DATA;
// The service is marked as disabled so we need to include the following flags.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/LayoutIncludeDetector.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/LayoutIncludeDetector.java
index 71963ec..be26f91 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/LayoutIncludeDetector.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/LayoutIncludeDetector.java
@@ -18,9 +18,8 @@
import android.util.AttributeSet;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@@ -35,8 +34,7 @@
*/
class LayoutIncludeDetector {
- @NonNull
- private final Deque<WeakReference<XmlPullParser>> mXmlParserStack = new ArrayDeque<>();
+ private final @NonNull Deque<WeakReference<XmlPullParser>> mXmlParserStack = new ArrayDeque<>();
/**
* Returns true if this is the start of an included layout file, otherwise false.
@@ -89,9 +87,8 @@
* @param xmlParserStack stack to purge
* @return most recent {@link XmlPullParser} that is not outdated
*/
- @Nullable
- private static XmlPullParser popOutdatedAttrHolders(@NonNull
- Deque<WeakReference<XmlPullParser>> xmlParserStack) {
+ private static @Nullable XmlPullParser popOutdatedAttrHolders(
+ @NonNull Deque<WeakReference<XmlPullParser>> xmlParserStack) {
while (!xmlParserStack.isEmpty()) {
XmlPullParser parser = xmlParserStack.peek().get();
if (isParserOutdated(parser)) {
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/ResourcesFlusher.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/ResourcesFlusher.java
index d7fb7ad..f0b53bf 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/ResourcesFlusher.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/ResourcesFlusher.java
@@ -21,9 +21,10 @@
import android.util.Log;
import android.util.LongSparseArray;
-import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
+import org.jspecify.annotations.NonNull;
+
import java.lang.reflect.Field;
import java.util.Map;
@@ -42,7 +43,7 @@
private static Field sResourcesImplField;
private static boolean sResourcesImplFieldFetched;
- static void flush(@NonNull final Resources resources) {
+ static void flush(final @NonNull Resources resources) {
if (Build.VERSION.SDK_INT >= 28) {
// no-op on P and above
return;
@@ -56,7 +57,7 @@
}
@RequiresApi(21)
- private static void flushLollipops(@NonNull final Resources resources) {
+ private static void flushLollipops(final @NonNull Resources resources) {
if (!sDrawableCacheFieldFetched) {
try {
sDrawableCacheField = Resources.class.getDeclaredField("mDrawableCache");
@@ -80,7 +81,7 @@
}
@RequiresApi(23)
- private static void flushMarshmallows(@NonNull final Resources resources) {
+ private static void flushMarshmallows(final @NonNull Resources resources) {
if (!sDrawableCacheFieldFetched) {
try {
sDrawableCacheField = Resources.class.getDeclaredField("mDrawableCache");
@@ -109,7 +110,7 @@
}
@RequiresApi(24)
- private static void flushNougats(@NonNull final Resources resources) {
+ private static void flushNougats(final @NonNull Resources resources) {
if (!sResourcesImplFieldFetched) {
try {
sResourcesImplField = Resources.class.getDeclaredField("mResourcesImpl");
@@ -161,7 +162,7 @@
}
}
- private static void flushThemedResourcesCache(@NonNull final Object cache) {
+ private static void flushThemedResourcesCache(final @NonNull Object cache) {
if (!sThemedResourceCacheClazzFetched) {
try {
sThemedResourceCacheClazz = Class.forName("android.content.res.ThemedResourceCache");
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/ToolbarActionBar.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/ToolbarActionBar.java
index d2565a5..883b7e4 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/ToolbarActionBar.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/ToolbarActionBar.java
@@ -30,8 +30,6 @@
import android.view.Window;
import android.widget.SpinnerAdapter;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.view.menu.MenuBuilder;
import androidx.appcompat.view.menu.MenuPresenter;
import androidx.appcompat.widget.DecorToolbar;
@@ -40,6 +38,9 @@
import androidx.core.util.Preconditions;
import androidx.core.view.ViewCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.util.ArrayList;
class ToolbarActionBar extends ActionBar {
@@ -68,7 +69,7 @@
};
ToolbarActionBar(@NonNull Toolbar toolbar, @Nullable CharSequence title,
- @NonNull Window.Callback windowCallback) {
+ Window.@NonNull Callback windowCallback) {
Preconditions.checkNotNull(toolbar);
mDecorToolbar = new ToolbarWidgetWrapper(toolbar, false);
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/TwilightManager.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/TwilightManager.java
index 6d445c09..16ae3e4 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/TwilightManager.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/TwilightManager.java
@@ -27,11 +27,12 @@
import android.text.format.DateUtils;
import android.util.Log;
-import androidx.annotation.NonNull;
import androidx.annotation.RequiresPermission;
import androidx.annotation.VisibleForTesting;
import androidx.core.content.PermissionChecker;
+import org.jspecify.annotations.NonNull;
+
import java.util.Calendar;
/**
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/WindowDecorActionBar.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/WindowDecorActionBar.java
index ff2e791f1..0c4b3cb 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/WindowDecorActionBar.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/WindowDecorActionBar.java
@@ -42,7 +42,6 @@
import android.view.animation.Interpolator;
import android.widget.SpinnerAdapter;
-import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.appcompat.content.res.AppCompatResources;
@@ -67,6 +66,8 @@
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentTransaction;
+import org.jspecify.annotations.NonNull;
+
import java.lang.ref.WeakReference;
import java.util.ArrayList;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java b/appcompat/appcompat/src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java
index ae0eb0d..97d7e03 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java
@@ -32,12 +32,13 @@
import androidx.annotation.ColorInt;
import androidx.annotation.FloatRange;
import androidx.annotation.IntDef;
-import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.core.graphics.drawable.DrawableCompat;
import androidx.core.view.ViewCompat;
+import org.jspecify.annotations.NonNull;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/StandaloneActionMode.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/StandaloneActionMode.java
index 7f8b6e3..8c28593 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/StandaloneActionMode.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/StandaloneActionMode.java
@@ -23,13 +23,14 @@
import android.view.MenuItem;
import android.view.View;
-import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
import androidx.appcompat.view.menu.MenuBuilder;
import androidx.appcompat.view.menu.MenuPopupHelper;
import androidx.appcompat.view.menu.SubMenuBuilder;
import androidx.appcompat.widget.ActionBarContextView;
+import org.jspecify.annotations.NonNull;
+
import java.lang.ref.WeakReference;
/**
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java
index a589b288b..37700ab 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java
@@ -29,14 +29,15 @@
import android.view.SubMenu;
import android.view.View;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.drawable.DrawableCompat;
import androidx.core.internal.view.SupportMenuItem;
import androidx.core.view.ActionProvider;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@@ -180,9 +181,8 @@
return this;
}
- @NonNull
@Override
- public MenuItem setAlphabeticShortcut(char alphaChar, int alphaModifiers) {
+ public @NonNull MenuItem setAlphabeticShortcut(char alphaChar, int alphaModifiers) {
mShortcutAlphabeticChar = Character.toLowerCase(alphaChar);
mShortcutAlphabeticModifiers = KeyEvent.normalizeMetaState(alphaModifiers);
return this;
@@ -239,9 +239,8 @@
return this;
}
- @NonNull
@Override
- public MenuItem setNumericShortcut(char numericChar, int numericModifiers) {
+ public @NonNull MenuItem setNumericShortcut(char numericChar, int numericModifiers) {
mShortcutNumericChar = numericChar;
mShortcutNumericModifiers = KeyEvent.normalizeMetaState(numericModifiers);
return this;
@@ -260,9 +259,8 @@
return this;
}
- @NonNull
@Override
- public MenuItem setShortcut(char numericChar, char alphaChar, int numericModifiers,
+ public @NonNull MenuItem setShortcut(char numericChar, char alphaChar, int numericModifiers,
int alphaModifiers) {
mShortcutNumericChar = numericChar;
mShortcutNumericModifiers = KeyEvent.normalizeMetaState(numericModifiers);
@@ -323,9 +321,8 @@
return false;
}
- @NonNull
@Override
- public SupportMenuItem setActionView(View actionView) {
+ public @NonNull SupportMenuItem setActionView(View actionView) {
throw new UnsupportedOperationException();
}
@@ -344,9 +341,8 @@
throw new UnsupportedOperationException();
}
- @NonNull
@Override
- public SupportMenuItem setActionView(int resId) {
+ public @NonNull SupportMenuItem setActionView(int resId) {
throw new UnsupportedOperationException();
}
@@ -355,15 +351,13 @@
return null;
}
- @NonNull
@Override
- public SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {
+ public @NonNull SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {
throw new UnsupportedOperationException();
}
- @NonNull
@Override
- public SupportMenuItem setShowAsActionFlags(int actionEnum) {
+ public @NonNull SupportMenuItem setShowAsActionFlags(int actionEnum) {
setShowAsAction(actionEnum);
return this;
}
@@ -388,9 +382,8 @@
throw new UnsupportedOperationException();
}
- @NonNull
@Override
- public SupportMenuItem setContentDescription(CharSequence contentDescription) {
+ public @NonNull SupportMenuItem setContentDescription(CharSequence contentDescription) {
mContentDescription = contentDescription;
return this;
}
@@ -400,9 +393,8 @@
return mContentDescription;
}
- @NonNull
@Override
- public SupportMenuItem setTooltipText(CharSequence tooltipText) {
+ public @NonNull SupportMenuItem setTooltipText(CharSequence tooltipText) {
mTooltipText = tooltipText;
return this;
}
@@ -412,9 +404,8 @@
return mTooltipText;
}
- @NonNull
@Override
- public MenuItem setIconTintList(@Nullable ColorStateList iconTintList) {
+ public @NonNull MenuItem setIconTintList(@Nullable ColorStateList iconTintList) {
mIconTintList = iconTintList;
mHasIconTint = true;
@@ -428,9 +419,8 @@
return mIconTintList;
}
- @NonNull
@Override
- public MenuItem setIconTintMode(PorterDuff.Mode iconTintMode) {
+ public @NonNull MenuItem setIconTintMode(PorterDuff.Mode iconTintMode) {
mIconTintMode = iconTintMode;
mHasIconTintMode = true;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/CascadingMenuPopup.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/CascadingMenuPopup.java
index 3957a72..e22ad41 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/CascadingMenuPopup.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/CascadingMenuPopup.java
@@ -42,8 +42,6 @@
import androidx.annotation.AttrRes;
import androidx.annotation.IntDef;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.StyleRes;
import androidx.appcompat.R;
import androidx.appcompat.widget.MenuItemHoverListener;
@@ -51,6 +49,9 @@
import androidx.core.internal.view.SupportMenu;
import androidx.core.view.GravityCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
@@ -144,7 +145,7 @@
@Override
public void onItemHoverEnter(
- @NonNull final MenuBuilder menu, @NonNull final MenuItem item) {
+ final @NonNull MenuBuilder menu, final @NonNull MenuItem item) {
// Something new was hovered, cancel all scheduled runnables.
mSubMenuHoverHandler.removeCallbacksAndMessages(null);
@@ -531,8 +532,7 @@
* @param submenu the submenu whose parent view should be obtained
* @return the parent view, or {@code null} if one could not be found
*/
- @Nullable
- private View findParentViewForSubmenu(
+ private @Nullable View findParentViewForSubmenu(
@NonNull CascadingMenuInfo parentInfo, @NonNull MenuBuilder submenu) {
final MenuItem owner = findMenuItemForSubmenu(parentInfo.menu, submenu);
if (owner == null) {
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuBuilder.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuBuilder.java
index 47fb9e8..c028921 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuBuilder.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuBuilder.java
@@ -37,7 +37,6 @@
import android.view.View;
import android.view.ViewConfiguration;
-import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
import androidx.core.content.ContextCompat;
import androidx.core.internal.view.SupportMenu;
@@ -45,6 +44,8 @@
import androidx.core.view.ActionProvider;
import androidx.core.view.ViewConfigurationCompat;
+import org.jspecify.annotations.NonNull;
+
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -1116,8 +1117,7 @@
onItemsChanged(true);
}
- @NonNull
- public ArrayList<MenuItemImpl> getVisibleItems() {
+ public @NonNull ArrayList<MenuItemImpl> getVisibleItems() {
if (!mIsVisibleItemsStale) return mVisibleItems;
// Refresh the visible items
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuDialogHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuDialogHelper.java
index 4d4093b..43ba513 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuDialogHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuDialogHelper.java
@@ -24,10 +24,11 @@
import android.view.Window;
import android.view.WindowManager;
-import androidx.annotation.NonNull;
import androidx.appcompat.R;
import androidx.appcompat.app.AlertDialog;
+import org.jspecify.annotations.NonNull;
+
/**
* Helper for menus that appear as Dialogs (context and submenus).
*/
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java
index dbdc39a..80f9f41 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java
@@ -36,8 +36,6 @@
import android.view.ViewDebug;
import android.widget.LinearLayout;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.appcompat.content.res.AppCompatResources;
@@ -45,6 +43,9 @@
import androidx.core.internal.view.SupportMenuItem;
import androidx.core.view.ActionProvider;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@@ -255,9 +256,8 @@
return this;
}
- @NonNull
@Override
- public MenuItem setAlphabeticShortcut(char alphaChar, int alphaModifiers) {
+ public @NonNull MenuItem setAlphabeticShortcut(char alphaChar, int alphaModifiers) {
if (mShortcutAlphabeticChar == alphaChar
&& mShortcutAlphabeticModifiers == alphaModifiers) {
return this;
@@ -298,9 +298,8 @@
return this;
}
- @NonNull
@Override
- public MenuItem setNumericShortcut(char numericChar, int numericModifiers) {
+ public @NonNull MenuItem setNumericShortcut(char numericChar, int numericModifiers) {
if (mShortcutNumericChar == numericChar && mShortcutNumericModifiers == numericModifiers) {
return this;
}
@@ -323,9 +322,8 @@
return this;
}
- @NonNull
@Override
- public MenuItem setShortcut(char numericChar, char alphaChar, int numericModifiers,
+ public @NonNull MenuItem setShortcut(char numericChar, char alphaChar, int numericModifiers,
int alphaModifiers) {
mShortcutNumericChar = numericChar;
mShortcutNumericModifiers = KeyEvent.normalizeMetaState(numericModifiers);
@@ -526,9 +524,8 @@
}
- @NonNull
@Override
- public MenuItem setIconTintList(@Nullable ColorStateList iconTintList) {
+ public @NonNull MenuItem setIconTintList(@Nullable ColorStateList iconTintList) {
mIconTintList = iconTintList;
mHasIconTint = true;
mNeedToApplyIconTint = true;
@@ -543,9 +540,8 @@
return mIconTintList;
}
- @NonNull
@Override
- public MenuItem setIconTintMode(PorterDuff.Mode iconTintMode) {
+ public @NonNull MenuItem setIconTintMode(PorterDuff.Mode iconTintMode) {
mIconTintMode = iconTintMode;
mHasIconTintMode = true;
mNeedToApplyIconTint = true;
@@ -740,9 +736,8 @@
mMenu.onItemActionRequestChanged(this);
}
- @NonNull
@Override
- public SupportMenuItem setActionView(View view) {
+ public @NonNull SupportMenuItem setActionView(View view) {
mActionView = view;
mActionProvider = null;
if (view != null && view.getId() == View.NO_ID && mId > 0) {
@@ -752,9 +747,8 @@
return this;
}
- @NonNull
@Override
- public SupportMenuItem setActionView(int resId) {
+ public @NonNull SupportMenuItem setActionView(int resId) {
final Context context = mMenu.getContext();
final LayoutInflater inflater = LayoutInflater.from(context);
setActionView(inflater.inflate(resId, new LinearLayout(context), false));
@@ -790,9 +784,8 @@
return mActionProvider;
}
- @NonNull
@Override
- public SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {
+ public @NonNull SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {
if (mActionProvider != null) {
mActionProvider.reset();
}
@@ -810,9 +803,8 @@
return this;
}
- @NonNull
@Override
- public SupportMenuItem setShowAsActionFlags(int actionEnum) {
+ public @NonNull SupportMenuItem setShowAsActionFlags(int actionEnum) {
setShowAsAction(actionEnum);
return this;
}
@@ -875,9 +867,8 @@
return this;
}
- @NonNull
@Override
- public SupportMenuItem setContentDescription(CharSequence contentDescription) {
+ public @NonNull SupportMenuItem setContentDescription(CharSequence contentDescription) {
mContentDescription = contentDescription;
mMenu.onItemsChanged(false);
@@ -890,9 +881,8 @@
return mContentDescription;
}
- @NonNull
@Override
- public SupportMenuItem setTooltipText(CharSequence tooltipText) {
+ public @NonNull SupportMenuItem setTooltipText(CharSequence tooltipText) {
mTooltipText = tooltipText;
mMenu.onItemsChanged(false);
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java
index d35af13..c3a73f7 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java
@@ -30,12 +30,13 @@
import android.view.View;
import android.widget.FrameLayout;
-import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
import androidx.appcompat.view.CollapsibleActionView;
import androidx.core.internal.view.SupportMenuItem;
import androidx.core.view.ActionProvider;
+import org.jspecify.annotations.NonNull;
+
import java.lang.reflect.Method;
/**
@@ -469,8 +470,7 @@
}
@Override
- @NonNull
- public View onCreateActionView() {
+ public @NonNull View onCreateActionView() {
return mInner.onCreateActionView();
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPopup.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPopup.java
index f59c9f9..b926aa8 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPopup.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPopup.java
@@ -28,10 +28,11 @@
import android.widget.ListAdapter;
import android.widget.PopupWindow;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.core.internal.view.SupportMenu;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* Base class for a menu popup abstraction - i.e., some type of menu, housed in a popup window
* environment.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPopupHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPopupHelper.java
index 7bf848f..9567c4c 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPopupHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPopupHelper.java
@@ -31,13 +31,14 @@
import android.widget.PopupWindow.OnDismissListener;
import androidx.annotation.AttrRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.annotation.StyleRes;
import androidx.appcompat.R;
import androidx.core.view.GravityCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* Presents a menu as a small, simple popup anchored to another view.
*
@@ -153,8 +154,7 @@
/**
*/
@RestrictTo(LIBRARY)
- @NonNull
- public MenuPopup getPopup() {
+ public @NonNull MenuPopup getPopup() {
if (mPopup == null) {
mPopup = createPopup();
}
@@ -221,9 +221,8 @@
*
* @return an initialized popup
*/
- @NonNull
@SuppressWarnings("deprecation") /* getDefaultDisplay */
- private MenuPopup createPopup() {
+ private @NonNull MenuPopup createPopup() {
final WindowManager windowManager = (WindowManager) mContext.getSystemService(
Context.WINDOW_SERVICE);
final Display display = windowManager.getDefaultDisplay();
@@ -320,7 +319,7 @@
}
@Override
- public void setPresenterCallback(@Nullable MenuPresenter.Callback cb) {
+ public void setPresenterCallback(MenuPresenter.@Nullable Callback cb) {
mPresenterCallback = cb;
if (mPopup != null) {
mPopup.setCallback(cb);
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPresenter.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPresenter.java
index 46af852..7694890 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPresenter.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPresenter.java
@@ -22,9 +22,10 @@
import android.os.Parcelable;
import android.view.ViewGroup;
-import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
+import org.jspecify.annotations.NonNull;
+
/**
* A MenuPresenter is responsible for building views for a Menu object. It takes over some
* responsibility from the old style monolithic MenuBuilder class.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java
index fbd4601..01ba5eb 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java
@@ -25,9 +25,10 @@
import android.view.SubMenu;
import android.view.View;
-import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
+import org.jspecify.annotations.NonNull;
+
/**
* The model for a sub menu, which is an extension of the menu. Most methods are proxied to the
* parent menu.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AbsActionBarView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AbsActionBarView.java
index 3ed4a46..bf59b8e 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AbsActionBarView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AbsActionBarView.java
@@ -26,13 +26,14 @@
import android.view.View;
import android.view.ViewGroup;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.R;
import androidx.core.view.ViewCompat;
import androidx.core.view.ViewPropertyAnimatorCompat;
import androidx.core.view.ViewPropertyAnimatorListener;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
abstract class AbsActionBarView extends ViewGroup {
private static final int FADE_DURATION = 200;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarBackgroundDrawable.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarBackgroundDrawable.java
index 2af5be6..305053c9 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarBackgroundDrawable.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarBackgroundDrawable.java
@@ -22,9 +22,10 @@
import android.graphics.PixelFormat;
import android.graphics.drawable.Drawable;
-import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
+import org.jspecify.annotations.NonNull;
+
class ActionBarBackgroundDrawable extends Drawable {
final ActionBarContainer mContainer;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContainer.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContainer.java
index bd7ce7f..0dc464f 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContainer.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContainer.java
@@ -28,11 +28,12 @@
import android.view.ViewGroup;
import android.widget.FrameLayout;
-import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
+import org.jspecify.annotations.NonNull;
+
/**
* This class acts as a container for the action bar view and action mode context views.
* It applies special styles as needed to help handle animated transitions between them.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContextView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContextView.java
index 3fbccd1..99eaa09 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContextView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContextView.java
@@ -27,14 +27,15 @@
import android.widget.LinearLayout;
import android.widget.TextView;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.appcompat.view.ActionMode;
import androidx.appcompat.view.menu.MenuBuilder;
import androidx.core.view.ViewCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarOverlayLayout.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarOverlayLayout.java
index bc0e4a3..f578c7a 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarOverlayLayout.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarOverlayLayout.java
@@ -39,8 +39,6 @@
import android.view.WindowInsets;
import android.widget.OverScroller;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
@@ -54,6 +52,9 @@
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* Special layout for the containing of an overlay action bar (and its content) to correctly handle
* fitting system windows when the content has request that its layout ignore them.
@@ -101,10 +102,10 @@
private final Rect mLastInnerInsetsRect = new Rect();
// Used on API 21+
- @NonNull private WindowInsetsCompat mBaseInnerInsets = WindowInsetsCompat.CONSUMED;
- @NonNull private WindowInsetsCompat mLastBaseInnerInsets = WindowInsetsCompat.CONSUMED;
- @NonNull private WindowInsetsCompat mInnerInsets = WindowInsetsCompat.CONSUMED;
- @NonNull private WindowInsetsCompat mLastInnerInsets = WindowInsetsCompat.CONSUMED;
+ private @NonNull WindowInsetsCompat mBaseInnerInsets = WindowInsetsCompat.CONSUMED;
+ private @NonNull WindowInsetsCompat mLastBaseInnerInsets = WindowInsetsCompat.CONSUMED;
+ private @NonNull WindowInsetsCompat mInnerInsets = WindowInsetsCompat.CONSUMED;
+ private @NonNull WindowInsetsCompat mLastInnerInsets = WindowInsetsCompat.CONSUMED;
private ActionBarVisibilityCallback mActionBarVisibilityCallback;
@@ -394,7 +395,7 @@
@RequiresApi(21)
@Override
- public WindowInsets onApplyWindowInsets(@NonNull final WindowInsets in) {
+ public WindowInsets onApplyWindowInsets(final @NonNull WindowInsets in) {
pullChildren();
final int vis = getWindowSystemUiVisibility();
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionMenuPresenter.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionMenuPresenter.java
index 11f4532..0940822 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionMenuPresenter.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionMenuPresenter.java
@@ -30,8 +30,6 @@
import android.view.View.MeasureSpec;
import android.view.ViewGroup;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.R;
import androidx.appcompat.view.ActionBarPolicy;
import androidx.appcompat.view.menu.ActionMenuItemView;
@@ -46,6 +44,9 @@
import androidx.core.view.ActionProvider;
import androidx.core.view.GravityCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.util.ArrayList;
/**
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionMenuView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionMenuView.java
index 949e159..02c7e00 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionMenuView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionMenuView.java
@@ -31,8 +31,6 @@
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.annotation.StyleRes;
import androidx.appcompat.view.menu.ActionMenuItemView;
@@ -41,6 +39,9 @@
import androidx.appcompat.view.menu.MenuPresenter;
import androidx.appcompat.view.menu.MenuView;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* ActionMenuView is a presentation of a series of menu options as a View. It provides
* several top level options as action buttons while spilling remaining options over as
@@ -559,8 +560,7 @@
*
* @return The overflow icon drawable
*/
- @Nullable
- public Drawable getOverflowIcon() {
+ public @Nullable Drawable getOverflowIcon() {
getMenu();
return mPresenter.getOverflowIcon();
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActivityChooserView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActivityChooserView.java
index 4fc7fb2..380eec9 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActivityChooserView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActivityChooserView.java
@@ -44,8 +44,6 @@
import android.widget.PopupWindow;
import android.widget.TextView;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.appcompat.view.menu.ShowableListMenu;
@@ -53,6 +51,9 @@
import androidx.core.view.ViewCompat;
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* This class is a view for choosing an activity for handling a given {@link Intent}.
* <p>
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AlertDialogLayout.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AlertDialogLayout.java
index 819c18f..eacffd1 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AlertDialogLayout.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AlertDialogLayout.java
@@ -25,12 +25,13 @@
import android.view.View;
import android.view.ViewGroup;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.core.view.GravityCompat;
import androidx.core.view.ViewCompat;
+import org.jspecify.annotations.Nullable;
+
/**
* Special implementation of linear layout that's capable of laying out alert
* dialog components.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java
index d184fc2..6f137f8 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java
@@ -31,8 +31,6 @@
import android.widget.TextView;
import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.appcompat.content.res.AppCompatResources;
@@ -41,6 +39,9 @@
import androidx.core.widget.TintableCompoundDrawablesView;
import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* A {@link AutoCompleteTextView} which supports compatible features on older versions of the
* platform, including:
@@ -66,8 +67,7 @@
private final AppCompatBackgroundHelper mBackgroundTintHelper;
private final AppCompatTextHelper mTextHelper;
- @NonNull
- private final AppCompatEmojiEditTextHelper mAppCompatEmojiEditTextHelper;
+ private final @NonNull AppCompatEmojiEditTextHelper mAppCompatEmojiEditTextHelper;
public AppCompatAutoCompleteTextView(@NonNull Context context) {
this(context, null);
@@ -183,8 +183,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public ColorStateList getSupportBackgroundTintList() {
+ public @Nullable ColorStateList getSupportBackgroundTintList() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
}
@@ -196,7 +195,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
if (mBackgroundTintHelper != null) {
mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
}
@@ -209,8 +208,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public PorterDuff.Mode getSupportBackgroundTintMode() {
+ public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
}
@@ -247,14 +245,13 @@
*/
@Override
public void setCustomSelectionActionModeCallback(
- @Nullable ActionMode.Callback actionModeCallback) {
+ ActionMode.@Nullable Callback actionModeCallback) {
super.setCustomSelectionActionModeCallback(
TextViewCompat.wrapCustomSelectionActionModeCallback(this, actionModeCallback));
}
@Override
- @Nullable
- public ActionMode.Callback getCustomSelectionActionModeCallback() {
+ public ActionMode.@Nullable Callback getCustomSelectionActionModeCallback() {
return TextViewCompat.unwrapCustomSelectionActionModeCallback(
super.getCustomSelectionActionModeCallback());
}
@@ -307,10 +304,9 @@
* @see #setSupportCompoundDrawablesTintList(ColorStateList)
*
*/
- @Nullable
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public ColorStateList getSupportCompoundDrawablesTintList() {
+ public @Nullable ColorStateList getSupportCompoundDrawablesTintList() {
return mTextHelper.getCompoundDrawableTintList();
}
@@ -348,10 +344,9 @@
* @see #setSupportCompoundDrawablesTintMode(PorterDuff.Mode)
*
*/
- @Nullable
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public PorterDuff.Mode getSupportCompoundDrawablesTintMode() {
+ public PorterDuff.@Nullable Mode getSupportCompoundDrawablesTintMode() {
return mTextHelper.getCompoundDrawableTintMode();
}
@@ -370,7 +365,7 @@
*/
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public void setSupportCompoundDrawablesTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportCompoundDrawablesTintMode(PorterDuff.@Nullable Mode tintMode) {
mTextHelper.setCompoundDrawableTintMode(tintMode);
mTextHelper.applyCompoundDrawablesTints();
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatBackgroundHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatBackgroundHelper.java
index bcc381b..c3d5148 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatBackgroundHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatBackgroundHelper.java
@@ -23,15 +23,15 @@
import android.util.AttributeSet;
import android.view.View;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.R;
import androidx.core.view.ViewCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
class AppCompatBackgroundHelper {
- @NonNull
- private final View mView;
+ private final @NonNull View mView;
private final AppCompatDrawableManager mDrawableManager;
private int mBackgroundResId = -1;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatButton.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatButton.java
index 4f96bef..5e5e452 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatButton.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatButton.java
@@ -33,8 +33,6 @@
import android.widget.TextView;
import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.core.view.TintableBackgroundView;
@@ -43,6 +41,9 @@
import androidx.core.widget.TintableCompoundDrawablesView;
import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* A {@link Button} which supports compatible features on older versions of the platform,
* including:
@@ -65,8 +66,7 @@
private final AppCompatBackgroundHelper mBackgroundTintHelper;
private final AppCompatTextHelper mTextHelper;
- @NonNull
- private AppCompatEmojiTextHelper mAppCompatEmojiTextHelper;
+ private @NonNull AppCompatEmojiTextHelper mAppCompatEmojiTextHelper;
public AppCompatButton(@NonNull Context context) {
this(context, null);
@@ -129,8 +129,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public ColorStateList getSupportBackgroundTintList() {
+ public @Nullable ColorStateList getSupportBackgroundTintList() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
}
@@ -142,7 +141,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
if (mBackgroundTintHelper != null) {
mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
}
@@ -155,8 +154,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public PorterDuff.Mode getSupportBackgroundTintMode() {
+ public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
}
@@ -260,7 +258,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- public void setAutoSizeTextTypeUniformWithPresetSizes(@NonNull int[] presetSizes, int unit)
+ public void setAutoSizeTextTypeUniformWithPresetSizes(int @NonNull [] presetSizes, int unit)
throws IllegalArgumentException {
if (SDK_LEVEL_SUPPORTS_AUTOSIZE) {
super.setAutoSizeTextTypeUniformWithPresetSizes(presetSizes, unit);
@@ -372,14 +370,13 @@
*/
@Override
public void setCustomSelectionActionModeCallback(
- @Nullable ActionMode.Callback actionModeCallback) {
+ ActionMode.@Nullable Callback actionModeCallback) {
super.setCustomSelectionActionModeCallback(
TextViewCompat.wrapCustomSelectionActionModeCallback(this, actionModeCallback));
}
@Override
- @Nullable
- public ActionMode.Callback getCustomSelectionActionModeCallback() {
+ public ActionMode.@Nullable Callback getCustomSelectionActionModeCallback() {
return TextViewCompat.unwrapCustomSelectionActionModeCallback(
super.getCustomSelectionActionModeCallback());
}
@@ -397,10 +394,9 @@
/**
* @return the tint applied to the compound drawables
*/
- @Nullable
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public ColorStateList getSupportCompoundDrawablesTintList() {
+ public @Nullable ColorStateList getSupportCompoundDrawablesTintList() {
return mTextHelper.getCompoundDrawableTintList();
}
@@ -409,7 +405,7 @@
*/
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public void setSupportCompoundDrawablesTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportCompoundDrawablesTintMode(PorterDuff.@Nullable Mode tintMode) {
mTextHelper.setCompoundDrawableTintMode(tintMode);
mTextHelper.applyCompoundDrawablesTints();
}
@@ -417,16 +413,15 @@
/**
* @return the blending mode used to apply the tint to the compound drawables
*/
- @Nullable
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public PorterDuff.Mode getSupportCompoundDrawablesTintMode() {
+ public PorterDuff.@Nullable Mode getSupportCompoundDrawablesTintMode() {
return mTextHelper.getCompoundDrawableTintMode();
}
@Override
- public void setFilters(@SuppressWarnings("ArrayReturn") @NonNull InputFilter[] filters) {
+ public void setFilters(@SuppressWarnings("ArrayReturn") InputFilter @NonNull [] filters) {
super.setFilters(getEmojiTextViewHelper().getFilters(filters));
}
@@ -434,8 +429,7 @@
/**
* This may be called from super constructors.
*/
- @NonNull
- private AppCompatEmojiTextHelper getEmojiTextViewHelper() {
+ private @NonNull AppCompatEmojiTextHelper getEmojiTextViewHelper() {
//noinspection ConstantConditions
if (mAppCompatEmojiTextHelper == null) {
mAppCompatEmojiTextHelper = new AppCompatEmojiTextHelper(this);
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckBox.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckBox.java
index 79d3921..1a750fb 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckBox.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckBox.java
@@ -29,8 +29,6 @@
import android.widget.TextView;
import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.appcompat.content.res.AppCompatResources;
@@ -40,6 +38,9 @@
import androidx.core.widget.TintableCompoundDrawablesView;
import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* A {@link CheckBox} which supports compatible features on older versions of the platform,
* including:
@@ -94,8 +95,7 @@
/**
* This may be called from super constructors.
*/
- @NonNull
- private AppCompatEmojiTextHelper getEmojiTextViewHelper() {
+ private @NonNull AppCompatEmojiTextHelper getEmojiTextViewHelper() {
if (mAppCompatEmojiTextHelper == null) {
mAppCompatEmojiTextHelper = new AppCompatEmojiTextHelper(this);
}
@@ -130,9 +130,8 @@
* This should be accessed from {@link androidx.core.widget.CompoundButtonCompat}
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
- @Nullable
@Override
- public ColorStateList getSupportButtonTintList() {
+ public @Nullable ColorStateList getSupportButtonTintList() {
return mCompoundButtonHelper != null
? mCompoundButtonHelper.getSupportButtonTintList()
: null;
@@ -143,7 +142,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- public void setSupportButtonTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportButtonTintMode(PorterDuff.@Nullable Mode tintMode) {
if (mCompoundButtonHelper != null) {
mCompoundButtonHelper.setSupportButtonTintMode(tintMode);
}
@@ -153,9 +152,8 @@
* This should be accessed from {@link androidx.core.widget.CompoundButtonCompat}
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
- @Nullable
@Override
- public PorterDuff.Mode getSupportButtonTintMode() {
+ public PorterDuff.@Nullable Mode getSupportButtonTintMode() {
return mCompoundButtonHelper != null
? mCompoundButtonHelper.getSupportButtonTintMode()
: null;
@@ -180,8 +178,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public ColorStateList getSupportBackgroundTintList() {
+ public @Nullable ColorStateList getSupportBackgroundTintList() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
}
@@ -193,7 +190,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
if (mBackgroundTintHelper != null) {
mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
}
@@ -206,8 +203,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public PorterDuff.Mode getSupportBackgroundTintMode() {
+ public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
}
@@ -240,7 +236,7 @@
}
@Override
- public void setFilters(@SuppressWarnings("ArrayReturn") @NonNull InputFilter[] filters) {
+ public void setFilters(@SuppressWarnings("ArrayReturn") InputFilter @NonNull [] filters) {
super.setFilters(getEmojiTextViewHelper().getFilters(filters));
}
@@ -287,10 +283,9 @@
* @see #setSupportCompoundDrawablesTintList(ColorStateList)
*
*/
- @Nullable
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public ColorStateList getSupportCompoundDrawablesTintList() {
+ public @Nullable ColorStateList getSupportCompoundDrawablesTintList() {
return mTextHelper.getCompoundDrawableTintList();
}
@@ -328,10 +323,9 @@
* @see #setSupportCompoundDrawablesTintMode(PorterDuff.Mode)
*
*/
- @Nullable
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public PorterDuff.Mode getSupportCompoundDrawablesTintMode() {
+ public PorterDuff.@Nullable Mode getSupportCompoundDrawablesTintMode() {
return mTextHelper.getCompoundDrawableTintMode();
}
@@ -350,7 +344,7 @@
*/
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public void setSupportCompoundDrawablesTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportCompoundDrawablesTintMode(PorterDuff.@Nullable Mode tintMode) {
mTextHelper.setCompoundDrawableTintMode(tintMode);
mTextHelper.applyCompoundDrawablesTints();
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckedTextView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckedTextView.java
index 606a40c..88acdf6 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckedTextView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckedTextView.java
@@ -31,8 +31,6 @@
import android.widget.TextView;
import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.appcompat.content.res.AppCompatResources;
@@ -43,6 +41,9 @@
import androidx.core.widget.TintableCompoundDrawablesView;
import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* A {@link CheckedTextView} which supports compatible features on older versions of the platform,
* including:
@@ -70,8 +71,7 @@
private final AppCompatCheckedTextViewHelper mCheckedHelper;
private final AppCompatBackgroundHelper mBackgroundTintHelper;
private final AppCompatTextHelper mTextHelper;
- @NonNull
- private AppCompatEmojiTextHelper mAppCompatEmojiTextHelper;
+ private @NonNull AppCompatEmojiTextHelper mAppCompatEmojiTextHelper;
public AppCompatCheckedTextView(@NonNull Context context) {
this(context, null);
@@ -131,9 +131,8 @@
*
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
- @Nullable
@Override
- public ColorStateList getSupportCheckMarkTintList() {
+ public @Nullable ColorStateList getSupportCheckMarkTintList() {
return mCheckedHelper != null
? mCheckedHelper.getSupportCheckMarkTintList()
: null;
@@ -145,7 +144,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- public void setSupportCheckMarkTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportCheckMarkTintMode(PorterDuff.@Nullable Mode tintMode) {
if (mCheckedHelper != null) {
mCheckedHelper.setSupportCheckMarkTintMode(tintMode);
}
@@ -156,9 +155,8 @@
*
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
- @Nullable
@Override
- public PorterDuff.Mode getSupportCheckMarkTintMode() {
+ public PorterDuff.@Nullable Mode getSupportCheckMarkTintMode() {
return mCheckedHelper != null
? mCheckedHelper.getSupportCheckMarkTintMode()
: null;
@@ -183,8 +181,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public ColorStateList getSupportBackgroundTintList() {
+ public @Nullable ColorStateList getSupportBackgroundTintList() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
}
@@ -196,7 +193,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
if (mBackgroundTintHelper != null) {
mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
}
@@ -209,8 +206,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public PorterDuff.Mode getSupportBackgroundTintMode() {
+ public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
}
@@ -254,8 +250,7 @@
}
@Override
- @Nullable
- public InputConnection onCreateInputConnection(@NonNull EditorInfo outAttrs) {
+ public @Nullable InputConnection onCreateInputConnection(@NonNull EditorInfo outAttrs) {
return AppCompatHintHelper.onCreateInputConnection(super.onCreateInputConnection(outAttrs),
outAttrs, this);
}
@@ -266,14 +261,13 @@
*/
@Override
public void setCustomSelectionActionModeCallback(
- @Nullable ActionMode.Callback actionModeCallback) {
+ ActionMode.@Nullable Callback actionModeCallback) {
super.setCustomSelectionActionModeCallback(
TextViewCompat.wrapCustomSelectionActionModeCallback(this, actionModeCallback));
}
@Override
- @Nullable
- public ActionMode.Callback getCustomSelectionActionModeCallback() {
+ public ActionMode.@Nullable Callback getCustomSelectionActionModeCallback() {
return TextViewCompat.unwrapCustomSelectionActionModeCallback(
super.getCustomSelectionActionModeCallback());
}
@@ -281,8 +275,7 @@
/**
* This may be called from super constructors.
*/
- @NonNull
- private AppCompatEmojiTextHelper getEmojiTextViewHelper() {
+ private @NonNull AppCompatEmojiTextHelper getEmojiTextViewHelper() {
//noinspection ConstantConditions
if (mAppCompatEmojiTextHelper == null) {
mAppCompatEmojiTextHelper = new AppCompatEmojiTextHelper(this);
@@ -334,10 +327,9 @@
* @see #setSupportCompoundDrawablesTintList(ColorStateList)
*
*/
- @Nullable
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public ColorStateList getSupportCompoundDrawablesTintList() {
+ public @Nullable ColorStateList getSupportCompoundDrawablesTintList() {
return mTextHelper.getCompoundDrawableTintList();
}
@@ -375,10 +367,9 @@
* @see #setSupportCompoundDrawablesTintMode(PorterDuff.Mode)
*
*/
- @Nullable
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public PorterDuff.Mode getSupportCompoundDrawablesTintMode() {
+ public PorterDuff.@Nullable Mode getSupportCompoundDrawablesTintMode() {
return mTextHelper.getCompoundDrawableTintMode();
}
@@ -397,7 +388,7 @@
*/
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public void setSupportCompoundDrawablesTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportCompoundDrawablesTintMode(PorterDuff.@Nullable Mode tintMode) {
mTextHelper.setCompoundDrawableTintMode(tintMode);
mTextHelper.applyCompoundDrawablesTints();
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckedTextViewHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckedTextViewHelper.java
index 73b631a..3459276 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckedTextViewHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckedTextViewHelper.java
@@ -25,8 +25,6 @@
import android.util.AttributeSet;
import android.widget.CheckedTextView;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.appcompat.content.res.AppCompatResources;
@@ -34,10 +32,12 @@
import androidx.core.view.ViewCompat;
import androidx.core.widget.CheckedTextViewCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
@RestrictTo(LIBRARY)
class AppCompatCheckedTextViewHelper {
- @NonNull
- private final CheckedTextView mView;
+ private final @NonNull CheckedTextView mView;
private ColorStateList mCheckMarkTintList = null;
private PorterDuff.Mode mCheckMarkTintMode = null;
@@ -107,7 +107,7 @@
return mCheckMarkTintList;
}
- void setSupportCheckMarkTintMode(@Nullable PorterDuff.Mode tintMode) {
+ void setSupportCheckMarkTintMode(PorterDuff.@Nullable Mode tintMode) {
mCheckMarkTintMode = tintMode;
mHasCheckMarkTintMode = true;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCompoundButtonHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCompoundButtonHelper.java
index bf9b410..e78f66f 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCompoundButtonHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCompoundButtonHelper.java
@@ -23,17 +23,17 @@
import android.util.AttributeSet;
import android.widget.CompoundButton;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.R;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.graphics.drawable.DrawableCompat;
import androidx.core.view.ViewCompat;
import androidx.core.widget.CompoundButtonCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
class AppCompatCompoundButtonHelper {
- @NonNull
- private final CompoundButton mView;
+ private final @NonNull CompoundButton mView;
private ColorStateList mButtonTintList = null;
private PorterDuff.Mode mButtonTintMode = null;
@@ -101,7 +101,7 @@
return mButtonTintList;
}
- void setSupportButtonTintMode(@Nullable PorterDuff.Mode tintMode) {
+ void setSupportButtonTintMode(PorterDuff.@Nullable Mode tintMode) {
mButtonTintMode = tintMode;
mHasButtonTintMode = true;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java
index 479200e..e894c47 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java
@@ -39,11 +39,12 @@
import androidx.annotation.ColorInt;
import androidx.annotation.DimenRes;
import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.core.graphics.drawable.DrawableCompat;
+import org.jspecify.annotations.NonNull;
+
/**
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@@ -148,7 +149,7 @@
getThemeAttrColor(context, R.attr.colorAccent));
}
- private ColorStateList createButtonColorStateList(@NonNull final Context context,
+ private ColorStateList createButtonColorStateList(final @NonNull Context context,
@ColorInt final int baseColor) {
final int[][] states = new int[4][];
final int[] colors = new int[4];
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEditText.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEditText.java
index fcb6eda..58c2f28 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEditText.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEditText.java
@@ -38,8 +38,6 @@
import android.widget.TextView;
import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.annotation.UiThread;
@@ -56,6 +54,9 @@
import androidx.core.widget.TintableCompoundDrawablesView;
import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* A {@link EditText} which supports compatible features on older versions of the platform,
* including:
@@ -83,10 +84,8 @@
private final AppCompatTextHelper mTextHelper;
private final AppCompatTextClassifierHelper mTextClassifierHelper;
private final TextViewOnReceiveContentListener mDefaultOnReceiveContentListener;
- @NonNull
- private final AppCompatEmojiEditTextHelper mAppCompatEmojiEditTextHelper;
- @Nullable
- private SuperCaller mSuperCaller;
+ private final @NonNull AppCompatEmojiEditTextHelper mAppCompatEmojiEditTextHelper;
+ private @Nullable SuperCaller mSuperCaller;
public AppCompatEditText(@NonNull Context context) {
this(context, null);
@@ -162,7 +161,7 @@
* will return null.
*/
@Override
- @Nullable public Editable getText() {
+ public @Nullable Editable getText() {
if (Build.VERSION.SDK_INT >= 28) {
return super.getText();
}
@@ -207,8 +206,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public ColorStateList getSupportBackgroundTintList() {
+ public @Nullable ColorStateList getSupportBackgroundTintList() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
}
@@ -220,7 +218,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
if (mBackgroundTintHelper != null) {
mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
}
@@ -233,8 +231,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public PorterDuff.Mode getSupportBackgroundTintMode() {
+ public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
}
@@ -264,9 +261,8 @@
*
* {@inheritDoc}
*/
- @Nullable
@Override
- public InputConnection onCreateInputConnection(@NonNull EditorInfo outAttrs) {
+ public @Nullable InputConnection onCreateInputConnection(@NonNull EditorInfo outAttrs) {
InputConnection ic = super.onCreateInputConnection(outAttrs);
mTextHelper.populateSurroundingTextIfNeeded(this, ic, outAttrs);
ic = AppCompatHintHelper.onCreateInputConnection(ic, outAttrs, this);
@@ -290,14 +286,13 @@
*/
@Override
public void setCustomSelectionActionModeCallback(
- @Nullable ActionMode.Callback actionModeCallback) {
+ ActionMode.@Nullable Callback actionModeCallback) {
super.setCustomSelectionActionModeCallback(
TextViewCompat.wrapCustomSelectionActionModeCallback(this, actionModeCallback));
}
@Override
- @Nullable
- public ActionMode.Callback getCustomSelectionActionModeCallback() {
+ public ActionMode.@Nullable Callback getCustomSelectionActionModeCallback() {
return TextViewCompat.unwrapCustomSelectionActionModeCallback(
super.getCustomSelectionActionModeCallback());
}
@@ -317,9 +312,8 @@
}
@UiThread
- @NonNull
@RequiresApi(26)
- private SuperCaller getSuperCaller() {
+ private @NonNull SuperCaller getSuperCaller() {
if (mSuperCaller == null) {
mSuperCaller = new SuperCaller();
}
@@ -345,9 +339,8 @@
* {@link android.view.textclassifier.TextClassificationManager}.
*/
@Override
- @NonNull
@RequiresApi(api = 26)
- public TextClassifier getTextClassifier() {
+ public @NonNull TextClassifier getTextClassifier() {
// The null check is necessary because getTextClassifier is called when we are invoking
// the super class's constructor.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P || mTextClassifierHelper == null) {
@@ -394,9 +387,8 @@
* @return The portion of the passed-in content that was not handled (may be all, some, or none
* of the passed-in content).
*/
- @Nullable
@Override
- public ContentInfoCompat onReceiveContent(@NonNull ContentInfoCompat payload) {
+ public @Nullable ContentInfoCompat onReceiveContent(@NonNull ContentInfoCompat payload) {
return mDefaultOnReceiveContentListener.onReceiveContent(this, payload);
}
@@ -448,10 +440,9 @@
* @see #setSupportCompoundDrawablesTintList(ColorStateList)
*
*/
- @Nullable
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public ColorStateList getSupportCompoundDrawablesTintList() {
+ public @Nullable ColorStateList getSupportCompoundDrawablesTintList() {
return mTextHelper.getCompoundDrawableTintList();
}
@@ -489,10 +480,9 @@
* @see #setSupportCompoundDrawablesTintMode(PorterDuff.Mode)
*
*/
- @Nullable
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public PorterDuff.Mode getSupportCompoundDrawablesTintMode() {
+ public PorterDuff.@Nullable Mode getSupportCompoundDrawablesTintMode() {
return mTextHelper.getCompoundDrawableTintMode();
}
@@ -511,7 +501,7 @@
*/
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public void setSupportCompoundDrawablesTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportCompoundDrawablesTintMode(PorterDuff.@Nullable Mode tintMode) {
mTextHelper.setCompoundDrawableTintMode(tintMode);
mTextHelper.applyCompoundDrawablesTints();
}
@@ -519,8 +509,7 @@
@RequiresApi(api = 26)
class SuperCaller {
- @Nullable
- public TextClassifier getTextClassifier() {
+ public @Nullable TextClassifier getTextClassifier() {
return AppCompatEditText.super.getTextClassifier();
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEmojiEditTextHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEmojiEditTextHelper.java
index 987ca76..9f0a585 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEmojiEditTextHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEmojiEditTextHelper.java
@@ -26,20 +26,19 @@
import android.widget.EditText;
import android.widget.TextView;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.R;
import androidx.emoji2.viewsintegration.EmojiEditTextHelper;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* Helper for using EmojiCompat from TextView in appcompat.
*/
class AppCompatEmojiEditTextHelper {
- @NonNull
- private final EditText mView;
- @NonNull
- private final EmojiEditTextHelper mEmojiEditTextHelper;
+ private final @NonNull EditText mView;
+ private final @NonNull EmojiEditTextHelper mEmojiEditTextHelper;
/**
* Helper for integrating EmojiCompat into an EditText subclass.
@@ -116,8 +115,7 @@
*
* @return a new KeyListener instance that wraps {@code keyListener}, or null if passed null.
*/
- @Nullable
- KeyListener getKeyListener(@Nullable KeyListener keyListener) {
+ @Nullable KeyListener getKeyListener(@Nullable KeyListener keyListener) {
// add a guard for NumberkeyListener both here and in emoji2 to avoid release dependency.
// this allows appcompat 1.4.1 to ship without a dependency on emoji2 1.1.
if (isEmojiCapableKeyListener(keyListener)) {
@@ -142,8 +140,7 @@
*
* @return a new InputConnection instance that wraps {@code inputConnection}
*/
- @Nullable
- InputConnection onCreateInputConnection(@Nullable InputConnection inputConnection,
+ @Nullable InputConnection onCreateInputConnection(@Nullable InputConnection inputConnection,
@NonNull EditorInfo outAttrs) {
return mEmojiEditTextHelper.onCreateInputConnection(inputConnection, outAttrs);
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEmojiTextHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEmojiTextHelper.java
index b7418d6..0308988 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEmojiTextHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEmojiTextHelper.java
@@ -23,20 +23,19 @@
import android.util.AttributeSet;
import android.widget.TextView;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.R;
import androidx.emoji2.viewsintegration.EmojiTextViewHelper;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* Helper for using EmojiCompat from TextView in appcompat.
*/
class AppCompatEmojiTextHelper {
- @NonNull
- private final TextView mView;
- @NonNull
- private final EmojiTextViewHelper mEmojiTextViewHelper;
+ private final @NonNull TextView mView;
+ private final @NonNull EmojiTextViewHelper mEmojiTextViewHelper;
AppCompatEmojiTextHelper(@NonNull TextView view) {
mView = view;
@@ -94,8 +93,8 @@
* availability
*/
@SuppressWarnings("ArrayReturn")
- @NonNull
- InputFilter[] getFilters(@SuppressWarnings("ArrayReturn") @NonNull InputFilter[] filters) {
+ InputFilter @NonNull [] getFilters(
+ @SuppressWarnings("ArrayReturn") InputFilter @NonNull [] filters) {
return mEmojiTextViewHelper.getFilters(filters);
}
@@ -116,8 +115,7 @@
* transform
* @return the correct transformation based on isEnabled, may be null
*/
- @Nullable
- public TransformationMethod wrapTransformationMethod(
+ public @Nullable TransformationMethod wrapTransformationMethod(
@Nullable TransformationMethod transformationMethod) {
return mEmojiTextViewHelper.wrapTransformationMethod(transformationMethod);
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageButton.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageButton.java
index 63c15e0..9dafb34 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageButton.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageButton.java
@@ -29,8 +29,6 @@
import android.widget.ImageView;
import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.core.view.TintableBackgroundView;
@@ -38,6 +36,9 @@
import androidx.core.widget.TintableImageSourceView;
import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* A {@link ImageButton} which supports compatible features on older versions of the platform,
* including:
@@ -160,8 +161,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public ColorStateList getSupportBackgroundTintList() {
+ public @Nullable ColorStateList getSupportBackgroundTintList() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
}
@@ -173,7 +173,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
if (mBackgroundTintHelper != null) {
mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
}
@@ -186,8 +186,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public PorterDuff.Mode getSupportBackgroundTintMode() {
+ public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
}
@@ -211,8 +210,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public ColorStateList getSupportImageTintList() {
+ public @Nullable ColorStateList getSupportImageTintList() {
return mImageHelper != null
? mImageHelper.getSupportImageTintList() : null;
}
@@ -224,7 +222,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- public void setSupportImageTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportImageTintMode(PorterDuff.@Nullable Mode tintMode) {
if (mImageHelper != null) {
mImageHelper.setSupportImageTintMode(tintMode);
}
@@ -237,8 +235,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public PorterDuff.Mode getSupportImageTintMode() {
+ public PorterDuff.@Nullable Mode getSupportImageTintMode() {
return mImageHelper != null
? mImageHelper.getSupportImageTintMode() : null;
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageHelper.java
index 3c7b25e..84a07cf 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageHelper.java
@@ -25,19 +25,19 @@
import android.util.AttributeSet;
import android.widget.ImageView;
-import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.view.ViewCompat;
import androidx.core.widget.ImageViewCompat;
+import org.jspecify.annotations.NonNull;
+
/**
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
public class AppCompatImageHelper {
- @NonNull
- private final ImageView mView;
+ private final @NonNull ImageView mView;
private TintInfo mInternalImageTint;
private TintInfo mImageTint;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageView.java
index a7bdad9..7f1bd11 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageView.java
@@ -28,14 +28,15 @@
import android.widget.ImageView;
import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.core.view.TintableBackgroundView;
import androidx.core.widget.ImageViewCompat;
import androidx.core.widget.TintableImageSourceView;
import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* A {@link ImageView} which supports compatible features on older versions of the platform,
* including:
@@ -171,8 +172,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public ColorStateList getSupportBackgroundTintList() {
+ public @Nullable ColorStateList getSupportBackgroundTintList() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
}
@@ -184,7 +184,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
if (mBackgroundTintHelper != null) {
mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
}
@@ -197,8 +197,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public PorterDuff.Mode getSupportBackgroundTintMode() {
+ public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
}
@@ -223,8 +222,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public ColorStateList getSupportImageTintList() {
+ public @Nullable ColorStateList getSupportImageTintList() {
return mImageHelper != null
? mImageHelper.getSupportImageTintList() : null;
}
@@ -236,7 +234,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- public void setSupportImageTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportImageTintMode(PorterDuff.@Nullable Mode tintMode) {
if (mImageHelper != null) {
mImageHelper.setSupportImageTintMode(tintMode);
}
@@ -249,8 +247,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public PorterDuff.Mode getSupportImageTintMode() {
+ public PorterDuff.@Nullable Mode getSupportImageTintMode() {
return mImageHelper != null
? mImageHelper.getSupportImageTintMode() : null;
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java
index 9ad2193..346f542 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java
@@ -30,8 +30,6 @@
import android.widget.TextView;
import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.appcompat.content.res.AppCompatResources;
@@ -39,6 +37,9 @@
import androidx.core.widget.TintableCompoundDrawablesView;
import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* A {@link MultiAutoCompleteTextView} which supports compatible features on older version of the
* platform, including:
@@ -65,8 +66,7 @@
private final AppCompatBackgroundHelper mBackgroundTintHelper;
private final AppCompatTextHelper mTextHelper;
- @NonNull
- private final AppCompatEmojiEditTextHelper mAppCompatEmojiEditTextHelper;
+ private final @NonNull AppCompatEmojiEditTextHelper mAppCompatEmojiEditTextHelper;
public AppCompatMultiAutoCompleteTextView(@NonNull Context context) {
this(context, null);
@@ -183,8 +183,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public ColorStateList getSupportBackgroundTintList() {
+ public @Nullable ColorStateList getSupportBackgroundTintList() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
}
@@ -196,7 +195,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
if (mBackgroundTintHelper != null) {
mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
}
@@ -209,8 +208,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public PorterDuff.Mode getSupportBackgroundTintMode() {
+ public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
}
@@ -289,10 +287,9 @@
* @see #setSupportCompoundDrawablesTintList(ColorStateList)
*
*/
- @Nullable
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public ColorStateList getSupportCompoundDrawablesTintList() {
+ public @Nullable ColorStateList getSupportCompoundDrawablesTintList() {
return mTextHelper.getCompoundDrawableTintList();
}
@@ -330,10 +327,9 @@
* @see #setSupportCompoundDrawablesTintMode(PorterDuff.Mode)
*
*/
- @Nullable
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public PorterDuff.Mode getSupportCompoundDrawablesTintMode() {
+ public PorterDuff.@Nullable Mode getSupportCompoundDrawablesTintMode() {
return mTextHelper.getCompoundDrawableTintMode();
}
@@ -352,7 +348,7 @@
*/
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public void setSupportCompoundDrawablesTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportCompoundDrawablesTintMode(PorterDuff.@Nullable Mode tintMode) {
mTextHelper.setCompoundDrawableTintMode(tintMode);
mTextHelper.applyCompoundDrawablesTints();
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatPopupWindow.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatPopupWindow.java
index 5c1f568..55057df 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatPopupWindow.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatPopupWindow.java
@@ -23,12 +23,13 @@
import android.widget.PopupWindow;
import androidx.annotation.AttrRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.StyleRes;
import androidx.appcompat.R;
import androidx.core.widget.PopupWindowCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
class AppCompatPopupWindow extends PopupWindow {
private static final boolean COMPAT_OVERLAP_ANCHOR = Build.VERSION.SDK_INT < 21;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java
index e0eb8e0..53f4d82 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java
@@ -29,8 +29,6 @@
import android.widget.TextView;
import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.appcompat.content.res.AppCompatResources;
@@ -40,6 +38,9 @@
import androidx.core.widget.TintableCompoundDrawablesView;
import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* A {@link RadioButton} which supports compatible features on older versions of the platform,
* including:
@@ -92,8 +93,7 @@
/**
* This may be called from super constructors.
*/
- @NonNull
- private AppCompatEmojiTextHelper getEmojiTextViewHelper() {
+ private @NonNull AppCompatEmojiTextHelper getEmojiTextViewHelper() {
if (mAppCompatEmojiTextHelper == null) {
mAppCompatEmojiTextHelper = new AppCompatEmojiTextHelper(this);
}
@@ -128,9 +128,8 @@
* This should be accessed from {@link androidx.core.widget.CompoundButtonCompat}
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
- @Nullable
@Override
- public ColorStateList getSupportButtonTintList() {
+ public @Nullable ColorStateList getSupportButtonTintList() {
return mCompoundButtonHelper != null
? mCompoundButtonHelper.getSupportButtonTintList()
: null;
@@ -141,7 +140,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- public void setSupportButtonTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportButtonTintMode(PorterDuff.@Nullable Mode tintMode) {
if (mCompoundButtonHelper != null) {
mCompoundButtonHelper.setSupportButtonTintMode(tintMode);
}
@@ -151,9 +150,8 @@
* This should be accessed from {@link androidx.core.widget.CompoundButtonCompat}
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
- @Nullable
@Override
- public PorterDuff.Mode getSupportButtonTintMode() {
+ public PorterDuff.@Nullable Mode getSupportButtonTintMode() {
return mCompoundButtonHelper != null
? mCompoundButtonHelper.getSupportButtonTintMode()
: null;
@@ -179,8 +177,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public ColorStateList getSupportBackgroundTintList() {
+ public @Nullable ColorStateList getSupportBackgroundTintList() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
}
@@ -192,7 +189,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
if (mBackgroundTintHelper != null) {
mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
}
@@ -205,8 +202,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public PorterDuff.Mode getSupportBackgroundTintMode() {
+ public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
}
@@ -239,7 +235,7 @@
}
@Override
- public void setFilters(@SuppressWarnings("ArrayReturn") @NonNull InputFilter[] filters) {
+ public void setFilters(@SuppressWarnings("ArrayReturn") InputFilter @NonNull [] filters) {
super.setFilters(getEmojiTextViewHelper().getFilters(filters));
}
@@ -286,10 +282,9 @@
* @see #setSupportCompoundDrawablesTintList(ColorStateList)
*
*/
- @Nullable
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public ColorStateList getSupportCompoundDrawablesTintList() {
+ public @Nullable ColorStateList getSupportCompoundDrawablesTintList() {
return mTextHelper.getCompoundDrawableTintList();
}
@@ -327,10 +322,9 @@
* @see #setSupportCompoundDrawablesTintMode(PorterDuff.Mode)
*
*/
- @Nullable
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public PorterDuff.Mode getSupportCompoundDrawablesTintMode() {
+ public PorterDuff.@Nullable Mode getSupportCompoundDrawablesTintMode() {
return mTextHelper.getCompoundDrawableTintMode();
}
@@ -349,7 +343,7 @@
*/
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public void setSupportCompoundDrawablesTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportCompoundDrawablesTintMode(PorterDuff.@Nullable Mode tintMode) {
mTextHelper.setCompoundDrawableTintMode(tintMode);
mTextHelper.applyCompoundDrawablesTints();
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRatingBar.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRatingBar.java
index 242f61e..7d58c8b 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRatingBar.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRatingBar.java
@@ -22,10 +22,11 @@
import android.view.View;
import android.widget.RatingBar;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.R;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* A {@link RatingBar} which supports compatible features on older versions of the platform.
*
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatReceiveContentHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatReceiveContentHelper.java
index 91bc26a..8b2bf8e 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatReceiveContentHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatReceiveContentHelper.java
@@ -33,12 +33,13 @@
import android.view.View;
import android.widget.TextView;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.core.view.ContentInfoCompat;
import androidx.core.view.ViewCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* Common code for handling content via {@link ViewCompat#performReceiveContent}.
*/
@@ -150,8 +151,7 @@
* @param view The target view.
* @return The activity if found; null otherwise.
*/
- @Nullable
- static Activity tryGetActivity(@NonNull View view) {
+ static @Nullable Activity tryGetActivity(@NonNull View view) {
Context context = view.getContext();
while (context instanceof ContextWrapper) {
if (context instanceof Activity) {
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSeekBar.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSeekBar.java
index 70a8b0f..afe710c 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSeekBar.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSeekBar.java
@@ -21,10 +21,11 @@
import android.util.AttributeSet;
import android.widget.SeekBar;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.R;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* A {@link SeekBar} which supports compatible features on older versions of the platform.
*
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSeekBarHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSeekBarHelper.java
index ada8287..5399505c 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSeekBarHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSeekBarHelper.java
@@ -23,11 +23,12 @@
import android.util.AttributeSet;
import android.widget.SeekBar;
-import androidx.annotation.Nullable;
import androidx.appcompat.R;
import androidx.core.graphics.drawable.DrawableCompat;
import androidx.core.view.ViewCompat;
+import org.jspecify.annotations.Nullable;
+
class AppCompatSeekBarHelper extends AppCompatProgressBarHelper {
private final SeekBar mView;
@@ -95,8 +96,7 @@
mView.invalidate();
}
- @Nullable
- Drawable getTickMark() {
+ @Nullable Drawable getTickMark() {
return mTickMark;
}
@@ -107,20 +107,18 @@
applyTickMarkTint();
}
- @Nullable
- ColorStateList getTickMarkTintList() {
+ @Nullable ColorStateList getTickMarkTintList() {
return mTickMarkTintList;
}
- void setTickMarkTintMode(@Nullable PorterDuff.Mode tintMode) {
+ void setTickMarkTintMode(PorterDuff.@Nullable Mode tintMode) {
mTickMarkTintMode = tintMode;
mHasTickMarkTintMode = true;
applyTickMarkTint();
}
- @Nullable
- PorterDuff.Mode getTickMarkTintMode() {
+ PorterDuff.@Nullable Mode getTickMarkTintMode() {
return mTickMarkTintMode;
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
index 37e4725..33cc244 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
@@ -47,8 +47,6 @@
import android.widget.SpinnerAdapter;
import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.annotation.StyleableRes;
@@ -62,6 +60,8 @@
import androidx.core.view.TintableBackgroundView;
import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
/**
* A {@link Spinner} which supports compatible features on older versions of the platform,
@@ -182,7 +182,7 @@
* @see #MODE_DROPDOWN
*/
public AppCompatSpinner(
- @NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int mode) {
+ @NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int mode) {
this(context, attrs, defStyleAttr, mode, null);
}
@@ -510,8 +510,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public ColorStateList getSupportBackgroundTintList() {
+ public @Nullable ColorStateList getSupportBackgroundTintList() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
}
@@ -524,7 +523,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
if (mBackgroundTintHelper != null) {
mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
}
@@ -537,8 +536,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public PorterDuff.Mode getSupportBackgroundTintMode() {
+ public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
}
@@ -689,7 +687,7 @@
* views, may be {@null} to use default theme
*/
public DropDownAdapter(@Nullable SpinnerAdapter adapter,
- @Nullable Resources.Theme dropDownTheme) {
+ Resources.@Nullable Theme dropDownTheme) {
mAdapter = adapter;
if (adapter instanceof ListAdapter) {
@@ -1103,8 +1101,8 @@
}
static void setDropDownViewTheme(
- @NonNull android.widget.ThemedSpinnerAdapter themedSpinnerAdapter,
- @Nullable Resources.Theme theme
+ android.widget.@NonNull ThemedSpinnerAdapter themedSpinnerAdapter,
+ Resources.@Nullable Theme theme
) {
if (!ObjectsCompat.equals(themedSpinnerAdapter.getDropDownViewTheme(), theme)) {
themedSpinnerAdapter.setDropDownViewTheme(theme);
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextClassifierHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextClassifierHelper.java
index f675ec9..27ea549 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextClassifierHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextClassifierHelper.java
@@ -20,11 +20,12 @@
import android.view.textclassifier.TextClassifier;
import android.widget.TextView;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.core.util.Preconditions;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* To workaround a bug in O, by backporting a fix in P.
* <p>
@@ -34,10 +35,8 @@
* effect to this TextView.
*/
final class AppCompatTextClassifierHelper {
- @NonNull
- private TextView mTextView;
- @Nullable
- private TextClassifier mTextClassifier;
+ private @NonNull TextView mTextView;
+ private @Nullable TextClassifier mTextClassifier;
AppCompatTextClassifierHelper(@NonNull TextView textView) {
mTextView = Preconditions.checkNotNull(textView);
@@ -57,8 +56,7 @@
* {@link android.view.textclassifier.TextClassificationManager}.
*/
@RequiresApi(api = 26)
- @NonNull
- public TextClassifier getTextClassifier() {
+ public @NonNull TextClassifier getTextClassifier() {
if (mTextClassifier == null) {
return Api26Impl.getTextClassifier(mTextView);
}
@@ -71,8 +69,7 @@
// This class is not instantiable.
}
- @NonNull
- static TextClassifier getTextClassifier(@NonNull TextView textView) {
+ static @NonNull TextClassifier getTextClassifier(@NonNull TextView textView) {
final TextClassificationManager tcm =
textView.getContext().getSystemService(TextClassificationManager.class);
if (tcm != null) {
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextHelper.java
index 7368922..4ea59ca 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextHelper.java
@@ -37,8 +37,6 @@
import android.view.inputmethod.InputConnection;
import android.widget.TextView;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.annotation.UiThread;
@@ -51,6 +49,9 @@
import androidx.core.view.inputmethod.EditorInfoCompat;
import androidx.core.widget.TextViewCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.lang.ref.WeakReference;
import java.util.Locale;
import java.util.Objects;
@@ -64,8 +65,7 @@
private static final int SERIF = 2;
private static final int MONOSPACE = 3;
- @NonNull
- private final TextView mView;
+ private final @NonNull TextView mView;
private TintInfo mDrawableLeftTint;
private TintInfo mDrawableTopTint;
@@ -75,14 +75,12 @@
private TintInfo mDrawableEndTint;
private TintInfo mDrawableTint; // Tint used for all compound drawables
- @NonNull
- private final AppCompatTextViewAutoSizeHelper mAutoSizeTextHelper;
+ private final @NonNull AppCompatTextViewAutoSizeHelper mAutoSizeTextHelper;
private int mStyle = Typeface.NORMAL;
private int mFontWeight = TEXT_FONT_WEIGHT_UNSPECIFIED;
private Typeface mFontTypeface;
- @Nullable
- private String mFontVariationSettings = null;
+ private @Nullable String mFontVariationSettings = null;
private boolean mAsyncFontPending;
AppCompatTextHelper(@NonNull TextView view) {
@@ -472,8 +470,7 @@
return false;
}
- @NonNull
- private ResourcesCompat.FontCallback makeFontCallback(int fontWeight, int style) {
+ private ResourcesCompat.@NonNull FontCallback makeFontCallback(int fontWeight, int style) {
final WeakReference<TextView> textViewWeak = new WeakReference<>(mView);
return new ResourcesCompat.FontCallback() {
@Override
@@ -665,7 +662,7 @@
autoSizeMinTextSize, autoSizeMaxTextSize, autoSizeStepGranularity, unit);
}
- void setAutoSizeTextTypeUniformWithPresetSizes(@NonNull int[] presetSizes, int unit)
+ void setAutoSizeTextTypeUniformWithPresetSizes(int @NonNull [] presetSizes, int unit)
throws IllegalArgumentException {
mAutoSizeTextHelper.setAutoSizeTextTypeUniformWithPresetSizes(presetSizes, unit);
}
@@ -691,8 +688,7 @@
return mAutoSizeTextHelper.getAutoSizeTextAvailableSizes();
}
- @Nullable
- ColorStateList getCompoundDrawableTintList() {
+ @Nullable ColorStateList getCompoundDrawableTintList() {
return mDrawableTint != null ? mDrawableTint.mTintList : null;
}
@@ -705,12 +701,11 @@
setCompoundTints();
}
- @Nullable
- PorterDuff.Mode getCompoundDrawableTintMode() {
+ PorterDuff.@Nullable Mode getCompoundDrawableTintMode() {
return mDrawableTint != null ? mDrawableTint.mTintMode : null;
}
- void setCompoundDrawableTintMode(@Nullable PorterDuff.Mode tintMode) {
+ void setCompoundDrawableTintMode(PorterDuff.@Nullable Mode tintMode) {
if (mDrawableTint == null) {
mDrawableTint = new TintInfo();
}
@@ -830,9 +825,8 @@
* {@link Paint#setFontVariationSettings(String)} would return null for this
* Typeface and font variation settings string.
*/
- @Nullable
@UiThread
- static Typeface createVariationInstance(@Nullable Typeface baseTypeface,
+ static @Nullable Typeface createVariationInstance(@Nullable Typeface baseTypeface,
@Nullable String fontVariationSettings) {
Pair<Typeface, String> cacheKey = new Pair<>(baseTypeface, fontVariationSettings);
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextView.java
index 1333bf6..ccf0a76 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextView.java
@@ -40,8 +40,6 @@
import androidx.annotation.DrawableRes;
import androidx.annotation.FloatRange;
import androidx.annotation.IntRange;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.Px;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
@@ -55,6 +53,9 @@
import androidx.core.widget.TintableCompoundDrawablesView;
import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
@@ -93,8 +94,7 @@
private final AppCompatTextHelper mTextHelper;
private final AppCompatTextClassifierHelper mTextClassifierHelper;
@SuppressWarnings("NotNullFieldNotInitialized") // initialized in getter
- @NonNull
- private AppCompatEmojiTextHelper mEmojiTextViewHelper;
+ private @NonNull AppCompatEmojiTextHelper mEmojiTextViewHelper;
private boolean mIsSetTypefaceProcessing = false;
@@ -123,11 +123,9 @@
*/
private String mFontVariationSettings;
- @Nullable
- private SuperCaller mSuperCaller = null;
+ private @Nullable SuperCaller mSuperCaller = null;
- @Nullable
- private Future<PrecomputedTextCompat> mPrecomputedTextFuture;
+ private @Nullable Future<PrecomputedTextCompat> mPrecomputedTextFuture;
public AppCompatTextView(@NonNull Context context) {
this(context, null);
@@ -159,8 +157,7 @@
/**
* This may be called from super constructors.
*/
- @NonNull
- private AppCompatEmojiTextHelper getEmojiTextViewHelper() {
+ private @NonNull AppCompatEmojiTextHelper getEmojiTextViewHelper() {
//noinspection ConstantConditions
if (mEmojiTextViewHelper == null) {
mEmojiTextViewHelper = new AppCompatEmojiTextHelper(this);
@@ -202,8 +199,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public ColorStateList getSupportBackgroundTintList() {
+ public @Nullable ColorStateList getSupportBackgroundTintList() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
}
@@ -214,7 +210,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
if (mBackgroundTintHelper != null) {
mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
}
@@ -226,8 +222,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public PorterDuff.Mode getSupportBackgroundTintMode() {
+ public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
}
@@ -276,15 +271,14 @@
}
}
- @Nullable
@RequiresApi(26)
@Override
- public String getFontVariationSettings() {
+ public @Nullable String getFontVariationSettings() {
return mFontVariationSettings;
}
@Override
- public void setFilters(@SuppressWarnings("ArrayReturn") @NonNull InputFilter[] filters) {
+ public void setFilters(@SuppressWarnings("ArrayReturn") InputFilter @NonNull [] filters) {
super.setFilters(getEmojiTextViewHelper().getFilters(filters));
}
@@ -395,7 +389,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- public void setAutoSizeTextTypeUniformWithPresetSizes(@NonNull int[] presetSizes, int unit)
+ public void setAutoSizeTextTypeUniformWithPresetSizes(int @NonNull [] presetSizes, int unit)
throws IllegalArgumentException {
if (SDK_LEVEL_SUPPORTS_AUTOSIZE) {
getSuperCaller().setAutoSizeTextTypeUniformWithPresetSizes(presetSizes, unit);
@@ -559,14 +553,13 @@
*/
@Override
public void setCustomSelectionActionModeCallback(
- @Nullable ActionMode.Callback actionModeCallback) {
+ ActionMode.@Nullable Callback actionModeCallback) {
super.setCustomSelectionActionModeCallback(
TextViewCompat.wrapCustomSelectionActionModeCallback(this, actionModeCallback));
}
@Override
- @Nullable
- public ActionMode.Callback getCustomSelectionActionModeCallback() {
+ public ActionMode.@Nullable Callback getCustomSelectionActionModeCallback() {
return TextViewCompat.unwrapCustomSelectionActionModeCallback(
super.getCustomSelectionActionModeCallback());
}
@@ -578,8 +571,7 @@
* @return a current {@link PrecomputedTextCompat.Params}
* @see PrecomputedTextCompat
*/
- @NonNull
- public PrecomputedTextCompat.Params getTextMetricsParamsCompat() {
+ public PrecomputedTextCompat.@NonNull Params getTextMetricsParamsCompat() {
return TextViewCompat.getTextMetricsParams(this);
}
@@ -590,7 +582,7 @@
*
* @see PrecomputedTextCompat
*/
- public void setTextMetricsParamsCompat(@NonNull PrecomputedTextCompat.Params params) {
+ public void setTextMetricsParamsCompat(PrecomputedTextCompat.@NonNull Params params) {
TextViewCompat.setTextMetricsParams(this, params);
}
@@ -645,8 +637,7 @@
*/
@Override
@RequiresApi(api = 26)
- @NonNull
- public TextClassifier getTextClassifier() {
+ public @NonNull TextClassifier getTextClassifier() {
// The null check is necessary because getTextClassifier is called when we are invoking
// the super class's constructor.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P || mTextClassifierHelper == null) {
@@ -752,10 +743,9 @@
* @see #setSupportCompoundDrawablesTintList(ColorStateList)
*
*/
- @Nullable
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public ColorStateList getSupportCompoundDrawablesTintList() {
+ public @Nullable ColorStateList getSupportCompoundDrawablesTintList() {
return mTextHelper.getCompoundDrawableTintList();
}
@@ -793,10 +783,9 @@
* @see #setSupportCompoundDrawablesTintMode(PorterDuff.Mode)
*
*/
- @Nullable
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public PorterDuff.Mode getSupportCompoundDrawablesTintMode() {
+ public PorterDuff.@Nullable Mode getSupportCompoundDrawablesTintMode() {
return mTextHelper.getCompoundDrawableTintMode();
}
@@ -815,7 +804,7 @@
*/
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public void setSupportCompoundDrawablesTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportCompoundDrawablesTintMode(PorterDuff.@Nullable Mode tintMode) {
mTextHelper.setCompoundDrawableTintMode(tintMode);
mTextHelper.applyCompoundDrawablesTints();
}
@@ -846,10 +835,9 @@
}
@Override
- @Nullable
// Code inspection reveals that the superclass method can return null.
@SuppressWarnings("InvalidNullabilityOverride")
- public Typeface getTypeface() {
+ public @Nullable Typeface getTypeface() {
return mOriginalTypeface;
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeHelper.java
index cd09c92..512724c 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeHelper.java
@@ -36,8 +36,6 @@
import android.util.TypedValue;
import android.widget.TextView;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.annotation.VisibleForTesting;
@@ -45,6 +43,9 @@
import androidx.core.view.ViewCompat;
import androidx.core.widget.TextViewCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
@@ -96,8 +97,7 @@
private boolean mHasPresetAutoSizeValues = false;
private TextPaint mTempTextPaint;
- @NonNull
- private final TextView mTextView;
+ private final @NonNull TextView mTextView;
private final Context mContext;
private final Impl mImpl;
@@ -357,7 +357,7 @@
*
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
- void setAutoSizeTextTypeUniformWithPresetSizes(@NonNull int[] presetSizes, int unit)
+ void setAutoSizeTextTypeUniformWithPresetSizes(int @NonNull [] presetSizes, int unit)
throws IllegalArgumentException {
if (supportsAutoSizeText()) {
final int presetSizesLength = presetSizes.length;
@@ -711,10 +711,9 @@
}
@VisibleForTesting
- @NonNull
- StaticLayout createLayout(
+ @NonNull StaticLayout createLayout(
@NonNull CharSequence text,
- @NonNull Layout.Alignment alignment,
+ Layout.@NonNull Alignment alignment,
int availableWidth,
int maxLines
) {
@@ -773,7 +772,7 @@
// This is marked package-protected so that it doesn't require a synthetic accessor
// when being used from the Impl inner classes
static <T> T invokeAndReturnWithDefault(@NonNull Object object,
- @NonNull final String methodName, @NonNull final T defaultValue) {
+ final @NonNull String methodName, final @NonNull T defaultValue) {
T result = null;
boolean exceptionThrown = false;
@@ -793,8 +792,7 @@
return result;
}
- @Nullable
- private static Method getTextViewMethod(@NonNull final String methodName) {
+ private static @Nullable Method getTextViewMethod(final @NonNull String methodName) {
try {
Method method = sTextViewMethodByNameCache.get(methodName);
if (method == null) {
@@ -838,10 +836,9 @@
// This class is not instantiable.
}
- @NonNull
- static StaticLayout createStaticLayoutForMeasuring(
+ static @NonNull StaticLayout createStaticLayoutForMeasuring(
@NonNull CharSequence text,
- @NonNull Layout.Alignment alignment,
+ Layout.@NonNull Alignment alignment,
int availableWidth,
int maxLines,
@NonNull TextView textView,
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatToggleButton.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatToggleButton.java
index a55a8b2..bd591b9 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatToggleButton.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatToggleButton.java
@@ -28,14 +28,15 @@
import android.widget.ToggleButton;
import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.core.view.TintableBackgroundView;
import androidx.core.view.ViewCompat;
import androidx.core.widget.TintableCompoundDrawablesView;
import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* A {@link ToggleButton} which supports compatible features on older versions of the platform,
* including:
@@ -119,8 +120,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public ColorStateList getSupportBackgroundTintList() {
+ public @Nullable ColorStateList getSupportBackgroundTintList() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
}
@@ -132,7 +132,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
if (mBackgroundTintHelper != null) {
mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
}
@@ -145,8 +145,7 @@
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Override
- @Nullable
- public PorterDuff.Mode getSupportBackgroundTintMode() {
+ public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
return mBackgroundTintHelper != null
? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
}
@@ -163,7 +162,7 @@
}
@Override
- public void setFilters(@SuppressWarnings("ArrayReturn") @NonNull InputFilter[] filters) {
+ public void setFilters(@SuppressWarnings("ArrayReturn") InputFilter @NonNull [] filters) {
super.setFilters(getEmojiTextViewHelper().getFilters(filters));
}
@@ -171,8 +170,7 @@
/**
* This may be called from super constructors.
*/
- @NonNull
- private AppCompatEmojiTextHelper getEmojiTextViewHelper() {
+ private @NonNull AppCompatEmojiTextHelper getEmojiTextViewHelper() {
//noinspection ConstantConditions
if (mAppCompatEmojiTextHelper == null) {
mAppCompatEmojiTextHelper = new AppCompatEmojiTextHelper(this);
@@ -223,10 +221,9 @@
* @see #setSupportCompoundDrawablesTintList(ColorStateList)
*
*/
- @Nullable
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public ColorStateList getSupportCompoundDrawablesTintList() {
+ public @Nullable ColorStateList getSupportCompoundDrawablesTintList() {
return mTextHelper.getCompoundDrawableTintList();
}
@@ -264,10 +261,9 @@
* @see #setSupportCompoundDrawablesTintMode(PorterDuff.Mode)
*
*/
- @Nullable
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public PorterDuff.Mode getSupportCompoundDrawablesTintMode() {
+ public PorterDuff.@Nullable Mode getSupportCompoundDrawablesTintMode() {
return mTextHelper.getCompoundDrawableTintMode();
}
@@ -286,7 +282,7 @@
*/
@Override
@RestrictTo(LIBRARY_GROUP_PREFIX)
- public void setSupportCompoundDrawablesTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setSupportCompoundDrawablesTintMode(PorterDuff.@Nullable Mode tintMode) {
mTextHelper.setCompoundDrawableTintMode(tintMode);
mTextHelper.applyCompoundDrawablesTints();
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ButtonBarLayout.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ButtonBarLayout.java
index d0fb325..37b5457 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ButtonBarLayout.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ButtonBarLayout.java
@@ -24,12 +24,13 @@
import android.view.View;
import android.widget.LinearLayout;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.core.view.ViewCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* An extension of LinearLayout that automatically switches to vertical
* orientation when it can't fit its child views horizontally.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ContentFrameLayout.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ContentFrameLayout.java
index 6dda3d0..f1f6604 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ContentFrameLayout.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ContentFrameLayout.java
@@ -29,10 +29,11 @@
import android.util.TypedValue;
import android.widget.FrameLayout;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
*/
@RestrictTo(LIBRARY)
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DialogTitle.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DialogTitle.java
index 0e43cf1..f32b45d 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DialogTitle.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DialogTitle.java
@@ -24,11 +24,12 @@
import android.util.AttributeSet;
import android.util.TypedValue;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* Used by dialogs to change the font size and number of lines to try to fit
* the text to the available space.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DropDownListView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DropDownListView.java
index 89472db..b2124e5 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DropDownListView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DropDownListView.java
@@ -32,7 +32,6 @@
import android.widget.ListAdapter;
import android.widget.ListView;
-import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.R;
import androidx.appcompat.graphics.drawable.DrawableWrapperCompat;
@@ -40,6 +39,8 @@
import androidx.core.view.ViewPropertyAnimatorCompat;
import androidx.core.widget.ListViewAutoScrollHelper;
+import org.jspecify.annotations.NonNull;
+
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/FitWindowsFrameLayout.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/FitWindowsFrameLayout.java
index 5a3c3d6..aecaf58 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/FitWindowsFrameLayout.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/FitWindowsFrameLayout.java
@@ -23,10 +23,11 @@
import android.util.AttributeSet;
import android.widget.FrameLayout;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/FitWindowsLinearLayout.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/FitWindowsLinearLayout.java
index 8aec6e9..ee18239 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/FitWindowsLinearLayout.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/FitWindowsLinearLayout.java
@@ -23,10 +23,11 @@
import android.util.AttributeSet;
import android.widget.LinearLayout;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java
index c6f23eb..1356f48 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java
@@ -32,14 +32,15 @@
import androidx.annotation.GravityInt;
import androidx.annotation.IntDef;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.core.view.GravityCompat;
import androidx.core.view.ViewCompat;
import androidx.resourceinspection.annotation.Attribute;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ListPopupWindow.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ListPopupWindow.java
index ca8c609..3afa057 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ListPopupWindow.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ListPopupWindow.java
@@ -45,8 +45,6 @@
import android.widget.PopupWindow;
import androidx.annotation.AttrRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.annotation.StyleRes;
@@ -54,6 +52,9 @@
import androidx.appcompat.view.menu.ShowableListMenu;
import androidx.core.widget.PopupWindowCompat;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.lang.reflect.Method;
/**
@@ -521,8 +522,7 @@
* @return anchor-relative bounds, or @{@code null} if not set
* @see #setEpicenterBounds(Rect)
*/
- @Nullable
- public Rect getEpicenterBounds() {
+ public @Nullable Rect getEpicenterBounds() {
return mEpicenterBounds != null ? new Rect(mEpicenterBounds) : null;
}
@@ -613,7 +613,7 @@
*
* @see ListView#setOnItemClickListener(AdapterView.OnItemClickListener)
*/
- public void setOnItemClickListener(@Nullable AdapterView.OnItemClickListener clickListener) {
+ public void setOnItemClickListener(AdapterView.@Nullable OnItemClickListener clickListener) {
mItemClickListener = clickListener;
}
@@ -779,7 +779,7 @@
*
* @param listener Listener that will be notified when the popup is dismissed.
*/
- public void setOnDismissListener(@Nullable PopupWindow.OnDismissListener listener) {
+ public void setOnDismissListener(PopupWindow.@Nullable OnDismissListener listener) {
mPopup.setOnDismissListener(listener);
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/MenuItemHoverListener.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/MenuItemHoverListener.java
index 262e575..fd8ca9f 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/MenuItemHoverListener.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/MenuItemHoverListener.java
@@ -20,10 +20,11 @@
import android.view.MenuItem;
-import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
import androidx.appcompat.view.menu.MenuBuilder;
+import org.jspecify.annotations.NonNull;
+
/**
* An interface notified when a menu item is hovered. Useful for cases when hover should trigger
* some behavior at a higher level, like managing the opening and closing of submenus.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/MenuPopupWindow.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/MenuPopupWindow.java
index 44c6c66..1ceaf64 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/MenuPopupWindow.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/MenuPopupWindow.java
@@ -33,14 +33,15 @@
import android.widget.ListAdapter;
import android.widget.PopupWindow;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.appcompat.view.menu.ListMenuItemView;
import androidx.appcompat.view.menu.MenuAdapter;
import androidx.appcompat.view.menu.MenuBuilder;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.lang.reflect.Method;
/**
@@ -74,9 +75,8 @@
super(context, attrs, defStyleAttr, defStyleRes);
}
- @NonNull
@Override
- DropDownListView createDropDownListView(Context context, boolean hijackFocus) {
+ @NonNull DropDownListView createDropDownListView(Context context, boolean hijackFocus) {
MenuDropDownListView view = new MenuDropDownListView(context, hijackFocus);
view.setHoverListener(this);
return view;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/PopupMenu.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/PopupMenu.java
index b8cb0d8..853440e 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/PopupMenu.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/PopupMenu.java
@@ -29,8 +29,6 @@
import androidx.annotation.AttrRes;
import androidx.annotation.MenuRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.annotation.StyleRes;
import androidx.appcompat.R;
@@ -39,6 +37,9 @@
import androidx.appcompat.view.menu.MenuPopupHelper;
import androidx.appcompat.view.menu.ShowableListMenu;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* Static library support version of the framework's {@link android.widget.PopupMenu}.
* Used to write apps that run on platforms prior to Android 3.0. When running
@@ -169,8 +170,7 @@
*
* @return a touch listener that controls drag-to-open behavior
*/
- @NonNull
- public View.OnTouchListener getDragToOpenListener() {
+ public View.@NonNull OnTouchListener getDragToOpenListener() {
if (mDragListener == null) {
mDragListener = new ForwardingListener(mAnchor) {
@Override
@@ -204,8 +204,7 @@
* @see #show()
* @see #getMenuInflater()
*/
- @NonNull
- public Menu getMenu() {
+ public @NonNull Menu getMenu() {
return mMenu;
}
@@ -214,8 +213,7 @@
* from XML into the menu returned by {@link #getMenu()}
* @see #getMenu()
*/
- @NonNull
- public MenuInflater getMenuInflater() {
+ public @NonNull MenuInflater getMenuInflater() {
return new SupportMenuInflater(mContext);
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java
index 7197b4b..db9e7a5 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java
@@ -42,13 +42,14 @@
import android.widget.Spinner;
import android.widget.TextView;
-import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.view.ActionBarPolicy;
import androidx.core.view.GravityCompat;
+import org.jspecify.annotations.NonNull;
+
/**
* This widget implements the dynamic action bar tab behavior that can change across different
* configurations or circumstances.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SearchView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SearchView.java
index 0cce612..aef3570 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SearchView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SearchView.java
@@ -72,8 +72,6 @@
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
@@ -84,6 +82,9 @@
import androidx.customview.view.AbsSavedState;
import androidx.resourceinspection.annotation.Attribute;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.lang.reflect.Method;
import java.util.WeakHashMap;
@@ -620,8 +621,7 @@
* {@link R.attr#queryHint}
*/
@Attribute("androidx.appcompat:queryHint")
- @Nullable
- public CharSequence getQueryHint() {
+ public @Nullable CharSequence getQueryHint() {
final CharSequence hint;
if (mQueryHint != null) {
hint = mQueryHint;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SwitchCompat.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SwitchCompat.java
index 661dfb2..b591814b 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SwitchCompat.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SwitchCompat.java
@@ -49,8 +49,6 @@
import android.widget.TextView;
import androidx.annotation.FloatRange;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.R;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.appcompat.text.AllCapsTransformationMethod;
@@ -60,6 +58,9 @@
import androidx.emoji2.text.EmojiCompat;
import androidx.resourceinspection.annotation.Attribute;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.lang.ref.Reference;
import java.lang.ref.WeakReference;
@@ -195,14 +196,11 @@
private ColorStateList mTextColors;
private Layout mOnLayout;
private Layout mOffLayout;
- @Nullable
- private TransformationMethod mSwitchTransformationMethod;
+ private @Nullable TransformationMethod mSwitchTransformationMethod;
ObjectAnimator mPositionAnimator;
private final AppCompatTextHelper mTextHelper;
- @NonNull
- private AppCompatEmojiTextHelper mAppCompatEmojiTextHelper;
- @Nullable
- private EmojiCompatInitCallback mEmojiCompatInitCallback;
+ private @NonNull AppCompatEmojiTextHelper mAppCompatEmojiTextHelper;
+ private @Nullable EmojiCompatInitCallback mEmojiCompatInitCallback;
@SuppressWarnings("hiding")
private final Rect mTempRect = new Rect();
@@ -582,8 +580,7 @@
* @see android.R.attr#trackTint
*/
@Attribute("androidx.appcompat:trackTint")
- @Nullable
- public ColorStateList getTrackTintList() {
+ public @Nullable ColorStateList getTrackTintList() {
return mTrackTintList;
}
@@ -598,7 +595,7 @@
* @see #getTrackTintMode()
* @see android.R.attr#trackTintMode
*/
- public void setTrackTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setTrackTintMode(PorterDuff.@Nullable Mode tintMode) {
mTrackTintMode = tintMode;
mHasTrackTintMode = true;
@@ -613,8 +610,7 @@
* @see android.R.attr#trackTintMode
*/
@Attribute("androidx.appcompat:trackTintMode")
- @Nullable
- public PorterDuff.Mode getTrackTintMode() {
+ public PorterDuff.@Nullable Mode getTrackTintMode() {
return mTrackTintMode;
}
@@ -710,8 +706,7 @@
* @see android.R.attr#thumbTint
*/
@Attribute("androidx.appcompat:thumbTint")
- @Nullable
- public ColorStateList getThumbTintList() {
+ public @Nullable ColorStateList getThumbTintList() {
return mThumbTintList;
}
@@ -727,7 +722,7 @@
* @see android.R.attr#thumbTintMode
* @see Drawable#setTintMode(PorterDuff.Mode)
*/
- public void setThumbTintMode(@Nullable PorterDuff.Mode tintMode) {
+ public void setThumbTintMode(PorterDuff.@Nullable Mode tintMode) {
mThumbTintMode = tintMode;
mHasThumbTintMode = true;
@@ -742,8 +737,7 @@
* @see android.R.attr#thumbTintMode
*/
@Attribute("androidx.appcompat:thumbTintMode")
- @Nullable
- public PorterDuff.Mode getThumbTintMode() {
+ public PorterDuff.@Nullable Mode getThumbTintMode() {
return mThumbTintMode;
}
@@ -868,8 +862,7 @@
}
}
- @Nullable
- private CharSequence doTransformForOnOffText(@Nullable CharSequence onOffText) {
+ private @Nullable CharSequence doTransformForOnOffText(@Nullable CharSequence onOffText) {
TransformationMethod transformationMethod =
getEmojiTextViewHelper().wrapTransformationMethod(mSwitchTransformationMethod);
return ((transformationMethod != null)
@@ -1542,14 +1535,13 @@
*/
@Override
public void setCustomSelectionActionModeCallback(
- @Nullable ActionMode.Callback actionModeCallback) {
+ ActionMode.@Nullable Callback actionModeCallback) {
super.setCustomSelectionActionModeCallback(
TextViewCompat.wrapCustomSelectionActionModeCallback(this, actionModeCallback));
}
@Override
- @Nullable
- public ActionMode.Callback getCustomSelectionActionModeCallback() {
+ public ActionMode.@Nullable Callback getCustomSelectionActionModeCallback() {
return TextViewCompat.unwrapCustomSelectionActionModeCallback(
super.getCustomSelectionActionModeCallback());
}
@@ -1597,15 +1589,14 @@
}
@Override
- public void setFilters(@SuppressWarnings("ArrayReturn") @NonNull InputFilter[] filters) {
+ public void setFilters(@SuppressWarnings("ArrayReturn") InputFilter @NonNull [] filters) {
super.setFilters(getEmojiTextViewHelper().getFilters(filters));
}
/**
* This may be called from super constructors.
*/
- @NonNull
- private AppCompatEmojiTextHelper getEmojiTextViewHelper() {
+ private @NonNull AppCompatEmojiTextHelper getEmojiTextViewHelper() {
//noinspection ConstantConditions
if (mAppCompatEmojiTextHelper == null) {
mAppCompatEmojiTextHelper = new AppCompatEmojiTextHelper(this);
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemeUtils.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemeUtils.java
index 1d955be..024172d 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemeUtils.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemeUtils.java
@@ -25,12 +25,13 @@
import android.util.TypedValue;
import android.view.View;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
import androidx.core.graphics.ColorUtils;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
*/
@RestrictTo(LIBRARY)
@@ -58,8 +59,8 @@
* @param disabledTextColor Disabled text color.
* @return Color state list.
*/
- @NonNull
- public static ColorStateList createDisabledStateList(int textColor, int disabledTextColor) {
+ public static @NonNull ColorStateList createDisabledStateList(int textColor,
+ int disabledTextColor) {
// Now create a new ColorStateList with the default color, and the new disabled
// color
final int[][] states = new int[2][];
@@ -103,8 +104,8 @@
* @param attr Theme attribute for resolving color state list.
* @return Resolved color state list.
*/
- @Nullable
- public static ColorStateList getThemeAttrColorStateList(@NonNull Context context, int attr) {
+ public static @Nullable ColorStateList getThemeAttrColorStateList(@NonNull Context context,
+ int attr) {
TEMP_ARRAY[0] = attr;
TintTypedArray a = TintTypedArray.obtainStyledAttributes(context, null, TEMP_ARRAY);
try {
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemedSpinnerAdapter.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemedSpinnerAdapter.java
index 77e9dae..0803510 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemedSpinnerAdapter.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemedSpinnerAdapter.java
@@ -25,10 +25,11 @@
import android.view.ViewGroup;
import android.widget.SpinnerAdapter;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.view.ContextThemeWrapper;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* An extension of SpinnerAdapter that is capable of inflating drop-down views
* against a different theme than normal views.
@@ -49,7 +50,7 @@
* {@code null} to use the default theme
* @see SpinnerAdapter#getDropDownView(int, View, ViewGroup)
*/
- void setDropDownViewTheme(@Nullable Resources.Theme theme);
+ void setDropDownViewTheme(Resources.@Nullable Theme theme);
/**
* Returns the value previously set by a call to
@@ -58,8 +59,7 @@
* @return the {@link Resources.Theme} against which drop-down views are
* inflated, or {@code null} if one has not been explicitly set
*/
- @Nullable
- Resources.Theme getDropDownViewTheme();
+ Resources.@Nullable Theme getDropDownViewTheme();
/**
* A helper class which allows easy integration of {@link ThemedSpinnerAdapter} into existing
@@ -120,7 +120,7 @@
* @param theme the theme passed in to
* {@link ThemedSpinnerAdapter#setDropDownViewTheme(Theme)}
*/
- public void setDropDownViewTheme(@Nullable Resources.Theme theme) {
+ public void setDropDownViewTheme(Resources.@Nullable Theme theme) {
if (theme == null) {
mDropDownInflater = null;
} else if (theme.equals(mContext.getTheme())) {
@@ -135,8 +135,7 @@
* Should be called from your adapter's {@link ThemedSpinnerAdapter#getDropDownViewTheme()},
* returning the value returned from this method.
*/
- @Nullable
- public Resources.Theme getDropDownViewTheme() {
+ public Resources.@Nullable Theme getDropDownViewTheme() {
return mDropDownInflater == null ? null : mDropDownInflater.getContext().getTheme();
}
@@ -147,8 +146,7 @@
* <p>The instance returned will have a correct theme, meaning that any inflated views
* will be created with the same theme.</p>
*/
- @NonNull
- public LayoutInflater getDropDownViewInflater() {
+ public @NonNull LayoutInflater getDropDownViewInflater() {
return mDropDownInflater != null ? mDropDownInflater : mInflater;
}
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TintTypedArray.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TintTypedArray.java
index a9db85c..6541871 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TintTypedArray.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TintTypedArray.java
@@ -28,13 +28,14 @@
import android.util.AttributeSet;
import android.util.TypedValue;
-import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.annotation.StyleableRes;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.content.res.ResourcesCompat;
+import org.jspecify.annotations.Nullable;
+
/**
* A class that wraps a {@link TypedArray} and provides the same public API
* surface. The purpose of this class is so that we can intercept calls to new APIs.
@@ -112,9 +113,8 @@
* @throws UnsupportedOperationException if the attribute is defined but is
* not a font resource.
*/
- @Nullable
- public Typeface getFont(@StyleableRes int index, int style,
- @Nullable ResourcesCompat.FontCallback fontCallback) {
+ public @Nullable Typeface getFont(@StyleableRes int index, int style,
+ ResourcesCompat.@Nullable FontCallback fontCallback) {
final int resourceId = mWrapped.getResourceId(index, 0);
if (resourceId == 0) {
return null;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/Toolbar.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/Toolbar.java
index 349f778..87b8d12 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/Toolbar.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/Toolbar.java
@@ -48,8 +48,6 @@
import androidx.annotation.DrawableRes;
import androidx.annotation.MainThread;
import androidx.annotation.MenuRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.annotation.StringRes;
@@ -75,6 +73,9 @@
import androidx.lifecycle.LifecycleOwner;
import androidx.resourceinspection.annotation.Attribute;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.util.ArrayList;
import java.util.List;
@@ -981,8 +982,7 @@
* {@link androidx.appcompat.R.attr#navigationContentDescription}
*/
@Attribute("androidx.appcompat:navigationContentDescription")
- @Nullable
- public CharSequence getNavigationContentDescription() {
+ public @Nullable CharSequence getNavigationContentDescription() {
return mNavButtonView != null ? mNavButtonView.getContentDescription() : null;
}
@@ -1075,8 +1075,7 @@
* {@link androidx.appcompat.R.attr#navigationIcon}
*/
@Attribute("androidx.appcompat:navigationIcon")
- @Nullable
- public Drawable getNavigationIcon() {
+ public @Nullable Drawable getNavigationIcon() {
return mNavButtonView != null ? mNavButtonView.getDrawable() : null;
}
@@ -1104,8 +1103,7 @@
* {@link androidx.appcompat.R.attr#collapseContentDescription}
*/
@Attribute("androidx.appcompat:collapseContentDescription")
- @Nullable
- public CharSequence getCollapseContentDescription() {
+ public @Nullable CharSequence getCollapseContentDescription() {
return mCollapseButtonView != null ? mCollapseButtonView.getContentDescription() : null;
}
@@ -1150,8 +1148,7 @@
* {@link androidx.appcompat.R.attr#collapseIcon}
*/
@Attribute("androidx.appcompat:collapseIcon")
- @Nullable
- public Drawable getCollapseIcon() {
+ public @Nullable Drawable getCollapseIcon() {
return mCollapseButtonView != null ? mCollapseButtonView.getDrawable() : null;
}
@@ -1218,8 +1215,7 @@
*
* @return The overflow icon drawable
*/
- @Nullable
- public Drawable getOverflowIcon() {
+ public @Nullable Drawable getOverflowIcon() {
ensureMenu();
return mMenuView.getOverflowIcon();
}
@@ -1604,8 +1600,7 @@
*
*/
@VisibleForTesting
- @Nullable
- View getNavButtonView() {
+ @Nullable View getNavButtonView() {
return mNavButtonView;
}
@@ -2414,16 +2409,14 @@
/**
*/
@VisibleForTesting
- @Nullable
- final TextView getTitleTextView() {
+ final @Nullable TextView getTitleTextView() {
return mTitleTextView;
}
/**
*/
@VisibleForTesting
- @Nullable
- final TextView getSubtitleTextView() {
+ final @Nullable TextView getSubtitleTextView() {
return mSubtitleTextView;
}
@@ -2475,7 +2468,7 @@
@MainThread
@SuppressLint("LambdaLast")
public void addMenuProvider(@NonNull MenuProvider provider, @NonNull LifecycleOwner owner,
- @NonNull Lifecycle.State state) {
+ Lifecycle.@NonNull State state) {
mMenuHostHelper.addMenuProvider(provider, owner, state);
}
@@ -2810,13 +2803,11 @@
dispatcher.unregisterOnBackInvokedCallback((OnBackInvokedCallback) callbackObj);
}
- @Nullable
- static OnBackInvokedDispatcher findOnBackInvokedDispatcher(@NonNull View view) {
+ static @Nullable OnBackInvokedDispatcher findOnBackInvokedDispatcher(@NonNull View view) {
return view.findOnBackInvokedDispatcher();
}
- @NonNull
- static OnBackInvokedCallback newOnBackInvokedCallback(@NonNull Runnable action) {
+ static @NonNull OnBackInvokedCallback newOnBackInvokedCallback(@NonNull Runnable action) {
return action::run;
}
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TooltipCompat.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TooltipCompat.java
index 3a84584..3f9cabe 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TooltipCompat.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TooltipCompat.java
@@ -19,10 +19,11 @@
import android.os.Build;
import android.view.View;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* Helper class used to emulate the behavior of {@link View#setTooltipText(CharSequence)} prior
* to API level 26.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TooltipPopup.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TooltipPopup.java
index fc05b4b..39c39d9 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TooltipPopup.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TooltipPopup.java
@@ -33,10 +33,11 @@
import android.view.WindowManager;
import android.widget.TextView;
-import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
+import org.jspecify.annotations.NonNull;
+
/**
* A popup window displaying a text message aligned to a specified view.
*
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ViewStubCompat.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ViewStubCompat.java
index 5691c63..290efdc 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ViewStubCompat.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ViewStubCompat.java
@@ -28,11 +28,12 @@
import android.view.ViewGroup;
import android.view.ViewParent;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appcompat.R;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.lang.ref.WeakReference;
/**
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ViewUtils.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ViewUtils.java
index 2369324..e678cab 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ViewUtils.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ViewUtils.java
@@ -28,10 +28,11 @@
import android.view.WindowInsets;
import androidx.annotation.ChecksSdkIntAtLeast;
-import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
+import org.jspecify.annotations.NonNull;
+
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/WithHint.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/WithHint.java
index b5d2c34..12a1a86 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/WithHint.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/WithHint.java
@@ -18,9 +18,10 @@
import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
-import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
+import org.jspecify.annotations.Nullable;
+
/**
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
@@ -30,6 +31,5 @@
*
* @return the hint, or null if there isn't one set, or the hint is not enabled.
*/
- @Nullable
- CharSequence getHint();
+ @Nullable CharSequence getHint();
}
diff --git a/appcompat/integration-tests/receive-content-testapp/build.gradle b/appcompat/integration-tests/receive-content-testapp/build.gradle
index 3bb6c17..342bb9f 100644
--- a/appcompat/integration-tests/receive-content-testapp/build.gradle
+++ b/appcompat/integration-tests/receive-content-testapp/build.gradle
@@ -25,6 +25,7 @@
}
dependencies {
+ api(libs.jspecify)
api("androidx.annotation:annotation:1.8.1")
implementation(project(":appcompat:appcompat"))
implementation(libs.constraintLayout)
diff --git a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/AttachmentsRecyclerViewAdapter.java b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/AttachmentsRecyclerViewAdapter.java
index fcbf576..cf0f536 100644
--- a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/AttachmentsRecyclerViewAdapter.java
+++ b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/AttachmentsRecyclerViewAdapter.java
@@ -20,10 +20,11 @@
import android.view.LayoutInflater;
import android.view.ViewGroup;
-import androidx.annotation.NonNull;
import androidx.appcompat.widget.AppCompatImageView;
import androidx.recyclerview.widget.RecyclerView;
+import org.jspecify.annotations.NonNull;
+
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -58,9 +59,8 @@
return mAttachments.size();
}
- @NonNull
@Override
- public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ public @NonNull MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
AppCompatImageView view = (AppCompatImageView) LayoutInflater.from(parent.getContext())
.inflate(R.layout.attachment, parent, false);
return new MyViewHolder(view);
diff --git a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/AttachmentsRepo.java b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/AttachmentsRepo.java
index 6c53dfe..02bcd00 100644
--- a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/AttachmentsRepo.java
+++ b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/AttachmentsRepo.java
@@ -22,12 +22,13 @@
import android.util.Log;
import android.webkit.MimeTypeMap;
-import androidx.annotation.NonNull;
import androidx.core.content.FileProvider;
import com.google.common.collect.ImmutableList;
import com.google.common.io.ByteStreams;
+import org.jspecify.annotations.NonNull;
+
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -57,8 +58,7 @@
* Reads the content at the given URI and writes it to private storage. Then returns a content
* URI referencing the newly written file.
*/
- @NonNull
- public Uri write(@NonNull Uri uri) {
+ public @NonNull Uri write(@NonNull Uri uri) {
ContentResolver contentResolver = mContext.getContentResolver();
String mimeType = contentResolver.getType(uri);
String ext = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType);
@@ -91,8 +91,7 @@
}
}
- @NonNull
- public ImmutableList<Uri> getAllUris() {
+ public @NonNull ImmutableList<Uri> getAllUris() {
File[] files = mAttachmentsDir.listFiles();
if (files == null || files.length == 0) {
return ImmutableList.of();
@@ -104,8 +103,7 @@
return uris.build();
}
- @NonNull
- private Uri getUriForFile(@NonNull File file) {
+ private @NonNull Uri getUriForFile(@NonNull File file) {
return FileProvider.getUriForFile(mContext, FILE_PROVIDER_AUTHORITY, file);
}
}
diff --git a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MainActivity.java b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MainActivity.java
index 408b409..975f5f5 100644
--- a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MainActivity.java
+++ b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MainActivity.java
@@ -23,8 +23,6 @@
import android.view.MenuInflater;
import android.view.MenuItem;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatEditText;
import androidx.appcompat.widget.LinearLayoutCompat;
@@ -37,6 +35,9 @@
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/** Main activity for the app. */
public class MainActivity extends AppCompatActivity {
private AttachmentsRepo mAttachmentsRepo;
diff --git a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MyExecutors.java b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MyExecutors.java
index ed0f5e9..e33bc57 100644
--- a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MyExecutors.java
+++ b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MyExecutors.java
@@ -20,11 +20,11 @@
import android.os.Looper;
import android.util.Log;
-import androidx.annotation.NonNull;
-
import com.google.common.util.concurrent.ListeningScheduledExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
+import org.jspecify.annotations.NonNull;
+
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
@@ -42,13 +42,11 @@
}
};
- @NonNull
- public static ListeningScheduledExecutorService bg() {
+ public static @NonNull ListeningScheduledExecutorService bg() {
return BG;
}
- @NonNull
- public static Executor main() {
+ public static @NonNull Executor main() {
return MAIN_EXECUTOR;
}
}
diff --git a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MyReceiver.java b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MyReceiver.java
index fdff5b0..3509eb8 100644
--- a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MyReceiver.java
+++ b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MyReceiver.java
@@ -27,8 +27,6 @@
import android.view.View;
import android.widget.Toast;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.core.view.ContentInfoCompat;
import androidx.core.view.OnReceiveContentListener;
@@ -36,6 +34,9 @@
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
@@ -56,9 +57,8 @@
mAttachmentsRecyclerViewAdapter = attachmentsRecyclerViewAdapter;
}
- @Nullable
@Override
- public ContentInfoCompat onReceiveContent(@NonNull View view,
+ public @Nullable ContentInfoCompat onReceiveContent(@NonNull View view,
@NonNull ContentInfoCompat payload) {
// Split the incoming content into two groups: content URIs and everything else.
// This way we can implement custom handling for URIs and delegate the rest.
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
index f3df03d..3d87ab6 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
@@ -11104,7 +11104,182 @@
@Test
@RequiresFlagsEnabled(Flags.FLAG_ENABLE_SCORABLE_PROPERTY)
public void testRankWithScorableProperty_joinWithChildQuery() throws Exception {
- // TODO(b/309826655): Implement this test once cl/696927163 is imported to AppSearch.
+ assumeTrue(mDb1.getFeatures().isFeatureSupported(
+ Features.SCHEMA_SCORABLE_PROPERTY_CONFIG));
+ assumeTrue(mDb1.getFeatures().isFeatureSupported(
+ Features.SEARCH_SPEC_ADVANCED_RANKING_EXPRESSION));
+ assumeTrue(mDb1.getFeatures()
+ .isFeatureSupported(Features.JOIN_SPEC_AND_QUALIFIED_ID));
+
+ AppSearchSchema personSchema = new AppSearchSchema.Builder("Person")
+ .addProperty(new StringPropertyConfig.Builder("name")
+ .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+ .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .build())
+ .addProperty(new DoublePropertyConfig.Builder("income")
+ .setCardinality(PropertyConfig.CARDINALITY_REPEATED)
+ .setScoringEnabled(true)
+ .build())
+ .addProperty(new BooleanPropertyConfig.Builder("isStarred")
+ .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+ .setScoringEnabled(true)
+ .build())
+ .build();
+ AppSearchSchema callLogSchema = new AppSearchSchema.Builder("CallLog")
+ .addProperty(new StringPropertyConfig.Builder("personQualifiedId")
+ .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+ .setJoinableValueType(StringPropertyConfig.JOINABLE_VALUE_TYPE_QUALIFIED_ID)
+ .build())
+ .addProperty(new DoublePropertyConfig.Builder("rfsScore")
+ .setCardinality(PropertyConfig.CARDINALITY_REPEATED)
+ .setScoringEnabled(true)
+ .build())
+ .build();
+ AppSearchSchema smsLogSchema = new AppSearchSchema.Builder("SmsLog")
+ .addProperty(new StringPropertyConfig.Builder("personQualifiedId")
+ .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+ .setJoinableValueType(StringPropertyConfig.JOINABLE_VALUE_TYPE_QUALIFIED_ID)
+ .build())
+ .addProperty(new DoublePropertyConfig.Builder("rfsScore")
+ .setCardinality(PropertyConfig.CARDINALITY_REPEATED)
+ .setScoringEnabled(true)
+ .build())
+ .build();
+ mDb1.setSchemaAsync(
+ new SetSchemaRequest.Builder()
+ .addSchemas(personSchema, callLogSchema, smsLogSchema).build()).get();
+
+ // John will have two CallLog docs to join and one sms log to join.
+ GenericDocument personJohn = new GenericDocument.Builder<>(
+ "namespace", "johnId", "Person")
+ .setPropertyString("name", "John")
+ .setPropertyBoolean("isStarred", true)
+ .setPropertyDouble("income", 30)
+ .setScore(10)
+ .build();
+ // Kevin will have two CallLog docs to join and one sms log to join.
+ GenericDocument personKevin = new GenericDocument.Builder<>(
+ "namespace", "kevinId", "Person")
+ .setPropertyString("name", "Kevin")
+ .setPropertyBoolean("isStarred", false)
+ .setPropertyDouble("income", 40)
+ .setScore(20)
+ .build();
+ // Tim has no CallLog or SmsLog to join.
+ GenericDocument personTim = new GenericDocument.Builder<>("namespace", "timId", "Person")
+ .setPropertyString("name", "Tim")
+ .setPropertyDouble("income", 60)
+ .setPropertyBoolean("isStarred", true)
+ .setScore(50)
+ .build();
+
+ GenericDocument johnCallLog1 =
+ new GenericDocument.Builder<>(
+ "namespace", "johnCallLog1", "CallLog")
+ .setScore(5)
+ .setPropertyDouble("rfsScore", 100, 200)
+ .setPropertyString("personQualifiedId",
+ DocumentIdUtil.createQualifiedId(mContext.getPackageName(),
+ DB_NAME_1, personJohn))
+ .build();
+ GenericDocument johnCallLog2 =
+ new GenericDocument.Builder<>(
+ "namespace", "johnCallLog2", "CallLog")
+ .setScore(5)
+ .setPropertyDouble("rfsScore", 300, 500)
+ .setPropertyString("personQualifiedId",
+ DocumentIdUtil.createQualifiedId(mContext.getPackageName(),
+ DB_NAME_1, personJohn))
+ .build();
+ GenericDocument kevinCallLog1 =
+ new GenericDocument.Builder<>(
+ "namespace", "kevinCallLog1", "CallLog")
+ .setScore(5)
+ .setPropertyDouble("rfsScore", 300, 400)
+ .setPropertyString("personQualifiedId",
+ DocumentIdUtil.createQualifiedId(mContext.getPackageName(),
+ DB_NAME_1, personKevin))
+ .build();
+ GenericDocument kevinCallLog2 =
+ new GenericDocument.Builder<>(
+ "namespace", "kevinCallLog2", "CallLog")
+ .setScore(5)
+ .setPropertyDouble("rfsScore", 500, 800)
+ .setPropertyString("personQualifiedId",
+ DocumentIdUtil.createQualifiedId(mContext.getPackageName(),
+ DB_NAME_1, personKevin))
+ .build();
+ GenericDocument johnSmsLog1 =
+ new GenericDocument.Builder<>(
+ "namespace", "johnSmsLog1", "SmsLog")
+ .setScore(5)
+ .setPropertyDouble("rfsScore", 1000, 2000)
+ .setPropertyString("personQualifiedId",
+ DocumentIdUtil.createQualifiedId(mContext.getPackageName(),
+ DB_NAME_1, personJohn))
+ .build();
+ GenericDocument kevinSmsLog1 =
+ new GenericDocument.Builder<>(
+ "namespace", "kevinSmsLog1", "SmsLog")
+ .setScore(5)
+ .setPropertyDouble("rfsScore", 2000, 3000)
+ .setPropertyString("personQualifiedId",
+ DocumentIdUtil.createQualifiedId(mContext.getPackageName(),
+ DB_NAME_1, personKevin))
+ .build();
+
+ // Put all documents to AppSearch and verify its success.
+ AppSearchBatchResult<String, Void> result =
+ checkIsBatchResultSuccess(
+ mDb1.putAsync(
+ new PutDocumentsRequest.Builder()
+ .addGenericDocuments(
+ personTim, personJohn, personKevin,
+ kevinCallLog1, kevinCallLog2, kevinSmsLog1,
+ johnCallLog1, johnCallLog2, johnSmsLog1)
+ .build()));
+ assertThat(result.getSuccesses().size()).isEqualTo(9);
+ assertThat(result.getFailures()).isEmpty();
+
+ String childRankingStrategy =
+ "sum(getScorableProperty(\"CallLog\", \"rfsScore\")) + " +
+ "sum(getScorableProperty(\"SmsLog\", \"rfsScore\"))";
+ double johnChildDocScore = 100 + 200 + 300 + 500 + 1000 + 2000;
+ double kevinChildDocScore = 300 + 400 + 500 + 800 + 2000 + 3000;
+ double timChildDocScore = 0;
+
+ SearchSpec childSearchSpec = new SearchSpec.Builder()
+ .setScorablePropertyRankingEnabled(true)
+ .setRankingStrategy(childRankingStrategy)
+ .build();
+ JoinSpec js = new JoinSpec.Builder("personQualifiedId")
+ .setNestedSearch("", childSearchSpec)
+ .build();
+ String parentRankingStrategy =
+ "sum(getScorableProperty(\"Person\", \"income\")) + " +
+ "20 * sum(getScorableProperty(\"Person\", \"isStarred\")) + " +
+ "sum(this.childrenRankingSignals())";
+ SearchSpec parentSearchSpec = new SearchSpec.Builder()
+ .setScorablePropertyRankingEnabled(true)
+ .setJoinSpec(js)
+ .setRankingStrategy(parentRankingStrategy)
+ .addFilterSchemas("Person")
+ .build();
+ double johnExpectScore = /*income=*/30 + 20 * /*isStarred=*/1 + johnChildDocScore;
+ double kevinExpectScore = /*income=*/40 + 20 * /*isStarred=*/0 + kevinChildDocScore;
+ double timExpectScore = /*income=*/60 + 20 * /*isStarred=*/1 + timChildDocScore;
+
+ SearchResults searchResults =
+ mDb1.search("", parentSearchSpec);
+ List<SearchResult> results = retrieveAllSearchResults(searchResults);
+ assertThat(results).hasSize(3);
+ assertThat(results.get(0).getRankingSignal())
+ .isWithin(0.00001).of(kevinExpectScore);
+ assertThat(results.get(1).getRankingSignal())
+ .isWithin(0.00001).of(johnExpectScore);
+ assertThat(results.get(2).getRankingSignal())
+ .isWithin(0.00001).of(timExpectScore);
}
@Test
diff --git a/asynclayoutinflater/asynclayoutinflater-appcompat/build.gradle b/asynclayoutinflater/asynclayoutinflater-appcompat/build.gradle
index 37f331f..a5515aa 100644
--- a/asynclayoutinflater/asynclayoutinflater-appcompat/build.gradle
+++ b/asynclayoutinflater/asynclayoutinflater-appcompat/build.gradle
@@ -13,6 +13,7 @@
}
dependencies {
+ api(libs.jspecify)
api("androidx.annotation:annotation:1.8.1")
api("androidx.core:core:1.1.0")
implementation(project(":appcompat:appcompat"))
diff --git a/asynclayoutinflater/asynclayoutinflater-appcompat/src/main/java/androidx/asynclayoutinflater/appcompat/AsyncAppCompatFactory.java b/asynclayoutinflater/asynclayoutinflater-appcompat/src/main/java/androidx/asynclayoutinflater/appcompat/AsyncAppCompatFactory.java
index 9455b93..405ce7e 100644
--- a/asynclayoutinflater/asynclayoutinflater-appcompat/src/main/java/androidx/asynclayoutinflater/appcompat/AsyncAppCompatFactory.java
+++ b/asynclayoutinflater/asynclayoutinflater-appcompat/src/main/java/androidx/asynclayoutinflater/appcompat/AsyncAppCompatFactory.java
@@ -21,13 +21,14 @@
import android.util.Log;
import android.view.View;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.R;
import androidx.appcompat.app.AppCompatViewInflater;
import androidx.appcompat.widget.VectorEnabledTintResources;
import androidx.asynclayoutinflater.view.AsyncLayoutFactory;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
/**
* Factory for inflating views in AppCompat activity. This is used when Async inflater is created
* with AppCompat context.
@@ -39,19 +40,17 @@
/**
* Creates view using {@link AppCompatViewInflater}.
*/
- @Nullable
@Override
- public View onCreateView(@Nullable View parent, @NonNull String name, @NonNull Context context,
- @NonNull AttributeSet attrs) {
+ public @Nullable View onCreateView(@Nullable View parent, @NonNull String name,
+ @NonNull Context context, @NonNull AttributeSet attrs) {
return createView(parent, name, context, attrs);
}
/**
* Creates view using {@link AppCompatViewInflater}.
*/
- @Nullable
@Override
- public View onCreateView(@NonNull String name, @NonNull Context context,
+ public @Nullable View onCreateView(@NonNull String name, @NonNull Context context,
@NonNull AttributeSet attrs) {
return createView(/* parent= */ null, name, context, attrs);
}
diff --git a/asynclayoutinflater/asynclayoutinflater/build.gradle b/asynclayoutinflater/asynclayoutinflater/build.gradle
index f0484b3..5c2b29d 100644
--- a/asynclayoutinflater/asynclayoutinflater/build.gradle
+++ b/asynclayoutinflater/asynclayoutinflater/build.gradle
@@ -13,6 +13,7 @@
}
dependencies {
+ api(libs.jspecify)
api("androidx.annotation:annotation:1.8.1")
api("androidx.core:core:1.1.0")
androidTestImplementation(project(":appcompat:appcompat"))
diff --git a/asynclayoutinflater/asynclayoutinflater/src/androidTest/java/androidx/asynclayoutinflater/view/FailingAsyncView.java b/asynclayoutinflater/asynclayoutinflater/src/androidTest/java/androidx/asynclayoutinflater/view/FailingAsyncView.java
index 8cb3279..35cffd1 100644
--- a/asynclayoutinflater/asynclayoutinflater/src/androidTest/java/androidx/asynclayoutinflater/view/FailingAsyncView.java
+++ b/asynclayoutinflater/asynclayoutinflater/src/androidTest/java/androidx/asynclayoutinflater/view/FailingAsyncView.java
@@ -19,6 +19,7 @@
import android.os.Looper;
import android.util.AttributeSet;
import android.widget.TextView;
+
/**
* A view that cannot be inflated on the bg thread because it creates a {@link Handler}.
*/
diff --git a/asynclayoutinflater/asynclayoutinflater/src/main/java/androidx/asynclayoutinflater/view/AsyncLayoutInflater.java b/asynclayoutinflater/asynclayoutinflater/src/main/java/androidx/asynclayoutinflater/view/AsyncLayoutInflater.java
index 8572b19..72281aa 100644
--- a/asynclayoutinflater/asynclayoutinflater/src/main/java/androidx/asynclayoutinflater/view/AsyncLayoutInflater.java
+++ b/asynclayoutinflater/asynclayoutinflater/src/main/java/androidx/asynclayoutinflater/view/AsyncLayoutInflater.java
@@ -27,11 +27,12 @@
import android.view.ViewGroup;
import androidx.annotation.LayoutRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.UiThread;
import androidx.core.util.Pools.SynchronizedPool;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executor;
diff --git a/benchmark/benchmark-common/build.gradle b/benchmark/benchmark-common/build.gradle
index a6af5e3..0718f57 100644
--- a/benchmark/benchmark-common/build.gradle
+++ b/benchmark/benchmark-common/build.gradle
@@ -75,6 +75,7 @@
}
dependencies {
+ api(libs.jspecify)
implementation(libs.kotlinStdlib)
api("androidx.annotation:annotation:1.8.1")
api("androidx.annotation:annotation-experimental:1.4.1")
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/simpleperf/ProfileSession.java b/benchmark/benchmark-common/src/main/java/androidx/benchmark/simpleperf/ProfileSession.java
index 2e33e53..11fe2f0 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/simpleperf/ProfileSession.java
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/simpleperf/ProfileSession.java
@@ -21,11 +21,12 @@
import android.system.Os;
import android.system.OsConstants;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
@@ -247,8 +248,7 @@
return file.canExecute();
}
- @Nullable
- private String findSimpleperfInTempDir() {
+ private @Nullable String findSimpleperfInTempDir() {
String path = "/data/local/tmp/simpleperf";
File file = new File(path);
if (!file.isFile()) {
@@ -408,8 +408,7 @@
}
}
- @NonNull
- private String readReply() {
+ private @NonNull String readReply() {
// Read one byte at a time to stop at line break or EOF. BufferedReader will try to read
// more than available and make us blocking, so don't use it.
String s = "";
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/simpleperf/RecordOptions.java b/benchmark/benchmark-common/src/main/java/androidx/benchmark/simpleperf/RecordOptions.java
index 4a23dba..e538e454f 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/simpleperf/RecordOptions.java
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/simpleperf/RecordOptions.java
@@ -18,11 +18,12 @@
import android.system.Os;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
@@ -59,8 +60,7 @@
* Set output filename. Default is perf-<month>-<day>-<hour>-<minute>-<second>.data.
* The file will be generated under simpleperf_data/.
*/
- @NonNull
- public RecordOptions setOutputFilename(@NonNull String filename) {
+ public @NonNull RecordOptions setOutputFilename(@NonNull String filename) {
mOutputFilename = filename;
return this;
}
@@ -68,8 +68,7 @@
/**
* Set event to record. Default is cpu-cycles. See `simpleperf list` for all available events.
*/
- @NonNull
- public RecordOptions setEvent(@NonNull String event) {
+ public @NonNull RecordOptions setEvent(@NonNull String event) {
mEvent = event;
return this;
}
@@ -77,8 +76,7 @@
/**
* Set how many samples to generate each second running. Default is 4000.
*/
- @NonNull
- public RecordOptions setSampleFrequency(int freq) {
+ public @NonNull RecordOptions setSampleFrequency(int freq) {
mFreq = freq;
return this;
}
@@ -87,8 +85,7 @@
* Set record duration. The record stops after `durationInSecond` seconds. By default,
* record stops only when stopRecording() is called.
*/
- @NonNull
- public RecordOptions setDuration(double durationInSecond) {
+ public @NonNull RecordOptions setDuration(double durationInSecond) {
mDurationInSeconds = durationInSecond;
return this;
}
@@ -96,8 +93,7 @@
/**
* Record some threads in the app process. By default, record all threads in the process.
*/
- @NonNull
- public RecordOptions setSampleThreads(@NonNull List<Integer> threads) {
+ public @NonNull RecordOptions setSampleThreads(@NonNull List<Integer> threads) {
mThreads.addAll(threads);
return this;
}
@@ -105,15 +101,13 @@
/**
* Record current thread in the app process. By default, record all threads in the process.
*/
- @NonNull
- public RecordOptions setSampleCurrentThread() {
+ public @NonNull RecordOptions setSampleCurrentThread() {
return setSampleThreads(Collections.singletonList(Os.gettid()));
}
/**
* Record dwarf based call graph. It is needed to get Java callstacks.
*/
- @NonNull
- public RecordOptions recordDwarfCallGraph() {
+ public @NonNull RecordOptions recordDwarfCallGraph() {
mDwarfCallGraph = true;
mFpCallGraph = false;
return this;
@@ -123,8 +117,7 @@
* Record frame pointer based call graph. It is suitable to get C++ callstacks on 64bit devices.
*/
@SuppressWarnings("unused")
- @NonNull
- public RecordOptions recordFramePointerCallGraph() {
+ public @NonNull RecordOptions recordFramePointerCallGraph() {
mFpCallGraph = true;
mDwarfCallGraph = false;
return this;
@@ -133,8 +126,7 @@
/**
* Trace context switch info to show where threads spend time off cpu.
*/
- @NonNull
- public RecordOptions traceOffCpu() {
+ public @NonNull RecordOptions traceOffCpu() {
mTraceOffCpu = true;
return this;
}
@@ -142,8 +134,7 @@
/**
* Translate record options into arguments for `simpleperf record` cmd.
*/
- @NonNull
- public List<String> toRecordArgs() {
+ public @NonNull List<String> toRecordArgs() {
ArrayList<String> args = new ArrayList<>();
String filename = mOutputFilename;
@@ -192,18 +183,15 @@
return time.format(formatter);
}
- @Nullable
- private String mOutputFilename;
+ private @Nullable String mOutputFilename;
- @NonNull
- private String mEvent = "cpu-cycles";
+ private @NonNull String mEvent = "cpu-cycles";
private int mFreq = 4000;
private double mDurationInSeconds = 0.0;
- @NonNull
- private final ArrayList<Integer> mThreads = new ArrayList<>();
+ private final @NonNull ArrayList<Integer> mThreads = new ArrayList<>();
private boolean mDwarfCallGraph = false;
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/ByteBufferUtil.java b/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/ByteBufferUtil.java
index f968b6f..672a9dc 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/ByteBufferUtil.java
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/ByteBufferUtil.java
@@ -15,7 +15,7 @@
*/
package androidx.benchmark.vmtrace;
-import androidx.annotation.NonNull;
+import org.jspecify.annotations.NonNull;
import java.io.File;
import java.io.FileInputStream;
@@ -30,8 +30,8 @@
private ByteBufferUtil() {
}
- @NonNull
- public static ByteBuffer mapFile(@NonNull File f, long offset, @NonNull ByteOrder byteOrder)
+ public static @NonNull ByteBuffer mapFile(@NonNull File f, long offset,
+ @NonNull ByteOrder byteOrder)
throws IOException {
FileInputStream dataFile = new FileInputStream(f);
try {
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/MethodInfo.java b/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/MethodInfo.java
index edd3552..ba51ac8 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/MethodInfo.java
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/MethodInfo.java
@@ -16,7 +16,7 @@
package androidx.benchmark.vmtrace;
-import androidx.annotation.NonNull;
+import org.jspecify.annotations.NonNull;
import java.util.Locale;
@@ -46,24 +46,21 @@
this.srcLineNumber = srcLineNumber;
}
- @NonNull
- public String getFullName() {
+ public @NonNull String getFullName() {
if (mFullName == null) {
mFullName = String.format(Locale.US, "%s.%s: %s", className, methodName, signature);
}
return mFullName;
}
- @NonNull
- public String getShortName() {
+ public @NonNull String getShortName() {
if (mShortName == null) {
mShortName = String.format(Locale.US, "%s.%s", getUnqualifiedClassName(), methodName);
}
return mShortName;
}
- @NonNull
- private String getUnqualifiedClassName() {
+ private @NonNull String getUnqualifiedClassName() {
String cn = className;
int i = cn.lastIndexOf('/');
if (i > 0) {
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/VmTraceHandler.java b/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/VmTraceHandler.java
index 55ebfa4..fdd35f8 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/VmTraceHandler.java
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/VmTraceHandler.java
@@ -15,7 +15,7 @@
*/
package androidx.benchmark.vmtrace;
-import androidx.annotation.NonNull;
+import org.jspecify.annotations.NonNull;
/**
* This interface used by {@link VmTraceParser}. {@link VmTraceParser} parses a trace file and
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/VmTraceParser.java b/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/VmTraceParser.java
index f7c8a0b..3a7df15 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/VmTraceParser.java
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/VmTraceParser.java
@@ -16,7 +16,7 @@
package androidx.benchmark.vmtrace;
-import androidx.annotation.NonNull;
+import org.jspecify.annotations.NonNull;
import java.io.BufferedReader;
import java.io.File;
diff --git a/benchmark/benchmark-macro/build.gradle b/benchmark/benchmark-macro/build.gradle
index 3b9fbf5..cb5aa1c 100644
--- a/benchmark/benchmark-macro/build.gradle
+++ b/benchmark/benchmark-macro/build.gradle
@@ -68,6 +68,7 @@
}
dependencies {
+ api(libs.jspecify)
api(project(":benchmark:benchmark-common"))
api(libs.junit)
api(libs.kotlinStdlib)
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/JankCollectionHelper.java b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/JankCollectionHelper.java
index fff2766..b75342a 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/JankCollectionHelper.java
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/JankCollectionHelper.java
@@ -19,12 +19,13 @@
import android.text.TextUtils;
import android.util.Log;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.uiautomator.UiDevice;
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
@@ -170,8 +171,7 @@
mMetricId = metricId;
}
- @Nullable
- public Double parse(@NonNull String lines) {
+ public @Nullable Double parse(@NonNull String lines) {
Matcher matcher = mPattern.matcher(lines);
if (matcher.matches()) {
return Double.valueOf(matcher.group(mGroupIndex));
@@ -180,8 +180,7 @@
}
}
- @NonNull
- public String getMetricId() {
+ public @NonNull String getMetricId() {
return mMetricId;
}
}
@@ -221,8 +220,7 @@
}
/** Collect the {@code gfxinfo} metrics for tracked processes (or all, if unspecified). */
- @NonNull
- public Map<String, Double> getMetrics() {
+ public @NonNull Map<String, Double> getMetrics() {
Map<String, Double> result = new HashMap<>();
if (mTrackedPackages.isEmpty()) {
result.putAll(getGfxInfoMetrics());
@@ -258,7 +256,7 @@
}
/** Add a package or list of packages to be tracked. */
- public void addTrackedPackages(@NonNull String... packages) {
+ public void addTrackedPackages(String @NonNull ... packages) {
Collections.addAll(mTrackedPackages, packages);
}
@@ -348,7 +346,7 @@
return results;
}
- private String constructKey(@NonNull String ...tokens) {
+ private String constructKey(String @NonNull ...tokens) {
return TextUtils.join("_", tokens);
}
@@ -371,9 +369,8 @@
}
/** Returns the {@link UiDevice} under test. */
- @NonNull
@VisibleForTesting
- protected UiDevice getDevice() {
+ protected @NonNull UiDevice getDevice() {
if (mDevice == null) {
mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
}
diff --git a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/internal/BasicEdgeToEdgeDialog.android.kt b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/internal/BasicEdgeToEdgeDialog.android.kt
index c3ce4cc..fd710df 100644
--- a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/internal/BasicEdgeToEdgeDialog.android.kt
+++ b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/internal/BasicEdgeToEdgeDialog.android.kt
@@ -25,18 +25,14 @@
import android.view.ViewOutlineProvider
import android.view.Window
import android.view.WindowManager
-import androidx.activity.BackEventCompat
import androidx.activity.ComponentDialog
-import androidx.activity.compose.PredictiveBackHandler
import androidx.compose.foundation.layout.Box
-import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.isFlagSecureEnabled
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionContext
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.SideEffect
import androidx.compose.runtime.getValue
-import androidx.compose.runtime.key
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCompositionContext
@@ -45,7 +41,6 @@
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.R
-import androidx.compose.ui.graphics.luminance
import androidx.compose.ui.platform.AbstractComposeView
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalLayoutDirection
@@ -67,7 +62,6 @@
import androidx.savedstate.findViewTreeSavedStateRegistryOwner
import androidx.savedstate.setViewTreeSavedStateRegistryOwner
import java.util.UUID
-import kotlin.coroutines.cancellation.CancellationException
/**
* A dialog that is _always_ full screen and edge-to-edge. This is intended to be the underlying
@@ -86,12 +80,12 @@
* if [DialogProperties.dismissOnBackPress] is true.
*/
@Composable
-internal fun BasicEdgeToEdgeDialog(
+internal actual fun BasicEdgeToEdgeDialog(
onDismissRequest: () -> Unit,
- modifier: Modifier = Modifier,
- properties: DialogProperties = DialogProperties(),
- lightStatusBars: Boolean = LocalContentColor.current.luminance() < 0.5f,
- lightNavigationBars: Boolean = LocalContentColor.current.luminance() < 0.5f,
+ modifier: Modifier,
+ properties: DialogProperties,
+ lightStatusBars: Boolean,
+ lightNavigationBars: Boolean,
content: @Composable (PredictiveBackState) -> Unit,
) {
val view = LocalView.current
@@ -326,87 +320,6 @@
}
}
-internal enum class SwipeEdge {
- Left,
- Right
-}
-
-/**
- * The state describing a one-shot back state, with use in a [PredictiveBackStateHandler].
- *
- * Because the back handler can only be used once, there are three states that [BackEventProgress]
- * can be in:
- * - [NotRunning]
- * - [InProgress], which can happen on API 34 and above if a predictive back is in progress.
- * - [Completed]
- */
-internal sealed interface BackEventProgress {
- /** There is no predictive back ongoing, and the back has not been completed. */
- object NotRunning : BackEventProgress
-
- /** There is an ongoing predictive back animation, with the given [progress]. */
- data class InProgress(
- val touchX: Float,
- val touchY: Float,
- val progress: Float,
- val swipeEdge: SwipeEdge,
- ) : BackEventProgress
-
- /** The back has completed. */
- object Completed : BackEventProgress
-}
-
-@Composable
-internal fun rememberPredictiveBackState(): PredictiveBackState = remember {
- PredictiveBackStateImpl()
-}
-
-internal sealed interface PredictiveBackState {
- val value: BackEventProgress
-}
-
-private class PredictiveBackStateImpl : PredictiveBackState {
- override var value: BackEventProgress by mutableStateOf(BackEventProgress.NotRunning)
-}
-
-@Composable
-internal fun PredictiveBackStateHandler(
- state: PredictiveBackState,
- enabled: Boolean = true,
- onBack: () -> Unit,
-) {
- // Safely update the current `onBack` lambda when a new one is provided
- val currentOnBack by rememberUpdatedState(onBack)
-
- key(state) {
- state as PredictiveBackStateImpl
- PredictiveBackHandler(
- enabled = enabled && state.value !is BackEventProgress.Completed,
- ) { progress ->
- try {
- progress.collect { backEvent ->
- state.value =
- BackEventProgress.InProgress(
- backEvent.touchX,
- backEvent.touchY,
- backEvent.progress,
- when (backEvent.swipeEdge) {
- BackEventCompat.EDGE_LEFT -> SwipeEdge.Left
- BackEventCompat.EDGE_RIGHT -> SwipeEdge.Right
- else -> error("Unknown swipe edge")
- },
- )
- }
- state.value = BackEventProgress.Completed
- currentOnBack()
- } catch (e: CancellationException) {
- state.value = BackEventProgress.NotRunning
- throw e
- }
- }
- }
-}
-
// Taken from AndroidPopup.android.kt
internal fun SecureFlagPolicy.shouldApplySecureFlag(isSecureFlagSetOnParent: Boolean): Boolean {
return when (this) {
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/internal/BasicEdgeToEdgeDialog.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/internal/BasicEdgeToEdgeDialog.kt
new file mode 100644
index 0000000..30f461f
--- /dev/null
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/internal/BasicEdgeToEdgeDialog.kt
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.material3.internal
+
+import androidx.compose.material3.LocalContentColor
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.key
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberUpdatedState
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.luminance
+import androidx.compose.ui.window.DialogProperties
+import kotlinx.coroutines.CancellationException
+
+@Composable
+internal expect fun BasicEdgeToEdgeDialog(
+ onDismissRequest: () -> Unit,
+ modifier: Modifier = Modifier,
+ properties: DialogProperties = DialogProperties(),
+ lightStatusBars: Boolean = LocalContentColor.current.luminance() < 0.5f,
+ lightNavigationBars: Boolean = LocalContentColor.current.luminance() < 0.5f,
+ content: @Composable (PredictiveBackState) -> Unit,
+)
+
+internal sealed interface PredictiveBackState {
+ val value: BackEventProgress
+}
+
+/**
+ * The state describing a one-shot back state, with use in a [PredictiveBackStateHandler].
+ *
+ * Because the back handler can only be used once, there are three states that [BackEventProgress]
+ * can be in:
+ * - [NotRunning]
+ * - [InProgress], which can happen on API 34 and above if a predictive back is in progress.
+ * - [Completed]
+ */
+internal sealed interface BackEventProgress {
+ /** There is no predictive back ongoing, and the back has not been completed. */
+ object NotRunning : BackEventProgress
+
+ /** There is an ongoing predictive back animation, with the given [progress]. */
+ data class InProgress(
+ val touchX: Float,
+ val touchY: Float,
+ val progress: Float,
+ val swipeEdge: SwipeEdge,
+ ) : BackEventProgress
+
+ /** The back has completed. */
+ object Completed : BackEventProgress
+}
+
+internal enum class SwipeEdge {
+ Left,
+ Right
+}
+
+@Composable
+internal fun rememberPredictiveBackState(): PredictiveBackState = remember {
+ PredictiveBackStateImpl()
+}
+
+private class PredictiveBackStateImpl : PredictiveBackState {
+ override var value: BackEventProgress by mutableStateOf(BackEventProgress.NotRunning)
+}
+
+@Composable
+internal fun PredictiveBackStateHandler(
+ state: PredictiveBackState,
+ enabled: Boolean = true,
+ onBack: () -> Unit,
+) {
+ // Safely update the current `onBack` lambda when a new one is provided
+ val currentOnBack by rememberUpdatedState(onBack)
+
+ key(state) {
+ state as PredictiveBackStateImpl
+ PredictiveBackHandler(
+ enabled = enabled && state.value !is BackEventProgress.Completed,
+ ) { progress ->
+ try {
+ progress.collect { backEvent ->
+ state.value =
+ BackEventProgress.InProgress(
+ backEvent.touchX,
+ backEvent.touchY,
+ backEvent.progress,
+ when (backEvent.swipeEdge) {
+ BackEventCompat.EDGE_LEFT -> SwipeEdge.Left
+ BackEventCompat.EDGE_RIGHT -> SwipeEdge.Right
+ else -> error("Unknown swipe edge")
+ },
+ )
+ }
+ state.value = BackEventProgress.Completed
+ currentOnBack()
+ } catch (e: CancellationException) {
+ state.value = BackEventProgress.NotRunning
+ throw e
+ }
+ }
+ }
+}
diff --git a/compose/material3/material3/src/commonStubsMain/kotlin/androidx/compose/material3/internal/BasicEdgeToEdgeDialog.commonStubs.kt b/compose/material3/material3/src/commonStubsMain/kotlin/androidx/compose/material3/internal/BasicEdgeToEdgeDialog.commonStubs.kt
new file mode 100644
index 0000000..b50e87e
--- /dev/null
+++ b/compose/material3/material3/src/commonStubsMain/kotlin/androidx/compose/material3/internal/BasicEdgeToEdgeDialog.commonStubs.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.material3.internal
+
+import androidx.compose.material3.implementedInJetBrainsFork
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.window.DialogProperties
+
+@Composable
+internal actual fun BasicEdgeToEdgeDialog(
+ onDismissRequest: () -> Unit,
+ modifier: Modifier,
+ properties: DialogProperties,
+ lightStatusBars: Boolean,
+ lightNavigationBars: Boolean,
+ content: @Composable (PredictiveBackState) -> Unit,
+): Unit = implementedInJetBrainsFork()
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/MovableContent.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/MovableContent.kt
index f142586..8dda6de 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/MovableContent.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/MovableContent.kt
@@ -34,8 +34,8 @@
*/
@OptIn(InternalComposeApi::class)
fun movableContentOf(content: @Composable () -> Unit): @Composable () -> Unit {
- val movableContent = MovableContent<Unit>({ content() })
- return { currentComposer.insertMovableContent(movableContent, Unit) }
+ val movableContent = MovableContent<Nothing?>({ content() })
+ return { currentComposer.insertMovableContent(movableContent, null) }
}
/**
@@ -103,10 +103,10 @@
content: @Composable (P1, P2, P3) -> Unit
): @Composable (P1, P2, P3) -> Unit {
val movableContent =
- MovableContent<Pair<Pair<P1, P2>, P3>> {
- content(it.first.first, it.first.second, it.second)
- }
- return { p1, p2, p3 -> currentComposer.insertMovableContent(movableContent, (p1 to p2) to p3) }
+ MovableContent<Triple<P1, P2, P3>> { content(it.first, it.second, it.third) }
+ return { p1, p2, p3 ->
+ currentComposer.insertMovableContent(movableContent, Triple(p1, p2, p3))
+ }
}
/**
@@ -130,11 +130,12 @@
content: @Composable (P1, P2, P3, P4) -> Unit
): @Composable (P1, P2, P3, P4) -> Unit {
val movableContent =
- MovableContent<Pair<Pair<P1, P2>, Pair<P3, P4>>> {
- content(it.first.first, it.first.second, it.second.first, it.second.second)
+ MovableContent<Array<Any?>> { (p1, p2, p3, p4) ->
+ @Suppress("UNCHECKED_CAST") // Types are guaranteed below.
+ content(p1 as P1, p2 as P2, p3 as P3, p4 as P4)
}
return { p1, p2, p3, p4 ->
- currentComposer.insertMovableContent(movableContent, (p1 to p2) to (p3 to p4))
+ currentComposer.insertMovableContent(movableContent, arrayOf(p1, p2, p3, p4))
}
}
@@ -204,9 +205,8 @@
fun <R, P1, P2> movableContentWithReceiverOf(
content: @Composable R.(P1, P2) -> Unit
): @Composable R.(P1, P2) -> Unit {
- val movableContent =
- MovableContent<Pair<Pair<R, P1>, P2>> { it.first.first.content(it.first.second, it.second) }
- return { p1, p2 -> currentComposer.insertMovableContent(movableContent, (this to p1) to p2) }
+ val movableContent = MovableContent<Triple<R, P1, P2>> { it.first.content(it.second, it.third) }
+ return { p1, p2 -> currentComposer.insertMovableContent(movableContent, Triple(this, p1, p2)) }
}
/**
@@ -230,11 +230,12 @@
content: @Composable R.(P1, P2, P3) -> Unit
): @Composable R.(P1, P2, P3) -> Unit {
val movableContent =
- MovableContent<Pair<Pair<R, P1>, Pair<P2, P3>>> {
- it.first.first.content(it.first.second, it.second.first, it.second.second)
+ MovableContent<Array<Any?>> { (r, p1, p2, p3) ->
+ @Suppress("UNCHECKED_CAST") // Types are guaranteed below.
+ (r as R).content(p1 as P1, p2 as P2, p3 as P3)
}
return { p1, p2, p3 ->
- currentComposer.insertMovableContent(movableContent, (this to p1) to (p2 to p3))
+ currentComposer.insertMovableContent(movableContent, arrayOf(this, p1, p2, p3))
}
}
diff --git a/libraryversions.toml b/libraryversions.toml
index 8575a9c..e0fec0e 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -44,7 +44,7 @@
CORE_ROLE = "1.2.0-alpha01"
CORE_SPLASHSCREEN = "1.2.0-alpha02"
CORE_TELECOM = "1.0.0-alpha4"
-CORE_UWB = "1.0.0-alpha09"
+CORE_UWB = "1.0.0-alpha10"
CORE_VIEWTREE = "1.0.0-alpha01"
CREDENTIALS = "1.5.0-beta01"
CREDENTIALS_E2EE_QUARANTINE = "1.0.0-alpha02"
diff --git a/privacysandbox/ui/integration-tests/mediateesdkprovider/build.gradle b/privacysandbox/ui/integration-tests/mediateesdkprovider/build.gradle
index 2073543..549a7ee 100644
--- a/privacysandbox/ui/integration-tests/mediateesdkprovider/build.gradle
+++ b/privacysandbox/ui/integration-tests/mediateesdkprovider/build.gradle
@@ -16,18 +16,13 @@
plugins {
id("AndroidXPlugin")
- id("com.android.application")
+ id("com.android.library")
id("org.jetbrains.kotlin.android")
}
android {
namespace "androidx.privacysandbox.ui.integration.mediateesdkprovider"
-
- defaultConfig {
- applicationId "androidx.privacysandbox.ui.integration.mediateesdkprovider"
- minSdk 33
- compileSdk 35
- }
+ compileSdk 35
buildTypes {
release {
@@ -39,9 +34,9 @@
dependencies {
api(libs.kotlinStdlib)
api("androidx.annotation:annotation:1.8.1")
+ implementation project(':privacysandbox:sdkruntime:sdkruntime-provider')
implementation project(':privacysandbox:ui:integration-tests:testaidl')
implementation project(':privacysandbox:ui:ui-core')
implementation project(':privacysandbox:ui:ui-provider')
- implementation project(':privacysandbox:sdkruntime:sdkruntime-client')
implementation project(':privacysandbox:ui:integration-tests:sdkproviderutils')
}
diff --git a/privacysandbox/ui/integration-tests/mediateesdkprovider/src/main/AndroidManifest.xml b/privacysandbox/ui/integration-tests/mediateesdkprovider/src/main/AndroidManifest.xml
deleted file mode 100644
index b9e9b43..0000000
--- a/privacysandbox/ui/integration-tests/mediateesdkprovider/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright 2024 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android">
-
- <application
- android:allowBackup="true">
- <sdk-library android:name="androidx.privacysandbox.ui.integration.mediateesdkprovider"
- android:versionMajor="1" />
- <property android:name="android.sdksandbox.PROPERTY_SDK_PROVIDER_CLASS_NAME"
- android:value="androidx.privacysandbox.ui.integration.mediateesdkprovider.SdkProviderImpl" />
- </application>
-
-</manifest>
diff --git a/privacysandbox/ui/integration-tests/mediateesdkprovider/src/main/java/androidx/privacysandbox/ui/integration/mediateesdkprovider/SdkProviderImpl.kt b/privacysandbox/ui/integration-tests/mediateesdkprovider/src/main/java/androidx/privacysandbox/ui/integration/mediateesdkprovider/SdkProviderImpl.kt
index 7d6c6ba8..d5f70e7 100644
--- a/privacysandbox/ui/integration-tests/mediateesdkprovider/src/main/java/androidx/privacysandbox/ui/integration/mediateesdkprovider/SdkProviderImpl.kt
+++ b/privacysandbox/ui/integration-tests/mediateesdkprovider/src/main/java/androidx/privacysandbox/ui/integration/mediateesdkprovider/SdkProviderImpl.kt
@@ -16,25 +16,19 @@
package androidx.privacysandbox.ui.integration.mediateesdkprovider
-import android.annotation.SuppressLint
-import android.app.sdksandbox.SandboxedSdk
-import android.app.sdksandbox.SandboxedSdkProvider
import android.content.Context
import android.os.Bundle
-import android.os.ext.SdkExtensions
import android.view.View
-import androidx.annotation.RequiresExtension
+import androidx.privacysandbox.sdkruntime.core.SandboxedSdkCompat
+import androidx.privacysandbox.sdkruntime.core.SandboxedSdkProviderCompat
import androidx.privacysandbox.ui.integration.sdkproviderutils.MediateeSdkApiImpl
-// TODO(b/257429573): Remove this line once fixed.
-@SuppressLint("ClassVerificationFailure")
-@RequiresExtension(extension = SdkExtensions.AD_SERVICES, version = 5)
-class SdkProviderImpl : SandboxedSdkProvider() {
- override fun onLoadSdk(p0: Bundle): SandboxedSdk {
- return SandboxedSdk(MediateeSdkApiImpl(context!!))
+class SdkProviderImpl : SandboxedSdkProviderCompat() {
+ override fun onLoadSdk(params: Bundle): SandboxedSdkCompat {
+ return SandboxedSdkCompat(MediateeSdkApiImpl(context!!))
}
- override fun getView(p0: Context, p1: Bundle, p2: Int, p3: Int): View {
+ override fun getView(windowContext: Context, params: Bundle, width: Int, height: Int): View {
throw IllegalStateException("This getView method will not be used.")
}
}
diff --git a/privacysandbox/ui/integration-tests/mediateesdkproviderwrapper/build.gradle b/privacysandbox/ui/integration-tests/mediateesdkproviderwrapper/build.gradle
new file mode 100644
index 0000000..b08d73b
--- /dev/null
+++ b/privacysandbox/ui/integration-tests/mediateesdkproviderwrapper/build.gradle
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import androidx.build.AndroidXConfig
+
+plugins {
+ id("AndroidXPlugin")
+ id("com.android.privacy-sandbox-sdk")
+}
+
+android {
+ namespace "androidx.privacysandbox.ui.integration.mediateesdkproviderwrapper"
+ compileSdk 35
+ minSdk 21
+ buildToolsVersion AndroidXConfig.getDefaultAndroidConfig(project).buildToolsVersion
+
+ bundle {
+ packageName = "androidx.privacysandbox.ui.integration.mediateesdkproviderwrapper"
+
+ // This is the entry point class to our SDK in the SDK Runtime. It enables backward
+ // compatibility support.
+ sdkProviderClassName = "androidx.privacysandbox.sdkruntime.provider.SandboxedSdkProviderAdapter"
+
+ // This is the class path of our implementation of the SandboxedSdkProviderCompat class.
+ compatSdkProviderClassName = "androidx.privacysandbox.ui.integration.mediateesdkprovider.SdkProviderImpl"
+
+ setVersion(1, 0, 0)
+ }
+}
+
+dependencies {
+ include(project(":privacysandbox:ui:integration-tests:mediateesdkprovider"))
+}
diff --git a/privacysandbox/ui/integration-tests/testapp/build.gradle b/privacysandbox/ui/integration-tests/testapp/build.gradle
index 8ea67e8..002e7c0 100644
--- a/privacysandbox/ui/integration-tests/testapp/build.gradle
+++ b/privacysandbox/ui/integration-tests/testapp/build.gradle
@@ -26,7 +26,6 @@
defaultConfig {
applicationId "androidx.privacysandbox.ui.integration.testapp"
- minSdk 33
}
buildTypes {
@@ -34,22 +33,28 @@
minifyEnabled false
}
}
+
+ privacySandbox {
+ enable = true
+ }
}
dependencies {
implementation(libs.kotlinStdlib)
api("androidx.annotation:annotation:1.8.1")
- implementation 'androidx.core:core-ktx:1.8.0'
- implementation 'androidx.appcompat:appcompat:1.6.0'
- implementation 'com.google.android.material:material:1.6.0'
- implementation "androidx.activity:activity-ktx:1.7.2"
- implementation "androidx.drawerlayout:drawerlayout:1.2.0"
- implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
- implementation 'androidx.recyclerview:recyclerview:1.3.2'
- implementation project(':privacysandbox:sdkruntime:sdkruntime-client')
- implementation project(':privacysandbox:ui:integration-tests:testaidl')
- implementation project(':privacysandbox:ui:integration-tests:sdkproviderutils')
- implementation project(':privacysandbox:ui:ui-core')
- implementation project(':privacysandbox:ui:ui-client')
- implementation project(':privacysandbox:ui:ui-provider')
+ implementation("androidx.core:core-ktx:1.8.0")
+ implementation("androidx.appcompat:appcompat:1.6.0")
+ implementation("com.google.android.material:material:1.6.0")
+ implementation("androidx.activity:activity-ktx:1.7.2")
+ implementation("androidx.drawerlayout:drawerlayout:1.2.0")
+ implementation("androidx.constraintlayout:constraintlayout:2.0.1")
+ implementation("androidx.recyclerview:recyclerview:1.3.2")
+ implementation(project(":privacysandbox:sdkruntime:sdkruntime-client"))
+ implementation(project(":privacysandbox:ui:integration-tests:testaidl"))
+ implementation(project(":privacysandbox:ui:integration-tests:sdkproviderutils"))
+ implementation(project(":privacysandbox:ui:integration-tests:testsdkproviderwrapper"))
+ implementation(project(":privacysandbox:ui:integration-tests:mediateesdkproviderwrapper"))
+ implementation(project(":privacysandbox:ui:ui-core"))
+ implementation(project(":privacysandbox:ui:ui-client"))
+ implementation(project(":privacysandbox:ui:ui-provider"))
}
diff --git a/privacysandbox/ui/integration-tests/testapp/src/main/AndroidManifest.xml b/privacysandbox/ui/integration-tests/testapp/src/main/AndroidManifest.xml
index 77e1152..3f10b0c 100644
--- a/privacysandbox/ui/integration-tests/testapp/src/main/AndroidManifest.xml
+++ b/privacysandbox/ui/integration-tests/testapp/src/main/AndroidManifest.xml
@@ -35,12 +35,6 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
- <uses-sdk-library android:name="androidx.privacysandbox.ui.integration.testsdkprovider"
- android:versionMajor="1"
- android:certDigest="EE:B9:3D:E4:98:2F:A1:2E:AD:5B:C1:16:7A:6E:10:BD:23:49:B4:04:65:C4:3A:01:CC:54:06:4D:E5:2A:38:04" />
- <uses-sdk-library android:name="androidx.privacysandbox.ui.integration.mediateesdkprovider"
- android:versionMajor="1"
- android:certDigest="EE:B9:3D:E4:98:2F:A1:2E:AD:5B:C1:16:7A:6E:10:BD:23:49:B4:04:65:C4:3A:01:CC:54:06:4D:E5:2A:38:04" />
</application>
</manifest>
diff --git a/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/BaseFragment.kt b/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/BaseFragment.kt
index 79fdec1..bd41656 100644
--- a/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/BaseFragment.kt
+++ b/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/BaseFragment.kt
@@ -44,6 +44,7 @@
*/
abstract class BaseFragment : Fragment() {
private lateinit var sdkApi: ISdkApi
+
private lateinit var sdkSandboxManager: SdkSandboxManagerCompat
private lateinit var activity: Activity
@@ -139,9 +140,9 @@
}
companion object {
- private const val SDK_NAME = "androidx.privacysandbox.ui.integration.testsdkprovider"
+ private const val SDK_NAME = "androidx.privacysandbox.ui.integration.testsdkproviderwrapper"
private const val MEDIATEE_SDK_NAME =
- "androidx.privacysandbox.ui.integration.mediateesdkprovider"
+ "androidx.privacysandbox.ui.integration.mediateesdkproviderwrapper"
const val TAG = "TestSandboxClient"
var isZOrderOnTop = true
@AdType var currentAdType = AdType.BASIC_NON_WEBVIEW
diff --git a/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/MainActivity.kt b/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/MainActivity.kt
index 5812058..080650a 100644
--- a/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/MainActivity.kt
+++ b/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/MainActivity.kt
@@ -296,8 +296,8 @@
private const val TAG = "TestSandboxClient"
/** Name of the SDK to be loaded. */
- private const val SDK_NAME = "androidx.privacysandbox.ui.integration.testsdkprovider"
+ private const val SDK_NAME = "androidx.privacysandbox.ui.integration.testsdkproviderwrapper"
private const val MEDIATEE_SDK_NAME =
- "androidx.privacysandbox.ui.integration.mediateesdkprovider"
+ "androidx.privacysandbox.ui.integration.mediateesdkproviderwrapper"
}
}
diff --git a/privacysandbox/ui/integration-tests/testsdkprovider/build.gradle b/privacysandbox/ui/integration-tests/testsdkprovider/build.gradle
index 441c562..7a9161f 100644
--- a/privacysandbox/ui/integration-tests/testsdkprovider/build.gradle
+++ b/privacysandbox/ui/integration-tests/testsdkprovider/build.gradle
@@ -16,19 +16,14 @@
plugins {
id("AndroidXPlugin")
- id("com.android.application")
+ id("com.android.library")
id("org.jetbrains.kotlin.android")
}
android {
+ compileSdk 35
namespace 'androidx.privacysandbox.ui.integration.testsdkprovider'
- defaultConfig {
- applicationId "androidx.privacysandbox.ui.integration.testsdkprovider"
- minSdk 33
- compileSdk 35
- }
-
buildTypes {
release {
minifyEnabled false
@@ -39,10 +34,10 @@
dependencies {
api(libs.kotlinStdlib)
api("androidx.annotation:annotation:1.8.1")
+ implementation project(':privacysandbox:sdkruntime:sdkruntime-provider')
implementation project(':privacysandbox:ui:integration-tests:testaidl')
implementation project(':privacysandbox:ui:integration-tests:sdkproviderutils')
implementation project(':privacysandbox:ui:ui-core')
implementation project(':privacysandbox:ui:ui-provider')
- implementation project(':privacysandbox:sdkruntime:sdkruntime-client')
implementation project(':webkit:webkit')
}
diff --git a/privacysandbox/ui/integration-tests/testsdkprovider/src/main/AndroidManifest.xml b/privacysandbox/ui/integration-tests/testsdkprovider/src/main/AndroidManifest.xml
deleted file mode 100644
index 9156289..0000000
--- a/privacysandbox/ui/integration-tests/testsdkprovider/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright 2023 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android">
-
- <application
- android:allowBackup="true">
- <sdk-library android:name="androidx.privacysandbox.ui.integration.testsdkprovider"
- android:versionMajor="1" />
- <property android:name="android.sdksandbox.PROPERTY_SDK_PROVIDER_CLASS_NAME"
- android:value="androidx.privacysandbox.ui.integration.testsdkprovider.SdkProviderImpl" />
- </application>
-
-</manifest>
diff --git a/privacysandbox/ui/integration-tests/testsdkprovider/src/main/java/androidx/privacysandbox/ui/integration/testsdkprovider/SdkApi.kt b/privacysandbox/ui/integration-tests/testsdkprovider/src/main/java/androidx/privacysandbox/ui/integration/testsdkprovider/SdkApi.kt
index 5ae1688..5f149dd 100644
--- a/privacysandbox/ui/integration-tests/testsdkprovider/src/main/java/androidx/privacysandbox/ui/integration/testsdkprovider/SdkApi.kt
+++ b/privacysandbox/ui/integration-tests/testsdkprovider/src/main/java/androidx/privacysandbox/ui/integration/testsdkprovider/SdkApi.kt
@@ -234,7 +234,7 @@
companion object {
private const val MEDIATEE_SDK =
- "androidx.privacysandbox.ui.integration.mediateesdkprovider"
+ "androidx.privacysandbox.ui.integration.mediateesdkproviderwrapper"
private const val UPDATE_DELEGATE_INTERVAL: Long = 5000L
}
}
diff --git a/privacysandbox/ui/integration-tests/testsdkprovider/src/main/java/androidx/privacysandbox/ui/integration/testsdkprovider/SdkProviderImpl.kt b/privacysandbox/ui/integration-tests/testsdkprovider/src/main/java/androidx/privacysandbox/ui/integration/testsdkprovider/SdkProviderImpl.kt
index 2b1d2a1..62b9086 100644
--- a/privacysandbox/ui/integration-tests/testsdkprovider/src/main/java/androidx/privacysandbox/ui/integration/testsdkprovider/SdkProviderImpl.kt
+++ b/privacysandbox/ui/integration-tests/testsdkprovider/src/main/java/androidx/privacysandbox/ui/integration/testsdkprovider/SdkProviderImpl.kt
@@ -16,22 +16,18 @@
package androidx.privacysandbox.ui.integration.testsdkprovider
-import android.app.sdksandbox.SandboxedSdk
-import android.app.sdksandbox.SandboxedSdkProvider
import android.content.Context
import android.os.Bundle
-import android.os.ext.SdkExtensions
import android.view.View
-import androidx.annotation.RequiresExtension
+import androidx.privacysandbox.sdkruntime.core.SandboxedSdkCompat
+import androidx.privacysandbox.sdkruntime.core.SandboxedSdkProviderCompat
-// TODO(b/257429573): Remove this line once fixed.
-@RequiresExtension(extension = SdkExtensions.AD_SERVICES, version = 5)
-class SdkProviderImpl : SandboxedSdkProvider() {
- override fun onLoadSdk(p0: Bundle): SandboxedSdk {
- return SandboxedSdk(SdkApi(context!!))
+class SdkProviderImpl : SandboxedSdkProviderCompat() {
+ override fun onLoadSdk(params: Bundle): SandboxedSdkCompat {
+ return SandboxedSdkCompat(SdkApi(context!!))
}
- override fun getView(p0: Context, p1: Bundle, p2: Int, p3: Int): View {
+ override fun getView(windowContext: Context, params: Bundle, width: Int, height: Int): View {
TODO("Not yet implemented")
}
}
diff --git a/privacysandbox/ui/integration-tests/testsdkproviderwrapper/build.gradle b/privacysandbox/ui/integration-tests/testsdkproviderwrapper/build.gradle
new file mode 100644
index 0000000..b2da013
--- /dev/null
+++ b/privacysandbox/ui/integration-tests/testsdkproviderwrapper/build.gradle
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import androidx.build.AndroidXConfig
+
+plugins {
+ id("AndroidXPlugin")
+ id("com.android.privacy-sandbox-sdk")
+}
+
+android {
+ namespace "androidx.privacysandbox.ui.integration.testsdkproviderwrapper"
+ compileSdk 35
+ minSdk 21
+ buildToolsVersion AndroidXConfig.getDefaultAndroidConfig(project).buildToolsVersion
+
+ bundle {
+ packageName = "androidx.privacysandbox.ui.integration.testsdkproviderwrapper"
+
+ // This is the entry point class to our SDK in the SDK Runtime. It enables backward
+ // compatibility support.
+ sdkProviderClassName = "androidx.privacysandbox.sdkruntime.provider.SandboxedSdkProviderAdapter"
+
+ // This is the class path of our implementation of the SandboxedSdkProviderCompat class.
+ compatSdkProviderClassName = "androidx.privacysandbox.ui.integration.testsdkprovider.SdkProviderImpl"
+
+ setVersion(1, 0, 0)
+ }
+}
+
+dependencies {
+ include(project(":privacysandbox:ui:integration-tests:testsdkprovider"))
+}
diff --git a/settings.gradle b/settings.gradle
index 454fc7e..ec91b3e 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -896,10 +896,12 @@
includeProject(":privacysandbox:tools:tools-core", [BuildType.MAIN])
includeProject(":privacysandbox:tools:tools-testing", [BuildType.MAIN])
includeProject(":privacysandbox:ui:integration-tests:mediateesdkprovider", [BuildType.MAIN])
+includeProject(":privacysandbox:ui:integration-tests:mediateesdkproviderwrapper", [BuildType.MAIN])
includeProject(":privacysandbox:ui:integration-tests:sdkproviderutils", [BuildType.MAIN])
includeProject(":privacysandbox:ui:integration-tests:testaidl", [BuildType.MAIN])
includeProject(":privacysandbox:ui:integration-tests:testapp", [BuildType.MAIN])
includeProject(":privacysandbox:ui:integration-tests:testsdkprovider", [BuildType.MAIN])
+includeProject(":privacysandbox:ui:integration-tests:testsdkproviderwrapper", [BuildType.MAIN])
includeProject(":privacysandbox:ui:ui-client", [BuildType.MAIN])
includeProject(":privacysandbox:ui:ui-core", [BuildType.MAIN])
includeProject(":privacysandbox:ui:ui-provider", [BuildType.MAIN])