FBXCAXClientProxy.m 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /**
  2. * Copyright (c) 2015-present, Facebook, Inc.
  3. * All rights reserved.
  4. *
  5. * This source code is licensed under the BSD-style license found in the
  6. * LICENSE file in the root directory of this source tree. An additional grant
  7. * of patent rights can be found in the PATENTS file in the same directory.
  8. */
  9. #import "FBXCAXClientProxy.h"
  10. #import "FBXCAccessibilityElement.h"
  11. #import "FBLogger.h"
  12. #import "FBMacros.h"
  13. #import "XCAXClient_iOS+FBSnapshotReqParams.h"
  14. #import "XCUIDevice.h"
  15. static id FBAXClient = nil;
  16. @implementation FBXCAXClientProxy
  17. + (instancetype)sharedClient
  18. {
  19. static FBXCAXClientProxy *instance = nil;
  20. static dispatch_once_t onceToken;
  21. dispatch_once(&onceToken, ^{
  22. instance = [[self alloc] init];
  23. FBAXClient = [XCUIDevice.sharedDevice accessibilityInterface];
  24. });
  25. return instance;
  26. }
  27. - (BOOL)setAXTimeout:(NSTimeInterval)timeout error:(NSError **)error
  28. {
  29. return [FBAXClient _setAXTimeout:timeout error:error];
  30. }
  31. - (id<FBXCElementSnapshot>)snapshotForElement:(id<FBXCAccessibilityElement>)element
  32. attributes:(NSArray<NSString *> *)attributes
  33. maxDepth:(nullable NSNumber *)maxDepth
  34. error:(NSError **)error
  35. {
  36. NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithDictionary:self.defaultParameters];
  37. if (nil != maxDepth) {
  38. parameters[FBSnapshotMaxDepthKey] = maxDepth;
  39. }
  40. id result = [FBAXClient requestSnapshotForElement:element
  41. attributes:attributes
  42. parameters:[parameters copy]
  43. error:error];
  44. id<FBXCElementSnapshot> snapshot = [result valueForKey:@"_rootElementSnapshot"];
  45. return nil == snapshot ? result : snapshot;
  46. }
  47. - (NSArray<id<FBXCAccessibilityElement>> *)activeApplications
  48. {
  49. return [FBAXClient activeApplications];
  50. }
  51. - (id<FBXCAccessibilityElement>)systemApplication
  52. {
  53. return [FBAXClient systemApplication];
  54. }
  55. - (NSDictionary *)defaultParameters
  56. {
  57. return [FBAXClient defaultParameters];
  58. }
  59. - (void)notifyWhenNoAnimationsAreActiveForApplication:(XCUIApplication *)application
  60. reply:(void (^)(void))reply
  61. {
  62. [FBAXClient notifyWhenNoAnimationsAreActiveForApplication:application reply:reply];
  63. }
  64. - (NSDictionary *)attributesForElement:(id<FBXCAccessibilityElement>)element
  65. attributes:(NSArray *)attributes
  66. {
  67. NSError *error = nil;
  68. NSDictionary* result = [FBAXClient attributesForElement:element
  69. attributes:attributes
  70. error:&error];
  71. if (error) {
  72. [FBLogger logFmt:@"Cannot retrieve element attribute(s) %@. Original error: %@", attributes, error.description];
  73. }
  74. return result;
  75. }
  76. - (XCUIApplication *)monitoredApplicationWithProcessIdentifier:(int)pid
  77. {
  78. return [[FBAXClient applicationProcessTracker] monitoredApplicationWithProcessIdentifier:pid];
  79. }
  80. @end