Merge change 22257 into eclair

* changes:
  first step for fixing [2066786] EGL object lifetime management doesn't respect the EGL spec
diff --git a/im/java/android/im/BrandingResourceIDs.java b/im/java/android/im/BrandingResourceIDs.java
deleted file mode 100644
index 9960722..0000000
--- a/im/java/android/im/BrandingResourceIDs.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.im;
-
-/**
- * @hide
- * Defines the IDs of branding resources.
- */
-public interface BrandingResourceIDs {
-    /**
-     * The logo icon of the provider which is displayed in the landing page.
-     */
-    public static final int DRAWABLE_LOGO                = 100;
-    /**
-     * The icon of online presence status.
-     */
-    public static final int DRAWABLE_PRESENCE_ONLINE     = 102;
-    /**
-     * The icon of busy presence status.
-     */
-    public static final int DRAWABLE_PRESENCE_BUSY       = 103;
-    /**
-     * The icon of away presence status.
-     */
-    public static final int DRAWABLE_PRESENCE_AWAY       = 104;
-    /**
-     * The icon of invisible presence status.
-     */
-    public static final int DRAWABLE_PRESENCE_INVISIBLE  = 105;
-    /**
-     * The icon of offline presence status.
-     */
-    public static final int DRAWABLE_PRESENCE_OFFLINE    = 106;
-    /**
-     * The label of the menu to go to the contact list screen.
-     */
-    public static final int STRING_MENU_CONTACT_LIST     = 107;
-
-}
diff --git a/im/java/android/im/IImPlugin.aidl b/im/java/android/im/IImPlugin.aidl
deleted file mode 100644
index 229cd0e..0000000
--- a/im/java/android/im/IImPlugin.aidl
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.im;
-
-/**
- * @hide
- */
-interface IImPlugin {
-    /**
-     * Notify the plugin the front door activity is created. This gives the plugin a chance to
-     * start its own servics, etc.
-     */
-    void onStart();
-    
-    /**
-     * Notify the plugin the front door activity is stopping.
-     */
-    void onStop();
-
-    /**
-     * Sign in to the service for the account passed in.
-     *
-     * @param account the account id for the accont to be signed into.
-     */
-    void signIn(long account);
-
-    /**
-     * Sign out of the service for the account passed in.
-     *
-     * @param account the account id for the accont to be signed out of.
-     */
-    void signOut(long account);
-
-    /**
-     * Returns the package name used to load the resources for the given provider name.
-     *
-     * @return The package name to load the resourcs for the given provider.
-     */
-    String getResourcePackageNameForProvider(String providerName);
-
-    /**
-     * Returns a map of branding resources for the given provider. The keys are defined
-     * in {@link android.im.BrandingResourceIDs}. The values are the resource identifiers generated
-     * by the aapt tool.
-     *
-     * @return The map of branding resources for the given provider.
-     */
-    Map getResourceMapForProvider(String providerName);
-
-    /*
-     * Returns a list of supported IM providers.
-     *
-     * @return a List of supported providers.
-     */
-    List getSupportedProviders();
-}
diff --git a/im/java/android/im/ImPluginConsts.java b/im/java/android/im/ImPluginConsts.java
deleted file mode 100644
index 416493f..0000000
--- a/im/java/android/im/ImPluginConsts.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.im;
-
-/**
- * @hide
- */
-public class ImPluginConsts {
-    /**
-     * The intent action name for the plugin service.
-     */
-    public static final String PLUGIN_ACTION_NAME = "android.im.plugin";
-}
\ No newline at end of file
diff --git a/libs/ui/Surface.cpp b/libs/ui/Surface.cpp
index 36a10cf..474308a 100644
--- a/libs/ui/Surface.cpp
+++ b/libs/ui/Surface.cpp
@@ -602,7 +602,18 @@
     mBackbufferIndex = backIdx;
     layer_cblk_t* const lcblk = &(cblk->layers[index]);
     volatile const surface_info_t* const back = lcblk->surface + backIdx;
-    if ((back->flags & surface_info_t::eNeedNewBuffer) || mUsageChanged) {
+
+    const sp<SurfaceBuffer>& backBuffer(mBuffers[backIdx]);
+
+    if (backBuffer==0 &&
+            !((back->flags & surface_info_t::eNeedNewBuffer) || mUsageChanged)) {
+        LOGW("dequeueBuffer: backbuffer is null, but eNeedNewBuffer "
+                "is not set, fetching a buffer anyways...");
+    }
+
+    if ((back->flags & surface_info_t::eNeedNewBuffer) ||mUsageChanged ||
+            backBuffer==0) 
+    {
         mUsageChanged = false;
         err = getBufferLocked(backIdx, mUsage);
         if (err == NO_ERROR) {
@@ -614,7 +625,6 @@
     }
 
     if (err == NO_ERROR) {
-        const sp<SurfaceBuffer>& backBuffer(mBuffers[backIdx]);
         if (backBuffer != 0) {
             mDirtyRegion.set(backBuffer->width, backBuffer->height);
             *buffer = backBuffer.get();