juggleim-rnsdk 0.1.6 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  2. package/android/.gradle/8.9/checksums/md5-checksums.bin +0 -0
  3. package/android/.gradle/8.9/checksums/sha1-checksums.bin +0 -0
  4. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  5. package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
  6. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  7. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  8. package/android/.gradle/8.9/gc.properties +0 -0
  9. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  10. package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
  11. package/android/.gradle/vcs-1/gc.properties +0 -0
  12. package/android/.settings/org.eclipse.buildship.core.prefs +12 -1
  13. package/android/build/.transforms/42b8ab7e96b9440b0e91d2ecba5f579c/transformed/classes/classes_dex/classes.dex +0 -0
  14. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$10.dex +0 -0
  15. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$11.dex +0 -0
  16. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$12.dex +0 -0
  17. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$13.dex +0 -0
  18. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$14.dex +0 -0
  19. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$15.dex +0 -0
  20. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$16.dex +0 -0
  21. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$17.dex +0 -0
  22. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$18.dex +0 -0
  23. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$19.dex +0 -0
  24. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$20.dex +0 -0
  25. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$21.dex +0 -0
  26. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$22.dex +0 -0
  27. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$6.dex +0 -0
  28. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$7.dex +0 -0
  29. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$8.dex +0 -0
  30. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager$9.dex +0 -0
  31. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMManager.dex +0 -0
  32. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/JuggleIMPackage.dex +0 -0
  33. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/call/JuggleIMCallModule$1.dex +0 -0
  34. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/call/JuggleIMCallModule$2.dex +0 -0
  35. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/call/JuggleIMCallModule$3.dex +0 -0
  36. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/call/JuggleIMCallModule.dex +0 -0
  37. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/call/view/RCTZegoSurfaceViewManager.dex +0 -0
  38. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/juggleim/call/view/ZegoSurfaceView.dex +0 -0
  39. package/android/build/.transforms/a3b636e0768beb7635f48b7f77613c33/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin +0 -0
  40. package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
  41. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +1 -1
  42. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$10.class +0 -0
  43. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$11.class +0 -0
  44. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$12.class +0 -0
  45. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$13.class +0 -0
  46. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$14.class +0 -0
  47. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$15.class +0 -0
  48. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$16.class +0 -0
  49. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$17.class +0 -0
  50. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$18.class +0 -0
  51. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$19.class +0 -0
  52. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$20.class +0 -0
  53. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$21.class +0 -0
  54. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$22.class +0 -0
  55. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$6.class +0 -0
  56. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$7.class +0 -0
  57. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$8.class +0 -0
  58. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager$9.class +0 -0
  59. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMManager.class +0 -0
  60. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/JuggleIMPackage.class +0 -0
  61. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/call/JuggleIMCallModule$1.class +0 -0
  62. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/call/JuggleIMCallModule$2.class +0 -0
  63. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/call/JuggleIMCallModule$3.class +0 -0
  64. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/call/JuggleIMCallModule.class +0 -0
  65. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/call/view/RCTZegoSurfaceViewManager.class +0 -0
  66. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/juggleim/call/view/ZegoSurfaceView.class +0 -0
  67. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$10.class +0 -0
  68. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$11.class +0 -0
  69. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$12.class +0 -0
  70. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$13.class +0 -0
  71. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$14.class +0 -0
  72. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$15.class +0 -0
  73. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$16.class +0 -0
  74. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$17.class +0 -0
  75. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$18.class +0 -0
  76. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$19.class +0 -0
  77. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$20.class +0 -0
  78. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$21.class +0 -0
  79. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$22.class +0 -0
  80. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$6.class +0 -0
  81. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$7.class +0 -0
  82. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$8.class +0 -0
  83. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager$9.class +0 -0
  84. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMManager.class +0 -0
  85. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/JuggleIMPackage.class +0 -0
  86. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/call/JuggleIMCallModule$1.class +0 -0
  87. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/call/JuggleIMCallModule$2.class +0 -0
  88. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/call/JuggleIMCallModule$3.class +0 -0
  89. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/call/JuggleIMCallModule.class +0 -0
  90. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/call/view/RCTZegoSurfaceViewManager.class +0 -0
  91. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/juggleim/call/view/ZegoSurfaceView.class +0 -0
  92. package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
  93. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$1.class.uniqueId24 +0 -0
  94. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$10.class.uniqueId0 +0 -0
  95. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$11.class.uniqueId14 +0 -0
  96. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$12.class.uniqueId22 +0 -0
  97. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$13.class.uniqueId7 +0 -0
  98. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$14.class.uniqueId15 +0 -0
  99. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$15.class.uniqueId6 +0 -0
  100. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$16.class.uniqueId11 +0 -0
  101. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$17.class.uniqueId23 +0 -0
  102. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$18.class.uniqueId8 +0 -0
  103. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$19.class.uniqueId20 +0 -0
  104. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$2.class.uniqueId3 +0 -0
  105. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$20.class.uniqueId5 +0 -0
  106. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$21.class.uniqueId13 +0 -0
  107. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$22.class.uniqueId18 +0 -0
  108. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$23.class.uniqueId10 +0 -0
  109. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$3.class.uniqueId17 +0 -0
  110. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$4.class.uniqueId21 +0 -0
  111. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$5.class.uniqueId9 +0 -0
  112. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$6.class.uniqueId12 +0 -0
  113. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$7.class.uniqueId4 +0 -0
  114. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$8.class.uniqueId16 +0 -0
  115. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager$9.class.uniqueId19 +0 -0
  116. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMManager.class.uniqueId1 +0 -0
  117. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/JuggleIMPackage.class.uniqueId2 +0 -0
  118. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  119. package/android/build.gradle +2 -0
  120. package/android/src/main/java/com/juggleim/JuggleIMManager.java +24 -3
  121. package/android/src/main/java/com/juggleim/JuggleIMPackage.java +4 -1
  122. package/android/src/main/java/com/juggleim/call/JuggleIMCallModule.java +507 -0
  123. package/android/src/main/java/com/juggleim/call/view/RCTZegoSurfaceViewManager.java +32 -0
  124. package/android/src/main/java/com/juggleim/call/view/ZegoSurfaceView.java +43 -0
  125. package/ios/JModelFactory.m +12 -3
  126. package/ios/JuggleIMManager.m +6 -7
  127. package/ios/call/JuggleIMCallModule.h +10 -0
  128. package/ios/call/JuggleIMCallModule.m +520 -0
  129. package/ios/call/README.md +51 -0
  130. package/ios/call/view/ZegoSurfaceView.h +7 -0
  131. package/ios/call/view/ZegoSurfaceView.m +45 -0
  132. package/ios/call/view/ZegoSurfaceViewManager.h +5 -0
  133. package/ios/call/view/ZegoSurfaceViewManager.m +12 -0
  134. package/juggleim-rnsdk.podspec +2 -0
  135. package/package.json +1 -1
  136. package/src/call/CallConst.ts +43 -0
  137. package/src/call/CallInfo.ts +13 -0
  138. package/src/call/CallMember.ts +12 -0
  139. package/src/call/CallSession.ts +186 -0
  140. package/src/call/JuggleIMCall.ts +79 -0
  141. package/src/call/ZegoSurfaceView.tsx +24 -0
  142. package/src/call/index.ts +8 -0
  143. package/src/index.d.ts +422 -864
  144. package/src/index.js +1 -0
  145. package/src/types.d.ts +453 -0
  146. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/GenericCustomMessage.class.uniqueId0 +0 -0
@@ -0,0 +1,507 @@
1
+
2
+ package com.juggleim.call;
3
+
4
+ import com.facebook.react.bridge.Arguments;
5
+ import com.facebook.react.bridge.Promise;
6
+ import com.facebook.react.bridge.ReactApplicationContext;
7
+ import com.facebook.react.bridge.ReactContextBaseJavaModule;
8
+ import com.facebook.react.bridge.ReactMethod;
9
+ import com.facebook.react.bridge.ReadableArray;
10
+ import com.facebook.react.bridge.ReadableMap;
11
+ import com.facebook.react.bridge.WritableArray;
12
+ import com.facebook.react.bridge.WritableMap;
13
+ import com.facebook.react.modules.core.DeviceEventManagerModule;
14
+ import com.juggle.im.JIM;
15
+ import com.juggle.im.call.CallConst;
16
+ import com.juggle.im.call.ICallManager;
17
+ import com.juggle.im.call.ICallSession;
18
+ import com.juggle.im.call.internal.CallManager;
19
+ import com.juggle.im.call.model.CallInfo;
20
+ import com.juggle.im.call.model.CallMember;
21
+ import com.juggle.im.call.model.CallVideoDenoiseParams;
22
+ import com.juggle.im.model.Conversation;
23
+ import com.juggle.im.model.UserInfo;
24
+ import com.juggleim.RNTypeConverter;
25
+ import com.facebook.react.bridge.UIManager;
26
+ import com.facebook.react.uimanager.UIManagerHelper;
27
+ import com.facebook.react.uimanager.common.ViewUtil;
28
+ import java.util.ArrayList;
29
+ import java.util.HashMap;
30
+ import java.util.List;
31
+ import java.util.Map;
32
+ import android.util.Log;
33
+
34
+ public class JuggleIMCallModule extends ReactContextBaseJavaModule {
35
+ private static final String MODULE_NAME = "JuggleIMCallModule";
36
+ private final ReactApplicationContext mReactContext;
37
+ private final Map<String, ICallManager.ICallReceiveListener> mReceiveListeners = new HashMap<>();
38
+ private final Map<String, ICallManager.IConversationCallListener> mConversationCallListeners = new HashMap<>();
39
+ private final Map<String, ICallSession.ICallSessionListener> mSessionListeners = new HashMap<>();
40
+ // Store session listeners by callId + key
41
+ private final Map<String, Map<String, ICallSession.ICallSessionListener>> mCallSessionListeners = new HashMap<>();
42
+
43
+ public JuggleIMCallModule(ReactApplicationContext reactContext) {
44
+ super(reactContext);
45
+ mReactContext = reactContext;
46
+ }
47
+
48
+ @Override
49
+ public String getName() {
50
+ return MODULE_NAME;
51
+ }
52
+
53
+ @ReactMethod
54
+ public void addListener(String eventName) {
55
+ // Required for RN built-in Event Emitter Calls.
56
+ }
57
+
58
+ @ReactMethod
59
+ public void removeListeners(Integer count) {
60
+ // Required for RN built-in Event Emitter Calls.
61
+ }
62
+
63
+ private ICallManager getCallManager() {
64
+ return JIM.getInstance().getCallManager();
65
+ }
66
+
67
+ @ReactMethod
68
+ public void initZegoEngine(int appId) {
69
+ getCallManager().initZegoEngine(appId, mReactContext);
70
+ }
71
+
72
+ @ReactMethod
73
+ public void initLiveKitEngine() {
74
+ getCallManager().initLiveKitEngine(mReactContext);
75
+ }
76
+
77
+ @ReactMethod
78
+ public void initAgoraEngine(String appId) {
79
+ getCallManager().initAgoraEngine(appId, mReactContext);
80
+ }
81
+
82
+ @ReactMethod
83
+ public void startSingleCall(String userId, int mediaType, String extra, Promise promise) {
84
+ try {
85
+ ICallSession session = getCallManager().startSingleCall(userId, CallConst.CallMediaType.setValue(mediaType),
86
+ extra, null);
87
+ promise.resolve(convertCallSessionToMap(session));
88
+ } catch (Exception e) {
89
+ promise.reject(e);
90
+ }
91
+ }
92
+
93
+ @ReactMethod
94
+ public void startMultiCall(ReadableArray userIdList, int mediaType, String extra, ReadableMap conversationMap,
95
+ Promise promise) {
96
+ try {
97
+ List<String> userIds = new ArrayList<>();
98
+ for (int i = 0; i < userIdList.size(); i++) {
99
+ userIds.add(userIdList.getString(i));
100
+ }
101
+ Conversation conversation = null;
102
+ if (conversationMap != null) {
103
+ conversation = RNTypeConverter.fromReadableMap(conversationMap, Conversation.class);
104
+ }
105
+ ICallSession session = getCallManager().startMultiCall(userIds, CallConst.CallMediaType.setValue(mediaType),
106
+ conversation, extra, null);
107
+ promise.resolve(convertCallSessionToMap(session));
108
+ } catch (Exception e) {
109
+ promise.reject(e);
110
+ }
111
+ }
112
+
113
+ @ReactMethod
114
+ public void joinCall(String callId, Promise promise) {
115
+ try {
116
+ ICallSession session = getCallManager().joinCall(callId, null);
117
+ promise.resolve(convertCallSessionToMap(session));
118
+ } catch (Exception e) {
119
+ promise.reject(e);
120
+ }
121
+ }
122
+
123
+ @ReactMethod
124
+ public void getCallSession(String callId, Promise promise) {
125
+ ICallSession session = getCallManager().getCallSession(callId);
126
+ if (session != null) {
127
+ promise.resolve(convertCallSessionToMap(session));
128
+ } else {
129
+ promise.resolve(null);
130
+ }
131
+ }
132
+
133
+ @ReactMethod
134
+ public void addReceiveListener(String key) {
135
+ ICallManager.ICallReceiveListener listener = new ICallManager.ICallReceiveListener() {
136
+ @Override
137
+ public void onCallReceive(ICallSession callSession) {
138
+ WritableMap params = Arguments.createMap();
139
+ params.putString("key", key);
140
+ params.putMap("callSession", convertCallSessionToMap(callSession));
141
+ sendEvent("CallManager_onCallReceive", params);
142
+ }
143
+ };
144
+ mReceiveListeners.put(key, listener);
145
+ getCallManager().addReceiveListener(key, listener);
146
+ }
147
+
148
+ @ReactMethod
149
+ public void removeReceiveListener(String key) {
150
+ ICallManager.ICallReceiveListener listener = mReceiveListeners.remove(key);
151
+ if (listener != null) {
152
+ getCallManager().removeReceiveListener(key);
153
+ }
154
+ }
155
+
156
+ @ReactMethod
157
+ public void addConversationCallListener(String key) {
158
+ ICallManager.IConversationCallListener listener = new ICallManager.IConversationCallListener() {
159
+ @Override
160
+ public void onCallInfoUpdate(CallInfo callInfo, Conversation conversation, boolean isFinished) {
161
+ WritableMap params = Arguments.createMap();
162
+ params.putString("key", key);
163
+ params.putMap("callInfo", convertCallInfoToMap(callInfo));
164
+ // params.putMap("conversation", RNTypeConverter.toWritableMap(conversation));
165
+ // // Use RNTypeConverter for Conversation
166
+ // Since I can't access RNTypeConverter.toWritableMap easily if it's protected
167
+ // or I need to handle Enums manually for Conversation if needed.
168
+ // Assuming RNTypeConverter works fine for POJO Conversation.
169
+ // But RNTypeConverter.toWritableMap(obj) is public.
170
+ params.putMap("conversation", RNTypeConverter.toWritableMap(conversation));
171
+ params.putBoolean("isFinished", isFinished);
172
+ sendEvent("CallManager_onCallInfoUpdate", params);
173
+ }
174
+ };
175
+ mConversationCallListeners.put(key, listener);
176
+ getCallManager().addConversationCallListener(key, listener);
177
+ }
178
+
179
+ @ReactMethod
180
+ public void removeConversationCallListener(String key) {
181
+ ICallManager.IConversationCallListener listener = mConversationCallListeners.remove(key);
182
+ if (listener != null) {
183
+ getCallManager().removeConversationCallListener(key);
184
+ }
185
+ }
186
+
187
+ // Session Methods
188
+
189
+ @ReactMethod
190
+ public void accept(String callId) {
191
+ ICallSession session = getCallManager().getCallSession(callId);
192
+ if (session != null)
193
+ session.accept();
194
+ }
195
+
196
+ @ReactMethod
197
+ public void hangup(String callId) {
198
+ ICallSession session = getCallManager().getCallSession(callId);
199
+ if (session != null)
200
+ session.hangup();
201
+ }
202
+
203
+ @ReactMethod
204
+ public void enableCamera(String callId, boolean enable) {
205
+ ICallSession session = getCallManager().getCallSession(callId);
206
+ if (session != null)
207
+ session.enableCamera(enable);
208
+ }
209
+
210
+ @ReactMethod
211
+ public void muteMicrophone(String callId, boolean mute) {
212
+ ICallSession session = getCallManager().getCallSession(callId);
213
+ if (session != null)
214
+ session.muteMicrophone(mute);
215
+ }
216
+
217
+ @ReactMethod
218
+ public void muteSpeaker(String callId, boolean mute) {
219
+ ICallSession session = getCallManager().getCallSession(callId);
220
+ if (session != null)
221
+ session.muteSpeaker(mute);
222
+ }
223
+
224
+ @ReactMethod
225
+ public void setSpeakerEnable(String callId, boolean enable) {
226
+ ICallSession session = getCallManager().getCallSession(callId);
227
+ if (session != null)
228
+ session.setSpeakerEnable(enable);
229
+ }
230
+
231
+ @ReactMethod
232
+ public void useFrontCamera(String callId, boolean enable) {
233
+ ICallSession session = getCallManager().getCallSession(callId);
234
+ if (session != null)
235
+ session.useFrontCamera(enable);
236
+ }
237
+
238
+ @ReactMethod
239
+ public void inviteUsers(String callId, ReadableArray userIdList) {
240
+ ICallSession session = getCallManager().getCallSession(callId);
241
+ if (session != null) {
242
+ List<String> list = new ArrayList<>();
243
+ for (int i = 0; i < userIdList.size(); i++) {
244
+ list.add(userIdList.getString(i));
245
+ }
246
+ session.inviteUsers(list);
247
+ }
248
+ }
249
+
250
+ @ReactMethod
251
+ public void enableAEC(String callId, boolean enable) {
252
+ ICallSession session = getCallManager().getCallSession(callId);
253
+ if (session != null)
254
+ session.enableAEC(enable);
255
+ }
256
+
257
+ @ReactMethod
258
+ public void setVideoDenoiseParams(String callId, ReadableMap params) {
259
+ ICallSession session = getCallManager().getCallSession(callId);
260
+ if (session != null) {
261
+ CallVideoDenoiseParams p = new CallVideoDenoiseParams();
262
+ // TODO: Populate 'p' from 'params'
263
+ session.setVideoDenoiseParams(p);
264
+ }
265
+ }
266
+
267
+ @ReactMethod
268
+ public void setVideoView(String callId, String userId, int viewTag, Promise promise) {
269
+ mReactContext.runOnUiQueueThread(() -> {
270
+ ICallSession session = getCallManager().getCallSession(callId);
271
+ if (session == null)
272
+ return;
273
+
274
+ try {
275
+ int uiManagerType = ViewUtil.getUIManagerType(viewTag);
276
+ UIManager uiManager = UIManagerHelper.getUIManager(mReactContext, uiManagerType);
277
+ android.view.View view = uiManager.resolveView(viewTag);
278
+ session.setVideoView(userId, ((com.juggleim.call.view.ZegoSurfaceView) view).getView());
279
+ } catch (Exception e) {
280
+ e.printStackTrace();
281
+ }
282
+ });
283
+ promise.resolve(null);
284
+ }
285
+
286
+ @ReactMethod
287
+ public void startPreview(String callId, int viewTag, Promise promise) {
288
+ mReactContext.runOnUiQueueThread(() -> {
289
+ ICallSession session = getCallManager().getCallSession(callId);
290
+ if (session == null)
291
+ return;
292
+
293
+ try {
294
+ int uiManagerType = ViewUtil.getUIManagerType(viewTag);
295
+ UIManager uiManager = UIManagerHelper.getUIManager(mReactContext, uiManagerType);
296
+ android.view.View view = uiManager.resolveView(viewTag);
297
+ Log.d("JuggleIMCall",
298
+ "viewTag: " + viewTag + ", uiManagerType: " + uiManagerType + ", uiManager: " + uiManager
299
+ + ", view: " + view);
300
+ if (view == null) {
301
+ return;
302
+ }
303
+ session.startPreview(((com.juggleim.call.view.ZegoSurfaceView) view).getView());
304
+ } catch (Exception e) {
305
+ e.printStackTrace();
306
+ }
307
+ });
308
+ promise.resolve(null);
309
+ }
310
+
311
+ @ReactMethod
312
+ public void addSessionListener(String callId, String key) {
313
+ ICallSession session = getCallManager().getCallSession(callId);
314
+ if (session == null) {
315
+ Log.d("JuggleIMCall", "addSessionListener: session is null");
316
+ return;
317
+ }
318
+
319
+ ICallSession.ICallSessionListener listener = new ICallSession.ICallSessionListener() {
320
+ @Override
321
+ public void onCallConnect() {
322
+ WritableMap params = Arguments.createMap();
323
+ params.putString("callId", callId);
324
+ sendEvent("CallSession_onCallConnect", params);
325
+ }
326
+
327
+ @Override
328
+ public void onCallFinish(CallConst.CallFinishReason finishReason) {
329
+ WritableMap params = Arguments.createMap();
330
+ params.putString("callId", callId);
331
+ params.putInt("finishReason", finishReason.getValue());
332
+ sendEvent("CallSession_onCallFinish", params);
333
+ }
334
+
335
+ @Override
336
+ public void onErrorOccur(CallConst.CallErrorCode errorCode) {
337
+ WritableMap params = Arguments.createMap();
338
+ params.putString("callId", callId);
339
+ params.putInt("errorCode", errorCode.getValue());
340
+ sendEvent("CallSession_onErrorOccur", params);
341
+ }
342
+
343
+ @Override
344
+ public void onUsersInvite(String inviterId, List<String> userIdList) {
345
+ WritableMap params = Arguments.createMap();
346
+ params.putString("callId", callId);
347
+ params.putString("inviterId", inviterId);
348
+ params.putArray("userIdList", convertListToWritableArray(userIdList));
349
+ sendEvent("CallSession_onUsersInvite", params);
350
+ }
351
+
352
+ @Override
353
+ public void onUsersConnect(List<String> userIdList) {
354
+ WritableMap params = Arguments.createMap();
355
+ params.putString("callId", callId);
356
+ params.putArray("userIdList", convertListToWritableArray(userIdList));
357
+ sendEvent("CallSession_onUsersConnect", params);
358
+ }
359
+
360
+ @Override
361
+ public void onUsersLeave(List<String> userIdList) {
362
+ WritableMap params = Arguments.createMap();
363
+ params.putString("callId", callId);
364
+ params.putArray("userIdList", convertListToWritableArray(userIdList));
365
+ sendEvent("CallSession_onUsersLeave", params);
366
+ }
367
+
368
+ @Override
369
+ public void onUserCameraEnable(String userId, boolean enable) {
370
+ WritableMap params = Arguments.createMap();
371
+ params.putString("callId", callId);
372
+ params.putString("userId", userId);
373
+ params.putBoolean("enable", enable);
374
+ sendEvent("CallSession_onUserCameraEnable", params);
375
+ }
376
+
377
+ @Override
378
+ public void onUserMicrophoneEnable(String userId, boolean enable) {
379
+ WritableMap params = Arguments.createMap();
380
+ params.putString("callId", callId);
381
+ params.putString("userId", userId);
382
+ params.putBoolean("enable", enable);
383
+ sendEvent("CallSession_onUserMicrophoneEnable", params);
384
+ }
385
+
386
+ @Override
387
+ public void onSoundLevelUpdate(HashMap<String, Float> soundLevels) {
388
+ WritableMap params = Arguments.createMap();
389
+ params.putString("callId", callId);
390
+ WritableMap levels = Arguments.createMap();
391
+ for (Map.Entry<String, Float> entry : soundLevels.entrySet()) {
392
+ levels.putDouble(entry.getKey(), entry.getValue().doubleValue());
393
+ }
394
+ params.putMap("soundLevels", levels);
395
+ sendEvent("CallSession_onSoundLevelUpdate", params);
396
+ }
397
+
398
+ @Override
399
+ public void onVideoFirstFrameRender(String userId) {
400
+ WritableMap params = Arguments.createMap();
401
+ params.putString("callId", callId);
402
+ params.putString("userId", userId);
403
+ sendEvent("CallSession_onVideoFirstFrameRender", params);
404
+ }
405
+ };
406
+
407
+ // Store listener
408
+ if (!mCallSessionListeners.containsKey(callId)) {
409
+ mCallSessionListeners.put(callId, new HashMap<>());
410
+ }
411
+ mCallSessionListeners.get(callId).put(key, listener);
412
+
413
+ session.addListener(key, listener);
414
+ }
415
+
416
+ @ReactMethod
417
+ public void removeSessionListener(String callId, String key) {
418
+ ICallSession session = getCallManager().getCallSession(callId);
419
+ if (session != null) {
420
+ session.removeListener(key);
421
+ }
422
+ if (mCallSessionListeners.containsKey(callId)) {
423
+ mCallSessionListeners.get(callId).remove(key);
424
+ }
425
+ }
426
+
427
+ private void sendEvent(String eventName, WritableMap params) {
428
+ mReactContext
429
+ .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
430
+ .emit(eventName, params);
431
+ }
432
+
433
+ private WritableMap convertCallSessionToMap(ICallSession session) {
434
+ WritableMap map = Arguments.createMap();
435
+ map.putString("callId", session.getCallId());
436
+ map.putBoolean("isMultiCall", session.isMultiCall());
437
+ map.putInt("mediaType", session.getMediaType().getValue());
438
+ map.putInt("callStatus", session.getCallStatus().getStatus());
439
+ map.putDouble("startTime", session.getStartTime());
440
+ map.putDouble("connectTime", session.getConnectTime());
441
+ map.putDouble("finishTime", session.getFinishTime());
442
+ map.putString("owner", session.getOwner());
443
+ map.putString("inviter", session.getInviter());
444
+ map.putInt("finishReason", session.getFinishReason() == null ? 0 : session.getFinishReason().getValue());
445
+ map.putString("extra", session.getExtra());
446
+
447
+ WritableArray members = Arguments.createArray();
448
+ for (CallMember member : session.getMembers()) {
449
+ members.pushMap(convertCallMemberToMap(member));
450
+ }
451
+ map.putArray("members", members);
452
+
453
+ if (session.getCurrentCallMember() != null) {
454
+ map.putMap("currentMember", convertCallMemberToMap(session.getCurrentCallMember()));
455
+ }
456
+
457
+ return map;
458
+ }
459
+
460
+ private WritableMap convertCallMemberToMap(CallMember member) {
461
+ WritableMap map = Arguments.createMap();
462
+ map.putMap("userInfo", convertUserInfoToMap(member.getUserInfo()));
463
+ map.putInt("callStatus", member.getCallStatus().getStatus());
464
+ map.putDouble("startTime", member.getStartTime());
465
+ map.putDouble("connectTime", member.getConnectTime());
466
+ map.putDouble("finishTime", member.getFinishTime());
467
+ map.putMap("inviter", convertUserInfoToMap(member.getInviter()));
468
+ return map;
469
+ }
470
+
471
+ private WritableMap convertUserInfoToMap(UserInfo userInfo) {
472
+ if (userInfo == null)
473
+ return null;
474
+ WritableMap map = Arguments.createMap();
475
+ map.putString("userId", userInfo.getUserId());
476
+ map.putString("nickname", userInfo.getUserName());
477
+ map.putString("avatar", userInfo.getPortrait());
478
+ return map;
479
+ }
480
+
481
+ private WritableMap convertCallInfoToMap(CallInfo info) {
482
+ WritableMap map = Arguments.createMap();
483
+ map.putString("callId", info.getCallId());
484
+ map.putBoolean("isMultiCall", info.isMultiCall());
485
+ map.putInt("mediaType", info.getMediaType().getValue());
486
+ map.putMap("owner", convertUserInfoToMap(info.getOwner()));
487
+ map.putString("extra", info.getExtra());
488
+
489
+ WritableArray members = Arguments.createArray();
490
+ for (CallMember member : info.getMembers()) {
491
+ members.pushMap(convertCallMemberToMap(member));
492
+ }
493
+ map.putArray("members", members);
494
+
495
+ return map;
496
+ }
497
+
498
+ private WritableArray convertListToWritableArray(List<String> list) {
499
+ WritableArray array = Arguments.createArray();
500
+ if (list != null) {
501
+ for (String item : list) {
502
+ array.pushString(item);
503
+ }
504
+ }
505
+ return array;
506
+ }
507
+ }
@@ -0,0 +1,32 @@
1
+
2
+ package com.juggleim.call.view;
3
+
4
+ import com.facebook.react.uimanager.SimpleViewManager;
5
+ import com.facebook.react.uimanager.ThemedReactContext;
6
+ import com.facebook.react.uimanager.annotations.ReactProp;
7
+
8
+ import androidx.annotation.NonNull;
9
+
10
+ public class RCTZegoSurfaceViewManager extends SimpleViewManager<ZegoSurfaceView> {
11
+ @NonNull
12
+ @Override
13
+ public String getName() {
14
+ return "RCTZegoSurfaceView";
15
+ }
16
+
17
+ @NonNull
18
+ @Override
19
+ protected ZegoSurfaceView createViewInstance(@NonNull ThemedReactContext reactContext) {
20
+ return new ZegoSurfaceView(reactContext);
21
+ }
22
+
23
+ @ReactProp(name = "zOrderMediaOverlay")
24
+ public void setZOrderMediaOverlay(ZegoSurfaceView view, boolean isMediaOverlay) {
25
+ view.setZOrderMediaOverlay(isMediaOverlay);
26
+ }
27
+
28
+ @ReactProp(name = "zOrderOnTop")
29
+ public void setZOrderOnTop(ZegoSurfaceView view, boolean onTop) {
30
+ view.setZOrderOnTop(onTop);
31
+ }
32
+ }
@@ -0,0 +1,43 @@
1
+
2
+ package com.juggleim.call.view;
3
+
4
+ import android.content.Context;
5
+ import android.view.SurfaceView;
6
+ import android.widget.FrameLayout;
7
+
8
+ import androidx.annotation.NonNull;
9
+
10
+ public class ZegoSurfaceView extends FrameLayout {
11
+
12
+ private SurfaceView surfaceView;
13
+
14
+ public ZegoSurfaceView(@NonNull Context context) {
15
+ super(context);
16
+ surfaceView = new SurfaceView(context);
17
+ addView(surfaceView);
18
+ }
19
+
20
+ public SurfaceView getView() {
21
+ return surfaceView;
22
+ }
23
+
24
+ public void setZOrderMediaOverlay(boolean isMediaOverlay) {
25
+ removeView(surfaceView);
26
+ surfaceView.setZOrderMediaOverlay(isMediaOverlay);
27
+ addView(surfaceView);
28
+ }
29
+
30
+ public void setZOrderOnTop(boolean onTop) {
31
+ removeView(surfaceView);
32
+ surfaceView.setZOrderOnTop(onTop);
33
+ addView(surfaceView);
34
+ }
35
+
36
+ @Override
37
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
38
+ int width = MeasureSpec.getSize(widthMeasureSpec);
39
+ int height = MeasureSpec.getSize(heightMeasureSpec);
40
+ surfaceView.layout(0, 0, width, height);
41
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
42
+ }
43
+ }
@@ -158,11 +158,13 @@
158
158
  if (info.userId) {
159
159
  [dic setObject:info.userId forKey:@"userId"];
160
160
  }
161
+ // Map iOS userName to JS 'nickname' field
161
162
  if (info.userName) {
162
- [dic setObject:info.userName forKey:@"userName"];
163
+ [dic setObject:info.userName forKey:@"nickname"];
163
164
  }
165
+ // Map iOS portrait to JS 'avatar' field
164
166
  if (info.portrait) {
165
- [dic setObject:info.portrait forKey:@"portrait"];
167
+ [dic setObject:info.portrait forKey:@"avatar"];
166
168
  }
167
169
  if (info.extraDic) {
168
170
  [dic setObject:info.extraDic forKey:@"extraMap"];
@@ -326,8 +328,9 @@
326
328
  if (callSession.owner) {
327
329
  [dic setObject:callSession.owner forKey:@"owner"];
328
330
  }
331
+ // Map iOS inviterId to JS 'inviter' field
329
332
  if (callSession.inviterId) {
330
- [dic setObject:callSession.inviterId forKey:@"inviterId"];
333
+ [dic setObject:callSession.inviterId forKey:@"inviter"];
331
334
  }
332
335
  if (callSession.extra) {
333
336
  [dic setObject:callSession.extra forKey:@"extra"];
@@ -340,6 +343,12 @@
340
343
  }
341
344
  [dic setObject:memberDicArray forKey:@"members"];
342
345
 
346
+ // Add currentMember field
347
+ if (callSession.currentCallMember) {
348
+ [dic setObject:[self callMemberToDic:callSession.currentCallMember]
349
+ forKey:@"currentMember"];
350
+ }
351
+
343
352
  return [dic copy];
344
353
  }
345
354
 
@@ -819,13 +819,12 @@ RCT_EXPORT_METHOD(setUnread : (NSDictionary *)conversationMap resolver : (
819
819
  /**
820
820
  * 获取置顶会话列表
821
821
  */
822
- RCT_EXPORT_METHOD(getTopConversationInfoList : (int)count timestamp : (
823
- long long)timestamp pullDirection : (NSString *)
824
- pullDirection resolver : (RCTPromiseResolveBlock)
825
- resolve rejecter : (RCTPromiseRejectBlock)reject) {
826
- JPullDirection direction = [@"up" isEqualToString:pullDirection]
827
- ? JPullDirectionNewer
828
- : JPullDirectionOlder;
822
+ RCT_EXPORT_METHOD(getTopConversationInfoList:(int)count
823
+ timestamp:(double)timestamp
824
+ pullDirection:(int)pullDirection
825
+ resolver:(RCTPromiseResolveBlock)resolve
826
+ rejecter:(RCTPromiseRejectBlock)reject) {
827
+ JPullDirection direction = pullDirection == 0 ? JPullDirectionNewer : JPullDirectionOlder;
829
828
 
830
829
  NSArray<JConversationInfo *> *conversationInfos =
831
830
  [JIM.shared.conversationManager
@@ -0,0 +1,10 @@
1
+ #import <React/RCTBridgeModule.h>
2
+ #import <React/RCTEventEmitter.h>
3
+ #import <React/RCTViewManager.h>
4
+ #import <React/RCTUIManager.h>
5
+ /**
6
+ * Juggle IM Call React Native iOS 模块
7
+ */
8
+ @interface JuggleIMCallModule : RCTEventEmitter <RCTBridgeModule>
9
+
10
+ @end