Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(388)

Unified Diff: chrome/browser/resources/hotword/state_manager.js

Issue 557193002: Start and stop the hotword detector when the user opens/closes the launcher. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/resources/hotword/manager.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/hotword/state_manager.js
diff --git a/chrome/browser/resources/hotword/state_manager.js b/chrome/browser/resources/hotword/state_manager.js
index 4b2ae1316614d86cdb14e0b62cfc9bb18e0a2586..2727cbcd8af7cf76ee799f1d8790d071e2cc9d3a 100644
--- a/chrome/browser/resources/hotword/state_manager.js
+++ b/chrome/browser/resources/hotword/state_manager.js
@@ -31,6 +31,18 @@ cr.define('hotword', function() {
*/
this.pluginManager_ = null;
+ /**
+ * Source of the current hotword session.
+ * @private {?hotword.constants.SessionSource}
+ */
+ this.sessionSource_ = null;
+
+ /**
+ * Callback to run when the hotword detector has successfully started.
+ * @private {!function()}
+ */
+ this.sessionStartedCb_ = null;
+
// Get the initial status.
chrome.hotwordPrivate.getStatus(this.handleStatus_.bind(this));
}
@@ -72,11 +84,26 @@ cr.define('hotword', function() {
* @private
*/
updateStateFromStatus_: function() {
+ if (!this.hotwordStatus_)
+ return;
+
if (this.hotwordStatus_.enabled) {
- // Hotwording is enabled.
- // TODO(amistry): Have a separate alwaysOnEnabled flag. For now, treat
- // "enabled" as "always on enabled".
- this.startDetector_();
+ // Start the detector if there's a session, and shut it down if there
+ // isn't.
+ // TODO(amistry): Support stacking sessions. This can happen when the
+ // user opens google.com or the NTP, then opens the launcher. Opening
+ // google.com will create one session, and opening the launcher will
+ // create the second. Closing the launcher should re-activate the
+ // google.com session.
+ // NOTE(amistry): With always-on, we want a different behaviour with
+ // sessions since the detector should always be running. The exception
+ // being when the user triggers by saying 'Ok Google'. In that case, the
+ // detector stops, so starting/stopping the launcher session should
+ // restart the detector.
+ if (this.sessionSource_)
+ this.startDetector_();
+ else
+ this.shutdownDetector_();
} else {
// Not enabled. Shut down if running.
this.shutdownDetector_();
@@ -126,9 +153,25 @@ cr.define('hotword', function() {
}.bind(this));
} else if (this.state_ != State_.STARTING) {
// Don't try to start a starting detector.
+ this.startRecognizer_();
+ }
+ },
+
+ /**
+ * Start the recognizer plugin. Assumes the plugin has been loaded and is
+ * ready to start.
+ * @private
+ */
+ startRecognizer_: function() {
+ assert(this.pluginManager_);
+ if (this.state_ != State_.RUNNING) {
this.state_ = State_.RUNNING;
this.pluginManager_.startRecognizer();
}
+ if (this.sessionStartedCb_) {
+ this.sessionStartedCb_();
+ this.sessionStartedCb_ = null;
+ }
},
/**
@@ -163,8 +206,7 @@ cr.define('hotword', function() {
this.shutdownPluginManager_();
return;
}
- this.state_ = State_.RUNNING;
- this.pluginManager_.startRecognizer();
+ this.startRecognizer_();
},
/**
@@ -186,6 +228,35 @@ cr.define('hotword', function() {
this.state_ = State_.STOPPED;
chrome.hotwordPrivate.notifyHotwordRecognition('search', function() {});
+
+ // Implicitly clear the session. A session needs to be started in order to
+ // restart the detector.
+ this.sessionSource_ = null;
+ this.sessionStartedCb_ = null;
+ },
+
+ /**
+ * Start a hotwording session.
+ * @param {!hotword.constants.SessionSource} source Source of the hotword
+ * session request.
+ * @param {!function()} startedCb Callback invoked when the session has
+ * been started successfully.
+ */
+ startSession: function(source, startedCb) {
+ this.sessionSource_ = source;
+ this.sessionStartedCb_ = startedCb;
+ this.updateStateFromStatus_();
+ },
+
+ /**
+ * Stops a hotwording session.
+ * @param {!hotword.constants.SessionSource} source Source of the hotword
+ * session request.
+ */
+ stopSession: function(source) {
+ this.sessionSource_ = null;
+ this.sessionStartedCb_ = null;
+ this.updateStateFromStatus_();
}
};
« no previous file with comments | « chrome/browser/resources/hotword/manager.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698