Fix Bluetooth switch status in Connected devices screen
The symptom observed is that the Bluetooth master switch on the Connected devices page doesn't properly respond to Bluetooth turning off via quicksettings - either turning on airplane mode or just toggling Bluetooth. The root cause was that MasterSwitchPreference's isChecked method would not return the true value of whether the switch was checked - if the control is disabled, it always just returns false. This interacts badly with code in BluetoothEnabler - we disable the switch when the Bluetooth state is in transition (eg becomes STATE_TURNING_OFF), and we also attempt to avoid calling setChecked if the switch is already in the desired state. So the switch would be checked but disabled, and we'd avoid ever calling setChecked(false) on it. A thorough fix would be to remove the code from MasterSwitchPreference's isChecked method that looks at the enabled state, since enabled and checked really should be treated as separate concerns. But given the timeframe of MR1, we're opting for a more conservative fix of directly accessing the switch and checking it's state, to avoid introducing bugs in other consumers that might be depending on the current behavior. We'll then do the thorough fix on the master branch which will give a lot more time for any unexpected issues to be found (I audited other usages and none seemed likely to be a problem, but it's better to be safe than sorry). Change-Id: I19a6c6b71e74595be3ef32a9718a430b67a89d53 Bug: 64940731 Test: make RunSettingsRoboTests
Loading
Please register or sign in to comment