[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:
Родитель
523e95182e
Коммит
584da1da18
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче