From 2cfa568d2cd9a1e6ba0f7658713f1ac7523f23a5 Mon Sep 17 00:00:00 2001 From: Shane Neuville Date: Thu, 31 Dec 2020 09:53:10 -0600 Subject: [PATCH 1/3] Add Exception Message when trying to use FlyoutPage with NonAppCompat --- Stubs/Xamarin.Forms.Platform.cs | 6 +++++- .../AppCompat/FormsAppCompatActivity.cs | 1 + .../Renderers/FlyoutPageRendererNonAppCompat.cs | 16 ++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 Xamarin.Forms.Platform.Android/Renderers/FlyoutPageRendererNonAppCompat.cs diff --git a/Stubs/Xamarin.Forms.Platform.cs b/Stubs/Xamarin.Forms.Platform.cs index b5e8ee170b0..632491ac626 100644 --- a/Stubs/Xamarin.Forms.Platform.cs +++ b/Stubs/Xamarin.Forms.Platform.cs @@ -163,7 +163,11 @@ internal class _PageRenderer { } -#if !__IOS__ +#if __ANDROID__ + // current previewer doesn't work with appcompat so this renderer is here for the previewer only + // once previewer switches to appcompat then we can remove this + [RenderWith(typeof(FlyoutPageRendererNonAppCompat))] +#elif !__IOS__ [RenderWith(typeof(FlyoutPageRenderer))] #else [RenderWith (typeof (PhoneFlyoutPageRenderer))] diff --git a/Xamarin.Forms.Platform.Android/AppCompat/FormsAppCompatActivity.cs b/Xamarin.Forms.Platform.Android/AppCompat/FormsAppCompatActivity.cs index fc425f875fd..5495bf2e426 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/FormsAppCompatActivity.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/FormsAppCompatActivity.cs @@ -126,6 +126,7 @@ static void RegisterHandlers() RegisterHandler(typeof(Picker), typeof(AppCompat.PickerRenderer), typeof(PickerRenderer)); RegisterHandler(typeof(CarouselPage), typeof(AppCompat.CarouselPageRenderer), typeof(CarouselPageRenderer)); RegisterHandler(typeof(CheckBox), typeof(CheckBoxRenderer), typeof(CheckBoxDesignerRenderer)); + RegisterHandler(typeof(FlyoutPage), typeof(FlyoutPageRenderer), typeof(FlyoutPageRendererNonAppCompat)); if (Forms.Flags.Contains(Flags.UseLegacyRenderers)) { diff --git a/Xamarin.Forms.Platform.Android/Renderers/FlyoutPageRendererNonAppCompat.cs b/Xamarin.Forms.Platform.Android/Renderers/FlyoutPageRendererNonAppCompat.cs new file mode 100644 index 00000000000..5f66807c7c1 --- /dev/null +++ b/Xamarin.Forms.Platform.Android/Renderers/FlyoutPageRendererNonAppCompat.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Android.Content; +using AView = Android.Views.View; + +namespace Xamarin.Forms.Platform.Android +{ + sealed class FlyoutPageRendererNonAppCompat : PageRenderer + { + public FlyoutPageRendererNonAppCompat(Context context) : base(context) + { + throw new Exception("FlyoutPage only works with Theme.AppCompat theme (or descendant)"); + } + } +} From 0cbe5912c63a06bd44a75b2b63cfc60ee01f933d Mon Sep 17 00:00:00 2001 From: Shane Neuville Date: Thu, 31 Dec 2020 10:01:36 -0600 Subject: [PATCH 2/3] - move exception out of ctor --- .../Renderers/FlyoutPageRendererNonAppCompat.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Xamarin.Forms.Platform.Android/Renderers/FlyoutPageRendererNonAppCompat.cs b/Xamarin.Forms.Platform.Android/Renderers/FlyoutPageRendererNonAppCompat.cs index 5f66807c7c1..786b13d20d6 100644 --- a/Xamarin.Forms.Platform.Android/Renderers/FlyoutPageRendererNonAppCompat.cs +++ b/Xamarin.Forms.Platform.Android/Renderers/FlyoutPageRendererNonAppCompat.cs @@ -9,6 +9,10 @@ namespace Xamarin.Forms.Platform.Android sealed class FlyoutPageRendererNonAppCompat : PageRenderer { public FlyoutPageRendererNonAppCompat(Context context) : base(context) + { + } + + protected override void OnElementChanged(ElementChangedEventArgs e) { throw new Exception("FlyoutPage only works with Theme.AppCompat theme (or descendant)"); } From 0b3f8d0cbade32bf15b0497ea0aeaf52f5ba3ce0 Mon Sep 17 00:00:00 2001 From: shane Date: Fri, 1 Jan 2021 11:37:25 -0600 Subject: [PATCH 3/3] - fix appcompat registration of MDP --- .../AppCompat/FormsAppCompatActivity.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Xamarin.Forms.Platform.Android/AppCompat/FormsAppCompatActivity.cs b/Xamarin.Forms.Platform.Android/AppCompat/FormsAppCompatActivity.cs index 5495bf2e426..9d1de76d80c 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/FormsAppCompatActivity.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/FormsAppCompatActivity.cs @@ -127,6 +127,9 @@ static void RegisterHandlers() RegisterHandler(typeof(CarouselPage), typeof(AppCompat.CarouselPageRenderer), typeof(CarouselPageRenderer)); RegisterHandler(typeof(CheckBox), typeof(CheckBoxRenderer), typeof(CheckBoxDesignerRenderer)); RegisterHandler(typeof(FlyoutPage), typeof(FlyoutPageRenderer), typeof(FlyoutPageRendererNonAppCompat)); +#pragma warning disable CS0618 // Type or member is obsolete + RegisterHandler(typeof(MasterDetailPage), typeof(MasterDetailPageRenderer), typeof(MasterDetailRenderer)); +#pragma warning restore CS0618 // Type or member is obsolete if (Forms.Flags.Contains(Flags.UseLegacyRenderers)) {