@qusaieilouti99/call-manager 0.1.32 → 0.1.34

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 (38) hide show
  1. package/android/src/main/AndroidManifest.xml +31 -0
  2. package/android/src/main/java/com/margelo/nitro/qusaieilouti99/callmanager/CallActivity.kt +26 -12
  3. package/android/src/main/java/com/margelo/nitro/qusaieilouti99/callmanager/CallEngine.kt +412 -53
  4. package/android/src/main/java/com/margelo/nitro/qusaieilouti99/callmanager/CallForegroundService.kt +22 -6
  5. package/android/src/main/java/com/margelo/nitro/qusaieilouti99/callmanager/CallManager.kt +59 -18
  6. package/android/src/main/java/com/margelo/nitro/qusaieilouti99/callmanager/CallNotificationActionReceiver.kt +10 -8
  7. package/android/src/main/java/com/margelo/nitro/qusaieilouti99/callmanager/MyConnection.kt +80 -16
  8. package/android/src/main/java/com/margelo/nitro/qusaieilouti99/callmanager/MyConnectionService.kt +25 -3
  9. package/lib/module/CallEventType.js +0 -16
  10. package/lib/module/CallEventType.js.map +1 -1
  11. package/lib/module/index.js +2 -2
  12. package/lib/module/index.js.map +1 -1
  13. package/lib/typescript/src/CallEventType.d.ts +1 -13
  14. package/lib/typescript/src/CallEventType.d.ts.map +1 -1
  15. package/lib/typescript/src/CallManager.nitro.d.ts +7 -1
  16. package/lib/typescript/src/CallManager.nitro.d.ts.map +1 -1
  17. package/lib/typescript/src/index.d.ts +5 -3
  18. package/lib/typescript/src/index.d.ts.map +1 -1
  19. package/nitrogen/generated/android/c++/JAudioRoutesInfo.hpp +75 -0
  20. package/nitrogen/generated/android/c++/JHybridCallManagerSpec.cpp +15 -12
  21. package/nitrogen/generated/android/c++/JHybridCallManagerSpec.hpp +3 -1
  22. package/nitrogen/generated/android/kotlin/com/margelo/nitro/qusaieilouti99/callmanager/AudioRoutesInfo.kt +27 -0
  23. package/nitrogen/generated/android/kotlin/com/margelo/nitro/qusaieilouti99/callmanager/HybridCallManagerSpec.kt +9 -1
  24. package/nitrogen/generated/ios/CallManager-Swift-Cxx-Bridge.hpp +9 -6
  25. package/nitrogen/generated/ios/CallManager-Swift-Cxx-Umbrella.hpp +3 -0
  26. package/nitrogen/generated/ios/c++/HybridCallManagerSpecSwift.hpp +16 -1
  27. package/nitrogen/generated/ios/swift/AudioRoutesInfo.swift +58 -0
  28. package/nitrogen/generated/ios/swift/CallEventType.swift +1 -1
  29. package/nitrogen/generated/ios/swift/HybridCallManagerSpec.swift +3 -1
  30. package/nitrogen/generated/ios/swift/HybridCallManagerSpec_cxx.swift +26 -10
  31. package/nitrogen/generated/shared/c++/AudioRoutesInfo.hpp +74 -0
  32. package/nitrogen/generated/shared/c++/CallEventType.hpp +57 -16
  33. package/nitrogen/generated/shared/c++/HybridCallManagerSpec.cpp +2 -0
  34. package/nitrogen/generated/shared/c++/HybridCallManagerSpec.hpp +6 -2
  35. package/package.json +1 -1
  36. package/src/CallEventType.ts +12 -13
  37. package/src/CallManager.nitro.ts +12 -1
  38. package/src/index.tsx +4 -2
@@ -1,5 +1,30 @@
1
1
  <manifest xmlns:android="http://schemas.android.com/apk/res/android">
2
+
3
+ <!-- REQUIRED FOR TELECOM API (Self-managed connections) -->
4
+ <uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
5
+ <!-- Required for recording audio in calls -->
6
+ <uses-permission android:name="android.permission.RECORD_AUDIO" />
7
+ <!-- Required for changing audio routes like speakerphone -->
8
+ <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
9
+ <!-- For keeping screen awake during calls -->
10
+ <uses-permission android:name="android.permission.WAKE_LOCK" />
11
+ <!-- For vibrating the device (e.g., incoming call) -->
12
+ <uses-permission android:name="android.permission.VIBRATE" />
13
+
14
+ <!-- Bluetooth permissions for audio routing -->
15
+ <!-- For Android 11 (API 30) and lower -->
16
+ <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
17
+ <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
18
+ <!-- For Android 12 (API 31) and higher -->
19
+ <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
20
+
21
+ <!-- Required for foreground service on older devices (< Android P) -->
22
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
23
+ <!-- Required for foreground service with phoneCall type on Android 12 (API 31) and higher -->
24
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE_PHONE_CALL" />
25
+
2
26
  <application>
27
+ <!-- Your CallActivity for full-screen incoming call UI -->
3
28
  <activity
4
29
  android:name=".CallActivity"
5
30
  android:exported="true"
@@ -16,6 +41,8 @@
16
41
  <category android:name="android.intent.category.DEFAULT"/>
17
42
  </intent-filter>
18
43
  </activity>
44
+
45
+ <!-- The ConnectionService, crucial for Telecom API integration -->
19
46
  <service
20
47
  android:name=".MyConnectionService"
21
48
  android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE"
@@ -24,11 +51,15 @@
24
51
  <action android:name="android.telecom.ConnectionService" />
25
52
  </intent-filter>
26
53
  </service>
54
+
55
+ <!-- The foreground service to keep the call alive in the background -->
27
56
  <service
28
57
  android:name=".CallForegroundService"
29
58
  android:enabled="true"
30
59
  android:exported="false"
31
60
  android:foregroundServiceType="phoneCall" />
61
+
62
+ <!-- Receiver for notification actions (Answer/Decline) -->
32
63
  <receiver
33
64
  android:name=".CallNotificationActionReceiver"
34
65
  android:exported="false" />
@@ -1,4 +1,3 @@
1
- // CallActivity.kt
2
1
  package com.margelo.nitro.qusaieilouti99.callmanager
3
2
  import android.app.Activity
4
3
  import android.content.Intent
@@ -6,23 +5,29 @@ import android.os.Build
6
5
  import android.os.Bundle
7
6
  import android.os.Handler
8
7
  import android.os.Looper
8
+ import android.util.Log
9
9
  import android.view.WindowManager
10
10
  import android.widget.Button
11
11
  import android.widget.TextView
12
12
 
13
13
  class CallActivity : Activity() {
14
14
 
15
- private enum class FinishReason { ANSWER, DECLINE, TIMEOUT, MANUAL }
15
+ private enum class FinishReason { ANSWER, DECLINE, TIMEOUT, MANUAL_DISMISS }
16
16
  private var finishReason: FinishReason? = null
17
+ private var callId: String = ""
18
+ private var callType: String = "Audio"
17
19
 
18
20
  private val timeoutHandler = Handler(Looper.getMainLooper())
19
21
  private val timeoutRunnable = Runnable {
22
+ Log.d(TAG, "CallActivity timeout triggered for callId: $callId")
20
23
  finishReason = FinishReason.TIMEOUT
24
+ CallEngine.endCall(this, callId)
21
25
  finishCallActivity()
22
26
  }
23
27
 
24
28
  override fun onCreate(savedInstanceState: Bundle?) {
25
29
  super.onCreate(savedInstanceState)
30
+ Log.d(TAG, "CallActivity onCreate")
26
31
  window.addFlags(
27
32
  WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or
28
33
  WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON or
@@ -30,8 +35,11 @@ class CallActivity : Activity() {
30
35
  )
31
36
  setContentView(R.layout.activity_call)
32
37
 
38
+ callId = intent.getStringExtra("callId") ?: ""
39
+ callType = intent.getStringExtra("callType") ?: "Audio"
40
+ Log.d(TAG, "CallActivity received callId: $callId, callType: $callType")
41
+
33
42
  CallEngine.cancelIncomingCallUI(this)
34
- CallEngine.playRingtone(this)
35
43
 
36
44
  val callerName = intent.getStringExtra("callerName") ?: "Unknown"
37
45
  val nameView = findViewById<TextView>(R.id.caller_name)
@@ -41,14 +49,16 @@ class CallActivity : Activity() {
41
49
  nameView.text = callerName
42
50
 
43
51
  answerBtn.setOnClickListener {
44
- CallEngine.bringAppToForeground(this)
52
+ Log.d(TAG, "CallActivity: Answer button clicked for callId: $callId")
45
53
  finishReason = FinishReason.ANSWER
54
+ CallEngine.bringAppToForeground(this)
46
55
  finishCallActivity()
47
56
  }
48
57
 
49
58
  declineBtn.setOnClickListener {
50
- CallEngine.cancelIncomingCallUI(this)
59
+ Log.d(TAG, "CallActivity: Decline button clicked for callId: $callId")
51
60
  finishReason = FinishReason.DECLINE
61
+ CallEngine.endCall(this, callId)
52
62
  finishCallActivity()
53
63
  }
54
64
 
@@ -57,26 +67,30 @@ class CallActivity : Activity() {
57
67
 
58
68
  override fun onDestroy() {
59
69
  super.onDestroy()
70
+ Log.d(TAG, "CallActivity onDestroy for callId: $callId. Reason: $finishReason")
60
71
  timeoutHandler.removeCallbacks(timeoutRunnable)
61
72
  CallEngine.stopRingtone()
62
- CallEngine.cancelIncomingCallUI(this)
63
- // Only clean up call if not answered
64
- if (finishReason == FinishReason.DECLINE || finishReason == FinishReason.TIMEOUT || finishReason == FinishReason.MANUAL) {
65
- CallEngine.stopForegroundService(this)
66
- CallEngine.disconnectTelecomCall(this, intent.getStringExtra("callId") ?: "")
67
- }
68
73
  }
69
74
 
70
75
  override fun onBackPressed() {
71
- finishReason = FinishReason.MANUAL
76
+ Log.d(TAG, "CallActivity onBackPressed for callId: $callId. Treating as decline/dismiss.")
77
+ // Decision: User pressing back on the incoming call screen is treated as declining the call.
78
+ // If you want the call to continue ringing in the background, remove the CallEngine.endCall() line.
79
+ finishReason = FinishReason.MANUAL_DISMISS
80
+ CallEngine.endCall(this, callId)
72
81
  finishCallActivity()
73
82
  }
74
83
 
75
84
  private fun finishCallActivity() {
85
+ Log.d(TAG, "Finishing CallActivity.")
76
86
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
77
87
  finishAndRemoveTask()
78
88
  } else {
79
89
  finish()
80
90
  }
81
91
  }
92
+
93
+ companion object {
94
+ private const val TAG = "CallActivity"
95
+ }
82
96
  }