VulpesOS/assets/webapps/settings.gaiamobile.org/js/panels/sound/panel.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

10 lines
No EOL
10 KiB
JavaScript

define('panels/sound/slider_handler',['require','shared/settings_listener','modules/settings_cache'],function(require){'use strict';var SettingsListener=require('shared/settings_listener');var SettingsCache=require('modules/settings_cache');var INTERVAL=500;var DELAY=800;var BASESHAREURL='/shared/resources/media/';var TONEURLS={'content':BASESHAREURL+'notifications/notifier_firefox.opus','notification':BASESHAREURL+'ringtones/ringer_firefox.opus','alarm':BASESHAREURL+'alarms/ac_awake.opus'};var TONEKEYS={'content':'media.ringtone','notification':'dialer.ringtone','alarm':'alarm.ringtone'};var SliderHandler=function(){this._element=null;this._channelType='';this._channelKey='';this._toneURL='';this._toneKey='';this._previous=null;this._isTouching=false;this._isFirstInput=false;this._intervalID=null;this._timeoutID=null;this._player=new Audio();};SliderHandler.prototype={init:function sh_init(element,channelType){this._element=element;this._channelType=channelType;this._channelKey='audio.volume.'+channelType;this._toneURL=TONEURLS[channelType];this._toneKey=TONEKEYS[channelType];this._boundSetSliderValue=function(value){this._setSliderValue(value);}.bind(this);SettingsListener.observe(this._channelKey,'',this._boundSetSliderValue);this._element.addEventListener('touchstart',this._touchStartHandler.bind(this));this._element.addEventListener('input',this._inputHandler.bind(this));this._element.addEventListener('touchend',this._touchEndHandler.bind(this));},_stopTone:function vm_stopTone(){this._player.pause();this._player.removeAttribute('src');this._player.load();},_setupTone:function vm_setupTone(blob){if(this._channelType!=='content'){this._player.mozAudioChannelType=this._channelType;}
this._player.src=URL.createObjectURL(blob);this._player.load();this._player.loop=true;},_setSliderValue:function vm_setSliderValue(value){this._element.value=value;if(this._element.style.opacity!==1){this._element.style.opacity=1;}
if(this._previous===null){this._previous=value;}},_getDefaultTone:function vm_getDefaultTone(callback){var xhr=new XMLHttpRequest();xhr.open('GET',this._toneURL);xhr.overrideMimeType('audio/ogg');xhr.responseType='blob';xhr.send();xhr.onload=function(){callback(xhr.response);};},_getToneBlob:function vm_getToneBlob(callback){SettingsCache.getSettings(function(results){if(results[this._toneKey]){callback(results[this._toneKey]);}else{this._getDefaultTone(function(blob){var settingObject={};settingObject[this._toneKey]=blob;navigator.mozSettings.createLock().set(settingObject);callback(blob);});}}.bind(this));},_touchStartHandler:function sh_touchStartHandler(event){this._isTouching=true;this._isFirstInput=true;this._stopTone();SettingsListener.unobserve(this._channelKey,this._boundSetSliderValue);this._getToneBlob(function(blob){this._setupTone(blob);}.bind(this));},_setVolume:function sh_setVolume(){var value=parseInt(this._element.value);var settingObject={};settingObject[this._channelKey]=value;if(value!==this._previous){navigator.mozSettings.createLock().set(settingObject);this._player.play();this._previous=value;}},_inputHandler:function sh_inputHandler(event){if(this._isFirstInput){this._isFirstInput=false;this._setVolume();this._intervalID=setInterval(this._setVolume.bind(this),INTERVAL);}
clearTimeout(this._timeoutID);this._timeoutID=setTimeout(function(){if(!this._isTouching){SettingsListener.observe(this._channelKey,'',this._boundSetSliderValue);this._stopTone();}}.bind(this),DELAY);},_touchEndHandler:function sh_touchEndHandler(event){this._isTouching=false;clearInterval(this._intervalID);this._setVolume();}};return function ctor_sliderHandler(){return new SliderHandler();};});define('panels/sound/volume_manager',['require','panels/sound/slider_handler'],function(require){'use strict';var SliderHandler=require('panels/sound/slider_handler');var VolumeManager=function(){this._elements=null;};VolumeManager.prototype={init:function vm_init(elements){this._elements=elements;var contentHandler=SliderHandler();contentHandler.init(this._elements.media,'content');var notification=SliderHandler();notification.init(this._elements.notification,'notification');var alarm=SliderHandler();alarm.init(this._elements.alarm,'alarm');}};return function ctor_volumeManager(){return new VolumeManager();};});define('panels/sound/tone_manager',['require','shared/settings_listener','modules/settings_cache','shared/omadrm/fl'],function(require){'use strict';var SettingsListener=require('shared/settings_listener');var SettingsCache=require('modules/settings_cache');var ForwardLock=require('shared/omadrm/fl');var ToneManager=function(){this._elements=null;this._tones=null;};ToneManager.prototype={init:function tm_init(elements){this._elements=elements;this._configureTones();this._handleTones();this._elements.manageTones.addEventListener('click',this._manageTonesClickHandler);},_configureTones:function tm_configureTones(){this._tones=[{pickType:'alerttone',settingsKey:'notification.ringtone',allowNone:true,button:this._elements.alertToneSelection,desc:this._elements.alertToneSelectionDesc}];if(navigator.mozTelephony){this._tones.push({pickType:'ringtone',settingsKey:'dialer.ringtone',allowNone:false,button:this._elements.ringToneSelection,desc:this._elements.ringToneSelectionDesc});this._elements.ringer.hidden=false;}},_renderToneName:function tm_renderToneName(tone,tonename){var l10nID=tonename&&tonename.l10nID;if(l10nID){tone.desc.setAttribute('data-l10n-id',l10nID);}else{tone.desc.removeAttribute('data-l10n-id');tone.desc.textContent=tonename;}},_renderTone:function tm_renderTone(tone,result,secret){var oldRingtoneName=null;var l10nId=tone.desc.getAttribute('data-l10n-id');if(!l10nId){oldRingtoneName=tone.desc.textContent;}
tone.desc.setAttribute('data-l10n-id','saving-tone');var getBlob;if(result.blob.type.split('/')[1]===ForwardLock.mimeSubtype){getBlob=new Promise((resolve,reject)=>{ForwardLock.unlockBlob(secret,result.blob,(unlocked)=>{resolve(unlocked);});});}else{getBlob=Promise.resolve(result.blob);}
var getIsPlayable=getBlob.then((blob)=>{return this._isPlayableTone(blob);});return Promise.all([getBlob,getIsPlayable]).then(([blob,isPlayable])=>{if(isPlayable){this._setRingtone(tone.settingsKey,result.l10nID,result.name,blob,result.id);}else{if(l10nId){tone.desc.setAttribute('data-l10n-id',l10nId);}else{tone.desc.removeAttribute('data-l10n-id');tone.desc.textContent=oldRingtoneName;}
document.l10n.formatValue('unplayable-ringtone').then(msg=>alert(msg));}});},_pickTone:function tm_pickRingTone(tone,currentToneID,secret){var self=this;var activity=new MozActivity({name:'pick',data:{type:tone.pickType,allowNone:tone.allowNone,currentToneID:currentToneID,includeLocked:(secret!==null)}});activity.onsuccess=function(){var result=activity.result;if(!result.blob){if(tone.allowNone){self._setRingtone(tone.settingsKey,result.l10nID,result.name,result.blob,result.id);}else{document.l10n.formatValue('unplayable-ringtone').then(msg=>alert(msg));}
return;}
self._renderTone(tone,result,secret);};},_handleTones:function tm_handleTones(){this._tones.forEach(function(tone){var nameKey=tone.settingsKey+'.name';var idKey=tone.settingsKey+'.id';SettingsListener.observe(nameKey,'',this._renderToneName.bind(this,tone));var self=this;tone.button.addEventListener('click',function(){SettingsCache.getSettings(function(results){var currentToneID=results[idKey];ForwardLock.getKey(function(secret){self._pickTone(tone,currentToneID,secret);});});});}.bind(this));},_setRingtone:function tm_setRingtone(settingsKey,l10nID,toneName,blob,id){var blobKey=settingsKey;var nameKey=settingsKey+'.name';var idKey=settingsKey+'.id';var values={};var name=l10nID?{l10nID:l10nID}:toneName;values[blobKey]=blob;values[nameKey]=name||'';values[idKey]=id;navigator.mozSettings.createLock().set(values);},_isPlayableTone:function tm_isPlayableTone(blob){return new Promise(function(resolve,reject){var player=new Audio();player.preload='metadata';player.src=URL.createObjectURL(blob);player.oncanplay=function(){release();resolve(true);};player.onerror=function(){release();resolve(false);};function release(){URL.revokeObjectURL(player.src);player.removeAttribute('src');player.load();}});},_manageTonesClickHandler:function tm_manageTonesClickHandler(){var activity=new MozActivity({name:'configure',data:{target:'ringtone'}});activity.onerror=function(){console.log(this.error);if(this.error.name==='NO_PROVIDER'){document.l10n.formatValue('no-ringtone-app').then(msg=>alert(msg));}};}};return function ctor_toneManager(){return new ToneManager();};});define('panels/sound/panel',['require','modules/settings_panel','panels/sound/volume_manager','panels/sound/tone_manager','shared/lazy_loader','modules/mobile/supported_network_info'],function(require){'use strict';var SettingsPanel=require('modules/settings_panel');var VolumeManager=require('panels/sound/volume_manager');var ToneManager=require('panels/sound/tone_manager');var LazyLoader=require('shared/lazy_loader');var NetworkInfo=require('modules/mobile/supported_network_info');return function ctor_sound_panel(){var volumeManager=VolumeManager();var toneManager=ToneManager();return SettingsPanel({onInit:function(panel){var _elements={vibrationSetting:panel.querySelector('.vibration-setting'),toneSelector:panel.querySelector('.touch-tone-selector')};this._customize(_elements);var vmElements={media:panel.querySelector('.volume.media input'),notification:panel.querySelector('.volume.notification input'),alarm:panel.querySelector('.volume.alarm input')};volumeManager.init(vmElements);var tmElements={alertToneSelection:panel.querySelector('.alert-tone-selection'),alertToneSelectionDesc:panel.querySelector('.alert-tone-selection .desc'),ringToneSelection:panel.querySelector('.ring-tone-selection'),ringToneSelectionDesc:panel.querySelector('.ring-tone-selection .desc'),ringer:panel.querySelector('.ringer'),manageTones:panel.querySelector('.manage-tones-button')};toneManager.init(tmElements);},_customize:function(elements){LazyLoader.getJSON('/resources/device-features.json').then(function(data){elements.vibrationSetting.hidden=!data.vibration;});if(window.navigator.mozMobileConnections){var mobileConnections=window.navigator.mozMobileConnections;var toneSelector=elements.toneSelector;Array.prototype.forEach.call(mobileConnections,function(mobileConnection){NetworkInfo.getSupportedNetworkInfo(mobileConnection,function(result){toneSelector.hidden=toneSelector.hidden&&!result.cdma;});});}}});};});