Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b548bea7 authored by Tao Bao's avatar Tao Bao
Browse files

minadbd: Return battery level via getprop.

`adb rescue getprop rescue.battery_level` returns the current battery
level.

Bug: 134560109
Test: Build and boot into rescue mode.
Test: `adb rescue getprop ro.build.fingerprint`
Test: `adb rescue getprop rescue.battery_level`
Test: `adb rescue getprop` to dump all the properties.
Test: Run recovery_unit_test.
Change-Id: I78a9e8ab9783ffc8532cb93e6a64fb2157c19bd5
parent 4782e793
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ cc_library {

    defaults: [
        "minadbd_defaults",
        "librecovery_utils_defaults",
    ],

    srcs: [
@@ -48,6 +49,7 @@ cc_library {
    ],

    static_libs: [
        "librecovery_utils",
        "libotautil",
    ],

@@ -97,6 +99,7 @@ cc_test {

    defaults: [
        "minadbd_defaults",
        "librecovery_utils_defaults",
    ],

    srcs: [
@@ -107,6 +110,7 @@ cc_test {
    static_libs: [
        "libminadbd_services",
        "libfusesideload",
        "librecovery_utils",
        "libotautil",
        "libadbd",
    ],
+16 −2
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@
#include "fuse_adb_provider.h"
#include "fuse_sideload.h"
#include "minadbd/types.h"
#include "recovery_utils/battery_utils.h"
#include "services.h"
#include "sysdeps.h"

@@ -160,7 +161,10 @@ static void RescueInstallHostService(unique_fd sfd, const std::string& args) {
// If given an empty string, dumps all the supported properties (analogous to `adb shell getprop`)
// in lines, e.g. "[prop]: [value]".
static void RescueGetpropHostService(unique_fd sfd, const std::string& prop) {
  constexpr const char* kRescueBatteryLevelProp = "rescue.battery_level";
  static const std::set<std::string> kGetpropAllowedProps = {
    // clang-format off
    kRescueBatteryLevelProp,
    "ro.build.date.utc",
    "ro.build.fingerprint",
    "ro.build.flavor",
@@ -170,18 +174,28 @@ static void RescueGetpropHostService(unique_fd sfd, const std::string& prop) {
    "ro.build.version.incremental",
    "ro.product.device",
    "ro.product.vendor.device",
    // clang-format on
  };

  auto query_prop = [](const std::string& key) {
    if (key == kRescueBatteryLevelProp) {
      auto battery_info = GetBatteryInfo();
      return std::to_string(battery_info.capacity);
    }
    return android::base::GetProperty(key, "");
  };

  std::string result;
  if (prop.empty()) {
    for (const auto& key : kGetpropAllowedProps) {
      auto value = android::base::GetProperty(key, "");
      auto value = query_prop(key);
      if (value.empty()) {
        continue;
      }
      result += "[" + key + "]: [" + value + "]\n";
    }
  } else if (kGetpropAllowedProps.find(prop) != kGetpropAllowedProps.end()) {
    result = android::base::GetProperty(prop, "") + "\n";
    result = query_prop(prop) + "\n";
  }
  if (result.empty()) {
    result = "\n";
+1 −0
Original line number Diff line number Diff line
@@ -75,6 +75,7 @@ cc_library_static {
    visibility: [
        "//bootable/recovery",
        "//bootable/recovery/install",
        "//bootable/recovery/minadbd",
        "//bootable/recovery/tests",
    ],
}