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
This commit is contained in:
Yifan Hong 2019-01-28 12:55:54 -08:00
parent a5e0d695fa
commit 082d295fb3
2 changed files with 30 additions and 3 deletions

View file

@ -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;

View file

@ -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);