blob: 0d2183c970466678700f506f1af19fb32f677b3a [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.
/** @fileoverview Sends braille content to a content script if the braille
* captions feature is enabled.
*/
goog.provide('cvox.BrailleCaptionsBackground');
goog.require('cvox.BrailleDisplayState');
goog.require('cvox.ExtensionBridge');
/**
* Key set in local storage when this feature is enabled.
* @const
*/
cvox.BrailleCaptionsBackground.PREF_KEY = 'brailleCaptions';
/**
* Unicode block of braille pattern characters. A braille pattern is formed
* from this value with the low order 8 bits set to the bits representing
* the dots as per the ISO 11548-1 standard.
* @const
*/
cvox.BrailleCaptionsBackground.BRAILLE_UNICODE_BLOCK_START = 0x2800;
/**
* Called once to initialize the class.
* @param {function()} stateCallback Called when the state of the captions
* feature changes.
*/
cvox.BrailleCaptionsBackground.init = function(stateCallback) {
var self = cvox.BrailleCaptionsBackground;
/**
* @type {function()}
* @private
*/
self.stateCallback_ = stateCallback;
};
/**
* Returns whether the braille captions feature is enabled.
* @return {boolean}
*/
cvox.BrailleCaptionsBackground.isEnabled = function() {
var self = cvox.BrailleCaptionsBackground;
return localStorage[self.PREF_KEY] === String(true);
};
/**
* @param {string} text Text of the shown braille.
* @param {ArrayBuffer} cells Braille cells shown on the display.
*/
cvox.BrailleCaptionsBackground.setContent = function(text, cells) {
var self = cvox.BrailleCaptionsBackground;
// Convert the cells to Unicode braille pattern characters.
var byteBuf = new Uint8Array(cells);
var brailleChars = '';
for (var i = 0; i < byteBuf.length; ++i) {
brailleChars += String.fromCharCode(
self.BRAILLE_UNICODE_BLOCK_START | byteBuf[i]);
}
cvox.ExtensionBridge.send({
message: 'BRAILLE_CAPTION',
text: text,
brailleChars: brailleChars
});
};
/**
* Sets whether the overlay should be active.
* @param {boolean} newValue The new value of the active flag.
*/
cvox.BrailleCaptionsBackground.setActive = function(newValue) {
var self = cvox.BrailleCaptionsBackground;
var oldValue = self.isEnabled();
window['prefs'].setPref(self.PREF_KEY, String(newValue));
if (oldValue != newValue) {
if (self.stateCallback_) {
self.stateCallback_();
}
var msg = newValue ?
cvox.ChromeVox.msgs.getMsg('braille_captions_enabled') :
cvox.ChromeVox.msgs.getMsg('braille_captions_disabled');
cvox.ChromeVox.tts.speak(msg, cvox.QueueMode.QUEUE);
cvox.ChromeVox.braille.write(cvox.NavBraille.fromText(msg));
}
};
/**
* Returns a display state representing the state of the captions feature.
* This is used when no actual hardware display is connected.
* @return {cvox.BrailleDisplayState}
*/
cvox.BrailleCaptionsBackground.getVirtualDisplayState = function() {
var self = cvox.BrailleCaptionsBackground;
if (self.isEnabled()) {
return {available: true, textCellCount: 40}; // 40, why not?
} else {
return {available: false};
}
};