@stream-io/video-react-native-sdk 0.0.1-alpha.195 → 0.0.1-alpha.196
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/CHANGELOG.md +9 -0
- package/dist/src/components/ActiveCall.js +0 -3
- package/dist/src/components/ActiveCall.js.map +1 -1
- package/dist/src/hooks/push/useInitAndroidTokenAndRest.js +1 -1
- package/dist/src/hooks/push/useInitAndroidTokenAndRest.js.map +1 -1
- package/dist/src/hooks/useAndroidKeepCallAliveEffect.js +8 -5
- package/dist/src/hooks/useAndroidKeepCallAliveEffect.js.map +1 -1
- package/dist/src/hooks/useMutingState.js +21 -4
- package/dist/src/hooks/useMutingState.js.map +1 -1
- package/dist/src/providers/MediaDevices.js +3 -2
- package/dist/src/providers/MediaDevices.js.map +1 -1
- package/dist/src/utils/StreamVideoRN/index.d.ts +10 -0
- package/dist/src/utils/StreamVideoRN/index.js +11 -0
- package/dist/src/utils/StreamVideoRN/index.js.map +1 -1
- package/dist/src/utils/StreamVideoRN/permissions.d.ts +5 -0
- package/dist/src/utils/StreamVideoRN/permissions.js +21 -0
- package/dist/src/utils/StreamVideoRN/permissions.js.map +1 -0
- package/dist/src/utils/push/utils.d.ts +1 -1
- package/dist/src/utils/push/utils.js +3 -4
- package/dist/src/utils/push/utils.js.map +1 -1
- package/package.json +1 -1
- package/src/components/ActiveCall.tsx +0 -4
- package/src/hooks/push/useInitAndroidTokenAndRest.ts +2 -2
- package/src/hooks/useAndroidKeepCallAliveEffect.ts +12 -6
- package/src/hooks/useMutingState.ts +28 -4
- package/src/providers/MediaDevices.tsx +16 -2
- package/src/utils/StreamVideoRN/index.ts +21 -0
- package/src/utils/StreamVideoRN/permissions.ts +25 -0
- package/src/utils/push/utils.ts +1 -2
- package/dist/src/utils/verifyAndroidBluetoothPermissions.d.ts +0 -1
- package/dist/src/utils/verifyAndroidBluetoothPermissions.js +0 -31
- package/dist/src/utils/verifyAndroidBluetoothPermissions.js.map +0 -1
- package/src/utils/verifyAndroidBluetoothPermissions.ts +0 -33
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
## [0.0.1-alpha.196](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.0.1-alpha.195...@stream-io/video-react-native-sdk-0.0.1-alpha.196) (2023-06-22)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* permissions arch changes ([#686](https://github.com/GetStream/stream-video-js/issues/686)) ([36d0633](https://github.com/GetStream/stream-video-js/commit/36d0633c72968b1f1b843dcad9d450c0bd8c865d))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
5
14
|
## [0.0.1-alpha.195](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.0.1-alpha.194...@stream-io/video-react-native-sdk-0.0.1-alpha.195) (2023-06-21)
|
|
6
15
|
|
|
7
16
|
|
|
@@ -35,7 +35,6 @@ const useIncallManager_1 = require("../hooks/useIncallManager");
|
|
|
35
35
|
const usePublishMediaStreams_1 = require("../hooks/usePublishMediaStreams");
|
|
36
36
|
const usePermissionRequest_1 = require("../hooks/usePermissionRequest");
|
|
37
37
|
const CallParticipantsBadge_1 = require("./CallParticipantsBadge");
|
|
38
|
-
const verifyAndroidBluetoothPermissions_1 = require("../utils/verifyAndroidBluetoothPermissions");
|
|
39
38
|
const video_client_1 = require("@stream-io/video-client");
|
|
40
39
|
const constants_1 = require("../constants");
|
|
41
40
|
/**
|
|
@@ -50,8 +49,6 @@ const ActiveCall = (props) => {
|
|
|
50
49
|
const activeCallRef = (0, react_1.useRef)(activeCall);
|
|
51
50
|
activeCallRef.current = activeCall;
|
|
52
51
|
(0, react_1.useEffect)(() => {
|
|
53
|
-
// when the component mounts, we ask for necessary permissions.
|
|
54
|
-
(0, verifyAndroidBluetoothPermissions_1.verifyAndroidBluetoothPermissions)();
|
|
55
52
|
return () => {
|
|
56
53
|
if (activeCallRef.current?.state.callingState !== video_client_1.CallingState.LEFT) {
|
|
57
54
|
activeCallRef.current?.leave();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActiveCall.js","sourceRoot":"","sources":["../../../src/components/ActiveCall.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiD;AACjD,0EAGyC;AACzC,+CAAgD;AAChD,yDAA4E;AAC5E,iEAA8D;AAC9D,mFAAgF;AAChF,oCAAiC;AACjC,gEAA6D;AAC7D,4EAAyE;AACzE,wEAAqE;AACrE,mEAAgE;AAChE,
|
|
1
|
+
{"version":3,"file":"ActiveCall.js","sourceRoot":"","sources":["../../../src/components/ActiveCall.tsx"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ const useInitAndroidTokenAndRest = () => {
|
|
|
17
17
|
if (!client || !connectedUserId || !pushConfig) {
|
|
18
18
|
return;
|
|
19
19
|
}
|
|
20
|
-
(0, utils_2.
|
|
20
|
+
(0, utils_2.initAndroidPushToken)(client, pushConfig);
|
|
21
21
|
}, [client, connectedUserId]);
|
|
22
22
|
};
|
|
23
23
|
exports.useInitAndroidTokenAndRest = useInitAndroidTokenAndRest;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInitAndroidTokenAndRest.js","sourceRoot":"","sources":["../../../../src/hooks/push/useInitAndroidTokenAndRest.ts"],"names":[],"mappings":";;;AAAA,0EAGyC;AACzC,iCAAkC;AAClC,uCAA4C;AAC5C,
|
|
1
|
+
{"version":3,"file":"useInitAndroidTokenAndRest.js","sourceRoot":"","sources":["../../../../src/hooks/push/useInitAndroidTokenAndRest.ts"],"names":[],"mappings":";;;AAAA,0EAGyC;AACzC,iCAAkC;AAClC,uCAA4C;AAC5C,kDAA8D;AAE9D;;GAEG;AACI,MAAM,0BAA0B,GAAG,GAAG,EAAE;IAC7C,MAAM,MAAM,GAAG,IAAA,2CAAoB,GAAE,CAAC;IACtC,MAAM,eAAe,GAAG,IAAA,uCAAgB,GAAE,EAAE,EAAE,CAAC;IAC/C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,qBAAa,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC;QAClD,mFAAmF;QACnF,IAAI,CAAC,MAAM,IAAI,CAAC,eAAe,IAAI,CAAC,UAAU,EAAE;YAC9C,OAAO;SACR;QACD,IAAA,4BAAoB,EAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC3C,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;AAChC,CAAC,CAAC;AAXW,QAAA,0BAA0B,8BAWrC"}
|
|
@@ -47,6 +47,12 @@ async function startForegroundService() {
|
|
|
47
47
|
const foregroundServiceConfig = utils_1.StreamVideoRN.getConfig().foregroundService;
|
|
48
48
|
const { title, body } = foregroundServiceConfig.android.notificationTexts;
|
|
49
49
|
const channelId = foregroundServiceConfig.android.channel.id;
|
|
50
|
+
// request for notification permission and then start the foreground service
|
|
51
|
+
const settings = await react_native_1.default.getNotificationSettings();
|
|
52
|
+
if (settings.authorizationStatus !== react_native_1.AuthorizationStatus.AUTHORIZED) {
|
|
53
|
+
console.warn('Notification permission not granted, can not start foreground service to keep the call alive');
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
50
56
|
await react_native_1.default.createChannel(foregroundServiceConfig.android.channel);
|
|
51
57
|
await react_native_1.default.displayNotification({
|
|
52
58
|
title,
|
|
@@ -94,11 +100,8 @@ const useAndroidKeepCallAliveEffect = () => {
|
|
|
94
100
|
return;
|
|
95
101
|
}
|
|
96
102
|
// request for notification permission and then start the foreground service
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
await startForegroundService();
|
|
100
|
-
foregroundServiceStartedRef.current = true;
|
|
101
|
-
}
|
|
103
|
+
await startForegroundService();
|
|
104
|
+
foregroundServiceStartedRef.current = true;
|
|
102
105
|
};
|
|
103
106
|
run();
|
|
104
107
|
return () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAndroidKeepCallAliveEffect.js","sourceRoot":"","sources":["../../../src/hooks/useAndroidKeepCallAliveEffect.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0EAAsE;AACtE,iCAA0C;AAC1C,sEAAqE;AACrE,oCAAyC;AACzC,+CAAwC;AACxC,0DAAuD;AAEvD,SAAS,oBAAoB;IAC3B,IAAI,uBAAQ,CAAC,EAAE,KAAK,SAAS,EAAE;QAC7B,OAAO;KACR;IACD,sBAAO,CAAC,yBAAyB,CAAC,GAAG,EAAE;QACrC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE;YACtB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,sBAAsB;IACnC,IAAI,uBAAQ,CAAC,EAAE,KAAK,SAAS,EAAE;QAC7B,OAAO;KACR;IACD,MAAM,uBAAuB,GAAG,qBAAa,CAAC,SAAS,EAAE,CAAC,iBAAiB,CAAC;IAC5E,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,uBAAuB,CAAC,OAAO,CAAC,iBAAiB,CAAC;IAC1E,MAAM,SAAS,GAAG,uBAAuB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"useAndroidKeepCallAliveEffect.js","sourceRoot":"","sources":["../../../src/hooks/useAndroidKeepCallAliveEffect.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.useMutingState = void 0;
|
|
4
4
|
const StreamVideoContext_1 = require("../contexts/StreamVideoContext");
|
|
5
|
+
const permissions_1 = require("../utils/StreamVideoRN/permissions");
|
|
5
6
|
/**
|
|
6
7
|
* A helper hook which exposes audio, video mute and camera facing mode and
|
|
7
8
|
* their respective functions to toggle state
|
|
@@ -9,11 +10,27 @@ const StreamVideoContext_1 = require("../contexts/StreamVideoContext");
|
|
|
9
10
|
* @category Device Management
|
|
10
11
|
*/
|
|
11
12
|
const useMutingState = () => {
|
|
12
|
-
const
|
|
13
|
-
const
|
|
13
|
+
const isAudioMutedState = (0, StreamVideoContext_1.useStreamVideoStoreValue)((store) => store.isAudioMuted);
|
|
14
|
+
const isVideoMutedState = (0, StreamVideoContext_1.useStreamVideoStoreValue)((store) => store.isVideoMuted);
|
|
14
15
|
const setState = (0, StreamVideoContext_1.useStreamVideoStoreSetState)();
|
|
15
|
-
const
|
|
16
|
-
const
|
|
16
|
+
const isMicPermissionGranted = permissions_1.isMicPermissionGranted$.getValue();
|
|
17
|
+
const isCameraPermissionGranted = permissions_1.isCameraPermissionGranted$.getValue();
|
|
18
|
+
const toggleAudioState = () => {
|
|
19
|
+
if (!isMicPermissionGranted) {
|
|
20
|
+
console.warn('Microphone permission not granted, can not toggle audio');
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
setState({ isAudioMuted: !isAudioMuted });
|
|
24
|
+
};
|
|
25
|
+
const toggleVideoState = () => {
|
|
26
|
+
if (!isCameraPermissionGranted) {
|
|
27
|
+
console.warn('Camera permission not granted, can not toggle video');
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
setState({ isVideoMuted: !isVideoMuted });
|
|
31
|
+
};
|
|
32
|
+
const isAudioMuted = isAudioMutedState || !isMicPermissionGranted;
|
|
33
|
+
const isVideoMuted = isVideoMutedState || !isCameraPermissionGranted;
|
|
17
34
|
return {
|
|
18
35
|
isAudioMuted,
|
|
19
36
|
isVideoMuted,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMutingState.js","sourceRoot":"","sources":["../../../src/hooks/useMutingState.ts"],"names":[],"mappings":";;;AAAA,uEAGwC;AACxC;;;;;GAKG;AACI,MAAM,cAAc,GAAG,GAAG,EAAE;IACjC,MAAM,
|
|
1
|
+
{"version":3,"file":"useMutingState.js","sourceRoot":"","sources":["../../../src/hooks/useMutingState.ts"],"names":[],"mappings":";;;AAAA,uEAGwC;AACxC,oEAG4C;AAC5C;;;;;GAKG;AACI,MAAM,cAAc,GAAG,GAAG,EAAE;IACjC,MAAM,iBAAiB,GAAG,IAAA,6CAAwB,EAChD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,CAC9B,CAAC;IACF,MAAM,iBAAiB,GAAG,IAAA,6CAAwB,EAChD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,CAC9B,CAAC;IACF,MAAM,QAAQ,GAAG,IAAA,gDAA2B,GAAE,CAAC;IAC/C,MAAM,sBAAsB,GAAG,qCAAuB,CAAC,QAAQ,EAAE,CAAC;IAClE,MAAM,yBAAyB,GAAG,wCAA0B,CAAC,QAAQ,EAAE,CAAC;IACxE,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,IAAI,CAAC,sBAAsB,EAAE;YAC3B,OAAO,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;YACxE,OAAO;SACR;QACD,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC;IACF,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,IAAI,CAAC,yBAAyB,EAAE;YAC9B,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YACpE,OAAO;SACR;QACD,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,iBAAiB,IAAI,CAAC,sBAAsB,CAAC;IAClE,MAAM,YAAY,GAAG,iBAAiB,IAAI,CAAC,yBAAyB,CAAC;IAErE,OAAO;QACL,YAAY;QACZ,YAAY;QACZ,gBAAgB;QAChB,gBAAgB;KACjB,CAAC;AACJ,CAAC,CAAC;AAjCW,QAAA,cAAc,kBAiCzB"}
|
|
@@ -4,6 +4,7 @@ exports.MediaDevices = void 0;
|
|
|
4
4
|
const react_1 = require("react");
|
|
5
5
|
const video_client_1 = require("@stream-io/video-client");
|
|
6
6
|
const contexts_1 = require("../contexts");
|
|
7
|
+
const permissions_1 = require("../utils/StreamVideoRN/permissions");
|
|
7
8
|
/**
|
|
8
9
|
* A renderless component that provides the audio and video devices to the store
|
|
9
10
|
* This component must be a child of StreamVideoStoreProvider
|
|
@@ -18,7 +19,7 @@ const MediaDevices = () => {
|
|
|
18
19
|
const setAudioDevices = (audioDevices) => {
|
|
19
20
|
setState({ audioDevices, currentAudioDevice: audioDevices[0] });
|
|
20
21
|
};
|
|
21
|
-
const subscription = (0,
|
|
22
|
+
const subscription = (0, permissions_1.subscribeToDevicesWhenPermissionGranted)(permissions_1.isMicPermissionGranted$, video_client_1.getAudioDevices, setAudioDevices);
|
|
22
23
|
return () => subscription.unsubscribe();
|
|
23
24
|
}, [setState]);
|
|
24
25
|
(0, react_1.useEffect)(() => {
|
|
@@ -34,7 +35,7 @@ const MediaDevices = () => {
|
|
|
34
35
|
}
|
|
35
36
|
setState({ videoDevices });
|
|
36
37
|
};
|
|
37
|
-
const subscription = (0,
|
|
38
|
+
const subscription = (0, permissions_1.subscribeToDevicesWhenPermissionGranted)(permissions_1.isCameraPermissionGranted$, video_client_1.getVideoDevices, setVideoDevices);
|
|
38
39
|
return () => subscription.unsubscribe();
|
|
39
40
|
}, [setState]);
|
|
40
41
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaDevices.js","sourceRoot":"","sources":["../../../src/providers/MediaDevices.tsx"],"names":[],"mappings":";;;AAAA,iCAAiD;AACjD,0DAA2E;AAC3E,0CAA2E;
|
|
1
|
+
{"version":3,"file":"MediaDevices.js","sourceRoot":"","sources":["../../../src/providers/MediaDevices.tsx"],"names":[],"mappings":";;;AAAA,iCAAiD;AACjD,0DAA2E;AAC3E,0CAA2E;AAC3E,oEAI4C;AAE5C;;;;;;GAMG;AACI,MAAM,YAAY,GAAG,GAA8B,EAAE;IAC1D,MAAM,QAAQ,GAAG,IAAA,sCAA2B,GAAE,CAAC;IAC/C,MAAM,qBAAqB,GAAG,IAAA,cAAM,EAAC,KAAK,CAAC,CAAC;IAE5C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,eAAe,GAAG,CAAC,YAA+B,EAAE,EAAE;YAC1D,QAAQ,CAAC,EAAE,YAAY,EAAE,kBAAkB,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,IAAA,qDAAuC,EAC1D,qCAAuB,EACvB,8BAAe,EACf,eAAe,CAChB,CAAC;QACF,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;IAC1C,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,eAAe,GAAG,CAAC,YAA+B,EAAE,EAAE;YAC1D,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE;gBAC7D,MAAM,sBAAsB,GAAG,YAAY,CAAC,IAAI,CAC9C,CAAC,WAAW,EAAE,EAAE,CACd,WAAW,CAAC,IAAI,KAAK,YAAY,IAAI,WAAW,CAAC,MAAM,KAAK,OAAO,CACtE,CAAC;gBACF,MAAM,kBAAkB,GAAG,sBAAsB,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;gBACrE,IAAI,kBAAkB,EAAE;oBACtB,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC;oBACrC,QAAQ,CAAC,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC,CAAC;oBACnE,OAAO;iBACR;aACF;YACD,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC;QACF,MAAM,YAAY,GAAG,IAAA,qDAAuC,EAC1D,wCAA0B,EAC1B,8BAAe,EACf,eAAe,CAChB,CAAC;QACF,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;IAC1C,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AA1CW,QAAA,YAAY,gBA0CvB"}
|
|
@@ -20,5 +20,15 @@ export declare class StreamVideoRN {
|
|
|
20
20
|
* AppRegistry.registerComponent('app', () => App);
|
|
21
21
|
*/
|
|
22
22
|
static setPushConfig(pushConfig: NonNullable<StreamVideoConfig['push']>): void;
|
|
23
|
+
/**
|
|
24
|
+
* Set native permissions config for StreamVideoRN.
|
|
25
|
+
* Note: This function should be called after the user has declined/granted camera and mic permissions.
|
|
26
|
+
* @example
|
|
27
|
+
* See sample-apps/react-native/dogfood/src/hooks/useSyncPermissions.ts
|
|
28
|
+
*/
|
|
29
|
+
static setPermissions({ isCameraPermissionGranted, isMicPermissionGranted, }: {
|
|
30
|
+
isCameraPermissionGranted: boolean;
|
|
31
|
+
isMicPermissionGranted: boolean;
|
|
32
|
+
}): void;
|
|
23
33
|
static getConfig(): StreamVideoConfig;
|
|
24
34
|
}
|
|
@@ -4,6 +4,7 @@ exports.StreamVideoRN = void 0;
|
|
|
4
4
|
const react_native_1 = require("@notifee/react-native");
|
|
5
5
|
const constants_1 = require("../../constants");
|
|
6
6
|
const utils_1 = require("../push/utils");
|
|
7
|
+
const permissions_1 = require("./permissions");
|
|
7
8
|
const DEFAULT_STREAM_VIDEO_CONFIG = {
|
|
8
9
|
supportedReactions: constants_1.defaultEmojiReactions,
|
|
9
10
|
foregroundService: {
|
|
@@ -57,6 +58,16 @@ class StreamVideoRN {
|
|
|
57
58
|
(0, utils_1.setupCallkeep)(pushConfig);
|
|
58
59
|
(0, utils_1.setupFirebaseHandlerAndroid)(pushConfig);
|
|
59
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Set native permissions config for StreamVideoRN.
|
|
63
|
+
* Note: This function should be called after the user has declined/granted camera and mic permissions.
|
|
64
|
+
* @example
|
|
65
|
+
* See sample-apps/react-native/dogfood/src/hooks/useSyncPermissions.ts
|
|
66
|
+
*/
|
|
67
|
+
static setPermissions({ isCameraPermissionGranted, isMicPermissionGranted, }) {
|
|
68
|
+
permissions_1.isCameraPermissionGranted$.next(isCameraPermissionGranted);
|
|
69
|
+
permissions_1.isMicPermissionGranted$.next(isMicPermissionGranted);
|
|
70
|
+
}
|
|
60
71
|
static getConfig() {
|
|
61
72
|
return this.config;
|
|
62
73
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/StreamVideoRN/index.ts"],"names":[],"mappings":";;;AAAA,wDAA0D;AAC1D,+CAAwD;AACxD,yCAA2E;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/StreamVideoRN/index.ts"],"names":[],"mappings":";;;AAAA,wDAA0D;AAC1D,+CAAwD;AACxD,yCAA2E;AAE3E,+CAGuB;AAEvB,MAAM,2BAA2B,GAAsB;IACrD,kBAAkB,EAAE,iCAAqB;IACzC,iBAAiB,EAAE;QACjB,OAAO,EAAE;YACP,OAAO,EAAE;gBACP,EAAE,EAAE,gCAAgC;gBACpC,IAAI,EAAE,yCAAyC;gBAC/C,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,gCAAiB,CAAC,OAAO;aACtC;YACD,iBAAiB,EAAE;gBACjB,KAAK,EAAE,kBAAkB;gBACzB,IAAI,EAAE,2BAA2B;aAClC;SACF;KACF;CACF,CAAC;AAEF,MAAa,aAAa;IAChB,MAAM,CAAC,MAAM,GAAG,2BAA2B,CAAC;IACpD;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,YAAsD;QACxE,IAAI,CAAC,MAAM,GAAG;YACZ,GAAG,IAAI,CAAC,MAAM;YACd,GAAG,YAAY;SAChB,CAAC;IACJ,CAAC;IAED;;;;;;;;;;OAUG;IACH,MAAM,CAAC,aAAa,CAAC,UAAkD;QACrE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YACpB,OAAO,CAAC,GAAG,CACT,oEAAoE,CACrE,CAAC;YACF,OAAO;SACR;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC;QAC9B,yHAAyH;QACzH,IAAA,qBAAa,EAAC,UAAU,CAAC,CAAC;QAC1B,IAAA,mCAA2B,EAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,EACpB,yBAAyB,EACzB,sBAAsB,GAIvB;QACC,wCAA0B,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC3D,qCAAuB,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,CAAC,SAAS;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;;AA1DH,sCA2DC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { BehaviorSubject, Observable } from 'rxjs';
|
|
2
|
+
import { MediaDeviceInfo } from '../../contexts';
|
|
3
|
+
export declare const isCameraPermissionGranted$: BehaviorSubject<boolean>;
|
|
4
|
+
export declare const isMicPermissionGranted$: BehaviorSubject<boolean>;
|
|
5
|
+
export declare const subscribeToDevicesWhenPermissionGranted: (isDevicePermissionGranted$: BehaviorSubject<boolean>, getDevicesFunc: () => Observable<MediaDeviceInfo[]>, subscriptionCallback: (videoDevices: MediaDeviceInfo[]) => void) => import("rxjs").Subscription;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.subscribeToDevicesWhenPermissionGranted = exports.isMicPermissionGranted$ = exports.isCameraPermissionGranted$ = void 0;
|
|
4
|
+
const operators_1 = require("rxjs/operators");
|
|
5
|
+
const rxjs_1 = require("rxjs");
|
|
6
|
+
exports.isCameraPermissionGranted$ = new rxjs_1.BehaviorSubject(false);
|
|
7
|
+
exports.isMicPermissionGranted$ = new rxjs_1.BehaviorSubject(false);
|
|
8
|
+
const subscribeToDevicesWhenPermissionGranted = (isDevicePermissionGranted$, getDevicesFunc, subscriptionCallback) => isDevicePermissionGranted$
|
|
9
|
+
.pipe((0, operators_1.switchMap)((isDevicePermissionGranted) => {
|
|
10
|
+
// if we don't have mic permission, we don't need to get the audio devices
|
|
11
|
+
// because we won't be able to use them anyway and this will trigger a permission request
|
|
12
|
+
// from RN WebRTC lib. This is not ideal because we want to control when the permission.
|
|
13
|
+
if (!isDevicePermissionGranted) {
|
|
14
|
+
// otherwise return EMPTY, which is an Observable that does nothing and just completes immediately
|
|
15
|
+
return rxjs_1.EMPTY;
|
|
16
|
+
}
|
|
17
|
+
return getDevicesFunc();
|
|
18
|
+
}))
|
|
19
|
+
.subscribe(subscriptionCallback);
|
|
20
|
+
exports.subscribeToDevicesWhenPermissionGranted = subscribeToDevicesWhenPermissionGranted;
|
|
21
|
+
//# sourceMappingURL=permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../../../src/utils/StreamVideoRN/permissions.ts"],"names":[],"mappings":";;;AAAA,8CAA2C;AAC3C,+BAA0D;AAE7C,QAAA,0BAA0B,GAAG,IAAI,sBAAe,CAAU,KAAK,CAAC,CAAC;AACjE,QAAA,uBAAuB,GAAG,IAAI,sBAAe,CAAU,KAAK,CAAC,CAAC;AAEpE,MAAM,uCAAuC,GAAG,CACrD,0BAAoD,EACpD,cAAmD,EACnD,oBAA+D,EAC/D,EAAE,CACF,0BAA0B;KACvB,IAAI,CACH,IAAA,qBAAS,EAAC,CAAC,yBAAyB,EAAE,EAAE;IACtC,0EAA0E;IAC1E,yFAAyF;IACzF,wFAAwF;IACxF,IAAI,CAAC,yBAAyB,EAAE;QAC9B,kGAAkG;QAClG,OAAO,YAAK,CAAC;KACd;IACD,OAAO,cAAc,EAAE,CAAC;AAC1B,CAAC,CAAC,CACH;KACA,SAAS,CAAC,oBAAoB,CAAC,CAAC;AAlBxB,QAAA,uCAAuC,2CAkBf"}
|
|
@@ -5,7 +5,7 @@ export declare function setupCallkeep(pushConfig: PushConfig): void;
|
|
|
5
5
|
/** Setup Firebase push message handler **/
|
|
6
6
|
export declare function setupFirebaseHandlerAndroid(pushConfig: PushConfig): void;
|
|
7
7
|
/** Send token to stream, create notification channel, */
|
|
8
|
-
export declare function
|
|
8
|
+
export declare function initAndroidPushToken(client: StreamVideoClient, pushConfig: PushConfig): Promise<void>;
|
|
9
9
|
/**
|
|
10
10
|
* This function is used process the call from push notifications due to incoming call
|
|
11
11
|
* It does the following steps:
|
|
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.processCallFromPush = exports.
|
|
26
|
+
exports.processCallFromPush = exports.initAndroidPushToken = exports.setupFirebaseHandlerAndroid = exports.setupCallkeep = void 0;
|
|
27
27
|
const react_native_1 = __importStar(require("@notifee/react-native"));
|
|
28
28
|
const react_native_2 = require("react-native");
|
|
29
29
|
const libs_1 = require("./libs");
|
|
@@ -92,7 +92,7 @@ function setupFirebaseHandlerAndroid(pushConfig) {
|
|
|
92
92
|
}
|
|
93
93
|
exports.setupFirebaseHandlerAndroid = setupFirebaseHandlerAndroid;
|
|
94
94
|
/** Send token to stream, create notification channel, */
|
|
95
|
-
async function
|
|
95
|
+
async function initAndroidPushToken(client, pushConfig) {
|
|
96
96
|
if (react_native_2.Platform.OS !== 'android') {
|
|
97
97
|
return;
|
|
98
98
|
}
|
|
@@ -100,9 +100,8 @@ async function initAndroidPushTokenAndAskPermissions(client, pushConfig) {
|
|
|
100
100
|
const token = await messaging().getToken();
|
|
101
101
|
const push_provider_name = pushConfig.android.pushProviderName;
|
|
102
102
|
await client.addDevice(token, 'firebase', push_provider_name);
|
|
103
|
-
await react_native_1.default.requestPermission();
|
|
104
103
|
}
|
|
105
|
-
exports.
|
|
104
|
+
exports.initAndroidPushToken = initAndroidPushToken;
|
|
106
105
|
const firebaseMessagingOnMessageHandler = async (message, pushConfig) => {
|
|
107
106
|
if (react_native_2.Platform.OS !== 'android') {
|
|
108
107
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/utils/push/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,sEAAkE;AAClE,+CAAwC;AACxC,iCAKgB;AAChB,6CAGsB;AAGtB,4DAA4D;AAC5D,WAAW;AACX,2CAA2C;AAC3C,2BAA2B;AAC3B,OAAO;AACP,eAAe;AACf,0CAA0C;AAC1C,wBAAwB;AACxB,sFAAsF;AACtF,8BAA8B;AAC9B,sBAAsB;AACtB,iCAAiC;AACjC,mEAAmE;AACnE,8BAA8B;AAC9B,wCAAwC;AACxC,yDAAyD;AACzD,iEAAiE;AACjE,8EAA8E;AAC9E,YAAY;AACZ,OAAO;AACP,KAAK;AAEL,MAAM,qBAAqB,GAAG,QAAQ,CAAC;AACvC,MAAM,sBAAsB,GAAG,SAAS,CAAC;AAIzC,SAAgB,aAAa,CAAC,UAAsB;IAClD,MAAM,QAAQ,GAAG,IAAA,qBAAc,GAAE,CAAC;IAClC,MAAM,OAAO,GAA2C;QACtD,GAAG,EAAE;YACH,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,OAAO;YAC/B,aAAa,EAAE,IAAI;SACpB;QACD,OAAO,EAAE;YACP,GAAG,UAAU,CAAC,OAAO,CAAC,kCAAkC;YACxD,qBAAqB,EAAE,EAAE;SAC1B;KACF,CAAC;IACF,IAAI,uBAAQ,CAAC,EAAE,KAAK,KAAK,EAAE;QACzB,OAAO;KACR;IACD,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;QACxC,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;SAC7B;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AApBD,sCAoBC;AAED,2CAA2C;AAC3C,SAAgB,2BAA2B,CAAC,UAAsB;IAChE,IAAI,uBAAQ,CAAC,EAAE,KAAK,SAAS,EAAE;QAC7B,OAAO;KACR;IACD,MAAM,SAAS,GAAG,IAAA,8BAAuB,GAAE,CAAC;IAC5C,SAAS,EAAE,CAAC,2BAA2B,CACrC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,iCAAiC,CAAC,GAAG,EAAE,UAAU,CAAC,CACxE,CAAC;IACF,oIAAoI;IACpI,sBAAO,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACxC,sJAAsJ;QACtJ,MAAM,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IACH,sBAAO,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,EAAE;QAClC,6IAA6I;QAC7I,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC;AAjBD,kEAiBC;AAED,0DAA0D;AACnD,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/utils/push/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -12,7 +12,6 @@ import { useIncallManager } from '../hooks/useIncallManager';
|
|
|
12
12
|
import { usePublishMediaStreams } from '../hooks/usePublishMediaStreams';
|
|
13
13
|
import { usePermissionRequest } from '../hooks/usePermissionRequest';
|
|
14
14
|
import { CallParticipantsBadge } from './CallParticipantsBadge';
|
|
15
|
-
import { verifyAndroidBluetoothPermissions } from '../utils/verifyAndroidBluetoothPermissions';
|
|
16
15
|
import { CallingState } from '@stream-io/video-client';
|
|
17
16
|
import { Z_INDEX } from '../constants';
|
|
18
17
|
|
|
@@ -40,9 +39,6 @@ export const ActiveCall = (props: ActiveCallProps) => {
|
|
|
40
39
|
activeCallRef.current = activeCall;
|
|
41
40
|
|
|
42
41
|
useEffect(() => {
|
|
43
|
-
// when the component mounts, we ask for necessary permissions.
|
|
44
|
-
verifyAndroidBluetoothPermissions();
|
|
45
|
-
|
|
46
42
|
return () => {
|
|
47
43
|
if (activeCallRef.current?.state.callingState !== CallingState.LEFT) {
|
|
48
44
|
activeCallRef.current?.leave();
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from '@stream-io/video-react-bindings';
|
|
5
5
|
import { useEffect } from 'react';
|
|
6
6
|
import { StreamVideoRN } from '../../utils';
|
|
7
|
-
import {
|
|
7
|
+
import { initAndroidPushToken } from '../../utils/push/utils';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* This hook is used to initialize the push token for Android and ask notification permissions.
|
|
@@ -18,6 +18,6 @@ export const useInitAndroidTokenAndRest = () => {
|
|
|
18
18
|
if (!client || !connectedUserId || !pushConfig) {
|
|
19
19
|
return;
|
|
20
20
|
}
|
|
21
|
-
|
|
21
|
+
initAndroidPushToken(client, pushConfig);
|
|
22
22
|
}, [client, connectedUserId]);
|
|
23
23
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useCallCallingState } from '@stream-io/video-react-bindings';
|
|
2
|
-
import {
|
|
2
|
+
import { useEffect, useRef } from 'react';
|
|
3
3
|
import notifee, { AuthorizationStatus } from '@notifee/react-native';
|
|
4
4
|
import { StreamVideoRN } from '../utils';
|
|
5
5
|
import { Platform } from 'react-native';
|
|
@@ -23,6 +23,15 @@ async function startForegroundService() {
|
|
|
23
23
|
const foregroundServiceConfig = StreamVideoRN.getConfig().foregroundService;
|
|
24
24
|
const { title, body } = foregroundServiceConfig.android.notificationTexts;
|
|
25
25
|
const channelId = foregroundServiceConfig.android.channel.id;
|
|
26
|
+
|
|
27
|
+
// request for notification permission and then start the foreground service
|
|
28
|
+
const settings = await notifee.getNotificationSettings();
|
|
29
|
+
if (settings.authorizationStatus !== AuthorizationStatus.AUTHORIZED) {
|
|
30
|
+
console.warn(
|
|
31
|
+
'Notification permission not granted, can not start foreground service to keep the call alive',
|
|
32
|
+
);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
26
35
|
await notifee.createChannel(foregroundServiceConfig.android.channel);
|
|
27
36
|
await notifee.displayNotification({
|
|
28
37
|
title,
|
|
@@ -76,11 +85,8 @@ export const useAndroidKeepCallAliveEffect = () => {
|
|
|
76
85
|
return;
|
|
77
86
|
}
|
|
78
87
|
// request for notification permission and then start the foreground service
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
await startForegroundService();
|
|
82
|
-
foregroundServiceStartedRef.current = true;
|
|
83
|
-
}
|
|
88
|
+
await startForegroundService();
|
|
89
|
+
foregroundServiceStartedRef.current = true;
|
|
84
90
|
};
|
|
85
91
|
run();
|
|
86
92
|
return () => {
|
|
@@ -2,6 +2,10 @@ import {
|
|
|
2
2
|
useStreamVideoStoreSetState,
|
|
3
3
|
useStreamVideoStoreValue,
|
|
4
4
|
} from '../contexts/StreamVideoContext';
|
|
5
|
+
import {
|
|
6
|
+
isCameraPermissionGranted$,
|
|
7
|
+
isMicPermissionGranted$,
|
|
8
|
+
} from '../utils/StreamVideoRN/permissions';
|
|
5
9
|
/**
|
|
6
10
|
* A helper hook which exposes audio, video mute and camera facing mode and
|
|
7
11
|
* their respective functions to toggle state
|
|
@@ -9,11 +13,31 @@ import {
|
|
|
9
13
|
* @category Device Management
|
|
10
14
|
*/
|
|
11
15
|
export const useMutingState = () => {
|
|
12
|
-
const
|
|
13
|
-
|
|
16
|
+
const isAudioMutedState = useStreamVideoStoreValue(
|
|
17
|
+
(store) => store.isAudioMuted,
|
|
18
|
+
);
|
|
19
|
+
const isVideoMutedState = useStreamVideoStoreValue(
|
|
20
|
+
(store) => store.isVideoMuted,
|
|
21
|
+
);
|
|
14
22
|
const setState = useStreamVideoStoreSetState();
|
|
15
|
-
const
|
|
16
|
-
const
|
|
23
|
+
const isMicPermissionGranted = isMicPermissionGranted$.getValue();
|
|
24
|
+
const isCameraPermissionGranted = isCameraPermissionGranted$.getValue();
|
|
25
|
+
const toggleAudioState = () => {
|
|
26
|
+
if (!isMicPermissionGranted) {
|
|
27
|
+
console.warn('Microphone permission not granted, can not toggle audio');
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
setState({ isAudioMuted: !isAudioMuted });
|
|
31
|
+
};
|
|
32
|
+
const toggleVideoState = () => {
|
|
33
|
+
if (!isCameraPermissionGranted) {
|
|
34
|
+
console.warn('Camera permission not granted, can not toggle video');
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
setState({ isVideoMuted: !isVideoMuted });
|
|
38
|
+
};
|
|
39
|
+
const isAudioMuted = isAudioMutedState || !isMicPermissionGranted;
|
|
40
|
+
const isVideoMuted = isVideoMutedState || !isCameraPermissionGranted;
|
|
17
41
|
|
|
18
42
|
return {
|
|
19
43
|
isAudioMuted,
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import React, { useEffect, useRef } from 'react';
|
|
2
2
|
import { getAudioDevices, getVideoDevices } from '@stream-io/video-client';
|
|
3
3
|
import { MediaDeviceInfo, useStreamVideoStoreSetState } from '../contexts';
|
|
4
|
+
import {
|
|
5
|
+
isCameraPermissionGranted$,
|
|
6
|
+
isMicPermissionGranted$,
|
|
7
|
+
subscribeToDevicesWhenPermissionGranted,
|
|
8
|
+
} from '../utils/StreamVideoRN/permissions';
|
|
4
9
|
|
|
5
10
|
/**
|
|
6
11
|
* A renderless component that provides the audio and video devices to the store
|
|
@@ -17,7 +22,12 @@ export const MediaDevices = (): React.ReactElement | null => {
|
|
|
17
22
|
const setAudioDevices = (audioDevices: MediaDeviceInfo[]) => {
|
|
18
23
|
setState({ audioDevices, currentAudioDevice: audioDevices[0] });
|
|
19
24
|
};
|
|
20
|
-
|
|
25
|
+
|
|
26
|
+
const subscription = subscribeToDevicesWhenPermissionGranted(
|
|
27
|
+
isMicPermissionGranted$,
|
|
28
|
+
getAudioDevices,
|
|
29
|
+
setAudioDevices,
|
|
30
|
+
);
|
|
21
31
|
return () => subscription.unsubscribe();
|
|
22
32
|
}, [setState]);
|
|
23
33
|
|
|
@@ -37,7 +47,11 @@ export const MediaDevices = (): React.ReactElement | null => {
|
|
|
37
47
|
}
|
|
38
48
|
setState({ videoDevices });
|
|
39
49
|
};
|
|
40
|
-
const subscription =
|
|
50
|
+
const subscription = subscribeToDevicesWhenPermissionGranted(
|
|
51
|
+
isCameraPermissionGranted$,
|
|
52
|
+
getVideoDevices,
|
|
53
|
+
setVideoDevices,
|
|
54
|
+
);
|
|
41
55
|
return () => subscription.unsubscribe();
|
|
42
56
|
}, [setState]);
|
|
43
57
|
|
|
@@ -2,6 +2,10 @@ import { AndroidImportance } from '@notifee/react-native';
|
|
|
2
2
|
import { defaultEmojiReactions } from '../../constants';
|
|
3
3
|
import { setupCallkeep, setupFirebaseHandlerAndroid } from '../push/utils';
|
|
4
4
|
import { StreamVideoConfig } from './types';
|
|
5
|
+
import {
|
|
6
|
+
isCameraPermissionGranted$,
|
|
7
|
+
isMicPermissionGranted$,
|
|
8
|
+
} from './permissions';
|
|
5
9
|
|
|
6
10
|
const DEFAULT_STREAM_VIDEO_CONFIG: StreamVideoConfig = {
|
|
7
11
|
supportedReactions: defaultEmojiReactions,
|
|
@@ -61,6 +65,23 @@ export class StreamVideoRN {
|
|
|
61
65
|
setupFirebaseHandlerAndroid(pushConfig);
|
|
62
66
|
}
|
|
63
67
|
|
|
68
|
+
/**
|
|
69
|
+
* Set native permissions config for StreamVideoRN.
|
|
70
|
+
* Note: This function should be called after the user has declined/granted camera and mic permissions.
|
|
71
|
+
* @example
|
|
72
|
+
* See sample-apps/react-native/dogfood/src/hooks/useSyncPermissions.ts
|
|
73
|
+
*/
|
|
74
|
+
static setPermissions({
|
|
75
|
+
isCameraPermissionGranted,
|
|
76
|
+
isMicPermissionGranted,
|
|
77
|
+
}: {
|
|
78
|
+
isCameraPermissionGranted: boolean;
|
|
79
|
+
isMicPermissionGranted: boolean;
|
|
80
|
+
}) {
|
|
81
|
+
isCameraPermissionGranted$.next(isCameraPermissionGranted);
|
|
82
|
+
isMicPermissionGranted$.next(isMicPermissionGranted);
|
|
83
|
+
}
|
|
84
|
+
|
|
64
85
|
static getConfig() {
|
|
65
86
|
return this.config;
|
|
66
87
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { switchMap } from 'rxjs/operators';
|
|
2
|
+
import { BehaviorSubject, EMPTY, Observable } from 'rxjs';
|
|
3
|
+
import { MediaDeviceInfo } from '../../contexts';
|
|
4
|
+
export const isCameraPermissionGranted$ = new BehaviorSubject<boolean>(false);
|
|
5
|
+
export const isMicPermissionGranted$ = new BehaviorSubject<boolean>(false);
|
|
6
|
+
|
|
7
|
+
export const subscribeToDevicesWhenPermissionGranted = (
|
|
8
|
+
isDevicePermissionGranted$: BehaviorSubject<boolean>,
|
|
9
|
+
getDevicesFunc: () => Observable<MediaDeviceInfo[]>,
|
|
10
|
+
subscriptionCallback: (videoDevices: MediaDeviceInfo[]) => void,
|
|
11
|
+
) =>
|
|
12
|
+
isDevicePermissionGranted$
|
|
13
|
+
.pipe(
|
|
14
|
+
switchMap((isDevicePermissionGranted) => {
|
|
15
|
+
// if we don't have mic permission, we don't need to get the audio devices
|
|
16
|
+
// because we won't be able to use them anyway and this will trigger a permission request
|
|
17
|
+
// from RN WebRTC lib. This is not ideal because we want to control when the permission.
|
|
18
|
+
if (!isDevicePermissionGranted) {
|
|
19
|
+
// otherwise return EMPTY, which is an Observable that does nothing and just completes immediately
|
|
20
|
+
return EMPTY;
|
|
21
|
+
}
|
|
22
|
+
return getDevicesFunc();
|
|
23
|
+
}),
|
|
24
|
+
)
|
|
25
|
+
.subscribe(subscriptionCallback);
|
package/src/utils/push/utils.ts
CHANGED
|
@@ -83,7 +83,7 @@ export function setupFirebaseHandlerAndroid(pushConfig: PushConfig) {
|
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
/** Send token to stream, create notification channel, */
|
|
86
|
-
export async function
|
|
86
|
+
export async function initAndroidPushToken(
|
|
87
87
|
client: StreamVideoClient,
|
|
88
88
|
pushConfig: PushConfig,
|
|
89
89
|
) {
|
|
@@ -94,7 +94,6 @@ export async function initAndroidPushTokenAndAskPermissions(
|
|
|
94
94
|
const token = await messaging().getToken();
|
|
95
95
|
const push_provider_name = pushConfig.android.pushProviderName;
|
|
96
96
|
await client.addDevice(token, 'firebase', push_provider_name);
|
|
97
|
-
await notifee.requestPermission();
|
|
98
97
|
}
|
|
99
98
|
|
|
100
99
|
const firebaseMessagingOnMessageHandler = async (
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const verifyAndroidBluetoothPermissions: () => Promise<boolean>;
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.verifyAndroidBluetoothPermissions = void 0;
|
|
4
|
-
const react_native_1 = require("react-native");
|
|
5
|
-
const verifyAndroidBluetoothPermissions = async () => {
|
|
6
|
-
const shouldCheckForPermissions = Number(react_native_1.Platform.Version) >= 31;
|
|
7
|
-
if (!shouldCheckForPermissions) {
|
|
8
|
-
return true;
|
|
9
|
-
}
|
|
10
|
-
const getCheckPermissionPromise = () => {
|
|
11
|
-
return react_native_1.PermissionsAndroid.check(react_native_1.PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT);
|
|
12
|
-
};
|
|
13
|
-
const hasPermission = await getCheckPermissionPromise();
|
|
14
|
-
if (!hasPermission) {
|
|
15
|
-
const getRequestPermissionPromise = async () => {
|
|
16
|
-
const result = await react_native_1.PermissionsAndroid.request(react_native_1.PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT, {
|
|
17
|
-
buttonNegative: 'Deny',
|
|
18
|
-
buttonNeutral: 'Ask Me Later',
|
|
19
|
-
buttonPositive: 'Allow',
|
|
20
|
-
message: 'Permissions are required to route audio to bluetooth devices.',
|
|
21
|
-
title: 'Bluetooth connect Access',
|
|
22
|
-
}).then((status) => status === react_native_1.PermissionsAndroid.RESULTS.GRANTED);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
const granted = await getRequestPermissionPromise();
|
|
26
|
-
return granted;
|
|
27
|
-
}
|
|
28
|
-
return true;
|
|
29
|
-
};
|
|
30
|
-
exports.verifyAndroidBluetoothPermissions = verifyAndroidBluetoothPermissions;
|
|
31
|
-
//# sourceMappingURL=verifyAndroidBluetoothPermissions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"verifyAndroidBluetoothPermissions.js","sourceRoot":"","sources":["../../../src/utils/verifyAndroidBluetoothPermissions.ts"],"names":[],"mappings":";;;AAAA,+CAA4D;AAErD,MAAM,iCAAiC,GAAG,KAAK,IAAI,EAAE;IAC1D,MAAM,yBAAyB,GAAG,MAAM,CAAC,uBAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACjE,IAAI,CAAC,yBAAyB,EAAE;QAC9B,OAAO,IAAI,CAAC;KACb;IACD,MAAM,yBAAyB,GAAG,GAAG,EAAE;QACrC,OAAO,iCAAkB,CAAC,KAAK,CAC7B,iCAAkB,CAAC,WAAW,CAAC,iBAAiB,CACjD,CAAC;IACJ,CAAC,CAAC;IACF,MAAM,aAAa,GAAG,MAAM,yBAAyB,EAAE,CAAC;IACxD,IAAI,CAAC,aAAa,EAAE;QAClB,MAAM,2BAA2B,GAAG,KAAK,IAAI,EAAE;YAC7C,MAAM,MAAM,GAAG,MAAM,iCAAkB,CAAC,OAAO,CAC7C,iCAAkB,CAAC,WAAW,CAAC,iBAAiB,EAChD;gBACE,cAAc,EAAE,MAAM;gBACtB,aAAa,EAAE,cAAc;gBAC7B,cAAc,EAAE,OAAO;gBACvB,OAAO,EACL,+DAA+D;gBACjE,KAAK,EAAE,0BAA0B;aAClC,CACF,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,iCAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAClE,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,2BAA2B,EAAE,CAAC;QACpD,OAAO,OAAO,CAAC;KAChB;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AA9BW,QAAA,iCAAiC,qCA8B5C"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { Platform, PermissionsAndroid } from 'react-native';
|
|
2
|
-
|
|
3
|
-
export const verifyAndroidBluetoothPermissions = async () => {
|
|
4
|
-
const shouldCheckForPermissions = Number(Platform.Version) >= 31;
|
|
5
|
-
if (!shouldCheckForPermissions) {
|
|
6
|
-
return true;
|
|
7
|
-
}
|
|
8
|
-
const getCheckPermissionPromise = () => {
|
|
9
|
-
return PermissionsAndroid.check(
|
|
10
|
-
PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT,
|
|
11
|
-
);
|
|
12
|
-
};
|
|
13
|
-
const hasPermission = await getCheckPermissionPromise();
|
|
14
|
-
if (!hasPermission) {
|
|
15
|
-
const getRequestPermissionPromise = async () => {
|
|
16
|
-
const result = await PermissionsAndroid.request(
|
|
17
|
-
PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT,
|
|
18
|
-
{
|
|
19
|
-
buttonNegative: 'Deny',
|
|
20
|
-
buttonNeutral: 'Ask Me Later',
|
|
21
|
-
buttonPositive: 'Allow',
|
|
22
|
-
message:
|
|
23
|
-
'Permissions are required to route audio to bluetooth devices.',
|
|
24
|
-
title: 'Bluetooth connect Access',
|
|
25
|
-
},
|
|
26
|
-
).then((status) => status === PermissionsAndroid.RESULTS.GRANTED);
|
|
27
|
-
return result;
|
|
28
|
-
};
|
|
29
|
-
const granted = await getRequestPermissionPromise();
|
|
30
|
-
return granted;
|
|
31
|
-
}
|
|
32
|
-
return true;
|
|
33
|
-
};
|