From 97eecdc87590d6807512e960b0f7edb7e83fd801 Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Wed, 3 Jul 2019 11:07:37 -0700 Subject: [PATCH] healthd: charger use runtime sysprops instead. Bug: 124118169 Test: run off-mode charging Change-Id: Ib71f84f1c93d1566f4e3101920d98b1d39184390 --- healthd/Android.bp | 7 ++++++ healthd/Android.mk | 13 +++++------ healthd/api/current.txt | 1 + healthd/api/removed.txt | 1 + healthd/api/system-current.txt | 1 + healthd/api/system-removed.txt | 1 + healthd/api/test-current.txt | 1 + healthd/api/test-removed.txt | 1 + healthd/charger.cpp | 15 ++++++++----- healthd/charger.sysprop | 38 ++++++++++++++++++++++++++++++++ healthd/healthd_draw.cpp | 23 +++++++++++++++++-- healthd/healthd_mode_charger.cpp | 21 ++++++++---------- 12 files changed, 97 insertions(+), 26 deletions(-) create mode 100644 healthd/api/current.txt create mode 100644 healthd/api/removed.txt create mode 100644 healthd/api/system-current.txt create mode 100644 healthd/api/system-removed.txt create mode 100644 healthd/api/test-current.txt create mode 100644 healthd/api/test-removed.txt create mode 100644 healthd/charger.sysprop diff --git a/healthd/Android.bp b/healthd/Android.bp index 2cf6be96d..0dcaa6717 100644 --- a/healthd/Android.bp +++ b/healthd/Android.bp @@ -110,3 +110,10 @@ cc_library_static { "libutils", ], } + +sysprop_library { + name: "charger_sysprop", + srcs: ["charger.sysprop"], + property_owner: "Platform", + api_packages: ["android.sysprop"], +} diff --git a/healthd/Android.mk b/healthd/Android.mk index d18f15a0c..289afe99e 100644 --- a/healthd/Android.mk +++ b/healthd/Android.mk @@ -8,7 +8,7 @@ include $(CLEAR_VARS) LOCAL_MODULE := libhealthd_draw LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH) -LOCAL_STATIC_LIBRARIES := libminui +LOCAL_STATIC_LIBRARIES := libcharger_sysprop libminui LOCAL_SHARED_LIBRARIES := libbase LOCAL_SRC_FILES := healthd_draw.cpp @@ -52,6 +52,7 @@ LOCAL_EXPORT_C_INCLUDE_DIRS := \ LOCAL_STATIC_LIBRARIES := \ android.hardware.health@2.0-impl \ android.hardware.health@1.0-convert \ + libcharger_sysprop \ libhealthstoragedefault \ libhealthd_draw \ libminui \ @@ -83,14 +84,12 @@ LOCAL_MODULE := charger LOCAL_C_INCLUDES := $(LOCAL_PATH)/include LOCAL_CFLAGS := -Werror -ifeq ($(strip $(LOCAL_CHARGER_NO_UI)),true) -LOCAL_CFLAGS += -DCHARGER_NO_UI -endif CHARGER_STATIC_LIBRARIES := \ android.hardware.health@2.0-impl \ android.hardware.health@1.0-convert \ libbinderthreadstate \ + libcharger_sysprop \ libhidltransport \ libhidlbase \ libhwbinder_noltopgo \ @@ -141,8 +140,7 @@ LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/system/bin LOCAL_MODULE_STEM := charger LOCAL_C_INCLUDES := $(LOCAL_PATH)/include -LOCAL_CFLAGS := -Wall -Werror -LOCAL_CFLAGS += -DCHARGER_NO_UI +LOCAL_CFLAGS := -Wall -Werror -DCHARGER_FORCE_NO_UI=1 # charger.recovery doesn't link against libhealthd_{charger,draw} or libminui, since it doesn't need # any UI support. @@ -150,6 +148,7 @@ LOCAL_STATIC_LIBRARIES := \ android.hardware.health@2.0-impl \ android.hardware.health@1.0-convert \ libbinderthreadstate \ + libcharger_sysprop \ libhidltransport \ libhidlbase \ libhwbinder_noltopgo \ @@ -176,7 +175,7 @@ include $(BUILD_EXECUTABLE) include $(CLEAR_VARS) LOCAL_MODULE := charger_test LOCAL_C_INCLUDES := $(LOCAL_PATH)/include -LOCAL_CFLAGS := -Wall -Werror -DCHARGER_NO_UI +LOCAL_CFLAGS := -Wall -Werror LOCAL_STATIC_LIBRARIES := $(CHARGER_STATIC_LIBRARIES) LOCAL_SHARED_LIBRARIES := $(CHARGER_SHARED_LIBRARIES) LOCAL_SRC_FILES := \ diff --git a/healthd/api/current.txt b/healthd/api/current.txt new file mode 100644 index 000000000..d802177e2 --- /dev/null +++ b/healthd/api/current.txt @@ -0,0 +1 @@ +// Signature format: 2.0 diff --git a/healthd/api/removed.txt b/healthd/api/removed.txt new file mode 100644 index 000000000..d802177e2 --- /dev/null +++ b/healthd/api/removed.txt @@ -0,0 +1 @@ +// Signature format: 2.0 diff --git a/healthd/api/system-current.txt b/healthd/api/system-current.txt new file mode 100644 index 000000000..d802177e2 --- /dev/null +++ b/healthd/api/system-current.txt @@ -0,0 +1 @@ +// Signature format: 2.0 diff --git a/healthd/api/system-removed.txt b/healthd/api/system-removed.txt new file mode 100644 index 000000000..d802177e2 --- /dev/null +++ b/healthd/api/system-removed.txt @@ -0,0 +1 @@ +// Signature format: 2.0 diff --git a/healthd/api/test-current.txt b/healthd/api/test-current.txt new file mode 100644 index 000000000..d802177e2 --- /dev/null +++ b/healthd/api/test-current.txt @@ -0,0 +1 @@ +// Signature format: 2.0 diff --git a/healthd/api/test-removed.txt b/healthd/api/test-removed.txt new file mode 100644 index 000000000..d802177e2 --- /dev/null +++ b/healthd/api/test-removed.txt @@ -0,0 +1 @@ +// Signature format: 2.0 diff --git a/healthd/charger.cpp b/healthd/charger.cpp index 085ccebca..58ed4161c 100644 --- a/healthd/charger.cpp +++ b/healthd/charger.cpp @@ -14,13 +14,18 @@ * limitations under the License. */ +#include "charger.sysprop.h" #include "healthd_mode_charger.h" #include "healthd_mode_charger_nops.h" -int main(int argc, char** argv) { -#ifdef CHARGER_NO_UI - return healthd_charger_nops(argc, argv); -#else - return healthd_charger_main(argc, argv); +#ifndef CHARGER_FORCE_NO_UI +#define CHARGER_FORCE_NO_UI 0 #endif + +int main(int argc, char** argv) { + if (CHARGER_FORCE_NO_UI || android::sysprop::ChargerProperties::no_ui().value_or(false)) { + return healthd_charger_nops(argc, argv); + } else { + return healthd_charger_main(argc, argv); + } } diff --git a/healthd/charger.sysprop b/healthd/charger.sysprop new file mode 100644 index 000000000..b3f47a1ae --- /dev/null +++ b/healthd/charger.sysprop @@ -0,0 +1,38 @@ +owner: Platform +module: "android.sysprop.ChargerProperties" + +prop { + api_name: "draw_split_screen" + type: Boolean + prop_name: "ro.charger.draw_split_screen" + scope: Internal + access: Readonly +} +prop { + api_name: "draw_split_offset" + type: Long + prop_name: "ro.charger.draw_split_offset" + scope: Internal + access: Readonly +} +prop { + api_name: "disable_init_blank" + type: Boolean + prop_name: "ro.charger.disable_init_blank" + scope: Internal + access: Readonly +} +prop { + api_name: "enable_suspend" + type: Boolean + prop_name: "ro.charger.enable_suspend" + scope: Internal + access: Readonly +} +prop { + api_name: "no_ui" + type: Boolean + prop_name: "ro.charger.no_ui" + scope: Internal + access: Readonly +} diff --git a/healthd/healthd_draw.cpp b/healthd/healthd_draw.cpp index 3da8bda3b..50eee198f 100644 --- a/healthd/healthd_draw.cpp +++ b/healthd/healthd_draw.cpp @@ -18,15 +18,34 @@ #include #include +#include "charger.sysprop.h" #include "healthd_draw.h" #define LOGE(x...) KLOG_ERROR("charger", x); #define LOGW(x...) KLOG_WARNING("charger", x); #define LOGV(x...) KLOG_DEBUG("charger", x); +static bool get_split_screen() { + return android::sysprop::ChargerProperties::draw_split_screen().value_or(false); +} + +static int get_split_offset() { + int64_t value = android::sysprop::ChargerProperties::draw_split_offset().value_or(0); + if (value < static_cast(std::numeric_limits::min())) { + LOGW("draw_split_offset = %" PRId64 " overflow for an int; resetting to %d.\n", value, + std::numeric_limits::min()); + value = std::numeric_limits::min(); + } + if (value > static_cast(std::numeric_limits::max())) { + LOGW("draw_split_offset = %" PRId64 " overflow for an int; resetting to %d.\n", value, + std::numeric_limits::max()); + value = std::numeric_limits::max(); + } + return static_cast(value); +} + HealthdDraw::HealthdDraw(animation* anim) - : kSplitScreen(HEALTHD_DRAW_SPLIT_SCREEN), - kSplitOffset(HEALTHD_DRAW_SPLIT_OFFSET) { + : kSplitScreen(get_split_screen()), kSplitOffset(get_split_offset()) { int ret = gr_init(); if (ret < 0) { diff --git a/healthd/healthd_mode_charger.cpp b/healthd/healthd_mode_charger.cpp index edf34f784..d67608369 100644 --- a/healthd/healthd_mode_charger.cpp +++ b/healthd/healthd_mode_charger.cpp @@ -43,11 +43,10 @@ #include #include -#ifdef CHARGER_ENABLE_SUSPEND #include -#endif #include "AnimationParser.h" +#include "charger.sysprop.h" #include "healthd_draw.h" #include @@ -264,18 +263,16 @@ out: LOGW("\n"); } -#ifdef CHARGER_ENABLE_SUSPEND static int request_suspend(bool enable) { + if (!android::sysprop::ChargerProperties::enable_suspend().value_or(false)) { + return 0; + } + if (enable) return autosuspend_enable(); else return autosuspend_disable(); } -#else -static int request_suspend(bool /*enable*/) { - return 0; -} -#endif static void kick_animation(animation* anim) { anim->run = true; @@ -321,10 +318,10 @@ static void update_screen_state(charger* charger, int64_t now) { healthd_draw.reset(new HealthdDraw(batt_anim)); -#ifndef CHARGER_DISABLE_INIT_BLANK - healthd_draw->blank_screen(true); - charger->screen_blanked = true; -#endif + if (android::sysprop::ChargerProperties::disable_init_blank().value_or(false)) { + healthd_draw->blank_screen(true); + charger->screen_blanked = true; + } } /* animation is over, blank screen and leave */