Remove dependency on libandroid

The main purpose of this change is to avoid having to pull in libandroid
for the sake of using the sensor manager from the audioserver process
(native). The way this is achieved is by using lower-level APIs, namely
those offered by libsensor.

As a result, we were able to use sensor handles in SensorPoseProvider,
rather than ASensor* objects, which is simpler and removes the need to
enumerate all the sensor for the sake of finding the one with the
correct handle.

Test: Manually enable head tracking and observe the logs to verify that
      the expected pose updates are received.
Bug: 198795859
Change-Id: Ic69c322d6ea9297309a4856b3047c841831e04d7
diff --git a/services/audiopolicy/service/SpatializerPoseController.cpp b/services/audiopolicy/service/SpatializerPoseController.cpp
index 215f899..eb23298 100644
--- a/services/audiopolicy/service/SpatializerPoseController.cpp
+++ b/services/audiopolicy/service/SpatializerPoseController.cpp
@@ -17,6 +17,7 @@
 
 #define LOG_TAG "SpatializerPoseController"
 //#define LOG_NDEBUG 0
+#include <sensor/Sensor.h>
 #include <utils/Log.h>
 #include <utils/SystemClock.h>
 
@@ -129,45 +130,47 @@
     mThread.join();
 }
 
-void SpatializerPoseController::setHeadSensor(const ASensor* sensor) {
+void SpatializerPoseController::setHeadSensor(int32_t sensor) {
     std::lock_guard lock(mMutex);
     // Stop current sensor, if valid and different from the other sensor.
-    if (mHeadSensor != SensorPoseProvider::INVALID_HANDLE && mHeadSensor != mScreenSensor) {
+    if (mHeadSensor != INVALID_SENSOR && mHeadSensor != mScreenSensor) {
         mPoseProvider->stopSensor(mHeadSensor);
     }
 
-    if (sensor != nullptr) {
-        if (ASensor_getHandle(sensor) != mScreenSensor) {
+    if (sensor != INVALID_SENSOR) {
+        if (sensor != mScreenSensor) {
             // Start new sensor.
-            mHeadSensor = mPoseProvider->startSensor(sensor, mSensorPeriod);
+            mHeadSensor =
+                    mPoseProvider->startSensor(sensor, mSensorPeriod) ? sensor : INVALID_SENSOR;
         } else {
             // Sensor is already enabled.
             mHeadSensor = mScreenSensor;
         }
     } else {
-        mHeadSensor = SensorPoseProvider::INVALID_HANDLE;
+        mHeadSensor = INVALID_SENSOR;
     }
 
     mProcessor->recenter(true, false);
 }
 
-void SpatializerPoseController::setScreenSensor(const ASensor* sensor) {
+void SpatializerPoseController::setScreenSensor(int32_t sensor) {
     std::lock_guard lock(mMutex);
     // Stop current sensor, if valid and different from the other sensor.
-    if (mScreenSensor != SensorPoseProvider::INVALID_HANDLE && mScreenSensor != mHeadSensor) {
+    if (mScreenSensor != INVALID_SENSOR && mScreenSensor != mHeadSensor) {
         mPoseProvider->stopSensor(mScreenSensor);
     }
 
-    if (sensor != nullptr) {
-        if (ASensor_getHandle(sensor) != mHeadSensor) {
+    if (sensor != INVALID_SENSOR) {
+        if (sensor != mHeadSensor) {
             // Start new sensor.
-            mScreenSensor = mPoseProvider->startSensor(sensor, mSensorPeriod);
+            mScreenSensor =
+                    mPoseProvider->startSensor(sensor, mSensorPeriod) ? sensor : INVALID_SENSOR;
         } else {
             // Sensor is already enabled.
             mScreenSensor = mHeadSensor;
         }
     } else {
-        mScreenSensor = SensorPoseProvider::INVALID_HANDLE;
+        mScreenSensor = INVALID_SENSOR;
     }
 
     mProcessor->recenter(false, true);