Ensure correct destruction of SensorPoseProviderImpl

- Delete the queue from the same thread that creates it (or otherwise we
  risk it being deleted after its looper has already been destroyed).
- Disable all sensors prior to shutting down the queue.

Test: Ran SensorPoseProvider-example
Bug: 188502620
Change-Id: I1200c9fd90bfe750608e809a667f54aa85250b55
diff --git a/media/libheadtracking/SensorPoseProvider.cpp b/media/libheadtracking/SensorPoseProvider.cpp
index 8e6c2ff..da1d8cb 100644
--- a/media/libheadtracking/SensorPoseProvider.cpp
+++ b/media/libheadtracking/SensorPoseProvider.cpp
@@ -101,6 +101,8 @@
     }
 
     ~SensorPoseProviderImpl() override {
+        // Disable all active sensors.
+        mEnabledSensors.clear();
         ALooper_wake(mLooper);
         mThread.join();
     }
@@ -109,12 +111,12 @@
         int32_t handle = ASensor_getHandle(sensor);
 
         // Enable the sensor.
-        if (ASensorEventQueue_registerSensor(mQueue->get(), sensor, samplingPeriod.count(), 0)) {
+        if (ASensorEventQueue_registerSensor(mQueue, sensor, samplingPeriod.count(), 0)) {
             ALOGE("Failed to enable sensor");
             return INVALID_HANDLE;
         }
 
-        mEnabledSensors.emplace(handle, SensorEnableGuard(mQueue->get(), sensor));
+        mEnabledSensors.emplace(handle, SensorEnableGuard(mQueue, sensor));
         return handle;
     }
 
@@ -123,9 +125,10 @@
   private:
     ALooper* mLooper;
     Listener* const mListener;
+
     std::thread mThread;
     std::map<int32_t, SensorEnableGuard> mEnabledSensors;
-    std::unique_ptr<EventQueueGuard> mQueue;
+    ASensorEventQueue* mQueue;
 
     // We must do some of the initialization operations on the worker thread, because the API relies
     // on the thread-local looper. In addition, as a matter of convenience, we store some of the
@@ -159,16 +162,15 @@
         }
 
         // Create event queue.
-        ASensorEventQueue* queue =
-                ASensorManager_createEventQueue(sensor_manager, mLooper, kIdent, nullptr, nullptr);
+        mQueue = ASensorManager_createEventQueue(sensor_manager, mLooper, kIdent, nullptr, nullptr);
 
-        if (queue == nullptr) {
+        if (mQueue == nullptr) {
             ALOGE("Failed to create a sensor event queue");
             initFinished(false);
             return;
         }
 
-        mQueue.reset(new EventQueueGuard(sensor_manager, queue));
+        EventQueueGuard eventQueueGuard(sensor_manager, mQueue);
 
         initFinished(true);
 
@@ -190,7 +192,7 @@
 
             // Process an event.
             ASensorEvent event;
-            ssize_t size = ASensorEventQueue_getEvents(queue, &event, 1);
+            ssize_t size = ASensorEventQueue_getEvents(mQueue, &event, 1);
             if (size < 0 || size > 1) {
                 ALOGE("Unexpected return value from ASensorEventQueue_getEvents: %zd", size);
                 break;