From 7608d79d64485bfcdfb6fb1d2077bfb5d19682a1 Mon Sep 17 00:00:00 2001 From: Andrew nuark G Date: Thu, 23 Apr 2026 17:14:17 +0700 Subject: [PATCH] feat: add mic gain set and get methods --- .../LiblinphoneFlutterPlugin.kt | 15 +++++++++++++++ .../nuark/liblinphone_flutter/LinphoneBridge.kt | 8 ++++++++ example/pubspec.lock | 16 ++++++++-------- ios/Classes/LiblinphoneFlutterPlugin.swift | 17 +++++++++++++++++ ios/Classes/LinphoneBridge.swift | 8 ++++++++ lib/liblinphone_flutter.dart | 6 ++++++ lib/liblinphone_flutter_method_channel.dart | 13 +++++++++++++ lib/liblinphone_flutter_platform_interface.dart | 8 ++++++++ 8 files changed, 83 insertions(+), 8 deletions(-) diff --git a/android/src/main/kotlin/xyz/nuark/liblinphone_flutter/LiblinphoneFlutterPlugin.kt b/android/src/main/kotlin/xyz/nuark/liblinphone_flutter/LiblinphoneFlutterPlugin.kt index 89962c3..ca24681 100644 --- a/android/src/main/kotlin/xyz/nuark/liblinphone_flutter/LiblinphoneFlutterPlugin.kt +++ b/android/src/main/kotlin/xyz/nuark/liblinphone_flutter/LiblinphoneFlutterPlugin.kt @@ -212,6 +212,21 @@ class LiblinphoneFlutterPlugin : FlutterPlugin, ActivityAware, MethodCallHandler result.success(true) } + "setMicGain" -> { + try { + val level = call.argument("level")!! + linphoneBridge.setMicGain(level) + result.success(true) + } catch (e: Exception) { + Log.e(TAG, "setMicGain: ${e.message}") + result.error("error", e.message, e) + } + } + + "getMicGain" -> { + result.success(linphoneBridge.getMicGain()) + } + else -> { result.notImplemented() } diff --git a/android/src/main/kotlin/xyz/nuark/liblinphone_flutter/LinphoneBridge.kt b/android/src/main/kotlin/xyz/nuark/liblinphone_flutter/LinphoneBridge.kt index f07769a..4b4ceab 100644 --- a/android/src/main/kotlin/xyz/nuark/liblinphone_flutter/LinphoneBridge.kt +++ b/android/src/main/kotlin/xyz/nuark/liblinphone_flutter/LinphoneBridge.kt @@ -376,4 +376,12 @@ class LinphoneBridge( currentCall?.sendDtmf(dtmfChar) return true } + + fun setMicGain(level: Float) { + core.setMicGainDb(level) + } + + fun getMicGain(): Float { + return core.getMicGainDb() + } } diff --git a/example/pubspec.lock b/example/pubspec.lock index 76ba5de..eb9cfac 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -128,7 +128,7 @@ packages: path: ".." relative: true source: path - version: "0.0.2" + version: "0.0.3" lints: dependency: transitive description: @@ -141,10 +141,10 @@ packages: dependency: transitive description: name: matcher - sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6" + sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 url: "https://pub.dev" source: hosted - version: "0.12.18" + version: "0.12.19" material_color_utilities: dependency: transitive description: @@ -157,10 +157,10 @@ packages: dependency: transitive description: name: meta - sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" + sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" url: "https://pub.dev" source: hosted - version: "1.17.0" + version: "1.18.0" path: dependency: transitive description: @@ -250,10 +250,10 @@ packages: dependency: transitive description: name: test_api - sha256: "19a78f63e83d3a61f00826d09bc2f60e191bf3504183c001262be6ac75589fb8" + sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a" url: "https://pub.dev" source: hosted - version: "0.7.8" + version: "0.7.10" vector_math: dependency: transitive description: @@ -279,5 +279,5 @@ packages: source: hosted version: "3.1.0" sdks: - dart: ">=3.9.0-333.2.beta <4.0.0" + dart: ">=3.10.0-0 <4.0.0" flutter: ">=3.18.0-18.0.pre.54" diff --git a/ios/Classes/LiblinphoneFlutterPlugin.swift b/ios/Classes/LiblinphoneFlutterPlugin.swift index 3de8996..ab2e442 100644 --- a/ios/Classes/LiblinphoneFlutterPlugin.swift +++ b/ios/Classes/LiblinphoneFlutterPlugin.swift @@ -227,6 +227,23 @@ public class LiblinphoneFlutterPlugin: NSObject, FlutterPlugin { case "stopCallService": result(true) + case "setMicGain": + guard let args = call.arguments as? [String: Any], + let level = args["level"] as? String else { + result(FlutterError( + code: "INVALID_ARGUMENTS", + message: "Missing required arguments", + details: nil + )) + return + } + + linphoneBridge.setMicGain(level: level) + result(success) + + case "getMicGain": + result(linphoneBridge.getMicGain()) + default: result(FlutterMethodNotImplemented) } diff --git a/ios/Classes/LinphoneBridge.swift b/ios/Classes/LinphoneBridge.swift index 07eb4b4..565e40d 100644 --- a/ios/Classes/LinphoneBridge.swift +++ b/ios/Classes/LinphoneBridge.swift @@ -272,6 +272,14 @@ class LinphoneBridge { onRegistrationStateChanged(registrationState.rawValue) onCallStateChanged(callState.rawValue) } + + func setMicGain(level: Float) { + core.micGainDb = level + } + + func getMicGain() -> Float { + return core.micGainDb + } } // MARK: - CoreDelegate diff --git a/lib/liblinphone_flutter.dart b/lib/liblinphone_flutter.dart index 4723b8f..91cffe1 100644 --- a/lib/liblinphone_flutter.dart +++ b/lib/liblinphone_flutter.dart @@ -90,4 +90,10 @@ class LiblinphoneFlutter { Future stopCallService() async => LiblinphoneFlutterPlatform.instance.stopCallService(); + + Future setMicGain(double level) async => + LiblinphoneFlutterPlatform.instance.setMicGain(level); + + Future getMicGain() async => + LiblinphoneFlutterPlatform.instance.getMicGain(); } diff --git a/lib/liblinphone_flutter_method_channel.dart b/lib/liblinphone_flutter_method_channel.dart index c9173ca..02dbfc4 100644 --- a/lib/liblinphone_flutter_method_channel.dart +++ b/lib/liblinphone_flutter_method_channel.dart @@ -117,4 +117,17 @@ class MethodChannelLiblinphoneFlutter extends LiblinphoneFlutterPlatform { Future stopCallService() async { return (await methodChannel.invokeMethod('stopCallService'))!; } + + @override + Future setMicGain(double level) async { + return (await methodChannel.invokeMethod( + 'setMicGain', + {'level': level}, + ))!; + } + + @override + Future getMicGain() async { + return (await methodChannel.invokeMethod('getMicGain'))!; + } } diff --git a/lib/liblinphone_flutter_platform_interface.dart b/lib/liblinphone_flutter_platform_interface.dart index 06e991b..a3340c5 100644 --- a/lib/liblinphone_flutter_platform_interface.dart +++ b/lib/liblinphone_flutter_platform_interface.dart @@ -97,4 +97,12 @@ abstract class LiblinphoneFlutterPlatform extends PlatformInterface { Future stopCallService() async { throw UnimplementedError('stopCallService() has not been implemented.'); } + + Future setMicGain(double level) async { + throw UnimplementedError('setMicGain() has not been implemented.'); + } + + Future getMicGain() async { + throw UnimplementedError('getMicGain() has not been implemented.'); + } }