fix(prejoin) Consider user selection for prejoin only on mount
This commit is contained in:
parent
d44660527b
commit
d22d95e8a5
|
@ -135,7 +135,6 @@ import { mediaPermissionPromptVisibilityChanged, toggleSlowGUMOverlay } from './
|
|||
import { suspendDetected } from './react/features/power-monitor';
|
||||
import {
|
||||
initPrejoin,
|
||||
isPrejoinPageEnabled,
|
||||
isPrejoinPageVisible,
|
||||
makePrecallTest,
|
||||
setJoiningInProgress,
|
||||
|
@ -797,7 +796,7 @@ export default {
|
|||
logger.warn('initial device list initialization failed', error);
|
||||
}
|
||||
|
||||
if (isPrejoinPageEnabled(APP.store.getState())) {
|
||||
if (isPrejoinPageVisible(APP.store.getState())) {
|
||||
_connectionPromise = connect(roomName).then(c => {
|
||||
// we want to initialize it early, in case of errors to be able
|
||||
// to gather logs
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
import _ from 'lodash';
|
||||
|
||||
import { PREJOIN_INITIALIZED } from '../../prejoin/actionTypes';
|
||||
import { setPrejoinPageVisibility } from '../../prejoin/actions';
|
||||
import { APP_WILL_MOUNT } from '../app';
|
||||
import { setAudioOnly } from '../audio-only';
|
||||
import { SET_LOCATION_URL } from '../connection/actionTypes'; // minimize imports to avoid circular imports
|
||||
|
@ -29,6 +30,7 @@ MiddlewareRegistry.register(store => next => action => {
|
|||
switch (action.type) {
|
||||
case APP_WILL_MOUNT:
|
||||
_initializeCallIntegration(store);
|
||||
_initializeShowPrejoin(store);
|
||||
break;
|
||||
case PREJOIN_INITIALIZED: {
|
||||
_maybeUpdateDisplayName(store);
|
||||
|
@ -48,6 +50,21 @@ MiddlewareRegistry.register(store => next => action => {
|
|||
return result;
|
||||
});
|
||||
|
||||
/**
|
||||
* Overwrites the showPrejoin flag based on cached used selection for showing prejoin screen.
|
||||
*
|
||||
* @param {Store} store - The redux store.
|
||||
* @private
|
||||
* @returns {void}
|
||||
*/
|
||||
function _initializeShowPrejoin({ dispatch, getState }) {
|
||||
const { userSelectedSkipPrejoin } = getState()['features/base/settings'];
|
||||
|
||||
if (userSelectedSkipPrejoin) {
|
||||
dispatch(setPrejoinPageVisibility(false));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes the audio device handler based on the `disableCallIntegration` setting.
|
||||
*
|
||||
|
|
|
@ -14,11 +14,6 @@ export const PREJOIN_INITIALIZED = 'PREJOIN_INITIALIZED';
|
|||
*/
|
||||
export const SET_DEVICE_STATUS = 'SET_DEVICE_STATUS';
|
||||
|
||||
/**
|
||||
* Action type to mark the fact that the 'skip prejoin' option was modified this session.
|
||||
*/
|
||||
export const SET_SKIP_PREJOIN_CHANGING = 'SET_SKIP_PREJOIN_CHANGING';
|
||||
|
||||
/**
|
||||
* Action type to set the visibility of the prejoin page when client is forcefully reloaded.
|
||||
*/
|
||||
|
|
|
@ -27,7 +27,6 @@ import {
|
|||
SET_DIALOUT_NUMBER,
|
||||
SET_DIALOUT_STATUS,
|
||||
SET_PREJOIN_DISPLAY_NAME_REQUIRED,
|
||||
SET_SKIP_PREJOIN_CHANGING,
|
||||
SET_SKIP_PREJOIN_RELOAD,
|
||||
SET_JOIN_BY_PHONE_DIALOG_VISIBLITY,
|
||||
SET_PRECALL_TEST_RESULTS,
|
||||
|
@ -477,20 +476,6 @@ export function setDialOutNumber(value: string) {
|
|||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a flag which signals that the option to skip the prejoin
|
||||
* page on join has been modified during this session.
|
||||
*
|
||||
* @param {boolean} value - The visibility value.
|
||||
* @returns {Object}
|
||||
*/
|
||||
export function setSkipPrejoinIsChanging(value: boolean) {
|
||||
return {
|
||||
type: SET_SKIP_PREJOIN_CHANGING,
|
||||
value
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the visibility of the prejoin page when a client reload
|
||||
* is triggered as a result of call migration initiated by Jicofo.
|
||||
|
|
|
@ -136,29 +136,13 @@ export function isJoinByPhoneDialogVisible(state: Object): boolean {
|
|||
* @param {Object} state - The state of the app.
|
||||
* @returns {boolean}
|
||||
*/
|
||||
export function isPrejoinPageEnabled(state: Object): boolean {
|
||||
export function isPrejoinPageVisible(state: Object): boolean {
|
||||
return navigator.product !== 'ReactNative'
|
||||
&& state['features/base/config'].prejoinConfig?.enabled
|
||||
&& !state['features/base/settings'].userSelectedSkipPrejoin
|
||||
&& state['features/prejoin']?.showPrejoin
|
||||
&& !(state['features/base/config'].enableForcedReload && state['features/prejoin'].skipPrejoinOnReload);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the prejoin page is visible & active.
|
||||
*
|
||||
* @param {Object} state - The state of the app.
|
||||
* @returns {boolean}
|
||||
*/
|
||||
export function isPrejoinPageVisible(state: Object): boolean {
|
||||
// If the user has changed the setting for prejoin visibility on start
|
||||
// let the visibility be controlled only by the 'showPrejoin' flag.
|
||||
if (state['features/prejoin'].skipPrejoinChanging) {
|
||||
return state['features/prejoin']?.showPrejoin;
|
||||
}
|
||||
|
||||
return isPrejoinPageEnabled(state) && state['features/prejoin']?.showPrejoin;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if we should auto-knock in case lobby is enabled for the room.
|
||||
*
|
||||
|
@ -168,6 +152,6 @@ export function isPrejoinPageVisible(state: Object): boolean {
|
|||
export function shouldAutoKnock(state: Object): boolean {
|
||||
const { iAmRecorder, iAmSipGateway, autoKnockLobby } = state['features/base/config'];
|
||||
|
||||
return (isPrejoinPageEnabled(state) || autoKnockLobby || (iAmRecorder && iAmSipGateway))
|
||||
return (isPrejoinPageVisible(state) || autoKnockLobby || (iAmRecorder && iAmSipGateway))
|
||||
&& !state['features/lobby'].knocking;
|
||||
}
|
||||
|
|
|
@ -11,7 +11,6 @@ import {
|
|||
SET_PREJOIN_DEVICE_ERRORS,
|
||||
SET_PREJOIN_DISPLAY_NAME_REQUIRED,
|
||||
SET_PREJOIN_PAGE_VISIBILITY,
|
||||
SET_SKIP_PREJOIN_CHANGING,
|
||||
SET_SKIP_PREJOIN_RELOAD
|
||||
} from './actionTypes';
|
||||
|
||||
|
@ -30,7 +29,6 @@ const DEFAULT_STATE = {
|
|||
name: '',
|
||||
rawError: '',
|
||||
showPrejoin: true,
|
||||
skipPrejoinChanging: false,
|
||||
skipPrejoinOnReload: false,
|
||||
showJoinByPhoneDialog: false
|
||||
};
|
||||
|
@ -59,13 +57,6 @@ ReducerRegistry.register(
|
|||
...state,
|
||||
joiningInProgress: action.value
|
||||
};
|
||||
case SET_SKIP_PREJOIN_CHANGING: {
|
||||
return {
|
||||
...state,
|
||||
skipPrejoinChanging: action.value
|
||||
};
|
||||
}
|
||||
|
||||
case SET_SKIP_PREJOIN_RELOAD: {
|
||||
return {
|
||||
...state,
|
||||
|
|
|
@ -10,7 +10,6 @@ import {
|
|||
import { openDialog } from '../base/dialog';
|
||||
import { i18next } from '../base/i18n';
|
||||
import { updateSettings } from '../base/settings';
|
||||
import { setPrejoinPageVisibility, setSkipPrejoinIsChanging } from '../prejoin/actions';
|
||||
import { setScreenshareFramerate } from '../screen-share/actions';
|
||||
|
||||
import {
|
||||
|
@ -88,17 +87,9 @@ export function submitMoreTab(newState: Object): Function {
|
|||
const showPrejoinPage = newState.showPrejoinPage;
|
||||
|
||||
if (showPrejoinPage !== currentState.showPrejoinPage) {
|
||||
// The 'showPrejoin' flag starts as 'true' on every new session.
|
||||
// This prevents displaying the prejoin page when the user re-enables it.
|
||||
if (showPrejoinPage && getState()['features/prejoin']?.showPrejoin) {
|
||||
dispatch(setPrejoinPageVisibility(false));
|
||||
}
|
||||
batch(() => {
|
||||
dispatch(setSkipPrejoinIsChanging(true));
|
||||
dispatch(updateSettings({
|
||||
userSelectedSkipPrejoin: !showPrejoinPage
|
||||
}));
|
||||
});
|
||||
dispatch(updateSettings({
|
||||
userSelectedSkipPrejoin: !showPrejoinPage
|
||||
}));
|
||||
}
|
||||
|
||||
const enabledNotifications = newState.enabledNotifications;
|
||||
|
|
Loading…
Reference in New Issue