#ifndef ASH_PROJECTOR_PROJECTOR_UI_CONTROLLER_H_
#define ASH_PROJECTOR_PROJECTOR_UI_CONTROLLER_H_
#include "ash/ash_export.h"
#include "ash/projector/projector_metrics.h"
#include "ash/public/cpp/projector/projector_session.h"
#include "ash/strings/grit/ash_strings.h"
#include "base/memory/raw_ptr.h"
#include "base/scoped_observation.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "third_party/skia/include/core/SkColor.h"
namespace aura {
class Window;
}
namespace ash {
class ProjectorControllerImpl;
struct AnnotatorTool;
class ASH_EXPORT ProjectorUiController : public ProjectorSessionObserver {
public:
static void ShowFailureNotification(
int message_id,
int title_id = IDS_ASH_PROJECTOR_FAILURE_TITLE);
static void ShowSaveFailureNotification();
explicit ProjectorUiController(ProjectorControllerImpl* projector_controller);
ProjectorUiController(const ProjectorUiController&) = delete;
ProjectorUiController& operator=(const ProjectorUiController&) = delete;
~ProjectorUiController() override;
virtual void ShowAnnotationTray(aura::Window* current_root);
virtual void HideAnnotationTray();
virtual void EnableAnnotatorTool();
virtual void SetAnnotatorTool(const AnnotatorTool& tool);
void ResetTools();
void OnCanvasInitialized(bool success);
bool GetAnnotatorAvailability();
void ToggleAnnotationTray();
void OnRecordedWindowChangingRoot(aura::Window* new_root);
bool is_annotator_enabled() { return annotator_enabled_; }
private:
void OnProjectorSessionActiveStateChanged(bool active) override;
ProjectorMarkerColor GetMarkerColorForMetrics(SkColor color);
void UpdateTrayEnabledState();
bool annotator_enabled_ = false;
raw_ptr<aura::Window, DanglingUntriaged | ExperimentalAsh> current_root_ =
nullptr;
absl::optional<bool> canvas_initialized_state_;
base::ScopedObservation<ProjectorSession, ProjectorSessionObserver>
projector_session_observation_{this};
};
}
#endif