diff --git a/src/providers/SpeechProvider/SpeechProvider.actions.js b/src/providers/SpeechProvider/SpeechProvider.actions.js index 3c8666a52..84c89aee8 100644 --- a/src/providers/SpeechProvider/SpeechProvider.actions.js +++ b/src/providers/SpeechProvider/SpeechProvider.actions.js @@ -134,10 +134,16 @@ export function getTtsDefaultEngine() { } export function changeVoice(voiceURI, lang) { - return { - type: CHANGE_VOICE, - voiceURI, - lang + return (dispatch, getState) => { + const isCloud = + getState().speech.voices.find(v => v.voiceURI === voiceURI) + ?.voiceSource === 'cloud'; + dispatch({ + type: CHANGE_VOICE, + voiceURI, + lang, + isCloud + }); }; } @@ -249,3 +255,12 @@ export function speak(text, onend = () => {}) { }); }; } + +export function setCurrentVoiceSource() { + return (dispatch, getState) => { + const { isCloud = null, voiceURI, lang } = getState().speech.options; + if (isCloud === null && !!voiceURI && !!lang) + dispatch(changeVoice(voiceURI, lang)); + return; + }; +} diff --git a/src/providers/SpeechProvider/SpeechProvider.container.js b/src/providers/SpeechProvider/SpeechProvider.container.js index 15778fa9c..413b4b157 100644 --- a/src/providers/SpeechProvider/SpeechProvider.container.js +++ b/src/providers/SpeechProvider/SpeechProvider.container.js @@ -8,7 +8,8 @@ import { getTtsEngines, getTtsDefaultEngine, updateLangSpeechStatus, - setTtsEngine + setTtsEngine, + setCurrentVoiceSource } from './SpeechProvider.actions'; import { isAndroid } from '../../cordova-util'; @@ -26,7 +27,8 @@ export class SpeechProvider extends Component { getTtsEngines, getTtsDefaultEngine, ttsEngine, - setTtsEngine + setTtsEngine, + setCurrentVoiceSource } = this.props; if (tts.isSupported()) { @@ -49,6 +51,7 @@ export class SpeechProvider extends Component { console.error(err.message); } } + setCurrentVoiceSource(); } render() { @@ -67,7 +70,8 @@ const mapDispatchToProps = { getTtsEngines, getTtsDefaultEngine, setTtsEngine, - updateLangSpeechStatus + updateLangSpeechStatus, + setCurrentVoiceSource }; export default connect( diff --git a/src/providers/SpeechProvider/SpeechProvider.reducer.js b/src/providers/SpeechProvider/SpeechProvider.reducer.js index 6a0fb4823..840621fe5 100644 --- a/src/providers/SpeechProvider/SpeechProvider.reducer.js +++ b/src/providers/SpeechProvider/SpeechProvider.reducer.js @@ -30,6 +30,7 @@ const initialState = { options: { lang: '', voiceURI: null, + isCloud: null, pitch: 1.0, rate: 1.0, volume: 1 @@ -77,7 +78,8 @@ function speechProviderReducer(state = initialState, action) { options: { ...state.options, voiceURI: action ? action.voiceURI : EMPTY_VOICES, - lang: action ? action.lang : DEFAULT_LANG + lang: action ? action.lang : DEFAULT_LANG, + isCloud: action ? action.isCloud || null : null } }; case RECEIVE_TTS_ENGINES: diff --git a/src/providers/SpeechProvider/__tests__/SpeechProvider.reducer.test.js b/src/providers/SpeechProvider/__tests__/SpeechProvider.reducer.test.js index a0d5e3446..63f2af9e7 100644 --- a/src/providers/SpeechProvider/__tests__/SpeechProvider.reducer.test.js +++ b/src/providers/SpeechProvider/__tests__/SpeechProvider.reducer.test.js @@ -22,6 +22,7 @@ describe('reducer', () => { options: { lang: '', voiceURI: null, + isCloud: null, pitch: 1.0, rate: 1.0, volume: 1