#ifndef ASH_APP_LIST_QUICK_APP_ACCESS_MODEL_H_
#define ASH_APP_LIST_QUICK_APP_ACCESS_MODEL_H_
#include <optional>
#include <string>
#include "ash/app_list/model/app_list_item_observer.h"
#include "ash/public/cpp/app_list/app_list_controller_observer.h"
#include "base/observer_list.h"
#include "base/scoped_observation.h"
#include "base/time/time.h"
namespace gfx {
class ImageSkia;
class Size;
}
namespace ash {
class AppListItem;
class AppListController;
class QuickAppAccessModel : public AppListItemObserver,
public AppListControllerObserver {
public:
class Observer : public base::CheckedObserver {
public:
~Observer() override = default;
virtual void OnQuickAppShouldShowChanged(bool show_quick_app) = 0;
virtual void OnQuickAppIconChanged() = 0;
};
QuickAppAccessModel();
QuickAppAccessModel(const QuickAppAccessModel&) = delete;
QuickAppAccessModel& operator=(const QuickAppAccessModel&) = delete;
~QuickAppAccessModel() override;
void AddObserver(Observer* observer);
void RemoveObserver(Observer* observer);
bool SetQuickApp(const std::string& app_id);
void SetQuickAppActivated();
gfx::ImageSkia GetAppIcon(gfx::Size icon_size);
const std::u16string GetAppName() const;
const std::string& quick_app_id() const { return quick_app_id_; }
bool quick_app_should_show_state() const {
return quick_app_should_show_state_;
}
private:
void ItemDefaultIconChanged() override;
void ItemIconVersionChanged() override;
void ItemBeingDestroyed() override;
void OnAppListVisibilityChanged(bool shown, int64_t display_id) override;
AppListItem* GetQuickAppItem() const;
void UpdateQuickAppShouldShowState();
bool ShouldShowQuickApp();
void ClearQuickApp();
std::optional<base::TimeTicks> icon_load_start_time_;
base::ObserverList<Observer> observers_;
base::ScopedObservation<AppListItem, AppListItemObserver> item_observation_{
this};
base::ScopedObservation<AppListController, AppListControllerObserver>
app_list_controller_observer_{this};
std::string quick_app_id_;
bool quick_app_should_show_state_ = false;
};
}
#endif