16.4

This release has some minor breaking changes!

In September, 2023, Help Lightning released 16.4 of its server and client SDKs. This change brings in a new In Call user experience along with several major new features including:

  • New UI/UX
  • Portrait Mode
  • Share Whiteboard
  • Knowledge Management
  • Quick Knowledge Overlay

Server Changes

Several new APIs are available for getting information about workboxes. Please see the API Documentation.

Client SDK Changes

The 16.4 Client SDK is a major release over the 15.2 SDK. You will need to make several important changes to use the new SDKs!

Web SDK

The 16.4 SDK for the web is versioned as 5.4.x with the latest version being 5.4.1.

Include Changes

It is no longer correct to include the opencv.js.

    <!-- Load help lightning JS SDK -->
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="https://helplightning.net/sdk/5.4.1/helplightning.min.js"></script>
    <script src="https://helplightning.net/sdk/5.4.1/opentok-enterprise/opentok.min.js"></script>
    <script src="https://helplightning.net/sdk/5.4.1/pdf_viewer/build/pdf.min.js"></script>

Delegate Changes

If the Quick Knowledge Overlay or Share Knowledge feature is enabled in the user’s enterprise settings, then new button(s) will be available in the interface. There are two new delegate methods to handle these changes:

  • onSelectShareKnowledge
  • onSelectKnowledgeOverlay

Both of these new delegate methods should return a Promise that resolves to:

{
    'type': Type.t,
    'url': Url.t
}

where:

@Type.t :: 'IMAGE' | 'DOCUMENT'
@Url.t :: string

The SDK does not automatically pull from Help Lightning’s Knowledge API. This allows implementers to use either Help Lightning’s knowledge or an external knowledge system.

Icon Changes

This release includes a new In Call user interface. This interface is not as themeable as previous interfaces, and therefore, many of the custom icons and colors have been deprecated:

The latest version 16.0 has a completely new UI, so we have deprecated many of the old icons and introduced some new ones as well.

The following icons have been deprecated and are no longer used by the ThemeManager.
RESOURCE_IMAGES
RESOURCE_COLORS
IMAGE_MAINMENU_DOCUMENT_OFF
IMAGE_MAINMENU_DOXUMENT_ON
IMAGE_MAINMENU_DOCUMENT_ON
IMAGE_MAINMENU_TORCH_OFF
IMAGE_MAINMENU_TORCH_ON
IMAGE_MAINMENU_WATERMARK
IMAGE_MAINMENU_WATERMARK_OFF
IMAGE_MAINMENU_DEBUG_TOOLS_ON
IMAGE_MAINMENU_DEBUG_TOOLS_OFF
IMAGE_MAINMENU_CALL_QUALITY
IMAGE_MAINMENU_CALL_QUALITY_720P
IMAGE_MAINMENU_CALL_QUALITY_480P
IMAGE_MAINMENU_CALL_QUALITY_AUDIO_PLUS
IMAGE_MAINMENU_CALL_QUALITY_720P_SELECTED
IMAGE_MAINMENU_CALL_QUALITY_480P_SELECTED
IMAGE_MAINMENU_CALL_QUALITY_AUDIO_PLUS_SELECTED
IMAGE_MAINMENU_AUDIO_PLUS
IMAGE_MAINMENU_AUDIO_PLUS_SELECTED
IMAGE_MAINMENU_SDVIDEO_SELECTED
IMAGE_MAINMENU_HDVIDEO_SELECTED
IMAGE_MODEMENU_FACETOFACE_ON
IMAGE_MODEMENU_FACETOFACE_OFF
IMAGE_MODEMENU_RECEIVER_ON
IMAGE_MODEMENU_RECEIVER_OFF
IMAGE_MODEMENU_GIVER_ON
IMAGE_MODEMENU_GIVER_OFF
IMAGE_MODEMENU_OBSERVER
IMAGE_MODEMENU_SWITCH_ROLES
IMAGE_CAMERAMENU_CAMERA_TOGGLE_OFF
IMAGE_CAMERAMENU_CAMERA_TOGGLE_ON
IMAGE_CAMERAMENU_LIVE_VIDEO_ON
IMAGE_CAMERAMENU_LIVE_VIDEO_OFF
IMAGE_CAMERAMENU_LIVE_VIDEO_OFF_RED
IMAGE_TELESTRATION_MENU_COLOR_UNSELECTED
IMAGE_TELESTRATION_MENU_Arrow_RED
IMAGE_TELESTRATION_MENU_Arrow_GREEN
IMAGE_TELESTRATION_MENU_Arrow_YELLOW
IMAGE_TELESTRATION_MENU_Arrow_BLUE
IMAGE_TELESTRATION_MENU_PEN_RED
IMAGE_TELESTRATION_MENU_PEN_GREEN
IMAGE_TELESTRATION_MENU_PEN_YELLOW
IMAGE_TELESTRATION_MENU_PEN_BLUE
IMAGE_TELESTRATION_MENU_PUSH_PIN_RED
IMAGE_TELESTRATION_MENU_PUSH_PIN_GREEN
IMAGE_TELESTRATION_MENU_PUSH_PIN_YELLOW
IMAGE_TELESTRATION_MENU_PUSH_PIN_BLUE
IMAGE_TELESTRATION_MENU_3D_PUSH_PIN_RED
IMAGE_TELESTRATION_MENU_3D_PUSH_PIN_GREEN
IMAGE_TELESTRATION_MENU_3D_PUSH_PIN_YELLOW
IMAGE_TELESTRATION_MENU_3D_PUSH_PIN_BLUE
IMAGE_TELESTRATION_MENU_3D_ARROW_RED
IMAGE_TELESTRATION_MENU_3D_ARROW_GREEN
IMAGE_TELESTRATION_MENU_3D_ARROW_YELLOW
IMAGE_TELESTRATION_MENU_3D_ARROW_BLUE
IMAGE_TELESTRATION_MENU_3D_CURVE_RED
IMAGE_TELESTRATION_MENU_3D_CURVE_GREEN
IMAGE_TELESTRATION_MENU_3D_CURVE_YELLOW
IMAGE_TELESTRATION_MENU_3D_CURVE_BLUE
IMAGE_SCREEN_CAPTURE_BUTTON1
IMAGE_SCREEN_CAPTURE_BUTTON2
IMAGE_SCREEN_CAPTURE_BUTTON3
IMAGE_CALL_QUALITY_INDICATOR_HD720P
IMAGE_CALL_QUALITY_INDICATOR_SD480P
IMAGE_CALL_QUALITY_INDICATOR_AUDIO_PLUS_MODE
IMAGE_MESSAGE_PLUS
IMAGE_MESSAGE_PHONE_FLIP
IMAGE_MESSAGE_MAGNIFYING_GLASS
The following are new icons since the 15.2 SDK release.
IMAGE_CHAT_PHOTO_FILM
IMAGE_CHAT_PHOTO_CAMERA
IMAGE_CHAT_FOLDER_OPEN
IMAGE_CHAT_FILE
IMAGE_SHARE_MENU_ICON
IMAGE_SHARE_MENU_ICON_BRAND_COLOR
IMAGE_SHARE_MENU_SHARE_CAMERA
IMAGE_SHARE_MENU_SHARE_FILE
IMAGE_SHARE_MENU_SHARE_PHOTO
IMAGE_SHARE_MENU_WHITE_BOARD
IMAGE_SHARE_MENU_SHARE_CAMERA_SELECTED
IMAGE_SHARE_MENU_SHARE_FILE_SELECTED
IMAGE_SHARE_MENU_SHARE_PHOTO_SELECTED
IMAGE_SHARE_MENU_WHITE_BOARD_SELECTED
IMAGE_MERGE_MENU_MERGE_OFF
IMAGE_MERGE_MENU_MERGE_ON
IMAGE_SHAPES_MENU_ICON
IMAGE_MESSAGE_SEND_BUTTON_WHITE
IMAGE_MESSAGE_PAPERCLIP_WHITE
IMAGE_MESSAGE_RETRY_BUTTON_INCALL
IMAGE_MESSAGE_KNOWLEDGE
IMAGE_MESSAGE_KNOWLEDGE_SELECTED
IMAGE_OVERLAY_MENU_SELECTION_TOOL
IMAGE_OVERLAY_MENU_SELECTION_TOOL_SELECTED
IMAGE_SHARE_MENU_SHARE_PHOTO_SMALL

iOS SDK

The latest 16.4 SDK for the iOS is 16.4.2.
source 'https://github.com/VIPAAR/Specs.git'
pod 'HLSDK', '16.4.2'

If upgrading from the 15.2 SDK, you will need to make several changes, as there are new delegate methods and some deprecations.

New Delegate Methods in HLClientDelegate

The following optional delegate methods are added to HLClientDelegate

/**
 The dictionary key of the call's workspace
 */
extern NSString* const kHLCallPluginWorkspaceId;
/**
 The dictionary key for the view controller to present a view controller for picking images or files
 */
extern NSString* const kHLCallPluginPresentingViewController;

/**
 The dictionary key for contact instance
 */
extern NSString* const kHLCallPluginContact;

/**
 The dictionary key for an UIImage instance
 */
extern NSString* const kHLCallPluginUIImage;

/**
 The dictionary key for the URL of the picked item
 */
extern NSString* const kHLCallPluginURL;


@protocol HLCallPluginDelegate <NSObject>
@optional

#pragma mark - Share Knowledge Plugin

/// Determine if sharing knowledge is supported for a call
/// - Parameter call: the current ongoging call
/// - Returns: a Promise which should be fulfilled with ``@YES`` when the call should support sharing knowledge. If the promise is fulfilled with ``@NO``, the call will not show the Quick Knowledge option in the share menu.
- (FBLPromise*) hlCallCanShareKnowledge:(id<HLGenericCall>)call;


/// Request a sharable knowledge item. Any iOS supported images or a PDF can be shared in the call.
/// - Parameters:
///   - call: the call to share the selected knowledge item.
///   - userInfo: the information used to present the view to select knowledge item. This dictionary might include a pari: key = ``kHLCallPluginPresentingViewController``, value is the view controller that can be used to present a controller to pick a sharable knowledge
/// - Returns: A promise,  which result should be fulfilled with a dictionary. If one of the sharable knowledge item is selected, the dictarionary should include one of the keys:  (``kHLCallPluginUIImage``:  a UIImage instnace  or ``kHLCallPluginURL``: a URL of image or PDF. If the user cancels selecting, return an empty dictionary.
- (FBLPromise*) hlCall:(id<HLGenericCall>)call needShareKnowledgeWithUserInfo:(NSDictionary<NSString*, id>*)userInfo;

#pragma mark - Knowledge Overlay Plugin
/// Determine if quick knowledge overlay is supported for a call
/// - Parameter call: the current ongoging call
/// - Return a Promise which should be fulfilled with @YES when the call should support the quick knowledge overlay. If the promise is fulfilled with @NO, the call will not show the Quick Knowledge Overlay button on the action bar.
- (FBLPromise*) hlCallSupportKnowledgeOverlay:(id<HLGenericCall>)call;

/// Request a quick knowledge overlay image.
/// - Parameters:
///   - call: the call to add the quick knowledge overlay image.
///   - userInfo: the information used to present the view to select a quick knowledge overlay image. This dictionary might include a pari: key = ``kHLCallPluginPresentingViewController``, value is the view controller that can be used to present a controller to pick a quick knowledge image
/// - Returns: A promise,  which result should be fulfilled with a dictionary. If a quick knowledge overlay image is selected, the dictarionary should include one of the keys:  (``kHLCallPluginUIImage``:  a UIImage instnace  or ``kHLCallPluginURL``: an imge URL,  If the user cancels selecting, return an empty dictionary.
- (FBLPromise*) hlCall:(id<HLGenericCall>)call needKnowledgeOverlayWithUserInfo:(NSDictionary<NSString*, id>*)userInfo;

Deprecated Methods in HLClientDelegate

The following delegates have been deprecated

- (void) call:(HLCall*)call didEndWithReason:(NSString*)reason DEPRECATED_MSG_ATTRIBUTE("Use the new hlCall:didEndWithReason: method instead.");
- (void) call:(HLCall*)call didCaptureScreen:(UIImage*)image shouldUploadImage:(BOOL)shouldUploadImage DEPRECATED_MSG_ATTRIBUTE("Use the new hlCall:didCaptureScreen:shouldUploadImage: method instead.");

and should be replaced with:

- (void) hlCall:(HLCall*)call didEndWithReason:(NSString*)reason;
- (void) hlCall:(HLCall*)call didCaptureScreen:(UIImage*)image shouldUploadImage:(BOOL)shouldUploadImage;

New Theme Images

This SDK brings in a new User Interface for the in call experience. As such, many of the icons and colors for theming have been deprecated.

The following icons have been removed:

NSString *const kHLImageMainMenuDocumentOff = @"image_main_menu_document_off";
NSString *const kHLImageMainMenuDocumentOn = @"image_main_menu_document_on";
NSString *const kHLImageModeMenuFaceToFaceOn = @"image_mode_menu_face_to_face_on";
NSString *const kHLImageModeMenuFaceToFaceOff = @"image_mode_menu_face_to_face_off";
NSString *const kHLImageModeMenuReceiverOn = @"image_mode_menu_receiver_on";
NSString *const kHLImageModeMenuReceiverOff = @"image_mode_menu_receiver_off";
NSString *const kHLImageModeMenuGiverOn = @"image_mode_menu_giver_on";
NSString *const kHLImageModeMenuGiverOff = @"image_mode_menu_giver_off";
NSString *const kHLImageModeMenuSwitchRole = @"image_mode_menu_switch_role";

NSString *const kHLImageCameraMenuPhotoOff = @"image_camera_menu_photo_off";
NSString *const kHLImageCameraMenuFrontCameraOn = @"image_camera_menu_front_camera_on";
NSString *const kHLImageCameraMenuFrontCameraOff = @"image_camera_menu_front_camera_off";
NSString *const kHLImageCameraMenuLiveVideoOn = @"image_camera_menu_live_video_on";
NSString *const kHLImageCameraMenuLiveVideoOff = @"image_camera_menu_live_video_off";

NSString *const kHLImageTelestrationMenuColorUnselected = @"image_telestration_menu_color_unselected";
NSString *const kHLImageTelestrationMenuColorSelected = @"image_telestration_menu_color_selected";

NSString *const kHLImageTelestrationMenu3DArrowOutline = @"image_telestration_menu_3d_arrow_outline_ios";
NSString *const kHLImageTelestrationMenu3DArrowFilled = @"image_telestration_menu_3d_arrow_filled_ios";
NSString *const kHLImageTelestrationMenu3DPenOutline = @"image_telestration_menu_3d_pen_outline_ios";
NSString *const kHLImageTelestrationMenu3DPenFilled = @"image_telestration_menu_3d_pen_filled_ios";
NSString *const kHLImageTelestrationMenu3DPinOutline = @"image_telestration_menu_3d_pin_outline_ios";
NSString *const kHLImageTelestrationMenu3DPinFilled = @"image_telestration_menu_3d_pin_filled_ios";

NSString *const kHLImageTelestrationMenu2DArrowOutline = @"image_telestration_menu_2d_arrow_outline_ios";
NSString *const kHLImageTelestrationMenu2DArrowFilled = @"image_telestration_menu_2d_arrow_filled_ios";
NSString *const kHLImageTelestrationMenu2DPenOutline = @"image_telestration_menu_2d_pen_outline_ios";
NSString *const kHLImageTelestrationMenu2DPenFilled = @"image_telestration_menu_2d_pen_filled_ios";
NSString *const kHLImageTelestrationMenu2DPinOutline = @"image_telestration_menu_2d_pin_outline_ios";
NSString *const kHLImageTelestrationMenu2DPinFilled = @"image_telestration_menu_2d_pin_filled_ios";

The following icons are new:

NSString *const kHLImageBannerRote = @"image_banner_rote";
NSString *const kHLImageActionBarMergeNormal = @"image_action_bar_merge_normal";
NSString *const kHLImageActionBarMergeSelected = @"image_action_bar_merge_selected";
NSString *const kHLImageActionBarShareNormal = @"image_action_bar_share_normal";
NSString *const kHLImageActionBarShareSelected = @"image_action_bar_share_selected";
NSString *const kHLIconAnnotation3DColorBorderRed = @"icon_annotation_ar_border_red";
NSString *const kHLIconAnnotation3DColorBorderYellow = @"icon_annotation_ar_border_yellow";
NSString *const kHLIconAnnotation3DColorBorderGreen = @"icon_annotation_ar_border_green";
NSString *const kHLIconAnnotation3DColorBorderBlue = @"icon_annotation_ar_border_blue";

NSString *const kHLIconAnnotationColorBorderRed = @"icon_annotation_border_red";
NSString *const kHLIconAnnotationColorBorderYellow = @"icon_annotation_border_yellow";
NSString *const kHLIconAnnotationColorBorderGreen = @"icon_annotation_border_green";
NSString *const kHLIconAnnotationColorBorderBlue = @"icon_annotation_border_blue";

NSString* const kHLIconAnnotationColorRed = @"icon_annotation_color_red";
NSString* const kHLIconAnnotationColorYellow = @"icon_annotation_color_yellow";
NSString* const kHLIconAnnotationColorGreen = @"icon_annotation_color_green";
NSString* const kHLIconAnnotationColorBlue = @"icon_annotation_color_blue";
NSString *const kHLImageScreenCapture = @"image_screen_capture";
NSString *const kHLImageEndCap = @"image_end_cap";
NSString *const kHLImageTick = @"image_tick";

NSString *const kHLImageCameraMenuCameraOn = @"image_camera_menu_camera_on";
NSString *const kHLImageCameraMenuCameraOff = @"image_camera_menu_camera_off";

NSString *const kHLImageShareMenuFile = @"image_share_menu_file";
NSString *const kHLImageShareMenuFileSelected = @"image_share_menu_file_selected";
NSString *const kHLImageShareMenuGallery = @"image_share_menu_gallery";
NSString *const kHLImageShareMenuGallerySelected = @"image_share_menu_gallery_selected";
NSString *const kHLImageShareMyCamera = @"image_share_my_camera";
NSString *const kHLImageShareMenuTakePhoto = @"image_share_menu_take_photo";
NSString *const kHLImageShareMenuTakePhotoSelected = @"image_share_menu_take_photo_selected";
NSString *const kHLImageShareMenuVideo = @"image_share_menu_video";
NSString *const kHLImageShareMenuWhiteBoard = @"image_share_menu_white_board";
NSString *const kHLImageShareMenuWhiteBoardSelected = @"image_share_menu_white_board_selected";
NSString *const kHLImageChevron = @"image_chevron";
NSString *const kHLImageShareMenuKnowledge;
NSString *const kHLImageShareMenuKnowledgeSelected;
NSString *const kHLImageQuickKnowledge;
NSString *const kHLImageQuickKnowledgeHighlight;
NSString *const kHLImageQuickKnowledgeDelete;
NSString *const kHLImageQuickKnowledgeResize;
NSString *const kHLImageQuickKnowledgeSelection;
NSString *const kHLImageQuickKnowledgeSelectionHighlight;
NSString *const kHLImageTelestrationMenuPushPinNormal;
NSString *const kHLImageTelestrationMenuCurveNormal;
NSString *const kHLImageTelestrationMenuArrowNormal;

Android SDK

The 16.4 SDK for Android is versioned as 2.0.x with the latest version being 2.0.1.
buildscript {
  repositories {
    ...
    maven {
      url "https://maven.helplightning.net"
    }
  }
}

dependencies {
    implementation 'com.vipaar.lime:hlsdk-light:2.0.1'
}

Initialization Changes

With this new release, it is now necessary to initialize the Help Lightning SDK with your application’s context:

public class SampleApp extends Application {

    public void onCreate() {
        super.onCreate();
        HLClient.getInstance().init(this);
    }
}

Delegate Changes

If the Quick Knowledge Overlay or Share Knowledge feature is enabled in the user’s enterprise settings, then new button(s) will be available in the interface. There are serveral new delegate methods to handle these changes:

  • isShareKnowledgeEnabled
  • onShareKnowledge
  • isShareQuickKnowledgeEnabled
  • onSelectKnowledgeQuickOverlay

Please see the Android Page for more details.

Xamarin SDK

The 16.4 SDK for Xamarin (iOS and Android) is versioned as 16.4.x with the latest version being 16.4.1.

Sharing Knowledge

There are several new delegate methods in ICallClientDelegate for handling Quick Knowledge Overlay and Share Knowledge.

  /**
   * Check if sharing knowledge is supported for a call
   *
   * @param call :: The call to check if sharing knowledge is supports
   * @returns boolean | AsyncTask->boolean
   **/
  object IsSharingKnowledgeSupported(Call call);

  /**
   * Get the shared knowledge content for a call, which should be a PDF or image
   *
   * @param call :: The call to share the knowledge content
   * @param userInfo :: Dictionary with info about the user
   * @returns AsyncTask->Dict<string,string>(
   *                       CallClientDelegateConstants.SharedURL => url::string,
   *                       CallClientDelegateConstants.SharedURLType => (IMAGE|DOCUMENT)::string
   *                     )
   */
  Task<IDictionary<string, object>> SelectSharedKnowledge(Call call, IDictionary<string, object> userInfo);

Quick Knowledge Overlay

The following delegate methods are added to ICallClientDelegate

  /**
   * Check if quick knowledge overlay is supported for a call
   *
   * @param call :: The call to check if sharing knowledge is supports
   * @returns boolean | AsyncTask->boolean
   **/
object IsQuickKnowledgeOverlaySupported(Call call);

  /**
   * Get a quick shared knowledge overlay image for a call
   *
   * @param call :: The call to share the knowledge content
   * @param userInfo :: Dictionary with info about the user
   * @returns AsyncTask->Dict<string,string>(
   *                       CallClientDelegateConstants.SharedURL => url::string,
   *                       CallClientDelegateConstants.SharedURLType => (IMAGE|DOCUMENT)::string
   *                     )
   */
Task<IDictionary<string, object>> SelectQuickKnowledgeOverlay(Call call, IDictionary<string, object> userInfo);

New Icons

// 16.4 iOS Icons
public const string ImageShareMenuKnowledgeIOS = "image_share_menu_knowledge";
public const string ImageShareMenuKnowledgeSelectedIOS = "image_share_menu_knowledge_selected";
public const string ImageQuickKnowledgeIOS = "image_quick_knowledge";
public const string ImageQuickKnowledgeHighlightIOS = "image_share_menu_knowledge_highlight";
public const string ImageQuickKnowledgeDeleteIOS = "image_share_menu_knowledge_Delete";
public const string ImageQuickKnowledgeResizeIOS = "image_share_menu_knowledge_Resize";
public const string ImageQuickKnowledgeSelectionIOS = "image_quick_knowledge_selection";
public const string ImageQuickKnowledgeSelectionHighlightIOS = "image_share_menu_knowledge_selection_highlight";
public const string ImageTelestrationMenuPushPinNormalIOS = "image_telestration_menu_2d_pin_normal";
public const string ImageTelestrationMenuCurveNormalIOS = "image_telestration_menu_2d_curve_normal";
public const string ImageTelestrationMenuArrowNormalIOS = "image_telestration_menu_2d_arrow_normal";
public const string IconAnnotationColorRedSelectedIOS = "icon_annotation_color_red_selected";
public const string IconAnnotationColorYellowSelectedIOS = "icon_annotation_color_yellow_selected";
public const string IconAnnotationColorGreenSelectedIOS = "icon_annotation_color_green_selected";
public const string IconAnnotationColorBlueSelectedIOS = "icon_annotation_color_blue_selected";

Changes to Android App

The following code is required to setup Xamarin Android SDK

namespace HelpLightning.SDK.Sample.Android
{
    [Application]
    public class SampleApplication : Application
    {
        public override void OnCreate()
        {
            base.OnCreate();

            // The following line is required to initialize HL Android SDK in the Application.OnCreate()
            HLClient.Instance.Init(ApplicationContext);
        }
    }
}