// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromeos/dbus/fake_nfc_manager_client.h"
#include "base/bind.h"
#include "base/logging.h"
#include "dbus/object_path.h"
#include "third_party/cros_system_api/dbus/service_constants.h"
namespace chromeos {
const char FakeNfcManagerClient::kDefaultAdapterPath[] = "/fake/nfc0";
FakeNfcManagerClient::Properties::Properties(
const PropertyChangedCallback& callback)
: NfcManagerClient::Properties(NULL, callback) {
}
FakeNfcManagerClient::Properties::~Properties() {
}
void FakeNfcManagerClient::Properties::Get(
dbus::PropertyBase* property,
dbus::PropertySet::GetCallback callback) {
VLOG(1) << "Get " << property->name();
callback.Run(false);
}
void FakeNfcManagerClient::Properties::GetAll() {
VLOG(1) << "GetAll";
}
void FakeNfcManagerClient::Properties::Set(
dbus::PropertyBase* property,
dbus::PropertySet::SetCallback callback) {
VLOG(1) << "Set " << property->name();
callback.Run(false);
}
FakeNfcManagerClient::FakeNfcManagerClient() {
properties_.reset(new Properties(base::Bind(
&FakeNfcManagerClient::OnPropertyChanged, base::Unretained(this))));
AddAdapter(kDefaultAdapterPath);
}
FakeNfcManagerClient::~FakeNfcManagerClient() {
}
void FakeNfcManagerClient::Init(dbus::Bus* bus) {
}
void FakeNfcManagerClient::AddObserver(Observer* observer) {
observers_.AddObserver(observer);
}
void FakeNfcManagerClient::RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer);
}
FakeNfcManagerClient::Properties* FakeNfcManagerClient::GetProperties() {
return properties_.get();
}
void FakeNfcManagerClient::AddAdapter(const std::string& adapter_path) {
VLOG(1) << "Adding NFC adapter: " << adapter_path;
dbus::ObjectPath new_adapter(adapter_path);
std::pair<std::set<dbus::ObjectPath>::iterator, bool> result =
adapters_.insert(new_adapter);
if (!result.second) {
VLOG(1) << "Adapter \"" << adapter_path << "\" already exists.";
return;
}
// Create a vector containing all object paths in the set |adapters_|. This
// will copy all members of |adapters_| to |adapters|.
std::vector<dbus::ObjectPath> adapters(adapters_.begin(), adapters_.end());
properties_->adapters.ReplaceValue(adapters);
FOR_EACH_OBSERVER(Observer, observers_, AdapterAdded(new_adapter));
}
void FakeNfcManagerClient::RemoveAdapter(const std::string& adapter_path) {
VLOG(1) << "Removing NFC adapter: " << adapter_path;
dbus::ObjectPath to_remove(adapter_path);
if (adapters_.erase(to_remove) == 0) {
VLOG(1) << "No such adapter: \"" << adapter_path << "\"";
return;
}
std::vector<dbus::ObjectPath> adapters(adapters_.begin(), adapters_.end());
properties_->adapters.ReplaceValue(adapters);
FOR_EACH_OBSERVER(Observer, observers_, AdapterRemoved(to_remove));
}
void FakeNfcManagerClient::OnPropertyChanged(
const std::string& property_name) {
FOR_EACH_OBSERVER(Observer, observers_,
ManagerPropertyChanged(property_name));
}
} // namespace chromeos