text: // Copyright 2013 The Flutter Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  // This header is available in the Test module. Import via "@import camera.Test;"
  
  #import <camera/CameraPlugin.h>
  #import <camera/FLTCam.h>
  #import <camera/FLTThreadSafeFlutterResult.h>
  
  /// Methods exposed for unit testing.
  @interface CameraPlugin ()
  
  /// All FLTCam's state access and capture session related operations should be on run on this queue.
  @property(nonatomic, strong) dispatch_queue_t captureSessionQueue;
  
  /// An internal camera object that manages camera's state and performs camera operations.
  @property(nonatomic, strong) FLTCam *camera;
  
  /// Inject @p FlutterTextureRegistry and @p FlutterBinaryMessenger for unit testing.
  - (instancetype)initWithRegistry:(NSObject<FlutterTextureRegistry> *)registry
                         messenger:(NSObject<FlutterBinaryMessenger> *)messenger
      NS_DESIGNATED_INITIALIZER;
  
  /// Hide the default public constructor.
  - (instancetype)init NS_UNAVAILABLE;
  
  /// Handles `FlutterMethodCall`s and ensures result is send on the main dispatch queue.
  ///
  /// @param call The method call command object.
  /// @param result A wrapper around the `FlutterResult` callback which ensures the callback is called
  /// on the main dispatch queue.
  - (void)handleMethodCallAsync:(FlutterMethodCall *)call result:(FLTThreadSafeFlutterResult *)result;
  
  /// Called by the @c NSNotificationManager each time the device's orientation is changed.
  ///
  /// @param notification @c NSNotification instance containing a reference to the `UIDevice` object
  /// that triggered the orientation change.
  - (void)orientationChanged:(NSNotification *)notification;
  
  /// Creates FLTCam on session queue and reports the creation result.
  /// @param createMethodCall the create method call
  /// @param result a thread safe flutter result wrapper object to report creation result.
  - (void)createCameraOnSessionQueueWithCreateMethodCall:(FlutterMethodCall *)createMethodCall
                                                  result:(FLTThreadSafeFlutterResult *)result;
  
  @end
  