| // 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. |
| |
| #ifndef CHROME_BROWSER_UI_APP_LIST_APP_LIST_MODEL_BUILDER_H_ |
| #define CHROME_BROWSER_UI_APP_LIST_APP_LIST_MODEL_BUILDER_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include "base/macros.h" |
| #include "chrome/browser/ui/app_list/app_list_model_updater.h" |
| #include "chrome/browser/ui/app_list/app_list_syncable_service.h" |
| |
| class AppListControllerDelegate; |
| class ChromeAppListItem; |
| class Profile; |
| |
| // This abstract class populates and maintains the given |model| with |
| // information from |profile| for the specific item type. |
| class AppListModelBuilder { |
| public: |
| // |controller| is owned by implementation of AppListService. |
| AppListModelBuilder(AppListControllerDelegate* controller, |
| const char* item_type); |
| virtual ~AppListModelBuilder(); |
| |
| // Initialize to use app-list sync and sets |service_| to |service|. |
| // |service| is the owner of this instance. |
| void Initialize(app_list::AppListSyncableService* service, |
| Profile* profile, |
| AppListModelUpdater* model_updater); |
| |
| protected: |
| // Builds the model with the current profile. |
| virtual void BuildModel() = 0; |
| |
| app_list::AppListSyncableService* service() { return service_; } |
| |
| Profile* profile() { return profile_; } |
| |
| AppListControllerDelegate* controller() { return controller_; } |
| |
| AppListModelUpdater* model_updater() { return model_updater_; } |
| |
| // Inserts an app based on app ordinal prefs. |
| virtual void InsertApp(std::unique_ptr<ChromeAppListItem> app); |
| |
| // Removes an app based on app id. If |unsynced_change| is set to true then |
| // app is removed only from model and sync service is not used. |
| virtual void RemoveApp(const std::string& id, bool unsynced_change); |
| |
| const app_list::AppListSyncableService::SyncItem* GetSyncItem( |
| const std::string& id); |
| |
| // Returns app instance matching |id| or nullptr. |
| ChromeAppListItem* GetAppItem(const std::string& id); |
| |
| private: |
| // Unowned pointers to the service that owns this and associated profile. |
| app_list::AppListSyncableService* service_ = nullptr; |
| Profile* profile_ = nullptr; |
| |
| // Unowned pointer to an app list model updater. |
| AppListModelUpdater* model_updater_ = nullptr; |
| |
| // Unowned pointer to the app list controller. |
| AppListControllerDelegate* controller_; |
| |
| // Global constant defined for each item type. |
| const char* item_type_; |
| |
| DISALLOW_COPY_AND_ASSIGN(AppListModelBuilder); |
| }; |
| |
| #endif // CHROME_BROWSER_UI_APP_LIST_APP_LIST_MODEL_BUILDER_H_ |