#ifndef ASH_SYSTEM_HUMAN_PRESENCE_LOCK_ON_LEAVE_CONTROLLER_H_
#define ASH_SYSTEM_HUMAN_PRESENCE_LOCK_ON_LEAVE_CONTROLLER_H_
#include "ash/ash_export.h"
#include "ash/system/human_presence/human_presence_orientation_controller.h"
#include "base/memory/weak_ptr.h"
#include "base/scoped_observation.h"
#include "chromeos/ash/components/dbus/hps/hps_service.pb.h"
#include "chromeos/ash/components/dbus/human_presence/human_presence_dbus_client.h"
namespace ash {
class ASH_EXPORT LockOnLeaveController
: public HumanPresenceOrientationController::Observer,
HumanPresenceDBusClient::Observer {
public:
enum class ConfiguredLockOnLeaveState {
kUnknown,
kEnabled,
kDisabled,
};
LockOnLeaveController();
LockOnLeaveController(const LockOnLeaveController&) = delete;
LockOnLeaveController& operator=(const LockOnLeaveController&) = delete;
~LockOnLeaveController() override;
void EnableLockOnLeave();
void DisableLockOnLeave();
void OnOrientationChanged(bool suitable_for_human_presence) override;
void OnHpsSenseChanged(const hps::HpsResultProto&) override;
void OnHpsNotifyChanged(const hps::HpsResultProto&) override;
void OnRestart() override;
void OnShutdown() override;
private:
void OnServiceAvailable(bool service_available);
void ReconfigViaDbus();
bool service_available_ = false;
bool want_lock_on_leave_ = false;
bool suitable_for_human_presence_ = false;
ConfiguredLockOnLeaveState configured_state_ =
ConfiguredLockOnLeaveState::kUnknown;
base::ScopedObservation<HumanPresenceDBusClient,
HumanPresenceDBusClient::Observer>
human_presence_observation_{this};
base::ScopedObservation<HumanPresenceOrientationController,
HumanPresenceOrientationController::Observer>
orientation_observation_{this};
base::WeakPtrFactory<LockOnLeaveController> weak_ptr_factory_{this};
};
}
#endif