From 639b216d2405f727fbb4d9da0b818da2078896ee Mon Sep 17 00:00:00 2001 From: Jonathan Pobst Date: Tue, 17 Jan 2023 20:16:51 -0600 Subject: [PATCH] [Mono.Android] Android.Telecom.InCallService.SetAudioRoute() + enum (#7711) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes: https://github.com/xamarin/xamarin-android/issues/2472 Context: https://github.com/xamarin/monodroid/commit/ebb6d5dfdf2800aa3a39e3445667170695df2c75 Enumification of API-23 in xamarin/monodroid@ebb6d5df incorrectly enumified [`android.telecom.InCallService.setAudioRoute(int)`][0], enumifying the `int` parameter as `Android.Telecom.VideoQuality` instead of `Android.Telecom.CallAudioRoute`. Fix this by changing `src/Mono.Android/methodmap.csv` to use `Android.Telecom.CallAudioRoute`, which results in the binding: namespace Android.Telecom { partial class InCallServices { [global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android23.0")] [Register ("setAudioRoute", "(I)V", "", ApiSince = 23)] public unsafe void SetAudioRoute ([global::Android.Runtime.GeneratedEnum] Android.Telecom.CallAudioRoute route) => … } } For backwards compatibility, we need to add an `[Obsolete]` overload containing the incorrect enumification: namespace Android.Telecom { partial class InCallServices { [Obsolete ("Incorrect enum parameter, use the overload that takes a CallAudioRoute paramter instead.")] [global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android23.0")] public void SetAudioRoute ([global::Android.Runtime.GeneratedEnum] Android.Telecom.VideoQuality route) => SetAudioRoute ((CallAudioRoute) route); } } The change to `acceptable-breakages*.txt` is due to the `[Register]` attribute being moved from the old overload to the corrected overload. [0]: https://developer.android.com/reference/android/telecom/InCallService#setAudioRoute(int) --- .../Android.Telecom/InCallService.cs | 19 +++++++++++++++++++ src/Mono.Android/Mono.Android.csproj | 1 + src/Mono.Android/methodmap.csv | 2 +- ...acceptable-breakages-vReference-net8.0.txt | 1 + .../acceptable-breakages-vReference.txt | 1 + 5 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 src/Mono.Android/Android.Telecom/InCallService.cs diff --git a/src/Mono.Android/Android.Telecom/InCallService.cs b/src/Mono.Android/Android.Telecom/InCallService.cs new file mode 100644 index 00000000000..cefede41963 --- /dev/null +++ b/src/Mono.Android/Android.Telecom/InCallService.cs @@ -0,0 +1,19 @@ +using System; +using Android.Content; + +namespace Android.Telecom +{ + public abstract partial class InCallService : Android.App.Service + { +#if ANDROID_23 + [Obsolete ("Incorrect enum parameter, use the overload that takes a CallAudioRoute paramter instead.")] + [global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android23.0")] + public void SetAudioRoute ([global::Android.Runtime.GeneratedEnum] Android.Telecom.VideoQuality route) + { + SetAudioRoute ((CallAudioRoute) route); + } +#endif + } +} + + diff --git a/src/Mono.Android/Mono.Android.csproj b/src/Mono.Android/Mono.Android.csproj index 339b22155ab..26ca98ae8b9 100644 --- a/src/Mono.Android/Mono.Android.csproj +++ b/src/Mono.Android/Mono.Android.csproj @@ -126,6 +126,7 @@ + diff --git a/src/Mono.Android/methodmap.csv b/src/Mono.Android/methodmap.csv index 92808f98058..cd6d2825199 100644 --- a/src/Mono.Android/methodmap.csv +++ b/src/Mono.Android/methodmap.csv @@ -1879,7 +1879,7 @@ 23, android.telecom, InCallService.VideoCall.Callback, onCallSessionEvent, event, Android.Telecom.VideoSessionEvent 23, android.telecom, InCallService.VideoCall.Callback, onSessionModifyResponseReceived, status, Android.Telecom.ModifyRequestResult 23, android.telecom, InCallService.VideoCall.Callback, onVideoQualityChanged, videoQuality, Android.Telecom.VideoQuality -23, android.telecom, InCallService, setAudioRoute, route, Android.Telecom.VideoQuality +23, android.telecom, InCallService, setAudioRoute, route, Android.Telecom.CallAudioRoute 23, android.telecom, PhoneAccount, hasCapabilities, capability, Android.Telecom.ConnectionCapability 23, android.telecom, PhoneAccount, getCapabilities, return, Android.Telecom.ConnectionCapability 23, android.telecom, RemoteConference, getConnectionCapabilities, return, Android.Telecom.ConnectionCapability diff --git a/tests/api-compatibility/acceptable-breakages-vReference-net8.0.txt b/tests/api-compatibility/acceptable-breakages-vReference-net8.0.txt index d52e422a6ce..96672ec00b5 100644 --- a/tests/api-compatibility/acceptable-breakages-vReference-net8.0.txt +++ b/tests/api-compatibility/acceptable-breakages-vReference-net8.0.txt @@ -3079,3 +3079,4 @@ CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Org.Apac CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Org.Apache.Http.Conn.Ssl.SSLSocketFactory..ctor(Java.Security.KeyStore, System.String)' in the contract but not the implementation. CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Org.Apache.Http.Conn.Ssl.SSLSocketFactory..ctor(Java.Security.KeyStore, System.String, Java.Security.KeyStore)' in the contract but not the implementation. CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Org.Apache.Http.Conn.Ssl.SSLSocketFactory.CreateSocket(Java.Net.Socket, System.String, System.Int32, System.Boolean)' in the contract but not the implementation. +CannotRemoveAttribute : Attribute 'Android.Runtime.RegisterAttribute' exists on 'Android.Telecom.InCallService.SetAudioRoute(Android.Telecom.VideoQuality)' in the contract but not the implementation. diff --git a/tests/api-compatibility/acceptable-breakages-vReference.txt b/tests/api-compatibility/acceptable-breakages-vReference.txt index 9916b31e8dd..3d315e249f8 100644 --- a/tests/api-compatibility/acceptable-breakages-vReference.txt +++ b/tests/api-compatibility/acceptable-breakages-vReference.txt @@ -1 +1,2 @@ Compat issues with assembly Mono.Android: +CannotRemoveAttribute : Attribute 'Android.Runtime.RegisterAttribute' exists on 'Android.Telecom.InCallService.SetAudioRoute(Android.Telecom.VideoQuality)' in the contract but not the implementation.