Index: chrome/android/java/src/org/chromium/chrome/browser/ShortcutHelper.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ShortcutHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/ShortcutHelper.java |
index ecb2acdea553ba595f9bc8bddd9d754555f935c8..e274e12fdfd6a1d426085a661718498a8d8be92e 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/ShortcutHelper.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ShortcutHelper.java |
@@ -10,6 +10,7 @@ import android.content.Intent; |
import android.content.pm.PackageManager; |
import android.content.pm.ResolveInfo; |
import android.graphics.Bitmap; |
+import android.graphics.BitmapFactory; |
import android.graphics.Canvas; |
import android.graphics.Color; |
import android.graphics.Paint; |
@@ -23,6 +24,7 @@ import android.graphics.drawable.Drawable; |
import android.net.Uri; |
import android.os.Handler; |
import android.os.Looper; |
+import android.text.TextUtils; |
import android.util.Base64; |
import android.util.DisplayMetrics; |
import android.util.TypedValue; |
@@ -119,13 +121,7 @@ public class ShortcutHelper { |
Intent shortcutIntent; |
if (isWebappCapable) { |
// Encode the icon as a base64 string (Launcher drops Bitmaps in the Intent). |
- String encodedIcon = ""; |
- if (icon != null) { |
- ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); |
- icon.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); |
- byte[] byteArray = byteArrayOutputStream.toByteArray(); |
- encodedIcon = Base64.encodeToString(byteArray, Base64.DEFAULT); |
- } |
+ String encodedIcon = encodeBitmapAsString(icon); |
// Add the shortcut as a launcher icon for a full-screen Activity. |
shortcutIntent = new Intent(); |
@@ -257,6 +253,31 @@ public class ShortcutHelper { |
return bitmap; |
} |
+ /** |
+ * Compresses a bitmap into a PNG and converts into a Base64 encoded string. |
+ * The encoded string can be decoded using {@link decodeBitmapFromString(String)}. |
+ * @param bitmap The Bitmap to compress and encode. |
+ * @return the String encoding the Bitmap. |
+ */ |
+ public static String encodeBitmapAsString(Bitmap bitmap) { |
+ if (bitmap == null) return ""; |
+ ByteArrayOutputStream output = new ByteArrayOutputStream(); |
+ bitmap.compress(Bitmap.CompressFormat.PNG, 100, output); |
+ return Base64.encodeToString(output.toByteArray(), Base64.DEFAULT); |
+ } |
+ |
+ /** |
+ * Decodes a Base64 string into a Bitmap. Used to decode Bitmaps encoded by |
+ * {@link encodeBitmapAsString(Bitmap)}. |
+ * @param encodedString the Base64 String to decode. |
+ * @return the Bitmap which was encoded by the String. |
+ */ |
+ public static Bitmap decodeBitmapFromString(String encodedString) { |
+ if (TextUtils.isEmpty(encodedString)) return null; |
+ byte[] decoded = Base64.decode(encodedString, Base64.DEFAULT); |
+ return BitmapFactory.decodeByteArray(decoded, 0, decoded.length); |
+ } |
+ |
private static Bitmap getBitmapFromResourceId(Context context, int id, int density) { |
Drawable drawable = ApiCompatibilityUtils.getDrawableForDensity( |
context.getResources(), id, density); |