From 630dce04fc2b602d65ad565c6135bc46beb4c104 Mon Sep 17 00:00:00 2001 From: Jake McGinty Date: Tue, 25 Feb 2014 03:42:38 -0800 Subject: [PATCH] handle emoji density scaling more correctly --- res/values/dimens.xml | 2 +- .../securesms/components/EmojiDrawer.java | 8 ++++--- .../thoughtcrime/securesms/util/Emoji.java | 21 +++++++++++++------ 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 2f4f37ab4..411282e6b 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -1,6 +1,6 @@ - 64dip + 40dip 3dp 2dp \ No newline at end of file diff --git a/src/org/thoughtcrime/securesms/components/EmojiDrawer.java b/src/org/thoughtcrime/securesms/components/EmojiDrawer.java index c936facd4..f5a8fa7e8 100644 --- a/src/org/thoughtcrime/securesms/components/EmojiDrawer.java +++ b/src/org/thoughtcrime/securesms/components/EmojiDrawer.java @@ -12,6 +12,7 @@ import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.EditText; @@ -35,7 +36,6 @@ public class EmojiDrawer extends FrameLayout { private GridView emojiGrid; private GridView recentEmojiGrid; private ViewPager pager; - private PagerTabStrip pagerTabStrip; public EmojiDrawer(Context context) { super(context); @@ -70,8 +70,7 @@ public class EmojiDrawer extends FrameLayout { private void initializeResources() { LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); - this.pager = (ViewPager ) findViewById(R.id.emoji_pager ); - this.pagerTabStrip = (PagerTabStrip) findViewById(R.id.emoji_tab_strip); + this.pager = (ViewPager ) findViewById(R.id.emoji_pager); this.emojiGridLayout = (FrameLayout ) inflater.inflate(R.layout.emoji_grid_layout, null); this.recentEmojiGridLayout = (FrameLayout ) inflater.inflate(R.layout.emoji_grid_layout, null); this.emojiGrid = (GridView ) emojiGridLayout.findViewById(R.id.emoji); @@ -128,9 +127,11 @@ public class EmojiDrawer extends FrameLayout { private class EmojiGridAdapter extends BaseAdapter { private final int type; + private final int emojiSize; public EmojiGridAdapter(int type) { this.type = type; + emojiSize = (int) getResources().getDimension(R.dimen.emoji_drawer_size); } @Override @@ -162,6 +163,7 @@ public class EmojiDrawer extends FrameLayout { return convertView; } else { ImageView imageView = new ImageView(getContext()); + imageView.setLayoutParams(new AbsListView.LayoutParams(emojiSize, emojiSize)); imageView.setImageDrawable(drawable); return imageView; } diff --git a/src/org/thoughtcrime/securesms/util/Emoji.java b/src/org/thoughtcrime/securesms/util/Emoji.java index 145ceb987..90cbcce1e 100644 --- a/src/org/thoughtcrime/securesms/util/Emoji.java +++ b/src/org/thoughtcrime/securesms/util/Emoji.java @@ -10,6 +10,7 @@ import android.preference.PreferenceManager; import android.text.Spannable; import android.text.SpannableString; import android.text.style.ImageSpan; +import android.util.DisplayMetrics; import android.util.Log; import com.google.thoughtcrimegson.Gson; @@ -45,12 +46,14 @@ public class Emoji { private static final Pattern EMOJI_RANGE = Pattern.compile("[\ud83d\ude01-\ud83d\ude4f]"); public static final double EMOJI_LARGE = 1; - public static final double EMOJI_SMALL = 0.7; + public static final double EMOJI_SMALL = 0.75; + public static final int EMOJI_LARGE_SIZE = 22; private final Context context; private final String[] emojiAssets; private final Set emojiAssetsSet; private final BitmapFactory.Options bitmapOptions; + private final int bigDrawSize; private Emoji(Context context) { this.context = context.getApplicationContext(); @@ -58,9 +61,15 @@ public class Emoji { this.emojiAssetsSet = new HashSet(); this.bitmapOptions = initializeBitmapOptions(); + this.bigDrawSize = scale(EMOJI_LARGE_SIZE); + Collections.addAll(this.emojiAssetsSet, emojiAssets); } + private int scale(float value) { + return (int)(context.getResources().getDisplayMetrics().density * value); + } + public int getEmojiAssetCount() { return emojiAssets.length; } @@ -91,8 +100,8 @@ public class Emoji { if (emojiAssetsSet.contains(resource)) { Drawable drawable = getEmojiDrawable(resource); - drawable.setBounds(0, 0, (int)(drawable.getIntrinsicWidth()*size), - (int)(drawable.getIntrinsicHeight()*size)); + drawable.setBounds(0, 0, (int)(bigDrawSize*size), + (int)(bigDrawSize*size)); ImageSpan imageSpan = new ImageSpan(drawable, ImageSpan.ALIGN_BOTTOM); text.setSpan(imageSpan, matches.start(), matches.end(), @@ -129,7 +138,7 @@ public class Emoji { Bitmap bitmap = BitmapFactory.decodeStream(context.getAssets().open("emoji" + File.separator + assetName), null, bitmapOptions); - bitmap = Bitmap.createScaledBitmap(bitmap, 40, 40, true); + bitmap = Bitmap.createScaledBitmap(bitmap, 64, 64, true); return new BitmapDrawable(context.getResources(), bitmap); } catch (IOException e) { @@ -150,8 +159,8 @@ public class Emoji { BitmapFactory.Options options = new BitmapFactory.Options(); options.inScaled = true; -// options.inDensity = 64; - options.inTargetDensity = context.getResources().getDimensionPixelSize(R.dimen.emoji_size); + options.inDensity = DisplayMetrics.DENSITY_MEDIUM; + options.inTargetDensity = context.getResources().getDisplayMetrics().densityDpi; options.inSampleSize = 1; options.inJustDecodeBounds = false;