1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chromeos/dbus/fake_bluetooth_input_client.h" 6 7 #include <map> 8 9 #include "base/logging.h" 10 #include "base/stl_util.h" 11 #include "chromeos/dbus/fake_bluetooth_device_client.h" 12 #include "dbus/bus.h" 13 #include "dbus/message.h" 14 #include "dbus/object_manager.h" 15 #include "dbus/object_path.h" 16 #include "dbus/object_proxy.h" 17 #include "third_party/cros_system_api/dbus/service_constants.h" 18 19 namespace chromeos { 20 21 FakeBluetoothInputClient::Properties::Properties( 22 const PropertyChangedCallback& callback) 23 : BluetoothInputClient::Properties( 24 NULL, 25 bluetooth_input::kBluetoothInputInterface, 26 callback) { 27 } 28 29 FakeBluetoothInputClient::Properties::~Properties() { 30 } 31 32 void FakeBluetoothInputClient::Properties::Get( 33 dbus::PropertyBase* property, 34 dbus::PropertySet::GetCallback callback) { 35 VLOG(1) << "Get " << property->name(); 36 callback.Run(false); 37 } 38 39 void FakeBluetoothInputClient::Properties::GetAll() { 40 VLOG(1) << "GetAll"; 41 } 42 43 void FakeBluetoothInputClient::Properties::Set( 44 dbus::PropertyBase *property, 45 dbus::PropertySet::SetCallback callback) { 46 VLOG(1) << "Set " << property->name(); 47 callback.Run(false); 48 } 49 50 51 FakeBluetoothInputClient::FakeBluetoothInputClient() { 52 } 53 54 FakeBluetoothInputClient::~FakeBluetoothInputClient() { 55 // Clean up Properties structures 56 STLDeleteValues(&properties_map_); 57 } 58 59 void FakeBluetoothInputClient::AddObserver(Observer* observer) { 60 observers_.AddObserver(observer); 61 } 62 63 void FakeBluetoothInputClient::RemoveObserver(Observer* observer) { 64 observers_.RemoveObserver(observer); 65 } 66 67 FakeBluetoothInputClient::Properties* 68 FakeBluetoothInputClient::GetProperties(const dbus::ObjectPath& object_path) { 69 PropertiesMap::iterator iter = properties_map_.find(object_path); 70 if (iter != properties_map_.end()) 71 return iter->second; 72 return NULL; 73 } 74 75 void FakeBluetoothInputClient::AddInputDevice( 76 const dbus::ObjectPath& object_path) { 77 if (properties_map_.find(object_path) != properties_map_.end()) 78 return; 79 80 Properties* properties = new Properties(base::Bind( 81 &FakeBluetoothInputClient::OnPropertyChanged, 82 base::Unretained(this), 83 object_path)); 84 85 // Mark Apple mouse and keyboard as ReconnectMode "any" and the Motorola and 86 // Microsoft devices as ReconnectMode "device". 87 if (object_path.value() == FakeBluetoothDeviceClient::kMotorolaKeyboardPath || 88 object_path.value() == FakeBluetoothDeviceClient::kMicrosoftMousePath) { 89 properties->reconnect_mode.ReplaceValue( 90 bluetooth_input::kDeviceReconnectModeProperty); 91 } else { 92 properties->reconnect_mode.ReplaceValue( 93 bluetooth_input::kAnyReconnectModeProperty); 94 } 95 96 properties_map_[object_path] = properties; 97 98 FOR_EACH_OBSERVER(BluetoothInputClient::Observer, observers_, 99 InputAdded(object_path)); 100 } 101 102 void FakeBluetoothInputClient::RemoveInputDevice( 103 const dbus::ObjectPath& object_path) { 104 PropertiesMap::iterator it = properties_map_.find(object_path); 105 106 if (it == properties_map_.end()) 107 return; 108 109 FOR_EACH_OBSERVER(BluetoothInputClient::Observer, observers_, 110 InputRemoved(object_path)); 111 112 delete it->second; 113 properties_map_.erase(it); 114 } 115 116 void FakeBluetoothInputClient::OnPropertyChanged( 117 const dbus::ObjectPath& object_path, 118 const std::string& property_name) { 119 FOR_EACH_OBSERVER(BluetoothInputClient::Observer, observers_, 120 InputPropertyChanged(object_path, property_name)); 121 } 122 123 } // namespace chromeos 124