| Index: ui/base/android/system_ui_resource_manager.cc
|
| diff --git a/ui/base/android/system_ui_resource_manager.cc b/ui/base/android/system_ui_resource_manager.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f890d5263118efd7ad9ae666a4d0f1c8043baac5
|
| --- /dev/null
|
| +++ b/ui/base/android/system_ui_resource_manager.cc
|
| @@ -0,0 +1,97 @@
|
| +// Copyright 2014 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 "ui/base/android/system_ui_resource_manager.h"
|
| +
|
| +#include "ui/base/android/system_ui_resource_layer.h"
|
| +
|
| +namespace ui {
|
| +
|
| +SystemUIResourceManager::SystemUIResourceManager()
|
| + : ui_resource_provider_(NULL) {
|
| +}
|
| +
|
| +void SystemUIResourceManager::Subscribe(SystemUIResource::Type type,
|
| + SystemUIResourceLayer* layer) {
|
| + DCHECK(layer);
|
| + GetData(type)->Subscribe(layer);
|
| +}
|
| +
|
| +void SystemUIResourceManager::Unsubscribe(SystemUIResource::Type type,
|
| + SystemUIResourceLayer* layer) {
|
| + DCHECK(layer);
|
| + GetData(type)->Unsubscribe(layer);
|
| +}
|
| +
|
| +void SystemUIResourceManager::RefreshResourceOnSubscribers(
|
| + SystemUIResource::Type type) {
|
| + GetData(type)->RefreshResource();
|
| +}
|
| +
|
| +SystemUIResourceManager::Data* SystemUIResourceManager::GetData(
|
| + SystemUIResource::Type type) {
|
| + SystemUIResourceMap::iterator iter = resource_map_.find(type);
|
| + if (iter == resource_map_.end()) {
|
| + scoped_ptr<Data> resource_data = make_scoped_ptr(new Data());
|
| + resource_map_.set(type, resource_data.Pass());
|
| +
|
| + // Lazily build the resource.
|
| + BuildResource(type);
|
| + }
|
| + return resource_map_.get(type);
|
| +}
|
| +
|
| +UIResourceProvider* SystemUIResourceManager::GetUIResourceProvider() {
|
| + return ui_resource_provider_;
|
| +}
|
| +
|
| +SystemUIResourceManager::Data::Data() {
|
| +}
|
| +
|
| +SystemUIResourceManager::Data::~Data() {
|
| + if (resource_)
|
| + resource_->SetClient(NULL);
|
| +}
|
| +
|
| +void SystemUIResourceManager::Data::Subscribe(SystemUIResourceLayer* layer) {
|
| + DCHECK(layer);
|
| + if (resource_)
|
| + layer->SetUIResourceId(resource_->id());
|
| +
|
| + if (!subscribers_.HasObserver(layer))
|
| + subscribers_.AddObserver(layer);
|
| +}
|
| +
|
| +void SystemUIResourceManager::Data::Unsubscribe(SystemUIResourceLayer* layer) {
|
| + DCHECK(layer);
|
| + layer->SetUIResourceId(0);
|
| + subscribers_.RemoveObserver(layer);
|
| +}
|
| +
|
| +void SystemUIResourceManager::Data::SetResource(
|
| + scoped_ptr<SystemUIResource> resource) {
|
| + DCHECK(resource);
|
| + resource_ = resource.Pass();
|
| + resource_->SetClient(this);
|
| +
|
| + RefreshResource();
|
| +}
|
| +
|
| +void SystemUIResourceManager::Data::RefreshResource() {
|
| + if(!resource_)
|
| + return;
|
| +
|
| + resource_->Load();
|
| + FOR_EACH_OBSERVER(
|
| + SystemUIResourceLayer, subscribers_, SetUIResourceId(resource_->id()));
|
| +}
|
| +
|
| +void SystemUIResourceManager::Data::OnUIResourceIdChanged() {
|
| + DCHECK(resource_);
|
| +
|
| + FOR_EACH_OBSERVER(
|
| + SystemUIResourceLayer, subscribers_, SetUIResourceId(resource_->id()));
|
| +}
|
| +
|
| +} // namespace ui
|
|
|