From 71079c1fb973afc2498c65a33c3fd405b6fafc95 Mon Sep 17 00:00:00 2001 From: sbosse Date: Mon, 21 Jul 2025 23:31:39 +0200 Subject: [PATCH] Mon 21 Jul 22:43:21 CEST 2025 --- .../src/wp/ContactPickerTask.cs | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 js/ui/cordova/plugins/cordova-plugin-contacts/src/wp/ContactPickerTask.cs diff --git a/js/ui/cordova/plugins/cordova-plugin-contacts/src/wp/ContactPickerTask.cs b/js/ui/cordova/plugins/cordova-plugin-contacts/src/wp/ContactPickerTask.cs new file mode 100644 index 0000000..b11170f --- /dev/null +++ b/js/ui/cordova/plugins/cordova-plugin-contacts/src/wp/ContactPickerTask.cs @@ -0,0 +1,122 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +namespace WPCordovaClassLib.Cordova.Commands +{ + using System; + using System.Windows; + using Microsoft.Phone.Controls; + using Microsoft.Phone.Tasks; + using Microsoft.Phone.UserData; + + /// + /// Allows an application to pick contact. + /// Use this to allow users to pick contact from your application. + /// + public class ContactPickerTask + { + /// + /// Occurs when a Pick task is completed. + /// + public event EventHandler Completed; + + /// + /// Shows Contact pick application + /// + public void Show() + { + Deployment.Current.Dispatcher.BeginInvoke(() => + { + var root = Application.Current.RootVisual as PhoneApplicationFrame; + + string baseUrl = "/"; + + if (root != null) + { + root.Navigated += this.OnNavigate; + + // dummy parameter is used to always open a fresh version + root.Navigate( + new Uri( + baseUrl + "Plugins/cordova-plugin-contacts/ContactPicker.xaml?dummy=" + + Guid.NewGuid(), + UriKind.Relative)); + } + }); + } + + /// + /// Performs additional configuration of the picker application. + /// + /// The source of the event. + /// The instance containing the event data. + private void OnNavigate(object sender, System.Windows.Navigation.NavigationEventArgs e) + { + if (!(e.Content is ContactPicker)) + { + return; + } + + var phoneApplicationFrame = Application.Current.RootVisual as PhoneApplicationFrame; + if (phoneApplicationFrame != null) + { + phoneApplicationFrame.Navigated -= this.OnNavigate; + } + + ContactPicker contactPicker = (ContactPicker)e.Content; + + if (contactPicker != null) + { + contactPicker.Completed += this.Completed; + } + else if (this.Completed != null) + { + this.Completed(this, new PickResult(TaskResult.Cancel)); + } + } + + /// + /// Represents contact returned + /// + public class PickResult : TaskEventArgs + { + /// + /// Initializes a new instance of the PickResult class. + /// + public PickResult() + { + } + + /// + /// Initializes a new instance of the PickResult class + /// with the specified Microsoft.Phone.Tasks.TaskResult. + /// + /// Associated Microsoft.Phone.Tasks.TaskResult + public PickResult(TaskResult taskResult) + : base(taskResult) + { + } + + /// + /// Gets the contact. + /// + public Contact Contact { get; internal set; } + } + } +}