| Index: chrome/browser/search/hotword_audio_history_handler.cc
|
| diff --git a/chrome/browser/search/hotword_audio_history_handler.cc b/chrome/browser/search/hotword_audio_history_handler.cc
|
| index b72d7d7fdd98903577b97e0d7aa4029fb0d8e7cb..70dfd6570b5d5c5b87cc8613934817cd8e749dae 100644
|
| --- a/chrome/browser/search/hotword_audio_history_handler.cc
|
| +++ b/chrome/browser/search/hotword_audio_history_handler.cc
|
| @@ -14,9 +14,14 @@
|
| using extensions::BrowserContextKeyedAPIFactory;
|
| using extensions::HotwordPrivateEventService;
|
|
|
| +// Max number of hours between audio history checks.
|
| +static const int kHoursUntilNextAudioHistoryCheck = 24;
|
| +
|
| HotwordAudioHistoryHandler::HotwordAudioHistoryHandler(
|
| - content::BrowserContext* context)
|
| - : profile_(Profile::FromBrowserContext(context)),
|
| + content::BrowserContext* context,
|
| + const scoped_refptr<base::SingleThreadTaskRunner>& task_runner)
|
| + : task_runner_(task_runner),
|
| + profile_(Profile::FromBrowserContext(context)),
|
| weak_ptr_factory_(this) {
|
| }
|
|
|
| @@ -27,6 +32,26 @@ history::WebHistoryService* HotwordAudioHistoryHandler::GetWebHistory() {
|
| return WebHistoryServiceFactory::GetForProfile(profile_);
|
| }
|
|
|
| +void HotwordAudioHistoryHandler::UpdateAudioHistoryState() {
|
| + GetAudioHistoryEnabled(
|
| + base::Bind(&HotwordAudioHistoryHandler::UpdateLocalPreference,
|
| + weak_ptr_factory_.GetWeakPtr()));
|
| + // Set the function to update in a day.
|
| + task_runner_->PostDelayedTask(
|
| + FROM_HERE,
|
| + base::Bind(&HotwordAudioHistoryHandler::UpdateAudioHistoryState,
|
| + weak_ptr_factory_.GetWeakPtr()),
|
| + base::TimeDelta::FromHours(kHoursUntilNextAudioHistoryCheck));
|
| +}
|
| +
|
| +void HotwordAudioHistoryHandler::UpdateLocalPreference(
|
| + bool success, bool new_enabled_value) {
|
| + if (success) {
|
| + PrefService* prefs = profile_->GetPrefs();
|
| + prefs->SetBoolean(prefs::kHotwordAudioLoggingEnabled, new_enabled_value);
|
| + }
|
| +}
|
| +
|
| void HotwordAudioHistoryHandler::GetAudioHistoryEnabled(
|
| const HotwordAudioHistoryCallback& callback) {
|
| history::WebHistoryService* web_history = GetWebHistory();
|
| @@ -36,12 +61,10 @@ void HotwordAudioHistoryHandler::GetAudioHistoryEnabled(
|
| weak_ptr_factory_.GetWeakPtr(),
|
| callback));
|
| } else {
|
| - // If web_history is null, the user is not signed in so the opt-in
|
| - // should be seen as false. Run the callback with false for success
|
| - // and false for the enabled value.
|
| + // If web_history is null, the user is not signed in. Set the opt-in value
|
| + // to the last known value and run the callback with false for success.
|
| PrefService* prefs = profile_->GetPrefs();
|
| - prefs->SetBoolean(prefs::kHotwordAudioLoggingEnabled, false);
|
| - callback.Run(false, false);
|
| + callback.Run(false, prefs->GetBoolean(prefs::kHotwordAudioLoggingEnabled));
|
| }
|
| }
|
|
|
| @@ -58,31 +81,33 @@ void HotwordAudioHistoryHandler::SetAudioHistoryEnabled(
|
| callback));
|
| } else {
|
| // If web_history is null, run the callback with false for success
|
| - // and false for the enabled value.
|
| - callback.Run(false, false);
|
| + // and return the last known value for the opt-in pref.
|
| + PrefService* prefs = profile_->GetPrefs();
|
| + callback.Run(false, prefs->GetBoolean(prefs::kHotwordAudioLoggingEnabled));
|
| }
|
| }
|
|
|
| void HotwordAudioHistoryHandler::GetAudioHistoryComplete(
|
| const HotwordAudioHistoryCallback& callback,
|
| bool success, bool new_enabled_value) {
|
| + // Initialize value to the last known value of the audio history pref.
|
| PrefService* prefs = profile_->GetPrefs();
|
| - // Set preference to false if the call was not successful to err on the safe
|
| - // side.
|
| - bool new_value = success && new_enabled_value;
|
| - prefs->SetBoolean(prefs::kHotwordAudioLoggingEnabled, new_value);
|
| -
|
| - callback.Run(success, new_value);
|
| + bool value = prefs->GetBoolean(prefs::kHotwordAudioLoggingEnabled);
|
| + // If the call was successful, use the new value for updates.
|
| + if (success) {
|
| + value = new_enabled_value;
|
| + prefs->SetBoolean(prefs::kHotwordAudioLoggingEnabled, value);
|
| + // If the setting is now turned off, always on should also be turned off.
|
| + if (!value)
|
| + prefs->SetBoolean(prefs::kHotwordAlwaysOnSearchEnabled, false);
|
| + }
|
| + callback.Run(success, value);
|
| }
|
|
|
| void HotwordAudioHistoryHandler::SetAudioHistoryComplete(
|
| bool new_enabled_value,
|
| const HotwordAudioHistoryCallback& callback,
|
| bool success, bool callback_enabled_value) {
|
| - if (success) {
|
| - PrefService* prefs = profile_->GetPrefs();
|
| - prefs->SetBoolean(prefs::kHotwordAudioLoggingEnabled, new_enabled_value);
|
| - }
|
| -
|
| + UpdateLocalPreference(success, new_enabled_value);
|
| callback.Run(success, new_enabled_value);
|
| }
|
|
|