Addition of vertical/speed/bearing accuracy feilds

Fill in the new feilds of vertical/speed/bearing accuracy
into hidl structure

CRs-fixed: 2021399
Change-Id: I409e2559e671e65c307758ee273c64f98f650c11
diff --git a/android/location_api/LocationUtil.cpp b/android/location_api/LocationUtil.cpp
index dbafe5d..d782375 100644
--- a/android/location_api/LocationUtil.cpp
+++ b/android/location_api/LocationUtil.cpp
@@ -46,21 +46,23 @@
         out.gnssLocationFlags |= GnssLocationFlags::HAS_SPEED;
     if (in.flags & LOCATION_HAS_BEARING_BIT)
         out.gnssLocationFlags |= GnssLocationFlags::HAS_BEARING;
-    if (in.flags & LOCATION_HAS_ACCURACY_BIT) {
+    if (in.flags & LOCATION_HAS_ACCURACY_BIT)
         out.gnssLocationFlags |= GnssLocationFlags::HAS_HORIZONTAL_ACCURACY;
-        //out.gnssLocationFlags |= GnssLocationFlags::HAS_VERTICAL_ACCURACY;
-        //out.gnssLocationFlags |= GnssLocationFlags::HAS_SPEED_ACCURACY;
-        //out.gnssLocationFlags |= GnssLocationFlags::HAS_BEARING_ACCURACY;
-    }
+    if (in.flags & LOCATION_HAS_VERTICAL_ACCURACY_BIT)
+        out.gnssLocationFlags |= GnssLocationFlags::HAS_VERTICAL_ACCURACY;
+    if (in.flags & LOCATION_HAS_SPEED_ACCURACY_BIT)
+        out.gnssLocationFlags |= GnssLocationFlags::HAS_SPEED_ACCURACY;
+    if (in.flags & LOCATION_HAS_BEARING_ACCURACY_BIT)
+        out.gnssLocationFlags |= GnssLocationFlags::HAS_BEARING_ACCURACY;
     out.latitudeDegrees = in.latitude;
     out.longitudeDegrees = in.longitude;
     out.altitudeMeters = in.altitude;
     out.speedMetersPerSec = in.speed;
     out.bearingDegrees = in.bearing;
     out.horizontalAccuracyMeters = in.accuracy;
-    //out.verticalAccuracyMeters = in.accuracy;
-    //out.speedAccuracyMetersPerSecond = in.accuracy;
-    //out.bearingAccuracyDegrees = in.accuracy;
+    out.verticalAccuracyMeters = in.verticalAccuracy;
+    out.speedAccuracyMetersPerSecond = in.speedAccuracy;
+    out.bearingAccuracyDegrees = in.bearingAccuracy;
     out.timestamp = static_cast<GnssUtcTime>(in.timestamp);
 }
 
diff --git a/gnss/GnssAdapter.cpp b/gnss/GnssAdapter.cpp
index 6cce9d1..0c309d2 100644
--- a/gnss/GnssAdapter.cpp
+++ b/gnss/GnssAdapter.cpp
@@ -113,6 +113,7 @@
 
 void
 GnssAdapter::convertLocation(Location& out, const LocGpsLocation& locGpsLocation,
+                             const GpsLocationExtended& locationExtended,
                              const LocPosTechMask techMask)
 {
     out.size = sizeof(Location);
@@ -137,6 +138,18 @@
         out.flags |= LOCATION_HAS_ACCURACY_BIT;
         out.accuracy = locGpsLocation.accuracy;
     }
+    if (GPS_LOCATION_EXTENDED_HAS_VERT_UNC & locationExtended.flags) {
+        out.flags |= LOCATION_HAS_VERTICAL_ACCURACY_BIT;
+        out.verticalAccuracy = locationExtended.vert_unc;
+    }
+    if (GPS_LOCATION_EXTENDED_HAS_SPEED_UNC & locationExtended.flags) {
+        out.flags |= LOCATION_HAS_SPEED_ACCURACY_BIT;
+        out.speedAccuracy = locationExtended.speed_unc;
+    }
+    if (GPS_LOCATION_EXTENDED_HAS_BEARING_UNC & locationExtended.flags) {
+        out.flags |= LOCATION_HAS_BEARING_ACCURACY_BIT;
+        out.bearingAccuracy = locationExtended.bearing_unc;
+    }
     out.timestamp = locGpsLocation.timestamp;
     if (LOC_POS_TECH_MASK_SATELLITE & techMask) {
         out.techMask |= LOCATION_TECHNOLOGY_GNSS_BIT;
@@ -171,18 +184,6 @@
         out.flags |= GNSS_LOCATION_INFO_MAGNETIC_DEVIATION_BIT;
         out.magneticDeviation = locationExtended.magneticDeviation;
     }
-    if (GPS_LOCATION_EXTENDED_HAS_VERT_UNC & locationExtended.flags) {
-        out.flags |= GNSS_LOCATION_INFO_VER_ACCURACY_BIT;
-        out.verAccuracy = locationExtended.vert_unc;
-    }
-    if (GPS_LOCATION_EXTENDED_HAS_SPEED_UNC & locationExtended.flags) {
-        out.flags |= GNSS_LOCATION_INFO_SPEED_ACCURACY_BIT;
-        out.speedAccuracy = locationExtended.speed_unc;
-    }
-    if (GPS_LOCATION_EXTENDED_HAS_BEARING_UNC & locationExtended.flags) {
-        out.flags |= GNSS_LOCATION_INFO_BEARING_ACCURACY_BIT;
-        out.bearingAccuracy = locationExtended.bearing_unc;
-    }
     if (GPS_LOCATION_EXTENDED_HAS_HOR_RELIABILITY & locationExtended.flags) {
         out.flags |= GNSS_LOCATION_INFO_HOR_RELIABILITY_BIT;
         switch (locationExtended.horizontal_reliability) {
@@ -1858,7 +1859,7 @@
         for (auto it=mClientData.begin(); it != mClientData.end(); ++it) {
             if (nullptr != it->second.trackingCb) {
                 Location location = {};
-                convertLocation(location, ulpLocation.gpsLocation, techMask);
+                convertLocation(location, ulpLocation.gpsLocation, locationExtended, techMask);
                 it->second.trackingCb(location);
             }
             if (nullptr != it->second.gnssLocationInfoCb) {
diff --git a/gnss/GnssAdapter.h b/gnss/GnssAdapter.h
index f5a5300..24af4f6 100644
--- a/gnss/GnssAdapter.h
+++ b/gnss/GnssAdapter.h
@@ -103,6 +103,7 @@
     /*==== CONVERSION ===================================================================*/
     static void convertOptions(LocPosMode& out, const LocationOptions& options);
     static void convertLocation(Location& out, const LocGpsLocation& locGpsLocation,
+                                const GpsLocationExtended& locationExtended,
                                 const LocPosTechMask techMask);
     static void convertLocationInfo(GnssLocationInfoNotification& out,
                                     const GpsLocationExtended& locationExtended);
diff --git a/location/LocationAPI.h b/location/LocationAPI.h
index cc15ddd..579aa42 100644
--- a/location/LocationAPI.h
+++ b/location/LocationAPI.h
@@ -52,11 +52,14 @@
 // Flags to indicate which values are valid in a Location
 typedef uint16_t LocationFlagsMask;
 typedef enum {
-    LOCATION_HAS_LAT_LONG_BIT = (1<<0), // location has valid latitude and longitude
-    LOCATION_HAS_ALTITUDE_BIT = (1<<1), // location has valid altitude
-    LOCATION_HAS_SPEED_BIT    = (1<<2), // location has valid speed
-    LOCATION_HAS_BEARING_BIT  = (1<<3), // location has valid bearing
-    LOCATION_HAS_ACCURACY_BIT = (1<<4), // location has valid accuracy
+    LOCATION_HAS_LAT_LONG_BIT          = (1<<0), // location has valid latitude and longitude
+    LOCATION_HAS_ALTITUDE_BIT          = (1<<1), // location has valid altitude
+    LOCATION_HAS_SPEED_BIT             = (1<<2), // location has valid speed
+    LOCATION_HAS_BEARING_BIT           = (1<<3), // location has valid bearing
+    LOCATION_HAS_ACCURACY_BIT          = (1<<4), // location has valid accuracy
+    LOCATION_HAS_VERTICAL_ACCURACY_BIT = (1<<5), // location has valid vertical accuracy
+    LOCATION_HAS_SPEED_ACCURACY_BIT    = (1<<6), // location has valid speed accuracy
+    LOCATION_HAS_BEARING_ACCURACY_BIT  = (1<<7), // location has valid bearing accuracy
 } LocationFlagsBits;
 
 typedef uint16_t LocationTechnologyMask;
@@ -80,14 +83,11 @@
     GNSS_LOCATION_INFO_ALTITUDE_MEAN_SEA_LEVEL_BIT      = (1<<0), // valid altitude mean sea level
     GNSS_LOCATION_INFO_DOP_BIT                          = (1<<1), // valid pdop, hdop, and vdop
     GNSS_LOCATION_INFO_MAGNETIC_DEVIATION_BIT           = (1<<2), // valid magnetic deviation
-    GNSS_LOCATION_INFO_VER_ACCURACY_BIT                 = (1<<3), // valid vertical accuracy
-    GNSS_LOCATION_INFO_SPEED_ACCURACY_BIT               = (1<<4), // valid speed accuracy
-    GNSS_LOCATION_INFO_BEARING_ACCURACY_BIT             = (1<<5), // valid bearing accuracy
-    GNSS_LOCATION_INFO_HOR_RELIABILITY_BIT              = (1<<6), // valid horizontal reliability
-    GNSS_LOCATION_INFO_VER_RELIABILITY_BIT              = (1<<7), // valid vertical reliability
-    GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_SEMI_MAJOR_BIT = (1<<8), // valid elipsode semi major
-    GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_SEMI_MINOR_BIT = (1<<9), // valid elipsode semi minor
-    GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_AZIMUTH_BIT    = (1<<10),// valid accuracy elipsode azimuth
+    GNSS_LOCATION_INFO_HOR_RELIABILITY_BIT              = (1<<3), // valid horizontal reliability
+    GNSS_LOCATION_INFO_VER_RELIABILITY_BIT              = (1<<4), // valid vertical reliability
+    GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_SEMI_MAJOR_BIT = (1<<5), // valid elipsode semi major
+    GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_SEMI_MINOR_BIT = (1<<6), // valid elipsode semi minor
+    GNSS_LOCATION_INFO_HOR_ACCURACY_ELIP_AZIMUTH_BIT    = (1<<7),// valid accuracy elipsode azimuth
 } GnssLocationInfoFlagBits;
 
 typedef enum {
@@ -393,6 +393,9 @@
     float speed;             // in meters per second
     float bearing;           // in degrees; range [0, 360)
     float accuracy;          // in meters
+    float verticalAccuracy;  // in meters
+    float speedAccuracy;     // in meters/second
+    float bearingAccuracy;   // in degrees (0 to 359.999)
     LocationTechnologyMask techMask;
 } Location;
 
@@ -441,9 +444,6 @@
     float hdop;                         // horizontal dilusion of precision
     float vdop;                         // vertical dilusion of precision
     float magneticDeviation;            // magnetic deviation
-    float verAccuracy;                  // vertical accuracy in meters
-    float speedAccuracy;                // speed accuracy in meters/second
-    float bearingAccuracy;              // bearing accuracy in degrees (0 to 359.999)
     LocationReliability horReliability; // horizontal reliability
     LocationReliability verReliability; // vertical reliability
     float horUncEllipseSemiMajor;       // horizontal elliptical accuracy semi-major axis