diff --git a/CODEOWNERS b/CODEOWNERS index 95a9e17610..275d959657 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -34,6 +34,8 @@ /src/avkit.cs @spouliot @dalexsoto /src/CallKit @dalexsoto /src/callkit.cs @dalexsoto +/src/CarPlay @dalexsoto +/src/carplay.cs @dalexsoto /src/CFNetwork @spouliot /src/cfnetwork.cs @spouliot /src/CloudKit @mandel-macaque diff --git a/src/CarPlay/CPNavigationAlert.cs b/src/CarPlay/CPNavigationAlert.cs new file mode 100644 index 0000000000..940ac3bcea --- /dev/null +++ b/src/CarPlay/CPNavigationAlert.cs @@ -0,0 +1,22 @@ +// +// CPNavigationAlert.cs +// +// Authors: +// Alex Soto +// +// Copyright 2018 Microsoft Corporation. All rights reserved. +// + +using System; +using Foundation; +using ObjCRuntime; + +#if XAMCORE_2_0 +namespace CarPlay { + public partial class CPNavigationAlert { + // Defined inside CPNavigationAlert.h + // static NSTimeInterval const CPNavigationAlertMinimumDuration = 10; + public const double MinimumDuration = 10; + } +} +#endif // XAMCORE_2_0 \ No newline at end of file diff --git a/src/Constants.iOS.cs.in b/src/Constants.iOS.cs.in index 61615382ef..2b1dbdb8bb 100644 --- a/src/Constants.iOS.cs.in +++ b/src/Constants.iOS.cs.in @@ -122,5 +122,7 @@ namespace MonoTouch { public const string BusinessChatLibrary = "/System/Library/Frameworks/BusinessChat.framework/BusinessChat"; // iOS 11.4 public const string ClassKitLibrary = "/System/Library/Frameworks/ClassKit.framework/ClassKit"; + // iOS 12.0 + public const string CarPlayLibrary = "/System/Library/Frameworks/CarPlay.framework/CarPlay"; } } diff --git a/src/carplay.cs b/src/carplay.cs new file mode 100644 index 0000000000..15db4630e6 --- /dev/null +++ b/src/carplay.cs @@ -0,0 +1,714 @@ +// +// CarPlay bindings +// +// Authors: +// Alex Soto +// +// Copyright 2018 Microsoft Corporation. All rights reserved. +// + +#if XAMCORE_2_0 + +using System; +using Foundation; +using ObjCRuntime; +using UIKit; +using CoreGraphics; +using MapKit; + +namespace CarPlay { + + // Just to please the generator that at this point does not know the hierarchy + interface NSUnitLength : NSUnit { } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [Native] + enum CPAlertStyle : ulong { + ActionSheet = 0, + FullScreen, + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [Native] + enum CPAlertActionStyle : ulong { + Default = 0, + Cancel, + Destructive, + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [Native] + enum CPBarButtonType : ulong { + Text, + Image, + } + + [Flags, NoWatch, NoTV, NoMac, iOS (12,0)] + [Native] + enum CPPanDirection : ulong { + None = 0, + Left = 1uL << 0, + Right = 1uL << 1, + Up = 1uL << 2, + Down = 1uL << 3, + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [Native] + enum CPNavigationAlertPriority : ulong { + Default = 0, + High, + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [Native] + public enum CPNavigationAlertDismissalContext : ulong { + Timeout = 0, + UserDismissed, + SystemDismissed, + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [Native] + public enum CPTripPauseReason : ulong { + Arrived = 1, + Loading = 2, + Locating = 3, + Rerouting = 4, + ProceedToRoute = 5, + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [Flags] + [Native] + enum CPLimitableUserInterface : ulong { + Keyboard = 1uL << 0, + Lists = 1uL << 1, + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface CPAlert : NSSecureCoding { + + [Export ("initWithTitleVariants:style:actions:")] + IntPtr Constructor (string [] title, CPAlertStyle style, CPAlertAction [] actions); + + [Export ("titleVariants", ArgumentSemantic.Copy)] + string [] TitleVariants { get; } + + [Export ("style")] + CPAlertStyle Style { get; } + + [Export ("actions", ArgumentSemantic.Strong)] + CPAlertAction [] Actions { get; } + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface CPAlertAction : NSSecureCoding { + + [Export ("initWithTitle:style:handler:")] + IntPtr Constructor (string title, CPAlertActionStyle style, Action handler); + + [Export ("title")] + string Title { get; } + + [Export ("style", ArgumentSemantic.Assign)] + CPAlertActionStyle Style { get; } + + [Export ("handler", ArgumentSemantic.Copy)] + Action Handler { get; } + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface CPBarButton : NSSecureCoding { + + [Export ("initWithType:handler:")] + [DesignatedInitializer] + IntPtr Constructor (CPBarButtonType type, [NullAllowed] Action handler); + + [Export ("enabled")] + bool Enabled { [Bind ("isEnabled")] get; set; } + + [Export ("buttonType", ArgumentSemantic.Assign)] + CPBarButtonType ButtonType { get; } + + [NullAllowed, Export ("image", ArgumentSemantic.Strong)] + UIImage Image { get; set; } + + [NullAllowed, Export ("title")] + string Title { get; set; } + } + + interface ICPBarButtonProviding { } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [Protocol] + interface CPBarButtonProviding { + + [Abstract] + [Export ("leadingNavigationBarButtons", ArgumentSemantic.Strong)] + CPBarButton [] LeadingNavigationBarButtons { get; set; } + + [Abstract] + [Export ("trailingNavigationBarButtons", ArgumentSemantic.Strong)] + CPBarButton [] TrailingNavigationBarButtons { get; set; } + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface CPGridButton : NSSecureCoding { + + [Export ("initWithTitleVariants:image:handler:")] + [DesignatedInitializer] + IntPtr Constructor (string [] titleVariants, UIImage image, [NullAllowed] Action handler); + + [Export ("enabled")] + bool Enabled { [Bind ("isEnabled")] get; set; } + + [Export ("image")] + UIImage Image { get; } + + [Export ("titleVariants")] + string [] TitleVariants { get; } + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [BaseType (typeof (CPTemplate))] + [DisableDefaultCtor] + interface CPGridTemplate : CPBarButtonProviding{ + + [Export ("initWithTitle:gridButtons:")] + IntPtr Constructor ([NullAllowed] string title, CPGridButton [] gridButtons); + + [Export ("gridButtons")] + CPGridButton [] GridButtons { get; } + + [Export ("title")] + string Title { get; } + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface CPInterfaceController { + + [Wrap ("WeakDelegate")] + [NullAllowed] + ICPInterfaceControllerDelegate Delegate { get; set; } + + [NullAllowed, Export ("delegate", ArgumentSemantic.Weak)] + NSObject WeakDelegate { get; set; } + + [Export ("setRootTemplate:animated:")] + void SetRootTemplate (CPTemplate rootTemplate, bool animated); + + [Export ("pushTemplate:animated:")] + void PushTemplate (CPTemplate templateToPush, bool animated); + + [Export ("popTemplateAnimated:")] + void PopTemplate (bool animated); + + [Export ("popToRootTemplateAnimated:")] + void PopToRootTemplate (bool animated); + + [Export ("popToTemplate:animated:")] + void PopToTemplate (CPTemplate targetTemplate, bool animated); + + [Export ("rootTemplate")] + CPTemplate RootTemplate { get; } + + [NullAllowed, Export ("topTemplate", ArgumentSemantic.Strong)] + CPTemplate TopTemplate { get; } + + [Export ("templates", ArgumentSemantic.Strong)] + CPTemplate [] Templates { get; } + + [Export ("presentAlert:")] + void PresentAlert (CPAlert alert); + + [Export ("dismissAlertAnimated:")] + void DismissAlert (bool animated); + } + + interface ICPInterfaceControllerDelegate { } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [Protocol, Model (AutoGeneratedName = true)] + [BaseType (typeof (NSObject))] + interface CPInterfaceControllerDelegate { + + [Export ("templateWillAppear:animated:")] + void TemplateWillAppear (CPTemplate aTemplate, bool animated); + + [Export ("templateDidAppear:animated:")] + void TemplateDidAppear (CPTemplate aTemplate, bool animated); + + [Export ("templateWillDisappear:animated:")] + void TemplateWillDisappear (CPTemplate aTemplate, bool animated); + + [Export ("templateDidDisappear:animated:")] + void TemplateDidDisappear (CPTemplate aTemplate, bool animated); + } + + interface ICPApplicationDelegate { } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [Protocol, Model (AutoGeneratedName = true)] + [BaseType (typeof (NSObject))] + interface CPApplicationDelegate : UIApplicationDelegate { + + [Abstract] + [Export ("application:didConnectCarInterfaceController:toWindow:")] + void DidConnectCarInterfaceController (UIApplication application, CPInterfaceController interfaceController, UIWindow window); + + [Abstract] + [Export ("application:didDisconnectCarInterfaceController:fromWindow:")] + void DidDisconnectCarInterfaceController (UIApplication application, CPInterfaceController interfaceController, UIWindow window); + + [Export ("application:didSelectNavigationAlert:")] + void DidSelectNavigationAlert (UIApplication application, CPNavigationAlert navigationAlert); + + [Export ("application:didSelectManeuver:")] + void DidSelectManeuver (UIApplication application, CPManeuver maneuver); + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface CPListItem : NSSecureCoding { + + [Field ("CPMaximumListItemImageSize")] + CGSize MaximumListItemImageSize { get; } + + [Export ("initWithText:detailText:image:showsDisclosureIndicator:")] + IntPtr Constructor ([NullAllowed] string text, [NullAllowed] string detailText, [NullAllowed] UIImage image, bool showsDisclosureIndicator); + + [Export ("initWithText:detailText:image:")] + IntPtr Constructor ([NullAllowed] string text, [NullAllowed] string detailText, [NullAllowed] UIImage image); + + [Export ("initWithText:detailText:")] + IntPtr Constructor ([NullAllowed] string text, [NullAllowed] string detailText); + + [NullAllowed, Export ("text")] + string Text { get; } + + [NullAllowed, Export ("detailText")] + string DetailText { get; } + + [NullAllowed, Export ("image", ArgumentSemantic.Strong)] + UIImage Image { get; } + + [Export ("showsDisclosureIndicator")] + bool ShowsDisclosureIndicator { get; } + + [NullAllowed, Export ("userInfo", ArgumentSemantic.Strong)] + NSObject UserInfo { get; set; } + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface CPListSection : NSSecureCoding { + + [Export ("initWithItems:header:sectionIndexTitle:")] + IntPtr Constructor (CPListItem [] items, [NullAllowed] string header, [NullAllowed] string sectionIndexTitle); + + [Export ("initWithItems:")] + IntPtr Constructor (CPListItem [] items); + + [NullAllowed, Export ("header")] + string Header { get; } + + [NullAllowed, Export ("sectionIndexTitle")] + string SectionIndexTitle { get; } + + [Export ("items", ArgumentSemantic.Copy)] + CPListItem [] Items { get; } + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [BaseType (typeof (CPTemplate))] + [DisableDefaultCtor] + interface CPListTemplate : CPBarButtonProviding { + + [Export ("initWithSections:")] + IntPtr Constructor (CPListSection [] sections); + + [Wrap ("WeakDelegate")] + [NullAllowed] + ICPListTemplateDelegate Delegate { get; set; } + + [NullAllowed, Export ("delegate", ArgumentSemantic.Weak)] + NSObject WeakDelegate { get; set; } + + [Export ("sections", ArgumentSemantic.Copy)] + CPListSection [] Sections { get; } + + [NullAllowed, Export ("title")] + string Title { get; set; } + + [Export ("updateSections:")] + void UpdateSections (CPListSection [] sections); + } + + interface ICPListTemplateDelegate { } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [Protocol, Model (AutoGeneratedName = true)] + [BaseType (typeof (NSObject))] + interface CPListTemplateDelegate { + + [Abstract] + [Export ("listTemplate:didSelectListItem:completionHandler:")] + void DidSelectListItem (CPListTemplate listTemplate, CPListItem item, Action completionHandler); + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [BaseType (typeof (NSObject))] + interface CPManeuver : NSCopying, NSSecureCoding { + + [NullAllowed, Export ("symbol", ArgumentSemantic.Strong)] + UIImage Symbol { get; set; } + + [Export ("instructionVariants", ArgumentSemantic.Copy)] + string [] InstructionVariants { get; set; } + + [NullAllowed, Export ("distanceFromPreviousManeuver", ArgumentSemantic.Copy)] + NSMeasurement DistanceFromPreviousManeuver { get; set; } + + [NullAllowed, Export ("userInfo", ArgumentSemantic.Strong)] + NSObject UserInfo { get; set; } + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface CPMapButton : NSSecureCoding { + + [Export ("initWithHandler:")] + [DesignatedInitializer] + IntPtr Constructor ([NullAllowed] Action handler); + + [Export ("enabled")] + bool Enabled { [Bind ("isEnabled")] get; set; } + + [Export ("hidden")] + bool Hidden { [Bind ("isHidden")] get; set; } + + [NullAllowed, Export ("image", ArgumentSemantic.Strong)] + UIImage Image { get; set; } + + [NullAllowed, Export ("focusedImage", ArgumentSemantic.Strong)] + UIImage FocusedImage { get; set; } + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [BaseType (typeof (CPTemplate))] + interface CPMapTemplate : CPBarButtonProviding { + + [Export ("mapButtons", ArgumentSemantic.Strong)] + CPMapButton [] MapButtons { get; set; } + + [Export ("showTripPreviews:")] + void ShowTripPreviews (CPTrip [] tripPreviews); + + [Export ("hideTripPreviews")] + void HideTripPreviews (); + + [Export ("updateTravelEstimates:forTrip:")] + void UpdateTravelEstimates (CPTravelEstimates estimates, CPTrip trip); + + [Export ("startNavigationSessionForTrip:")] + CPNavigationSession StartNavigationSession (CPTrip trip); + + [Export ("automaticallyHidesNavigationBar")] + bool AutomaticallyHidesNavigationBar { get; set; } + + [Export ("hidesButtonsWithNavigationBar")] + bool HidesButtonsWithNavigationBar { get; set; } + + [Wrap ("WeakMapDelegate")] + [NullAllowed] + ICPMapTemplateDelegate MapDelegate { get; set; } + + [NullAllowed, Export ("mapDelegate", ArgumentSemantic.Weak)] + NSObject WeakMapDelegate { get; set; } + + [Export ("showPanningInterfaceAnimated:")] + void ShowPanningInterface (bool animated); + + [Export ("dismissPanningInterfaceAnimated:")] + void DismissPanningInterface (bool animated); + + [NullAllowed, Export ("currentNavigationAlert", ArgumentSemantic.Strong)] + CPNavigationAlert CurrentNavigationAlert { get; } + + [Export ("presentNavigationAlert:animated:")] + void PresentNavigationAlert (CPNavigationAlert navigationAlert, bool animated); + + [Async] + [Export ("dismissNavigationAlertAnimated:completion:")] + void DismissNavigationAlert (bool animated, Action completion); + } + + interface ICPMapTemplateDelegate { } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [Protocol, Model (AutoGeneratedName = true)] + [BaseType (typeof (NSObject))] + interface CPMapTemplateDelegate { + + [Export ("mapTemplate:shouldShowNotificationForManeuver:")] + bool ShouldShowNotificationForManeuver (CPMapTemplate mapTemplate, CPManeuver maneuver); + + [Export ("mapTemplate:shouldUpdateNotificationForManeuver:withTravelEstimates:")] + bool ShouldUpdateNotificationForManeuver (CPMapTemplate mapTemplate, CPManeuver maneuver, CPTravelEstimates travelEstimates); + + [Export ("mapTemplate:shouldShowNotificationForNavigationAlert:")] + bool ShouldShowNotificationForNavigationAlert (CPMapTemplate mapTemplate, CPNavigationAlert navigationAlert); + + [Export ("mapTemplateDidShowPanningInterface:")] + void DidShowPanningInterface (CPMapTemplate mapTemplate); + + [Export ("mapTemplateWillDismissPanningInterface:")] + void WillDismissPanningInterface (CPMapTemplate mapTemplate); + + [Export ("mapTemplateDidDismissPanningInterface:")] + void DidDismissPanningInterface (CPMapTemplate mapTemplate); + + [Export ("mapTemplate:panBeganWithDirection:")] + void PanBegan (CPMapTemplate mapTemplate, CPPanDirection direction); + + [Export ("mapTemplate:panEndedWithDirection:")] + void PanEnded (CPMapTemplate mapTemplate, CPPanDirection direction); + + [Export ("mapTemplate:panWithDirection:")] + void Pan (CPMapTemplate mapTemplate, CPPanDirection direction); + + [Export ("mapTemplate:willShowNavigationAlert:")] + void WillShowNavigationAlert (CPMapTemplate mapTemplate, CPNavigationAlert navigationAlert); + + [Export ("mapTemplate:didShowNavigationAlert:")] + void DidShowNavigationAlert (CPMapTemplate mapTemplate, CPNavigationAlert navigationAlert); + + [Export ("mapTemplate:willDismissNavigationAlert:dismissalContext:")] + void WillDismissNavigationAlert (CPMapTemplate mapTemplate, CPNavigationAlert navigationAlert, CPNavigationAlertDismissalContext dismissalContext); + + [Export ("mapTemplate:didDismissNavigationAlert:dismissalContext:")] + void DidDismissNavigationAlert (CPMapTemplate mapTemplate, CPNavigationAlert navigationAlert, CPNavigationAlertDismissalContext dismissalContext); + + [Export ("mapTemplate:selectedPreviewForTrip:usingRouteChoice:")] + void SelectedPreview (CPMapTemplate mapTemplate, CPTrip trip, CPRouteChoice routeChoice); + + [Export ("mapTemplate:startedTrip:usingRouteChoice:")] + void StartedTrip (CPMapTemplate mapTemplate, CPTrip trip, CPRouteChoice routeChoice); + + [Export ("mapTemplateDidCancelNavigation:")] + void DidCancelNavigation (CPMapTemplate mapTemplate); + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface CPNavigationAlert : NSSecureCoding { + + [Export ("initWithTitleVariants:subtitleVariants:image:priority:primaryAction:secondaryAction:duration:")] + IntPtr Constructor (string [] titleVariants, [NullAllowed] string [] subtitleVariants, [NullAllowed] UIImage image, CPNavigationAlertPriority priority, CPAlertAction primaryAction, [NullAllowed] CPAlertAction secondaryAction, double duration); + + [Export ("alertPriority")] + CPNavigationAlertPriority AlertPriority { get; } + + [Export ("titleVariants", ArgumentSemantic.Copy)] + string [] TitleVariants { get; } + + [Export ("subtitleVariants", ArgumentSemantic.Copy)] + string [] SubtitleVariants { get; } + + [NullAllowed, Export ("image", ArgumentSemantic.Copy)] + UIImage Image { get; } + + [Export ("primaryAction", ArgumentSemantic.Strong)] + CPAlertAction PrimaryAction { get; } + + [NullAllowed, Export ("secondaryAction", ArgumentSemantic.Strong)] + CPAlertAction SecondaryAction { get; } + + [Export ("duration")] + double Duration { get; } + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface CPTravelEstimates : NSSecureCoding { + + [Export ("initWithDistanceRemaining:timeRemaining:")] + [DesignatedInitializer] + IntPtr Constructor (NSMeasurement distance, double time); + + [Export ("distanceRemaining", ArgumentSemantic.Copy)] + NSMeasurement DistanceRemaining { get; } + + [Export ("timeRemaining")] + double TimeRemaining { get; } + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface CPNavigationSession { + + [Export ("pauseTripForReason:")] + void PauseTrip (CPTripPauseReason reason); + + [Export ("finishTrip")] + void FinishTrip (); + + [Export ("cancelTrip")] + void CancelTrip (); + + [Export ("upcomingManeuvers", ArgumentSemantic.Copy)] + CPManeuver [] UpcomingManeuvers { get; set; } + + [Export ("trip", ArgumentSemantic.Strong)] + CPTrip Trip { get; } + + [Export ("updateTravelEstimates:forManeuver:")] + void UpdateTravelEstimates (CPTravelEstimates estimates, CPManeuver maneuver); + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [BaseType (typeof (CPTemplate))] + interface CPSearchTemplate { + + [Wrap ("WeakDelegate")] + [NullAllowed] + ICPSearchTemplateDelegate Delegate { get; set; } + + [NullAllowed, Export ("delegate", ArgumentSemantic.Weak)] + NSObject WeakDelegate { get; set; } + } + + interface ICPSearchTemplateDelegate { } + delegate void CPSearchTemplateDelegateUpdateHandler (CPListItem [] searchResults); + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [Protocol, Model (AutoGeneratedName = true)] + [BaseType (typeof (NSObject))] + interface CPSearchTemplateDelegate { + + [Abstract] + [Export ("searchTemplate:updatedSearchText:completionHandler:")] + void UpdatedSearchText (CPSearchTemplate searchTemplate, string searchText, CPSearchTemplateDelegateUpdateHandler completionHandler); + + [Abstract] + [Export ("searchTemplate:selectedResult:completionHandler:")] + void SelectedResult (CPSearchTemplate searchTemplate, CPListItem item, Action completionHandler); + + [Export ("searchTemplateSearchButtonPressed:")] + void SearchButtonPressed (CPSearchTemplate searchTemplate); + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface CPSessionConfiguration { + + [Export ("initWithDelegate:")] + [DesignatedInitializer] + IntPtr Constructor (ICPSessionConfigurationDelegate @delegate); + + [Export ("limitedUserInterfaces")] + CPLimitableUserInterface LimitedUserInterfaces { get; } + + [Wrap ("WeakDelegate")] + [NullAllowed] + ICPSessionConfigurationDelegate Delegate { get; set; } + + [NullAllowed, Export ("delegate", ArgumentSemantic.Weak)] + NSObject WeakDelegate { get; set; } + } + + interface ICPSessionConfigurationDelegate { } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [Protocol, Model ( AutoGeneratedName = true)] + [BaseType (typeof (NSObject))] + interface CPSessionConfigurationDelegate { + + [Abstract] + [Export ("sessionConfiguration:limitedUserInterfacesChanged:")] + void LimitedUserInterfacesChanged (CPSessionConfiguration sessionConfiguration, CPLimitableUserInterface limitedUserInterfaces); + } + + [Abstract] + [NoWatch, NoTV, NoMac, iOS (12,0)] + [BaseType (typeof (NSObject))] + interface CPTemplate : NSSecureCoding { + + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface CPRouteChoice : NSCopying, NSSecureCoding { + + [Export ("initWithSummaryVariants:additionalInformationVariants:")] + [DesignatedInitializer] + IntPtr Constructor (string [] summaryVariants, string [] additionalInformationVariants); + + [Export ("summaryVariants", ArgumentSemantic.Copy)] + string [] SummaryVariants { get; } + + [Export ("additionalInformationVariants", ArgumentSemantic.Copy)] + string [] AdditionalInformationVariants { get; } + + [NullAllowed, Export ("userInfo", ArgumentSemantic.Strong)] + NSObject UserInfo { get; set; } + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [BaseType (typeof (NSObject))] + [DisableDefaultCtor] + interface CPTrip : NSSecureCoding { + + [Export ("initWithOrigin:destination:routeChoices:")] + [DesignatedInitializer] + IntPtr Constructor (MKMapItem origin, MKMapItem destination, CPRouteChoice [] routeChoices); + + [Export ("origin", ArgumentSemantic.Strong)] + MKMapItem Origin { get; } + + [Export ("destination", ArgumentSemantic.Strong)] + MKMapItem Destination { get; } + + [Export ("routeChoices", ArgumentSemantic.Copy)] + CPRouteChoice [] RouteChoices { get; } + + [NullAllowed, Export ("userInfo", ArgumentSemantic.Strong)] + NSObject UserInfo { get; set; } + } + + [NoWatch, NoTV, NoMac, iOS (12,0)] + [BaseType (typeof (CPTemplate))] + [DisableDefaultCtor] + interface CPVoiceControlTemplate { + + [Export ("initWithTitleVariants:animatedImage:")] + IntPtr Constructor (string [] titleVariants, UIImage animatedImage); + + [Export ("titleVariants", ArgumentSemantic.Copy)] + string [] TitleVariants { get; } + + [Export ("animatedImage", ArgumentSemantic.Strong)] + UIImage AnimatedImage { get; } + } +} + +#endif // XAMCORE_2_0 diff --git a/src/frameworks.sources b/src/frameworks.sources index c52cad4542..ddda0b3229 100644 --- a/src/frameworks.sources +++ b/src/frameworks.sources @@ -294,6 +294,11 @@ BUSINESSCHAT_SOURCES = \ CALLKIT_SOURCES = \ CallKit/CXProvider.cs \ +# CarPlay + +CARPLAY_SOURCES = \ + CarPlay/CPNavigationAlert.cs \ + # ClassKit CLASSKIT_SOURCES = \ @@ -1723,6 +1728,7 @@ IOS_FRAMEWORKS = \ AudioUnit \ BusinessChat \ CallKit \ + CarPlay \ CFNetwork \ ClassKit \ CloudKit \ diff --git a/tests/xtro-sharpie/iOS-CarPlay.todo b/tests/xtro-sharpie/iOS-CarPlay.todo index d20301ec10..e69de29bb2 100644 --- a/tests/xtro-sharpie/iOS-CarPlay.todo +++ b/tests/xtro-sharpie/iOS-CarPlay.todo @@ -1,163 +0,0 @@ -!missing-enum! CPAlertActionStyle not bound -!missing-enum! CPAlertStyle not bound -!missing-enum! CPBarButtonType not bound -!missing-enum! CPLimitableUserInterface not bound -!missing-enum! CPNavigationAlertDismissalContext not bound -!missing-enum! CPNavigationAlertPriority not bound -!missing-enum! CPPanDirection not bound -!missing-enum! CPTripPauseReason not bound -!missing-field! CPMaximumListItemImageSize not bound -!missing-protocol! CPApplicationDelegate not bound -!missing-protocol! CPBarButtonProviding not bound -!missing-protocol! CPInterfaceControllerDelegate not bound -!missing-protocol! CPListTemplateDelegate not bound -!missing-protocol! CPMapTemplateDelegate not bound -!missing-protocol! CPSearchTemplateDelegate not bound -!missing-protocol! CPSessionConfigurationDelegate not bound -!missing-selector! CPAlert::actions not bound -!missing-selector! CPAlert::initWithTitleVariants:style:actions: not bound -!missing-selector! CPAlert::style not bound -!missing-selector! CPAlert::titleVariants not bound -!missing-selector! CPAlertAction::handler not bound -!missing-selector! CPAlertAction::initWithTitle:style:handler: not bound -!missing-selector! CPAlertAction::style not bound -!missing-selector! CPAlertAction::title not bound -!missing-selector! CPBarButton::buttonType not bound -!missing-selector! CPBarButton::image not bound -!missing-selector! CPBarButton::initWithType:handler: not bound -!missing-selector! CPBarButton::isEnabled not bound -!missing-selector! CPBarButton::setEnabled: not bound -!missing-selector! CPBarButton::setImage: not bound -!missing-selector! CPBarButton::setTitle: not bound -!missing-selector! CPBarButton::title not bound -!missing-selector! CPGridButton::image not bound -!missing-selector! CPGridButton::initWithTitleVariants:image:handler: not bound -!missing-selector! CPGridButton::isEnabled not bound -!missing-selector! CPGridButton::setEnabled: not bound -!missing-selector! CPGridButton::titleVariants not bound -!missing-selector! CPGridTemplate::gridButtons not bound -!missing-selector! CPGridTemplate::initWithTitle:gridButtons: not bound -!missing-selector! CPGridTemplate::title not bound -!missing-selector! CPInterfaceController::delegate not bound -!missing-selector! CPInterfaceController::dismissAlertAnimated: not bound -!missing-selector! CPInterfaceController::popTemplateAnimated: not bound -!missing-selector! CPInterfaceController::popToRootTemplateAnimated: not bound -!missing-selector! CPInterfaceController::popToTemplate:animated: not bound -!missing-selector! CPInterfaceController::presentAlert: not bound -!missing-selector! CPInterfaceController::pushTemplate:animated: not bound -!missing-selector! CPInterfaceController::rootTemplate not bound -!missing-selector! CPInterfaceController::setDelegate: not bound -!missing-selector! CPInterfaceController::setRootTemplate:animated: not bound -!missing-selector! CPInterfaceController::templates not bound -!missing-selector! CPInterfaceController::topTemplate not bound -!missing-selector! CPListItem::detailText not bound -!missing-selector! CPListItem::image not bound -!missing-selector! CPListItem::initWithText:detailText: not bound -!missing-selector! CPListItem::initWithText:detailText:image: not bound -!missing-selector! CPListItem::initWithText:detailText:image:showsDisclosureIndicator: not bound -!missing-selector! CPListItem::setUserInfo: not bound -!missing-selector! CPListItem::showsDisclosureIndicator not bound -!missing-selector! CPListItem::text not bound -!missing-selector! CPListItem::userInfo not bound -!missing-selector! CPListSection::header not bound -!missing-selector! CPListSection::initWithItems: not bound -!missing-selector! CPListSection::initWithItems:header:sectionIndexTitle: not bound -!missing-selector! CPListSection::items not bound -!missing-selector! CPListSection::sectionIndexTitle not bound -!missing-selector! CPListTemplate::delegate not bound -!missing-selector! CPListTemplate::initWithSections: not bound -!missing-selector! CPListTemplate::sections not bound -!missing-selector! CPListTemplate::setDelegate: not bound -!missing-selector! CPListTemplate::setTitle: not bound -!missing-selector! CPListTemplate::title not bound -!missing-selector! CPListTemplate::updateSections: not bound -!missing-selector! CPManeuver::distanceFromPreviousManeuver not bound -!missing-selector! CPManeuver::instructionVariants not bound -!missing-selector! CPManeuver::setDistanceFromPreviousManeuver: not bound -!missing-selector! CPManeuver::setInstructionVariants: not bound -!missing-selector! CPManeuver::setSymbol: not bound -!missing-selector! CPManeuver::setUserInfo: not bound -!missing-selector! CPManeuver::symbol not bound -!missing-selector! CPManeuver::userInfo not bound -!missing-selector! CPMapButton::focusedImage not bound -!missing-selector! CPMapButton::image not bound -!missing-selector! CPMapButton::initWithHandler: not bound -!missing-selector! CPMapButton::isEnabled not bound -!missing-selector! CPMapButton::isHidden not bound -!missing-selector! CPMapButton::setEnabled: not bound -!missing-selector! CPMapButton::setFocusedImage: not bound -!missing-selector! CPMapButton::setHidden: not bound -!missing-selector! CPMapButton::setImage: not bound -!missing-selector! CPMapTemplate::automaticallyHidesNavigationBar not bound -!missing-selector! CPMapTemplate::currentNavigationAlert not bound -!missing-selector! CPMapTemplate::dismissNavigationAlertAnimated:completion: not bound -!missing-selector! CPMapTemplate::dismissPanningInterfaceAnimated: not bound -!missing-selector! CPMapTemplate::hidesButtonsWithNavigationBar not bound -!missing-selector! CPMapTemplate::mapButtons not bound -!missing-selector! CPMapTemplate::mapDelegate not bound -!missing-selector! CPMapTemplate::presentNavigationAlert:animated: not bound -!missing-selector! CPMapTemplate::setAutomaticallyHidesNavigationBar: not bound -!missing-selector! CPMapTemplate::setHidesButtonsWithNavigationBar: not bound -!missing-selector! CPMapTemplate::setMapButtons: not bound -!missing-selector! CPMapTemplate::setMapDelegate: not bound -!missing-selector! CPMapTemplate::showPanningInterfaceAnimated: not bound -!missing-selector! CPMapTemplate::showTripPreviews: not bound -!missing-selector! CPMapTemplate::startNavigationSessionForTrip: not bound -!missing-selector! CPMapTemplate::updateTravelEstimates:forTrip: not bound -!missing-selector! CPNavigationAlert::alertPriority not bound -!missing-selector! CPNavigationAlert::duration not bound -!missing-selector! CPNavigationAlert::image not bound -!missing-selector! CPNavigationAlert::initWithTitleVariants:subtitleVariants:image:priority:primaryAction:secondaryAction:duration: not bound -!missing-selector! CPNavigationAlert::primaryAction not bound -!missing-selector! CPNavigationAlert::secondaryAction not bound -!missing-selector! CPNavigationAlert::subtitleVariants not bound -!missing-selector! CPNavigationAlert::titleVariants not bound -!missing-selector! CPNavigationSession::pauseTripForReason: not bound -!missing-selector! CPNavigationSession::setUpcomingManeuvers: not bound -!missing-selector! CPNavigationSession::trip not bound -!missing-selector! CPNavigationSession::upcomingManeuvers not bound -!missing-selector! CPNavigationSession::updateTravelEstimates:forManeuver: not bound -!missing-selector! CPRouteChoice::additionalInformationVariants not bound -!missing-selector! CPRouteChoice::initWithSummaryVariants:additionalInformationVariants: not bound -!missing-selector! CPRouteChoice::setUserInfo: not bound -!missing-selector! CPRouteChoice::summaryVariants not bound -!missing-selector! CPRouteChoice::userInfo not bound -!missing-selector! CPSearchTemplate::delegate not bound -!missing-selector! CPSearchTemplate::setDelegate: not bound -!missing-selector! CPSessionConfiguration::delegate not bound -!missing-selector! CPSessionConfiguration::initWithDelegate: not bound -!missing-selector! CPSessionConfiguration::limitedUserInterfaces not bound -!missing-selector! CPSessionConfiguration::setDelegate: not bound -!missing-selector! CPTravelEstimates::distanceRemaining not bound -!missing-selector! CPTravelEstimates::initWithDistanceRemaining:timeRemaining: not bound -!missing-selector! CPTravelEstimates::timeRemaining not bound -!missing-selector! CPTrip::destination not bound -!missing-selector! CPTrip::initWithOrigin:destination:routeChoices: not bound -!missing-selector! CPTrip::origin not bound -!missing-selector! CPTrip::routeChoices not bound -!missing-selector! CPTrip::setUserInfo: not bound -!missing-selector! CPTrip::userInfo not bound -!missing-selector! CPVoiceControlTemplate::animatedImage not bound -!missing-selector! CPVoiceControlTemplate::initWithTitleVariants:animatedImage: not bound -!missing-selector! CPVoiceControlTemplate::titleVariants not bound -!missing-type! CPAlert not bound -!missing-type! CPAlertAction not bound -!missing-type! CPBarButton not bound -!missing-type! CPGridButton not bound -!missing-type! CPGridTemplate not bound -!missing-type! CPInterfaceController not bound -!missing-type! CPListItem not bound -!missing-type! CPListSection not bound -!missing-type! CPListTemplate not bound -!missing-type! CPManeuver not bound -!missing-type! CPMapButton not bound -!missing-type! CPMapTemplate not bound -!missing-type! CPNavigationAlert not bound -!missing-type! CPNavigationSession not bound -!missing-type! CPRouteChoice not bound -!missing-type! CPSearchTemplate not bound -!missing-type! CPSessionConfiguration not bound -!missing-type! CPTemplate not bound -!missing-type! CPTravelEstimates not bound -!missing-type! CPTrip not bound -!missing-type! CPVoiceControlTemplate not bound diff --git a/tools/common/Frameworks.cs b/tools/common/Frameworks.cs index 703333217e..9ccf42c9ad 100644 --- a/tools/common/Frameworks.cs +++ b/tools/common/Frameworks.cs @@ -281,6 +281,8 @@ public class Frameworks : Dictionary { "BusinessChat", "BusinessChat", 11, 3 }, { "ClassKit", "ClassKit", 11,4 }, + + { "CarPlay", "CarPlay", 12,0 }, }; } return ios_frameworks; diff --git a/tools/mtouch/Makefile b/tools/mtouch/Makefile index 22452289dc..9da9d3f789 100644 --- a/tools/mtouch/Makefile +++ b/tools/mtouch/Makefile @@ -301,7 +301,10 @@ SIMLAUNCHER_FRAMEWORKS = \ \ -weak_framework IdentityLookup \ -weak_framework BusinessChat \ - -weak_framework ClassKit + -weak_framework ClassKit \ + \ + -weak_framework CarPlay \ + # note: there _was_ no CoreAudioKit.framework or Metal.framework for the simulator (before recent iOS9 betas) # note 2: there's no GameKit, in iOS 9 (beta 3 at least), you're supposed to reference GameCenter instead (looks fixed in beta 4)