@stream-io/react-native-callingx 0.1.0-beta.1 → 0.1.0-beta.3

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 (45) hide show
  1. package/README.md +12 -8
  2. package/android/bin/src/main/AndroidManifest.xml +29 -0
  3. package/android/bin/src/main/java/io/getstream/rn/callingx/notifications/NotificationChannelsManager.kt +104 -0
  4. package/android/src/main/AndroidManifest.xml +0 -1
  5. package/android/src/main/java/io/getstream/rn/callingx/CallingxModule.kt +3 -3
  6. package/android/src/main/java/io/getstream/rn/callingx/notifications/NotificationChannelsManager.kt +9 -18
  7. package/dist/module/CallingxModule.js +2 -14
  8. package/dist/module/CallingxModule.js.map +1 -1
  9. package/dist/module/utils/constants.js +36 -9
  10. package/dist/module/utils/constants.js.map +1 -1
  11. package/dist/typescript/src/CallingxModule.d.ts +1 -5
  12. package/dist/typescript/src/CallingxModule.d.ts.map +1 -1
  13. package/dist/typescript/src/types.d.ts +41 -10
  14. package/dist/typescript/src/types.d.ts.map +1 -1
  15. package/dist/typescript/src/utils/constants.d.ts.map +1 -1
  16. package/ios/AudioSessionManager.swift +2 -7
  17. package/ios/CallingxImpl.swift +32 -27
  18. package/package.json +3 -3
  19. package/src/CallingxModule.ts +2 -30
  20. package/src/types.ts +35 -15
  21. package/src/utils/constants.ts +25 -16
  22. package/android/bin/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +0 -33
  23. package/android/bin/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json +0 -18
  24. package/android/bin/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties +0 -6
  25. package/android/bin/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +0 -4
  26. package/android/bin/build/intermediates/incremental/debug/packageDebugResources/merger.xml +0 -2
  27. package/android/bin/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +0 -60
  28. package/android/bin/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +0 -33
  29. package/android/bin/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json +0 -1
  30. package/android/bin/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt +0 -1
  31. package/android/bin/build/intermediates/packaged_res/debug/packageDebugResources/drawable/ic_phone_paused_24.xml +0 -11
  32. package/android/bin/build/intermediates/packaged_res/debug/packageDebugResources/drawable/ic_round_call_24.xml +0 -11
  33. package/android/bin/build/intermediates/packaged_res/debug/packageDebugResources/drawable/ic_user.xml +0 -27
  34. package/android/bin/build/outputs/logs/manifest-merger-debug-report.txt +0 -70
  35. package/android/bin/src/main/java/io/getstream/rn/callingx/CallService.kt +0 -402
  36. package/android/bin/src/main/java/io/getstream/rn/callingx/CallingxModule.kt +0 -644
  37. package/android/bin/src/main/java/io/getstream/rn/callingx/notifications/CallNotificationManager.kt +0 -245
  38. package/android/bin/src/main/java/io/getstream/rn/callingx/repo/CallRepository.kt +0 -163
  39. package/android/bin/src/main/java/io/getstream/rn/callingx/repo/LegacyCallRepository.kt +0 -139
  40. package/android/bin/src/main/java/io/getstream/rn/callingx/repo/TelecomCallRepository.kt +0 -432
  41. package/dist/module/utils/permissions.js +0 -86
  42. package/dist/module/utils/permissions.js.map +0 -1
  43. package/dist/typescript/src/utils/permissions.d.ts +0 -8
  44. package/dist/typescript/src/utils/permissions.d.ts.map +0 -1
  45. package/src/utils/permissions.ts +0 -111
@@ -41,6 +41,7 @@ import stream_react_native_webrtc
41
41
  private var isSetup: Bool = false
42
42
  private var isSelfAnswered: Bool = false
43
43
  private var isSelfEnded: Bool = false
44
+ private var isSelfMuted: Bool = false
44
45
  private var delayedEvents: [[String: Any]] = []
45
46
 
46
47
  // MARK: - Initialization
@@ -202,19 +203,8 @@ import stream_react_native_webrtc
202
203
  return
203
204
  }
204
205
 
205
- let endedReason: CXCallEndedReason
206
- switch reason {
207
- case 1:
208
- endedReason = .remoteEnded
209
- case 2:
210
- endedReason = .unanswered
211
- case 3:
212
- endedReason = .answeredElsewhere
213
- case 4:
214
- endedReason = .declinedElsewhere
215
- default:
216
- endedReason = .failed
217
- }
206
+ // CXCallEndedReason raw values: failed=1, remoteEnded=2, unanswered=3, answeredElsewhere=4, declinedElsewhere=5
207
+ let endedReason = CXCallEndedReason(rawValue: reason) ?? .failed
218
208
 
219
209
  sharedProvider?.reportCall(with: uuid, endedAt: Date(), reason: endedReason)
220
210
  uuidStorage?.removeCid(callId)
@@ -254,6 +244,7 @@ import stream_react_native_webrtc
254
244
 
255
245
  self?.isSelfAnswered = false
256
246
  self?.isSelfEnded = false
247
+ self?.isSelfMuted = false
257
248
  } else {
258
249
  #if DEBUG
259
250
  print("[Callingx][requestTransaction] Requested transaction successfully")
@@ -385,6 +376,7 @@ import stream_react_native_webrtc
385
376
  callerName: String,
386
377
  hasVideo: Bool
387
378
  ) -> Bool {
379
+ let uuid = CallingxImpl.uuidStorage?.getUUID(forCid: callId)
388
380
  CallingxImpl.reportNewIncomingCall(
389
381
  callId: callId,
390
382
  handle: phoneNumber,
@@ -400,15 +392,18 @@ import stream_react_native_webrtc
400
392
  completion: nil
401
393
  )
402
394
 
403
- let settings = Settings.getSettings()
404
- if let timeout = settings["displayCallTimeout"] as? Int {
405
- let popTime = DispatchTime.now() + .milliseconds(timeout)
406
- DispatchQueue.main.asyncAfter(deadline: popTime) { [weak self] in
407
- guard let self = self, !self.isSetup else { return }
408
- #if DEBUG
409
- print("[Callingx] Displayed a call without a reachable app, ending the call: \(callId)")
410
- #endif
411
- CallingxImpl.endCall(callId, reason: CXCallEndedReason.failed.rawValue)
395
+ let wasAlreadyAnswered = uuid != nil
396
+ if !wasAlreadyAnswered {
397
+ let settings = Settings.getSettings()
398
+ if let timeout = settings["displayCallTimeout"] as? Int {
399
+ let popTime = DispatchTime.now() + .milliseconds(timeout)
400
+ DispatchQueue.main.asyncAfter(deadline: popTime) { [weak self] in
401
+ guard let self = self, !self.isSetup else { return }
402
+ #if DEBUG
403
+ print("[Callingx] Displayed a call without a reachable app, ending the call: \(callId)")
404
+ #endif
405
+ CallingxImpl.endCall(callId, reason: CXCallEndedReason.failed.rawValue)
406
+ }
412
407
  }
413
408
  }
414
409
  return true
@@ -481,6 +476,7 @@ import stream_react_native_webrtc
481
476
  return false
482
477
  }
483
478
 
479
+ isSelfMuted = true
484
480
  let setMutedAction = CXSetMutedCallAction(call: uuid, muted: isMuted)
485
481
  let transaction = CXTransaction()
486
482
  transaction.addAction(setMutedAction)
@@ -662,8 +658,11 @@ import stream_react_native_webrtc
662
658
  }
663
659
 
664
660
  public func provider(_ provider: CXProvider, perform action: CXSetMutedCallAction) {
661
+ let isAppInitiated = isSelfMuted
662
+ isSelfMuted = false
663
+
665
664
  #if DEBUG
666
- print("[Callingx][CXProviderDelegate][provider:performSetMutedCallAction] \(action.isMuted)")
665
+ print("[Callingx][CXProviderDelegate][provider:performSetMutedCallAction] \(action.isMuted) isAppInitiated: \(isAppInitiated)")
667
666
  #endif
668
667
 
669
668
  guard let callId = CallingxImpl.uuidStorage?.getCid(forUUID: action.callUUID) else {
@@ -674,10 +673,16 @@ import stream_react_native_webrtc
674
673
  return
675
674
  }
676
675
 
677
- sendEvent(CallingxEvents.didPerformSetMutedCallAction, body: [
678
- "muted": action.isMuted,
679
- "callId": callId
680
- ])
676
+ // Only send the event to JS when the mute was initiated by the system
677
+ // (e.g. user tapped mute on the native CallKit UI).
678
+ // Skip app-initiated actions to prevent the feedback loop:
679
+ // app mutes mic → setMutedCall → CallKit delegate → event to JS → mic toggle → loop
680
+ if !isAppInitiated {
681
+ sendEvent(CallingxEvents.didPerformSetMutedCallAction, body: [
682
+ "muted": action.isMuted,
683
+ "callId": callId
684
+ ])
685
+ }
681
686
 
682
687
  action.fulfill()
683
688
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stream-io/react-native-callingx",
3
- "version": "0.1.0-beta.1",
3
+ "version": "0.1.0-beta.3",
4
4
  "description": "CallKit and Telecom API capabilities for React Native",
5
5
  "main": "./dist/module/index.js",
6
6
  "module": "./dist/module/index.js",
@@ -61,7 +61,7 @@
61
61
  "devDependencies": {
62
62
  "@react-native-community/cli": "20.0.1",
63
63
  "@react-native/babel-preset": "^0.81.5",
64
- "@stream-io/react-native-webrtc": "137.1.0",
64
+ "@stream-io/react-native-webrtc": "137.1.2-alpha.1",
65
65
  "@types/react": "^19.1.0",
66
66
  "del-cli": "^6.0.0",
67
67
  "react": "19.1.0",
@@ -70,7 +70,7 @@
70
70
  "typescript": "^5.9.2"
71
71
  },
72
72
  "peerDependencies": {
73
- "@stream-io/react-native-webrtc": ">=137.1.0",
73
+ "@stream-io/react-native-webrtc": ">=137.1.1",
74
74
  "react": "*",
75
75
  "react-native": "*"
76
76
  },
@@ -1,10 +1,5 @@
1
1
  import { Platform } from 'react-native';
2
2
  import NativeCallingModule from './spec/NativeCallingx';
3
- import {
4
- checkCallPermissions,
5
- requestCallPermissions,
6
- } from './utils/permissions';
7
- import type { PermissionsResult } from './utils/permissions';
8
3
  import {
9
4
  HEADLESS_TASK_NAME,
10
5
  registerHeadlessTask,
@@ -36,7 +31,6 @@ import {
36
31
  import { isVoipEvent } from './utils/utils';
37
32
 
38
33
  class CallingxModule implements ICallingxModule {
39
- private _isNotificationsAllowed = false;
40
34
  private _isSetup = false;
41
35
  private _isOngoingCallsEnabled = false;
42
36
  private _isHeadlessTaskRegistered = false;
@@ -49,14 +43,12 @@ class CallingxModule implements ICallingxModule {
49
43
  private voipEventManager: EventManager<VoipEventName, VoipEventParams> =
50
44
  new EventManager();
51
45
 
52
- get isNotificationsAllowed(): boolean {
46
+ get canPostNotifications(): boolean {
53
47
  if (Platform.OS !== 'android') {
54
48
  return true;
55
49
  }
56
50
 
57
- return (
58
- this._isNotificationsAllowed && NativeCallingModule.canPostNotifications()
59
- );
51
+ return NativeCallingModule.canPostNotifications();
60
52
  }
61
53
 
62
54
  get isOngoingCallsEnabled(): boolean {
@@ -120,26 +112,6 @@ class CallingxModule implements ICallingxModule {
120
112
  NativeCallingModule.setShouldRejectCallWhenBusy(shouldReject);
121
113
  }
122
114
 
123
- async requestPermissions(): Promise<PermissionsResult> {
124
- const result: {
125
- recordAudio: boolean;
126
- postNotifications: boolean;
127
- } = await requestCallPermissions();
128
-
129
- this._isNotificationsAllowed = result.postNotifications;
130
- return result;
131
- }
132
-
133
- async checkPermissions(): Promise<PermissionsResult> {
134
- const result: {
135
- recordAudio: boolean;
136
- postNotifications: boolean;
137
- } = await checkCallPermissions();
138
-
139
- this._isNotificationsAllowed = result.postNotifications;
140
- return result;
141
- }
142
-
143
115
  getInitialEvents(): EventData[] {
144
116
  return NativeCallingModule.getInitialEvents() as EventData[];
145
117
  }
package/src/types.ts CHANGED
@@ -1,9 +1,17 @@
1
1
  import type { EventListener } from './EventManager';
2
2
  import type { ManagableTask } from './utils/headlessTask';
3
- import type { PermissionsResult } from './utils/permissions';
4
3
 
5
4
  export interface ICallingxModule {
6
- get isNotificationsAllowed(): boolean;
5
+ /**
6
+ * Whether the module can post call notifications. Android only. iOS always returns true.
7
+ * Returns true when:
8
+ * - The incoming notification channel is enabled,
9
+ * - The ongoing notification channel is enabled,
10
+ * - And on Android 12 and below: app notifications are enabled in system settings.
11
+ * CallStyle is exempt from the POST_NOTIFICATIONS permission on Android 13+ when self-managing calls.
12
+ * @returns The boolean value.
13
+ */
14
+ get canPostNotifications(): boolean;
7
15
  get isOngoingCallsEnabled(): boolean;
8
16
  get isSetup(): boolean;
9
17
 
@@ -22,13 +30,6 @@ export interface ICallingxModule {
22
30
  * @param shouldReject - Whether to reject calls when the user is busy.
23
31
  */
24
32
  setShouldRejectCallWhenBusy(shouldReject: boolean): void;
25
- /**
26
- * Check the permissions.
27
- * @returns The permissions result.
28
- */
29
- checkPermissions(): Promise<PermissionsResult>;
30
-
31
- requestPermissions(): Promise<PermissionsResult>;
32
33
  /**
33
34
  * Get the initial events. This method is used to get the initial events from the app launch.
34
35
  * The events are queued and can be retrieved after the module is setup.
@@ -172,10 +173,7 @@ export type InternalIOSOptions = {
172
173
  };
173
174
  type iOSOptions = Omit<
174
175
  InternalIOSOptions,
175
- | 'maximumCallsPerCallGroup'
176
- | 'maximumCallGroups'
177
- | 'handleType'
178
- | 'setupAudioSession'
176
+ 'maximumCallsPerCallGroup' | 'maximumCallGroups' | 'handleType'
179
177
  >;
180
178
 
181
179
  export type InternalAndroidOptions = {
@@ -313,11 +311,33 @@ export type VoipEventParams = {
313
311
  };
314
312
  };
315
313
 
314
+ /**
315
+ * The reason for ending a call. These values are mapped to platform-specific
316
+ * constants on each platform:
317
+ * - iOS: `CXCallEndedReason` (CallKit)
318
+ * - Android: `DisconnectCause` (Telecom)
319
+ *
320
+ * @see https://developer.apple.com/documentation/callkit/cxcallendedreason
321
+ * @see https://developer.android.com/reference/android/telecom/DisconnectCause
322
+ */
316
323
  export type EndCallReason =
317
- | 'local' // when call is ended by the user
324
+ /** Call ended by the local user (e.g., hanging up). */
325
+ | 'local'
326
+ /** Call ended by the remote party, or outgoing call was not answered. */
318
327
  | 'remote'
328
+ /** Call was rejected/declined by the user. */
319
329
  | 'rejected'
330
+ /** Remote party was busy. */
320
331
  | 'busy'
332
+ /** Call was answered on another device. */
321
333
  | 'answeredElsewhere'
334
+ /** No response to an incoming call. */
322
335
  | 'missed'
323
- | 'error';
336
+ /** Call failed due to an error (e.g., network issue). */
337
+ | 'error'
338
+ /** Call was canceled before the remote party could answer. */
339
+ | 'canceled'
340
+ /** Call restricted (e.g., airplane mode, dialing restrictions). */
341
+ | 'restricted'
342
+ /** Unknown or unspecified disconnect reason. */
343
+ | 'unknown';
@@ -32,24 +32,33 @@ export const defaultAndroidOptions: DeepRequired<InternalAndroidOptions> = {
32
32
  },
33
33
  };
34
34
 
35
- // See ios/Callingx.mm for native iOS logic and constants mapping.
35
+ // iOS: maps to CXCallEndedReason raw values.
36
+ // See https://developer.apple.com/documentation/callkit/cxcallendedreason
37
+ // CXCallEndedReason: failed=1, remoteEnded=2, unanswered=3, answeredElsewhere=4, declinedElsewhere=5
36
38
  export const iosEndCallReasonMap: Record<EndCallReason, number> = {
37
- local: -1,
38
- remote: 1,
39
- rejected: 4,
40
- busy: 2,
41
- answeredElsewhere: 3,
42
- missed: 2,
43
- error: 0,
39
+ local: -1, // special: uses endCall() instead of endCallWithReason()
40
+ remote: 2, // .remoteEnded
41
+ rejected: 5, // .declinedElsewhere
42
+ busy: 3, // .unanswered
43
+ answeredElsewhere: 4, // .answeredElsewhere
44
+ missed: 3, // .unanswered
45
+ error: 1, // .failed
46
+ canceled: 2, // .remoteEnded (caller canceled before answer)
47
+ restricted: 1, // .failed (no iOS equivalent)
48
+ unknown: 1, // .failed (no iOS equivalent)
44
49
  };
45
50
 
46
- // https://developer.android.com/reference/android/telecom/DisconnectCause
51
+ // Android: maps to android.telecom.DisconnectCause constants.
52
+ // See https://developer.android.com/reference/android/telecom/DisconnectCause
47
53
  export const androidEndCallReasonMap: Record<EndCallReason, number> = {
48
- local: 2,
49
- remote: 3,
50
- rejected: 6,
51
- busy: 7,
52
- answeredElsewhere: 11,
53
- missed: 5,
54
- error: 1,
54
+ local: 2, // LOCAL
55
+ remote: 3, // REMOTE
56
+ rejected: 6, // REJECTED
57
+ busy: 7, // BUSY
58
+ answeredElsewhere: 11, // ANSWERED_ELSEWHERE
59
+ missed: 5, // MISSED
60
+ error: 1, // ERROR
61
+ canceled: 4, // CANCELED
62
+ restricted: 8, // RESTRICTED
63
+ unknown: 0, // UNKNOWN
55
64
  };
@@ -1,33 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
- package="io.getstream.rn.callingx" >
4
-
5
- <uses-sdk android:minSdkVersion="24" />
6
-
7
- <uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
8
- <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
9
- <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
10
- <uses-permission android:name="android.permission.FOREGROUND_SERVICE_PHONE_CALL" />
11
- <uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
12
-
13
- <application>
14
- <activity
15
- android:name="io.getstream.rn.callingx.notifications.NotificationReceiverActivity"
16
- android:excludeFromRecents="true"
17
- android:exported="false"
18
- android:noHistory="true"
19
- android:taskAffinity=""
20
- android:theme="@android:style/Theme.Translucent.NoTitleBar" />
21
-
22
- <service
23
- android:name="io.getstream.rn.callingx.notifications.NotificationReceiverService"
24
- android:exported="false" />
25
- <service
26
- android:name="io.getstream.rn.callingx.CallService"
27
- android:enabled="true"
28
- android:exported="false"
29
- android:foregroundServiceType="phoneCall"
30
- android:stopWithTask="true" />
31
- </application>
32
-
33
- </manifest>
@@ -1,18 +0,0 @@
1
- {
2
- "version": 3,
3
- "artifactType": {
4
- "type": "AAPT_FRIENDLY_MERGED_MANIFESTS",
5
- "kind": "Directory"
6
- },
7
- "applicationId": "io.getstream.rn.callingx",
8
- "variantName": "debug",
9
- "elements": [
10
- {
11
- "type": "SINGLE",
12
- "filters": [],
13
- "attributes": [],
14
- "outputFile": "AndroidManifest.xml"
15
- }
16
- ],
17
- "elementType": "File"
18
- }
@@ -1,6 +0,0 @@
1
- aarFormatVersion=1.0
2
- aarMetadataVersion=1.0
3
- minCompileSdk=1
4
- minCompileSdkExtension=0
5
- minAndroidGradlePluginVersion=1.0.0
6
- coreLibraryDesugaringEnabled=false
@@ -1,4 +0,0 @@
1
- #Wed Feb 04 17:19:56 CET 2026
2
- io.getstream.rn.callingx.stream-io_react-native-callingx-main-6\:/drawable/ic_phone_paused_24.xml=/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/build/intermediates/packaged_res/debug/packageDebugResources/drawable/ic_phone_paused_24.xml
3
- io.getstream.rn.callingx.stream-io_react-native-callingx-main-6\:/drawable/ic_round_call_24.xml=/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/build/intermediates/packaged_res/debug/packageDebugResources/drawable/ic_round_call_24.xml
4
- io.getstream.rn.callingx.stream-io_react-native-callingx-main-6\:/drawable/ic_user.xml=/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/build/intermediates/packaged_res/debug/packageDebugResources/drawable/ic_user.xml
@@ -1,2 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <merger version="3"><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="main$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="main" generated-set="main$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/res"><file name="ic_user" path="/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/res/drawable/ic_user.xml" qualifiers="" type="drawable"/><file name="ic_phone_paused_24" path="/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/res/drawable/ic_phone_paused_24.xml" qualifiers="" type="drawable"/><file name="ic_round_call_24" path="/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/res/drawable/ic_round_call_24.xml" qualifiers="" type="drawable"/></source></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="debug$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/debug/res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="debug" generated-set="debug$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/debug/res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="generated$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/build/generated/res/resValues/debug"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="generated" generated-set="generated$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/build/generated/res/resValues/debug"/></dataSet><mergedItems/></merger>
@@ -1,60 +0,0 @@
1
- 1<?xml version="1.0" encoding="utf-8"?>
2
- 2<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
- 3 package="io.getstream.rn.callingx" >
4
- 4
5
- 5 <uses-sdk android:minSdkVersion="24" />
6
- 6
7
- 7 <uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
8
- 7-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:3:3-73
9
- 7-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:3:20-70
10
- 8 <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
11
- 8-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:4:3-75
12
- 8-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:4:20-72
13
- 9 <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
14
- 9-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:5:3-75
15
- 9-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:5:20-72
16
- 10 <uses-permission android:name="android.permission.FOREGROUND_SERVICE_PHONE_CALL" />
17
- 10-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:6:3-86
18
- 10-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:6:20-83
19
- 11 <uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
20
- 11-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:7:3-79
21
- 11-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:7:20-76
22
- 12
23
- 13 <application>
24
- 13-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:9:3-29:17
25
- 14 <activity
26
- 14-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:10:5-16:69
27
- 15 android:name="io.getstream.rn.callingx.notifications.NotificationReceiverActivity"
28
- 15-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:11:7-89
29
- 16 android:excludeFromRecents="true"
30
- 16-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:12:7-40
31
- 17 android:exported="false"
32
- 17-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:13:7-31
33
- 18 android:noHistory="true"
34
- 18-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:14:7-31
35
- 19 android:taskAffinity=""
36
- 19-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:15:7-30
37
- 20 android:theme="@android:style/Theme.Translucent.NoTitleBar" />
38
- 20-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:16:7-66
39
- 21
40
- 22 <service
41
- 22-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:18:5-20:34
42
- 23 android:name="io.getstream.rn.callingx.notifications.NotificationReceiverService"
43
- 23-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:19:7-88
44
- 24 android:exported="false" />
45
- 24-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:20:7-31
46
- 25 <service
47
- 25-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:22:5-27:37
48
- 26 android:name="io.getstream.rn.callingx.CallService"
49
- 26-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:23:7-58
50
- 27 android:enabled="true"
51
- 27-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:24:7-29
52
- 28 android:exported="false"
53
- 28-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:25:7-31
54
- 29 android:foregroundServiceType="phoneCall"
55
- 29-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:26:7-48
56
- 30 android:stopWithTask="true" />
57
- 30-->/Users/greenfrvr/dev/stream/stream-video-js/sample-apps/react-native/dogfood/node_modules/@stream-io/react-native-callingx/android/src/main/AndroidManifest.xml:27:7-34
58
- 31 </application>
59
- 32
60
- 33</manifest>
@@ -1,33 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
- package="io.getstream.rn.callingx" >
4
-
5
- <uses-sdk android:minSdkVersion="24" />
6
-
7
- <uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
8
- <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
9
- <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
10
- <uses-permission android:name="android.permission.FOREGROUND_SERVICE_PHONE_CALL" />
11
- <uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
12
-
13
- <application>
14
- <activity
15
- android:name="io.getstream.rn.callingx.notifications.NotificationReceiverActivity"
16
- android:excludeFromRecents="true"
17
- android:exported="false"
18
- android:noHistory="true"
19
- android:taskAffinity=""
20
- android:theme="@android:style/Theme.Translucent.NoTitleBar" />
21
-
22
- <service
23
- android:name="io.getstream.rn.callingx.notifications.NotificationReceiverService"
24
- android:exported="false" />
25
- <service
26
- android:name="io.getstream.rn.callingx.CallService"
27
- android:enabled="true"
28
- android:exported="false"
29
- android:foregroundServiceType="phoneCall"
30
- android:stopWithTask="true" />
31
- </application>
32
-
33
- </manifest>
@@ -1,11 +0,0 @@
1
- <vector xmlns:android="http://schemas.android.com/apk/res/android"
2
- android:width="24dp"
3
- android:height="24dp"
4
- android:autoMirrored="true"
5
- android:tint="#000000"
6
- android:viewportWidth="24"
7
- android:viewportHeight="24">
8
- <path
9
- android:fillColor="@android:color/white"
10
- android:pathData="M16,3c-0.55,0 -1,0.45 -1,1v5c0,0.55 0.45,1 1,1s1,-0.45 1,-1L17,4c0,-0.55 -0.45,-1 -1,-1zM19,4v5c0,0.55 0.45,1 1,1s1,-0.45 1,-1L21,4c0,-0.55 -0.45,-1 -1,-1s-1,0.45 -1,1zM19.23,15.26l-2.54,-0.29c-0.61,-0.07 -1.21,0.14 -1.64,0.57l-1.84,1.84c-2.83,-1.44 -5.15,-3.75 -6.59,-6.59l1.85,-1.85c0.43,-0.43 0.64,-1.03 0.57,-1.64l-0.29,-2.52c-0.12,-1.01 -0.97,-1.77 -1.99,-1.77L5.03,3.01c-1.13,0 -2.07,0.94 -2,2.07 0.53,8.54 7.36,15.36 15.89,15.89 1.13,0.07 2.07,-0.87 2.07,-2v-1.73c0.01,-1.01 -0.75,-1.86 -1.76,-1.98z" />
11
- </vector>
@@ -1,11 +0,0 @@
1
- <vector xmlns:android="http://schemas.android.com/apk/res/android"
2
- android:width="24dp"
3
- android:height="24dp"
4
- android:autoMirrored="true"
5
- android:tint="#000000"
6
- android:viewportWidth="24"
7
- android:viewportHeight="24">
8
- <path
9
- android:fillColor="@android:color/white"
10
- android:pathData="M19.23,15.26l-2.54,-0.29c-0.61,-0.07 -1.21,0.14 -1.64,0.57l-1.84,1.84c-2.83,-1.44 -5.15,-3.75 -6.59,-6.59l1.85,-1.85c0.43,-0.43 0.64,-1.03 0.57,-1.64l-0.29,-2.52c-0.12,-1.01 -0.97,-1.77 -1.99,-1.77H5.03c-1.13,0 -2.07,0.94 -2,2.07 0.53,8.54 7.36,15.36 15.89,15.89 1.13,0.07 2.07,-0.87 2.07,-2v-1.73c0.01,-1.01 -0.75,-1.86 -1.76,-1.98z" />
11
- </vector>
@@ -1,27 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?><!--
2
- Copyright (c) 2024 Stream.io Inc. All rights reserved.
3
-
4
- Licensed under the Stream License;
5
- you may not use this file except in compliance with the License.
6
- You may obtain a copy of the License at
7
-
8
- https://github.com/GetStream/stream-video-android/blob/main/LICENSE
9
-
10
- Unless required by applicable law or agreed to in writing, software
11
- distributed under the License is distributed on an "AS IS" BASIS,
12
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- See the License for the specific language governing permissions and
14
- limitations under the License.
15
- -->
16
- <vector xmlns:android="http://schemas.android.com/apk/res/android"
17
- android:width="24dp"
18
- android:height="24dp"
19
- android:viewportWidth="960"
20
- android:viewportHeight="960">
21
- <path
22
- android:fillColor="#CCC"
23
- android:pathData="M480,0a480,480 0 1,0 0,960a480,480 0 1,0 0,-960" />
24
- <path
25
- android:fillColor="#434343"
26
- android:pathData="M480,480q-66,0 -113,-47t-47,-113q0,-66 47,-113t113,-47q66,0 113,47t47,113q0,66 -47,113t-113,47ZM160,720v-32q0,-34 17.5,-62.5T224,582q62,-31 126,-46.5T480,520q66,0 130,15.5T736,582q29,15 46.5,43.5T800,688v32q0,33 -23.5,56.5T720,800L240,800q-33,0 -56.5,-23.5T160,720Z" />
27
- </vector>