VulpesOS/assets/webapps/uitest.gaiamobile.org/js/HW/fmradio.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

154 lines
3.9 KiB
JavaScript

'use strict';
function FMRadioTest() {
var messageText = document.getElementById('message');
var frequencyMin = document.getElementById('frequency-min');
var frequencyMax = document.getElementById('frequency-max');
var container = document.getElementById('container');
var controlPanel = document.getElementById('controlPanel');
var frequencyInput = document.getElementById('frequency');
var switchBtn = document.getElementById('switch');
var seekUpBtn = document.getElementById('seekUp');
var seekDownBtn = document.getElementById('seekDown');
var seekAndCancelBtn = document.getElementById('seekAndCancel');
if (!navigator.mozFMRadio) {
console.log('mozFMRadio not support');
container.hidden = true;
return;
}
var radio = navigator.mozFMRadio;
var prevFreq = radio.frequencyLowerBound;
var lock = false;
if (radio.enabled) {
prevFreq = radio.frequency;
}
switchBtn.textContent = radio.enabled;
frequencyMin.textContent = radio.frequencyLowerBound;
frequencyMax.textContent = radio.frequencyUpperBound;
controlPanel.hidden = !radio.enabled;
frequencyInput.value = prevFreq;
togglePanel();
toggleControlPanel();
radio.addEventListener('antennaavailablechange', togglePanel);
radio.addEventListener('frequencychange', frequencyChanged);
frequencyInput.addEventListener('change', setFrequency);
switchBtn.addEventListener('click', onclick_radioSwitch);
seekUpBtn.addEventListener('click', seek);
seekDownBtn.addEventListener('click', seek);
seekAndCancelBtn.addEventListener('click', seekAndCancel);
window.addEventListener('unload', uninit);
function logError() {
messageText.textContent = this.error.name;
}
// show/hide panels
function togglePanel() {
if (radio && radio.antennaAvailable) {
container.hidden = false;
messageText.textContent = '';
}
else {
container.hidden = true;
messageText.textContent = 'Headphone is required for FMRadio';
}
}
function toggleControlPanel() {
lock = false;
controlPanel.hidden = !radio.enabled;
if (radio.enabled) {
switchBtn.textContent = 'Stop';
}
else {
switchBtn.textContent = 'Start';
}
switchBtn.disabled = false;
}
function onclick_radioSwitch() {
if (lock) {
return;
}
// lock button until request is finished
lock = true;
switchBtn.disabled = true;
var req;
if (!radio.enabled) {
messageText.textContent = 'turning on FM, please wait...';
req = radio.enable(prevFreq);
}
else {
req = radio.disable();
}
req.onsuccess = req.onerror = function() {
toggleControlPanel();
if (this.error) {
messageText.textContent = this.error.name;
}
else {
messageText.textContent = '';
}
};
}
function frequencyChanged() {
console.log('freq changed');
frequencyInput.value = radio.frequency;
prevFreq = radio.frequency;
}
function setFrequency() {
var req = radio.setFrequency(frequencyInput.value);
req.onerror = logError;
}
function seek(evt) {
var req;
if (evt.target.id == 'seekUp') {
req = radio.seekUp();
}
else {
req = radio.seekDown();
}
req.onerror = logError;
}
function seekAndCancel(evt) {
var req = radio.seekUp();
console.log('seekUP()');
req.onsuccess = function() {
console.log('seekUP().onsuccess');
};
req.onerror = function() {
console.log('seekUP().onerror:' + this.error.name);
};
var cancel = radio.cancelSeek();
console.log('cancel()');
cancel.onsuccess = function() {
console.log('canelSeek().onsuccess');
};
cancel.onerror = function() {
console.log('cancelSeek().onerror:' + this.error.name);
};
}
function uninit() {
if (radio.enabled) {
radio.disable();
}
}
}
window.addEventListener('load', FMRadioTest);