Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
## THE CHANGELOG

#### 3.1.3
- fix iOS `deinit` `[weak self]` crash
- make `RtcChannel.channelId` public
- add `setAudioSessionOperationRestriction` and `sendCustomReportMessage` method

#### 3.1.2-rc.2
- fix iOS `deinit` `[weak self]` crash
- fix `engine()` build error

#### 3.1.2-rc.1
- make `RtcChannel.channelId` public

#### 3.1.2
- support 3.1.2 native sdk
- fix `RejoinChannelSuccess` bug
Expand Down
12 changes: 12 additions & 0 deletions android/src/main/java/io/agora/rtc/base/RtcEngine.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ class IRtcEngine {

fun getConnectionState(callback: Callback)

fun sendCustomReportMessage(params: Map<String, *>, callback: Callback)

fun getCallId(callback: Callback)

fun rate(params: Map<String, *>, callback: Callback)
Expand Down Expand Up @@ -161,6 +163,8 @@ class IRtcEngine {
fun resumeEffect(params: Map<String, *>, callback: Callback)

fun resumeAllEffects(callback: Callback)

fun setAudioSessionOperationRestriction(params: Map<String, *>, callback: Callback)
}

interface RtcVoiceChangerInterface {
Expand Down Expand Up @@ -375,6 +379,10 @@ class RtcEngineManager(
callback.resolve(engine) { it.connectionState }
}

override fun sendCustomReportMessage(params: Map<String, *>, callback: Callback) {
callback.code(engine?.sendCustomReportMessage(params["id"] as String, params["category"] as String, params["event"] as String, params["label"] as String, (params["value"] as Number).toInt()))
}

override fun getCallId(callback: Callback) {
callback.resolve(engine) { it.callId }
}
Expand Down Expand Up @@ -619,6 +627,10 @@ class RtcEngineManager(
callback.code(engine?.audioEffectManager?.resumeAllEffects())
}

override fun setAudioSessionOperationRestriction(params: Map<String, *>, callback: Callback) {
callback.code(-Constants.ERR_NOT_SUPPORTED)
}

override fun setLocalVoiceChanger(params: Map<String, *>, callback: Callback) {
callback.code(engine?.setLocalVoiceChanger((params["voiceChanger"] as Number).toInt()))
}
Expand Down
24 changes: 16 additions & 8 deletions ios/RCTAgora/Base/RtcEngine.swift
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ protocol RtcEngineInterface:
func enableWebSdkInteroperability(_ params: NSDictionary, _ callback: Callback)

func getConnectionState(_ callback: Callback)

func sendCustomReportMessage(_ params: NSDictionary, _ callback: Callback)

func getCallId(_ callback: Callback)

Expand Down Expand Up @@ -179,6 +181,8 @@ protocol RtcEngineAudioEffectInterface {
func resumeEffect(_ params: NSDictionary, _ callback: Callback)

func resumeAllEffects(_ callback: Callback)

func setAudioSessionOperationRestriction(_ params: NSDictionary, _ callback: Callback)
}

protocol RtcEngineVoiceChangerInterface {
Expand Down Expand Up @@ -399,6 +403,10 @@ class RtcEngineManager: NSObject, RtcEngineInterface {
it.getConnectionState().rawValue
}
}

@objc func sendCustomReportMessage(_ params: NSDictionary, _ callback: Callback) {
callback.code(engine?.sendCustomReportMessage(params["id"] as! String, category: params["category"] as! String, event: params["event"] as! String, label: params["label"] as! String, value: params["value"] as! Int))
}

@objc func getCallId(_ callback: Callback) {
callback.resolve(engine) { it in
Expand Down Expand Up @@ -651,6 +659,12 @@ class RtcEngineManager: NSObject, RtcEngineInterface {
@objc func resumeAllEffects(_ callback: Callback) {
callback.code(engine?.resumeAllEffects())
}

@objc func setAudioSessionOperationRestriction(_ params: NSDictionary, _ callback: Callback) {
callback.resolve(engine) { it in
it.setAudioSessionOperationRestriction(AgoraAudioSessionOperationRestriction(rawValue: params["restriction"] as! UInt))
}
}

@objc func setLocalVoiceChanger(_ params: NSDictionary, _ callback: Callback) {
callback.code(engine?.setLocalVoiceChanger(AgoraAudioVoiceChanger(rawValue: params["voiceChanger"] as! Int)!))
Expand Down Expand Up @@ -874,10 +888,7 @@ class RtcEngineManager: NSObject, RtcEngineInterface {
}

@objc func isCameraFocusSupported(_ callback: Callback) {
// TODO Not in iOS
callback.resolve(engine) { it in
nil
}
callback.code(-Int32(AgoraErrorCode.notSupported.rawValue))
}

@objc func isCameraExposurePositionSupported(_ callback: Callback) {
Expand All @@ -900,10 +911,7 @@ class RtcEngineManager: NSObject, RtcEngineInterface {
}

@objc func getCameraMaxZoomFactor(_ callback: Callback) {
// TODO Not in iOS
callback.resolve(engine) { it in
nil
}
callback.code(-Int32(AgoraErrorCode.notSupported.rawValue))
}

@objc func setCameraFocusPositionInPreview(_ params: NSDictionary, _ callback: Callback) {
Expand Down
26 changes: 14 additions & 12 deletions ios/RCTAgora/React/RCTAgoraRtcChannelModule.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,18 @@ class RCTAgoraRtcChannelModule: RCTEventEmitter {
static let REACT_CLASS = "RCTAgoraRtcChannelModule"

private var hasListeners = false
private var manager: RtcChannelManager?

private lazy var manager: RtcChannelManager = {
return RtcChannelManager { [weak self] methodName, data in
override init() {
super.init()
manager = RtcChannelManager() { [weak self] methodName, data in
self?.emit(methodName, data)
}
}()
}

deinit {
manager?.Release()
}

override class func moduleName() -> String! {
return RCTAgoraRtcChannelModule.REACT_CLASS
Expand All @@ -29,10 +35,6 @@ class RCTAgoraRtcChannelModule: RCTEventEmitter {
return ["prefix": RtcChannelEventHandler.PREFIX]
}

deinit {
manager.Release()
}

override class func requiresMainQueueSetup() -> Bool {
return true
}
Expand Down Expand Up @@ -63,22 +65,22 @@ class RCTAgoraRtcChannelModule: RCTEventEmitter {
}
}

private func engine() -> AgoraRtcEngineKit? {
private weak var engine: AgoraRtcEngineKit? {
return (bridge.module(for: RCTAgoraRtcEngineModule.classForCoder()) as? RCTAgoraRtcEngineModule)?.engine
}

func channel(_ channelId: String) -> AgoraRtcChannel? {
return manager[channelId]
return manager?[channelId]
}

@objc func callMethod(_ methodName: String, _ params: NSDictionary?, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
if let `params` = params {
if methodName == "create" {
params.setValue(engine(), forKey: "engine")
params.setValue(engine, forKey: "engine")
}
manager.perform(NSSelectorFromString(methodName + "::"), with: params, with: PromiseCallback(resolve, reject))
manager?.perform(NSSelectorFromString(methodName + "::"), with: params, with: PromiseCallback(resolve, reject))
} else {
manager.perform(NSSelectorFromString(methodName + ":"), with: PromiseCallback(resolve, reject))
manager?.perform(NSSelectorFromString(methodName + ":"), with: PromiseCallback(resolve, reject))
}
}
}
24 changes: 13 additions & 11 deletions ios/RCTAgora/React/RCTAgoraRtcEngineModule.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,18 @@ class RCTAgoraRtcEngineModule: RCTEventEmitter {
static let REACT_CLASS = "RCTAgoraRtcEngineModule"

private var hasListeners = false
private var manager: RtcEngineManager?

private lazy var manager: RtcEngineManager = {
return RtcEngineManager() { [weak self] methodName, data in
override init() {
super.init()
manager = RtcEngineManager() { [weak self] methodName, data in
self?.emit(methodName, data)
}
}()
}

deinit {
manager?.Release()
}

override class func moduleName() -> String! {
return RCTAgoraRtcEngineModule.REACT_CLASS
Expand All @@ -29,10 +35,6 @@ class RCTAgoraRtcEngineModule: RCTEventEmitter {
return ["prefix": RtcEngineEventHandler.PREFIX]
}

deinit {
manager.Release()
}

override class func requiresMainQueueSetup() -> Bool {
return true
}
Expand Down Expand Up @@ -63,15 +65,15 @@ class RCTAgoraRtcEngineModule: RCTEventEmitter {
}
}

var engine: AgoraRtcEngineKit? {
return manager.engine
weak var engine: AgoraRtcEngineKit? {
return manager?.engine
}

@objc func callMethod(_ methodName: String, _ params: NSDictionary?, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
if let `params` = params {
manager.perform(NSSelectorFromString(methodName + "::"), with: params, with: PromiseCallback(resolve, reject))
manager?.perform(NSSelectorFromString(methodName + "::"), with: params, with: PromiseCallback(resolve, reject))
} else {
manager.perform(NSSelectorFromString(methodName + ":"), with: PromiseCallback(resolve, reject))
manager?.perform(NSSelectorFromString(methodName + ":"), with: PromiseCallback(resolve, reject))
}
}
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "react-native-agora",
"version": "3.1.2",
"version": "3.1.3",
"description": "React Native around the Agora RTC SDKs for Android and iOS agora",
"summary": "agora native sdk for react-native",
"main": "lib/index.js",
Expand Down
26 changes: 26 additions & 0 deletions src/src/Enums.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2339,3 +2339,29 @@ export enum RtmpStreamingEvent {
*/
FailedLoadImage = 1,
}

/**
* Audio session restriction.
*/
export enum AudioSessionOperationRestriction {
/**
* No restriction, the SDK has full control of the audio session operations.
*/
None = 0,
/**
* The SDK does not change the audio session category.
*/
SetCategory = 1,
/**
* The SDK does not change any setting of the audio session (category, mode, categoryOptions).
*/
ConfigureSession = 1 << 1,
/**
* The SDK keeps the audio session active when leaving a channel.
*/
DeactivateSession = 1 << 2,
/**
* The SDK does not configure the audio session anymore.
*/
All = 1 << 7,
}
Loading