dynamic_sensor: Add multi-HAL 2.1 flush support.

Bug: 201730055
Test: Verified that flush, batch, and activate sensor VTS tests pass.
Change-Id: I6721d9f8976b3ef9f6af02b2320833025b479ee6
diff --git a/modules/sensors/dynamic_sensor/BaseSensorObject.cpp b/modules/sensors/dynamic_sensor/BaseSensorObject.cpp
index 4ec76b2..69fc7d8 100644
--- a/modules/sensors/dynamic_sensor/BaseSensorObject.cpp
+++ b/modules/sensors/dynamic_sensor/BaseSensorObject.cpp
@@ -42,6 +42,7 @@
 int BaseSensorObject::flush() {
     static const sensors_event_t event = {
         .type = SENSOR_TYPE_META_DATA,
+        .meta_data.what = META_DATA_FLUSH_COMPLETE,
         .timestamp = TIMESTAMP_AUTO_FILL  // timestamp will be filled at dispatcher
     };
     generateEvent(event);
diff --git a/modules/sensors/dynamic_sensor/DynamicSensorManager.cpp b/modules/sensors/dynamic_sensor/DynamicSensorManager.cpp
index 37b4313..be1a004 100644
--- a/modules/sensors/dynamic_sensor/DynamicSensorManager.cpp
+++ b/modules/sensors/dynamic_sensor/DynamicSensorManager.cpp
@@ -76,7 +76,7 @@
 
 int DynamicSensorManager::activate(int handle, bool enable) {
     if (handle == mHandleRange.first) {
-        // ignored
+        mMetaSensorActive = enable;
         return 0;
     }
 
@@ -109,13 +109,17 @@
 
 int DynamicSensorManager::flush(int handle) {
     if (handle == mHandleRange.first) {
-        // submit a flush complete here
-        static const sensors_event_t event = {
-            .sensor = mHandleRange.first,
-            .type = SENSOR_TYPE_META_DATA,
-            .timestamp = TIMESTAMP_AUTO_FILL,  // timestamp will be filled at dispatcher
-        };
-        submitEvent(nullptr, event);
+        if (mMetaSensorActive) {
+            static const sensors_event_t event = {
+                .sensor = mHandleRange.first,
+                .type = SENSOR_TYPE_META_DATA,
+                .meta_data.what = META_DATA_FLUSH_COMPLETE,
+                .timestamp = TIMESTAMP_AUTO_FILL,  // timestamp will be filled at dispatcher
+            };
+            submitEvent(nullptr, event);
+        } else {
+            return -EINVAL;
+        }
         return 0;
     }
     return operateSensor(handle, [] (sp<BaseSensorObject> s)->int {return s->flush();});
diff --git a/modules/sensors/dynamic_sensor/DynamicSensorManager.h b/modules/sensors/dynamic_sensor/DynamicSensorManager.h
index b6f39da..634c523 100644
--- a/modules/sensors/dynamic_sensor/DynamicSensorManager.h
+++ b/modules/sensors/dynamic_sensor/DynamicSensorManager.h
@@ -111,6 +111,7 @@
     // available sensor handle space
     const std::pair<int, int> mHandleRange;
     sensor_t mMetaSensor;
+    bool mMetaSensorActive = false;
 
     // immutable pointer to event callback, used in extention mode.
     SensorEventCallback * const mCallback;
diff --git a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp
index d9e3182..d5a9b3c 100644
--- a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp
+++ b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp
@@ -78,10 +78,9 @@
     return ResultFromStatus(rc);
 }
 
-Return<Result> DynamicSensorsSubHal::flush(int32_t sensor_handle __unused) {
-    ALOGE("DynamicSensorsSubHal::flush not supported.");
-
-    return Result::INVALID_OPERATION;
+Return<Result> DynamicSensorsSubHal::flush(int32_t sensor_handle) {
+    int rc = mDynamicSensorManager->flush(sensor_handle);
+    return ResultFromStatus(rc);
 }
 
 Return<void> DynamicSensorsSubHal::registerDirectChannel(