blob: 44247ce7b0bbf8df746c47b1f7fcb4f2e5bb65df [file] [log] [blame]
// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "power_manager/powerd/system/dark_resume.h"
#include <string>
#include "power_manager/common/power_constants.h"
#include "power_manager/common/prefs.h"
#include "power_manager/powerd/system/wakeup_source_identifier_interface.h"
namespace power_manager {
namespace system {
DarkResume::DarkResume() {}
DarkResume::~DarkResume() {}
void DarkResume::Init(
PrefsInterface* prefs,
WakeupSourceIdentifierInterface* wakeup_source_identifier) {
DCHECK(prefs);
DCHECK(wakeup_source_identifier);
prefs_ = prefs;
wakeup_source_identifier_ = wakeup_source_identifier;
ReadDarkResumePref();
prefs_->AddObserver(this);
}
void DarkResume::HandleSuccessfulResume() {
in_dark_resume_ = false;
if (wakeup_source_identifier_->InputDeviceCausedLastWake()) {
VLOG(1) << "User triggered wake";
} else {
VLOG(1) << "Wake not triggered by user";
if (enabled_) {
LOG(INFO) << "In dark resume";
in_dark_resume_ = true;
}
}
}
bool DarkResume::InDarkResume() {
return in_dark_resume_;
}
bool DarkResume::IsEnabled() {
return enabled_;
}
void DarkResume::ExitDarkResume() {
if (in_dark_resume_)
LOG(INFO) << "Transitioning from dark resume to full resume";
in_dark_resume_ = false;
}
void DarkResume::OnPrefChanged(const std::string& pref_name) {
if (pref_name != kDisableDarkResumePref)
return;
ReadDarkResumePref();
}
void DarkResume::ReadDarkResumePref() {
bool disable = false;
enabled_ = (!prefs_->GetBool(kDisableDarkResumePref, &disable) || !disable);
LOG(INFO) << "Dark resume " << (enabled_ ? "enabled" : "disabled");
}
} // namespace system
} // namespace power_manager