From 082d295fb31545e40d07389f38faa5d60df7c439 Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Mon, 28 Jan 2019 12:55:54 -0800 Subject: [PATCH] healthd: charger loads resources from /product Load resources from /product/etc/res/{values,images}/charger. If a resource fails, falls back to /res/{values,images}/charger. If the device has GSI flashed, resources may exist in both paths. Resources in /product is used with a higher priority. Test: turn off device, charge, observe animation Bug: 119549685 Change-Id: I5a5143d132a0cc6ce9135469fb523feeeafd1b1b --- healthd/animation.h | 19 +++++++++++++++++++ healthd/healthd_mode_charger.cpp | 14 +++++++++++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/healthd/animation.h b/healthd/animation.h index f59fb385c..9476c91ab 100644 --- a/healthd/animation.h +++ b/healthd/animation.h @@ -48,6 +48,25 @@ struct animation { GRFont* font; }; + // When libminui loads PNG images: + // - When treating paths as relative paths, it adds ".png" suffix. + // - When treating paths as absolute paths, it doesn't add the suffix. Hence, the suffix + // is added here. + void set_resource_root(const std::string& root) { + if (!animation_file.empty()) { + animation_file = root + animation_file + ".png"; + } + if (!fail_file.empty()) { + fail_file = root + fail_file + ".png"; + } + if (!text_clock.font_file.empty()) { + text_clock.font_file = root + text_clock.font_file + ".png"; + } + if (!text_percent.font_file.empty()) { + text_percent.font_file = root + text_percent.font_file + ".png"; + } + } + std::string animation_file; std::string fail_file; diff --git a/healthd/healthd_mode_charger.cpp b/healthd/healthd_mode_charger.cpp index 2eb54972f..8f2f7274f 100644 --- a/healthd/healthd_mode_charger.cpp +++ b/healthd/healthd_mode_charger.cpp @@ -80,8 +80,13 @@ char* locale; #define LOGW(x...) KLOG_WARNING("charger", x); #define LOGV(x...) KLOG_DEBUG("charger", x); -static constexpr const char* animation_desc_path = - "/res/values/charger/animation.txt"; +// Resources in /product/etc/res overrides resources in /res. +// If the device is using the Generic System Image (GSI), resources may exist in +// both paths. +static constexpr const char* product_animation_desc_path = + "/product/etc/res/values/charger/animation.txt"; +static constexpr const char* product_animation_root = "/product/etc/res/images/"; +static constexpr const char* animation_desc_path = "/res/values/charger/animation.txt"; struct key_state { bool pending; @@ -600,7 +605,10 @@ animation* init_animation() { bool parse_success; std::string content; - if (base::ReadFileToString(animation_desc_path, &content)) { + if (base::ReadFileToString(product_animation_desc_path, &content)) { + parse_success = parse_animation_desc(content, &battery_animation); + battery_animation.set_resource_root(product_animation_root); + } else if (base::ReadFileToString(animation_desc_path, &content)) { parse_success = parse_animation_desc(content, &battery_animation); } else { LOGW("Could not open animation description at %s\n", animation_desc_path);