blob: 635456a06650e4a47640fa85cbcd4ad929572492 [file] [log] [blame]
// Copyright 2014 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.
(function() {
// Correspond to steps in the hotword opt-in flow.
/** @const */ var HOTWORD_AUDIO_HISTORY = 'hotword-audio-history-container';
/** @const */ var HOTWORD_ONLY_START = 'hotword-only-container';
/** @const */ var AUDIO_HISTORY_START = 'audio-history-container';
/** @const */ var SPEECH_TRAINING = 'speech-training-container';
/** @const */ var FINISHED = 'finished-container';
/**
* These flows correspond to the three LaunchModes as defined in
* chrome/browser/search/hotword_service.h and should be kept in sync
* with them.
* @const
*/
var FLOWS = [
// TODO(kcarattini): Remove the first flow, since we will not be
// managing the Audio History Setting in Chrome anymore.
[AUDIO_HISTORY_START],
[HOTWORD_ONLY_START, FINISHED],
[HOTWORD_AUDIO_HISTORY, SPEECH_TRAINING, FINISHED],
[SPEECH_TRAINING, FINISHED]
];
/**
* Class to control the page flow of the always-on hotword and
* Audio History opt-in process.
* @constructor
*/
function Flow() {
this.currentStepIndex_ = -1;
this.currentFlow_ = [];
}
/**
* Advances the current step.
*/
Flow.prototype.advanceStep = function() {
this.currentStepIndex_++;
if (this.currentStepIndex_ < this.currentFlow_.length)
this.showStep_.apply(this);
};
/**
* Gets the appropriate flow and displays its first page.
*/
Flow.prototype.startFlow = function() {
if (chrome.hotwordPrivate && chrome.hotwordPrivate.getLaunchState)
chrome.hotwordPrivate.getLaunchState(this.startFlowForMode_.bind(this));
};
// ---- private methods:
/**
* Gets and starts the appropriate flow for the launch mode.
* @private
*/
Flow.prototype.startFlowForMode_ = function(state) {
assert(state.launchMode >= 0 && state.launchMode < FLOWS.length,
'Invalid Launch Mode.');
this.currentFlow_ = FLOWS[state.launchMode];
this.advanceStep();
};
/**
* Displays the current step. If the current step is not the first step,
* also hides the previous step.
* @private
*/
Flow.prototype.showStep_ = function() {
var currentStep = this.currentFlow_[this.currentStepIndex_];
var previousStep = null;
if (this.currentStepIndex_ > 0)
previousStep = this.currentFlow_[this.currentStepIndex_ - 1];
if (previousStep)
document.getElementById(previousStep).hidden = true;
document.getElementById(currentStep).hidden = false;
};
window.Flow = Flow;
})();