From 1ce384776ecbb1046bd13c877e7420061ca4793d Mon Sep 17 00:00:00 2001 From: sheiksyedm Date: Thu, 16 Jul 2026 17:34:49 +0530 Subject: [PATCH] Fix R8 stripping BaseOnChangeListener/BaseOnSliderTouchListener in Release builds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of removing the base interfaces entirely (PR #1486), keep them intact with their methods so the binding generator produces Implementor ACW classes. These Java ACWs contain 'implements BaseOnChangeListener' which gives R8 a concrete Java reference — preventing it from stripping the types at link time. The implements chain from typed sub-interfaces (Slider.OnChangeListener etc.) to the base interfaces is still broken to prevent ACW erasure clash (#1482). The auto-generated add/remove methods on BaseSlider are still removed and replaced with hand-written typed overloads in Additions. This hybrid approach provides: - Typed API: AddOnChangeListener(Slider.IOnChangeListener) as Android recommends - No erasure clash: implements chain broken between typed and base interfaces - R8 safe: Implementor ACWs reference base types in Java — no ProGuard needed - Events: Change/StartTrackingTouch/StopTrackingTouch hand-written in Additions Fixes #1501 --- config.json | 2 +- .../PublicAPI/PublicAPI.Unshipped.txt | 16 +++++ .../material/Transforms/Metadata.xml | 62 ++++++++++++------- 3 files changed, 58 insertions(+), 22 deletions(-) diff --git a/config.json b/config.json index f101ae373..064688773 100644 --- a/config.json +++ b/config.json @@ -3518,7 +3518,7 @@ "groupId": "com.google.android.material", "artifactId": "material", "version": "1.14.0", - "nugetVersion": "1.14.0.5", + "nugetVersion": "1.14.0.6", "nugetId": "Xamarin.Google.Android.Material", "comments": "Requires API-34" }, diff --git a/source/com.google.android.material/material/PublicAPI/PublicAPI.Unshipped.txt b/source/com.google.android.material/material/PublicAPI/PublicAPI.Unshipped.txt index 06fed8bda..0ca3d13c4 100644 --- a/source/com.google.android.material/material/PublicAPI/PublicAPI.Unshipped.txt +++ b/source/com.google.android.material/material/PublicAPI/PublicAPI.Unshipped.txt @@ -1978,10 +1978,20 @@ Google.Android.Material.SideSheet.SideSheetDialog Google.Android.Material.SideSheet.SideSheetDialog.SideSheetDialog(Android.Content.Context! context) -> void Google.Android.Material.SideSheet.SideSheetDialog.SideSheetDialog(Android.Content.Context! context, int theme) -> void Google.Android.Material.SideSheet.SideSheetDialog.SideSheetDialog(nint javaReference, Android.Runtime.JniHandleOwnership transfer) -> void +Google.Android.Material.Slider.BaseOnChangeEventArgs +Google.Android.Material.Slider.BaseOnChangeEventArgs.BaseOnChangeEventArgs(Java.Lang.Object! p0, float p1, bool p2) -> void +Google.Android.Material.Slider.BaseOnChangeEventArgs.P0.get -> Java.Lang.Object! +Google.Android.Material.Slider.BaseOnChangeEventArgs.P1.get -> float +Google.Android.Material.Slider.BaseOnChangeEventArgs.P2.get -> bool Google.Android.Material.Slider.BasicLabelFormatter Google.Android.Material.Slider.BasicLabelFormatter.BasicLabelFormatter() -> void Google.Android.Material.Slider.BasicLabelFormatter.GetFormattedValue(float value) -> string! Google.Android.Material.Slider.BasicLabelFormatter.InterfaceConsts +Google.Android.Material.Slider.IBaseOnChangeListener +Google.Android.Material.Slider.IBaseOnChangeListener.OnValueChange(Java.Lang.Object! p0, float p1, bool p2) -> void +Google.Android.Material.Slider.IBaseOnSliderTouchListener +Google.Android.Material.Slider.IBaseOnSliderTouchListener.OnStartTrackingTouch(Java.Lang.Object! p0) -> void +Google.Android.Material.Slider.IBaseOnSliderTouchListener.OnStopTrackingTouch(Java.Lang.Object! p0) -> void Google.Android.Material.Slider.ILabelFormatter Google.Android.Material.Slider.ILabelFormatter.GetFormattedValue(float p0) -> string! Google.Android.Material.Slider.ISliderOrientation @@ -2047,6 +2057,12 @@ Google.Android.Material.Slider.Slider.StopTrackingTouchEventArgs.P0.get -> Googl Google.Android.Material.Slider.Slider.StopTrackingTouchEventArgs.StopTrackingTouchEventArgs(Google.Android.Material.Slider.Slider! p0) -> void Google.Android.Material.Slider.SliderOrientation Google.Android.Material.Slider.SliderOrientationConsts +Google.Android.Material.Slider.StartTrackingTouchEventArgs +Google.Android.Material.Slider.StartTrackingTouchEventArgs.P0.get -> Java.Lang.Object! +Google.Android.Material.Slider.StartTrackingTouchEventArgs.StartTrackingTouchEventArgs(Java.Lang.Object! p0) -> void +Google.Android.Material.Slider.StopTrackingTouchEventArgs +Google.Android.Material.Slider.StopTrackingTouchEventArgs.P0.get -> Java.Lang.Object! +Google.Android.Material.Slider.StopTrackingTouchEventArgs.StopTrackingTouchEventArgs(Java.Lang.Object! p0) -> void Google.Android.Material.Slider.TickVisibilityMode Google.Android.Material.Slider.TickVisibilityModeAttribute Google.Android.Material.Slider.TickVisibilityModeAttribute.TickVisibilityModeAttribute() -> void diff --git a/source/com.google.android.material/material/Transforms/Metadata.xml b/source/com.google.android.material/material/Transforms/Metadata.xml index 451b66000..4b88e2ff4 100644 --- a/source/com.google.android.material/material/Transforms/Metadata.xml +++ b/source/com.google.android.material/material/Transforms/Metadata.xml @@ -319,35 +319,55 @@ com.google.android.material.appbar.AppBarLayout - - - + + + com.google.android.material.slider.BaseOnChangeListener + + + com.google.android.material.slider.BaseOnChangeListener + + + + + com.google.android.material.slider.BaseOnSliderTouchListener + + + com.google.android.material.slider.BaseOnSliderTouchListener + - + - + - +