| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 // This Polymer element contains the entire media router interface. It handles | 5 // This Polymer element contains the entire media router interface. It handles |
| 6 // hiding and showing specific components. | 6 // hiding and showing specific components. |
| 7 Polymer({ | 7 Polymer({ |
| 8 is: 'media-router-container', | 8 is: 'media-router-container', |
| 9 | 9 |
| 10 properties: { | 10 properties: { |
| (...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 523 | 523 |
| 524 /** | 524 /** |
| 525 * Checks that the currently selected cast mode is still in the | 525 * Checks that the currently selected cast mode is still in the |
| 526 * updated list of available cast modes. If not, then update the selected | 526 * updated list of available cast modes. If not, then update the selected |
| 527 * cast mode to the first available cast mode on the list. | 527 * cast mode to the first available cast mode on the list. |
| 528 */ | 528 */ |
| 529 checkCurrentCastMode_: function() { | 529 checkCurrentCastMode_: function() { |
| 530 if (!this.castModeList.length) | 530 if (!this.castModeList.length) |
| 531 return; | 531 return; |
| 532 | 532 |
| 533 // If there is a forced mode make sure it is shown. |
| 534 if (this.findForcedCastMode_()) { |
| 535 this.rebuildSinksToShow_(); |
| 536 } |
| 537 |
| 533 // If we are currently showing auto mode, then nothing needs to be done. | 538 // If we are currently showing auto mode, then nothing needs to be done. |
| 534 // Otherwise, if the cast mode currently shown no longer exists (regardless | 539 // Otherwise, if the cast mode currently shown no longer exists (regardless |
| 535 // of whether it was selected by user), then switch back to auto cast mode. | 540 // of whether it was selected by user), then switch back to auto cast mode. |
| 536 if (this.shownCastModeValue_ != media_router.CastModeType.AUTO && | 541 if (this.shownCastModeValue_ != media_router.CastModeType.AUTO && |
| 537 !this.findCastModeByType_(this.shownCastModeValue_)) { | 542 !this.findCastModeByType_(this.shownCastModeValue_)) { |
| 538 this.setShownCastMode_(media_router.AUTO_CAST_MODE); | 543 this.setShownCastMode_(media_router.AUTO_CAST_MODE); |
| 539 this.rebuildSinksToShow_(); | 544 this.rebuildSinksToShow_(); |
| 540 } | 545 } |
| 541 }, | 546 }, |
| 542 | 547 |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 604 * @param {number} distance Number of pixels that will be traveled. | 609 * @param {number} distance Number of pixels that will be traveled. |
| 605 * @private | 610 * @private |
| 606 */ | 611 */ |
| 607 computeAnimationDuration_: function(distance) { | 612 computeAnimationDuration_: function(distance) { |
| 608 // The duration of the animation can be found by abs(distance)/speed, where | 613 // The duration of the animation can be found by abs(distance)/speed, where |
| 609 // speed is fixed at 1000 pixels per second, or 1 pixel per millisecond. | 614 // speed is fixed at 1000 pixels per second, or 1 pixel per millisecond. |
| 610 return Math.abs(distance); | 615 return Math.abs(distance); |
| 611 }, | 616 }, |
| 612 | 617 |
| 613 /** | 618 /** |
| 614 * If |allSinks| supports only a single cast mode, returns that cast mode. | 619 * If there is a forced cast mode, returns that cast mode. If |allSinks| |
| 615 * Otherwise, returns AUTO_MODE. Only called if |userHasSelectedCastMode_| is | 620 * supports only a single cast mode, returns that cast mode. Otherwise, |
| 616 * |false|. | 621 * returns AUTO_MODE. Only called if |userHasSelectedCastMode_| is |false|. |
| 622 * |
| 617 * @return {!media_router.CastMode} The single cast mode supported by | 623 * @return {!media_router.CastMode} The single cast mode supported by |
| 618 * |allSinks|, or AUTO_MODE. | 624 * |allSinks|, or AUTO_MODE. |
| 619 */ | 625 */ |
| 620 computeCastMode_: function() { | 626 computeCastMode_: function() { |
| 627 /** @const */ var forcedMode = this.findForcedCastMode_(); |
| 628 if (forcedMode) |
| 629 return forcedMode; |
| 630 |
| 621 var allCastModes = this.allSinks.reduce(function(castModesSoFar, sink) { | 631 var allCastModes = this.allSinks.reduce(function(castModesSoFar, sink) { |
| 622 return castModesSoFar | sink.castModes; | 632 return castModesSoFar | sink.castModes; |
| 623 }, 0); | 633 }, 0); |
| 624 | 634 |
| 625 // This checks whether |castModes| does not consist of exactly 1 cast mode. | 635 // This checks whether |castModes| does not consist of exactly 1 cast mode. |
| 626 if (!allCastModes || allCastModes & (allCastModes - 1)) | 636 if (!allCastModes || allCastModes & (allCastModes - 1)) |
| 627 return media_router.AUTO_CAST_MODE; | 637 return media_router.AUTO_CAST_MODE; |
| 628 | 638 |
| 629 var castMode = this.findCastModeByType_(allCastModes); | 639 var castMode = this.findCastModeByType_(allCastModes); |
| 630 if (castMode) | 640 if (castMode) |
| (...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1142 * @return {media_router.CastMode|undefined} CastMode object with the given | 1152 * @return {media_router.CastMode|undefined} CastMode object with the given |
| 1143 * type in castModeList, or undefined if not found. | 1153 * type in castModeList, or undefined if not found. |
| 1144 */ | 1154 */ |
| 1145 findCastModeByType_: function(castModeType) { | 1155 findCastModeByType_: function(castModeType) { |
| 1146 return this.castModeList.find(function(element, index, array) { | 1156 return this.castModeList.find(function(element, index, array) { |
| 1147 return element.type == castModeType; | 1157 return element.type == castModeType; |
| 1148 }); | 1158 }); |
| 1149 }, | 1159 }, |
| 1150 | 1160 |
| 1151 /** | 1161 /** |
| 1162 * Helper function to return a forced CastMode, if any. |
| 1163 * |
| 1164 * @return {media_router.CastMode|undefined} CastMode object with |
| 1165 * isForced = true, or undefined if not found. |
| 1166 */ |
| 1167 findForcedCastMode_: function() { |
| 1168 return this.castModeList && |
| 1169 this.castModeList.find(element => element.isForced); |
| 1170 }, |
| 1171 |
| 1172 /** |
| 1152 * @param {?Element} element Element to compute padding for. | 1173 * @param {?Element} element Element to compute padding for. |
| 1153 * @return {!Array<number>} Array containing the element's bottom padding | 1174 * @return {!Array<number>} Array containing the element's bottom padding |
| 1154 * value and the element's top padding value, in that order. | 1175 * value and the element's top padding value, in that order. |
| 1155 * @private | 1176 * @private |
| 1156 */ | 1177 */ |
| 1157 getElementVerticalPadding_: function(element) { | 1178 getElementVerticalPadding_: function(element) { |
| 1158 var style = window.getComputedStyle(element); | 1179 var style = window.getComputedStyle(element); |
| 1159 return [parseInt(style.getPropertyValue('padding-bottom'), 10) || 0, | 1180 return [parseInt(style.getPropertyValue('padding-bottom'), 10) || 0, |
| 1160 parseInt(style.getPropertyValue('padding-top'), 10) || 0]; | 1181 parseInt(style.getPropertyValue('padding-top'), 10) || 0]; |
| 1161 }, | 1182 }, |
| (...skipping 809 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1971 var pendingPseudoSink = this.pseudoSinkSearchState_.getPseudoSink(); | 1992 var pendingPseudoSink = this.pseudoSinkSearchState_.getPseudoSink(); |
| 1972 // Here we will treat the pseudo sink that launched the search as a real | 1993 // Here we will treat the pseudo sink that launched the search as a real |
| 1973 // sink until one is returned by search. This way it isn't possible to | 1994 // sink until one is returned by search. This way it isn't possible to |
| 1974 // ever reach a UI state where there is no spinner being shown in the sink | 1995 // ever reach a UI state where there is no spinner being shown in the sink |
| 1975 // list but |currentLaunchingSinkId_| is non-empty (thereby preventing any | 1996 // list but |currentLaunchingSinkId_| is non-empty (thereby preventing any |
| 1976 // other sink from launching). | 1997 // other sink from launching). |
| 1977 if (pendingPseudoSink.id == this.currentLaunchingSinkId_) { | 1998 if (pendingPseudoSink.id == this.currentLaunchingSinkId_) { |
| 1978 updatedSinkList.unshift(pendingPseudoSink); | 1999 updatedSinkList.unshift(pendingPseudoSink); |
| 1979 } | 2000 } |
| 1980 } | 2001 } |
| 1981 if (this.userHasSelectedCastMode_) { | 2002 // If user did not select a cast mode, then: |
| 1982 // If user explicitly selected a cast mode, then we show only sinks that | 2003 // - If there is a forced cast mode, it is shown. |
| 1983 // are compatible with current cast mode or sinks that are active. | 2004 // - If all sinks support only a single cast mode, then the cast mode is |
| 2005 // switched to that mode. |
| 2006 // - Otherwise, the cast mode becomes AUTO mode. |
| 2007 if (!this.userHasSelectedCastMode_) |
| 2008 this.setShownCastMode_(this.computeCastMode_()); |
| 2009 |
| 2010 // Non-AUTO modes may show a subset of sinks based on compatibility with the |
| 2011 // shown value. |
| 2012 if (this.shownCastModeValue_ != media_router.CastModeType.AUTO) { |
| 1984 updatedSinkList = updatedSinkList.filter(function(element) { | 2013 updatedSinkList = updatedSinkList.filter(function(element) { |
| 1985 return (element.castModes & this.shownCastModeValue_) || | 2014 return (element.castModes & this.shownCastModeValue_) || |
| 1986 this.sinkToRouteMap_[element.id]; | 2015 this.sinkToRouteMap_[element.id]; |
| 1987 }, this); | 2016 }, this); |
| 1988 } else { | |
| 1989 // If user did not select a cast mode, then: | |
| 1990 // - If all sinks support only a single cast mode, then the cast mode is | |
| 1991 // switched to that mode. | |
| 1992 // - Otherwise, the cast mode becomes auto mode. | |
| 1993 // Either way, all sinks will be shown. | |
| 1994 this.setShownCastMode_(this.computeCastMode_()); | |
| 1995 } | 2017 } |
| 1996 | 2018 |
| 1997 // When there's an updated list of sinks, append any new sinks to the end | 2019 // When there's an updated list of sinks, append any new sinks to the end |
| 1998 // of the existing list. This prevents sinks randomly jumping around the | 2020 // of the existing list. This prevents sinks randomly jumping around the |
| 1999 // dialog, which can surprise users / lead to inadvertently casting to the | 2021 // dialog, which can surprise users / lead to inadvertently casting to the |
| 2000 // wrong sink. | 2022 // wrong sink. |
| 2001 if (this.sinksToShow_) { | 2023 if (this.sinksToShow_) { |
| 2002 for (var i = this.sinksToShow_.length - 1; i >= 0; i--) { | 2024 for (var i = this.sinksToShow_.length - 1; i >= 0; i--) { |
| 2003 var index = updatedSinkList.findIndex(function(updatedSink) { | 2025 var index = updatedSinkList.findIndex(function(updatedSink) { |
| 2004 return this.sinksToShow_[i].id == updatedSink.id; }.bind(this)); | 2026 return this.sinksToShow_[i].id == updatedSink.id; }.bind(this)); |
| (...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2366 /** | 2388 /** |
| 2367 * Update the max dialog height and update the positioning of the elements. | 2389 * Update the max dialog height and update the positioning of the elements. |
| 2368 * | 2390 * |
| 2369 * @param {number} height The max height of the Media Router dialog. | 2391 * @param {number} height The max height of the Media Router dialog. |
| 2370 */ | 2392 */ |
| 2371 updateMaxDialogHeight: function(height) { | 2393 updateMaxDialogHeight: function(height) { |
| 2372 this.dialogHeight_ = height; | 2394 this.dialogHeight_ = height; |
| 2373 this.updateElementPositioning_(); | 2395 this.updateElementPositioning_(); |
| 2374 }, | 2396 }, |
| 2375 }); | 2397 }); |
| OLD | NEW |