Skip to content

Commit c731897

Browse files
v4.3.8
1 parent a2958e2 commit c731897

File tree

7 files changed

+7106
-10651
lines changed

7 files changed

+7106
-10651
lines changed

App.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ const App = () => {
2222
PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
2323
PermissionsAndroid.PERMISSIONS.CAMERA,
2424
PermissionsAndroid.PERMISSIONS.RECORD_AUDIO,
25+
PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS,
2526
]);
2627
}
2728
}
@@ -92,6 +93,9 @@ const App = () => {
9293
onDecline={(call) => {
9394
setCallReceived(false);
9495
}}
96+
onError={(error) => {
97+
setCallReceived(false);
98+
}}
9599
incomingCallStyle={{
96100
backgroundColor: "white",
97101
titleColor: "black",

android/app/src/main/AndroidManifest.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
88
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
99
<uses-permission android:name="android.permission.VIBRATE" />
10+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
11+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" />
12+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
13+
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
1014

1115
<application
1216
android:name=".MainApplication"
@@ -15,8 +19,10 @@
1519
android:roundIcon="@mipmap/ic_launcher_round"
1620
android:allowBackup="false"
1721
android:theme="@style/AppTheme">
22+
<service android:name="com.CometChatCalls.CallNotificationService" android:foregroundServiceType="mediaPlayback|microphone"></service>
1823
<activity
1924
android:name=".MainActivity"
25+
android:supportsPictureInPicture="true"
2026
android:label="@string/app_name"
2127
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
2228
android:launchMode="singleTask"

android/app/src/main/java/com/demosampleapp/MainActivity.kt

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,16 @@
11
package com.demosampleapp
22

3+
import android.content.res.Configuration
4+
import android.os.Build
5+
import android.util.Log
6+
import androidx.annotation.RequiresApi
7+
import com.CometChatCalls.CallNotificationServiceModule
8+
import com.CometChatCalls.PictureInPictureModule
39
import com.facebook.react.ReactActivity
410
import com.facebook.react.ReactActivityDelegate
11+
import com.facebook.react.ReactApplication
12+
import com.facebook.react.ReactInstanceManager
13+
import com.facebook.react.bridge.ReactApplicationContext
514
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled
615
import com.facebook.react.defaults.DefaultReactActivityDelegate
716

@@ -13,6 +22,59 @@ class MainActivity : ReactActivity() {
1322
*/
1423
override fun getMainComponentName(): String = "demosampleapp"
1524

25+
private fun getReactApplicationContextFromInstance(): ReactApplicationContext? {
26+
val reactInstanceManager: ReactInstanceManager? = (application as? ReactApplication)?.reactNativeHost?.reactInstanceManager
27+
return reactInstanceManager?.currentReactContext as? ReactApplicationContext
28+
}
29+
30+
override fun onPictureInPictureModeChanged(
31+
isInPictureInPictureMode: Boolean,
32+
newConfig: Configuration
33+
) {
34+
super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig)
35+
36+
val reactContext = getReactApplicationContextFromInstance()
37+
if (reactContext != null) {
38+
val pipEventModule = PictureInPictureModule(reactContext)
39+
pipEventModule.notifyPipModeChanged(isInPictureInPictureMode)
40+
}
41+
}
42+
43+
fun initializePictureInPictureMode() {
44+
val reactApplicationContext = getReactApplicationContextFromInstance()
45+
if (reactApplicationContext != null) {
46+
val pipEventModule = PictureInPictureModule(reactApplicationContext)
47+
pipEventModule.initializePictureInPictureMode();
48+
}
49+
}
50+
51+
@RequiresApi(Build.VERSION_CODES.O)
52+
override fun onStart() {
53+
super.onStart()
54+
val reactInstanceManager: ReactInstanceManager? = (application as? ReactApplication)?.reactNativeHost?.reactInstanceManager
55+
val reactApplicationContext = getReactApplicationContextFromInstance()
56+
57+
if (reactApplicationContext != null) {
58+
initializePictureInPictureMode();
59+
} else {
60+
reactInstanceManager?.addReactInstanceEventListener {
61+
initializePictureInPictureMode();
62+
}
63+
}
64+
}
65+
66+
@RequiresApi(api = Build.VERSION_CODES.O)
67+
public override fun onUserLeaveHint() {
68+
super.onUserLeaveHint()
69+
70+
val reactContext = getReactApplicationContextFromInstance()
71+
if (reactContext != null) {
72+
val pipEventModule = PictureInPictureModule(reactContext)
73+
pipEventModule.enterPictureInPictureMode();
74+
}
75+
}
76+
77+
1678
/**
1779
* Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate]
1880
* which allows you to enable New Architecture with a single boolean flags [fabricEnabled]

ios/demosampleapp/Info.plist

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@
4141
<string></string>
4242
<key>NSMicrophoneUsageDescription</key>
4343
<string>This is for Mic permission</string>
44+
<key>UIBackgroundModes</key>
45+
<array>
46+
<string>audio</string>
47+
<string>voip</string>
48+
</array>
4449
<key>UILaunchStoryboardName</key>
4550
<string>LaunchScreen</string>
4651
<key>UIRequiredDeviceCapabilities</key>

0 commit comments

Comments
 (0)