Chromium Code Reviews| Index: chrome/browser/resources/settings/bluetooth_page/bluetooth_page.js |
| diff --git a/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.js b/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.js |
| index e23ed90c9e17b244d0fc70244be821926f643269..034bfcabae0df8408486cd9b6ac692f8f7798eb5 100644 |
| --- a/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.js |
| +++ b/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.js |
| @@ -32,11 +32,26 @@ Polymer({ |
| notify: true, |
| }, |
| - /** @private */ |
| - bluetoothEnabled_: { |
| + /** |
| + * Reflects the current state of the toggle buttons. This will be set when |
|
michaelpg
2017/04/07 21:47:03
"button" singular?
stevenjb
2017/04/07 23:36:05
There are two, one in this page and one in the sub
|
| + * the adapter state change or when the user changes the toggle. |
| + * @private |
| + */ |
| + bluetoothToggleState_: { |
|
michaelpg
2017/04/07 21:47:03
"state" is generally an unfortunate word, but hard
stevenjb
2017/04/07 23:36:05
I agree it isn't great, but there are not a lot of
|
| type: Boolean, |
| - observer: 'bluetoothEnabledChanged_', |
| - notify: true, |
| + observer: 'bluetoothToggleStateChanged_', |
| + }, |
| + |
| + /** |
| + * Set to true before the adapter state is received, when the adapter is |
| + * unavailable, and while an adapter state change is requested. This |
| + * prevents user changes while a change is in progress or when the adapter |
| + * is not available. |
| + * @private |
| + */ |
| + bluetoothToggleDisabled_: { |
| + type: Boolean, |
| + value: true, |
| }, |
| /** |
| @@ -111,7 +126,7 @@ Polymer({ |
| * @private |
| */ |
| getIcon_: function() { |
| - if (!this.bluetoothEnabled_) |
| + if (!this.bluetoothToggleState_) |
| return 'settings:bluetooth-disabled'; |
| return 'settings:bluetooth'; |
| }, |
| @@ -134,15 +149,16 @@ Polymer({ |
| */ |
| onBluetoothAdapterStateChanged_: function(state) { |
| this.adapterState_ = state; |
| - this.bluetoothEnabled_ = state.powered; |
| + this.bluetoothToggleState_ = state.powered; |
| + this.bluetoothToggleDisabled_ = !state.available; |
| }, |
| /** @private */ |
| onTap_: function() { |
| if (this.adapterState_.available === false) |
| return; |
| - if (!this.bluetoothEnabled_) |
| - this.bluetoothEnabled_ = true; |
| + if (!this.bluetoothToggleState_) |
| + this.bluetoothToggleState_ = true; |
| else |
| this.openSubpage_(); |
| }, |
| @@ -165,9 +181,14 @@ Polymer({ |
| }, |
| /** @private */ |
| - bluetoothEnabledChanged_: function() { |
| + bluetoothToggleStateChanged_: function() { |
| + if (!this.adapterState_ || this.bluetoothToggleDisabled_ || |
| + this.bluetoothToggleState_ == this.adapterState_.powered) { |
| + return; |
| + } |
| + this.bluetoothToggleDisabled_ = true; |
|
michaelpg
2017/04/07 21:47:03
I understand disabling at startup, but is disablin
stevenjb
2017/04/07 23:36:05
We do the disable specifically for times when it i
|
| this.bluetoothPrivate.setAdapterState( |
| - {powered: this.bluetoothEnabled_}, function() { |
| + {powered: this.bluetoothToggleState_}, function() { |
| if (chrome.runtime.lastError) { |
| console.error( |
| 'Error enabling bluetooth: ' + |