From a76a2bf65b497cd93f0be69060f2fde792e7f7ed Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Mon, 18 Oct 2021 15:22:31 -0700 Subject: [PATCH] health: drop backup instance for non-recovery. For the core variant (system), clients like storaged etc. should no longer access the "backup" instance, because healthd is removed from the system image. For the vendor variant, this would only break if a vendor image were launched with Android O / O-MR1 (so health@2.0 is not required), and were compiled against an Android T (and above) source tree (which won't check the "backup" instance). This shouldn't be a valid configuration. For the recovery variant, the "backup" instance has a different meaning. It points to android.hardware.health@2.0-impl-default.recovery ... which was assumed by OEMs to be always installed when a vendor-specific libhealthd is not necessary. Hence, its behavior is kept. See hardware/interfaces/health/2.0/README.md android.hardware.health@2.0-impl-default.recovery, and subsequently the special handling of recovery mode below, can be removed once health@2.1 is the minimum required version (i.e. compatibility matrix level 3 is removed). Health 2.1 requires OEMs to install the implementation to the recovery partition when it is necessary (i.e. on non-A/B devices, where IsBatteryOk() is needed in recovery). Test: pass Bug: 203245871 Change-Id: Ife14f5bdaba20e4cf5bd0b954aea4d04a62009c4 --- .../libhealthhalutils/HealthHalUtils.cpp | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/health/2.0/utils/libhealthhalutils/HealthHalUtils.cpp b/health/2.0/utils/libhealthhalutils/HealthHalUtils.cpp index 9e1cc70738..3c353e6a78 100644 --- a/health/2.0/utils/libhealthhalutils/HealthHalUtils.cpp +++ b/health/2.0/utils/libhealthhalutils/HealthHalUtils.cpp @@ -25,7 +25,26 @@ namespace health { namespace V2_0 { sp get_health_service() { - for (auto&& instanceName : {"default", "backup"}) { + // For the core and vendor variant, the "backup" instance points to healthd, + // which is removed. + // For the recovery variant, the "backup" instance has a different + // meaning. It points to android.hardware.health@2.0-impl-default.recovery + // which was assumed by OEMs to be always installed when a + // vendor-specific libhealthd is not necessary. Hence, its behavior + // is kept. See health/2.0/README.md. + // android.hardware.health@2.0-impl-default.recovery, and subsequently the + // special handling of recovery mode below, can be removed once health@2.1 + // is the minimum required version (i.e. compatibility matrix level 5 is the + // minimum supported level). Health 2.1 requires OEMs to install the + // implementation to the recovery partition when it is necessary (i.e. on + // non-A/B devices, where IsBatteryOk() is needed in recovery). + for (auto&& instanceName : +#ifdef __ANDROID_RECOVERY__ + { "default", "backup" } +#else + {"default"} +#endif + ) { auto ret = IHealth::getService(instanceName); if (ret != nullptr) { return ret;