diff --git a/res/values/dimens.xml b/res/values/dimens.xml new file mode 100644 index 0000000000..4578c05d79 --- /dev/null +++ b/res/values/dimens.xml @@ -0,0 +1,4 @@ + + + 64dip + \ No newline at end of file diff --git a/src/org/thoughtcrime/securesms/util/Emoji.java b/src/org/thoughtcrime/securesms/util/Emoji.java index 0d40dae26d..145ceb9874 100644 --- a/src/org/thoughtcrime/securesms/util/Emoji.java +++ b/src/org/thoughtcrime/securesms/util/Emoji.java @@ -2,6 +2,9 @@ package org.thoughtcrime.securesms.util; import android.content.Context; import android.content.SharedPreferences; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.preference.PreferenceManager; import android.text.Spannable; @@ -12,6 +15,8 @@ import android.util.Log; import com.google.thoughtcrimegson.Gson; import com.google.thoughtcrimegson.reflect.TypeToken; +import org.thoughtcrime.securesms.R; + import java.io.File; import java.io.IOException; import java.lang.reflect.Type; @@ -42,14 +47,16 @@ public class Emoji { public static final double EMOJI_LARGE = 1; public static final double EMOJI_SMALL = 0.7; - private final Context context; - private final String[] emojiAssets; - private final Set emojiAssetsSet; + private final Context context; + private final String[] emojiAssets; + private final Set emojiAssetsSet; + private final BitmapFactory.Options bitmapOptions; private Emoji(Context context) { this.context = context.getApplicationContext(); this.emojiAssets = initializeEmojiAssets(); this.emojiAssetsSet = new HashSet(); + this.bitmapOptions = initializeBitmapOptions(); Collections.addAll(this.emojiAssetsSet, emojiAssets); } @@ -119,7 +126,12 @@ public class Emoji { private Drawable getEmojiDrawable(String assetName) { try { - return Drawable.createFromStream(context.getAssets().open("emoji" + File.separator + assetName), null); + Bitmap bitmap = BitmapFactory.decodeStream(context.getAssets().open("emoji" + File.separator + assetName), + null, bitmapOptions); + + bitmap = Bitmap.createScaledBitmap(bitmap, 40, 40, true); + + return new BitmapDrawable(context.getResources(), bitmap); } catch (IOException e) { throw new AssertionError(e); } @@ -134,6 +146,18 @@ public class Emoji { } } + private BitmapFactory.Options initializeBitmapOptions() { + BitmapFactory.Options options = new BitmapFactory.Options(); + + options.inScaled = true; +// options.inDensity = 64; + options.inTargetDensity = context.getResources().getDimensionPixelSize(R.dimen.emoji_size); + options.inSampleSize = 1; + options.inJustDecodeBounds = false; + + return options; + } + private static class EmojiLRU { private static final String EMOJI_LRU_PREFERENCE = "pref_popular_emoji";