[uikit] UIAccessibility.RequestGuidedAccessSession completion handler is an ObjC block. Fix #59196 (#2917)

Reference:
https://bugzilla.xamarin.com/show_bug.cgi?id=59196
This commit is contained in:
Sebastien Pouliot 2017-10-24 16:47:10 -04:00 коммит произвёл GitHub
Родитель 523e95182e
Коммит 584da1da18
2 изменённых файлов: 22 добавлений и 17 удалений

Просмотреть файл

@ -197,16 +197,21 @@ namespace XamCore.UIKit {
// UIAccessibility.h
[iOS (7,0)]
[DllImport (Constants.UIKitLibrary)]
extern static void UIAccessibilityRequestGuidedAccessSession (/* BOOL */ bool enable, /* void(^completionHandler)(BOOL didSucceed) */ Action<bool> completionHandler);
extern unsafe static void UIAccessibilityRequestGuidedAccessSession (/* BOOL */ bool enable, /* void(^completionHandler)(BOOL didSucceed) */ void * completionHandler);
[iOS (7,0)]
public static void RequestGuidedAccessSession (bool enable, Action<bool> completionHandler)
{
callback = completionHandler;
if (callback == null)
UIAccessibilityRequestGuidedAccessSession (enable, null);
else
UIAccessibilityRequestGuidedAccessSession (enable, RequestGuidedAccessSessionBridge);
unsafe {
BlockLiteral *block_ptr_handler;
BlockLiteral block_handler;
block_handler = new BlockLiteral ();
block_ptr_handler = &block_handler;
block_handler.SetupBlock (callback, completionHandler);
UIAccessibilityRequestGuidedAccessSession (enable, (void*) block_ptr_handler);
block_ptr_handler->CleanupBlock ();
}
}
[iOS (7,0)]
@ -219,18 +224,18 @@ namespace XamCore.UIKit {
return tcs.Task;
}
static Action<bool> callback;
internal delegate void InnerRequestGuidedAccessSession (IntPtr block, bool enable);
static readonly InnerRequestGuidedAccessSession callback = TrampolineRequestGuidedAccessSession;
[MonoPInvokeCallback (typeof (Action<bool>))]
static void RequestGuidedAccessSessionBridge (bool didSucceed)
[MonoPInvokeCallback (typeof (InnerRequestGuidedAccessSession))]
static unsafe void TrampolineRequestGuidedAccessSession (IntPtr block, bool enable)
{
if (callback != null) {
callback (didSucceed);
callback = null;
}
var descriptor = (BlockLiteral *) block;
var del = (Action<bool>) (descriptor->Target);
if (del != null)
del (enable);
}
[iOS (8,0)]
[DllImport (Constants.UIKitLibrary)]
static extern bool UIAccessibilityDarkerSystemColorsEnabled ();

Просмотреть файл

@ -34,9 +34,9 @@ namespace MonoTouchFixtures.UIKit {
Assert.Inconclusive ("Requires iOS7 or later");
// should not affect execution since it needs to be a "supervised" device (and allowed in MDM)
// UIAccessibility.RequestGuidedAccessSession (true, delegate (bool didSuccess) {
// Assert.Fail ("should not be reached");
//});
UIAccessibility.RequestGuidedAccessSession (true, delegate (bool didSuccess) {
Assert.False (didSuccess, "devices are not supervised by default");
});
UIAccessibility.RequestGuidedAccessSession (false, null);
}
}