Wait for the capabilities callback before deciding FLP HAL version.

-Some implementations require a modem handshake to determine
 FLP HAL version and can't do it upon initialization.  Wait
 for a v2 callback before assuming that the HAL implementation
 is actually v2.

Bug: 21958418
Change-Id: I7512d293f99363c63580c69d84f80da96a88dd2f
diff --git a/services/core/java/com/android/server/location/FlpHardwareProvider.java b/services/core/java/com/android/server/location/FlpHardwareProvider.java
index 259ff1d..d4f3c4d 100644
--- a/services/core/java/com/android/server/location/FlpHardwareProvider.java
+++ b/services/core/java/com/android/server/location/FlpHardwareProvider.java
@@ -136,6 +136,10 @@
         }
 
         maybeSendCapabilities();
+
+        if (mGeofenceHardwareSink != null) {
+            mGeofenceHardwareSink.setVersion(getVersion());
+        }
     }
 
     private void onBatchingStatus(int status) {
@@ -152,10 +156,23 @@
         }
     }
 
+    // Returns the current version of the FLP HAL.  This depends both on the version of the
+    // structure returned by the hardware layer, and whether or not we've received the
+    // capabilities callback on initialization.  Assume original version until we get
+    // the new initialization callback.
+    private int getVersion() {
+        synchronized (mLocationSinkLock) {
+            if (mHaveBatchingCapabilities) {
+                return mVersion;
+            }
+        }
+        return 1;
+    }
+
     private void setVersion(int version) {
         mVersion = version;
         if (mGeofenceHardwareSink != null) {
-            mGeofenceHardwareSink.setVersion(version);
+            mGeofenceHardwareSink.setVersion(getVersion());
         }
     }
 
@@ -375,7 +392,7 @@
 
         @Override
         public void flushBatchedLocations() {
-            if (mVersion >= FIRST_VERSION_WITH_FLUSH_LOCATIONS) {
+            if (getVersion() >= FIRST_VERSION_WITH_FLUSH_LOCATIONS) {
                 nativeFlushBatchedLocations();
             } else {
                 Log.wtf(TAG,
@@ -405,7 +422,7 @@
 
         @Override
         public int getVersion() {
-            return mVersion;
+            return FlpHardwareProvider.this.getVersion();
         }
     };
 
@@ -482,7 +499,7 @@
     private GeofenceHardwareImpl getGeofenceHardwareSink() {
         if (mGeofenceHardwareSink == null) {
             mGeofenceHardwareSink = GeofenceHardwareImpl.getInstance(mContext);
-            mGeofenceHardwareSink.setVersion(mVersion);
+            mGeofenceHardwareSink.setVersion(getVersion());
         }
 
         return mGeofenceHardwareSink;