rebreak-monorepo/patches/react-native-callkeep.patch
chahinebrini 6a907cf89b fix(calls): sandbox/prod VoIP-push failover + foreground CallKit-UI suppress
- voip-push: build both APNs Provider (production+sandbox) and try each per
  token with memoization. Fixes BadDeviceToken on Xcode-Dev-Builds where the
  token is Sandbox-only.
- stores/call: only call callkit.displayIncomingCall when app NOT in foreground
  \u2014 in foreground the /call route handles ringing UI, otherwise double UI
  (system banner + fullscreen).
- patch react-native-callkeep: New-Arch TurboModule compatibility (no overloads,
  no Bundle params in @ReactMethod).
- pushTokenRegistration: more verbose [voip] diagnostics.
2026-06-04 19:42:44 +02:00

73 lines
4.1 KiB
Diff

diff --git a/android/src/main/java/io/wazo/callkeep/RNCallKeepModule.java b/android/src/main/java/io/wazo/callkeep/RNCallKeepModule.java
index 025480ac97460cc45775ea11aa43af36522d5df6..106fbf0081b21ea02029add0aca86f55e8a55c07 100644
--- a/android/src/main/java/io/wazo/callkeep/RNCallKeepModule.java
+++ b/android/src/main/java/io/wazo/callkeep/RNCallKeepModule.java
@@ -189,7 +189,7 @@ public class RNCallKeepModule extends ReactContextBaseJavaModule implements Life
public void reportNewIncomingCall(String uuid, String number, String callerName, boolean hasVideo, String payload) {
Log.d(TAG, "[RNCallKeepModule] reportNewIncomingCall, uuid: " + uuid + ", number: " + number + ", callerName: " + callerName);
- this.displayIncomingCall(uuid, number, callerName, hasVideo);
+ this.displayIncomingCall(uuid, number, callerName, hasVideo, null);
// Send event to JS
WritableMap args = Arguments.createMap();
@@ -434,17 +434,26 @@ public class RNCallKeepModule extends ReactContextBaseJavaModule implements Life
this.hasListeners = false;
}
- @ReactMethod
- public void displayIncomingCall(String uuid, String number, String callerName) {
+ // REBREAK_PATCH: @ReactMethod entfernt — RN New Architecture TurboModule
+ // erlaubt keine overloaded methods mit gleichem JS-Namen. JS ruft immer den
+ // 5-arg-Overload (siehe RNCallKeep.js displayIncomingCall implementation).
+ public void displayIncomingCall3args(String uuid, String number, String callerName) {
this.displayIncomingCall(uuid, number, callerName, false, null);
}
+ // REBREAK_PATCH: TurboModule-Interop unterstützt android.os.Bundle nicht als
+ // @ReactMethod-Parameter. Daher: 4-arg-Variante (ohne Bundle) ist die einzige
+ // exposed @ReactMethod. JS-Wrapper ruft nie mit payload-Bundle.
@ReactMethod
public void displayIncomingCall(String uuid, String number, String callerName, boolean hasVideo) {
- this.displayIncomingCall(uuid, number, callerName, hasVideo, null);
+ this.displayIncomingCallInternal(uuid, number, callerName, hasVideo, null);
}
public void displayIncomingCall(String uuid, String number, String callerName, boolean hasVideo, @Nullable Bundle payload) {
+ this.displayIncomingCallInternal(uuid, number, callerName, hasVideo, payload);
+ }
+
+ private void displayIncomingCallInternal(String uuid, String number, String callerName, boolean hasVideo, @Nullable Bundle payload) {
if (!isConnectionServiceAvailable() || !hasPhoneAccount()) {
Log.w(TAG, "[RNCallKeepModule] displayIncomingCall ignored due to no ConnectionService or no phone account");
return;
@@ -483,17 +492,25 @@ public class RNCallKeepModule extends ReactContextBaseJavaModule implements Life
conn.onAnswer();
}
- @ReactMethod
- public void startCall(String uuid, String number, String callerName) {
+ // REBREAK_PATCH: @ReactMethod entfernt (siehe displayIncomingCall above).
+ public void startCall3args(String uuid, String number, String callerName) {
this.startCall(uuid, number, callerName, false, null);
}
+ public void startCall4args(String uuid, String number, String callerName, boolean hasVideo) {
+ this.startCall(uuid, number, callerName, hasVideo, null);
+ }
+
@ReactMethod
public void startCall(String uuid, String number, String callerName, boolean hasVideo) {
- this.startCall(uuid, number, callerName, hasVideo, null);
+ this.startCallInternal(uuid, number, callerName, hasVideo, null);
}
public void startCall(String uuid, String number, String callerName, boolean hasVideo, @Nullable Bundle payload) {
+ this.startCallInternal(uuid, number, callerName, hasVideo, payload);
+ }
+
+ private void startCallInternal(String uuid, String number, String callerName, boolean hasVideo, @Nullable Bundle payload) {
Log.d(TAG, "[RNCallKeepModule] startCall called, uuid: " + uuid + ", number: " + number + ", callerName: " + callerName + ", payload: " + payload);
if (!isConnectionServiceAvailable() || !hasPhoneAccount() || !hasPermissions() || number == null) {