@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.
- package/android/src/main/AndroidManifest.xml +31 -0
- package/android/src/main/java/com/margelo/nitro/qusaieilouti99/callmanager/CallActivity.kt +26 -12
- package/android/src/main/java/com/margelo/nitro/qusaieilouti99/callmanager/CallEngine.kt +412 -53
- package/android/src/main/java/com/margelo/nitro/qusaieilouti99/callmanager/CallForegroundService.kt +22 -6
- package/android/src/main/java/com/margelo/nitro/qusaieilouti99/callmanager/CallManager.kt +59 -18
- package/android/src/main/java/com/margelo/nitro/qusaieilouti99/callmanager/CallNotificationActionReceiver.kt +10 -8
- package/android/src/main/java/com/margelo/nitro/qusaieilouti99/callmanager/MyConnection.kt +80 -16
- package/android/src/main/java/com/margelo/nitro/qusaieilouti99/callmanager/MyConnectionService.kt +25 -3
- package/lib/module/CallEventType.js +0 -16
- package/lib/module/CallEventType.js.map +1 -1
- package/lib/module/index.js +2 -2
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/CallEventType.d.ts +1 -13
- package/lib/typescript/src/CallEventType.d.ts.map +1 -1
- package/lib/typescript/src/CallManager.nitro.d.ts +7 -1
- package/lib/typescript/src/CallManager.nitro.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +5 -3
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/nitrogen/generated/android/c++/JAudioRoutesInfo.hpp +75 -0
- package/nitrogen/generated/android/c++/JHybridCallManagerSpec.cpp +15 -12
- package/nitrogen/generated/android/c++/JHybridCallManagerSpec.hpp +3 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/qusaieilouti99/callmanager/AudioRoutesInfo.kt +27 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/qusaieilouti99/callmanager/HybridCallManagerSpec.kt +9 -1
- package/nitrogen/generated/ios/CallManager-Swift-Cxx-Bridge.hpp +9 -6
- package/nitrogen/generated/ios/CallManager-Swift-Cxx-Umbrella.hpp +3 -0
- package/nitrogen/generated/ios/c++/HybridCallManagerSpecSwift.hpp +16 -1
- package/nitrogen/generated/ios/swift/AudioRoutesInfo.swift +58 -0
- package/nitrogen/generated/ios/swift/CallEventType.swift +1 -1
- package/nitrogen/generated/ios/swift/HybridCallManagerSpec.swift +3 -1
- package/nitrogen/generated/ios/swift/HybridCallManagerSpec_cxx.swift +26 -10
- package/nitrogen/generated/shared/c++/AudioRoutesInfo.hpp +74 -0
- package/nitrogen/generated/shared/c++/CallEventType.hpp +57 -16
- package/nitrogen/generated/shared/c++/HybridCallManagerSpec.cpp +2 -0
- package/nitrogen/generated/shared/c++/HybridCallManagerSpec.hpp +6 -2
- package/package.json +1 -1
- package/src/CallEventType.ts +12 -13
- package/src/CallManager.nitro.ts +12 -1
- 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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
}
|