Release Vulpes OS 2.7-preview.22
This commit is contained in:
parent
200d1fb235
commit
a138f97877
294 changed files with 515786 additions and 187 deletions
|
|
@ -396,7 +396,7 @@ function onUssdReceived(evt){var lock=null;var safetyId;function releaseWakeLock
|
|||
if(document.hidden){lock=navigator.requestWakeLock('high-priority');safetyId=setTimeout(releaseWakeLock,30000);document.addEventListener('visibilitychange',releaseWakeLock);}
|
||||
if(!document.hidden||evt.session){MmiManager.handleMMIReceived(evt.message,evt.session,evt.serviceId);}else if(evt.message){MmiManager.sendNotification(evt.message,evt.serviceId).then(releaseWakeLock);}else{releaseWakeLock();}}
|
||||
function init(){LazyLoader.load(['/shared/js/mobile_operator.js','/dialer/js/mmi.js','/dialer/js/mmi_ui.js','/shared/style/progress_activity.css','/dialer/style/mmi.css'],function(){if(window.navigator.mozSetMessageHandler){window.navigator.mozSetMessageHandler('telephony-call-ended',callEnded);window.navigator.mozSetMessageHandler('activity',handleActivity);window.navigator.mozSetMessageHandler('notification',handleNotification);window.navigator.mozSetMessageHandler('bluetooth-dialer-command',btCommandHandler);window.navigator.mozSetMessageHandler('ussd-received',onUssdReceived);}});LazyLoader.load('/shared/js/settings_listener.js',function(){SettingsListener.observe('engineering-mode.key',null,function(value){engineeringModeKey=value||null;});});}
|
||||
return{init:init,call:call};})();window.onresize=function(e){if(window.innerHeight<440){NavbarManager.hide();}else{NavbarManager.show();}};;'use strict';var CallLog={_initialized:false,_headersInterval:null,_empty:true,_contactCache:false,init:function cl_init(){if(this._initialized){this.becameVisible();return;}
|
||||
return{init:init,call:call};})();window.onresize=function(e){if(window.innerHeight<440&&document.documentElement.dataset.vulpesLayout!=='compact'){NavbarManager.hide();}else{NavbarManager.show();}};;'use strict';var CallLog={_initialized:false,_headersInterval:null,_empty:true,_contactCache:false,init:function cl_init(){if(this._initialized){this.becameVisible();return;}
|
||||
window.performance.mark('callLogStart');this._initialized=true;var lazyFiles=['/shared/style/confirm.css','/shared/style/switches.css','/shared/style/lists.css','/shared/js/confirm.js','/shared/js/dialer/utils.js','/shared/js/sticky_header.js','/shared/js/sim_settings_helper.js','/shared/js/date_time_helper.js'];var self=this;var validContactsCachePromise=this._validateContactsCache();LazyLoader.load(lazyFiles,function resourcesLoaded(){var mainNodes=['all-filter','call-log-container','call-log-edit-mode','call-log-filter','call-log-icon-edit','call-log-view','deselect-all-threads','delete-button','edit-mode-header','header-edit-mode-text','missed-filter','select-all-threads','edit-mode'];mainNodes.forEach(function(id){this[Utils.toCamelCase(id)]=document.getElementById(id);},self);var dualSim=!!navigator.mozIccManager&&navigator.mozIccManager.iccIds.length>1;self.callLogContainer.classList.toggle('dual-sim',dualSim);validContactsCachePromise.then(function(){self.render();window.addEventListener('timeformatchange',self._updateCallTimes.bind(self));self.callLogIconEdit.addEventListener('click',self.showEditMode.bind(self));self.editModeHeader.addEventListener('action',self.hideEditMode.bind(self));self.missedFilter.addEventListener('click',self.filter.bind(self));self.allFilter.addEventListener('click',self.unfilter.bind(self));self.callLogContainer.addEventListener('click',self);self.callLogContainer.addEventListener('contextmenu',self);self.selectAllThreads.addEventListener('click',self.selectAll.bind(self));self.deselectAllThreads.addEventListener('click',self.deselectAll.bind(self));self.deleteButton.addEventListener('click',self.deleteLogGroups.bind(self));document.addEventListener('visibilitychange',function(){if(document.hidden){self.pauseHeaders();}else{self.updateHeadersContinuously();if(Navigation.currentView==='recents'){self.becameVisible();}}});self.sticky=new StickyHeader(self.callLogContainer,document.getElementById('sticky'));self.becameVisible();});});},_validateContactsCache:function cl_validateContactsCache(){var self=this;return new Promise(function(resolve,reject){window.asyncStorage.getItem('contactCacheRevision',function onItem(cacheRevision){Contacts.getRevision(function(contactsRevision){if(cacheRevision>contactsRevision){window.asyncStorage.setItem('contactCacheRevision',contactsRevision);self._contactCache=true;resolve();return;}
|
||||
self._contactCache=(cacheRevision>=contactsRevision);if(self._contactCache){resolve();return;}
|
||||
CallLogDBManager.invalidateContactsCache(function(error){if(!error){self._contactCache=true;resolve();}});});});});},_updateCallTimes:function cl_updateCallTimes(){var logItemElts=this.callLogContainer.querySelectorAll('.log-item');for(var i=0;i<logItemElts.length;i++){var logItemElt=logItemElts[i];var timestamp=logItemElt.getAttribute('data-timestamp');var formattedTime=Utils.prettyDate(parseInt(timestamp,10));var callTimeElt=logItemElt.querySelector('.call-time');callTimeElt.textContent=formattedTime;}},becameVisible:function cl_becameVisible(){this.updateHeaders();this.cleanNotifications();},updateHeaders:function cl_updateHeaders(){var headers=this.callLogContainer.getElementsByTagName('header');for(var i=0,l=headers.length;i<l;i++){var current=headers[i];Utils.setHeaderDate(current,parseInt(current.dataset.timestamp));}},updateHeadersContinuously:function cl_updateHeaders(){var updater=this.updateHeaders.bind(this);this._headersInterval=setInterval(updater,60000);},pauseHeaders:function cl_pauseHeaders(){clearInterval(this._headersInterval);},render:function cl_render(){var self=this;var daysToRender=[];var chunk=[];var prevDate;var screenRendered=false;var MAX_GROUPS_FOR_FIRST_RENDER=8;var MAX_GROUPS_TO_BATCH_RENDER=100;var batchGroupCounter=0;CallLogDBManager.getGroupList(function logGroupsRetrieved(cursor){if(!cursor.value){if(chunk.length===0){self.renderEmptyCallLog();self.disableEditModeButton();}else{daysToRender.push(chunk);self.renderSeveralDays(daysToRender);if(!screenRendered){window.performance.mark('firstChunkReady');}
|
||||
|
|
|
|||
|
|
@ -859,7 +859,7 @@ icon.icon.then((blob)=>{var retryIndex=this.iconsToRetry.indexOf(id);if(retryInd
|
|||
this.metadata.set([{id:id,icon:blob}]).then(()=>{},(e)=>{console.error('Error saving icon',e);});});}.bind(this,icon,id));icon.size=this.iconSize?this.iconSize:icon.size;if(entry!==-1){icon.icon=this.startupMetadata[entry].icon;this.startupMetadata.splice(entry,1);icon.updateName();if(window.VulpesCompat&&icon.app)icon.refresh();}else{icon.refresh();}
|
||||
icon.addEventListener('activated',e=>{e.preventDefault();this.handleEvent({type:'activate',detail:{target:e.target.parentNode},preventDefault:()=>{}});});},refreshIcon:function(icon){icon.size=this.iconSize?this.iconSize:icon.size;if(icon.bookmark){IconsHelper.setElementIcon(icon,this.iconSize).then(()=>{},e=>{console.error('Error refreshing bookmark icon',e);if(!icon.isUserSet){icon.refresh();}});}else{icon.refresh();}},storeAppOrder:function(){var storedOrders=[];var children=this.icons.children;for(var i=0,iLen=children.length;i<iLen;i++){var appIcon=children[i].firstElementChild;var id=this.getIconId(appIcon.app?appIcon.app:appIcon.bookmark,appIcon.entryPoint);storedOrders.push({id:id,order:i});}
|
||||
this.metadata.set(storedOrders).then(()=>{},(e)=>{console.error('Error storing app order',e);});},iconAdded:function(container){if(container.style.display==='none'){return;}
|
||||
this.refreshGridSize();},refreshGridSize:function(){var children=this.icons.children;var cols=this.settings.small?4:3;var visibleChildren=0;var firstVisibleChild=-1;for(var i=0,iLen=children.length;i<iLen;i++){if(children[i].style.display!=='none'){visibleChildren++;if(firstVisibleChild===-1){firstVisibleChild=i;this.iconsLeft=this.icons.getChildOffsetRect(children[i]).left;}else if(visibleChildren===cols){this.iconsRight=this.icons.getChildOffsetRect(children[i]).right;}}}
|
||||
this.refreshGridSize();},refreshGridSize:function(){var children=this.icons.children;var cols=document.documentElement.dataset.vulpesLayout==='compact'?3:(this.settings.small?4:3);var visibleChildren=0;var firstVisibleChild=-1;for(var i=0,iLen=children.length;i<iLen;i++){if(children[i].style.display!=='none'){visibleChildren++;if(firstVisibleChild===-1){firstVisibleChild=i;this.iconsLeft=this.icons.getChildOffsetRect(children[i]).left;}else if(visibleChildren===cols){this.iconsRight=this.icons.getChildOffsetRect(children[i]).right;}}}
|
||||
if(visibleChildren<1){this.pendingGridHeight=this.gridHeight=0;this.pageHeight=this.scrollable.clientHeight;}else{var iconHeight=Math.round(children[firstVisibleChild].offsetHeight);var scrollHeight=this.scrollable.clientHeight;var rowsPerPage=Math.floor(scrollHeight/iconHeight);var pageHeight=rowsPerPage*iconHeight;var gridHeight;if(this.settings.scrollSnapping){gridHeight=(Math.ceil((iconHeight*Math.ceil(visibleChildren/cols))/pageHeight)*pageHeight)+(scrollHeight-pageHeight);}else{gridHeight=(Math.ceil(visibleChildren/cols)+1)*iconHeight;}
|
||||
this.pageHeight=pageHeight;this.pendingGridHeight=gridHeight;this.iconsPerPage=rowsPerPage*cols;if(!this.visualLoadComplete&&Math.floor(visibleChildren/cols)*iconHeight>=scrollHeight){this.onVisualLoad();}}
|
||||
this.scrollable.style.scrollSnapPointsY=`repeat(${this.pageHeight}px)`;this.icons.style.backgroundSize='100% '+(this.pageHeight*2)+'px';if(this.resizeTimeout!==null){clearTimeout(this.resizeTimeout);}
|
||||
|
|
|
|||
|
|
@ -52,3 +52,18 @@ gaia-app-icon {
|
|||
visibility: hidden;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/* Compact layouts can widen labels independently of the image. */
|
||||
#subtitle {
|
||||
width: var(--vulpes-label-width, auto);
|
||||
margin-inline-start: var(--vulpes-label-offset, 0px);
|
||||
}
|
||||
#image-container > img {
|
||||
display: var(--vulpes-icon-display, inline);
|
||||
}
|
||||
|
||||
#title-container {
|
||||
/* Visually hide compact labels without removing their accessible names. */
|
||||
position: var(--vulpes-icon-title-position, static);
|
||||
clip-path: var(--vulpes-icon-title-clip, none);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,351 @@
|
|||
/**
|
||||
* WifiUtils is a utils-box that keeps wifi-operations needed utils.
|
||||
*
|
||||
* @module WifiUtils
|
||||
*/
|
||||
define(function(require) {
|
||||
'use strict';
|
||||
|
||||
define(['require','shared/wifi_helper'],function(require){'use strict';var WifiHelper=require('shared/wifi_helper');var wifiManager=WifiHelper.getWifiManager();var WifiUtils={newExplanationItem:function(message){var li=document.createElement('li');li.className='explanation';li.setAttribute('data-l10n-id',message);return li;},newListItem:function(options){var network=options.network;var showNotInRange=options.showNotInRange||false;var onClick=options.onClick||function(){};var icon=document.createElement('aside');icon.classList.add('pack-end');icon.classList.add('wifi-icon');var level=Math.min(Math.floor(network.relSignalStrength/20),4);icon.classList.add('level-'+level);var ssid=document.createElement('span');ssid.dir='auto';ssid.textContent=network.ssid;var small=document.createElement('small');var keys=WifiHelper.getSecurity(network);var networkNotInRange=(network.known&&level===0);var hasSecurity=(keys&&keys.length);if(hasSecurity){if(showNotInRange&&networkNotInRange){small.setAttribute('data-l10n-id','notInRange');}else{document.l10n.setAttributes(small,'securedBy',{capabilities:keys.join(', ')});}
|
||||
icon.classList.add('secured');}else{if(showNotInRange&&networkNotInRange){small.setAttribute('data-l10n-id','notInRange');}else{small.setAttribute('data-l10n-id','securityOpen');}}
|
||||
var a=document.createElement('a');a.appendChild(ssid);a.appendChild(small);var li=document.createElement('li');li.dataset.ssid=network.ssid;li.appendChild(icon);li.appendChild(a);icon.classList.add('wifi-signal');var networkStatus=WifiHelper.getNetworkStatus(network);var kActiveStatuses=['associated','connecting','connected'];if(-1!==kActiveStatuses.indexOf(networkStatus)){li.classList.add('active');if('connected'===networkStatus){icon.classList.add('connected');}else{icon.classList.add('connecting');}
|
||||
small.setAttribute('data-l10n-id','short-status-'+networkStatus);}
|
||||
li.onclick=function(){onClick(network);};return li;},changeDisplay:function(panel,security){var eap=panel.querySelector('li.eap select');var identity=panel.querySelector('input[name=identity]');var password=panel.querySelector('input[name=password]');var authPhase2=panel.querySelector('li.auth-phase2 select');var certificate=panel.querySelector('li.server-certificate select');var description=panel.querySelector('li.server-certificate-description');if(security==='WEP'||security==='WPA-PSK'){identity.parentNode.style.display='none';password.parentNode.style.display='block';authPhase2.parentNode.parentNode.style.display='none';certificate.parentNode.parentNode.style.display='none';description.style.display='none';}else if(security==='WPA-EAP'){if(eap){switch(eap.value){case'SIM':identity.parentNode.style.display='none';password.parentNode.style.display='none';authPhase2.parentNode.parentNode.style.display='none';certificate.parentNode.parentNode.style.display='none';description.style.display='none';break;case'PEAP':case'TLS':case'TTLS':identity.parentNode.style.display='block';password.parentNode.style.display='block';authPhase2.parentNode.parentNode.style.display='block';certificate.parentNode.parentNode.style.display='block';description.style.display='block';break;default:break;}}}else{identity.parentNode.style.display='none';password.parentNode.style.display='none';}},initializeAuthFields:function(panel,network){var ssid=panel.querySelector('input[name=ssid]');var identity=panel.querySelector('input[name=identity]');var password=panel.querySelector('input[name=password]');var showPassword=panel.querySelector('gaia-checkbox[name=show-pwd]');var eap=panel.querySelector('li.eap select');var certificate=panel.querySelector('li.server-certificate select');var submitButton=panel.querySelector('button[type=submit]');this.loadImportedCertificateOptions(certificate);identity.value=network.identity||'';password.type='password';password.value=network.password||'';showPassword.checked=false;showPassword.onchange=function(){password.type=this.checked?'text':'password';};var checkPassword=function(){var key=WifiHelper.getKeyManagement(network);var isDisabled=!WifiHelper.isValidInput(key,password.value,identity.value,eap.value);if(ssid){isDisabled=isDisabled||!WifiHelper.isSSIDValid(ssid.value);}
|
||||
submitButton.disabled=isDisabled;};eap.onchange=function(){var key=WifiHelper.getKeyManagement(network);checkPassword();WifiUtils.changeDisplay(panel,key);};if(ssid){ssid.oninput=checkPassword;}
|
||||
password.oninput=checkPassword;identity.oninput=checkPassword;checkPassword();},loadImportedCertificateOptions:function(select){if(!wifiManager.getImportedCerts){return;}
|
||||
var certRequest=wifiManager.getImportedCerts();certRequest.onsuccess=function(){var i;var certList=certRequest.result;var certificateList=certList.ServerCert;var originLengthOfOptions=select.options.length;for(i=0;i<originLengthOfOptions-1;i++){select.remove(1);}
|
||||
for(i=0;i<certificateList.length;i++){var option=document.createElement('option');option.text=certificateList[i];option.value=certificateList[i];select.add(option,null);}};certRequest.onerror=function(){console.warn('getImportedCerts failed');};},updateNetworkSignal:function(network,networkSignal){var li=document.querySelector('li[data-ssid="'+network.ssid+'"]');var icon=li.querySelector('aside');icon.className=icon.className.replace(/level-\w*/,'');var level=Math.min(Math.floor(networkSignal/20),4);icon.classList.add('level-'+level);},getNetworkKey:function(network){if(!network){return'';}else{var key=network.ssid+'+'+WifiHelper.getSecurity(network).join('+');return key;}},updateListItemStatus:function(options){options=options||{};var listItems=options.listItems;var activeItemDOM=options.activeItemDOM;var network=options.network;var networkStatus=options.networkStatus;if(!network||!networkStatus||!listItems){console.log('Please check passing options for updateListItemStatus');return;}
|
||||
var key=this.getNetworkKey(network);var listItemDOM=listItems[key];if(activeItemDOM&&activeItemDOM!=listItemDOM){activeItemDOM.classList.remove('active');activeItemDOM.querySelector('small').setAttribute('data-l10n-id','short-status-disconnected');activeItemDOM.querySelector('aside').classList.remove('connecting');activeItemDOM.querySelector('aside').classList.remove('connected');}
|
||||
if(listItemDOM){listItemDOM.classList.add('active');listItemDOM.querySelector('small').setAttribute('data-l10n-id','short-status-'+networkStatus);if(networkStatus==='connecting'||networkStatus==='associated'){listItemDOM.querySelector('aside').classList.remove('connected');listItemDOM.querySelector('aside').classList.add('connecting');}else if(networkStatus==='connected'){listItemDOM.querySelector('aside').classList.remove('connecting');listItemDOM.querySelector('aside').classList.add('connected');}}}};return WifiUtils;});
|
||||
var WifiHelper = require('shared/wifi_helper');
|
||||
var wifiManager = WifiHelper.getWifiManager();
|
||||
|
||||
var WifiUtils = {
|
||||
/**
|
||||
* Create an explanatory list item
|
||||
*
|
||||
* @memberOf WifiUtils
|
||||
* @param {String} message
|
||||
* @returns {HTMLLIElement}
|
||||
*/
|
||||
newExplanationItem: function(message) {
|
||||
var li = document.createElement('li');
|
||||
li.className = 'explanation';
|
||||
li.setAttribute('data-l10n-id', message);
|
||||
return li;
|
||||
},
|
||||
|
||||
/**
|
||||
* Create a network list item
|
||||
*
|
||||
* @memberOf WifiUtils
|
||||
* @param {Object} options
|
||||
* @returns {HTMLLIElement}
|
||||
*/
|
||||
newListItem: function(options) {
|
||||
/**
|
||||
* A Wi-Fi list item has the following HTML structure:
|
||||
* <li>
|
||||
* <aside class="pack-end wifi-icon level-[?] [secured]"></aside>
|
||||
* <a>
|
||||
* <span> Network SSID </span>
|
||||
* <small> Network Security </small>
|
||||
* </a>
|
||||
* </li>
|
||||
*/
|
||||
var network = options.network;
|
||||
var showNotInRange = options.showNotInRange || false;
|
||||
var onClick = options.onClick || function() {};
|
||||
|
||||
// icon
|
||||
var icon = document.createElement('aside');
|
||||
icon.classList.add('pack-end');
|
||||
icon.classList.add('wifi-icon');
|
||||
var level = Math.min(Math.floor(network.relSignalStrength / 20), 4);
|
||||
icon.classList.add('level-' + level);
|
||||
|
||||
// ssid
|
||||
var ssid = document.createElement('span');
|
||||
ssid.dir = 'auto';
|
||||
ssid.textContent = network.ssid;
|
||||
|
||||
// supported authentication methods
|
||||
var small = document.createElement('small');
|
||||
var keys = WifiHelper.getSecurity(network);
|
||||
var networkNotInRange = (network.known && level === 0);
|
||||
var hasSecurity = (keys && keys.length);
|
||||
|
||||
if (hasSecurity) {
|
||||
if (showNotInRange && networkNotInRange) {
|
||||
small.setAttribute('data-l10n-id', 'notInRange');
|
||||
} else {
|
||||
document.l10n.setAttributes(small, 'securedBy',
|
||||
{ capabilities: keys.join(', ') });
|
||||
}
|
||||
icon.classList.add('secured');
|
||||
} else {
|
||||
if (showNotInRange && networkNotInRange) {
|
||||
small.setAttribute('data-l10n-id', 'notInRange');
|
||||
} else {
|
||||
small.setAttribute('data-l10n-id', 'securityOpen');
|
||||
}
|
||||
}
|
||||
|
||||
var a = document.createElement('a');
|
||||
a.appendChild(ssid);
|
||||
a.appendChild(small);
|
||||
|
||||
// create list item
|
||||
var li = document.createElement('li');
|
||||
li.dataset.ssid = network.ssid;
|
||||
li.appendChild(icon);
|
||||
li.appendChild(a);
|
||||
|
||||
// Show connection status
|
||||
icon.classList.add('wifi-signal');
|
||||
|
||||
var networkStatus = WifiHelper.getNetworkStatus(network);
|
||||
var kActiveStatuses = ['associated', 'connecting', 'connected'];
|
||||
|
||||
if (-1 !== kActiveStatuses.indexOf(networkStatus)) {
|
||||
li.classList.add('active');
|
||||
|
||||
if ('connected' === networkStatus) {
|
||||
icon.classList.add('connected');
|
||||
} else {
|
||||
icon.classList.add('connecting');
|
||||
}
|
||||
|
||||
small.setAttribute('data-l10n-id', 'short-status-' + networkStatus);
|
||||
}
|
||||
|
||||
// bind connection callback
|
||||
li.onclick = function() {
|
||||
onClick(network);
|
||||
};
|
||||
return li;
|
||||
},
|
||||
|
||||
/**
|
||||
* Change dialog layout based on dialogId and security
|
||||
*
|
||||
* @memberOf WifiUtils
|
||||
* @param {HTMLElement} panel
|
||||
* @param {String} security
|
||||
*/
|
||||
changeDisplay: function(panel, security) {
|
||||
var eap = panel.querySelector('li.eap select');
|
||||
var identity = panel.querySelector('input[name=identity]');
|
||||
var password = panel.querySelector('input[name=password]');
|
||||
var authPhase2 = panel.querySelector('li.auth-phase2 select');
|
||||
var certificate = panel.querySelector('li.server-certificate select');
|
||||
var description =
|
||||
panel.querySelector('li.server-certificate-description');
|
||||
|
||||
if (security === 'WEP' || security === 'WPA-PSK') {
|
||||
identity.parentNode.style.display = 'none';
|
||||
password.parentNode.style.display = 'block';
|
||||
authPhase2.parentNode.parentNode.style.display = 'none';
|
||||
certificate.parentNode.parentNode.style.display = 'none';
|
||||
description.style.display = 'none';
|
||||
} else if (security === 'WPA-EAP') {
|
||||
if (eap) {
|
||||
switch (eap.value) {
|
||||
case 'SIM':
|
||||
identity.parentNode.style.display = 'none';
|
||||
password.parentNode.style.display = 'none';
|
||||
authPhase2.parentNode.parentNode.style.display = 'none';
|
||||
certificate.parentNode.parentNode.style.display = 'none';
|
||||
description.style.display = 'none';
|
||||
break;
|
||||
case 'PEAP':
|
||||
case 'TLS':
|
||||
case 'TTLS':
|
||||
identity.parentNode.style.display = 'block';
|
||||
password.parentNode.style.display = 'block';
|
||||
authPhase2.parentNode.parentNode.style.display = 'block';
|
||||
certificate.parentNode.parentNode.style.display = 'block';
|
||||
description.style.display = 'block';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
identity.parentNode.style.display = 'none';
|
||||
password.parentNode.style.display = 'none';
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* This is used to help us do some initialization works if the panel
|
||||
* is auth related.
|
||||
*
|
||||
* @memberOf WifiUtils
|
||||
* @param {String} panel
|
||||
* @param {Object} network
|
||||
*/
|
||||
initializeAuthFields: function(panel, network) {
|
||||
var ssid = panel.querySelector('input[name=ssid]');
|
||||
var identity = panel.querySelector('input[name=identity]');
|
||||
var password = panel.querySelector('input[name=password]');
|
||||
var showPassword = panel.querySelector('gaia-checkbox[name=show-pwd]');
|
||||
var eap = panel.querySelector('li.eap select');
|
||||
var certificate = panel.querySelector('li.server-certificate select');
|
||||
var submitButton = panel.querySelector('button[type=submit]');
|
||||
|
||||
// load needed certificates first
|
||||
this.loadImportedCertificateOptions(certificate);
|
||||
|
||||
identity.value = network.identity || '';
|
||||
|
||||
password.type = 'password';
|
||||
password.value = network.password || '';
|
||||
|
||||
showPassword.checked = false;
|
||||
showPassword.onchange = function() {
|
||||
password.type = this.checked ? 'text' : 'password';
|
||||
};
|
||||
|
||||
var checkPassword = function() {
|
||||
var key = WifiHelper.getKeyManagement(network);
|
||||
var isDisabled = !WifiHelper.isValidInput(
|
||||
key, password.value, identity.value, eap.value);
|
||||
if (ssid) {
|
||||
isDisabled = isDisabled || !WifiHelper.isSSIDValid(ssid.value);
|
||||
}
|
||||
submitButton.disabled = isDisabled;
|
||||
};
|
||||
|
||||
eap.onchange = function() {
|
||||
var key = WifiHelper.getKeyManagement(network);
|
||||
checkPassword();
|
||||
WifiUtils.changeDisplay(panel, key);
|
||||
};
|
||||
|
||||
if (ssid) {
|
||||
ssid.oninput = checkPassword;
|
||||
}
|
||||
|
||||
password.oninput = checkPassword;
|
||||
identity.oninput = checkPassword;
|
||||
checkPassword();
|
||||
},
|
||||
|
||||
/**
|
||||
* This is an inner function that used to inject certificates options
|
||||
* into select element.
|
||||
*
|
||||
* @memberOf WifiUtils
|
||||
* @param {HTMLSelectElement} select
|
||||
*/
|
||||
loadImportedCertificateOptions: function(select) {
|
||||
if (!wifiManager.getImportedCerts) {
|
||||
return;
|
||||
}
|
||||
|
||||
var certRequest = wifiManager.getImportedCerts();
|
||||
|
||||
certRequest.onsuccess = function() {
|
||||
var i;
|
||||
var certList = certRequest.result;
|
||||
// save the imported server certificates
|
||||
var certificateList = certList.ServerCert;
|
||||
|
||||
// reset the option to be <option value="none">--</option> only
|
||||
var originLengthOfOptions = select.options.length;
|
||||
for (i = 0; i < originLengthOfOptions - 1; i++) {
|
||||
select.remove(1);
|
||||
}
|
||||
|
||||
for (i = 0; i < certificateList.length; i++) {
|
||||
var option = document.createElement('option');
|
||||
option.text = certificateList[i];
|
||||
option.value = certificateList[i];
|
||||
select.add(option, null);
|
||||
}
|
||||
};
|
||||
|
||||
certRequest.onerror = function() {
|
||||
console.warn('getImportedCerts failed');
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* Updates the icon of the given network
|
||||
*
|
||||
* @memberOf WifiUtils
|
||||
* @param {Object} network
|
||||
* @param {Integer} networkSignal
|
||||
*/
|
||||
updateNetworkSignal: function(network, networkSignal) {
|
||||
if (!network) { return; }
|
||||
var items = document.querySelectorAll('li[data-ssid]');
|
||||
var li = Array.prototype.find.call(items, function(item) {
|
||||
return item.dataset.ssid === network.ssid;
|
||||
});
|
||||
// Signal updates can arrive before the scan has populated the list.
|
||||
var icon = li && li.querySelector('aside');
|
||||
if (!icon) { return; }
|
||||
// Clean previous state
|
||||
icon.className = icon.className.replace(/level-\w*/, '');
|
||||
var level = Math.min(Math.floor(networkSignal / 20), 4);
|
||||
icon.classList.add('level-' + level);
|
||||
},
|
||||
|
||||
/**
|
||||
* Get concated networkKey which can be used as identifier
|
||||
*
|
||||
* @memberOf WifiUtils
|
||||
* @param {Object} network
|
||||
* @return {String} concated network identifier
|
||||
*/
|
||||
getNetworkKey: function(network) {
|
||||
if (!network) {
|
||||
return '';
|
||||
} else {
|
||||
var key =
|
||||
network.ssid + '+' + WifiHelper.getSecurity(network).join('+');
|
||||
return key;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Reflect incoming network status on related listItem (show different UI)
|
||||
*
|
||||
* @memberOf WifiUtils
|
||||
* @param {Object} options
|
||||
* @param {Object} options.listItems - listItems with DOM elements
|
||||
* @param {Object} options.activeItemDOM - DOM element for active item
|
||||
* @param {Object} options.network - network object
|
||||
* @param {Object} options.networkStatus - current status for network
|
||||
*/
|
||||
updateListItemStatus: function(options) {
|
||||
options = options || {};
|
||||
var listItems = options.listItems;
|
||||
var activeItemDOM = options.activeItemDOM;
|
||||
var network = options.network;
|
||||
var networkStatus = options.networkStatus;
|
||||
|
||||
if (!network || !networkStatus || !listItems) {
|
||||
console.log('Please check passing options for updateListItemStatus');
|
||||
return;
|
||||
}
|
||||
|
||||
var key = this.getNetworkKey(network);
|
||||
var listItemDOM = listItems[key];
|
||||
|
||||
if (activeItemDOM && activeItemDOM != listItemDOM) {
|
||||
activeItemDOM.classList.remove('active');
|
||||
activeItemDOM.querySelector('small').
|
||||
setAttribute('data-l10n-id', 'short-status-disconnected');
|
||||
activeItemDOM.querySelector('aside').classList.remove('connecting');
|
||||
activeItemDOM.querySelector('aside').classList.remove('connected');
|
||||
}
|
||||
|
||||
if (listItemDOM) {
|
||||
listItemDOM.classList.add('active');
|
||||
listItemDOM.querySelector('small').
|
||||
setAttribute('data-l10n-id', 'short-status-' + networkStatus);
|
||||
if (networkStatus === 'connecting' || networkStatus === 'associated') {
|
||||
listItemDOM.querySelector('aside').classList.remove('connected');
|
||||
listItemDOM.querySelector('aside').classList.add('connecting');
|
||||
} else if (networkStatus === 'connected') {
|
||||
listItemDOM.querySelector('aside').classList.remove('connecting');
|
||||
listItemDOM.querySelector('aside').classList.add('connected');
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return WifiUtils;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1191,6 +1191,18 @@
|
|||
ModalDialog.selectOne(title, options, selected);
|
||||
};
|
||||
|
||||
AppChrome.prototype.onShare = function ac_onShare() {
|
||||
this.hideOverflowMenu();
|
||||
var url = this._currentURL;
|
||||
if (!url || !/^https?:\/\//i.test(url)) {
|
||||
return;
|
||||
}
|
||||
return new MozActivity({
|
||||
name: 'share',
|
||||
data: { type: 'url', url: url }
|
||||
});
|
||||
};
|
||||
|
||||
AppChrome.prototype.showWindows = function ac_showWindows() {
|
||||
window.dispatchEvent(
|
||||
new CustomEvent('taskmanagershow',
|
||||
|
|
|
|||
Loading…
Reference in a new issue