| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| /** |
| * The types of Hotword enable status without Dsp support. |
| * @enum {number} |
| */ |
| const DspHotwordState = { |
| DEFAULT_ON: 0, |
| ALWAYS_ON: 1, |
| OFF: 2, |
| }; |
| |
| /** |
| * @fileoverview 'settings-google-assistant-page' is the settings page |
| * containing Google Assistant settings. |
| */ |
| Polymer({ |
| is: 'settings-google-assistant-page', |
| |
| behaviors: [I18nBehavior, PrefsBehavior], |
| |
| properties: { |
| /** @private */ |
| assistantFeatureEnabled_: { |
| type: Boolean, |
| value: function() { |
| return loadTimeData.getBoolean('enableAssistant'); |
| }, |
| }, |
| |
| /** @private */ |
| hotwordDspAvailable_: { |
| type: Boolean, |
| value: function() { |
| return loadTimeData.getBoolean('hotwordDspAvailable'); |
| }, |
| }, |
| |
| /** @private */ |
| hotwordDropdownList_: { |
| type: Array, |
| value: function() { |
| return [ |
| { |
| name: loadTimeData.getString( |
| 'googleAssistantEnableHotwordWithoutDspRecommended'), |
| value: DspHotwordState.DEFAULT_ON |
| }, |
| { |
| name: loadTimeData.getString( |
| 'googleAssistantEnableHotwordWithoutDspAlwaysOn'), |
| value: DspHotwordState.ALWAYS_ON |
| }, |
| { |
| name: loadTimeData.getString( |
| 'googleAssistantEnableHotwordWithoutDspOff'), |
| value: DspHotwordState.OFF |
| } |
| ]; |
| }, |
| }, |
| |
| /** @private */ |
| hotwordDefaultOn_: { |
| type: Boolean, |
| value: false, |
| }, |
| |
| /** @private */ |
| dspHotwordState_: { |
| type: DspHotwordState, |
| } |
| }, |
| |
| observers: [ |
| 'onPrefsChanged_(prefs.settings.voice_interaction.hotword.enabled.value)', |
| 'onPrefsChanged_(prefs.settings.voice_interaction.hotword.always_on.value)', |
| ], |
| |
| /** @private {?settings.GoogleAssistantBrowserProxy} */ |
| browserProxy_: null, |
| |
| /** @override */ |
| created: function() { |
| this.browserProxy_ = settings.GoogleAssistantBrowserProxyImpl.getInstance(); |
| }, |
| |
| /** |
| * @param {boolean} toggleValue |
| * @return {string} |
| * @private |
| */ |
| getAssistantOnOffLabel_: function(toggleValue) { |
| return this.i18n(toggleValue ? 'toggleOn' : 'toggleOff'); |
| }, |
| |
| /** @private */ |
| onGoogleAssistantSettingsTapped_: function() { |
| this.browserProxy_.showGoogleAssistantSettings(); |
| }, |
| |
| /** @private */ |
| onRetrainVoiceModelTapped_: function() { |
| this.browserProxy_.retrainAssistantVoiceModel(); |
| }, |
| |
| /** @private */ |
| onDeleteVoiceModelTapped_: function() { |
| this.browserProxy_.deleteAssistantVoiceModel(); |
| }, |
| |
| /** @private */ |
| onDspHotwordStateChange_: function() { |
| switch (Number(this.$$('#dspHotwordState').value)) { |
| case DspHotwordState.DEFAULT_ON: |
| this.setPrefValue('settings.voice_interaction.hotword.enabled', true); |
| this.setPrefValue( |
| 'settings.voice_interaction.hotword.always_on', false); |
| this.hotwordDefaultOn_ = true; |
| break; |
| case DspHotwordState.ALWAYS_ON: |
| this.setPrefValue('settings.voice_interaction.hotword.enabled', true); |
| this.setPrefValue('settings.voice_interaction.hotword.always_on', true); |
| this.hotwordDefaultOn_ = false; |
| break; |
| case DspHotwordState.OFF: |
| this.setPrefValue('settings.voice_interaction.hotword.enabled', false); |
| this.setPrefValue( |
| 'settings.voice_interaction.hotword.always_on', false); |
| this.hotwordDefaultOn_ = false; |
| break; |
| default: |
| console.error('Invalid Dsp hotword settings state'); |
| } |
| }, |
| |
| /** |
| * @param {number} state |
| * @return {boolean} |
| * @private |
| */ |
| isDspHotwordStateMatch_: function(state) { |
| return state == this.dspHotwordState_; |
| }, |
| |
| /** @private */ |
| onPrefsChanged_: function() { |
| this.refreshDspHotwordState_(); |
| }, |
| |
| /** @private */ |
| refreshDspHotwordState_: function() { |
| if (!this.getPref('settings.voice_interaction.hotword.enabled.value')) { |
| this.hotwordDefaultOn_ = false; |
| this.dspHotwordState_ = DspHotwordState.OFF; |
| } else if (this.getPref( |
| 'settings.voice_interaction.hotword.always_on.value')) { |
| this.hotwordDefaultOn_ = false; |
| this.dspHotwordState_ = DspHotwordState.ALWAYS_ON; |
| } else { |
| this.hotwordDefaultOn_ = true; |
| this.dspHotwordState_ = DspHotwordState.DEFAULT_ON; |
| } |
| |
| if (this.$$('#dspHotwordState')) { |
| this.$$('#dspHotwordState').value = this.dspHotwordState_; |
| } |
| } |
| }); |