Chromium Code Reviews| Index: chrome/browser/ui/app_list/arc_app_model_builder.cc |
| diff --git a/chrome/browser/ui/app_list/arc_app_model_builder.cc b/chrome/browser/ui/app_list/arc_app_model_builder.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..c13dedc07a27f0a6fe87a1771ab536e849be3115 |
| --- /dev/null |
| +++ b/chrome/browser/ui/app_list/arc_app_model_builder.cc |
| @@ -0,0 +1,118 @@ |
| +// Copyright 2015 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 "chrome/browser/ui/app_list/arc_app_model_builder.h" |
| + |
| +#include "chrome/browser/profiles/profile.h" |
| +#include "chrome/browser/ui/app_list/app_list_syncable_service.h" |
| +#include "chrome/browser/ui/app_list/arc_app_item.h" |
| +#include "ui/app_list/app_list_model.h" |
| + |
| +ArcAppModelBuilder::ArcAppModelBuilder(AppListControllerDelegate* controller) |
| + : controller_(controller) { |
| +} |
| + |
| +ArcAppModelBuilder::~ArcAppModelBuilder() { |
| + prefs_->RemoveObserver(this); |
| +} |
| + |
| +void ArcAppModelBuilder::InitializeWithService( |
|
Matt Giuca
2015/11/19 09:12:36
This is almost the same as ExtensionAppModelBuilde
khmel1
2015/11/19 17:11:42
Done.
|
| + app_list::AppListSyncableService* service, |
| + app_list::AppListModel* model) { |
| + DCHECK(!service_ && !profile_); |
| + model_ = model; |
| + service_ = service; |
| + profile_ = service->profile(); |
| + |
| + BuildModel(); |
| +} |
| + |
| +void ArcAppModelBuilder::InitializeWithProfile(Profile* profile, |
| + app_list::AppListModel* model) { |
|
Matt Giuca
2015/11/19 09:12:36
This is almost the same as ExtensionAppModelBuilde
khmel1
2015/11/19 17:11:42
Yes, need more explanation here. There are 2 possi
|
| + DCHECK(!service_ && !profile_); |
| + model_ = model; |
| + profile_ = profile; |
| + |
| + BuildModel(); |
| +} |
| + |
| +void ArcAppModelBuilder::BuildModel() { |
| + prefs_ = ArcAppListPrefs::Get(profile_); |
| + |
| + PopulateApps(); |
| + prefs_->AddObserver(this); |
| +} |
| + |
| +void ArcAppModelBuilder::PopulateApps() { |
| + std::vector<std::string> app_ids = prefs_->GetAppIds(); |
| + for (auto& app_id : app_ids) { |
| + scoped_ptr<ArcAppListPrefs::AppInfo> app_info = prefs_->GetApp(app_id); |
| + if (!app_info) { |
| + continue; |
| + } |
| + InsertApp(CreateApp(app_id, *app_info)); |
| + } |
| +} |
| + |
| +ArcAppItem* ArcAppModelBuilder::GetArcAppItem(const std::string& item_id) { |
|
Matt Giuca
2015/11/19 09:12:36
This is almost the same as ExtensionAppModelBuilde
khmel1
2015/11/19 17:11:42
Refactored. BTW. Which error do you refer to?
|
| + app_list::AppListItem* item = model_->FindItem(item_id); |
| + LOG_IF(ERROR, item && |
| + item->GetItemType() != ArcAppItem::kItemType) |
| + << "App Item matching id: " << item_id |
| + << " has incorrect type: '" << item->GetItemType() << "'"; |
| + return static_cast<ArcAppItem*>(item); |
| +} |
| + |
| +scoped_ptr<ArcAppItem> ArcAppModelBuilder::CreateApp( |
| + const std::string& app_id, |
| + const ArcAppListPrefs::AppInfo& app_info) { |
| + const app_list::AppListSyncableService::SyncItem* sync_item = |
| + service_ ? service_->GetSyncItem(app_id) : NULL; |
| + scoped_ptr<ArcAppItem> app_item(new ArcAppItem(profile_, |
| + sync_item, |
| + app_id, |
| + app_info.name, |
| + app_info.ready)); |
| + return app_item; |
| +} |
| + |
| +void ArcAppModelBuilder::InsertApp(scoped_ptr<ArcAppItem> app) { |
|
Matt Giuca
2015/11/19 09:12:36
This is exactly the same as ExtensionAppModelBuild
khmel1
2015/11/19 17:11:42
Done.
|
| + DCHECK(!GetArcAppItem(app->id())); |
| + if (service_) { |
| + service_->AddItem(app.Pass()); |
| + return; |
| + } |
| + model_->AddItem(app.Pass()); |
| +} |
| + |
| +void ArcAppModelBuilder::OnAppRegistered( |
| + const std::string& app_id, |
| + const ArcAppListPrefs::AppInfo& app_info) { |
| + InsertApp(CreateApp(app_id, app_info)); |
| +} |
| + |
| +void ArcAppModelBuilder::OnAppReadyChanged(const std::string& app_id, |
| + bool ready) { |
| + ArcAppItem* app_item = GetArcAppItem(app_id); |
| + if (!app_item) { |
| + LOG(WARNING) << "Could not update the state of ARC app(" << app_id |
| + << ") because it was not found."; |
| + return; |
| + } |
| + |
| + app_item->SetReady(ready); |
| +} |
| + |
| +void ArcAppModelBuilder::OnAppIconUpdated(const std::string& app_id, |
| + ui::ScaleFactor scale_factor) { |
| + ArcAppItem* app_item = GetArcAppItem(app_id); |
| + if (!app_item) { |
| + LOG(WARNING) << "Could not update the icon of ARC app(" << app_id |
| + << ") because it was not found."; |
| + return; |
| + } |
| + |
| + // Initiate async icon reloading. |
| + app_item->arc_app_icon()->LoadForScaleFactor(scale_factor); |
| +} |