Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
10 lines
No EOL
10 KiB
JavaScript
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;});});}}});};}); |