Description
Android framework version
net9.0-android
Affected platform version
N/A
Description
When using some types from the AndroidX packages, I started noticing a lot of method are returning nullable types, while the Android API docs state that they should not be and are annotated with @NonNull
.
I noticed in after updating Xamarin.AndroidX.AppCompat
to version 1.7.0.6
that all the methods in NotificationCompat.Builder
return nullable types.
So building now looks like this:
var builder = new NotificationCompat.Builder(this, ChannelName);
-builder.SetContentTitle("Title")
+builder.SetContentTitle("Title")?
- .SetSmallIcon(Resource.Drawable.ic_bar_chart_24)
+ .SetSmallIcon(Resource.Drawable.ic_bar_chart_24)?
- .SetPriority(NotificationCompat.PriorityLow)
+ .SetPriority(NotificationCompat.PriorityLow)?
- .SetWhen(0)
+ .SetWhen(0)?
- .SetOnlyAlertOnce(true)
+ .SetOnlyAlertOnce(true)?
- .SetContentIntent(pendingIntent)
+ .SetContentIntent(pendingIntent)?
- .SetOngoing(true)
+ .SetOngoing(true)?
- .SetColor(ResourcesCompat.GetColor(Resources, Resource.Color.tm_orange, Theme));
return builder.Build();
Looking at for instance SetContentTitle
this one is explicitly annotated with @NonNull
for its return type. This can be seen here: https://developer.android.com/reference/androidx/core/app/NotificationCompat.Builder#setContentText(java.lang.CharSequence)

The exposed C# API looks like this for the same method, where nullability on return type does not match:
// Metadata.xml XPath method reference: path="/api/package[@name='androidx.core.app']/class[@name='NotificationCompat.Builder']/method[@name='setContentTitle' and count(parameter)=1 and parameter[1][@type='java.lang.CharSequence']]"
[Register ("setContentTitle", "(Ljava/lang/CharSequence;)Landroidx/core/app/NotificationCompat$Builder;", "GetSetContentTitle_Ljava_lang_CharSequence_Handler")]
public virtual unsafe global::AndroidX.Core.App.NotificationCompat.Builder? SetContentTitle (global::Java.Lang.ICharSequence? title)
Steps to Reproduce
- Install Xamarin.AndroidX.AppCompat
- Use builder APIs as described above
Did you find any workaround?
Add nullability checks all over the place :'(
Or downgrade to previous version of AppCompat package