Merge "Modified SurfaceFlinger to implment setActiveConfig and getActiveConfig." into lmp-dev
diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp
index a53775f..cbca3ac 100644
--- a/libs/gui/BufferQueueProducer.cpp
+++ b/libs/gui/BufferQueueProducer.cpp
@@ -830,8 +830,8 @@
                     mCore->mSidebandStream.clear();
                     mCore->mDequeueCondition.broadcast();
                     listener = mCore->mConsumerListener;
-                } else {
-                    BQ_LOGE("disconnect(P): connected to another API "
+                } else if (mCore->mConnectedApi != BufferQueueCore::NO_CONNECTED_API) {
+                    BQ_LOGE("disconnect(P): still connected to another API "
                             "(cur=%d req=%d)", mCore->mConnectedApi, api);
                     status = BAD_VALUE;
                 }
diff --git a/libs/gui/Sensor.cpp b/libs/gui/Sensor.cpp
index 2103a95..613b8e2 100644
--- a/libs/gui/Sensor.cpp
+++ b/libs/gui/Sensor.cpp
@@ -166,83 +166,6 @@
         mStringType = SENSOR_STRING_TYPE_TEMPERATURE;
         mFlags |= SENSOR_FLAG_ON_CHANGE_MODE;
         break;
-    case SENSOR_TYPE_NON_WAKE_UP_PROXIMITY_SENSOR:
-        mStringType = SENSOR_STRING_TYPE_NON_WAKE_UP_PROXIMITY_SENSOR;
-        mFlags |= SENSOR_FLAG_ON_CHANGE_MODE;
-        break;
-    case SENSOR_TYPE_WAKE_UP_ACCELEROMETER:
-        mStringType = SENSOR_STRING_TYPE_WAKE_UP_ACCELEROMETER;
-        mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP);
-        break;
-    case SENSOR_TYPE_WAKE_UP_MAGNETIC_FIELD:
-        mStringType = SENSOR_STRING_TYPE_WAKE_UP_MAGNETIC_FIELD;
-        mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP);
-        break;
-    case SENSOR_TYPE_WAKE_UP_ORIENTATION:
-        mStringType = SENSOR_STRING_TYPE_WAKE_UP_ORIENTATION;
-        mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP);
-        break;
-    case SENSOR_TYPE_WAKE_UP_GYROSCOPE:
-        mStringType = SENSOR_STRING_TYPE_WAKE_UP_GYROSCOPE;
-        mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP);
-        break;
-    case SENSOR_TYPE_WAKE_UP_LIGHT:
-        mStringType = SENSOR_STRING_TYPE_WAKE_UP_LIGHT;
-        mFlags |= (SENSOR_FLAG_ON_CHANGE_MODE | SENSOR_FLAG_WAKE_UP);
-        break;
-    case SENSOR_TYPE_WAKE_UP_PRESSURE:
-        mStringType = SENSOR_STRING_TYPE_WAKE_UP_PRESSURE;
-        mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP);
-        break;
-    case SENSOR_TYPE_WAKE_UP_GRAVITY:
-        mStringType = SENSOR_STRING_TYPE_WAKE_UP_GRAVITY;
-        mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP);
-        break;
-    case SENSOR_TYPE_WAKE_UP_LINEAR_ACCELERATION:
-        mStringType = SENSOR_STRING_TYPE_WAKE_UP_LINEAR_ACCELERATION;
-        mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP);
-        break;
-    case SENSOR_TYPE_WAKE_UP_ROTATION_VECTOR:
-        mStringType = SENSOR_STRING_TYPE_WAKE_UP_ROTATION_VECTOR;
-        mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP);
-        break;
-    case SENSOR_TYPE_WAKE_UP_RELATIVE_HUMIDITY:
-        mStringType = SENSOR_STRING_TYPE_WAKE_UP_RELATIVE_HUMIDITY;
-        mFlags |= (SENSOR_FLAG_SPECIAL_REPORTING_MODE | SENSOR_FLAG_WAKE_UP);
-        break;
-    case SENSOR_TYPE_WAKE_UP_AMBIENT_TEMPERATURE:
-        mStringType = SENSOR_STRING_TYPE_WAKE_UP_AMBIENT_TEMPERATURE;
-        mFlags |= (SENSOR_FLAG_ON_CHANGE_MODE | SENSOR_FLAG_WAKE_UP);
-        break;
-    case SENSOR_TYPE_WAKE_UP_MAGNETIC_FIELD_UNCALIBRATED:
-        mStringType = SENSOR_STRING_TYPE_WAKE_UP_MAGNETIC_FIELD_UNCALIBRATED;
-        mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP);
-        break;
-    case SENSOR_TYPE_WAKE_UP_GAME_ROTATION_VECTOR:
-        mStringType = SENSOR_STRING_TYPE_WAKE_UP_GAME_ROTATION_VECTOR;
-        mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP);
-        break;
-    case SENSOR_TYPE_WAKE_UP_GYROSCOPE_UNCALIBRATED:
-        mStringType = SENSOR_STRING_TYPE_WAKE_UP_GYROSCOPE_UNCALIBRATED;
-        mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP);
-        break;
-    case SENSOR_TYPE_WAKE_UP_STEP_DETECTOR:
-        mStringType = SENSOR_STRING_TYPE_WAKE_UP_STEP_DETECTOR;
-        mFlags |= (SENSOR_FLAG_SPECIAL_REPORTING_MODE | SENSOR_FLAG_WAKE_UP);
-        break;
-    case SENSOR_TYPE_WAKE_UP_STEP_COUNTER:
-        mStringType = SENSOR_STRING_TYPE_WAKE_UP_STEP_COUNTER;
-        mFlags |= (SENSOR_FLAG_ON_CHANGE_MODE | SENSOR_FLAG_WAKE_UP);
-        break;
-    case SENSOR_TYPE_WAKE_UP_GEOMAGNETIC_ROTATION_VECTOR:
-        mStringType = SENSOR_STRING_TYPE_WAKE_UP_GEOMAGNETIC_ROTATION_VECTOR;
-        mFlags |= (SENSOR_FLAG_CONTINUOUS_MODE | SENSOR_FLAG_WAKE_UP);
-        break;
-    case SENSOR_TYPE_WAKE_UP_HEART_RATE:
-        mStringType = SENSOR_STRING_TYPE_WAKE_UP_HEART_RATE;
-        mRequiredPermission = SENSOR_PERMISSION_BODY_SENSORS;
-        mFlags |= (SENSOR_FLAG_ON_CHANGE_MODE | SENSOR_FLAG_WAKE_UP);
-        break;
     case SENSOR_TYPE_WAKE_UP_TILT_DETECTOR:
         mStringType = SENSOR_STRING_TYPE_WAKE_UP_TILT_DETECTOR;
         mFlags |= (SENSOR_FLAG_SPECIAL_REPORTING_MODE | SENSOR_FLAG_WAKE_UP);
@@ -255,6 +178,10 @@
         mStringType = SENSOR_STRING_TYPE_GLANCE_GESTURE;
         mFlags |= (SENSOR_FLAG_ONE_SHOT_MODE | SENSOR_FLAG_WAKE_UP);
         break;
+    case SENSOR_TYPE_PICK_UP_GESTURE:
+        mStringType = SENSOR_STRING_TYPE_PICK_UP_GESTURE;
+        mFlags |= (SENSOR_FLAG_ONE_SHOT_MODE | SENSOR_FLAG_WAKE_UP);
+        break;
     default:
         // Only pipe the stringType, requiredPermission and flags for custom sensors.
         if (halVersion >= SENSORS_DEVICE_API_VERSION_1_2 && hwSensor->stringType) {
diff --git a/opengl/libs/EGL/eglApi.cpp b/opengl/libs/EGL/eglApi.cpp
index 6e77e45..99c01b7 100644
--- a/opengl/libs/EGL/eglApi.cpp
+++ b/opengl/libs/EGL/eglApi.cpp
@@ -572,6 +572,15 @@
         return setError(EGL_BAD_SURFACE, EGL_FALSE);
 
     egl_surface_t * const s = get_surface(surface);
+    ANativeWindow* window = s->win.get();
+    if (window) {
+        int result = native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL);
+        if (result != OK) {
+            ALOGE("eglDestroySurface: native_window_api_disconnect (win=%p) "
+                  "failed (%#x)",
+                  window, result);
+        }
+    }
     EGLBoolean result = s->cnx->egl.eglDestroySurface(dp->disp.dpy, s->surface);
     if (result == EGL_TRUE) {
         _s.terminate();