Change API from flush(handle) to flush(). Call flush on all active sensors in the given SensorEventConnection.

Change-Id: I4ef2bec80406c517903ab9782dc9eaf3fa8b7f36
diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp
index b26e572..af605de 100644
--- a/services/sensorservice/SensorService.cpp
+++ b/services/sensorservice/SensorService.cpp
@@ -679,8 +679,12 @@
                                     int handle) {
   if (mInitCheck != NO_ERROR) return mInitCheck;
   SensorInterface* sensor = mSensorMap.valueFor(handle);
-   if (sensor == NULL) {
-       return BAD_VALUE;
+  if (sensor == NULL) {
+      return BAD_VALUE;
+  }
+  if (sensor->getSensor().getType() == SENSOR_TYPE_SIGNIFICANT_MOTION) {
+      ALOGE("flush called on Significant Motion sensor");
+      return INVALID_OPERATION;
   }
   SensorDevice& dev(SensorDevice::getInstance());
 
@@ -934,8 +938,18 @@
     return mService->setEventRate(this, handle, samplingPeriodNs);
 }
 
-status_t  SensorService::SensorEventConnection::flushSensor(int handle) {
-    return mService->flushSensor(this, handle);
+status_t  SensorService::SensorEventConnection::flush() {
+    Mutex::Autolock _l(mConnectionLock);
+    status_t err(NO_ERROR);
+    for (size_t i = 0; i < mSensorInfo.size(); ++i) {
+        const int handle = mSensorInfo.keyAt(i);
+        status_t err_flush = mService->flushSensor(this, handle);
+        if (err_flush != NO_ERROR) {
+            ALOGE("Flush error handle=%d %s", handle, strerror(-err_flush));
+        }
+        err = (err_flush != NO_ERROR) ? err_flush : err;
+    }
+    return err;
 }
 
 // ---------------------------------------------------------------------------
diff --git a/services/sensorservice/SensorService.h b/services/sensorservice/SensorService.h
index 2311bff..2d40071 100644
--- a/services/sensorservice/SensorService.h
+++ b/services/sensorservice/SensorService.h
@@ -79,7 +79,7 @@
         virtual status_t enableDisable(int handle, bool enabled, nsecs_t samplingPeriodNs,
                                        nsecs_t maxBatchReportLatencyNs, int reservedFlags);
         virtual status_t setEventRate(int handle, nsecs_t samplingPeriodNs);
-        virtual status_t flushSensor(int handle);
+        virtual status_t flush();
         // Count the number of flush complete events which are about to be dropped in the buffer.
         // Increment mPendingFlushEventsToSend in mSensorInfo. These flush complete events will be
         // sent separately before the next batch of events.