| Index: chrome/browser/ui/app_list/app_list_syncable_service.cc
|
| diff --git a/chrome/browser/ui/app_list/app_list_syncable_service.cc b/chrome/browser/ui/app_list/app_list_syncable_service.cc
|
| index f4d38d99435653204034badc8b1bda7df44e83f4..1cee4246acf247cc5ed76d6dd7a648b5f2a0bbef 100644
|
| --- a/chrome/browser/ui/app_list/app_list_syncable_service.cc
|
| +++ b/chrome/browser/ui/app_list/app_list_syncable_service.cc
|
| @@ -9,6 +9,7 @@
|
| #include "chrome/browser/chrome_notification_types.h"
|
| #include "chrome/browser/extensions/extension_service.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/browser/ui/app_list/app_list_prefs.h"
|
| #include "chrome/browser/ui/app_list/app_list_service.h"
|
| #include "chrome/browser/ui/app_list/extension_app_item.h"
|
| #include "chrome/browser/ui/app_list/extension_app_model_builder.h"
|
| @@ -203,6 +204,54 @@ class AppListSyncableService::ModelObserver : public AppListModelObserver {
|
| DISALLOW_COPY_AND_ASSIGN(ModelObserver);
|
| };
|
|
|
| +// AppListSyncableService::PrefUpdater
|
| +
|
| +class AppListSyncableService::PrefUpdater : public AppListModelObserver {
|
| + public:
|
| + explicit PrefUpdater(AppListPrefs* app_list_prefs, AppListModel* model)
|
| + : app_list_prefs_(app_list_prefs), model_(model) {
|
| + model_->AddObserver(this);
|
| + }
|
| +
|
| + virtual ~PrefUpdater() { model_->RemoveObserver(this); }
|
| +
|
| + private:
|
| + void UpdatePrefsFromAppListItem(AppListItem* item) {
|
| + // Write synced data to local pref.
|
| + AppListPrefs::AppListInfo info;
|
| + if (item->GetItemType() == AppListFolderItem::kItemType)
|
| + info.item_type = AppListPrefs::AppListInfo::FOLDER_ITEM;
|
| + else if (item->GetItemType() == ExtensionAppItem::kItemType)
|
| + info.item_type = AppListPrefs::AppListInfo::APP_ITEM;
|
| + else
|
| + NOTREACHED();
|
| +
|
| + info.parent_id = item->folder_id();
|
| + info.position = item->position();
|
| + info.name = item->name();
|
| +
|
| + app_list_prefs_->SetAppListInfo(item->id(), info);
|
| + }
|
| +
|
| + // Overridden from AppListModelObserver:
|
| + virtual void OnAppListItemAdded(AppListItem* item) OVERRIDE {
|
| + UpdatePrefsFromAppListItem(item);
|
| + }
|
| +
|
| + virtual void OnAppListItemWillBeDeleted(AppListItem* item) OVERRIDE {
|
| + app_list_prefs_->DeleteAppListInfo(item->id());
|
| + }
|
| +
|
| + virtual void OnAppListItemUpdated(AppListItem* item) OVERRIDE {
|
| + UpdatePrefsFromAppListItem(item);
|
| + }
|
| +
|
| + AppListPrefs* app_list_prefs_;
|
| + AppListModel* model_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(PrefUpdater);
|
| +};
|
| +
|
| // AppListSyncableService
|
|
|
| AppListSyncableService::AppListSyncableService(
|
| @@ -264,6 +313,9 @@ void AppListSyncableService::BuildModel() {
|
| apps_builder_->InitializeWithProfile(profile_, model_.get());
|
| }
|
|
|
| + pref_updater_.reset(
|
| + new PrefUpdater(AppListPrefs::Get(profile_), model_.get()));
|
| +
|
| if (app_list::switches::IsDriveAppsInAppListEnabled())
|
| drive_app_provider_.reset(new DriveAppProvider(profile_));
|
| }
|
|
|