Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * @fileoverview | 6 * @fileoverview |
| 7 * 'settings-display' is the settings subpage for display settings. | 7 * 'settings-display' is the settings subpage for display settings. |
| 8 */ | 8 */ |
| 9 | 9 |
| 10 cr.define('settings.display', function() { | 10 cr.define('settings.display', function() { |
| 11 var systemDisplayApi = /** @type {!SystemDisplay} */ (chrome.system.display); | 11 var systemDisplayApi = /** @type {!SystemDisplay} */ (chrome.system.display); |
| 12 | 12 |
| 13 return { | 13 return { |
| 14 systemDisplayApi: systemDisplayApi, | 14 systemDisplayApi: systemDisplayApi, |
| 15 }; | 15 }; |
| 16 }); | 16 }); |
| 17 | 17 |
| 18 Polymer({ | 18 Polymer({ |
| 19 is: 'settings-display', | 19 is: 'settings-display', |
| 20 | 20 |
| 21 behaviors: [ | 21 behaviors: [ |
| 22 I18nBehavior, | 22 I18nBehavior, |
| 23 ], | 23 ], |
| 24 | 24 |
| 25 properties: { | 25 properties: { |
| 26 pref: { | |
|
stevenjb
2017/03/07 23:11:48
Given that there are many things being set here, c
dschuyler
2017/03/08 21:50:11
Done.
| |
| 27 type: Object, | |
| 28 value: function() { | |
| 29 return { | |
| 30 key: 'fakeDisplaySliderPref', | |
| 31 type: chrome.settingsPrivate.PrefType.NUMBER, | |
| 32 value: 0, | |
| 33 }; | |
| 34 }, | |
| 35 }, | |
| 36 | |
| 26 /** | 37 /** |
| 27 * Array of displays. | 38 * Array of displays. |
| 28 * @type {!Array<!chrome.system.display.DisplayUnitInfo>} | 39 * @type {!Array<!chrome.system.display.DisplayUnitInfo>} |
| 29 */ | 40 */ |
| 30 displays: Array, | 41 displays: Array, |
| 31 | 42 |
| 32 /** | 43 /** |
| 33 * Array of display layouts. | 44 * Array of display layouts. |
| 34 * @type {!Array<!chrome.system.display.DisplayLayout>} | 45 * @type {!Array<!chrome.system.display.DisplayLayout>} |
| 35 */ | 46 */ |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 48 selectedDisplay: {type: Object, observer: 'selectedDisplayChanged_'}, | 59 selectedDisplay: {type: Object, observer: 'selectedDisplayChanged_'}, |
| 49 | 60 |
| 50 /** Id passed to the overscan dialog. */ | 61 /** Id passed to the overscan dialog. */ |
| 51 overscanDisplayId: { | 62 overscanDisplayId: { |
| 52 type: String, | 63 type: String, |
| 53 notify: true, | 64 notify: true, |
| 54 }, | 65 }, |
| 55 | 66 |
| 56 /** @private {!Array<number>} Mode index values for slider. */ | 67 /** @private {!Array<number>} Mode index values for slider. */ |
| 57 modeValues_: Array, | 68 modeValues_: Array, |
| 58 | |
| 59 /** @private Selected mode index value for slider. */ | |
| 60 selectedModeIndex_: Number, | |
| 61 }, | 69 }, |
| 62 | 70 |
| 63 /** @private {number} Selected mode index received from chrome. */ | 71 /** @private {number} Selected mode index received from chrome. */ |
| 64 currentSelectedModeIndex_: -1, | 72 currentSelectedModeIndex_: -1, |
| 65 | 73 |
| 66 /** | 74 /** |
| 67 * Listener for chrome.system.display.onDisplayChanged events. | 75 * Listener for chrome.system.display.onDisplayChanged events. |
| 68 * @type {function(void)|undefined} | 76 * @type {function(void)|undefined} |
| 69 * @private | 77 * @private |
| 70 */ | 78 */ |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 144 getSelectedModeIndex_: function(selectedDisplay) { | 152 getSelectedModeIndex_: function(selectedDisplay) { |
| 145 for (var i = 0; i < selectedDisplay.modes.length; ++i) { | 153 for (var i = 0; i < selectedDisplay.modes.length; ++i) { |
| 146 if (selectedDisplay.modes[i].isSelected) | 154 if (selectedDisplay.modes[i].isSelected) |
| 147 return i; | 155 return i; |
| 148 } | 156 } |
| 149 return 0; | 157 return 0; |
| 150 }, | 158 }, |
| 151 | 159 |
| 152 /** @private */ | 160 /** @private */ |
| 153 selectedDisplayChanged_: function() { | 161 selectedDisplayChanged_: function() { |
| 154 // Set |modeValues_| before |selectedModeIndex_| so that the slider updates | 162 // Set |modeValues_| before |pref.value| so that the slider updates |
| 155 // correctly. | 163 // correctly. |
| 156 var numModes = this.selectedDisplay.modes.length; | 164 var numModes = this.selectedDisplay.modes.length; |
| 157 if (numModes == 0) { | 165 if (numModes == 0) { |
| 158 this.modeValues_ = []; | 166 this.modeValues_ = []; |
| 159 this.selectedModeIndex_ = 0; | 167 this.set('pref.value', 0); |
| 160 this.currentSelectedModeIndex_ = 0; | 168 this.currentSelectedModeIndex_ = 0; |
| 161 return; | 169 return; |
| 162 } | 170 } |
| 163 this.modeValues_ = Array.from(Array(numModes).keys()); | 171 this.modeValues_ = Array.from(Array(numModes).keys()); |
| 164 this.selectedModeIndex_ = this.getSelectedModeIndex_(this.selectedDisplay); | 172 this.set('pref.value', this.getSelectedModeIndex_(this.selectedDisplay)); |
| 165 this.currentSelectedModeIndex_ = this.selectedModeIndex_; | 173 this.currentSelectedModeIndex_ = this.pref.value; |
| 166 }, | 174 }, |
| 167 | 175 |
| 168 /** | 176 /** |
| 169 * Returns true if the given display has touch support and is not an internal | 177 * Returns true if the given display has touch support and is not an internal |
| 170 * display. If the feature is not enabled via the switch, this will return | 178 * display. If the feature is not enabled via the switch, this will return |
| 171 * false. | 179 * false. |
| 172 * @param {!chrome.system.display.DisplayUnitInfo} display Display being | 180 * @param {!chrome.system.display.DisplayUnitInfo} display Display being |
| 173 * checked for touch support. | 181 * checked for touch support. |
| 174 * @return {boolean} | 182 * @return {boolean} |
| 175 * @private | 183 * @private |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 197 */ | 205 */ |
| 198 showDisplaySelectMenu_: function(displays, selectedDisplay) { | 206 showDisplaySelectMenu_: function(displays, selectedDisplay) { |
| 199 return displays.length > 1 && !selectedDisplay.isPrimary; | 207 return displays.length > 1 && !selectedDisplay.isPrimary; |
| 200 }, | 208 }, |
| 201 | 209 |
| 202 /** | 210 /** |
| 203 * Returns the select menu index indicating whether the display currently is | 211 * Returns the select menu index indicating whether the display currently is |
| 204 * primary or extended. | 212 * primary or extended. |
| 205 * @param {!chrome.system.display.DisplayUnitInfo} selectedDisplay | 213 * @param {!chrome.system.display.DisplayUnitInfo} selectedDisplay |
| 206 * @param {string} primaryDisplayId | 214 * @param {string} primaryDisplayId |
| 207 * @return {number} Retruns 0 if the display is primary else returns 1. | 215 * @return {number} Returns 0 if the display is primary else returns 1. |
| 208 * @private | 216 * @private |
| 209 */ | 217 */ |
| 210 getDisplaySelectMenuIndex_: function(selectedDisplay, primaryDisplayId) { | 218 getDisplaySelectMenuIndex_: function(selectedDisplay, primaryDisplayId) { |
| 211 if (selectedDisplay && selectedDisplay.id == primaryDisplayId) | 219 if (selectedDisplay && selectedDisplay.id == primaryDisplayId) |
| 212 return 0; | 220 return 0; |
| 213 return 1; | 221 return 1; |
| 214 }, | 222 }, |
| 215 | 223 |
| 216 /** | 224 /** |
| 217 * Returns the i18n string for the text to be used for mirroring settings. | 225 * Returns the i18n string for the text to be used for mirroring settings. |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 262 }, | 270 }, |
| 263 | 271 |
| 264 /** | 272 /** |
| 265 * @return {string} | 273 * @return {string} |
| 266 * @private | 274 * @private |
| 267 */ | 275 */ |
| 268 getResolutionText_: function() { | 276 getResolutionText_: function() { |
| 269 if (this.selectedDisplay.modes.length == 0 || | 277 if (this.selectedDisplay.modes.length == 0 || |
| 270 this.currentSelectedModeIndex_ == -1) { | 278 this.currentSelectedModeIndex_ == -1) { |
| 271 // If currentSelectedModeIndex_ == -1, selectedDisplay and | 279 // If currentSelectedModeIndex_ == -1, selectedDisplay and |
| 272 // selectedModeIndex_ are not in sync. | 280 // |pref.value| are not in sync. |
| 273 return this.i18n( | 281 return this.i18n( |
| 274 'displayResolutionText', this.selectedDisplay.bounds.width.toString(), | 282 'displayResolutionText', this.selectedDisplay.bounds.width.toString(), |
| 275 this.selectedDisplay.bounds.height.toString()); | 283 this.selectedDisplay.bounds.height.toString()); |
| 276 } | 284 } |
| 277 var mode = this.selectedDisplay.modes[this.selectedModeIndex_]; | 285 var mode = this.selectedDisplay.modes[this.pref.value]; |
| 278 var best = | 286 var best = |
| 279 this.selectedDisplay.isInternal ? mode.uiScale == 1.0 : mode.isNative; | 287 this.selectedDisplay.isInternal ? mode.uiScale == 1.0 : mode.isNative; |
| 280 var widthStr = mode.width.toString(); | 288 var widthStr = mode.width.toString(); |
| 281 var heightStr = mode.height.toString(); | 289 var heightStr = mode.height.toString(); |
| 282 if (best) | 290 if (best) |
| 283 return this.i18n('displayResolutionTextBest', widthStr, heightStr); | 291 return this.i18n('displayResolutionTextBest', widthStr, heightStr); |
| 284 else if (mode.isNative) | 292 else if (mode.isNative) |
| 285 return this.i18n('displayResolutionTextNative', widthStr, heightStr); | 293 return this.i18n('displayResolutionTextNative', widthStr, heightStr); |
| 286 return this.i18n('displayResolutionText', widthStr, heightStr); | 294 return this.i18n('displayResolutionText', widthStr, heightStr); |
| 287 }, | 295 }, |
| 288 | 296 |
| 289 /** | 297 /** |
| 290 * @param {!{detail: string}} e |e.detail| is the id of the selected display. | 298 * @param {!{detail: string}} e |e.detail| is the id of the selected display. |
| 291 * @private | 299 * @private |
| 292 */ | 300 */ |
| 293 onSelectDisplay_: function(e) { | 301 onSelectDisplay_: function(e) { |
| 294 var id = e.detail; | 302 var id = e.detail; |
| 295 for (var i = 0; i < this.displays.length; ++i) { | 303 for (var i = 0; i < this.displays.length; ++i) { |
| 296 var display = this.displays[i]; | 304 var display = this.displays[i]; |
| 297 if (id != display.id) | 305 if (id != display.id) |
| 298 continue; | 306 continue; |
| 299 if (this.selectedDisplay != display) { | 307 if (this.selectedDisplay != display) { |
| 300 // Set currentSelectedModeIndex_ to -1 so that getResolutionText_ does | 308 // Set currentSelectedModeIndex_ to -1 so that getResolutionText_ does |
| 301 // not flicker. selectedDisplayChanged will update selectedModeIndex_ | 309 // not flicker. selectedDisplayChanged will update |pref.value| |
| 302 // and currentSelectedModeIndex_ correctly. | 310 // and currentSelectedModeIndex_ correctly. |
| 303 this.currentSelectedModeIndex_ = -1; | 311 this.currentSelectedModeIndex_ = -1; |
| 304 this.selectedDisplay = display; | 312 this.selectedDisplay = display; |
| 305 } | 313 } |
| 306 } | 314 } |
| 307 }, | 315 }, |
| 308 | 316 |
| 309 /** | 317 /** |
| 310 * Handles event when a display tab is selected. | 318 * Handles event when a display tab is selected. |
| 311 * @param {!{detail: !{item: !{displayId: string}}}} e | 319 * @param {!{detail: !{item: !{displayId: string}}}} e |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 348 }, | 356 }, |
| 349 | 357 |
| 350 /** | 358 /** |
| 351 * Triggered when the 'change' event for the selected mode slider is | 359 * Triggered when the 'change' event for the selected mode slider is |
| 352 * triggered. This only occurs when the value is comitted (i.e. not while | 360 * triggered. This only occurs when the value is comitted (i.e. not while |
| 353 * the slider is being dragged). | 361 * the slider is being dragged). |
| 354 * @private | 362 * @private |
| 355 */ | 363 */ |
| 356 onSelectedModeChange_: function() { | 364 onSelectedModeChange_: function() { |
| 357 if (this.currentSelectedModeIndex_ == -1 || | 365 if (this.currentSelectedModeIndex_ == -1 || |
| 358 this.currentSelectedModeIndex_ == this.selectedModeIndex_) { | 366 this.currentSelectedModeIndex_ == this.pref.value) { |
| 359 // Don't change the selected display mode until we have received an update | 367 // Don't change the selected display mode until we have received an update |
| 360 // from Chrome and the mode differs from the current mode. | 368 // from Chrome and the mode differs from the current mode. |
| 361 return; | 369 return; |
| 362 } | 370 } |
| 363 /** @type {!chrome.system.display.DisplayProperties} */ var properties = { | 371 /** @type {!chrome.system.display.DisplayProperties} */ var properties = { |
| 364 displayMode: this.selectedDisplay.modes[this.selectedModeIndex_] | 372 displayMode: this.selectedDisplay.modes[this.pref.value] |
| 365 }; | 373 }; |
| 366 settings.display.systemDisplayApi.setDisplayProperties( | 374 settings.display.systemDisplayApi.setDisplayProperties( |
| 367 this.selectedDisplay.id, properties, | 375 this.selectedDisplay.id, properties, |
| 368 this.setPropertiesCallback_.bind(this)); | 376 this.setPropertiesCallback_.bind(this)); |
| 369 }, | 377 }, |
| 370 | 378 |
| 371 /** | 379 /** |
| 372 * @param {!Event} event | 380 * @param {!Event} event |
| 373 * @private | 381 * @private |
| 374 */ | 382 */ |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 442 }, | 450 }, |
| 443 | 451 |
| 444 /** @private */ | 452 /** @private */ |
| 445 setPropertiesCallback_: function() { | 453 setPropertiesCallback_: function() { |
| 446 if (chrome.runtime.lastError) { | 454 if (chrome.runtime.lastError) { |
| 447 console.error( | 455 console.error( |
| 448 'setDisplayProperties Error: ' + chrome.runtime.lastError.message); | 456 'setDisplayProperties Error: ' + chrome.runtime.lastError.message); |
| 449 } | 457 } |
| 450 }, | 458 }, |
| 451 }); | 459 }); |
| OLD | NEW |