health: registerCallback() and getHealthInfo() does not notify all callbacks

am: e9fc235eb4

Change-Id: I839443bed06f0007b93d1032c61d28d3955d79a3
This commit is contained in:
Yifan Hong
2018-10-02 17:11:22 -07:00
committed by android-build-merger
2 changed files with 18 additions and 2 deletions

View File

@@ -58,7 +58,7 @@ Return<Result> Health::registerCallback(const sp<IHealthInfoCallback>& callback)
// ignore the error
}
return update();
return updateAndNotify(callback);
}
bool Health::unregisterCallbackInternal(const sp<IBase>& callback) {
@@ -156,6 +156,18 @@ Return<Result> Health::update() {
return Result::SUCCESS;
}
Return<Result> Health::updateAndNotify(const sp<IHealthInfoCallback>& callback) {
std::lock_guard<decltype(callbacks_lock_)> lock(callbacks_lock_);
std::vector<sp<IHealthInfoCallback>> storedCallbacks{std::move(callbacks_)};
callbacks_.clear();
if (callback != nullptr) {
callbacks_.push_back(callback);
}
Return<Result> result = update();
callbacks_ = std::move(storedCallbacks);
return result;
}
void Health::notifyListeners(HealthInfo* healthInfo) {
std::vector<StorageInfo> info;
get_storage_info(info);
@@ -233,7 +245,7 @@ Return<void> Health::getDiskStats(getDiskStats_cb _hidl_cb) {
Return<void> Health::getHealthInfo(getHealthInfo_cb _hidl_cb) {
using android::hardware::health::V1_0::hal_conversion::convertToHealthInfo;
update();
updateAndNotify(nullptr);
struct android::BatteryProperties p = getBatteryProperties(battery_monitor_.get());
V1_0::HealthInfo batteryInfo;

View File

@@ -64,6 +64,10 @@ struct Health : public IHealth, hidl_death_recipient {
std::unique_ptr<BatteryMonitor> battery_monitor_;
bool unregisterCallbackInternal(const sp<IBase>& cb);
// update() and only notify the given callback, but none of the other callbacks.
// If cb is null, do not notify any callback at all.
Return<Result> updateAndNotify(const sp<IHealthInfoCallback>& cb);
};
} // namespace implementation