From f88415f6affb47b16032ccded0e2d4d5e38e49c5 Mon Sep 17 00:00:00 2001 From: tj_devel709 Date: Wed, 31 Aug 2022 11:55:15 -0500 Subject: [PATCH 1/6] starting NearbyInteractions --- src/NearbyInteraction/Enums.cs | 22 +++ ...IAlgorithmConvergenceStatusReasonValues.cs | 54 +++++++ src/NearbyInteraction/NINearbyObject.cs | 19 ++- src/avrouting.cs | 49 +++++++ src/frameworks.sources | 1 + src/nearbyinteraction.cs | 136 ++++++++++++++++++ ...orithmConvergenceStatusReasonValuesTest.cs | 34 +++++ .../iOS-NearbyInteraction.todo | 27 ---- tests/xtro-sharpie/iOS-NearbyInteraction.todo | 27 ---- .../watchOS-NearbyInteraction.todo | 22 --- 10 files changed, 314 insertions(+), 77 deletions(-) create mode 100644 src/NearbyInteraction/NIAlgorithmConvergenceStatusReasonValues.cs create mode 100644 src/avrouting.cs create mode 100644 tests/monotouch-test/NearbyInteraction/NIAlgorithmConvergenceStatusReasonValuesTest.cs diff --git a/src/NearbyInteraction/Enums.cs b/src/NearbyInteraction/Enums.cs index d76126299e98..9826f443b5fe 100644 --- a/src/NearbyInteraction/Enums.cs +++ b/src/NearbyInteraction/Enums.cs @@ -24,6 +24,8 @@ public enum NIErrorCode : long ResourceUsageTimeout = -5886, ActiveSessionsLimitExceeded = -5885, UserDidNotAllow = -5884, + AccessoryPeerDeviceUnavailable = -5882, + InvalidARConfiguration = -5883, } [Watch (8,0), NoTV, NoMac, iOS (14,0)] @@ -33,4 +35,24 @@ public enum NINearbyObjectRemovalReason : long Timeout, PeerEnded, } + + [iOS (16,0), NoMac, Watch (9,0), NoTV, MacCatalyst (16,0)] + [Native] + public enum NIAlgorithmConvergenceStatus : long + { + Unknown, + NotConverged, + Converged, + } + + [iOS (16,0), NoMac, Watch (9,0), NoTV, MacCatalyst (16,0)] + [Native] + public enum NINearbyObjectVerticalDirectionEstimate : long + { + Unknown = 0, + Same = 1, + Above = 2, + Below = 3, + AboveOrBelow = 4, + } } diff --git a/src/NearbyInteraction/NIAlgorithmConvergenceStatusReasonValues.cs b/src/NearbyInteraction/NIAlgorithmConvergenceStatusReasonValues.cs new file mode 100644 index 000000000000..3f3c6af45b1d --- /dev/null +++ b/src/NearbyInteraction/NIAlgorithmConvergenceStatusReasonValues.cs @@ -0,0 +1,54 @@ +// +// NIAlgorithmConvergenceStatusReasonDescription manual binding +// +// Authors: +// TJ Lambert +// +// Copyright 2022 Microsoft Corp. +// + +#if IOS || WATCH || __MACCATALYST__ + +#nullable enable + +using System; +using System.Runtime.InteropServices; +using CoreFoundation; +using Foundation; +using ObjCRuntime; + +#if !NET +using NativeHandle = System.IntPtr; +#endif + +namespace NearbyInteraction { + public partial class NIAlgorithmConvergenceStatusReasonValues + { +#if NET + [SupportedOSPlatform ("ios16.0")] + [SupportedOSPlatform ("maccatalyst16.0")] + [UnsupportedOSPlatform ("tvos")] + [UnsupportedOSPlatform ("macos")] +#else + [iOS (16,0), NoMac, Watch (9,0), NoTV, MacCatalyst (16,0)] +#endif // NET + [DllImport (Constants.NearbyInteractionLibrary)] + static extern NativeHandle /* NSString */ NIAlgorithmConvergenceStatusReasonDescription (NativeHandle /* NSString */ reason); + +#if NET + [SupportedOSPlatform ("ios16.0")] + [SupportedOSPlatform ("maccatalyst16.0")] + [UnsupportedOSPlatform ("tvos")] + [UnsupportedOSPlatform ("macos")] +#else + [iOS (16,0), NoMac, Watch (9,0), NoTV, MacCatalyst (16,0)] +#endif // NET + public static NSString GetConvergenceStatusReason (NSString reason) + { + if (reason is null) + ObjCRuntime.ThrowHelper.ThrowArgumentNullException (nameof (reason)); + return Runtime.GetNSObject (NIAlgorithmConvergenceStatusReasonDescription (reason.GetHandle ()))!; + } + } +} +#endif // IOS || WATCH || __MACCATALYST__ diff --git a/src/NearbyInteraction/NINearbyObject.cs b/src/NearbyInteraction/NINearbyObject.cs index 6d7ab0fe6f3b..0dbf0007f9e1 100644 --- a/src/NearbyInteraction/NINearbyObject.cs +++ b/src/NearbyInteraction/NINearbyObject.cs @@ -17,8 +17,10 @@ using ObjCRuntime; #if NET using Vector3 = global::System.Numerics.Vector3; +using MatrixFloat4x4 = global::CoreGraphics.NMatrix4; #else using Vector3 = global::OpenTK.Vector3; +using MatrixFloat4x4 = global::OpenTK.NMatrix4; #endif #if __IOS__ || WATCH @@ -41,7 +43,22 @@ public static Vector3 DirectionNotAvailable { return (Vector3)_DirectionNotAvailable; } } - } + static MatrixFloat4x4? _WorldTransformNotAvailable; + + // TODO: Link issue here + [Field ("NINearbyObjectWorldTransformNotAvailable", "NearbyInteraction")] + public static MatrixFloat4x4 WorldTransformNotAvailable { + get { + if (_WorldTransformNotAvailable is null) { + unsafe { + MatrixFloat4x4 *pointer = (MatrixFloat4x4 *) Dlfcn.GetIndirect (Libraries.NearbyInteraction.Handle, "NINearbyObjectWorldTransformNotAvailable"); + _WorldTransformNotAvailable = *pointer; + } + } + return (MatrixFloat4x4)_WorldTransformNotAvailable; + } + } + } } #endif diff --git a/src/avrouting.cs b/src/avrouting.cs new file mode 100644 index 000000000000..a3665d4b6a75 --- /dev/null +++ b/src/avrouting.cs @@ -0,0 +1,49 @@ +// +// AVRouting bindings +// +// Authors: +// TJ Lambert +// +// Copyright 2022 Microsoft Corp. All rights reserved. +// + +using System; +using System.ComponentModel; +using ObjCRuntime; +using Foundation; + +#if !NET +using NativeHandle = System.IntPtr; +#endif + +namespace AVRouting { + [NoWatch, NoTV, NoMac, iOS (16,0)] + [BaseType (typeof (NSObject))] + interface AVCustomDeviceRoute + { + // @property (readonly, nonatomic) API_AVAILABLE(ios(16.0)) nw_endpoint_t networkEndpoint __attribute__((availability(ios, introduced=16.0))) __attribute__((availability(macos, unavailable))) __attribute__((availability(tvos, unavailable))) __attribute__((availability(watchos, unavailable))); + [NoWatch, NoTV, NoMac, iOS (16, 0)] + [Export ("networkEndpoint")] + OS_nw_endpoint NetworkEndpoint { get; } + + // @property (readonly, nonatomic) API_AVAILABLE(ios(16.0)) NSUUID * bluetoothIdentifier __attribute__((availability(ios, introduced=16.0))) __attribute__((availability(macos, unavailable))) __attribute__((availability(tvos, unavailable))) __attribute__((availability(watchos, unavailable))); + [NoWatch, NoTV, NoMac, iOS (16, 0)] + [Export ("bluetoothIdentifier")] + NSUuid BluetoothIdentifier { get; } + } + + [NoWatch, NoTV, NoMac, iOS (16,0)] + [BaseType (typeof (NSObject))] + interface AVCustomRoutingActionItem + { + // @property (copy, nonatomic) API_AVAILABLE(ios(16.0)) UTType * type __attribute__((availability(ios, introduced=16.0))) __attribute__((availability(macos, unavailable))) __attribute__((availability(tvos, unavailable))) __attribute__((availability(watchos, unavailable))); + [NoWatch, NoTV, NoMac, iOS (16, 0)] + [Export ("type", ArgumentSemantic.Copy)] + UTType Type { get; set; } + + // @property (copy, nonatomic) API_AVAILABLE(ios(16.0)) NSString * overrideTitle __attribute__((availability(ios, introduced=16.0))) __attribute__((availability(macos, unavailable))) __attribute__((availability(tvos, unavailable))) __attribute__((availability(watchos, unavailable))); + [NoWatch, NoTV, NoMac, iOS (16, 0)] + [Export ("overrideTitle")] + string OverrideTitle { get; set; } + } +} diff --git a/src/frameworks.sources b/src/frameworks.sources index 0195bdf02b58..e8482bc9f879 100644 --- a/src/frameworks.sources +++ b/src/frameworks.sources @@ -1321,6 +1321,7 @@ NEARBYINTERACTION_API_SOURCES = \ NEARBYINTERACTION_SOURCES = \ NearbyInteraction/NINearbyObject.cs \ + NearbyInteraction/NIAlgorithmConvergenceStatusReasonValues.cs \ # NetworkExtension diff --git a/src/nearbyinteraction.cs b/src/nearbyinteraction.cs index 1dc4358a14aa..a9aff406280b 100644 --- a/src/nearbyinteraction.cs +++ b/src/nearbyinteraction.cs @@ -11,12 +11,32 @@ using Foundation; using CoreFoundation; using System; +#if __MACCATALYST__ +using ARSession = Foundation.NSObject; +#elif IOS +using ARKit; +#else +using ARSession = Foundation.NSObject; +#endif + #if NET using Vector3 = global::System.Numerics.Vector3; +using MatrixFloat4x4 = global::CoreGraphics.NMatrix4; #else using Vector3 = global::OpenTK.Vector3; +using MatrixFloat4x4 = global::OpenTK.NMatrix4; #endif +// #if NET +// using Vector3 = global::System.Numerics.Vector3; +// using MatrixFloat4x4 = global::CoreGraphics.NMatrix4; +// #elif WATCH || __MACCATALYST +// using MatrixFloat4x4 = Foundation.NSObject; +// #else +// using Vector3 = global::OpenTK.Vector3; +// using MatrixFloat4x4 = global::OpenTK.NMatrix4; +// #endif + #if !NET using NativeHandle = System.IntPtr; #endif @@ -46,6 +66,10 @@ interface NINearbyPeerConfiguration [Export ("initWithPeerToken:")] NativeHandle Constructor (NIDiscoveryToken peerToken); + + [NoWatch, iOS (16,0), MacCatalyst (16,0), NoTV, NoMac] + [Export ("cameraAssistanceEnabled")] + bool CameraAssistanceEnabled { [Bind ("isCameraAssistanceEnabled")] get; set; } } [Watch (8,0), NoTV, NoMac, iOS (14,0)] @@ -68,6 +92,35 @@ Vector3 Direction { [Field ("NINearbyObjectDistanceNotAvailable")] float DistanceNotAvailable { get; } + + [Watch (9,0), NoTV, NoMac, iOS (16,0), MacCatalyst (16,0)] + [Field ("NINearbyObjectAngleNotAvailable")] + float AngleNotAvailable { get; } + + // [BindAs (typeof (SCNMatrix4))] + // // [BindAs (typeof (MatrixFloat4x4))] + // [Watch (9,0), NoTV, NoMac, iOS (16,0), MacCatalyst (16,0)] + // [Field ("NINearbyObjectWorldTransformNotAvailable")] + // NSValue WorldTransformNotAvailable { get; } + + // [Internal] + // [Watch (9,0), NoTV, NoMac, iOS (16,0), MacCatalyst (16,0)] + // [Export ("getNINearbyObjectWorldTransformNotAvailable")] + // NativeHandle _GetWorldTransformNotAvailable (); + + // [Watch (9,0), NoTV, NoMac, iOS (16,0), MacCatalyst (16,0)] + // [Field ("NINearbyObjectWorldTransformNotAvailable")] + // MatrixFloat4x4 WorldTransformNotAvailable { + // [MarshalDirective (NativePrefix = "xamarin_simd__", Library = "__Internal")] get; + // } + + [Watch (9,0), NoTV, NoMac, iOS (16,0), MacCatalyst (16,0)] + [Export ("verticalDirectionEstimate")] + NINearbyObjectVerticalDirectionEstimate VerticalDirectionEstimate { get; } + + [Watch (9,0), NoTV, NoMac, iOS (16,0), MacCatalyst (16,0)] + [Export ("horizontalAngle")] + float HorizontalAngle { get; } } [Watch (8,0), NoTV, NoMac, iOS (14,0)] @@ -103,6 +156,22 @@ interface NISession [Export ("invalidate")] void Invalidate (); + + // ARSession is not available in Watch or MacCatalyst + [Watch (9,0), NoTV, NoMac, iOS (16,0), MacCatalyst (16,0)] + [Export ("setARSession:")] + void SetARSession (ARSession session); + + // MatrixFloat4x4 is not available in Watch or !NET MacCatalyst + [Watch (9,0), NoTV, NoMac, iOS (16,0), MacCatalyst (16,0)] + [Export ("worldTransformForObject:")] + [MarshalDirective (NativePrefix = "xamarin_simd__", Library = "__Internal")] + MatrixFloat4x4 GetWorldTransform (NINearbyObject @object); + + [Watch (9,0), NoTV, NoMac, iOS (16,0), MacCatalyst (16,0)] + [Static] + [Export ("deviceCapabilities")] + INIDeviceCapability DeviceCapabilities { get; } } interface INISessionDelegate {} @@ -136,6 +205,14 @@ interface NISessionDelegate [Watch (8,0), NoTV, NoMac, iOS (15,0), MacCatalyst (15,0)] [Export ("session:didGenerateShareableConfigurationData:forObject:")] void DidGenerateShareableConfigurationData (NISession session, NSData shareableConfigurationData, NINearbyObject @object); + + [Watch (9,0), NoTV, NoMac, iOS (16,0), MacCatalyst (16,0)] + [Export ("session:didUpdateAlgorithmConvergence:forObject:")] + void DidUpdateAlgorithmConvergence (NISession session, NIAlgorithmConvergence convergence, [NullAllowed] NINearbyObject @object); + + [Watch (9,0), NoTV, NoMac, iOS (16,0), MacCatalyst (16,0)] + [Export ("sessionDidStartRunning:")] + void SessionDidStartRunning (NISession session); } [Watch (8,0), NoTV, NoMac, iOS (15,0), MacCatalyst (15,0)] @@ -148,6 +225,65 @@ interface NINearbyAccessoryConfiguration [Export ("initWithData:error:")] NativeHandle Constructor (NSData data, [NullAllowed] out NSError error); + + [iOS (16,0), NoMac, NoWatch, NoTV, MacCatalyst (16,0)] + [Export ("initWithAccessoryData:bluetoothPeerIdentifier:error:")] + NativeHandle Constructor (NSData accessoryData, NSUuid identifier, [NullAllowed] out NSError error); + + [iOS (16,0), NoMac, NoWatch, NoTV, MacCatalyst (16,0)] + [Export ("cameraAssistanceEnabled")] + bool CameraAssistanceEnabled { [Bind ("isCameraAssistanceEnabled")] get; set; } } + [Static] + [iOS (16,0), NoMac, Watch (9,0), NoTV, MacCatalyst (16,0)] + interface NIAlgorithmConvergenceStatusReason + { + [Watch (9, 0), NoTV, NoMac, iOS (16, 0)] + [Field ("NIAlgorithmConvergenceStatusReasonInsufficientHorizontalSweep")] + NSString InsufficientHorizontalSweep { get; } + + [Watch (9, 0), NoTV, NoMac, iOS (16, 0)] + [Field ("NIAlgorithmConvergenceStatusReasonInsufficientVerticalSweep")] + NSString InsufficientVerticalSweep { get; } + + [Watch (9, 0), NoTV, NoMac, iOS (16, 0)] + [Field ("NIAlgorithmConvergenceStatusReasonInsufficientMovement")] + NSString InsufficientMovement { get; } + + [Watch (9, 0), NoTV, NoMac, iOS (16, 0)] + [Field ("NIAlgorithmConvergenceStatusReasonInsufficientLighting")] + NSString InsufficientLighting { get; } + } + + interface INIDeviceCapability {} + + [Watch (9,0), NoTV, NoMac, iOS (16,0), MacCatalyst (16,0)] + [Protocol] + interface NIDeviceCapability + { + [Abstract] + [Export ("supportsPreciseDistanceMeasurement")] + bool SupportsPreciseDistanceMeasurement { get; } + + [Abstract] + [Export ("supportsDirectionMeasurement")] + bool SupportsDirectionMeasurement { get; } + + [Abstract] + [Export ("supportsCameraAssistance")] + bool SupportsCameraAssistance { get; } + } + + [Watch (9,0), NoTV, NoMac, iOS (16,0), MacCatalyst (16,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface NIAlgorithmConvergence : NSCopying, NSSecureCoding + { + [Export ("status")] + NIAlgorithmConvergenceStatus Status { get; } + + [Export ("reasons")] + string[] Reasons { get; } + } } diff --git a/tests/monotouch-test/NearbyInteraction/NIAlgorithmConvergenceStatusReasonValuesTest.cs b/tests/monotouch-test/NearbyInteraction/NIAlgorithmConvergenceStatusReasonValuesTest.cs new file mode 100644 index 000000000000..91be067f973a --- /dev/null +++ b/tests/monotouch-test/NearbyInteraction/NIAlgorithmConvergenceStatusReasonValuesTest.cs @@ -0,0 +1,34 @@ +// Copyright 2022 Microsoft Corp. + +#if IOS || WATCH || __MACCATALYST__ + +using System; +using Foundation; +using ObjCRuntime; +using NearbyInteraction; +using NUnit.Framework; +using Xamarin.Utils; + +namespace MonoTouchFixtures.NearbyInteraction { + + [TestFixture] + [Preserve (AllMembers = true)] + public class NIAlgorithmConvergenceStatusReasonValues { + + [SetUp] + public void Setup () + { + TestRuntime.AssertXcodeVersion (14, 0); + } + + [Test] + public void GetConvergenceStatusReason () + { + var reason = NIAlgorithmConvergenceStatusReason.InsufficientHorizontalSweep; + // Assert.IsNotNull (GetConvergenceStatusReason (reason), "NIAlgorithmConvergenceStatusReason should not be null."); + Assert.IsNull (GetConvergenceStatusReason (reason), "NIAlgorithmConvergenceStatusReason should not be null."); + } + } +} + +#endif // IOS || WATCH || __MACCATALYST__ diff --git a/tests/xtro-sharpie/api-annotations-dotnet/iOS-NearbyInteraction.todo b/tests/xtro-sharpie/api-annotations-dotnet/iOS-NearbyInteraction.todo index b6b347951072..e69de29bb2d1 100644 --- a/tests/xtro-sharpie/api-annotations-dotnet/iOS-NearbyInteraction.todo +++ b/tests/xtro-sharpie/api-annotations-dotnet/iOS-NearbyInteraction.todo @@ -1,27 +0,0 @@ -!missing-enum! NIAlgorithmConvergenceStatus not bound -!missing-enum! NINearbyObjectVerticalDirectionEstimate not bound -!missing-enum-value! NIErrorCode native value NIErrorCodeAccessoryPeerDeviceUnavailable = -5882 not bound -!missing-enum-value! NIErrorCode native value NIErrorCodeInvalidARConfiguration = -5883 not bound -!missing-field! NIAlgorithmConvergenceStatusReasonInsufficientHorizontalSweep not bound -!missing-field! NIAlgorithmConvergenceStatusReasonInsufficientLighting not bound -!missing-field! NIAlgorithmConvergenceStatusReasonInsufficientMovement not bound -!missing-field! NIAlgorithmConvergenceStatusReasonInsufficientVerticalSweep not bound -!missing-field! NINearbyObjectAngleNotAvailable not bound -!missing-field! NINearbyObjectWorldTransformNotAvailable not bound -!missing-pinvoke! NIAlgorithmConvergenceStatusReasonDescription is not bound -!missing-protocol! NIDeviceCapability not bound -!missing-protocol-member! NISessionDelegate::session:didUpdateAlgorithmConvergence:forObject: not found -!missing-protocol-member! NISessionDelegate::sessionDidStartRunning: not found -!missing-selector! +NISession::deviceCapabilities not bound -!missing-selector! NIAlgorithmConvergence::reasons not bound -!missing-selector! NIAlgorithmConvergence::status not bound -!missing-selector! NINearbyAccessoryConfiguration::initWithAccessoryData:bluetoothPeerIdentifier:error: not bound -!missing-selector! NINearbyAccessoryConfiguration::isCameraAssistanceEnabled not bound -!missing-selector! NINearbyAccessoryConfiguration::setCameraAssistanceEnabled: not bound -!missing-selector! NINearbyObject::horizontalAngle not bound -!missing-selector! NINearbyObject::verticalDirectionEstimate not bound -!missing-selector! NINearbyPeerConfiguration::isCameraAssistanceEnabled not bound -!missing-selector! NINearbyPeerConfiguration::setCameraAssistanceEnabled: not bound -!missing-selector! NISession::setARSession: not bound -!missing-selector! NISession::worldTransformForObject: not bound -!missing-type! NIAlgorithmConvergence not bound diff --git a/tests/xtro-sharpie/iOS-NearbyInteraction.todo b/tests/xtro-sharpie/iOS-NearbyInteraction.todo index b6b347951072..e69de29bb2d1 100644 --- a/tests/xtro-sharpie/iOS-NearbyInteraction.todo +++ b/tests/xtro-sharpie/iOS-NearbyInteraction.todo @@ -1,27 +0,0 @@ -!missing-enum! NIAlgorithmConvergenceStatus not bound -!missing-enum! NINearbyObjectVerticalDirectionEstimate not bound -!missing-enum-value! NIErrorCode native value NIErrorCodeAccessoryPeerDeviceUnavailable = -5882 not bound -!missing-enum-value! NIErrorCode native value NIErrorCodeInvalidARConfiguration = -5883 not bound -!missing-field! NIAlgorithmConvergenceStatusReasonInsufficientHorizontalSweep not bound -!missing-field! NIAlgorithmConvergenceStatusReasonInsufficientLighting not bound -!missing-field! NIAlgorithmConvergenceStatusReasonInsufficientMovement not bound -!missing-field! NIAlgorithmConvergenceStatusReasonInsufficientVerticalSweep not bound -!missing-field! NINearbyObjectAngleNotAvailable not bound -!missing-field! NINearbyObjectWorldTransformNotAvailable not bound -!missing-pinvoke! NIAlgorithmConvergenceStatusReasonDescription is not bound -!missing-protocol! NIDeviceCapability not bound -!missing-protocol-member! NISessionDelegate::session:didUpdateAlgorithmConvergence:forObject: not found -!missing-protocol-member! NISessionDelegate::sessionDidStartRunning: not found -!missing-selector! +NISession::deviceCapabilities not bound -!missing-selector! NIAlgorithmConvergence::reasons not bound -!missing-selector! NIAlgorithmConvergence::status not bound -!missing-selector! NINearbyAccessoryConfiguration::initWithAccessoryData:bluetoothPeerIdentifier:error: not bound -!missing-selector! NINearbyAccessoryConfiguration::isCameraAssistanceEnabled not bound -!missing-selector! NINearbyAccessoryConfiguration::setCameraAssistanceEnabled: not bound -!missing-selector! NINearbyObject::horizontalAngle not bound -!missing-selector! NINearbyObject::verticalDirectionEstimate not bound -!missing-selector! NINearbyPeerConfiguration::isCameraAssistanceEnabled not bound -!missing-selector! NINearbyPeerConfiguration::setCameraAssistanceEnabled: not bound -!missing-selector! NISession::setARSession: not bound -!missing-selector! NISession::worldTransformForObject: not bound -!missing-type! NIAlgorithmConvergence not bound diff --git a/tests/xtro-sharpie/watchOS-NearbyInteraction.todo b/tests/xtro-sharpie/watchOS-NearbyInteraction.todo index 3dbcdfbeb50b..e69de29bb2d1 100644 --- a/tests/xtro-sharpie/watchOS-NearbyInteraction.todo +++ b/tests/xtro-sharpie/watchOS-NearbyInteraction.todo @@ -1,22 +0,0 @@ -!missing-enum! NIAlgorithmConvergenceStatus not bound -!missing-enum! NINearbyObjectVerticalDirectionEstimate not bound -!missing-enum-value! NIErrorCode native value NIErrorCodeAccessoryPeerDeviceUnavailable = -5882 not bound -!missing-enum-value! NIErrorCode native value NIErrorCodeInvalidARConfiguration = -5883 not bound -!missing-field! NIAlgorithmConvergenceStatusReasonInsufficientHorizontalSweep not bound -!missing-field! NIAlgorithmConvergenceStatusReasonInsufficientLighting not bound -!missing-field! NIAlgorithmConvergenceStatusReasonInsufficientMovement not bound -!missing-field! NIAlgorithmConvergenceStatusReasonInsufficientVerticalSweep not bound -!missing-field! NINearbyObjectAngleNotAvailable not bound -!missing-field! NINearbyObjectWorldTransformNotAvailable not bound -!missing-pinvoke! NIAlgorithmConvergenceStatusReasonDescription is not bound -!missing-protocol! NIDeviceCapability not bound -!missing-protocol-member! NISessionDelegate::session:didUpdateAlgorithmConvergence:forObject: not found -!missing-protocol-member! NISessionDelegate::sessionDidStartRunning: not found -!missing-selector! +NISession::deviceCapabilities not bound -!missing-selector! NIAlgorithmConvergence::reasons not bound -!missing-selector! NIAlgorithmConvergence::status not bound -!missing-selector! NINearbyObject::horizontalAngle not bound -!missing-selector! NINearbyObject::verticalDirectionEstimate not bound -!missing-selector! NISession::setARSession: not bound -!missing-selector! NISession::worldTransformForObject: not bound -!missing-type! NIAlgorithmConvergence not bound From 611cd935f3702c3a2807ae0818912e754e8c2b1d Mon Sep 17 00:00:00 2001 From: tj_devel709 Date: Thu, 1 Sep 2022 09:23:34 -0500 Subject: [PATCH 2/6] Allow manual bindings to pass --- ...IAlgorithmConvergenceStatusReasonValues.cs | 8 ++-- src/nearbyinteraction.cs | 42 +++---------------- ...orithmConvergenceStatusReasonValuesTest.cs | 7 ++-- .../NearbyInteraction/NINearbyObjectTest.cs | 18 ++++++++ 4 files changed, 29 insertions(+), 46 deletions(-) diff --git a/src/NearbyInteraction/NIAlgorithmConvergenceStatusReasonValues.cs b/src/NearbyInteraction/NIAlgorithmConvergenceStatusReasonValues.cs index 3f3c6af45b1d..3cec4435a0eb 100644 --- a/src/NearbyInteraction/NIAlgorithmConvergenceStatusReasonValues.cs +++ b/src/NearbyInteraction/NIAlgorithmConvergenceStatusReasonValues.cs @@ -33,7 +33,7 @@ public partial class NIAlgorithmConvergenceStatusReasonValues [iOS (16,0), NoMac, Watch (9,0), NoTV, MacCatalyst (16,0)] #endif // NET [DllImport (Constants.NearbyInteractionLibrary)] - static extern NativeHandle /* NSString */ NIAlgorithmConvergenceStatusReasonDescription (NativeHandle /* NSString */ reason); + static extern NativeHandle /* NSString */ NIAlgorithmConvergenceStatusReasonDescription (NativeHandle /* NIAlgorithmConvergenceStatusReason */ reason); #if NET [SupportedOSPlatform ("ios16.0")] @@ -43,11 +43,9 @@ public partial class NIAlgorithmConvergenceStatusReasonValues #else [iOS (16,0), NoMac, Watch (9,0), NoTV, MacCatalyst (16,0)] #endif // NET - public static NSString GetConvergenceStatusReason (NSString reason) + public static NSString GetConvergenceStatusReason (NIAlgorithmConvergenceStatusReason reason) { - if (reason is null) - ObjCRuntime.ThrowHelper.ThrowArgumentNullException (nameof (reason)); - return Runtime.GetNSObject (NIAlgorithmConvergenceStatusReasonDescription (reason.GetHandle ()))!; + return Runtime.GetNSObject (NIAlgorithmConvergenceStatusReasonDescription (reason.GetConstant ().GetHandle ()))!; } } } diff --git a/src/nearbyinteraction.cs b/src/nearbyinteraction.cs index a9aff406280b..95358ee46940 100644 --- a/src/nearbyinteraction.cs +++ b/src/nearbyinteraction.cs @@ -27,16 +27,6 @@ using MatrixFloat4x4 = global::OpenTK.NMatrix4; #endif -// #if NET -// using Vector3 = global::System.Numerics.Vector3; -// using MatrixFloat4x4 = global::CoreGraphics.NMatrix4; -// #elif WATCH || __MACCATALYST -// using MatrixFloat4x4 = Foundation.NSObject; -// #else -// using Vector3 = global::OpenTK.Vector3; -// using MatrixFloat4x4 = global::OpenTK.NMatrix4; -// #endif - #if !NET using NativeHandle = System.IntPtr; #endif @@ -97,23 +87,6 @@ Vector3 Direction { [Field ("NINearbyObjectAngleNotAvailable")] float AngleNotAvailable { get; } - // [BindAs (typeof (SCNMatrix4))] - // // [BindAs (typeof (MatrixFloat4x4))] - // [Watch (9,0), NoTV, NoMac, iOS (16,0), MacCatalyst (16,0)] - // [Field ("NINearbyObjectWorldTransformNotAvailable")] - // NSValue WorldTransformNotAvailable { get; } - - // [Internal] - // [Watch (9,0), NoTV, NoMac, iOS (16,0), MacCatalyst (16,0)] - // [Export ("getNINearbyObjectWorldTransformNotAvailable")] - // NativeHandle _GetWorldTransformNotAvailable (); - - // [Watch (9,0), NoTV, NoMac, iOS (16,0), MacCatalyst (16,0)] - // [Field ("NINearbyObjectWorldTransformNotAvailable")] - // MatrixFloat4x4 WorldTransformNotAvailable { - // [MarshalDirective (NativePrefix = "xamarin_simd__", Library = "__Internal")] get; - // } - [Watch (9,0), NoTV, NoMac, iOS (16,0), MacCatalyst (16,0)] [Export ("verticalDirectionEstimate")] NINearbyObjectVerticalDirectionEstimate VerticalDirectionEstimate { get; } @@ -235,25 +208,20 @@ interface NINearbyAccessoryConfiguration bool CameraAssistanceEnabled { [Bind ("isCameraAssistanceEnabled")] get; set; } } - [Static] [iOS (16,0), NoMac, Watch (9,0), NoTV, MacCatalyst (16,0)] - interface NIAlgorithmConvergenceStatusReason + public enum NIAlgorithmConvergenceStatusReason { - [Watch (9, 0), NoTV, NoMac, iOS (16, 0)] [Field ("NIAlgorithmConvergenceStatusReasonInsufficientHorizontalSweep")] - NSString InsufficientHorizontalSweep { get; } + InsufficientHorizontalSweep, - [Watch (9, 0), NoTV, NoMac, iOS (16, 0)] [Field ("NIAlgorithmConvergenceStatusReasonInsufficientVerticalSweep")] - NSString InsufficientVerticalSweep { get; } + InsufficientVerticalSweep, - [Watch (9, 0), NoTV, NoMac, iOS (16, 0)] [Field ("NIAlgorithmConvergenceStatusReasonInsufficientMovement")] - NSString InsufficientMovement { get; } + InsufficientMovement, - [Watch (9, 0), NoTV, NoMac, iOS (16, 0)] [Field ("NIAlgorithmConvergenceStatusReasonInsufficientLighting")] - NSString InsufficientLighting { get; } + InsufficientLighting, } interface INIDeviceCapability {} diff --git a/tests/monotouch-test/NearbyInteraction/NIAlgorithmConvergenceStatusReasonValuesTest.cs b/tests/monotouch-test/NearbyInteraction/NIAlgorithmConvergenceStatusReasonValuesTest.cs index 91be067f973a..d2ad85d86e21 100644 --- a/tests/monotouch-test/NearbyInteraction/NIAlgorithmConvergenceStatusReasonValuesTest.cs +++ b/tests/monotouch-test/NearbyInteraction/NIAlgorithmConvergenceStatusReasonValuesTest.cs @@ -13,7 +13,7 @@ namespace MonoTouchFixtures.NearbyInteraction { [TestFixture] [Preserve (AllMembers = true)] - public class NIAlgorithmConvergenceStatusReasonValues { + public class NIAlgorithmConvergenceStatusReasonValuesTest { [SetUp] public void Setup () @@ -22,11 +22,10 @@ public void Setup () } [Test] - public void GetConvergenceStatusReason () + public void GetConvergenceStatusReasonTest () { var reason = NIAlgorithmConvergenceStatusReason.InsufficientHorizontalSweep; - // Assert.IsNotNull (GetConvergenceStatusReason (reason), "NIAlgorithmConvergenceStatusReason should not be null."); - Assert.IsNull (GetConvergenceStatusReason (reason), "NIAlgorithmConvergenceStatusReason should not be null."); + Assert.IsNotNull (NIAlgorithmConvergenceStatusReasonValues.GetConvergenceStatusReason (reason), "NIAlgorithmConvergenceStatusReason should not be null."); } } } diff --git a/tests/monotouch-test/NearbyInteraction/NINearbyObjectTest.cs b/tests/monotouch-test/NearbyInteraction/NINearbyObjectTest.cs index ee9f10f09236..979d6926b3be 100644 --- a/tests/monotouch-test/NearbyInteraction/NINearbyObjectTest.cs +++ b/tests/monotouch-test/NearbyInteraction/NINearbyObjectTest.cs @@ -11,8 +11,10 @@ #if NET using System.Numerics; +using MatrixFloat4x4 = global::CoreGraphics.NMatrix4; #else using OpenTK; +using MatrixFloat4x4 = global::OpenTK.NMatrix4; #endif namespace MonoTouchFixtures.NearbyInteraction { @@ -42,6 +44,22 @@ public void DirectionNotAvailable () Assert.That (ptr [i], Is.EqualTo (zero), $"Position {i}"); } } + + [Test] + public void WorldTransformNotAvailable () + { + TestRuntime.AssertXcodeVersion (14, 0); + + MatrixFloat4x4 matrix = NINearbyObject.WorldTransformNotAvailable; + + unsafe { + MatrixFloat4x4* m = &matrix; + byte* ptr = (byte*) m; + byte zero = 0; + for (var i = 0; i < sizeof (MatrixFloat4x4); i++) + Assert.That (ptr [i], Is.EqualTo (zero), $"Position {i}"); + } + } } } From c8ab78bfb57b59c6306efe7bfc3b49e2f781f4b2 Mon Sep 17 00:00:00 2001 From: tj_devel709 Date: Thu, 1 Sep 2022 09:34:17 -0500 Subject: [PATCH 3/6] Remove extra file and spruce up some comments --- src/NearbyInteraction/NINearbyObject.cs | 2 +- src/avrouting.cs | 49 ------------------- src/nearbyinteraction.cs | 2 - .../iOS-NearbyInteraction.todo | 0 tests/xtro-sharpie/iOS-NearbyInteraction.todo | 0 .../watchOS-NearbyInteraction.todo | 0 6 files changed, 1 insertion(+), 52 deletions(-) delete mode 100644 src/avrouting.cs delete mode 100644 tests/xtro-sharpie/api-annotations-dotnet/iOS-NearbyInteraction.todo delete mode 100644 tests/xtro-sharpie/iOS-NearbyInteraction.todo delete mode 100644 tests/xtro-sharpie/watchOS-NearbyInteraction.todo diff --git a/src/NearbyInteraction/NINearbyObject.cs b/src/NearbyInteraction/NINearbyObject.cs index 0dbf0007f9e1..c6cf62b3cdc1 100644 --- a/src/NearbyInteraction/NINearbyObject.cs +++ b/src/NearbyInteraction/NINearbyObject.cs @@ -46,7 +46,7 @@ public static Vector3 DirectionNotAvailable { static MatrixFloat4x4? _WorldTransformNotAvailable; - // TODO: Link issue here + // Following similar strategy found here: https://github.com/xamarin/maccore/issues/2274 [Field ("NINearbyObjectWorldTransformNotAvailable", "NearbyInteraction")] public static MatrixFloat4x4 WorldTransformNotAvailable { get { diff --git a/src/avrouting.cs b/src/avrouting.cs deleted file mode 100644 index a3665d4b6a75..000000000000 --- a/src/avrouting.cs +++ /dev/null @@ -1,49 +0,0 @@ -// -// AVRouting bindings -// -// Authors: -// TJ Lambert -// -// Copyright 2022 Microsoft Corp. All rights reserved. -// - -using System; -using System.ComponentModel; -using ObjCRuntime; -using Foundation; - -#if !NET -using NativeHandle = System.IntPtr; -#endif - -namespace AVRouting { - [NoWatch, NoTV, NoMac, iOS (16,0)] - [BaseType (typeof (NSObject))] - interface AVCustomDeviceRoute - { - // @property (readonly, nonatomic) API_AVAILABLE(ios(16.0)) nw_endpoint_t networkEndpoint __attribute__((availability(ios, introduced=16.0))) __attribute__((availability(macos, unavailable))) __attribute__((availability(tvos, unavailable))) __attribute__((availability(watchos, unavailable))); - [NoWatch, NoTV, NoMac, iOS (16, 0)] - [Export ("networkEndpoint")] - OS_nw_endpoint NetworkEndpoint { get; } - - // @property (readonly, nonatomic) API_AVAILABLE(ios(16.0)) NSUUID * bluetoothIdentifier __attribute__((availability(ios, introduced=16.0))) __attribute__((availability(macos, unavailable))) __attribute__((availability(tvos, unavailable))) __attribute__((availability(watchos, unavailable))); - [NoWatch, NoTV, NoMac, iOS (16, 0)] - [Export ("bluetoothIdentifier")] - NSUuid BluetoothIdentifier { get; } - } - - [NoWatch, NoTV, NoMac, iOS (16,0)] - [BaseType (typeof (NSObject))] - interface AVCustomRoutingActionItem - { - // @property (copy, nonatomic) API_AVAILABLE(ios(16.0)) UTType * type __attribute__((availability(ios, introduced=16.0))) __attribute__((availability(macos, unavailable))) __attribute__((availability(tvos, unavailable))) __attribute__((availability(watchos, unavailable))); - [NoWatch, NoTV, NoMac, iOS (16, 0)] - [Export ("type", ArgumentSemantic.Copy)] - UTType Type { get; set; } - - // @property (copy, nonatomic) API_AVAILABLE(ios(16.0)) NSString * overrideTitle __attribute__((availability(ios, introduced=16.0))) __attribute__((availability(macos, unavailable))) __attribute__((availability(tvos, unavailable))) __attribute__((availability(watchos, unavailable))); - [NoWatch, NoTV, NoMac, iOS (16, 0)] - [Export ("overrideTitle")] - string OverrideTitle { get; set; } - } -} diff --git a/src/nearbyinteraction.cs b/src/nearbyinteraction.cs index 95358ee46940..4350c0edcdb8 100644 --- a/src/nearbyinteraction.cs +++ b/src/nearbyinteraction.cs @@ -130,12 +130,10 @@ interface NISession [Export ("invalidate")] void Invalidate (); - // ARSession is not available in Watch or MacCatalyst [Watch (9,0), NoTV, NoMac, iOS (16,0), MacCatalyst (16,0)] [Export ("setARSession:")] void SetARSession (ARSession session); - // MatrixFloat4x4 is not available in Watch or !NET MacCatalyst [Watch (9,0), NoTV, NoMac, iOS (16,0), MacCatalyst (16,0)] [Export ("worldTransformForObject:")] [MarshalDirective (NativePrefix = "xamarin_simd__", Library = "__Internal")] diff --git a/tests/xtro-sharpie/api-annotations-dotnet/iOS-NearbyInteraction.todo b/tests/xtro-sharpie/api-annotations-dotnet/iOS-NearbyInteraction.todo deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/tests/xtro-sharpie/iOS-NearbyInteraction.todo b/tests/xtro-sharpie/iOS-NearbyInteraction.todo deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/tests/xtro-sharpie/watchOS-NearbyInteraction.todo b/tests/xtro-sharpie/watchOS-NearbyInteraction.todo deleted file mode 100644 index e69de29bb2d1..000000000000 From 0ec34eb3fd25b92b243960bcb494dd18e1877906 Mon Sep 17 00:00:00 2001 From: tj_devel709 Date: Thu, 1 Sep 2022 09:48:56 -0500 Subject: [PATCH 4/6] simplify if --- src/nearbyinteraction.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/nearbyinteraction.cs b/src/nearbyinteraction.cs index 4350c0edcdb8..a1f34b83ed70 100644 --- a/src/nearbyinteraction.cs +++ b/src/nearbyinteraction.cs @@ -11,12 +11,10 @@ using Foundation; using CoreFoundation; using System; -#if __MACCATALYST__ +#if __MACCATALYST__ || !IOS using ARSession = Foundation.NSObject; -#elif IOS -using ARKit; #else -using ARSession = Foundation.NSObject; +using ARKit; #endif #if NET @@ -183,7 +181,7 @@ interface NISessionDelegate [Watch (9,0), NoTV, NoMac, iOS (16,0), MacCatalyst (16,0)] [Export ("sessionDidStartRunning:")] - void SessionDidStartRunning (NISession session); + void DidSessionStartRunning (NISession session); } [Watch (8,0), NoTV, NoMac, iOS (15,0), MacCatalyst (15,0)] From c735e822c94776bb3b87b4caf5e3a2046c4da5e1 Mon Sep 17 00:00:00 2001 From: tj_devel709 Date: Thu, 1 Sep 2022 10:08:47 -0500 Subject: [PATCH 5/6] add attributes and null check to manual file --- src/NearbyInteraction/NINearbyObject.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/NearbyInteraction/NINearbyObject.cs b/src/NearbyInteraction/NINearbyObject.cs index c6cf62b3cdc1..ce8704be4eec 100644 --- a/src/NearbyInteraction/NINearbyObject.cs +++ b/src/NearbyInteraction/NINearbyObject.cs @@ -46,6 +46,14 @@ public static Vector3 DirectionNotAvailable { static MatrixFloat4x4? _WorldTransformNotAvailable; +#if NET + [SupportedOSPlatform ("ios16.0")] + [SupportedOSPlatform ("maccatalyst16.0")] + [UnsupportedOSPlatform ("tvos")] + [UnsupportedOSPlatform ("macos")] +#else + [iOS (16,0), NoMac, Watch (9,0), NoTV, MacCatalyst (16,0)] +#endif // NET // Following similar strategy found here: https://github.com/xamarin/maccore/issues/2274 [Field ("NINearbyObjectWorldTransformNotAvailable", "NearbyInteraction")] public static MatrixFloat4x4 WorldTransformNotAvailable { @@ -53,6 +61,8 @@ public static MatrixFloat4x4 WorldTransformNotAvailable { if (_WorldTransformNotAvailable is null) { unsafe { MatrixFloat4x4 *pointer = (MatrixFloat4x4 *) Dlfcn.GetIndirect (Libraries.NearbyInteraction.Handle, "NINearbyObjectWorldTransformNotAvailable"); + if (pointer is null) + throw new PlatformNotSupportedException ("This property is not supported on this version of the OS"); _WorldTransformNotAvailable = *pointer; } } From 5eab7f27043b07e4d4b484545bc8036394c1f87c Mon Sep 17 00:00:00 2001 From: TJ Lambert Date: Thu, 1 Sep 2022 20:10:50 -0500 Subject: [PATCH 6/6] legacy ios intro did not like double unsupported attributes --- src/NearbyInteraction/NINearbyObject.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NearbyInteraction/NINearbyObject.cs b/src/NearbyInteraction/NINearbyObject.cs index ce8704be4eec..cc1e97bfeca4 100644 --- a/src/NearbyInteraction/NINearbyObject.cs +++ b/src/NearbyInteraction/NINearbyObject.cs @@ -52,7 +52,7 @@ public static Vector3 DirectionNotAvailable { [UnsupportedOSPlatform ("tvos")] [UnsupportedOSPlatform ("macos")] #else - [iOS (16,0), NoMac, Watch (9,0), NoTV, MacCatalyst (16,0)] + [iOS (16,0), Watch (9,0), MacCatalyst (16,0)] #endif // NET // Following similar strategy found here: https://github.com/xamarin/maccore/issues/2274 [Field ("NINearbyObjectWorldTransformNotAvailable", "NearbyInteraction")]