Chromium Code Reviews| Index: chrome/browser/ui/app_list/start_page_service.cc |
| diff --git a/chrome/browser/ui/app_list/start_page_service.cc b/chrome/browser/ui/app_list/start_page_service.cc |
| index b8af9bd5f3656fb6fab272a425c34731fd487bda..3c1ed5b494796f7b5f500b4e8eeada672ca72ce8 100644 |
| --- a/chrome/browser/ui/app_list/start_page_service.cc |
| +++ b/chrome/browser/ui/app_list/start_page_service.cc |
| @@ -11,12 +11,14 @@ |
| #include "base/memory/singleton.h" |
| #include "base/metrics/user_metrics.h" |
| #include "base/prefs/pref_service.h" |
| +#include "chrome/browser/browser_process.h" |
| #include "chrome/browser/chrome_notification_types.h" |
| #include "chrome/browser/media/media_stream_infobar_delegate.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/search/hotword_service.h" |
| #include "chrome/browser/search/hotword_service_factory.h" |
| #include "chrome/browser/ui/app_list/recommended_apps.h" |
| +#include "chrome/browser/ui/app_list/speech_recognizer.h" |
| #include "chrome/browser/ui/app_list/start_page_observer.h" |
| #include "chrome/browser/ui/app_list/start_page_service_factory.h" |
| #include "chrome/common/chrome_switches.h" |
| @@ -136,7 +138,8 @@ void StartPageService::RemoveObserver(StartPageObserver* observer) { |
| void StartPageService::AppListShown() { |
| if (!contents_) { |
| LoadContents(); |
| - } else if (contents_->GetWebUI()) { |
| + } else if (contents_->GetWebUI() && |
| + !HotwordService::IsExperimentalHotwordingEnabled()) { |
|
Matt Giuca
2014/11/03 02:35:52
Why did you add this?
Anand Mistry (off Chromium)
2014/11/03 06:51:56
New hotwording doesn't use the web speech api, whi
|
| // If experimental hotwording is enabled, don't enable hotwording in the |
| // start page, since the hotword extension is taking care of this. |
| bool hotword_enabled = HotwordEnabled() && |
| @@ -154,6 +157,11 @@ void StartPageService::AppListHidden() { |
| } |
| if (!app_list::switches::IsExperimentalAppListEnabled()) |
| UnloadContents(); |
| + |
| + if (HotwordService::IsExperimentalHotwordingEnabled() && |
| + speech_recognizer_.get()) { |
| + speech_recognizer_->Stop(); |
| + } |
| } |
| void StartPageService::ToggleSpeechRecognition() { |
| @@ -162,14 +170,34 @@ void StartPageService::ToggleSpeechRecognition() { |
| if (!contents_->GetWebUI()) |
| return; |
| - if (webui_finished_loading_) { |
| - contents_->GetWebUI()->CallJavascriptFunction( |
| - "appList.startPage.toggleSpeechRecognition"); |
| - } else { |
| + if (!webui_finished_loading_) { |
| pending_webui_callbacks_.push_back( |
| base::Bind(&StartPageService::ToggleSpeechRecognition, |
| base::Unretained(this))); |
| + return; |
| } |
| + |
| + if (HotwordService::IsExperimentalHotwordingEnabled()) { |
| + if (!speech_recognizer_.get()) { |
| + std::string profile_locale; |
| +#if defined(OS_CHROMEOS) |
| + profile_locale = profile_->GetPrefs()->GetString( |
| + prefs::kApplicationLocale); |
| +#endif |
| + if (profile_locale.empty()) |
| + profile_locale = g_browser_process->GetApplicationLocale(); |
| + |
| + speech_recognizer_ = new SpeechRecognizer(this, |
| + profile_->GetRequestContext(), |
| + profile_locale); |
| + } |
| + |
| + speech_recognizer_->Start(); |
| + return; |
| + } |
| + |
| + contents_->GetWebUI()->CallJavascriptFunction( |
| + "appList.startPage.toggleSpeechRecognition"); |
| } |
| bool StartPageService::HotwordEnabled() { |
| @@ -210,7 +238,7 @@ void StartPageService::OnSpeechResult( |
| OnSpeechResult(query, is_final)); |
| } |
| -void StartPageService::OnSpeechSoundLevelChanged(int16 level) { |
| +void StartPageService::OnSpeechSoundLevelChanged(int16_t level) { |
| FOR_EACH_OBSERVER(StartPageObserver, |
| observers_, |
| OnSpeechSoundLevelChanged(level)); |
| @@ -218,6 +246,13 @@ void StartPageService::OnSpeechSoundLevelChanged(int16 level) { |
| void StartPageService::OnSpeechRecognitionStateChanged( |
| SpeechRecognitionState new_state) { |
| + |
| + if (HotwordService::IsExperimentalHotwordingEnabled() && |
| + new_state == SPEECH_RECOGNITION_READY && |
| + speech_recognizer_.get()) { |
| + speech_recognizer_->Stop(); |
| + } |
| + |
| if (!InSpeechRecognition(state_) && InSpeechRecognition(new_state)) { |
| if (!speech_button_toggled_manually_ && |
| state_ == SPEECH_RECOGNITION_HOTWORD_LISTENING) { |
| @@ -237,6 +272,10 @@ void StartPageService::OnSpeechRecognitionStateChanged( |
| OnSpeechRecognitionStateChanged(new_state)); |
| } |
| +content::WebContents* StartPageService::GetSpeechContents() { |
| + return GetSpeechRecognitionContents(); |
| +} |
| + |
| void StartPageService::Shutdown() { |
| UnloadContents(); |
| } |