VulpesOS/gaia/tv_apps/remote-control/js/settings_section.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

148 lines
4.2 KiB
JavaScript
Executable file

/* global Section, Settings */
'use strict';
(function(exports) {
function SettingsSection(id) {
Section.call(this, id);
Settings.on('changed', this._onSettingsChanged.bind(this));
}
SettingsSection.prototype = Object.create(Section.prototype);
// Section's Interface
SettingsSection.prototype._readyToShow = function() {
if (Settings['remote-control.enabled']) {
if (Settings['remote-control.pairing-required']) {
this._checkedOption = 'option-pair-on';
} else {
this._checkedOption = 'option-pair-off';
}
} else {
this._checkedOption = 'option-disabled';
}
this.checkRadio(this._checkedOption);
this.setDefaultFocusElement(this._checkedOption);
this.updateClearAuthorizedDevicesButton();
};
// Section's Interface
SettingsSection.prototype._handleMove = function(direction) {
var elem = this.getFocusedElement();
if ((elem.id == 'option-pair-on' && direction == 'down') ||
(elem.id == 'option-disabled' && direction == 'up')) {
return document.getElementById('clear-authorized-devices');
}
};
// Section's Interface
SettingsSection.prototype._handleClick = function() {
if (this._pendingSave) {
return;
}
var elem = this.getFocusedElement();
switch(elem.id) {
case 'option-pair-off':
case 'option-pair-on':
case 'option-disabled':
this.checkRadio(elem.id);
break;
case 'clear-authorized-devices':
navigator.mozL10n.formatValue('clear-authorized-devices-message')
.then((string) => {
if (confirm(string)) {
this.clearAuthorizedDevices();
}
});
break;
case 'save-button':
this.saveSettings();
break;
}
};
SettingsSection.prototype._onSettingsChanged = function(name, value) {
if (name == 'remote-control.authorized-devices') {
this.updateClearAuthorizedDevicesButton();
}
};
SettingsSection.prototype.checkRadio = function(id) {
var radios = document.querySelectorAll('.option-radio');
Array.from(radios).forEach(function(radio) {
if (radio.id == id) {
radio.classList.add('checked');
} else {
radio.classList.remove('checked');
}
});
};
SettingsSection.prototype.updateClearAuthorizedDevicesButton = function() {
var authorizedDevices = Settings['remote-control.authorized-devices'];
var authorizedDevicesCount = 0;
if (authorizedDevices) {
authorizedDevicesCount = Object.keys(authorizedDevices).length;
}
var button = document.getElementById('clear-authorized-devices');
if (authorizedDevicesCount) {
button.classList.remove('disabled');
button.removeAttribute('aria-hidden');
} else {
button.classList.add('disabled');
button.setAttribute('aria-hidden', true);
}
};
SettingsSection.prototype.clearAuthorizedDevices = function() {
Settings.save({
'remote-control.authorized-devices': {}
}).then(() => {
this.updateClearAuthorizedDevicesButton();
this.focus('save-button');
});
};
SettingsSection.prototype.saveSettings = function() {
var checkedOption = document.querySelector('.option-radio.checked').id;
var callback = () => {
this._pendingSave = undefined;
this._checkedOption = undefined;
this.backToParent();
};
this._pendingSave = true;
if (checkedOption == this._checkedOption) {
callback();
return;
}
// Also clear authorized devices when user changes the mode.
var settings = {
'remote-control.authorized-devices': {}
};
switch(checkedOption) {
case 'option-pair-on':
settings['remote-control.enabled'] = true;
settings['remote-control.pairing-required'] = true;
break;
case 'option-pair-off':
settings['remote-control.enabled'] = true;
settings['remote-control.pairing-required'] = false;
break;
case 'option-disabled':
settings['remote-control.enabled'] = false;
settings['remote-control.pairing-required'] = false;
break;
}
Settings.save(settings).then(callback).catch(callback);
};
exports.SettingsSection = SettingsSection;
}(window));