Correctly blend translucent GIF bitmaps.

Change-Id: Ifeb2c1d97a4c6dfeb1a7b5b26f1a3153e9f8da7f
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index a0aea00..cc88236 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -1982,9 +1982,8 @@
 }
 
 SkXfermode::Mode OpenGLRenderer::getXfermode(SkXfermode* mode) {
-    /* In the future we should look at unifying the Porter-Duff modes and
-     * SkXferModes so that we can use SkXfermode::IsMode(xfer, &mode).
-     */
+    // In the future we should look at unifying the Porter-Duff modes and
+    // SkXferModes so that we can use SkXfermode::IsMode(xfer, &mode).
     if (mode == NULL) {
         return SkXfermode::kSrcOver_Mode;
     }
diff --git a/libs/hwui/TextDropShadowCache.h b/libs/hwui/TextDropShadowCache.h
index ffccfa2..1e065d1 100644
--- a/libs/hwui/TextDropShadowCache.h
+++ b/libs/hwui/TextDropShadowCache.h
@@ -58,6 +58,7 @@
     SkTypeface* typeface;
     String8 str;
 
+    // TODO: Should take into account fake bold and text skew
     bool operator<(const ShadowText& rhs) const {
         LTE_INT(len) {
             LTE_INT(radius) {
diff --git a/libs/hwui/TextureCache.cpp b/libs/hwui/TextureCache.cpp
index e560b8f..3752874 100644
--- a/libs/hwui/TextureCache.cpp
+++ b/libs/hwui/TextureCache.cpp
@@ -209,13 +209,10 @@
         // decoding happened
         texture->blend = !bitmap->isOpaque();
         break;
+    case SkBitmap::kARGB_4444_Config:
     case SkBitmap::kIndex8_Config:
         uploadLoFiTexture(resize, bitmap, texture->width, texture->height);
-        texture->blend = false;
-        break;
-    case SkBitmap::kARGB_4444_Config:
-        uploadLoFiTexture(resize, bitmap, texture->width, texture->height);
-        texture->blend = true;
+        texture->blend = !bitmap->isOpaque();
         break;
     default:
         LOGW("Unsupported bitmap config: %d", bitmap->getConfig());
@@ -235,6 +232,7 @@
     rgbaBitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height);
     rgbaBitmap.allocPixels();
     rgbaBitmap.eraseColor(0);
+    rgbaBitmap.setIsOpaque(bitmap->isOpaque());
 
     SkCanvas canvas(rgbaBitmap);
     canvas.drawBitmap(*bitmap, 0.0f, 0.0f, NULL);