Merge "Fix bug #5753006 Garbled Labels in Maps"
diff --git a/core/jni/android/graphics/Canvas.cpp b/core/jni/android/graphics/Canvas.cpp
index f118dc1..8d05e28 100644
--- a/core/jni/android/graphics/Canvas.cpp
+++ b/core/jni/android/graphics/Canvas.cpp
@@ -779,15 +779,8 @@
         // TODO: need to suppress this code after the GL renderer is modified for not
         // copying the paint
 
-        // Save old text encoding
-        SkPaint::TextEncoding oldEncoding = paint->getTextEncoding();
-        // Define Glyph encoding
-        paint->setTextEncoding(SkPaint::kGlyphID_TextEncoding);
-
+        // Beware: this needs Glyph encoding (already done on the Paint constructor)
         canvas->drawText(glyphArray + index * 2, count * 2, x, y, *paint);
-
-        // Get back old encoding
-        paint->setTextEncoding(oldEncoding);
     }
 
     static void drawTextRun___CIIIIFFIPaint(
diff --git a/core/jni/android/graphics/Paint.cpp b/core/jni/android/graphics/Paint.cpp
index 19f53d7..9f3238ab 100644
--- a/core/jni/android/graphics/Paint.cpp
+++ b/core/jni/android/graphics/Paint.cpp
@@ -54,8 +54,8 @@
 static JMetricsID gFontMetricsInt_fieldID;
 
 static void defaultSettingsForAndroid(SkPaint* paint) {
-    // utf16 is required for java
-    paint->setTextEncoding(SkPaint::kUTF16_TextEncoding);
+    // GlyphID encoding is required because we are using Harfbuzz shaping
+    paint->setTextEncoding(SkPaint::kGlyphID_TextEncoding);
 }
 
 class SkPaintGlue {
diff --git a/core/jni/android/graphics/TextLayout.cpp b/core/jni/android/graphics/TextLayout.cpp
index f88dcd6..5099510 100644
--- a/core/jni/android/graphics/TextLayout.cpp
+++ b/core/jni/android/graphics/TextLayout.cpp
@@ -52,7 +52,7 @@
 // This will draw if canvas is not null, otherwise path must be non-null and it will create
 // a path representing the text that would have been drawn.
 void TextLayout::handleText(SkPaint *paint, const jchar* text, jsize len,
-                            jint bidiFlags, jfloat x, jfloat y,SkCanvas *canvas, SkPath *path) {
+                            jint bidiFlags, jfloat x, jfloat y, SkPath *path) {
     sp<TextLayoutCacheValue> value;
 #if USE_TEXT_LAYOUT_CACHE
     // Return advances from the cache. Compute them if needed
@@ -70,11 +70,8 @@
     }
     SkScalar x_ = SkFloatToScalar(x);
     SkScalar y_ = SkFloatToScalar(y);
-    if (canvas) {
-        canvas->drawText(value->getGlyphs(), value->getGlyphsCount() * 2, x_, y_, *paint);
-    } else {
-        paint->getTextPath(value->getGlyphs(), value->getGlyphsCount() * 2, x_, y_, path);
-    }
+    // Beware: this needs Glyph encoding (already done on the Paint constructor)
+    paint->getTextPath(value->getGlyphs(), value->getGlyphsCount() * 2, x_, y_, path);
 }
 
 void TextLayout::getTextRunAdvances(SkPaint* paint, const jchar* chars, jint start,
@@ -113,7 +110,7 @@
 
 void TextLayout::getTextPath(SkPaint *paint, const jchar *text, jsize len,
                              jint bidiFlags, jfloat x, jfloat y, SkPath *path) {
-    handleText(paint, text, len, bidiFlags, x, y, NULL, path);
+    handleText(paint, text, len, bidiFlags, x, y, path);
 }
 
 
@@ -143,16 +140,8 @@
                 String8(text, count).string());
         return ;
     }
-
-    // Save old text encoding
-    SkPaint::TextEncoding oldEncoding = paint->getTextEncoding();
-    // Define Glyph encoding
-    paint->setTextEncoding(SkPaint::kGlyphID_TextEncoding);
-
+    // Beware: this needs Glyph encoding (already done on the Paint constructor)
     canvas->drawTextOnPathHV(value->getGlyphs(), value->getGlyphsCount() * 2, *path, h_, v_, *paint);
-
-    // Get back old encoding
-    paint->setTextEncoding(oldEncoding);
 }
 
 void TextLayout::computeAdvancesWithICU(SkPaint* paint, const UChar* chars,
diff --git a/core/jni/android/graphics/TextLayout.h b/core/jni/android/graphics/TextLayout.h
index 1dabe32..a0f9402 100644
--- a/core/jni/android/graphics/TextLayout.h
+++ b/core/jni/android/graphics/TextLayout.h
@@ -81,7 +81,7 @@
     static bool needsLayout(const jchar* text, jint len, jint bidiFlags);
 
     static void handleText(SkPaint* paint, const jchar* text, jsize len,
-                           int bidiFlags, jfloat x, jfloat y, SkCanvas* canvas, SkPath* path);
+                           int bidiFlags, jfloat x, jfloat y, SkPath* path);
 
     static void computeAdvancesWithICU(SkPaint* paint, const UChar* chars,
             size_t start, size_t count, size_t contextCount, int dirFlags,
diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp
index b8ba23d..656a384 100644
--- a/libs/hwui/DisplayListRenderer.cpp
+++ b/libs/hwui/DisplayListRenderer.cpp
@@ -1210,10 +1210,8 @@
     //       see if it matters.
     //       If we make a copy, then drawTextDecorations() should *not* make
     //       its own copy as it does right now.
+    // Beware: this needs Glyph encoding (already done on the Paint constructor)
     paint->setAntiAlias(true);
-#if RENDER_TEXT_AS_GLYPHS
-    paint->setTextEncoding(SkPaint::kGlyphID_TextEncoding);
-#endif
     addPaint(paint);
     addFloat(length < 0.0f ? paint->measureText(text, bytesCount) : length);
 }