Make metadata field mandatory for program info struct.
Test: VTS, manual
Change-Id: I3e4ed1f203dc28315d7c7db10c9ce3d83e4ec59d
diff --git a/radio/IRadio.cpp b/radio/IRadio.cpp
index ebf3859..5bbe7cb 100644
--- a/radio/IRadio.cpp
+++ b/radio/IRadio.cpp
@@ -172,16 +172,11 @@
virtual status_t getProgramInformation(struct radio_program_info *info)
{
Parcel data, reply;
- if (info == NULL) {
+ if (info == nullptr || info->metadata == nullptr) {
return BAD_VALUE;
}
radio_metadata_t *metadata = info->metadata;
data.writeInterfaceToken(IRadio::getInterfaceDescriptor());
- if (metadata != NULL) {
- data.writeUint32(1);
- } else {
- data.writeUint32(0);
- }
status_t status = remote()->transact(GET_PROGRAM_INFORMATION, data, &reply);
if (status == NO_ERROR) {
status = (status_t)reply.readInt32();
@@ -190,13 +185,13 @@
// restore local metadata pointer
info->metadata = metadata;
- uint32_t metatataSize = reply.readUint32();
- if ((metadata != NULL) && (metatataSize != 0)) {
- radio_metadata_t *newMetadata = (radio_metadata_t *)malloc(metatataSize);
+ uint32_t metadataSize = reply.readUint32();
+ if (metadataSize != 0) {
+ radio_metadata_t *newMetadata = (radio_metadata_t *)malloc(metadataSize);
if (newMetadata == NULL) {
return NO_MEMORY;
}
- reply.read(newMetadata, metatataSize);
+ reply.read(newMetadata, metadataSize);
status = radio_metadata_add_metadata(&info->metadata, newMetadata);
free(newMetadata);
}
@@ -306,21 +301,17 @@
CHECK_INTERFACE(IRadio, data, reply);
struct radio_program_info info;
status_t status;
- // query metadata only if requested by remote side
- if (data.readUint32() == 1) {
- status = radio_metadata_allocate(&info.metadata, 0, 0);
- if (status != NO_ERROR) {
- return status;
- }
- } else {
- info.metadata = NULL;
+
+ status = radio_metadata_allocate(&info.metadata, 0, 0);
+ if (status != NO_ERROR) {
+ return status;
}
status = getProgramInformation(&info);
reply->writeInt32(status);
if (status == NO_ERROR) {
reply->write(&info, sizeof(struct radio_program_info));
- if ((info.metadata != NULL) && (radio_metadata_get_count(info.metadata) > 0)) {
+ if (radio_metadata_get_count(info.metadata) > 0) {
size_t size = radio_metadata_get_size(info.metadata);
reply->writeUint32((uint32_t)size);
reply->write(info.metadata, size);
diff --git a/services/radio/HidlUtils.cpp b/services/radio/HidlUtils.cpp
index bfced7a..3b33386 100644
--- a/services/radio/HidlUtils.cpp
+++ b/services/radio/HidlUtils.cpp
@@ -122,8 +122,7 @@
//static
void HidlUtils::convertProgramInfoFromHal(radio_program_info_t *info,
- const ProgramInfo *halInfo,
- bool withMetadata)
+ const ProgramInfo *halInfo)
{
info->channel = halInfo->channel;
info->sub_channel = halInfo->subChannel;
@@ -131,10 +130,8 @@
info->stereo = halInfo->stereo;
info->digital = halInfo->digital;
info->signal_strength = halInfo->signalStrength;
- if (withMetadata && halInfo->metadata.size() != 0) {
- convertMetaDataFromHal(&info->metadata, halInfo->metadata,
- halInfo->channel, halInfo->subChannel);
- }
+ convertMetaDataFromHal(&info->metadata, halInfo->metadata,
+ halInfo->channel, halInfo->subChannel);
}
//static
diff --git a/services/radio/HidlUtils.h b/services/radio/HidlUtils.h
index 091abb7..c771060 100644
--- a/services/radio/HidlUtils.h
+++ b/services/radio/HidlUtils.h
@@ -38,8 +38,7 @@
static void convertBandConfigToHal(BandConfig *halConfig,
const radio_hal_band_config_t *config);
static void convertProgramInfoFromHal(radio_program_info_t *info,
- const ProgramInfo *halInfo,
- bool withMetadata);
+ const ProgramInfo *halInfo);
static void convertMetaDataFromHal(radio_metadata_t **metadata,
const hidl_vec<MetaData>& halMetadata,
uint32_t channel,
diff --git a/services/radio/RadioHalHidl.cpp b/services/radio/RadioHalHidl.cpp
index c7a899a..182880a 100644
--- a/services/radio/RadioHalHidl.cpp
+++ b/services/radio/RadioHalHidl.cpp
@@ -233,19 +233,21 @@
if (mHalTuner == 0) {
return -ENODEV;
}
+ if (info == nullptr || info->metadata == nullptr) {
+ return BAD_VALUE;
+ }
ProgramInfo halInfo;
Result halResult;
- bool withMetaData = (info->metadata != NULL);
Return<void> hidlReturn = mHalTuner->getProgramInformation(
- withMetaData, [&](Result result, const ProgramInfo& info) {
- halResult = result;
- if (result == Result::OK) {
- halInfo = info;
- }
- });
+ [&](Result result, const ProgramInfo& info) {
+ halResult = result;
+ if (result == Result::OK) {
+ halInfo = info;
+ }
+ });
status_t status = checkHidlStatus(hidlReturn.getStatus());
if (status == NO_ERROR && halResult == Result::OK) {
- HidlUtils::convertProgramInfoFromHal(info, &halInfo, withMetaData);
+ HidlUtils::convertProgramInfoFromHal(info, &halInfo);
}
return HidlUtils::convertHalResult(halResult);
}
@@ -276,11 +278,9 @@
memset(&event, 0, sizeof(radio_hal_event_t));
event.type = RADIO_EVENT_TUNED;
event.status = HidlUtils::convertHalResult(result);
- HidlUtils::convertProgramInfoFromHal(&event.info, &info, true);
+ HidlUtils::convertProgramInfoFromHal(&event.info, &info);
onCallback(&event);
- if (event.info.metadata != NULL) {
- radio_metadata_deallocate(event.info.metadata);
- }
+ radio_metadata_deallocate(event.info.metadata);
return Return<void>();
}
@@ -290,7 +290,7 @@
radio_hal_event_t event;
memset(&event, 0, sizeof(radio_hal_event_t));
event.type = RADIO_EVENT_AF_SWITCH;
- HidlUtils::convertProgramInfoFromHal(&event.info, &info, true);
+ HidlUtils::convertProgramInfoFromHal(&event.info, &info);
onCallback(&event);
if (event.info.metadata != NULL) {
radio_metadata_deallocate(event.info.metadata);