diff options
Diffstat (limited to 'healthd')
-rw-r--r-- | healthd/animation.h | 19 | ||||
-rw-r--r-- | 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); |