Commit b4c0d25b authored by stevenjb's avatar stevenjb Committed by Commit bot

MD Settings: Internet: Reduce use of hidden for complex sections.

This cleanup CL does the following:
* Use dom-repeat to only include sections for existing device types.
* Use dom-if instead of display to show items with infrequent
  visibility changes.
* Minor layout / CSS cleanup.

BUG=609156,609002
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:closure_compilation

Review-Url: https://codereview.chromium.org/2167473002
Cr-Commit-Position: refs/heads/master@{#406890}
parent 5b444ab1
...@@ -5,40 +5,16 @@ ...@@ -5,40 +5,16 @@
<dom-module id="network-summary"> <dom-module id="network-summary">
<template> <template>
<div id="summary" class="layout vertical"> <div id="summary" class="layout vertical">
<network-summary-item id="ethernet" <template is="dom-repeat" items="[[activeNetworkStates]]">
device-state="[[deviceStates.Ethernet]]" <network-summary-item id="[[item.Type]]"
network-state="[[networkStates.Ethernet]]" active-network-state="[[item]]"
network-state-list="[[networkStateLists.Ethernet]]" device-state="[[get(item.Type, deviceStates)]]"
on-selected="onSelected_"> network-state-list="[[get(item.Type, networkStateLists)]]"
</network-summary-item> on-expanded="onExpanded_"
<network-summary-item id="wifi" on-selected="onSelected_"
device-state="[[deviceStates.WiFi]]" on-device-enabled-toggled="onDeviceEnabledToggled_">
network-state="[[networkStates.WiFi]]" </network-summary-item>
network-state-list="[[networkStateLists.WiFi]]" </template>
on-expanded="onWiFiExpanded_"
on-selected="onSelected_"
on-device-enabled-toggled="onDeviceEnabledToggled_">
</network-summary-item>
<network-summary-item id="cellular"
device-state="[[deviceStates.Cellular]]"
network-state="[[networkStates.Cellular]]"
network-state-list="[[networkStateLists.Cellular]]"
on-selected="onSelected_"
on-device-enabled-toggled="onDeviceEnabledToggled_">
</network-summary-item>
<network-summary-item id="wimax"
device-state="[[deviceStates.WiMAX]]"
network-state="[[networkStates.WiMAX]]"
network-state-list="[[networkStateLists.WiMAX]]"
on-selected="onSelected_"
on-device-enabled-toggled="onDeviceEnabledToggled_">
</network-summary-item>
<network-summary-item id="vpn"
device-state="[[deviceStates.VPN]]"
network-state="[[networkStates.VPN]]"
network-state-list="[[networkStateLists.VPN]]"
on-selected="onSelected_">
</network-summary-item>
</div> </div>
</template> </template>
<script src="network_summary.js"></script> <script src="network_summary.js"></script>
......
...@@ -21,17 +21,6 @@ var DeviceStateProperties; ...@@ -21,17 +21,6 @@ var DeviceStateProperties;
*/ */
var DeviceStateObject; var DeviceStateObject;
/**
* @typedef {{
* Ethernet: (!CrOnc.NetworkStateProperties|undefined),
* WiFi: (!CrOnc.NetworkStateProperties|undefined),
* Cellular: (!CrOnc.NetworkStateProperties|undefined),
* WiMAX: (!CrOnc.NetworkStateProperties|undefined),
* VPN: (!CrOnc.NetworkStateProperties|undefined)
* }}
*/
var NetworkStateObject;
/** /**
* @typedef {{ * @typedef {{
* Ethernet: (Array<CrOnc.NetworkStateProperties>|undefined), * Ethernet: (Array<CrOnc.NetworkStateProperties>|undefined),
...@@ -43,17 +32,6 @@ var NetworkStateObject; ...@@ -43,17 +32,6 @@ var NetworkStateObject;
*/ */
var NetworkStateListObject; var NetworkStateListObject;
(function() {
/** @const {!Array<chrome.networkingPrivate.NetworkType>} */
var NETWORK_TYPES = [
CrOnc.Type.ETHERNET,
CrOnc.Type.WI_FI,
CrOnc.Type.CELLULAR,
CrOnc.Type.WI_MAX,
CrOnc.Type.VPN
];
Polymer({ Polymer({
is: 'network-summary', is: 'network-summary',
...@@ -65,7 +43,7 @@ Polymer({ ...@@ -65,7 +43,7 @@ Polymer({
defaultNetwork: { defaultNetwork: {
type: Object, type: Object,
value: null, value: null,
notify: true notify: true,
}, },
/** /**
...@@ -78,12 +56,12 @@ Polymer({ ...@@ -78,12 +56,12 @@ Polymer({
}, },
/** /**
* Network state data for each network type. * Array of active network states, one per device type.
* @type {NetworkStateObject} * @type {!Array<!CrOnc.NetworkStateProperties>}
*/ */
networkStates: { activeNetworkStates: {
type: Object, type: Array,
value: function() { return {}; }, value: function() { return []; },
}, },
/** /**
...@@ -101,7 +79,7 @@ Polymer({ ...@@ -101,7 +79,7 @@ Polymer({
*/ */
networkingPrivate: { networkingPrivate: {
type: Object, type: Object,
} },
}, },
/** /**
...@@ -127,16 +105,14 @@ Polymer({ ...@@ -127,16 +105,14 @@ Polymer({
networksChangedListener_: function() {}, networksChangedListener_: function() {},
/** /**
* Dictionary of GUIDs identifying primary (active) networks for each type. * Set of GUIDs identifying active networks, one for each type.
* @type {?Object} * @type {?Set<string>}
* @private * @private
*/ */
networkIds_: null, activeNetworkIds_: null,
/** @override */ /** @override */
attached: function() { attached: function() {
this.networkIds_ = {};
this.getNetworkLists_(); this.getNetworkLists_();
this.networkListChangedListener_ = this.networkListChangedListener_ =
...@@ -167,16 +143,17 @@ Polymer({ ...@@ -167,16 +143,17 @@ Polymer({
}, },
/** /**
* Event triggered when the WiFi network-summary-item is expanded. * Event triggered when the network-summary-item is expanded.
* @param {!{detail: {expanded: boolean, type: string}}} event * @param {!{detail: {expanded: boolean, type: string}}} event
* @private * @private
*/ */
onWiFiExpanded_: function(event) { onExpanded_: function(event) {
if (!event.detail.expanded) if (!event.detail.expanded)
return; return;
// Get the latest network states (only). // Get the latest network states.
this.getNetworkStates_(); this.getNetworkStates_();
this.networkingPrivate.requestNetworkScan(); if (event.detail.type == CrOnc.Type.WI_FI)
this.networkingPrivate.requestNetworkScan();
}, },
/** /**
...@@ -225,10 +202,12 @@ Polymer({ ...@@ -225,10 +202,12 @@ Polymer({
* @private * @private
*/ */
onNetworksChangedEvent_: function(networkIds) { onNetworksChangedEvent_: function(networkIds) {
if (!this.activeNetworkIds_)
return; // Initial list of networks not received yet.
networkIds.forEach(function(id) { networkIds.forEach(function(id) {
if (id in this.networkIds_) { if (this.activeNetworkIds_.has(id)) {
this.networkingPrivate.getState( this.networkingPrivate.getState(
id, this.getStateCallback_.bind(this, id)); id, this.getActiveStateCallback_.bind(this, id));
} }
}, this); }, this);
}, },
...@@ -247,12 +226,12 @@ Polymer({ ...@@ -247,12 +226,12 @@ Polymer({
}, },
/** /**
* networkingPrivate.getState event callback. * networkingPrivate.getState event callback for an active state.
* @param {string} id The id of the requested state. * @param {string} id The id of the requested state.
* @param {!chrome.networkingPrivate.NetworkStateProperties} state * @param {!chrome.networkingPrivate.NetworkStateProperties} state
* @private * @private
*/ */
getStateCallback_: function(id, state) { getActiveStateCallback_: function(id, state) {
if (chrome.runtime.lastError) { if (chrome.runtime.lastError) {
var message = chrome.runtime.lastError.message; var message = chrome.runtime.lastError.message;
if (message != 'Error.NetworkUnavailable') { if (message != 'Error.NetworkUnavailable') {
...@@ -263,13 +242,21 @@ Polymer({ ...@@ -263,13 +242,21 @@ Polymer({
return; return;
} }
// Async call, ensure id still exists. // Async call, ensure id still exists.
if (!this.networkIds_[id]) if (!this.activeNetworkIds_.has(id))
return; return;
if (!state) { if (!state) {
this.networkIds_[id] = undefined; this.activeNetworkIds_.delete(id);
return; return;
} }
this.updateNetworkState_(state.Type, state); // Find the active state for the type and update it.
for (let i = 0; i < this.activeNetworkStates.length; ++i) {
if (this.activeNetworkStates[i].type == state.type) {
this.activeNetworkStates[i] = state;
return;
}
}
// Not found
console.error('Active state not found: ' + state.Name);
}, },
/** /**
...@@ -293,22 +280,22 @@ Polymer({ ...@@ -293,22 +280,22 @@ Polymer({
/** /**
* Requests the list of device states and network states from Chrome. * Requests the list of device states and network states from Chrome.
* Updates deviceStates, networkStates, and networkStateLists once the * Updates deviceStates, activeNetworkStates, and networkStateLists once the
* results are returned from Chrome. * results are returned from Chrome.
* @private * @private
*/ */
getNetworkLists_: function() { getNetworkLists_: function() {
// First get the device states. // First get the device states.
this.networkingPrivate.getDeviceStates( this.networkingPrivate.getDeviceStates(function(deviceStates) {
function(deviceStates) { // Second get the network states.
// Second get the network states. this.getNetworkStates_(deviceStates);
this.getNetworkStates_(deviceStates); }.bind(this));
}.bind(this));
}, },
/** /**
* Requests the list of network states from Chrome. Updates networkStates and * Requests the list of network states from Chrome. Updates
* networkStateLists once the results are returned from Chrome. * activeNetworkStates and networkStateLists once the results are returned
* from Chrome.
* @param {!Array<!DeviceStateProperties>=} opt_deviceStates * @param {!Array<!DeviceStateProperties>=} opt_deviceStates
* Optional list of state properties for all available devices. * Optional list of state properties for all available devices.
* @private * @private
...@@ -336,82 +323,62 @@ Polymer({ ...@@ -336,82 +323,62 @@ Polymer({
updateNetworkStates_: function(networkStates, opt_deviceStates) { updateNetworkStates_: function(networkStates, opt_deviceStates) {
var newDeviceStates; var newDeviceStates;
if (opt_deviceStates) { if (opt_deviceStates) {
newDeviceStates = /** @type {!DeviceStateObject} */({}); newDeviceStates = /** @type {!DeviceStateObject} */ ({});
opt_deviceStates.forEach(function(state) { for (let state of opt_deviceStates)
newDeviceStates[state.Type] = state; newDeviceStates[state.Type] = state;
});
} else { } else {
newDeviceStates = this.deviceStates; newDeviceStates = this.deviceStates;
} }
// Clear any current networks. // Clear any current networks.
this.networkIds_ = {}; var activeNetworkStatesByType =
/** @type {!Map<string, !CrOnc.NetworkStateProperties>} */ (new Map);
// Track the first (active) state for each type.
var foundTypes = {};
// Complete list of states by type. // Complete list of states by type.
/** @type {!NetworkStateListObject} */ var networkStateLists = { /** @type {!NetworkStateListObject} */ var newNetworkStateLists = {
Ethernet: [], Ethernet: [],
WiFi: [], WiFi: [],
Cellular: [], Cellular: [],
WiMAX: [], WiMAX: [],
VPN: [] VPN: [],
}; };
var firstConnectedNetwork = null; var firstConnectedNetwork = null;
networkStates.forEach(function(state) { networkStates.forEach(function(state) {
var type = state.Type; let type = state.Type;
if (!foundTypes[type]) { if (!activeNetworkStatesByType.has(type)) {
foundTypes[type] = true; activeNetworkStatesByType.set(type, state);
this.updateNetworkState_(type, state);
if (!firstConnectedNetwork && state.Type != CrOnc.Type.VPN && if (!firstConnectedNetwork && state.Type != CrOnc.Type.VPN &&
state.ConnectionState == CrOnc.ConnectionState.CONNECTED) { state.ConnectionState == CrOnc.ConnectionState.CONNECTED) {
firstConnectedNetwork = state; firstConnectedNetwork = state;
} }
} }
networkStateLists[type].push(state); newNetworkStateLists[type].push(state);
}, this); }, this);
this.defaultNetwork = firstConnectedNetwork; this.defaultNetwork = firstConnectedNetwork;
// Set any types with a deviceState and no network to a default state,
// and any types not found to undefined.
NETWORK_TYPES.forEach(function(type) {
if (!foundTypes[type]) {
var defaultState = undefined;
if (newDeviceStates[type])
defaultState = {GUID: '', Type: type};
this.updateNetworkState_(type, defaultState);
}
}, this);
this.networkStateLists = networkStateLists;
// Create a VPN entry in deviceStates if there are any VPN networks. // Create a VPN entry in deviceStates if there are any VPN networks.
if (networkStateLists.VPN && networkStateLists.VPN.length > 0) { if (newNetworkStateLists.VPN && newNetworkStateLists.VPN.length > 0) {
newDeviceStates.VPN = /** @type {DeviceStateProperties} */ ({ newDeviceStates.VPN = /** @type {DeviceStateProperties} */ ({
Type: CrOnc.Type.VPN, Type: CrOnc.Type.VPN,
State: chrome.networkingPrivate.DeviceStateType.ENABLED State: chrome.networkingPrivate.DeviceStateType.ENABLED
}); });
} }
this.deviceStates = newDeviceStates; // Push the active networks onto newActiveNetworkStates in device order,
}, // creating an empty state for devices with no networks.
var newActiveNetworkStates = [];
this.activeNetworkIds_ = new Set;
for (let type in newDeviceStates) {
var state = activeNetworkStatesByType.get(type) || {GUID: '', Type: type};
newActiveNetworkStates.push(state);
this.activeNetworkIds_.add(state.GUID);
}
/** this.deviceStates = newDeviceStates;
* Sets 'networkStates[type]' which will update the this.networkStateLists = newNetworkStateLists;
* cr-network-list-network-item associated with 'type'. // Set activeNetworkStates last to rebuild the dom-repeat.
* @param {string} type The network type. this.activeNetworkStates = newActiveNetworkStates;
* @param {!CrOnc.NetworkStateProperties|undefined} state The state properties
* for the network to associate with |type|. May be undefined if there are
* no networks matching |type|.
* @private
*/
updateNetworkState_: function(type, state) {
this.set('networkStates.' + type, state);
if (state)
this.networkIds_[state.GUID] = true;
}, },
}); });
})();
...@@ -25,16 +25,19 @@ ...@@ -25,16 +25,19 @@
}; };
} }
#buttons { paper-spinner {
align-items: center; -webkit-margin-start: 20px;
} }
.invisible { .button-row {
visibility: hidden; align-items: center;
border-top: var(--settings-separator-line);
display: flex;
min-height: var(--settings-row-min-height);
} }
paper-spinner { #buttons {
-webkit-margin-start: 20px; align-items: center;
} }
#deviceEnabledButton { #deviceEnabledButton {
...@@ -46,24 +49,27 @@ ...@@ -46,24 +49,27 @@
max-height: 400px; max-height: 400px;
} }
</style> </style>
<div class="settings-box two-line" hidden$="[[isHidden]]"> <div class="settings-box two-line">
<div id="details" class="start" on-tap="onDetailsTap_" actionable> <div id="details" class="start" on-tap="onDetailsTap_" actionable>
<cr-network-list-network-item id="detailsItem" network-state="[[networkState]]" show-buttons> <cr-network-list-network-item id="detailsItem"
network-state="[[activeNetworkState]]" show-buttons>
</cr-network-list-network-item> </cr-network-list-network-item>
<paper-spinner active="[[showScanning_(deviceState, expanded)]]"> <paper-spinner active="[[showScanning_(deviceState, expanded)]]">
</paper-spinner> </paper-spinner>
</div> </div>
<div> <div>
<div id="buttons" class="layout horizontal"> <div id="buttons" class="layout horizontal">
<cr-expand-button id="expandListButton" <template is="dom-if"
class$="[[getExpandButtonClass_(deviceState, networkStateList)]]" if="[[expandIsVisible_(deviceState, networkStateList)]]">
expanded="{{expanded}}"> <cr-expand-button id="expandListButton" expanded="{{expanded}}">
</cr-expand-button> </cr-expand-button>
<paper-toggle-button id="deviceEnabledButton" </template>
checked="[[deviceIsEnabled_(deviceState)]]" <template is="dom-if" if="[[enableIsVisible_(deviceState)]]">
class$="[[getDeviceEnabledButtonClass_(deviceState)]]" <paper-toggle-button id="deviceEnabledButton"
on-tap="onDeviceEnabledTap_"> checked="[[deviceIsEnabled_(deviceState)]]"
</paper-toggle-button> on-tap="onDeviceEnabledTap_">
</paper-toggle-button>
</template>
</div> </div>
</div> </div>
</div> </div>
...@@ -75,13 +81,14 @@ ...@@ -75,13 +81,14 @@
opened="{{expanded}}" opened="{{expanded}}"
show-buttons> show-buttons>
</cr-network-list> </cr-network-list>
<div class="layout horizontal"> <template is="dom-if"
<paper-button if="[[knownNetworksIsVisible_(activeNetworkState)]]">
hidden$="[[!showKnownNetworks_(networkState, expanded)]]" <div class="button-row">
on-tap="onKnownNetworksTap_"> <paper-button on-tap="onKnownNetworksTap_">
Known networks Known networks
</paper-button> </paper-button>
</div> </div>
</template>
</div> </div>
</template> </template>
</template> </template>
......
...@@ -20,7 +20,7 @@ Polymer({ ...@@ -20,7 +20,7 @@ Polymer({
expanded: { expanded: {
type: Boolean, type: Boolean,
value: false, value: false,
observer: 'expandedChanged_' observer: 'expandedChanged_',
}, },
/** /**
...@@ -28,18 +28,7 @@ Polymer({ ...@@ -28,18 +28,7 @@ Polymer({
*/ */
maxHeight: { maxHeight: {
type: Number, type: Number,
value: 200 value: 200,
},
/**
* True if this item should be hidden. We need this computed property so
* that it can default to true, hiding this element, since no changed event
* will be fired for deviceState if it is undefined (in NetworkSummary).
*/
isHidden: {
type: Boolean,
value: true,
computed: 'noDeviceState_(deviceState)'
}, },
/** /**
...@@ -48,15 +37,16 @@ Polymer({ ...@@ -48,15 +37,16 @@ Polymer({
*/ */
deviceState: { deviceState: {
type: Object, type: Object,
observer: 'deviceStateChanged_' observer: 'deviceStateChanged_',
}, },
/** /**
* Network state for the active network. * Network state for the active network.
* @type {!CrOnc.NetworkStateProperties|undefined} * @type {!CrOnc.NetworkStateProperties|undefined}
*/ */
networkState: { activeNetworkState: {
type: Object, type: Object,
observer: 'activeNetworkStateChanged_',
}, },
/** /**
...@@ -66,42 +56,30 @@ Polymer({ ...@@ -66,42 +56,30 @@ Polymer({
networkStateList: { networkStateList: {
type: Array, type: Array,
value: function() { return []; }, value: function() { return []; },
observer: 'networkStateListChanged_' observer: 'networkStateListChanged_',
} }
}, },
/** /** @private */
* Polymer expanded changed method.
*/
expandedChanged_: function() { expandedChanged_: function() {
var type = this.deviceState ? this.deviceState.Type : ''; var type = this.deviceState ? this.deviceState.Type : '';
this.fire('expanded', {expanded: this.expanded, type: type}); this.fire('expanded', {expanded: this.expanded, type: type});
}, },
/** /** @private */
* Polymer deviceState changed method.
*/
deviceStateChanged_: function() { deviceStateChanged_: function() {
this.updateSelectable_(); this.updateSelectable_();
if (this.expanded && !this.deviceIsEnabled_(this.deviceState)) if (this.expanded && !this.deviceIsEnabled_(this.deviceState))
this.expanded = false; this.expanded = false;
}, },
/** /** @private */
* Polymer networkStateList changed method. activeNetworkStateChanged_: function() {
*/
networkStateListChanged_: function() {
this.updateSelectable_(); this.updateSelectable_();
}, },
/** /** @private */
* @param {DeviceStateProperties} deviceState networkStateListChanged_: function() { this.updateSelectable_(); },
* @return {boolean} True if the device state is not set.
* @private
*/
noDeviceState_: function(deviceState) {
return !deviceState;
},
/** /**
* @param {DeviceStateProperties} deviceState * @param {DeviceStateProperties} deviceState
...@@ -124,47 +102,34 @@ Polymer({ ...@@ -124,47 +102,34 @@ Polymer({
/** /**
* @param {DeviceStateProperties} deviceState * @param {DeviceStateProperties} deviceState
* @return {string} The class value for the device enabled button. * @return {boolean}
* @private * @private
*/ */
getDeviceEnabledButtonClass_: function(deviceState) { enableIsVisible_: function(deviceState) {
var visible = deviceState && deviceState.Type != CrOnc.Type.ETHERNET && return !!deviceState && deviceState.Type != CrOnc.Type.ETHERNET &&
deviceState.Type != CrOnc.Type.VPN; deviceState.Type != CrOnc.Type.VPN;
return visible ? '' : 'invisible';
},
/**
* @param {DeviceStateProperties} deviceState
* @param {!Array<!CrOnc.NetworkStateProperties>} networkList
* @return {string} The class value for the expand button.
* @private
*/
getExpandButtonClass_: function(deviceState, networkList) {
var visible = this.expandIsVisible_(deviceState, networkList);
return visible ? '' : 'invisible';
}, },
/** /**
* @param {DeviceStateProperties|undefined} deviceState * @param {DeviceStateProperties|undefined} deviceState
* @param {!Array<!CrOnc.NetworkStateProperties>} networkList * @param {!Array<!CrOnc.NetworkStateProperties>} networkStateList
* @return {boolean} Whether or not to show the UI to expand the list. * @return {boolean} Whether or not to show the UI to expand the list.
* @private * @private
*/ */
expandIsVisible_: function(deviceState, networkList) { expandIsVisible_: function(deviceState, networkStateList) {
if (!this.deviceIsEnabled_(deviceState)) if (!this.deviceIsEnabled_(deviceState))
return false; return false;
var minLength = (this.deviceState.Type == CrOnc.Type.WI_FI) ? 1 : 2; var minLength = (this.deviceState.Type == CrOnc.Type.WI_FI) ? 1 : 2;
return networkList.length >= minLength; return networkStateList.length >= minLength;
}, },
/** /**
* @param {!CrOnc.NetworkStateProperties} state * @param {!CrOnc.NetworkStateProperties} state
* @param {boolean} expanded The expanded state. * @return {boolean} True if the known networks button should be shown.
* @return {boolean} True if the 'Known networks' button should be shown.
* @private * @private
*/ */
showKnownNetworks_: function(state, expanded) { knownNetworksIsVisible_: function(state) {
return !!expanded && !!state && state.Type == CrOnc.Type.WI_FI; return !!state && state.Type == CrOnc.Type.WI_FI;
}, },
/** /**
...@@ -183,8 +148,8 @@ Polymer({ ...@@ -183,8 +148,8 @@ Polymer({
this.expanded = !this.expanded; this.expanded = !this.expanded;
return; return;
} }
// Not expandable, fire 'selected' with |networkState|. // Not expandable, fire 'selected' with |activeNetworkState|.
this.fire('selected', this.networkState); this.fire('selected', this.activeNetworkState);
}, },
/** /**
...@@ -203,8 +168,8 @@ Polymer({ ...@@ -203,8 +168,8 @@ Polymer({
onDeviceEnabledTap_: function(event) { onDeviceEnabledTap_: function(event) {
var deviceIsEnabled = this.deviceIsEnabled_(this.deviceState); var deviceIsEnabled = this.deviceIsEnabled_(this.deviceState);
var type = this.deviceState ? this.deviceState.Type : ''; var type = this.deviceState ? this.deviceState.Type : '';
this.fire('device-enabled-toggled', this.fire(
{enabled: !deviceIsEnabled, type: type}); 'device-enabled-toggled', {enabled: !deviceIsEnabled, type: type});
// Make sure this does not propagate to onDetailsTap_. // Make sure this does not propagate to onDetailsTap_.
event.stopPropagation(); event.stopPropagation();
}, },
......
...@@ -636,7 +636,7 @@ void AddInternetStrings(content::WebUIDataSource* html_source) { ...@@ -636,7 +636,7 @@ void AddInternetStrings(content::WebUIDataSource* html_source) {
{"OncTypeEthernet", IDS_NETWORK_TYPE_ETHERNET}, {"OncTypeEthernet", IDS_NETWORK_TYPE_ETHERNET},
{"OncTypeVPN", IDS_NETWORK_TYPE_VPN}, {"OncTypeVPN", IDS_NETWORK_TYPE_VPN},
{"OncTypeWiFi", IDS_NETWORK_TYPE_WIFI}, {"OncTypeWiFi", IDS_NETWORK_TYPE_WIFI},
{"OncTypeWimax", IDS_NETWORK_TYPE_WIMAX}, {"OncTypeWiMAX", IDS_NETWORK_TYPE_WIMAX},
{"vpnNameTemplate", {"vpnNameTemplate",
IDS_OPTIONS_SETTINGS_SECTION_THIRD_PARTY_VPN_NAME_TEMPLATE}, IDS_OPTIONS_SETTINGS_SECTION_THIRD_PARTY_VPN_NAME_TEMPLATE},
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment