blob: f887ac40088b3c6f32ac8dd65c9d186ec0579916 [file] [log] [blame]
// 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_PROJECTOR_MODEL_PROJECTOR_UI_MODEL_H_
#define ASH_PROJECTOR_MODEL_PROJECTOR_UI_MODEL_H_
#include "ash/ash_export.h"
#include "base/observer_list.h"
#include "base/observer_list_types.h"
namespace ash {
// A checked observer which receives notification of changes to the Projector UI
// model.
class ASH_EXPORT ProjectorUiModelObserver : public base::CheckedObserver {
public:
ProjectorUiModelObserver() = default;
ProjectorUiModelObserver(const ProjectorUiModelObserver&) = delete;
ProjectorUiModelObserver& operator=(const ProjectorUiModelObserver&) = delete;
~ProjectorUiModelObserver() override = default;
// Invoked when the bar state is changed.
virtual void OnProjectorBarStateChanged(bool enabled) {}
};
// Models the Projector UI.
class ASH_EXPORT ProjectorUiModel {
public:
ProjectorUiModel();
ProjectorUiModel(const ProjectorUiModel&) = delete;
ProjectorUiModel& operator=(const ProjectorUiModel&) = delete;
~ProjectorUiModel();
// Adds/removes the specified |observer|.
void AddObserver(ProjectorUiModelObserver* observer);
void RemoveObserver(ProjectorUiModelObserver* observer);
void SetBarEnabled(bool enabled);
bool bar_enabled() const { return enabled_; }
private:
void NotifyBarStateChanged(bool enabled);
// Whether the projector bar is enabled.
bool enabled_ = false;
base::ObserverList<ProjectorUiModelObserver> observers_;
};
} // namespace ash
#endif // ASH_PROJECTOR_MODEL_PROJECTOR_UI_MODEL_H_