Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(957)

Unified Diff: chrome/browser/ui/webui/options/chromeos/system_options_handler.cc

Issue 8233042: Chrome OS: Attach bluetooth UI to device discovery API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/webui/options/chromeos/system_options_handler.cc
diff --git a/chrome/browser/ui/webui/options/chromeos/system_options_handler.cc b/chrome/browser/ui/webui/options/chromeos/system_options_handler.cc
index d4656453e0f299b666071117d68613e6c792c13c..ec482797387a641726b5f37246f8347a2af44800 100644
--- a/chrome/browser/ui/webui/options/chromeos/system_options_handler.cc
+++ b/chrome/browser/ui/webui/options/chromeos/system_options_handler.cc
@@ -4,8 +4,6 @@
#include "chrome/browser/ui/webui/options/chromeos/system_options_handler.h"
-#include <string>
-
#include "base/basictypes.h"
#include "base/bind.h"
#include "base/bind_helpers.h"
@@ -17,9 +15,11 @@
#include "content/browser/tab_contents/tab_contents.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/accessibility_util.h"
+#include "chrome/browser/chromeos/bluetooth/bluetooth_device.h"
#include "chrome/browser/chromeos/dbus/dbus_thread_manager.h"
#include "chrome/browser/chromeos/dbus/power_manager_client.h"
#include "chrome/browser/chromeos/language_preferences.h"
+#include "chrome/browser/chromeos/system/runtime_environment.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/profiles/profile.h"
@@ -41,6 +41,7 @@ SystemOptionsHandler::SystemOptionsHandler()
}
SystemOptionsHandler::~SystemOptionsHandler() {
+ ShutdownBluetooth();
}
void SystemOptionsHandler::GetLocalizedValues(
@@ -119,15 +120,7 @@ void SystemOptionsHandler::Initialize() {
base::FundamentalValue checked(acc_enabled);
web_ui_->CallJavascriptFunction(
"options.SystemOptions.SetAccessibilityCheckboxState", checked);
-
- // Bluetooth support is a work in progress. Supress the feature unless
- // explicitly enabled via a command line flag.
- // TODO (kevers) - Test for presence of bluetooth hardware.
- if (CommandLine::ForCurrentProcess()
- ->HasSwitch(switches::kEnableBluetooth)) {
- web_ui_->CallJavascriptFunction(
- "options.SystemOptions.showBluetoothSettings");
- }
+ InitializeBluetooth();
}
void SystemOptionsHandler::RegisterMessages() {
@@ -175,16 +168,39 @@ void SystemOptionsHandler::IncreaseScreenBrightnessCallback(
void SystemOptionsHandler::BluetoothEnableChangeCallback(
const ListValue* args) {
- // TODO (kevers) - Call Bluetooth API to enable or disable.
+ // TODO(kevers) - Call Bluetooth API to enable or disable.
}
void SystemOptionsHandler::FindBluetoothDevicesCallback(
const ListValue* args) {
- // TODO (kevers) - Call Bluetooth API to fetch devices.
- // Generate a fake list until the bluetooth API is ready.
- // Afterwards keep fake list only for cases where emulating
- // ChromeOS from the desktop launch.
- GenerateFakeDeviceList();
+ // We only initiate a scan if we're running on Chrome OS. Otherwise, we
+ // generate a fake device list.
+ if (!chromeos::system::runtime_environment::IsRunningOnChromeOS()) {
+ GenerateFakeDeviceList();
+ return;
+ }
+
+ chromeos::BluetoothManager* bluetooth_manager =
+ chromeos::BluetoothManager::GetInstance();
+ CHECK(bluetooth_manager != NULL);
+
+ chromeos::BluetoothAdapter* default_adapter =
+ bluetooth_manager->DefaultAdapter();
+
+ if ((default_adapter == NULL && !default_adapter_id_.empty()) ||
+ (default_adapter != NULL &&
+ default_adapter_id_ != default_adapter->id())) {
+ LOG(WARNING) << "unexpected default adapter change from \""
+ << default_adapter_id_ << "\" to \"" << default_adapter->id() << "\"";
+ DefaultAdapterChanged(default_adapter);
+ }
+
+ if (default_adapter == NULL) {
+ LOG(WARNING) << "FindBluetoothDevicesCallback: no default adapter";
+ return;
+ }
+
+ default_adapter->StartDiscovery();
}
void SystemOptionsHandler::BluetoothDeviceNotification(
@@ -193,11 +209,129 @@ void SystemOptionsHandler::BluetoothDeviceNotification(
"options.SystemOptions.addBluetoothDevice", device);
}
+void SystemOptionsHandler::DefaultAdapterChanged(
+ chromeos::BluetoothAdapter* adapter) {
+ std::string old_default_adapter_id = default_adapter_id_;
+
+ if (adapter == NULL) {
+ default_adapter_id_.clear();
+ LOG(INFO) << "DefaultAdapterChanged: no default bluetooth adapter";
+ } else {
+ default_adapter_id_ = adapter->id();
+ LOG(INFO) << "DefaultAdapterChanged: " << default_adapter_id_;
+ }
+
+ if (default_adapter_id_ == old_default_adapter_id) {
+ return;
+ }
+
+ if (adapter != NULL) {
+ adapter->AddObserver(this);
+ }
+
+ // TODO(vlaviano): Respond to adapter change.
+}
+
+void SystemOptionsHandler::DiscoveryStarted(const std::string& adapter_id) {
+ VLOG(1) << "Discovery started on " << adapter_id;
+}
+
+void SystemOptionsHandler::DiscoveryEnded(const std::string& adapter_id) {
+ VLOG(1) << "Discovery ended on " << adapter_id;
+ web_ui_->CallJavascriptFunction(
+ "options.SystemOptions.notifyBluetoothSearchComplete");
+
+ // Stop the discovery session.
+ // TODO(vlaviano): We may want to expose DeviceDisappeared, remove the
+ // "Find devices" button, and let the discovery session continue throughout
+ // the time that the page is visible rather than just doing a single discovery
+ // cycle in response to a button click.
+ chromeos::BluetoothManager* bluetooth_manager =
+ chromeos::BluetoothManager::GetInstance();
+ CHECK(bluetooth_manager != NULL);
+
+ chromeos::BluetoothAdapter* default_adapter =
+ bluetooth_manager->DefaultAdapter();
+
+ if ((default_adapter == NULL && !default_adapter_id_.empty()) ||
+ (default_adapter != NULL &&
+ default_adapter_id_ != default_adapter->id())) {
+ LOG(WARNING) << "unexpected default adapter change from \""
+ << default_adapter_id_ << "\" to \"" << default_adapter->id() << "\"";
+ DefaultAdapterChanged(default_adapter);
+ }
+
+ if (default_adapter == NULL) {
+ LOG(WARNING) << "FindBluetoothDevicesCallback: no default adapter";
+ return;
+ }
+
+ default_adapter->StopDiscovery();
+}
+
+void SystemOptionsHandler::DeviceFound(const std::string& adapter_id,
+ chromeos::BluetoothDevice* device) {
+ VLOG(1) << "Device found on " << adapter_id;
+ CHECK(device != NULL);
+
+ // TODO(vlaviano): create more consistency between the UI and the
+ // underlying BluetoothDevice properties so that we can use
+ // BluetoothDevice::dictionary_rep() here.
+ DictionaryValue device_js_rep;
+ device_js_rep.SetString("deviceName", device->name());
+ device_js_rep.SetString("deviceId", device->address());
+ device_js_rep.SetString("deviceType", device->icon());
+ if (device->paired()) {
+ device_js_rep.SetString("deviceStatus", "bluetoothDeviceConnected");
+ } else {
+ device_js_rep.SetString("deviceStatus", "bluetoothDeviceNotPaired");
+ }
+
+ web_ui_->CallJavascriptFunction(
+ "options.SystemOptions.addBluetoothDevice", device_js_rep);
+}
+
+void SystemOptionsHandler::InitializeBluetooth() {
+ // Bluetooth support is a work in progress. Supress the feature unless
+ // explicitly enabled via a command line flag.
+ // TODO(kevers) - Test for presence of bluetooth hardware.
+ if (!CommandLine::ForCurrentProcess()
+ ->HasSwitch(switches::kEnableBluetooth)) {
+ return;
+ }
+ VLOG(1) << "InitializeBluetooth";
+
+ web_ui_->CallJavascriptFunction(
+ "options.SystemOptions.showBluetoothSettings");
+
+ chromeos::BluetoothManager* bluetooth_manager =
+ chromeos::BluetoothManager::GetInstance();
+ CHECK(bluetooth_manager != NULL);
+ bluetooth_manager->AddObserver(this);
+
+ chromeos::BluetoothAdapter* default_adapter =
+ bluetooth_manager->DefaultAdapter();
+ DefaultAdapterChanged(default_adapter);
+}
+
+void SystemOptionsHandler::ShutdownBluetooth() {
+ if (!CommandLine::ForCurrentProcess()
+ ->HasSwitch(switches::kEnableBluetooth)) {
+ return;
+ }
+ VLOG(1) << "ShutdownBluetooth";
+
+ chromeos::BluetoothManager* bluetooth_manager =
+ chromeos::BluetoothManager::GetInstance();
+ CHECK(bluetooth_manager != NULL);
+ bluetooth_manager->RemoveObserver(this);
+}
+
void SystemOptionsHandler::GenerateFakeDeviceList() {
- // TODO (kevers) - Send notifications asynchronously simulating that the
- // process of discovering bluetooth devices takes time.
- // Fire each notification using OneShotTimer with a
- // varying delay.
+ // TODO(kevers) - Send notifications asynchronously simulating that the
+ // process of discovering bluetooth devices takes time.
+ // Fire each notification using OneShotTimer with a
+ // varying delay.
std::string data[9] = {
"Fake Wireless Keyboard", "01-02-03-04-05", "keyboard",
"Fake Wireless Mouse", "02-03-04-05-01", "mouse",

Powered by Google App Engine
This is Rietveld 408576698