From 2ad789d14ef0cab4d8f11d588265c5b6ee5a05b9 Mon Sep 17 00:00:00 2001 From: Lorenzo Blasa Date: Mon, 11 Sep 2023 03:13:43 -0700 Subject: [PATCH] UIDConnectionListener Summary: Add a connection listener similarly to the one used on Android. The usage at this point will come from framework events as a means to control when to capture the events or not. Reviewed By: ivanmisuno Differential Revision: D49092691 fbshipit-source-id: d004f7ff5d1a254ad5f9c7f207d485afcb7ac54a --- .../Core/UIDConnectionListener.h | 17 ++++++++++ .../Core/UIDContext.h | 5 +++ .../Core/UIDContext.mm | 31 +++++++++++++++++++ .../FlipperKitUIDebuggerPlugin.mm | 12 +++++++ 4 files changed, 65 insertions(+) create mode 100644 iOS/Plugins/FlipperKitUIDebuggerPlugin/FlipperKitUIDebuggerPlugin/Core/UIDConnectionListener.h diff --git a/iOS/Plugins/FlipperKitUIDebuggerPlugin/FlipperKitUIDebuggerPlugin/Core/UIDConnectionListener.h b/iOS/Plugins/FlipperKitUIDebuggerPlugin/FlipperKitUIDebuggerPlugin/Core/UIDConnectionListener.h new file mode 100644 index 000000000..9a94d57ac --- /dev/null +++ b/iOS/Plugins/FlipperKitUIDebuggerPlugin/FlipperKitUIDebuggerPlugin/Core/UIDConnectionListener.h @@ -0,0 +1,17 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#if FB_SONARKIT_ENABLED + +@protocol UIDConnectionListener + +- (void)onDidConnect; +- (void)onDidDisconnect; + +@end + +#endif diff --git a/iOS/Plugins/FlipperKitUIDebuggerPlugin/FlipperKitUIDebuggerPlugin/Core/UIDContext.h b/iOS/Plugins/FlipperKitUIDebuggerPlugin/FlipperKitUIDebuggerPlugin/Core/UIDContext.h index 7b5c39c26..a33e0b0ce 100644 --- a/iOS/Plugins/FlipperKitUIDebuggerPlugin/FlipperKitUIDebuggerPlugin/Core/UIDContext.h +++ b/iOS/Plugins/FlipperKitUIDebuggerPlugin/FlipperKitUIDebuggerPlugin/Core/UIDContext.h @@ -9,6 +9,7 @@ #import #import +#import "UIDConnectionListener.h" #import "UIDFrameworkEventManager.h" #import "UIDUpdateDigester.h" @@ -33,6 +34,10 @@ NS_ASSUME_NONNULL_BEGIN descriptorRegister:(UIDDescriptorRegister*)descriptorRegister observerFactory:(UIDTreeObserverFactory*)observerFactory; +- (NSSet>*)connectionListeners; +- (void)addConnectionListener:(id)listener; +- (void)removeConnectionListener:(id)listener; + @end NS_ASSUME_NONNULL_END diff --git a/iOS/Plugins/FlipperKitUIDebuggerPlugin/FlipperKitUIDebuggerPlugin/Core/UIDContext.mm b/iOS/Plugins/FlipperKitUIDebuggerPlugin/FlipperKitUIDebuggerPlugin/Core/UIDContext.mm index 686a53382..24c9d2e07 100644 --- a/iOS/Plugins/FlipperKitUIDebuggerPlugin/FlipperKitUIDebuggerPlugin/Core/UIDContext.mm +++ b/iOS/Plugins/FlipperKitUIDebuggerPlugin/FlipperKitUIDebuggerPlugin/Core/UIDContext.mm @@ -12,6 +12,13 @@ #import "UIDSerialFrameworkEventManager.h" #import "UIDTreeObserverFactory.h" +@interface UIDContext () { + NSMutableSet>* _connectionListeners; + dispatch_queue_t _accessQueue; +} + +@end + @implementation UIDContext - (instancetype)initWithApplication:(UIApplication*)application @@ -24,10 +31,34 @@ _observerFactory = observerFactory; _connection = nil; _frameworkEventManager = [UIDSerialFrameworkEventManager new]; + _connectionListeners = [NSMutableSet new]; + _accessQueue = + dispatch_queue_create("ui-debugger.context", DISPATCH_QUEUE_SERIAL); } return self; } +- (NSSet>*)connectionListeners { + __block NSSet* listeners = nil; + dispatch_sync(_accessQueue, ^{ + listeners = [_connectionListeners copy]; + }); + + return listeners; +} + +- (void)addConnectionListener:(id)listener { + dispatch_sync(_accessQueue, ^{ + [_connectionListeners addObject:listener]; + }); +} + +- (void)removeConnectionListener:(id)listener { + dispatch_sync(_accessQueue, ^{ + [_connectionListeners removeObject:listener]; + }); +} + @end #endif diff --git a/iOS/Plugins/FlipperKitUIDebuggerPlugin/FlipperKitUIDebuggerPlugin/FlipperKitUIDebuggerPlugin.mm b/iOS/Plugins/FlipperKitUIDebuggerPlugin/FlipperKitUIDebuggerPlugin/FlipperKitUIDebuggerPlugin.mm index af97c6353..db0b5e65b 100644 --- a/iOS/Plugins/FlipperKitUIDebuggerPlugin/FlipperKitUIDebuggerPlugin/FlipperKitUIDebuggerPlugin.mm +++ b/iOS/Plugins/FlipperKitUIDebuggerPlugin/FlipperKitUIDebuggerPlugin/FlipperKitUIDebuggerPlugin.mm @@ -51,11 +51,23 @@ _context.connection = connection; [[UIDTreeObserverManager shared] startWithContext:_context]; + + NSSet>* connectionListeners = + _context.connectionListeners; + for (id listener in connectionListeners) { + [listener onDidConnect]; + } } - (void)didDisconnect { _context.connection = nil; [[UIDTreeObserverManager shared] stop]; + + NSSet>* connectionListeners = + _context.connectionListeners; + for (id listener in connectionListeners) { + [listener onDidDisconnect]; + } } @end