agora-appbuilder-core 4.0.0-beta.12 → 4.0.0-beta.13

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agora-appbuilder-core",
3
- "version": "4.0.0-beta.12",
3
+ "version": "4.0.0-beta.13",
4
4
  "description": "React Native template for RTE app builder",
5
5
  "main": "index.js",
6
6
  "files": [
@@ -45,11 +45,15 @@ type deviceKind = deviceInfo['kind'];
45
45
 
46
46
  const DeviceConfigure: React.FC<Props> = (props: any) => {
47
47
  const rtc = useRtc();
48
- const [selectedCam, setUiSelectedCam] = useState('');
49
- const [selectedMic, setUiSelectedMic] = useState('');
50
- const [selectedSpeaker, setUiSelectedSpeaker] = useState('');
48
+ const [uiSelectedCam, setUiSelectedCam] = useState('');
49
+ const [uiSelectedMic, setUiSelectedMic] = useState('');
50
+ const [uiSelectedSpeaker, setUiSelectedSpeaker] = useState('');
51
51
  const [deviceList, setDeviceList] = useState<deviceInfo[]>([]);
52
52
 
53
+ const micSelectInProgress = useRef(false);
54
+ const camSelectInProgress = useRef(false);
55
+ const speakerSelectInProgress = useRef(false);
56
+
53
57
  const {primaryColor} = useContext(ColorContext);
54
58
  const {store, setStore} = useContext(StorageContext);
55
59
  const {rememberedDevicesList, activeDeviceId} = store;
@@ -241,7 +245,7 @@ const DeviceConfigure: React.FC<Props> = (props: any) => {
241
245
 
242
246
  if (activeDeviceId && deviceList.length > 0) {
243
247
  // If stream exists and selected devices are empty, check for devices again
244
- if (!selectedCam || selectedCam.trim().length == 0) {
248
+ if (!uiSelectedCam || uiSelectedCam.trim().length == 0) {
245
249
  log(logTag, 'cam: Device list populated but No selected cam');
246
250
  const currentVideoDevice = getAgoraTrackDeviceId('video');
247
251
  const {videoinput: storedVideoInput} = activeDeviceId;
@@ -259,7 +263,7 @@ const DeviceConfigure: React.FC<Props> = (props: any) => {
259
263
  }
260
264
  }
261
265
 
262
- if (!selectedMic || selectedMic.trim().length == 0) {
266
+ if (!uiSelectedMic || uiSelectedMic.trim().length == 0) {
263
267
  log(logTag, 'mic: Device list populated but No selected mic');
264
268
  const currentAudioDevice = getAgoraTrackDeviceId('audio');
265
269
  const {audioinput: storedAudioInput} = activeDeviceId;
@@ -277,7 +281,7 @@ const DeviceConfigure: React.FC<Props> = (props: any) => {
277
281
  }
278
282
  }
279
283
 
280
- if (!selectedSpeaker || selectedSpeaker.trim().length == 0) {
284
+ if (!uiSelectedSpeaker || uiSelectedSpeaker.trim().length == 0) {
281
285
  log(logTag, 'speaker: Device list populated but No selected speaker');
282
286
  const {audiooutput: storedAudioOutput} = activeDeviceId;
283
287
  const defaultSpeaker = deviceList.find(
@@ -323,17 +327,17 @@ const DeviceConfigure: React.FC<Props> = (props: any) => {
323
327
  const {logTag, currentDevice, setCurrentDevice} = {
324
328
  audioinput: {
325
329
  logTag: 'mic: on-microphone-changed',
326
- currentDevice: selectedMic,
330
+ currentDevice: uiSelectedMic,
327
331
  setCurrentDevice: setSelectedMic,
328
332
  },
329
333
  audiooutput: {
330
334
  logTag: 'speaker: on-speaker-changed',
331
- currentDevice: selectedSpeaker,
335
+ currentDevice: uiSelectedSpeaker,
332
336
  setCurrentDevice: setSelectedSpeaker,
333
337
  },
334
338
  videoinput: {
335
339
  logTag: 'cam: on-camera-changed',
336
- currentDevice: selectedCam,
340
+ currentDevice: uiSelectedCam,
337
341
  setCurrentDevice: setSelectedCam,
338
342
  },
339
343
  }[changedDevice.kind];
@@ -401,33 +405,42 @@ const DeviceConfigure: React.FC<Props> = (props: any) => {
401
405
  return () => {
402
406
  AgoraRTC.onMicrophoneChanged = null;
403
407
  };
404
- }, [selectedMic, deviceList]);
408
+ }, [uiSelectedMic, deviceList]);
405
409
 
406
410
  useEffect(() => {
407
411
  AgoraRTC.onPlaybackDeviceChanged = commonOnChangedEvent;
408
412
  return () => {
409
413
  AgoraRTC.onPlaybackDeviceChanged = null;
410
414
  };
411
- }, [selectedSpeaker, deviceList]);
415
+ }, [uiSelectedSpeaker, deviceList]);
412
416
 
413
417
  useEffect(() => {
414
418
  AgoraRTC.onCameraChanged = commonOnChangedEvent;
415
419
  return () => {
416
420
  AgoraRTC.onCameraChanged = null;
417
421
  };
418
- }, [selectedCam, deviceList]);
422
+ }, [uiSelectedCam, deviceList]);
419
423
 
420
424
  const setSelectedMic = (deviceId: deviceId) => {
421
425
  log('mic: setting to', deviceId);
422
426
  return new Promise((res, rej) => {
427
+ if (micSelectInProgress.current) {
428
+ const e = new Error('Change already in progress');
429
+ console.error('DeviceConfigure: Error setting mic', e);
430
+ rej(e);
431
+ return;
432
+ }
433
+ micSelectInProgress.current = true;
423
434
  RtcEngine.changeMic(
424
435
  deviceId,
425
436
  () => {
426
437
  syncSelectedDeviceUi('audioinput');
427
438
  updateActiveDeviceId('audioinput', deviceId);
439
+ micSelectInProgress.current = false;
428
440
  res(null);
429
441
  },
430
442
  (e: any) => {
443
+ micSelectInProgress.current = false;
431
444
  console.error('DeviceConfigure: Error setting mic', e);
432
445
  rej(e);
433
446
  },
@@ -438,14 +451,23 @@ const DeviceConfigure: React.FC<Props> = (props: any) => {
438
451
  const setSelectedCam = (deviceId: deviceId) => {
439
452
  log('cam: setting to', deviceId);
440
453
  return new Promise((res, rej) => {
454
+ if (camSelectInProgress.current) {
455
+ const e = new Error('Change already in progress');
456
+ console.error('DeviceConfigure: Error setting webcam', e);
457
+ rej(e);
458
+ return;
459
+ }
460
+ camSelectInProgress.current = true;
441
461
  RtcEngine.changeCamera(
442
462
  deviceId,
443
463
  () => {
444
464
  syncSelectedDeviceUi('videoinput');
445
465
  updateActiveDeviceId('videoinput', deviceId);
466
+ camSelectInProgress.current = false;
446
467
  res(null);
447
468
  },
448
469
  (e: any) => {
470
+ camSelectInProgress.current = false;
449
471
  console.error('Device Configure: Error setting webcam', e);
450
472
  rej(e);
451
473
  },
@@ -456,16 +478,25 @@ const DeviceConfigure: React.FC<Props> = (props: any) => {
456
478
  const setSelectedSpeaker = (deviceId: deviceId) => {
457
479
  log('speaker: setting to', deviceId);
458
480
  return new Promise((res, rej) => {
481
+ if (speakerSelectInProgress.current) {
482
+ const e = new Error('Change already in progress');
483
+ console.error('DeviceConfigure: Error setting speaker', e);
484
+ rej(e);
485
+ return;
486
+ }
487
+ speakerSelectInProgress.current = true;
459
488
  RtcEngine.changeSpeaker(
460
489
  deviceId,
461
490
  () => {
462
491
  setUiSelectedSpeaker(deviceId);
463
492
  updateActiveDeviceId('audiooutput', deviceId);
493
+ speakerSelectInProgress.current = false;
464
494
  res(null);
465
495
  },
466
496
  (e: any) => {
497
+ speakerSelectInProgress.current = false;
467
498
  console.error('Device Configure: Error setting speaker', e);
468
- rej(selectedSpeaker);
499
+ rej(uiSelectedSpeaker);
469
500
  },
470
501
  );
471
502
  });
@@ -526,11 +557,11 @@ const DeviceConfigure: React.FC<Props> = (props: any) => {
526
557
  return (
527
558
  <DeviceContext.Provider
528
559
  value={{
529
- selectedCam,
560
+ selectedCam: uiSelectedCam,
530
561
  setSelectedCam,
531
- selectedMic,
562
+ selectedMic: uiSelectedMic,
532
563
  setSelectedMic,
533
- selectedSpeaker,
564
+ selectedSpeaker: uiSelectedSpeaker,
534
565
  setSelectedSpeaker,
535
566
  deviceList,
536
567
  setDeviceList,