Manual cherrypick from CL ag/2968176 (Automatic failed since master changed)
Test: This CL adds tests. All the UT and other tests pass.
Change-Id: I5e6bf86f439fd86977a7f9ddc027a65d9c11d5ca
diff --git a/service/src/com/android/car/hal/VmsHalService.java b/service/src/com/android/car/hal/VmsHalService.java
index 36da390..88265e0 100644
--- a/service/src/com/android/car/hal/VmsHalService.java
+++ b/service/src/com/android/car/hal/VmsHalService.java
@@ -23,6 +23,7 @@
import android.car.vms.IVmsSubscriberClient;
import android.car.vms.VmsLayer;
import android.car.vms.VmsAssociatedLayer;
+import android.car.vms.VmsAvailableLayers;
import android.car.vms.VmsLayerDependency;
import android.car.vms.VmsLayersOffering;
import android.car.vms.VmsOperationRecorder;
@@ -105,7 +106,7 @@
void onDataMessage(VmsLayer layer, int publisherId, byte[] payload);
// Notifies the listener on a change in available layers.
- void onLayersAvaiabilityChange(List<VmsAssociatedLayer> availableLayers);
+ void onLayersAvaiabilityChange(VmsAvailableLayers availableLayers);
}
/**
@@ -353,7 +354,7 @@
}
public void setPublisherLayersOffering(IBinder publisherToken, VmsLayersOffering offering) {
- Set<VmsAssociatedLayer> availableLayers = Collections.EMPTY_SET;
+ VmsAvailableLayers availableLayers;
synchronized (mLock) {
updateOffering(publisherToken, offering);
VmsOperationRecorder.get().setPublisherLayersOffering(offering);
@@ -362,8 +363,7 @@
notifyOfAvailabilityChange(availableLayers);
}
- public Set<VmsAssociatedLayer> getAvailableLayers() {
- //TODO(b/36872877): wrap available layers in VmsAvailabilityState similar to VmsSubscriptionState.
+ public VmsAvailableLayers getAvailableLayers() {
synchronized (mLock) {
return mAvailableLayers.getAvailableLayers();
}
@@ -401,13 +401,13 @@
*
* @param availableLayers the layers which publishers claim they made publish.
*/
- private void notifyOfAvailabilityChange(Set<VmsAssociatedLayer> availableLayers) {
+ private void notifyOfAvailabilityChange(VmsAvailableLayers availableLayers) {
// notify the HAL
notifyAvailabilityChangeToHal(availableLayers);
// Notify the App subscribers
for (VmsHalSubscriberListener listener : mSubscriberListeners) {
- listener.onLayersAvaiabilityChange(new ArrayList<>(availableLayers));
+ listener.onLayersAvaiabilityChange(availableLayers);
}
}
@@ -489,7 +489,7 @@
handleHalAvailabilityRequestEvent();
break;
case VmsMessageType.SUBSCRIPTIONS_REQUEST:
- handleSubscriptionRequestEvent();
+ handleSubscriptionsRequestEvent();
break;
default:
throw new IllegalArgumentException("Unexpected message type: " + messageType);
@@ -677,7 +677,7 @@
*/
private void handleHalAvailabilityRequestEvent() {
synchronized (mLock) {
- Collection<VmsAssociatedLayer> availableLayers = mAvailableLayers.getAvailableLayers();
+ VmsAvailableLayers availableLayers = mAvailableLayers.getAvailableLayers();
VehiclePropValue vehiclePropertyValue =
toAvailabilityUpdateVehiclePropValue(
availableLayers,
@@ -701,7 +701,7 @@
* <li>Layer type/subtype/version.
* </ul>
*/
- private void handleSubscriptionRequestEvent() {
+ private void handleSubscriptionsRequestEvent() {
VmsSubscriptionState subscription = getSubscriptionState();
VehiclePropValue vehicleProp =
toTypedVmsVehiclePropValue(VmsMessageType.SUBSCRIPTIONS_RESPONSE);
@@ -723,7 +723,7 @@
}
private void updateOffering(IBinder publisherToken, VmsLayersOffering offering) {
- Set<VmsAssociatedLayer> availableLayers = Collections.EMPTY_SET;
+ VmsAvailableLayers availableLayers;
synchronized (mLock) {
mOfferings.put(publisherToken, offering);
@@ -776,7 +776,7 @@
return setPropertyValue(vehiclePropertyValue);
}
- public boolean notifyAvailabilityChangeToHal(Collection<VmsAssociatedLayer> availableLayers) {
+ public boolean notifyAvailabilityChangeToHal(VmsAvailableLayers availableLayers) {
VehiclePropValue vehiclePropertyValue =
toAvailabilityUpdateVehiclePropValue(
availableLayers,
@@ -819,25 +819,26 @@
}
private static VehiclePropValue toAvailabilityUpdateVehiclePropValue(
- Collection<VmsAssociatedLayer> availableAssociatedLayers, int messageType) {
+ VmsAvailableLayers availableLayers, int messageType) {
if (!AVAILABILITY_MESSAGE_TYPES.contains(messageType)) {
throw new IllegalArgumentException("Unsupported availability type: " + messageType);
}
VehiclePropValue vehicleProp =
toTypedVmsVehiclePropValue(messageType);
- populateAvailabilityPropValueFields(availableAssociatedLayers, vehicleProp);
+ populateAvailabilityPropValueFields(availableLayers, vehicleProp);
return vehicleProp;
}
private static void populateAvailabilityPropValueFields(
- Collection<VmsAssociatedLayer> availableAssociatedLayers,
+ VmsAvailableLayers availableAssociatedLayers,
VehiclePropValue vehicleProp) {
VehiclePropValue.RawValue v = vehicleProp.value;
- int numLayers = availableAssociatedLayers.size();
+ v.int32Values.add(availableAssociatedLayers.getSequence());
+ int numLayers = availableAssociatedLayers.getAssociatedLayers().size();
v.int32Values.add(numLayers);
- for (VmsAssociatedLayer layer : availableAssociatedLayers) {
+ for (VmsAssociatedLayer layer : availableAssociatedLayers.getAssociatedLayers()) {
v.int32Values.add(layer.getVmsLayer().getType());
v.int32Values.add(layer.getVmsLayer().getSubtype());
v.int32Values.add(layer.getVmsLayer().getVersion());