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

Unified Diff: third_party/google_input_tools/src/chrome/os/inputview/elements/content/voiceview.js

Issue 828063007: Uprev Google Input Tools. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update extensions schema. Created 5 years, 11 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
Index: third_party/google_input_tools/src/chrome/os/inputview/elements/content/voiceview.js
diff --git a/third_party/google_input_tools/src/chrome/os/inputview/elements/content/voiceview.js b/third_party/google_input_tools/src/chrome/os/inputview/elements/content/voiceview.js
new file mode 100644
index 0000000000000000000000000000000000000000..14a63a8993428cc2478efecb9497510aec9dfee1
--- /dev/null
+++ b/third_party/google_input_tools/src/chrome/os/inputview/elements/content/voiceview.js
@@ -0,0 +1,254 @@
+// Copyright 2015 The ChromeOS IME Authors. All Rights Reserved.
+// limitations under the License.
+// See the License for the specific language governing permissions and
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// distributed under the License is distributed on an "AS-IS" BASIS,
+// Unless required by applicable law or agreed to in writing, software
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// You may obtain a copy of the License at
+// you may not use this file except in compliance with the License.
+// Licensed under the Apache License, Version 2.0 (the "License");
+//
+goog.provide('i18n.input.chrome.inputview.elements.content.VoiceView');
+
+goog.require('goog.a11y.aria');
+goog.require('goog.a11y.aria.Announcer');
+goog.require('goog.a11y.aria.LivePriority');
+goog.require('goog.a11y.aria.State');
+goog.require('goog.asserts');
+goog.require('goog.async.Delay');
+goog.require('goog.dom.TagName');
+goog.require('goog.dom.classlist');
+goog.require('goog.style');
+goog.require('i18n.input.chrome.inputview.Css');
+goog.require('i18n.input.chrome.inputview.elements.Element');
+goog.require('i18n.input.chrome.inputview.elements.ElementType');
+goog.require('i18n.input.chrome.inputview.elements.content.FunctionalKey');
+goog.require('i18n.input.chrome.message.Name');
+goog.require('i18n.input.chrome.message.Type');
+
+
+goog.scope(function() {
+var Announcer = goog.a11y.aria.Announcer;
+var Css = i18n.input.chrome.inputview.Css;
+var EventType = goog.events.EventType;
+var ElementType = i18n.input.chrome.inputview.elements.ElementType;
+var FunctionalKey = i18n.input.chrome.inputview.elements.content.FunctionalKey;
+var Name = i18n.input.chrome.message.Name;
+var TagName = goog.dom.TagName;
+var Type = i18n.input.chrome.message.Type;
+
+
+
+/**
+ * The voice input view.
+ *
+ * @param {goog.events.EventTarget=} opt_eventTarget The parent event target.
+ * @param {i18n.input.chrome.inputview.Adapter=} opt_adapter .
+ * @constructor
+ * @extends {i18n.input.chrome.inputview.elements.Element}
+ */
+i18n.input.chrome.inputview.elements.content.VoiceView =
+ function(opt_eventTarget, opt_adapter) {
+ VoiceView.base(this, 'constructor', '', ElementType.VOICE_VIEW,
+ opt_eventTarget);
+
+ /**
+ * The bus channel to communicate with background.
+ *
+ * @private {!i18n.input.chrome.inputview.Adapter}
+ */
+ this.adapter_ = goog.asserts.assertObject(opt_adapter);
+
+ /** @private {!goog.async.Delay} */
+ this.animator_ = new goog.async.Delay(this.animateMicrophoneLevel_, 0, this);
+
+ /** @private {!Announcer} */
+ this.announcer_ = new Announcer();
+};
+var VoiceView = i18n.input.chrome.inputview.elements.content.VoiceView;
+goog.inherits(VoiceView, i18n.input.chrome.inputview.elements.Element);
+
+
+/** @private {number} */
+VoiceView.WIDTH_ = 150;
+
+
+/** @private {boolean} */
+VoiceView.prototype.isPrivacyAllowed_ = false;
+
+
+/** @private {Element} */
+VoiceView.prototype.maskElem_ = null;
+
+
+/** @private {Element} */
+VoiceView.prototype.voiceMicElem_ = null;
+
+
+/** @private {Element} */
+VoiceView.prototype.levelElement_ = null;
+
+
+/** @private {Element} */
+VoiceView.prototype.voicePanel_ = null;
+
+
+/**
+ * The div to show privacy information message.
+ *
+ * @type {!Element}
+ * @private
+ */
+VoiceView.prototype.privacyDiv_;
+
+
+/**
+ * The confirm button of privacy information.
+ *
+ * @private {!FunctionalKey}
+ */
+VoiceView.prototype.confirmBtn_;
+
+
+/** @override */
+VoiceView.prototype.createDom = function() {
+ goog.base(this, 'createDom');
+ var dom = this.getDomHelper();
+ var elem = this.getElement();
+ goog.dom.classlist.add(elem, Css.VOICE_VIEW);
+ this.voicePanel_ = dom.createDom(TagName.DIV, Css.VOICE_PANEL);
+ this.voiceMicElem_ = dom.createDom(goog.dom.TagName.DIV,
+ Css.VOICE_OPACITY + ' ' + Css.VOICE_MIC_ING);
+ this.levelElement_ = dom.createDom(
+ goog.dom.TagName.DIV, Css.VOICE_LEVEL);
+ dom.append(/** @type {!Node} */ (this.voicePanel_),
+ this.voiceMicElem_, this.levelElement_);
+ goog.a11y.aria.setState(this.voiceMicElem_, goog.a11y.aria.State.LABEL,
+ chrome.i18n.getMessage('VOICE_TURN_OFF'));
+
+ this.maskElem_ = dom.createDom(TagName.DIV,
+ [Css.VOICE_MASK, Css.VOICE_OPACITY_NONE]);
+ dom.append(/** @type {!Node} */ (elem), this.maskElem_, this.voicePanel_);
+
+ this.privacyDiv_ = dom.createDom(goog.dom.TagName.DIV,
+ Css.VOICE_PRIVACY_INFO);
+
+ var textDiv = dom.createDom(goog.dom.TagName.DIV, Css.VOICE_PRIVACY_TEXT);
+ dom.setTextContent(textDiv,
+ chrome.i18n.getMessage('VOICE_PRIVACY_INFO'));
+ dom.appendChild(this.privacyDiv_, textDiv);
+ this.confirmBtn_ = new FunctionalKey('', ElementType.VOICE_PRIVACY_GOT_IT,
+ chrome.i18n.getMessage('GOT_IT'), '');
+ this.confirmBtn_.render(this.privacyDiv_);
+ dom.appendChild(elem, this.privacyDiv_);
+
+ // Shows or hides the privacy information.
+ this.isPrivacyAllowed_ = !!localStorage.getItem(Name.VOICE_PRIVACY_INFO);
+ if (this.isPrivacyAllowed_) {
+ goog.dom.classlist.add(this.privacyDiv_,
+ Css.HANDWRITING_PRIVACY_INFO_HIDDEN);
+ goog.dom.classlist.remove(this.maskElem_, Css.VOICE_OPACITY_NONE);
+ }
+};
+
+
+/** @override */
+VoiceView.prototype.enterDocument = function() {
+ goog.base(this, 'enterDocument');
+ this.getHandler().listen(this.adapter_, Type.VOICE_PRIVACY_GOT_IT,
+ this.onConfirmPrivacyInfo_);
+
+
+};
+
+
+/**
+ * Start recognition.
+ */
+VoiceView.prototype.start = function() {
+ if (this.isPrivacyAllowed_) {
+ this.adapter_.sendVoiceViewStateChange(true);
+ this.animator_.start();
+ this.announcer_.say(chrome.i18n.getMessage('VOICE_TURN_ON'),
+ goog.a11y.aria.LivePriority.ASSERTIVE);
+ }
+ this.setVisible(true);
+};
+
+
+/**
+ * Stop recognition.
+ */
+VoiceView.prototype.stop = function() {
+ this.animator_.stop();
+ this.announcer_.say(chrome.i18n.getMessage('VOICE_TURN_OFF'),
+ goog.a11y.aria.LivePriority.ASSERTIVE);
+ this.setVisible(false);
+};
+
+
+/** @override */
+VoiceView.prototype.setVisible = function(visible) {
+ if (visible) {
+ goog.style.setElementShown(this.voicePanel_, true);
+ goog.dom.classlist.add(this.maskElem_, Css.VOICE_MASK_OPACITY);
+ goog.style.setElementShown(this.privacyDiv_, true);
+ } else {
+ goog.dom.classlist.remove(this.maskElem_, Css.VOICE_MASK_OPACITY);
+ goog.style.setElementShown(this.voicePanel_, false);
+ goog.style.setElementShown(this.privacyDiv_, false);
+ }
+};
+
+
+/** @override */
+VoiceView.prototype.resize = function(width, height) {
+ VoiceView.base(this, 'resize', width, height);
+ this.voicePanel_.style.left = (width - VoiceView.WIDTH_) + 'px';
+
+ var size = goog.style.getSize(this.privacyDiv_);
+ this.privacyDiv_.style.top =
+ Math.round((height - size.height) / 2) + 'px';
+ this.privacyDiv_.style.left =
+ Math.round((width - size.width) / 2) + 'px';
+ this.confirmBtn_.resize(100, 60);
+};
+
+
+/**
+ * The voice recognition animation.
+ *
+ * @private
+ */
+VoiceView.prototype.animateMicrophoneLevel_ = function() {
+ var scale = 1 + 1.5 * Math.random();
+ var timeStep = Math.round(110 + Math.random() * 10);
+ var transitionInterval = timeStep / 1000;
+
+ this.levelElement_.style.transition = 'transform' + ' ' +
+ transitionInterval + 's ease-in-out';
+ this.levelElement_.style.transform = 'scale(' + scale + ')';
+ this.animator_.start(timeStep);
+};
+
+
+/**
+ * Handler on user confirming the privacy information.
+ *
+ * @private
+ */
+VoiceView.prototype.onConfirmPrivacyInfo_ = function() {
+ // Stores the handwriting privacy permission value.
+ localStorage.setItem(Name.VOICE_PRIVACY_INFO, 'true');
+ this.isPrivacyAllowed_ = true;
+ this.adapter_.sendVoiceViewStateChange(true);
+ this.animator_.start();
+ this.announcer_.say(chrome.i18n.getMessage('VOICE_TURN_ON'),
+ goog.a11y.aria.LivePriority.ASSERTIVE);
+ goog.dom.classlist.add(this.privacyDiv_, Css.HANDWRITING_PRIVACY_INFO_HIDDEN);
+ goog.dom.classlist.remove(this.maskElem_, Css.VOICE_OPACITY_NONE);
+};
+}); // goog.scope

Powered by Google App Engine
This is Rietveld 408576698