dump_modemlog: move android_property_manager
android_property_manager is moved to its own folder in the root of the
modem folder. This is so that libeomservice proxy has a specific build
target to include.
Test: build, flash, check modem logs in bugreport
Bug: 302435001
Change-Id: Ifc4a0c888717f5c28cf9b642d0b978b495be29d0
diff --git a/modem/android_property_manager/Android.bp b/modem/android_property_manager/Android.bp
new file mode 100644
index 0000000..af89aec
--- /dev/null
+++ b/modem/android_property_manager/Android.bp
@@ -0,0 +1,9 @@
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+cc_library {
+ name: "modem_android_property_manager",
+ export_include_dirs: [ "include" ],
+ vendor_available: true,
+}
diff --git a/modem/android_property_manager/fake/Android.bp b/modem/android_property_manager/fake/Android.bp
new file mode 100644
index 0000000..247b97c
--- /dev/null
+++ b/modem/android_property_manager/fake/Android.bp
@@ -0,0 +1,23 @@
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+// When `modem_android_property_manager_fake` is included statically, its
+// dependencies are not transitively included, so the target will also have to
+// include this default to restate them.
+cc_defaults {
+ name: "modem_android_property_manager_fake_defaults",
+ static_libs: [
+ "modem_android_property_manager",
+ "libbase",
+ "modem_log_constants",
+ ],
+}
+
+cc_library_static {
+ name: "modem_android_property_manager_fake",
+ export_include_dirs: [ "include" ],
+ srcs: [ "fake_android_property_manager.cpp" ],
+ defaults: [ "modem_android_property_manager_fake_defaults" ],
+ vendor_available: true,
+}
diff --git a/modem/android_property_manager/fake/fake_android_property_manager.cpp b/modem/android_property_manager/fake/fake_android_property_manager.cpp
new file mode 100644
index 0000000..d25d6da
--- /dev/null
+++ b/modem/android_property_manager/fake/fake_android_property_manager.cpp
@@ -0,0 +1,80 @@
+#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
diff --git a/modem/android_property_manager/fake/include/fake_android_property_manager.h b/modem/android_property_manager/fake/include/fake_android_property_manager.h
new file mode 100644
index 0000000..eeea5a0
--- /dev/null
+++ b/modem/android_property_manager/fake/include/fake_android_property_manager.h
@@ -0,0 +1,54 @@
+#pragma once
+
+#include <map>
+#include <string>
+
+#include "android-base/result.h"
+#include "android_property_manager.h"
+
+namespace pixel_modem {
+
+/**
+ * @brief Fake Implementation of AndroidPropertyManager that mocks some of the
+ * property changing behaviour from pixellogger's `modem_logging_control`.
+ */
+class FakeAndroidPropertyManager : public AndroidPropertyManager {
+ public:
+ bool GetBoolProperty(const std::string& key, bool default_value) override;
+
+ std::string GetProperty(const std::string& key,
+ const std::string& default_value) override;
+
+ int GetIntProperty(const std::string& key, int default_value) override;
+
+ /**
+ * 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 SetProperty(const std::string& key, const std::string& value) override;
+
+ inline bool ModemLoggingHasRestarted() {
+ return modem_logging_has_restarted_;
+ }
+
+ private:
+ /**
+ * @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> GetProperty(const std::string& key);
+
+ std::map<std::string, std::string> property_map_;
+ bool modem_logging_has_been_off_ = false;
+ bool modem_logging_has_restarted_ = false;
+};
+
+} // namespace pixel_modem
diff --git a/modem/android_property_manager/impl/Android.bp b/modem/android_property_manager/impl/Android.bp
new file mode 100644
index 0000000..2023e8f
--- /dev/null
+++ b/modem/android_property_manager/impl/Android.bp
@@ -0,0 +1,18 @@
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+modem_android_property_manager_impl_public_deps = [
+ "modem_android_property_manager",
+]
+
+cc_library_shared {
+ name: "modem_android_property_manager_impl",
+ export_include_dirs: [ "include" ],
+ srcs: [ "android_property_manager_impl.cpp" ],
+ shared_libs: modem_android_property_manager_impl_public_deps + [
+ "libbase",
+ ],
+ export_shared_lib_headers: modem_android_property_manager_impl_public_deps,
+ vendor_available: true,
+}
diff --git a/modem/android_property_manager/impl/android_property_manager_impl.cpp b/modem/android_property_manager/impl/android_property_manager_impl.cpp
new file mode 100644
index 0000000..b6b900a
--- /dev/null
+++ b/modem/android_property_manager/impl/android_property_manager_impl.cpp
@@ -0,0 +1,29 @@
+#include "android_property_manager_impl.h"
+
+#include <android-base/properties.h>
+
+#include <string>
+
+namespace pixel_modem {
+
+bool AndroidPropertyManagerImpl::GetBoolProperty(const std::string& key,
+ bool default_value) {
+ return android::base::GetBoolProperty(key, default_value);
+}
+
+std::string AndroidPropertyManagerImpl::GetProperty(
+ const std::string& key, const std::string& default_value) {
+ return android::base::GetProperty(key, default_value);
+}
+
+int AndroidPropertyManagerImpl::GetIntProperty(const std::string& key,
+ int default_value) {
+ return android::base::GetIntProperty(key, default_value);
+}
+
+bool AndroidPropertyManagerImpl::SetProperty(const std::string& key,
+ const std::string& value) {
+ return android::base::SetProperty(key, value);
+}
+
+} // namespace pixel_modem
diff --git a/modem/android_property_manager/impl/include/android_property_manager_impl.h b/modem/android_property_manager/impl/include/android_property_manager_impl.h
new file mode 100644
index 0000000..91cee25
--- /dev/null
+++ b/modem/android_property_manager/impl/include/android_property_manager_impl.h
@@ -0,0 +1,25 @@
+#pragma once
+
+#include <string>
+
+#include "android_property_manager.h"
+
+namespace pixel_modem {
+
+/**
+ * @brief Implementation of AndroidPropertyManager that directly forwards to
+ * android base methods.
+ */
+class AndroidPropertyManagerImpl : public AndroidPropertyManager {
+ public:
+ bool GetBoolProperty(const std::string& key, bool default_value) override;
+
+ std::string GetProperty(const std::string& key,
+ const std::string& default_value) override;
+
+ int GetIntProperty(const std::string& key, int default_value) override;
+
+ bool SetProperty(const std::string& key, const std::string& value) override;
+};
+
+} // namespace pixel_modem
diff --git a/modem/android_property_manager/include/android_property_manager.h b/modem/android_property_manager/include/android_property_manager.h
new file mode 100644
index 0000000..e41a28d
--- /dev/null
+++ b/modem/android_property_manager/include/android_property_manager.h
@@ -0,0 +1,27 @@
+
+#pragma once
+
+#include <string>
+#include <string_view>
+
+namespace pixel_modem {
+
+// Used to set boolean parameters to true / false
+inline constexpr std::string_view kTruthString = "true";
+inline constexpr std::string_view kFalseString = "false";
+
+/**
+ * @brief Interface for interacting with Android System Properties.
+ */
+class AndroidPropertyManager {
+ public:
+ virtual ~AndroidPropertyManager() = default;
+ virtual bool GetBoolProperty(const std::string& key, bool default_value) = 0;
+ virtual std::string GetProperty(const std::string& key,
+ const std::string& default_value) = 0;
+ virtual int GetIntProperty(const std::string& key, int default_value) = 0;
+ virtual bool SetProperty(const std::string& key,
+ const std::string& value) = 0;
+};
+
+} // namespace pixel_modem