From ca95ada8e8e2f80205731b78c3e1f2de2062835f Mon Sep 17 00:00:00 2001 From: Federico Maccaroni Date: Tue, 26 Dec 2023 18:47:59 -0300 Subject: [PATCH] MAUI Sample iOS Extension Tap gesture workaround --- .../EmbeddedIOSNavigationIssue/Core/App.xaml | 15 + .../Core/App.xaml.cs | 12 + .../Core/AppOptions.cs | 9 + .../Core/Core.csproj | 39 ++ .../Core/HomePage.xaml | 26 ++ .../Core/HomePage.xaml.cs | 28 ++ .../Core/LoginPage.xaml | 26 ++ .../Core/LoginPage.xaml.cs | 29 ++ .../Core/MainPage.xaml | 17 + .../Core/MainPage.xaml.cs | 16 + .../Core/MauiProgram.cs | 33 ++ .../Core/Properties/launchSettings.json | 8 + .../Core/Resources/Styles/Colors.xaml | 45 ++ .../Core/Resources/Styles/Styles.xaml | 427 ++++++++++++++++++ .../Core/ServiceContainer.cs | 16 + .../EmbeddedIOSNavigationIssue/Core/State.cs | 11 + .../Core/TaskExtensions.cs | 24 + .../EmbeddedIOSNavigationIssue.sln | 37 ++ .../EmbeddedIOSNavigationIssue.csproj | 73 +++ .../EmbeddedIOSNavigationIssue/MauiProgram.cs | 12 + .../Platforms/Android/AndroidManifest.xml | 6 + .../Platforms/Android/MainActivity.cs | 11 + .../Platforms/Android/MainApplication.cs | 16 + .../Android/Resources/values/colors.xml | 6 + .../Platforms/iOS/AppDelegate.cs | 11 + .../Platforms/iOS/Entitlements.plist | 26 ++ .../Platforms/iOS/Info.plist | 32 ++ .../Platforms/iOS/Program.cs | 16 + .../Properties/launchSettings.json | 8 + .../Resources/AppIcon/appicon.svg | 5 + .../Resources/AppIcon/appiconfg.svg | 8 + .../Resources/Fonts/OpenSans-Regular.ttf | Bin 0 -> 107184 bytes .../Resources/Fonts/OpenSans-Semibold.ttf | Bin 0 -> 111056 bytes .../Resources/Raw/AboutAssets.txt | 18 + .../Resources/Splash/splash.svg | 9 + .../Resources/Styles/Colors.xaml | 45 ++ .../Resources/Styles/Styles.xaml | 427 ++++++++++++++++++ .../IOSExtensionSample/AppDelegate.cs | 30 ++ .../IOSExtensionSample/ClipLogger.cs | 21 + .../IOSExtensionSample/Context.cs | 59 +++ .../CredentialProviderViewController.cs | 365 +++++++++++++++ ...edentialProviderViewController.designer.cs | 20 + .../CustomPresentationControllerDelegate.cs | 22 + .../IOSExtensionSample/CustomWindowHandler.cs | 26 ++ .../IOSExtensionSample/Entitlements.plist | 16 + .../IOSExtensionSample.csproj | 71 +++ .../IOSExtensionSample/Info.plist | 58 +++ .../LockPasswordViewController.cs | 48 ++ .../LockPasswordViewController.designer.cs | 54 +++ .../LoginListViewController.cs | 77 ++++ .../LoginListViewController.designer.cs | 89 ++++ .../IOSExtensionSample/Main.cs | 12 + .../MainInterface.storyboard | 296 ++++++++++++ .../MauiContextSingleton.cs | 20 + .../IOSExtensionSample/SetupViewController.cs | 28 ++ .../SetupViewController.designer.cs | 69 +++ 56 files changed, 2928 insertions(+) create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/Core/App.xaml create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/Core/App.xaml.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/Core/AppOptions.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/Core/Core.csproj create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/Core/HomePage.xaml create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/Core/HomePage.xaml.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/Core/LoginPage.xaml create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/Core/LoginPage.xaml.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/Core/MainPage.xaml create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/Core/MainPage.xaml.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/Core/MauiProgram.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/Core/Properties/launchSettings.json create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/Core/Resources/Styles/Colors.xaml create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/Core/Resources/Styles/Styles.xaml create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/Core/ServiceContainer.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/Core/State.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/Core/TaskExtensions.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/EmbeddedIOSNavigationIssue.sln create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/EmbeddedIOSNavigationIssue/EmbeddedIOSNavigationIssue.csproj create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/EmbeddedIOSNavigationIssue/MauiProgram.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/EmbeddedIOSNavigationIssue/Platforms/Android/AndroidManifest.xml create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/EmbeddedIOSNavigationIssue/Platforms/Android/MainActivity.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/EmbeddedIOSNavigationIssue/Platforms/Android/MainApplication.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/EmbeddedIOSNavigationIssue/Platforms/Android/Resources/values/colors.xml create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/EmbeddedIOSNavigationIssue/Platforms/iOS/AppDelegate.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/EmbeddedIOSNavigationIssue/Platforms/iOS/Entitlements.plist create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/EmbeddedIOSNavigationIssue/Platforms/iOS/Info.plist create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/EmbeddedIOSNavigationIssue/Platforms/iOS/Program.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/EmbeddedIOSNavigationIssue/Properties/launchSettings.json create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/EmbeddedIOSNavigationIssue/Resources/AppIcon/appicon.svg create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/EmbeddedIOSNavigationIssue/Resources/AppIcon/appiconfg.svg create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/EmbeddedIOSNavigationIssue/Resources/Fonts/OpenSans-Regular.ttf create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/EmbeddedIOSNavigationIssue/Resources/Fonts/OpenSans-Semibold.ttf create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/EmbeddedIOSNavigationIssue/Resources/Raw/AboutAssets.txt create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/EmbeddedIOSNavigationIssue/Resources/Splash/splash.svg create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/EmbeddedIOSNavigationIssue/Resources/Styles/Colors.xaml create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/EmbeddedIOSNavigationIssue/Resources/Styles/Styles.xaml create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/IOSExtensionSample/AppDelegate.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/IOSExtensionSample/ClipLogger.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/IOSExtensionSample/Context.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/IOSExtensionSample/CredentialProviderViewController.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/IOSExtensionSample/CredentialProviderViewController.designer.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/IOSExtensionSample/CustomPresentationControllerDelegate.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/IOSExtensionSample/CustomWindowHandler.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/IOSExtensionSample/Entitlements.plist create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/IOSExtensionSample/IOSExtensionSample.csproj create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/IOSExtensionSample/Info.plist create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/IOSExtensionSample/LockPasswordViewController.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/IOSExtensionSample/LockPasswordViewController.designer.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/IOSExtensionSample/LoginListViewController.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/IOSExtensionSample/LoginListViewController.designer.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/IOSExtensionSample/Main.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/IOSExtensionSample/MainInterface.storyboard create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/IOSExtensionSample/MauiContextSingleton.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/IOSExtensionSample/SetupViewController.cs create mode 100644 src/Samples/EmbeddedIOSNavigationIssue/IOSExtensionSample/SetupViewController.designer.cs diff --git a/src/Samples/EmbeddedIOSNavigationIssue/Core/App.xaml b/src/Samples/EmbeddedIOSNavigationIssue/Core/App.xaml new file mode 100644 index 000000000..aa6d49ada --- /dev/null +++ b/src/Samples/EmbeddedIOSNavigationIssue/Core/App.xaml @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/src/Samples/EmbeddedIOSNavigationIssue/Core/App.xaml.cs b/src/Samples/EmbeddedIOSNavigationIssue/Core/App.xaml.cs new file mode 100644 index 000000000..d62f6994a --- /dev/null +++ b/src/Samples/EmbeddedIOSNavigationIssue/Core/App.xaml.cs @@ -0,0 +1,12 @@ +namespace Bit.Core; + +public partial class App : Application +{ + public App(AppOptions appOptions = null) + { + InitializeComponent(); + + MainPage = new MainPage(); + } +} + diff --git a/src/Samples/EmbeddedIOSNavigationIssue/Core/AppOptions.cs b/src/Samples/EmbeddedIOSNavigationIssue/Core/AppOptions.cs new file mode 100644 index 000000000..b41111fcb --- /dev/null +++ b/src/Samples/EmbeddedIOSNavigationIssue/Core/AppOptions.cs @@ -0,0 +1,9 @@ +using System; +namespace Bit.Core +{ + public class AppOptions + { + public bool IosExtension { get; set; } + } +} + diff --git a/src/Samples/EmbeddedIOSNavigationIssue/Core/Core.csproj b/src/Samples/EmbeddedIOSNavigationIssue/Core/Core.csproj new file mode 100644 index 000000000..b66465bc5 --- /dev/null +++ b/src/Samples/EmbeddedIOSNavigationIssue/Core/Core.csproj @@ -0,0 +1,39 @@ + + + net8.0-android;net8.0-ios + Bit.Core + + true + enable + true + + 12.0 + 21.0 + + + false + + + false + + + $(DefineConstants);$(CustomConstants) + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Samples/EmbeddedIOSNavigationIssue/Core/HomePage.xaml b/src/Samples/EmbeddedIOSNavigationIssue/Core/HomePage.xaml new file mode 100644 index 000000000..a39bfdbc9 --- /dev/null +++ b/src/Samples/EmbeddedIOSNavigationIssue/Core/HomePage.xaml @@ -0,0 +1,26 @@ + + + + + diff --git a/src/Samples/EmbeddedIOSNavigationIssue/Core/HomePage.xaml.cs b/src/Samples/EmbeddedIOSNavigationIssue/Core/HomePage.xaml.cs new file mode 100644 index 000000000..1cd3a9a80 --- /dev/null +++ b/src/Samples/EmbeddedIOSNavigationIssue/Core/HomePage.xaml.cs @@ -0,0 +1,28 @@ +namespace Bit.Core; + +public partial class HomePage : ContentPage +{ + public HomePage(AppOptions appOptions = null) + { + InitializeComponent(); + + if (appOptions is null) + { + StartLoginAction = () => Navigation.PushModalAsync(new LoginPage()); + CloseAction = () => Navigation.PopModalAsync(); + } + } + + public Action StartLoginAction { get; set; } + public Action CloseAction { get; set; } + + void Login_Clicked(System.Object sender, System.EventArgs e) + { + StartLoginAction(); + } + + void Cancel_Clicked(System.Object sender, System.EventArgs e) + { + CloseAction(); + } +} diff --git a/src/Samples/EmbeddedIOSNavigationIssue/Core/LoginPage.xaml b/src/Samples/EmbeddedIOSNavigationIssue/Core/LoginPage.xaml new file mode 100644 index 000000000..7a068b110 --- /dev/null +++ b/src/Samples/EmbeddedIOSNavigationIssue/Core/LoginPage.xaml @@ -0,0 +1,26 @@ + + + + + diff --git a/src/Samples/EmbeddedIOSNavigationIssue/Core/LoginPage.xaml.cs b/src/Samples/EmbeddedIOSNavigationIssue/Core/LoginPage.xaml.cs new file mode 100644 index 000000000..b9a6bb10d --- /dev/null +++ b/src/Samples/EmbeddedIOSNavigationIssue/Core/LoginPage.xaml.cs @@ -0,0 +1,29 @@ +namespace Bit.Core; + +public partial class LoginPage : ContentPage +{ + public LoginPage(AppOptions appOptions = null) + { + InitializeComponent(); + + if (appOptions is null) + { + LogInSuccessAction = () => DisplayAlert("Login", "Success", "Cancel"); + CloseAction = () => Navigation.PopModalAsync(); + } + } + + public Action LogInSuccessAction { get; set; } + public Action CloseAction { get; set; } + + void LoginSuccess_Tapped(System.Object sender, Microsoft.Maui.Controls.TappedEventArgs e) + { + LogInSuccessAction(); + } + + void Close_Tapped(System.Object sender, Microsoft.Maui.Controls.TappedEventArgs e) + { + CloseAction(); + } +} + diff --git a/src/Samples/EmbeddedIOSNavigationIssue/Core/MainPage.xaml b/src/Samples/EmbeddedIOSNavigationIssue/Core/MainPage.xaml new file mode 100644 index 000000000..00b1f0109 --- /dev/null +++ b/src/Samples/EmbeddedIOSNavigationIssue/Core/MainPage.xaml @@ -0,0 +1,17 @@ + + + + + +