Index: chrome/browser/ui/webui/chromeos/login/hid_detection_screen_handler.cc |
diff --git a/chrome/browser/ui/webui/chromeos/login/hid_detection_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/hid_detection_screen_handler.cc |
index fd49f5bc4ed59c8e7c35fdc48f4cc8acd9d8a05d..e298ce8611502134b4c2073dc13a500be02b793b 100644 |
--- a/chrome/browser/ui/webui/chromeos/login/hid_detection_screen_handler.cc |
+++ b/chrome/browser/ui/webui/chromeos/login/hid_detection_screen_handler.cc |
@@ -73,12 +73,15 @@ HIDDetectionScreenHandler::HIDDetectionScreenHandler( |
core_oobe_actor_(core_oobe_actor), |
show_on_init_(false), |
mouse_is_pairing_(false), |
+ pointing_device_connect_type_(InputDeviceInfo::TYPE_UNKNOWN), |
keyboard_is_pairing_(false), |
+ keyboard_device_connect_type_(InputDeviceInfo::TYPE_UNKNOWN), |
switch_on_adapter_when_ready_(false), |
weak_ptr_factory_(this) { |
} |
HIDDetectionScreenHandler::~HIDDetectionScreenHandler() { |
+ adapter_initially_powered_.reset(); |
if (adapter_.get()) |
adapter_->RemoveObserver(this); |
input_service_proxy_.RemoveObserver(this); |
@@ -97,6 +100,10 @@ void HIDDetectionScreenHandler::SetPoweredError() { |
LOG(ERROR) << "Failed to power BT adapter"; |
} |
+void HIDDetectionScreenHandler::SetPoweredOffError() { |
+ LOG(ERROR) << "Failed to power off BT adapter"; |
+} |
+ |
void HIDDetectionScreenHandler::FindDevicesError() { |
VLOG(1) << "Failed to start Bluetooth discovery."; |
} |
@@ -196,6 +203,20 @@ void HIDDetectionScreenHandler::HandleOnContinue() { |
scenario_type, |
CONTINUE_SCENARIO_TYPE_SIZE); |
+ // Switch off BT adapter if it was off before the screen and no BT device |
+ // connected. |
+ if (adapter_ && adapter_->IsPresent() && adapter_->IsPowered() && |
+ !(pointing_device_connect_type_ == InputDeviceInfo::TYPE_BLUETOOTH || |
+ keyboard_device_connect_type_ == InputDeviceInfo::TYPE_BLUETOOTH) && |
+ adapter_initially_powered_ && !(*adapter_initially_powered_)) { |
+ VLOG(1) << "Switching off BT adapter after HID OOBE screen as unused."; |
+ adapter_->SetPowered( |
+ false, |
+ base::Bind(&base::DoNothing), |
+ base::Bind(&HIDDetectionScreenHandler::SetPoweredOffError, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ } |
+ |
core_oobe_actor_->StopDemoModeDetection(); |
if (delegate_) |
delegate_->OnExit(); |
@@ -286,6 +307,8 @@ void HIDDetectionScreenHandler::AuthorizePairing( |
void HIDDetectionScreenHandler::AdapterPresentChanged( |
device::BluetoothAdapter* adapter, bool present) { |
if (present && switch_on_adapter_when_ready_) { |
+ VLOG(1) << "Switching on BT adapter on HID OOBE screen."; |
+ adapter_initially_powered_.reset(new bool(adapter_->IsPowered())); |
adapter_->SetPowered( |
true, |
base::Bind(&HIDDetectionScreenHandler::StartBTDiscoverySession, |
@@ -430,6 +453,8 @@ void HIDDetectionScreenHandler::TryInitiateBTDevicesUpdate() { |
// Switch on BT adapter later when it's available. |
switch_on_adapter_when_ready_ = true; |
} else if (!adapter_->IsPowered()) { |
+ VLOG(1) << "Switching on BT adapter on HID OOBE screen."; |
+ adapter_initially_powered_.reset(new bool(false)); |
adapter_->SetPowered( |
true, |
base::Bind(&HIDDetectionScreenHandler::StartBTDiscoverySession, |