| Index: chromeos/dbus/power_policy_controller.cc
|
| diff --git a/chromeos/dbus/power_policy_controller.cc b/chromeos/dbus/power_policy_controller.cc
|
| index 25849106a2e5944f54c80a4272512c36511a67f6..110bf3310037b8c7f1f5414dbb19aafb3a370f20 100644
|
| --- a/chromeos/dbus/power_policy_controller.cc
|
| +++ b/chromeos/dbus/power_policy_controller.cc
|
| @@ -12,64 +12,6 @@ namespace chromeos {
|
|
|
| namespace {
|
|
|
| -// If |pref|, a PrefService::Preference containing an integer, has been
|
| -// explicitly set to 0 or a positive value, assigns it to |proto_field|, a
|
| -// int32 field in |proto|, a google::protobuf::MessageLite*. If |proto|
|
| -// was updated, |got_prefs|, a bool*, is set to true; otherwise it is left
|
| -// unchanged.
|
| -#define SET_DELAY_FROM_PREF(pref, proto_field, proto, got_prefs) \
|
| - { \
|
| - int value = GetIntPrefValue(pref); \
|
| - if (value >= 0) { \
|
| - (proto)->set_##proto_field(value); \
|
| - *got_prefs = true; \
|
| - } \
|
| - }
|
| -
|
| -// Similar to SET_DELAY_FROM_PREF() but sets a
|
| -// power_manager::PowerManagementPolicy_Action field instead.
|
| -#define SET_ACTION_FROM_PREF(pref, proto_field, proto, got_prefs) \
|
| - { \
|
| - int value = GetIntPrefValue(pref); \
|
| - if (value >= 0) { \
|
| - (proto)->set_##proto_field( \
|
| - static_cast<power_manager::PowerManagementPolicy_Action>(value)); \
|
| - *got_prefs = true; \
|
| - } \
|
| - }
|
| -
|
| -// If |pref|, a PrefService::Preference containing a bool, has been set,
|
| -// assigns it to |proto_field|, a bool field in |proto|, a
|
| -// google::protobuf::MessageLite*. If |proto| was updated, |got_prefs|, a
|
| -// bool*, is set to true; otherwise it is left unchanged.
|
| -#define SET_BOOL_FROM_PREF(pref, proto_field, proto, got_prefs) \
|
| - if (!pref.IsDefaultValue()) { \
|
| - bool value = false; \
|
| - if (pref.GetValue()->GetAsBoolean(&value)) { \
|
| - (proto)->set_##proto_field(value); \
|
| - *got_prefs = true; \
|
| - } else { \
|
| - LOG(DFATAL) << pref.name() << " pref has non-boolean value"; \
|
| - } \
|
| - }
|
| -
|
| -// Returns a zero or positive integer value from |pref|. Returns -1 if the
|
| -// pref is unset and logs an error if it's set to a negative value.
|
| -int GetIntPrefValue(const PrefService::Preference& pref) {
|
| - if (pref.IsDefaultValue())
|
| - return -1;
|
| -
|
| - int value = -1;
|
| - if (!pref.GetValue()->GetAsInteger(&value)) {
|
| - LOG(DFATAL) << pref.name() << " pref has non-integer value";
|
| - return -1;
|
| - }
|
| -
|
| - if (value < 0)
|
| - LOG(WARNING) << pref.name() << " pref has negative value";
|
| - return value;
|
| -}
|
| -
|
| // Returns the power_manager::PowerManagementPolicy_Action value
|
| // corresponding to |action|.
|
| power_manager::PowerManagementPolicy_Action GetProtoAction(
|
| @@ -99,7 +41,7 @@ PowerPolicyController::PowerPolicyController(DBusThreadManager* manager,
|
| next_block_id_(1) {
|
| manager_->AddObserver(this);
|
| client_->AddObserver(this);
|
| - SendEmptyPolicy();
|
| + SendCurrentPolicy();
|
| }
|
|
|
| PowerPolicyController::~PowerPolicyController() {
|
| @@ -113,70 +55,45 @@ PowerPolicyController::~PowerPolicyController() {
|
| manager_ = NULL;
|
| }
|
|
|
| -void PowerPolicyController::UpdatePolicyFromPrefs(
|
| - const PrefService::Preference& ac_screen_dim_delay_ms_pref,
|
| - const PrefService::Preference& ac_screen_off_delay_ms_pref,
|
| - const PrefService::Preference& ac_screen_lock_delay_ms_pref,
|
| - const PrefService::Preference& ac_idle_warning_delay_ms_pref,
|
| - const PrefService::Preference& ac_idle_delay_ms_pref,
|
| - const PrefService::Preference& battery_screen_dim_delay_ms_pref,
|
| - const PrefService::Preference& battery_screen_off_delay_ms_pref,
|
| - const PrefService::Preference& battery_screen_lock_delay_ms_pref,
|
| - const PrefService::Preference& battery_idle_warning_delay_ms_pref,
|
| - const PrefService::Preference& battery_idle_delay_ms_pref,
|
| - const PrefService::Preference& idle_action_pref,
|
| - const PrefService::Preference& lid_closed_action_pref,
|
| - const PrefService::Preference& use_audio_activity_pref,
|
| - const PrefService::Preference& use_video_activity_pref,
|
| - const PrefService::Preference& presentation_idle_delay_factor_pref) {
|
| +void PowerPolicyController::ApplyPrefs(const PrefValues& values) {
|
| prefs_policy_.Clear();
|
| - bool got_prefs = false;
|
|
|
| power_manager::PowerManagementPolicy::Delays* delays =
|
| prefs_policy_.mutable_ac_delays();
|
| - SET_DELAY_FROM_PREF(
|
| - ac_screen_dim_delay_ms_pref, screen_dim_ms, delays, &got_prefs);
|
| - SET_DELAY_FROM_PREF(
|
| - ac_screen_off_delay_ms_pref, screen_off_ms, delays, &got_prefs);
|
| - SET_DELAY_FROM_PREF(
|
| - ac_screen_lock_delay_ms_pref, screen_lock_ms, delays, &got_prefs);
|
| - SET_DELAY_FROM_PREF(
|
| - ac_idle_warning_delay_ms_pref, idle_warning_ms, delays, &got_prefs);
|
| - SET_DELAY_FROM_PREF(ac_idle_delay_ms_pref, idle_ms, delays, &got_prefs);
|
| + delays->set_screen_dim_ms(values.ac_screen_dim_delay_ms);
|
| + delays->set_screen_off_ms(values.ac_screen_off_delay_ms);
|
| + delays->set_screen_lock_ms(values.ac_screen_lock_delay_ms);
|
| + delays->set_idle_warning_ms(values.ac_idle_warning_delay_ms);
|
| + delays->set_idle_ms(values.ac_idle_delay_ms);
|
| +
|
| + // If screen-locking is enabled, ensure that the screen is locked when
|
| + // it's turned off due to user inactivity.
|
| + if (values.enable_screen_lock && delays->screen_off_ms() > 0 &&
|
| + (delays->screen_lock_ms() <= 0 ||
|
| + delays->screen_off_ms() < delays->screen_lock_ms())) {
|
| + delays->set_screen_lock_ms(delays->screen_off_ms());
|
| + }
|
|
|
| delays = prefs_policy_.mutable_battery_delays();
|
| - SET_DELAY_FROM_PREF(
|
| - battery_screen_dim_delay_ms_pref, screen_dim_ms, delays, &got_prefs);
|
| - SET_DELAY_FROM_PREF(
|
| - battery_screen_off_delay_ms_pref, screen_off_ms, delays, &got_prefs);
|
| - SET_DELAY_FROM_PREF(
|
| - battery_screen_lock_delay_ms_pref, screen_lock_ms, delays, &got_prefs);
|
| - SET_DELAY_FROM_PREF(
|
| - battery_idle_warning_delay_ms_pref, idle_warning_ms, delays, &got_prefs);
|
| - SET_DELAY_FROM_PREF(battery_idle_delay_ms_pref, idle_ms, delays, &got_prefs);
|
| -
|
| - SET_ACTION_FROM_PREF(
|
| - idle_action_pref, idle_action, &prefs_policy_, &got_prefs);
|
| - SET_ACTION_FROM_PREF(
|
| - lid_closed_action_pref, lid_closed_action, &prefs_policy_, &got_prefs);
|
| -
|
| - SET_BOOL_FROM_PREF(
|
| - use_audio_activity_pref, use_audio_activity, &prefs_policy_, &got_prefs);
|
| - SET_BOOL_FROM_PREF(
|
| - use_video_activity_pref, use_video_activity, &prefs_policy_, &got_prefs);
|
| -
|
| - if (!presentation_idle_delay_factor_pref.IsDefaultValue()) {
|
| - double value = 0.0;
|
| - if (presentation_idle_delay_factor_pref.GetValue()->GetAsDouble(&value)) {
|
| - prefs_policy_.set_presentation_idle_delay_factor(value);
|
| - got_prefs = true;
|
| - } else {
|
| - LOG(DFATAL) << presentation_idle_delay_factor_pref.name()
|
| - << " pref has non-double value";
|
| - }
|
| + delays->set_screen_dim_ms(values.battery_screen_dim_delay_ms);
|
| + delays->set_screen_off_ms(values.battery_screen_off_delay_ms);
|
| + delays->set_screen_lock_ms(values.battery_screen_lock_delay_ms);
|
| + delays->set_idle_warning_ms(values.battery_idle_warning_delay_ms);
|
| + delays->set_idle_ms(values.battery_idle_delay_ms);
|
| + if (values.enable_screen_lock && delays->screen_off_ms() > 0 &&
|
| + (delays->screen_lock_ms() <= 0 ||
|
| + delays->screen_off_ms() < delays->screen_lock_ms())) {
|
| + delays->set_screen_lock_ms(delays->screen_off_ms());
|
| }
|
|
|
| - prefs_were_set_ = got_prefs;
|
| + prefs_policy_.set_idle_action(GetProtoAction(values.idle_action));
|
| + prefs_policy_.set_lid_closed_action(GetProtoAction(values.lid_closed_action));
|
| + prefs_policy_.set_use_audio_activity(values.use_audio_activity);
|
| + prefs_policy_.set_use_video_activity(values.use_video_activity);
|
| + prefs_policy_.set_presentation_idle_delay_factor(
|
| + values.presentation_idle_delay_factor);
|
| +
|
| + prefs_were_set_ = true;
|
| SendCurrentPolicy();
|
| }
|
|
|
|
|