fix: open device selection if it is the only available setting

Move logic to open device selection outside of SettingsMenu so
it can be called independently by either SettingsMenu or by
the settings button itself if no other settings but devices will
be displayed.
This commit is contained in:
Leonard Kim 2017-04-09 14:20:37 -07:00
parent ae06a6ce41
commit 7db1c9b8eb
5 changed files with 60 additions and 55 deletions

View File

@ -1058,15 +1058,6 @@ export default {
});
},
/**
* Returns the current local video track in use.
*
* @returns {JitsiLocalTrack}
*/
getLocalVideoTrack() {
return room.getLocalVideoTrack();
},
/**
* Start using provided audio stream.
* Stops previous audio stream.
@ -1096,14 +1087,6 @@ export default {
});
},
/**
* Returns the current local audio track in use.
*
* @returns {JitsiLocalTrack}
*/
getLocalAudioTrack() {
return room.getLocalAudioTrack();
},
videoSwitchInProgress: false,
toggleScreenSharing(shareScreen = !this.isSharingScreen) {

View File

@ -31,6 +31,9 @@ import {
setAudioMuted,
setVideoMuted
} from '../../react/features/base/media';
import {
openDeviceSelectionDialog
} from '../../react/features/device-selection';
import {
checkAutoEnableDesktopSharing,
dockToolbox,
@ -1369,7 +1372,18 @@ const UIListeners = new Map([
UI.toggleChat
], [
UIEvents.TOGGLE_SETTINGS,
() => UI.toggleSidePanel("settings_container")
() => {
// Opening of device selection is special-cased as it is a dialog
// opened through a button in settings and not directly displayed in
// settings itself. As it is not useful to only have a settings menu
// with a button to open a dialog, open the dialog directly instead.
if (interfaceConfig.SETTINGS_SECTIONS.length === 1
&& UIUtil.isSettingEnabled('devices')) {
APP.store.dispatch(openDeviceSelectionDialog());
} else {
UI.toggleSidePanel("settings_container");
}
}
], [
UIEvents.TOGGLE_CONTACT_LIST,
UI.toggleContactList

View File

@ -1,7 +1,6 @@
/* global $, APP, AJS, interfaceConfig, JitsiMeetJS */
import { openDialog } from '../../../../react/features/base/dialog';
/* global $, APP, AJS, interfaceConfig */
import { LANGUAGES } from "../../../../react/features/base/i18n";
import { DeviceSelectionDialog }
import { openDeviceSelectionDialog }
from '../../../../react/features/device-selection';
import UIUtil from "../../util/UIUtil";
@ -101,34 +100,6 @@ function initSelect2($el, onSelectedCb) {
}
}
/**
* Open DeviceSelectionDialog with a configuration based on the environment's
* supported abilities.
*
* @param {boolean} isDeviceListAvailable - Whether or not device enumeration
* is possible. This is a value obtained through an async operation whereas all
* other configurations for the modal are obtained synchronously.
* @private
* @returns {void}
*/
function _openDeviceSelectionModal(isDeviceListAvailable) {
APP.store.dispatch(openDialog(DeviceSelectionDialog, {
currentAudioOutputId: APP.settings.getAudioOutputDeviceId(),
currentAudioTrack: APP.conference.getLocalAudioTrack(),
currentVideoTrack: APP.conference.getLocalVideoTrack(),
disableAudioInputChange: !JitsiMeetJS.isMultipleAudioInputSupported(),
disableDeviceChange: !isDeviceListAvailable
|| !JitsiMeetJS.mediaDevices.isDeviceChangeAvailable(),
hasAudioPermission: JitsiMeetJS.mediaDevices
.isDevicePermissionGranted('audio'),
hasVideoPermission: JitsiMeetJS.mediaDevices
.isDevicePermissionGranted('video'),
hideAudioInputPreview: !JitsiMeetJS.isCollectingLocalStats(),
hideAudioOutputSelect: !JitsiMeetJS.mediaDevices
.isDeviceChangeAvailable('output')
}));
}
export default {
init (emitter) {
initHTML();
@ -170,12 +141,8 @@ export default {
if (UIUtil.isSettingEnabled('devices')) {
const wrapperId = 'deviceOptionsWrapper';
JitsiMeetJS.mediaDevices.isDeviceListAvailable()
.then((isDeviceListAvailable) => {
$('#deviceSelection').on('click', () => {
_openDeviceSelectionModal(isDeviceListAvailable);
});
});
$('#deviceSelection').on('click', () =>
APP.store.dispatch(openDeviceSelectionDialog()));
// Only show the subtitle if this isn't the only setting section.
if (interfaceConfig.SETTINGS_SECTIONS.length > 1)

View File

@ -0,0 +1,40 @@
/* globals APP */
import { openDialog } from '../base/dialog';
import JitsiMeetJS from '../base/lib-jitsi-meet';
import { DeviceSelectionDialog } from './components';
/**
* Open DeviceSelectionDialog with a configuration based on the environment's
* supported abilities.
*
* @returns {Function}
*/
export function openDeviceSelectionDialog() {
return (dispatch, getState) => {
JitsiMeetJS.mediaDevices.isDeviceListAvailable()
.then(isDeviceListAvailable => {
const state = getState();
const conference = state['features/base/conference'].conference;
dispatch(openDialog(DeviceSelectionDialog, {
currentAudioOutputId: APP.settings.getAudioOutputDeviceId(),
currentAudioTrack: conference.getLocalAudioTrack(),
currentVideoTrack: conference.getLocalVideoTrack(),
disableAudioInputChange:
!JitsiMeetJS.isMultipleAudioInputSupported(),
disableDeviceChange: !isDeviceListAvailable
|| !JitsiMeetJS.mediaDevices.isDeviceChangeAvailable(),
hasAudioPermission: JitsiMeetJS.mediaDevices
.isDevicePermissionGranted('audio'),
hasVideoPermission: JitsiMeetJS.mediaDevices
.isDevicePermissionGranted('video'),
hideAudioInputPreview:
!JitsiMeetJS.isCollectingLocalStats(),
hideAudioOutputSelect: !JitsiMeetJS.mediaDevices
.isDeviceChangeAvailable('output')
}));
});
};
}

View File

@ -1 +1,2 @@
export * from './actions';
export * from './components';