#ifndef ASH_SYSTEM_POWER_POWER_PREFS_H_
#define ASH_SYSTEM_POWER_POWER_PREFS_H_
#include <memory>
#include "ash/ash_export.h"
#include "ash/public/cpp/session/session_observer.h"
#include "base/memory/raw_ptr.h"
#include "base/scoped_observation.h"
#include "base/time/tick_clock.h"
#include "base/time/time.h"
#include "chromeos/dbus/power/power_manager_client.h"
class PrefChangeRegistrar;
class PrefRegistrySimple;
class PrefService;
namespace chromeos {
class PowerPolicyController;
}
namespace power_manager {
class ScreenIdleState;
}
namespace ash {
class LockOnLeaveController;
class PowerPrefsTest;
class ASH_EXPORT PowerPrefs : public chromeos::PowerManagerClient::Observer,
public SessionObserver {
public:
PowerPrefs(chromeos::PowerPolicyController* power_policy_controller,
chromeos::PowerManagerClient* power_manager_client,
PrefService* local_state);
PowerPrefs(const PowerPrefs&) = delete;
PowerPrefs& operator=(const PowerPrefs&) = delete;
~PowerPrefs() override;
static void RegisterLocalStatePrefs(PrefRegistrySimple* registry);
static void RegisterSigninProfilePrefs(PrefRegistrySimple* registry);
static void RegisterUserProfilePrefs(PrefRegistrySimple* registry);
void set_tick_clock_for_test(base::TickClock* clock) { tick_clock_ = clock; }
private:
friend class PowerPrefsTest;
void ScreenIdleStateChanged(
const power_manager::ScreenIdleState& proto) override;
void OnLockStateChanged(bool locked) override;
void OnSigninScreenPrefServiceInitialized(PrefService* prefs) override;
void OnActiveUserPrefServiceChanged(PrefService* prefs) override;
void UpdatePowerPolicyFromPrefs();
void UpdatePowerPolicyFromPrefsChange();
void ObservePrefs(PrefService* prefs);
void ObserveLocalStatePrefs(PrefService* prefs);
const raw_ptr<chromeos::PowerPolicyController>
power_policy_controller_;
base::ScopedObservation<chromeos::PowerManagerClient,
chromeos::PowerManagerClient::Observer>
power_manager_client_observation_{this};
std::unique_ptr<PrefChangeRegistrar> profile_registrar_;
std::unique_ptr<PrefChangeRegistrar> local_state_registrar_;
std::unique_ptr<LockOnLeaveController> lock_on_leave_controller_;
raw_ptr<const base::TickClock> tick_clock_;
base::TimeTicks screen_lock_time_;
base::TimeTicks screen_idle_off_time_;
bool quick_dim_pref_enabled_ = false;
raw_ptr<PrefService> local_state_ = nullptr;
};
}
#endif