blob: d25d6daf785ec461b45b6fb86366b87a37d8fd1d [file] [log] [blame]
#include "fake_android_property_manager.h"
#include <android-base/parseint.h>
#include <android-base/result.h>
#include <cerrno>
#include <map>
#include <string>
#include "modem_log_constants.h"
namespace pixel_modem {
bool FakeAndroidPropertyManager::GetBoolProperty(const std::string& key,
bool default_value) {
auto value_result = GetProperty(key);
return value_result.ok() ? (*value_result) == kTruthString : default_value;
}
std::string FakeAndroidPropertyManager::GetProperty(
const std::string& key, const std::string& default_value) {
auto value_result = GetProperty(key);
return value_result.ok() ? *value_result : default_value;
}
int FakeAndroidPropertyManager::GetIntProperty(const std::string& key,
int default_value) {
int value = default_value;
auto property_result = GetProperty(key);
if (property_result.ok()) {
android::base::ParseInt<int>((*property_result).data(), &value);
}
return value;
}
/**
* This function needs to copy the behaviour of `modem_logging_control` to
* ensure that the right properties are being set in order.
*
* More specifically, this function will also set the
* `kModemLoggingStatusProperty` whenever `kModemLoggingEnabledProperty` is
* set to simulate modem logging stopping / starting.
*/
bool FakeAndroidPropertyManager::SetProperty(const std::string& key,
const std::string& value) {
if (key == logging::kModemLoggingEnabledProperty) {
property_map_[logging::kModemLoggingStatusProperty.data()] = value;
// need to track if modem logging has restarted or not
if (value == kFalseString) {
modem_logging_has_been_off_ = true;
}
if (modem_logging_has_been_off_ && (value == kTruthString)) {
modem_logging_has_restarted_ = true;
}
}
property_map_[key] = value;
return true;
}
/**
* @brief Gets android system property if present.
*
* @param[in] key Name of property.
*
* @return Status of get operation and value if successful.
* @retval EINVAL Key not present in map.
*/
android::base::Result<std::string> FakeAndroidPropertyManager::GetProperty(
const std::string& key) {
const auto it = property_map_.find(key);
if (it == property_map_.end()) {
return android::base::Error()
<< "Property: " << key << " not found." << EINVAL;
}
return it->second;
}
} // namespace pixel_modem