Chromium Code Reviews| Index: ui/webui/resources/cr_elements/network/cr_network_icon.js |
| diff --git a/ui/webui/resources/cr_elements/network/cr_network_icon.js b/ui/webui/resources/cr_elements/network/cr_network_icon.js |
| index 4bccaf7dd08e9fd4da44e921a9c86acc0b0aadb3..fac12e0e5f4c339e6b6e5ab8eede9da7be9ff919 100644 |
| --- a/ui/webui/resources/cr_elements/network/cr_network_icon.js |
| +++ b/ui/webui/resources/cr_elements/network/cr_network_icon.js |
| @@ -7,292 +7,143 @@ |
| * state properties. |
| */ |
| -/** |
| - * @typedef {{ |
| - * showBadges: boolean, |
| - * showDisconnected: boolean, |
| - * strength: number |
| - * }} |
| - */ |
| -var NetworkIconParamType; |
| - |
| -(function() { |
| - /** @const {string} */ var RESOURCE_IMAGE_BASE = |
| - 'chrome://resources/cr_elements/network/'; |
| - |
| - /** @const {string} */ var RESOURCE_IMAGE_EXT = '.png'; |
| - |
| - /** |
| - * Gets the icon type from the network type. This allows multiple types |
| - * (i.e. Cellular, WiMAX) to map to the same icon type (i.e. mobile). |
| - * @param {chrome.networkingPrivate.NetworkType} networkType |
| - * @return {string} The icon type: ethernet, wifi, mobile, or vpn. |
| - */ |
| - function getIconTypeFromNetworkType(networkType) { |
| - if (!networkType || networkType == CrOnc.Type.ETHERNET) |
| - return 'ethernet'; |
| - else if (networkType == CrOnc.Type.WI_FI) |
| - return 'wifi'; |
| - else if (networkType == CrOnc.Type.CELLULAR) |
| - return 'mobile'; |
| - else if (networkType == CrOnc.Type.WI_MAX) |
| - return 'mobile'; |
| - else if (networkType == CrOnc.Type.VPN) |
| - return 'vpn'; |
| - |
| - console.error('Unrecognized network type for icon: ' + networkType); |
| - return 'ethernet'; |
| - } |
| - |
| - /** |
| - * Polymer class definition for 'cr-network-icon'. |
| - */ |
| - Polymer({ |
| - is: 'cr-network-icon', |
| - |
| - properties: { |
| - /** |
| - * If set, the ONC properties will be used to display the icon. This may |
| - * either be the complete set of NetworkProperties or the subset of |
| - * NetworkStateProperties. |
| - * @type |
| - * {!CrOnc.NetworkProperties|!CrOnc.NetworkStateProperties|undefined} |
| - */ |
| - networkState: { |
| - type: Object, |
| - observer: 'networkStateChanged_', |
| - }, |
| - |
| - /** |
| - * If set, the ONC network type will be used to display the icon. |
| - * @type {?chrome.networkingPrivate.NetworkType} |
| - */ |
| - networkType: { |
| - type: String, |
| - value: null, |
| - observer: 'networkTypeChanged_', |
| - }, |
| - |
| - /** |
| - * If true, the icon is part of a list of networks and may be displayed |
| - * differently, e.g. the disconnected image will never be shown for |
| - * list items. |
| - */ |
| - isListItem: { |
| - type: Boolean, |
| - value: false, |
| - observer: 'isListItemChanged_', |
| - }, |
| - |
| - /** The icon type to use for the base image of the icon. */ |
| - iconType_: { |
| - type: String, |
| - value: 'ethernet', |
| - }, |
| - |
| - /** Set to true to show a badge for roaming networks. */ |
| - roaming_: { |
| - type: Boolean, |
| - value: false, |
| - }, |
| - |
| - /** Set to true to show a badge for secure networks. */ |
| - secure_: { |
| - type: Boolean, |
| - value: false, |
| - }, |
| - |
| - /** Set to the name of a technology to show show a badge. */ |
| - technology_: { |
| - type: String, |
| - value: '', |
| - }, |
| - }, |
| - |
| - /** |
| - * Polymer networkState changed method. Updates the icon based on the |
| - * network state. |
| - * @private |
| - */ |
| - networkStateChanged_: function() { |
| - if (!this.networkState) |
| - return; |
| - |
| - this.networkType = null; |
| - this.iconType_ = getIconTypeFromNetworkType(this.networkState.Type); |
| - var strength = CrOnc.getSignalStrength(this.networkState); |
| - var params = /** @type {NetworkIconParamType} */ { |
| - showBadges: true, |
| - showDisconnected: !this.isListItem, |
| - strength: strength |
| - }; |
| - this.setIcon_(params); |
| - }, |
| +Polymer({ |
| + is: 'cr-network-icon', |
| + properties: { |
| /** |
| - * Polymer networkType changed method. Updates the icon based on the type |
| - * of network, showing a disconnected icon where appropriate and no badges. |
| - * @private |
| + * If set, the ONC properties will be used to display the icon. This may |
| + * either be the complete set of NetworkProperties or the subset of |
| + * NetworkStateProperties. |
| + * @type {!CrOnc.NetworkProperties|!CrOnc.NetworkStateProperties|undefined} |
| */ |
| - networkTypeChanged_: function() { |
| - if (!this.networkType) |
| - return; |
| - |
| - this.networkState = undefined; |
| - this.iconType_ = getIconTypeFromNetworkType(this.networkType); |
| - var params = /** @type {NetworkIconParamType} */ { |
| - showBadges: false, |
| - showDisconnected: true, |
| - strength: 0, |
| - }; |
| - this.setIcon_(params); |
| - }, |
| + networkState: Object, |
| /** |
| - * Polymer isListItem changed method. |
| - * @private |
| + * If true, the icon is part of a list of networks and may be displayed |
| + * differently, e.g. the disconnected image will never be shown for |
| + * list items. |
| */ |
| - isListItemChanged_: function() { |
| - if (this.networkState) |
| - this.networkStateChanged_(); |
| - else if (this.networkType) |
| - this.networkTypeChanged_(); |
| + isListItem: { |
| + type: Boolean, |
| + value: false, |
| }, |
| + }, |
| - /** |
| - * Returns the url for an image based on identifier |id|. |
| - * @param {string} id The identifier describing the image. |
| - * @return {string} The url to use for the image 'src' property. |
| + /** |
| + * @return {string} The name of the svg icon image to show. |
| * @private |
| */ |
| - toImageSrc_: function(id) { |
| - return id ? RESOURCE_IMAGE_BASE + id + RESOURCE_IMAGE_EXT : ''; |
| - }, |
| + getIcon_: function() { |
| + let showDisconnected = |
| + !this.isListItem && (!this.networkState.ConnectionState || |
| + this.networkState.ConnectionState == |
| + CrOnc.ConnectionState.NOT_CONNECTED); |
| + |
| + switch (this.networkState.Type) { |
| + case CrOnc.Type.ETHERNET: { |
| + return 'network:settings-ethernet'; |
| + } |
| + case CrOnc.Type.VPN: { |
| + return 'network:vpn-key'; |
| + } |
| + case CrOnc.Type.CELLULAR: { |
| + let strength = |
| + showDisconnected ? 0 : CrOnc.getSignalStrength(this.networkState); |
| + let index = this.strengthToIndex_(strength); |
| + return 'network:signal-cellular-' + index.toString(10) + '-bar'; |
| + } |
| + case CrOnc.Type.WI_FI: |
| + case CrOnc.Type.WI_MAX: { |
| + if (showDisconnected) |
| + return 'network:signal-wifi-off'; |
| + let strength = CrOnc.getSignalStrength(this.networkState); |
| + let index = this.strengthToIndex_(strength); |
| + return 'network:signal-wifi-' + index.toString(10) + '-bar'; |
| + } |
| + default: |
| + assertNotReached(); |
| + } |
| + return ''; |
| + }, |
| - /** |
| - * Returns the url for a badge image based on identifier |id|. |
| - * @param {string} id The identifier describing the badge. |
| - * @return {string} The url to use for the badge image 'src' property. |
| + /** |
| + * @param {number} strength The signal strength from [0 - 100]. |
| + * @return {number} An index from 0-4 corresponding to |strength|. |
| * @private |
| */ |
| - toBadgeImageSrc_: function(id) { |
| - return id ? this.toImageSrc_('badge_' + id) : ''; |
| - }, |
| - |
| - /** |
| - * Sets the icon and badge based on the current state and |strength|. |
| - * @param {!NetworkIconParamType} params Set of params describing the icon. |
| - * @private |
| - */ |
| - setIcon_: function(params) { |
| - var icon = this.$.icon; |
| - |
| - var multiLevel = (this.iconType_ == 'wifi' || this.iconType_ == 'mobile'); |
| - |
| - if (this.networkState && multiLevel) { |
| - this.setMultiLevelIcon_(params); |
| - } else { |
| - icon.classList.toggle('multi-level', multiLevel); |
| - icon.classList.toggle('level0', multiLevel); |
| - icon.classList.toggle('level1', false); |
| - icon.classList.toggle('level2', false); |
| - icon.classList.toggle('level3', false); |
| - icon.classList.toggle('level4', false); |
| - } |
| - |
| - this.setIconBadges_(params); |
| - }, |
| - |
| - /** |
| - * Toggles icon classes based on strength and connecting properties. |
| - * |this.networkState| is expected to be specified. |
| - * @param {!NetworkIconParamType} params Set of params describing the icon. |
| - * @private |
| - */ |
| - setMultiLevelIcon_: function(params) { |
| - // Set the strength or connecting properties. |
| - var networkState = this.networkState; |
| + strengthToIndex_: function(strength) { |
| + if (strength == 0) |
| + return 0; |
| + return Math.min(Math.trunc((strength - 1) / 25) + 1, 4); |
| + }, |
| - var connectionState = networkState.ConnectionState; |
| - var connecting = false; |
| - var strength = -1; |
| - if (connectionState == CrOnc.ConnectionState.CONNECTING) { |
| - strength = 0; |
| - connecting = true; |
| - } else if ( |
| - connectionState == CrOnc.ConnectionState.CONNECTED || |
| - !params.showDisconnected) { |
| - strength = params.strength || 0; |
| - } |
| + /** |
| + * @return {boolean} |
| + * @private |
| + */ |
| + showTechnology_() { |
|
Dan Beam
2017/01/04 03:10:28
please start a thread about using ES6 object liter
stevenjb
2017/01/04 18:14:04
I have a bad habit of doing this. I don't mean to,
|
| + return this.getTechnology_() != ''; |
| + }, |
| - var icon = this.$.icon; |
| - icon.classList.toggle('multi-level', true); |
| - icon.classList.toggle('connecting', connecting); |
| - icon.classList.toggle('level0', strength < 0); |
| - icon.classList.toggle('level1', strength >= 0 && strength <= 25); |
| - icon.classList.toggle('level2', strength > 25 && strength <= 50); |
| - icon.classList.toggle('level3', strength > 50 && strength <= 75); |
| - icon.classList.toggle('level4', strength > 75); |
| - }, |
| + /** |
| + * @return {string} |
| + * @private |
| + */ |
| + getTechnology_() { |
| + let networkState = this.networkState; |
| + let type = networkState.Type; |
| + if (type == CrOnc.Type.WI_MAX) |
| + return 'network:4g'; |
| + if (type == CrOnc.Type.CELLULAR && networkState.Cellular) { |
| + let technology = |
| + this.getTechnologyId_(networkState.Cellular.NetworkTechnology); |
| + if (technology != '') |
| + return 'network:' + technology; |
| + } |
| + return ''; |
| + }, |
| - /** |
| - * Sets the icon badge visibility properties: roaming, secure, technology. |
| - * @param {!NetworkIconParamType} params Set of params describing the icon. |
| - * @private |
| - */ |
| - setIconBadges_: function(params) { |
| - var networkState = this.networkState; |
| + /** |
| + * @param {string|undefined} networkTechnology |
| + * @return {string} |
| + * @private |
| + */ |
| + getTechnologyId_(networkTechnology) { |
| + switch (networkTechnology) { |
| + case CrOnc.NetworkTechnology.CDMA1XRTT: |
| + return 'badge-1x'; |
| + case CrOnc.NetworkTechnology.EDGE: |
| + return 'badge-edge'; |
| + case CrOnc.NetworkTechnology.EVDO: |
| + return 'badge-evdo'; |
| + case CrOnc.NetworkTechnology.GPRS: |
| + case CrOnc.NetworkTechnology.GSM: |
| + return 'badge-gsm'; |
| + case CrOnc.NetworkTechnology.HSPA: |
| + return 'badge-hspa'; |
| + case CrOnc.NetworkTechnology.HSPA_PLUS: |
| + return 'badge-hspa-plus'; |
| + case CrOnc.NetworkTechnology.LTE: |
| + return 'badge-lte'; |
| + case CrOnc.NetworkTechnology.LTE_ADVANCED: |
| + return 'badge-lte-advanced'; |
| + case CrOnc.NetworkTechnology.UMTS: |
| + return 'badge-3g'; |
| + } |
| + return ''; |
| + }, |
| - var type = (params.showBadges && networkState) ? networkState.Type : ''; |
| - if (type == CrOnc.Type.WI_FI) { |
| - this.roaming_ = false; |
| - var security = networkState.WiFi ? networkState.WiFi.Security : ''; |
| - this.secure_ = !!security && security != 'None'; |
| - this.technology_ = ''; |
| - } else if (type == CrOnc.Type.WI_MAX) { |
| - this.roaming_ = false; |
| - this.secure_ = false; |
| - this.technology_ = '4g'; |
| - } else if (type == CrOnc.Type.CELLULAR && networkState.Cellular) { |
| - this.roaming_ = |
| - networkState.Cellular.RoamingState == CrOnc.RoamingState.ROAMING; |
| - this.secure_ = false; |
| - var oncTechnology = networkState.Cellular.NetworkTechnology; |
| - switch (oncTechnology) { |
| - case CrOnc.NetworkTechnology.CDMA1XRTT: |
| - this.technology_ = '1x'; |
| - break; |
| - case CrOnc.NetworkTechnology.EDGE: |
| - this.technology_ = 'edge'; |
| - break; |
| - case CrOnc.NetworkTechnology.EVDO: |
| - this.technology_ = 'evdo'; |
| - break; |
| - case CrOnc.NetworkTechnology.GPRS: |
| - case CrOnc.NetworkTechnology.GSM: |
| - this.technology_ = 'gsm'; |
| - break; |
| - case CrOnc.NetworkTechnology.HSPA: |
| - this.technology_ = 'hspa'; |
| - break; |
| - case CrOnc.NetworkTechnology.HSPA_PLUS: |
| - this.technology_ = 'hspa_plus'; |
| - break; |
| - case CrOnc.NetworkTechnology.LTE: |
| - this.technology_ = 'lte'; |
| - break; |
| - case CrOnc.NetworkTechnology.LTE_ADVANCED: |
| - this.technology_ = 'lte_advanced'; |
| - break; |
| - case CrOnc.NetworkTechnology.UMTS: |
| - this.technology_ = '3g'; |
| - break; |
| - } |
| - } else { |
| - this.roaming_ = false; |
| - this.secure_ = false; |
| - this.technology_ = ''; |
| - } |
| - }, |
| - }); |
| -})(); |
| + /** |
| + * @return {boolean} |
| + * @private |
| + */ |
| + showSecure_() { |
| + let networkState = this.networkState; |
| + if (networkState.Type == CrOnc.Type.WI_FI && networkState.WiFi) { |
| + let security = networkState.WiFi.Security; |
| + return !!security && security != 'None'; |
| + } |
| + return false; |
| + }, |
| +}); |