| // Copyright 2013 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. |
| |
| #ifndef CHROME_BROWSER_SEARCH_HOTWORD_SERVICE_H_ |
| #define CHROME_BROWSER_SEARCH_HOTWORD_SERVICE_H_ |
| |
| #include "base/basictypes.h" |
| #include "base/prefs/pref_change_registrar.h" |
| #include "components/keyed_service/core/keyed_service.h" |
| #include "content/public/browser/notification_observer.h" |
| #include "content/public/browser/notification_registrar.h" |
| |
| class ExtensionService; |
| class Profile; |
| |
| namespace hotword_internal { |
| // Constants for the hotword field trial. |
| extern const char kHotwordFieldTrialName[]; |
| extern const char kHotwordFieldTrialDisabledGroupName[]; |
| } // namespace hotword_internal |
| |
| // Provides an interface for the Hotword component that does voice triggered |
| // search. |
| class HotwordService : public content::NotificationObserver, |
| public KeyedService { |
| public: |
| // Returns true if the hotword supports the current system language. |
| static bool DoesHotwordSupportLanguage(Profile* profile); |
| |
| explicit HotwordService(Profile* profile); |
| virtual ~HotwordService(); |
| |
| // Overridden from content::NotificationObserver: |
| virtual void Observe(int type, |
| const content::NotificationSource& source, |
| const content::NotificationDetails& details) OVERRIDE; |
| |
| bool ShouldShowOptInPopup(); |
| |
| // Used in testing to ensure that the popup is not shown more than this |
| // maximum number of times. |
| int MaxNumberTimesToShowOptInPopup(); |
| |
| // In addition to showing the popup, the preferences |
| // kHotwordOptInPopupTimesShown is also incremented. |
| void ShowOptInPopup(); |
| |
| // Checks for whether all the necessary files have downloaded to allow for |
| // using the extension. |
| virtual bool IsServiceAvailable(); |
| |
| // Determine if hotwording is allowed in this profile based on field trials |
| // and language. |
| virtual bool IsHotwordAllowed(); |
| |
| // Checks if the user has opted into audio logging. Returns true if the user |
| // is opted in, false otherwise.. |
| bool IsOptedIntoAudioLogging(); |
| |
| // Used in the case of an error with the current hotword extension. Tries |
| // to reload the extension or in the case of failure, tries to re-download it. |
| // Returns true upon successful attempt at reload or if the extension has |
| // already loaded successfully by some other means. |
| virtual bool RetryHotwordExtension(); |
| |
| // Control the state of the hotword extension. |
| void EnableHotwordExtension(ExtensionService* extension_service); |
| void DisableHotwordExtension(ExtensionService* extension_service); |
| |
| // Handles enabling/disabling the hotword extension when the user |
| // turns it off via the settings menu. |
| void OnHotwordSearchEnabledChanged(const std::string& pref_name); |
| |
| private: |
| Profile* profile_; |
| |
| PrefChangeRegistrar pref_registrar_; |
| |
| content::NotificationRegistrar registrar_; |
| |
| DISALLOW_COPY_AND_ASSIGN(HotwordService); |
| }; |
| |
| #endif // CHROME_BROWSER_SEARCH_HOTWORD_SERVICE_H_ |