1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- // Copyright 2021 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 ASH_APP_LIST_APP_LIST_MODEL_PROVIDER_H_
- #define ASH_APP_LIST_APP_LIST_MODEL_PROVIDER_H_
- #include "ash/app_list/model/app_list_model.h"
- #include "ash/app_list/model/search/search_model.h"
- #include "ash/ash_export.h"
- #include "base/observer_list.h"
- namespace ash {
- // Used by app list views hierarchy to track the active app list model, and the
- // app list search model. The active model state is maintained by
- // `AppListControllerImpl`, which also serves as an `AppListViewDelegate`.
- // Models are owned by ash embedder (chrome), which use `AppListController`
- // interface to update active models. Main motivation is effectively handling
- // model changes when the active user changes - app list model contains user
- // specific data, and the model information shown in the UI should be updated
- // whenever the active user changes. This class supports this without a need to
- // rebuild the currently used model from scratch.
- // Only one instance is expected to exist at a time, and it can be retrieved
- // using `AppListModelProvider::Get()`.
- class ASH_EXPORT AppListModelProvider {
- public:
- class Observer : public base::CheckedObserver {
- public:
- ~Observer() override = default;
- // Called when the active app list model changes.
- virtual void OnActiveAppListModelsChanged(AppListModel* model,
- SearchModel* search_model) = 0;
- };
- AppListModelProvider();
- AppListModelProvider(const AppListModelProvider&) = delete;
- AppListModelProvider& operator=(const AppListModelProvider&) = delete;
- ~AppListModelProvider();
- // Returns a global app list model provider. Only one instance is expected to
- // exist at a time. In production and ash based tests, it's the instance owned
- // by `AppListControllerImpl`.
- static AppListModelProvider* Get();
- // Sets active app list and app list search model.
- // NOTE: This method is expected to be primarily called by the class that
- // owns the `AppListModelProvider` instance (in production, that's
- // `AppListControllerImpl`).
- //
- // Both `model` and `search_model` can be null, in which case active models
- // will fallback to default models. This should generally only be done during
- // shutdown.
- void SetActiveModel(AppListModel* model, SearchModel* search_model);
- // Resets active app list and search model to the default one.
- void ClearActiveModel();
- void AddObserver(Observer* observer);
- void RemoveObserver(Observer* observer);
- // Gets the active app list model.
- // If an active model has not been set, it returns a default model.
- AppListModel* model() { return model_; }
- // Gets the active search model.
- // If an active model has not been set, it returns a default model.
- SearchModel* search_model() { return search_model_; }
- private:
- // Default, empty models that get returned if the provided models are null.
- // Primarily used for convenience, to avoid need for null checks in code that
- // uses app list model, and search model.
- AppListModel default_model_{nullptr};
- SearchModel default_search_model_;
- AppListModel* model_ = &default_model_;
- SearchModel* search_model_ = &default_search_model_;
- base::ObserverList<Observer> observers_;
- };
- } // namespace ash
- #endif // ASH_APP_LIST_APP_LIST_MODEL_PROVIDER_H_
|