#ifndef ASH_PUBLIC_CPP_AMBIENT_AMBIENT_UI_MODEL_H_
#define ASH_PUBLIC_CPP_AMBIENT_AMBIENT_UI_MODEL_H_
#include <optional>
#include "ash/public/cpp/ash_public_export.h"
#include "base/observer_list.h"
#include "base/observer_list_types.h"
#include "base/time/time.h"
namespace ash {
enum class AmbientUiVisibility {
kShouldShow,
kPreview,
kHidden,
kClosed,
};
enum class AmbientUiMode {
kLockScreenUi = 0,
kInSessionUi = 1,
kMaxValue = kInSessionUi,
};
struct AmbientJitterConfig {
static constexpr int kDefaultStepSize = 2;
static constexpr int kDefaultMaxAbsTranslation = 10;
int step_size = kDefaultStepSize;
int x_min_translation = -kDefaultMaxAbsTranslation;
int x_max_translation = kDefaultMaxAbsTranslation;
int y_min_translation = -kDefaultMaxAbsTranslation;
int y_max_translation = kDefaultMaxAbsTranslation;
};
constexpr base::TimeDelta kLockScreenInactivityTimeout = base::Seconds(7);
constexpr base::TimeDelta kLockScreenBackgroundTimeout = base::Seconds(5);
constexpr base::TimeDelta kPhotoRefreshInterval = base::Seconds(60);
constexpr float kAnimationPlaybackSpeed = 1.f;
constexpr base::TimeDelta kManagedScreensaverInactivityTimeout =
base::Seconds(7);
constexpr base::TimeDelta kManagedScreensaverImageRefreshInterval =
base::Seconds(60);
class ASH_PUBLIC_EXPORT AmbientUiModelObserver : public base::CheckedObserver {
public:
virtual void OnAmbientUiVisibilityChanged(AmbientUiVisibility visibility) {}
virtual void OnLockScreenInactivityTimeoutChanged(base::TimeDelta timeout) {}
virtual void OnBackgroundLockScreenTimeoutChanged(base::TimeDelta timeout) {}
};
class ASH_PUBLIC_EXPORT AmbientUiModel {
public:
static AmbientUiModel* Get();
AmbientUiModel();
AmbientUiModel(const AmbientUiModel&) = delete;
AmbientUiModel& operator=(AmbientUiModel&) = delete;
~AmbientUiModel();
void AddObserver(AmbientUiModelObserver* observer);
void RemoveObserver(AmbientUiModelObserver* observer);
void SetUiVisibility(AmbientUiVisibility visibility);
AmbientUiVisibility ui_visibility() const { return ui_visibility_; }
void SetLockScreenInactivityTimeout(base::TimeDelta timeout);
base::TimeDelta lock_screen_inactivity_timeout() const {
return lock_screen_inactivity_timeout_;
}
void SetBackgroundLockScreenTimeout(base::TimeDelta timeout);
base::TimeDelta background_lock_screen_timeout() const {
return background_lock_screen_timeout_;
}
void SetPhotoRefreshInterval(base::TimeDelta interval);
base::TimeDelta photo_refresh_interval() const {
return photo_refresh_interval_;
}
void set_animation_playback_speed(float animation_playback_speed) {
animation_playback_speed_ = animation_playback_speed;
}
float animation_playback_speed() const { return animation_playback_speed_; }
AmbientJitterConfig GetSlideshowPeripheralUiJitterConfig();
AmbientJitterConfig GetAnimationJitterConfig();
void set_jitter_config_for_testing(const AmbientJitterConfig& jitter_config) {
jitter_config_for_testing_ = jitter_config;
}
private:
void NotifyAmbientUiVisibilityChanged();
void NotifyLockScreenInactivityTimeoutChanged();
void NotifyBackgroundLockScreenTimeoutChanged();
AmbientUiVisibility ui_visibility_ = AmbientUiVisibility::kClosed;
base::TimeDelta lock_screen_inactivity_timeout_ =
kLockScreenInactivityTimeout;
base::TimeDelta background_lock_screen_timeout_ =
kLockScreenBackgroundTimeout;
base::TimeDelta photo_refresh_interval_ = kPhotoRefreshInterval;
float animation_playback_speed_ = kAnimationPlaybackSpeed;
std::optional<AmbientJitterConfig> jitter_config_for_testing_;
base::ObserverList<AmbientUiModelObserver> observers_;
};
ASH_PUBLIC_EXPORT std::ostream& operator<<(std::ostream& out,
AmbientUiMode mode);
ASH_PUBLIC_EXPORT std::ostream& operator<<(std::ostream& out,
AmbientUiVisibility visibility);
}
#endif