Skip to content

Commit 4281df7

Browse files
committed
display emoji correctly on devices of all densities
1 parent c827f0a commit 4281df7

2 files changed

Lines changed: 32 additions & 4 deletions

File tree

res/values/dimens.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<resources>
3+
<dimen name="emoji_size">64dip</dimen>
4+
</resources>

src/org/thoughtcrime/securesms/util/Emoji.java

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
import android.content.Context;
44
import android.content.SharedPreferences;
5+
import android.graphics.Bitmap;
6+
import android.graphics.BitmapFactory;
7+
import android.graphics.drawable.BitmapDrawable;
58
import android.graphics.drawable.Drawable;
69
import android.preference.PreferenceManager;
710
import android.text.Spannable;
@@ -12,6 +15,8 @@
1215
import com.google.thoughtcrimegson.Gson;
1316
import com.google.thoughtcrimegson.reflect.TypeToken;
1417

18+
import org.thoughtcrime.securesms.R;
19+
1520
import java.io.File;
1621
import java.io.IOException;
1722
import java.lang.reflect.Type;
@@ -42,14 +47,16 @@ public synchronized static Emoji getInstance(Context context) {
4247
public static final double EMOJI_LARGE = 1;
4348
public static final double EMOJI_SMALL = 0.7;
4449

45-
private final Context context;
46-
private final String[] emojiAssets;
47-
private final Set<String> emojiAssetsSet;
50+
private final Context context;
51+
private final String[] emojiAssets;
52+
private final Set<String> emojiAssetsSet;
53+
private final BitmapFactory.Options bitmapOptions;
4854

4955
private Emoji(Context context) {
5056
this.context = context.getApplicationContext();
5157
this.emojiAssets = initializeEmojiAssets();
5258
this.emojiAssetsSet = new HashSet<String>();
59+
this.bitmapOptions = initializeBitmapOptions();
5360

5461
Collections.addAll(this.emojiAssetsSet, emojiAssets);
5562
}
@@ -119,7 +126,12 @@ private String getEmojiUnicodeFromAssetName(String assetName) {
119126

120127
private Drawable getEmojiDrawable(String assetName) {
121128
try {
122-
return Drawable.createFromStream(context.getAssets().open("emoji" + File.separator + assetName), null);
129+
Bitmap bitmap = BitmapFactory.decodeStream(context.getAssets().open("emoji" + File.separator + assetName),
130+
null, bitmapOptions);
131+
132+
bitmap = Bitmap.createScaledBitmap(bitmap, 40, 40, true);
133+
134+
return new BitmapDrawable(context.getResources(), bitmap);
123135
} catch (IOException e) {
124136
throw new AssertionError(e);
125137
}
@@ -134,6 +146,18 @@ private String[] initializeEmojiAssets() {
134146
}
135147
}
136148

149+
private BitmapFactory.Options initializeBitmapOptions() {
150+
BitmapFactory.Options options = new BitmapFactory.Options();
151+
152+
options.inScaled = true;
153+
// options.inDensity = 64;
154+
options.inTargetDensity = context.getResources().getDimensionPixelSize(R.dimen.emoji_size);
155+
options.inSampleSize = 1;
156+
options.inJustDecodeBounds = false;
157+
158+
return options;
159+
}
160+
137161
private static class EmojiLRU {
138162

139163
private static final String EMOJI_LRU_PREFERENCE = "pref_popular_emoji";

0 commit comments

Comments
 (0)