center text, fix extents for multiline texts

Bug: 7064142
Change-Id: I3c423c54609b28def1db56084190bf10b87f40f8
diff --git a/tools/recovery_l10n/res/layout/main.xml b/tools/recovery_l10n/res/layout/main.xml
index 1ac2b24..0900b11 100644
--- a/tools/recovery_l10n/res/layout/main.xml
+++ b/tools/recovery_l10n/res/layout/main.xml
@@ -22,6 +22,7 @@
             android:textColor="#ffffffff"
             android:background="#ff000000"
             android:maxWidth="480px"
+            android:gravity="center"
             />
 
 
diff --git a/tools/recovery_l10n/src/com/android/recovery_l10n/Main.java b/tools/recovery_l10n/src/com/android/recovery_l10n/Main.java
index 5c4199f..3f2bebe 100644
--- a/tools/recovery_l10n/src/com/android/recovery_l10n/Main.java
+++ b/tools/recovery_l10n/src/com/android/recovery_l10n/Main.java
@@ -237,6 +237,44 @@
             int h = bm.getHeight();
             int w = bm.getWidth();
 
+            bm.getPixels(pixels, 0, w, 0, 0, w, h);
+
+            // Find the rightmost and leftmost columns with any
+            // nonblack pixels; we'll copy just that region to the
+            // output image.
+
+            int right = w;
+            while (right > 1) {
+                boolean all_black = true;
+                for (int j = 0; j < h; ++j) {
+                    if (pixels[j*w+right-1] != 0xff000000) {
+                        all_black = false;
+                        break;
+                    }
+                }
+                if (all_black) {
+                    --right;
+                } else {
+                    break;
+                }
+            }
+
+            int left = 0;
+            while (left < right-1) {
+                boolean all_black = true;
+                for (int j = 0; j < h; ++j) {
+                    if (pixels[j*w+left] != 0xff000000) {
+                        all_black = false;
+                        break;
+                    }
+                }
+                if (all_black) {
+                    ++left;
+                } else {
+                    break;
+                }
+            }
+
             // Make the last country variant for a given language be
             // the catch-all for that language (because recovery will
             // take the first one that matches).
@@ -245,10 +283,11 @@
                 countByLanguage.put(lang, countByLanguage.get(lang)-1);
                 lang = loc.toString();
             }
-            Log.i(TAG, "encoding \"" + loc + "\" as \"" + lang + "\"");
+            int tw = right - left;
+            Log.i(TAG, "encoding \"" + loc + "\" as \"" + lang + "\": " + tw + " x " + h);
             byte[] langBytes = lang.getBytes();
-            out.setPixel(0, p, colorFor(w & 0xff));
-            out.setPixel(1, p, colorFor(w >>> 8));
+            out.setPixel(0, p, colorFor(tw & 0xff));
+            out.setPixel(1, p, colorFor(tw >>> 8));
             out.setPixel(2, p, colorFor(h & 0xff));
             out.setPixel(3, p, colorFor(h >>> 8));
             out.setPixel(4, p, colorFor(langBytes.length));
@@ -261,8 +300,7 @@
 
             p++;
 
-            bm.getPixels(pixels, 0, w, 0, 0, w, h);
-            out.setPixels(pixels, 0, w, 0, p, w, h);
+            out.setPixels(pixels, left, w, 0, p, tw, h);
             p += h;
         }
 
@@ -276,5 +314,6 @@
         p++;
 
         saveBitmap(out, "text-out.png");
+        Log.i(TAG, "wrote text-out.png");
     }
 }