From bc164ef5499300856dd57a7d32b601be6f0ef8b1 Mon Sep 17 00:00:00 2001 From: Jake McGinty Date: Wed, 20 May 2015 16:51:09 -0700 Subject: [PATCH] only update recent emoji on other pages Closes #3208 // FREEBIE --- .../components/emoji/EmojiDrawer.java | 6 ++++++ .../components/emoji/EmojiPageFragment.java | 18 +++++++++--------- .../components/emoji/EmojiPageModel.java | 17 ++++------------- .../components/emoji/RecentEmojiPageModel.java | 13 +++++-------- .../components/emoji/StaticEmojiPageModel.java | 6 +++++- 5 files changed, 29 insertions(+), 31 deletions(-) diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java b/src/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java index 5373b9dc9c..325caa5d09 100644 --- a/src/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java +++ b/src/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java @@ -154,6 +154,12 @@ public class EmojiDrawer extends Fragment { return EmojiPageFragment.newInstance(pages.get(i), listener); } + @Override public void setPrimaryItem(ViewGroup container, int position, Object object) { + EmojiPageFragment current = (EmojiPageFragment) object; + current.onSelected(); + super.setPrimaryItem(container, position, object); + } + @Override public View getCustomTabView(ViewGroup viewGroup, int i) { ImageView image = new ImageView(context); image.setScaleType(ScaleType.CENTER_INSIDE); diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiPageFragment.java b/src/org/thoughtcrime/securesms/components/emoji/EmojiPageFragment.java index 518667409c..9f2bfdccf9 100644 --- a/src/org/thoughtcrime/securesms/components/emoji/EmojiPageFragment.java +++ b/src/org/thoughtcrime/securesms/components/emoji/EmojiPageFragment.java @@ -17,13 +17,13 @@ import android.widget.GridView; import android.widget.ImageView; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.components.emoji.EmojiPageModel.OnModelChangedListener; public class EmojiPageFragment extends Fragment { private static final String TAG = EmojiPageFragment.class.getSimpleName(); private EmojiPageModel model; private EmojiSelectionListener listener; + private GridView grid; public static EmojiPageFragment newInstance(@NonNull EmojiPageModel model, @Nullable EmojiSelectionListener listener) @@ -34,11 +34,17 @@ public class EmojiPageFragment extends Fragment { return fragment; } + public void onSelected() { + if (model.isDynamic() && grid != null && grid.getAdapter() != null) { + ((EmojiGridAdapter)grid.getAdapter()).notifyDataSetChanged(); + } + } + @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - final View view = inflater.inflate(R.layout.emoji_grid_layout, container, false); - final GridView grid = (GridView) view.findViewById(R.id.emoji); + final View view = inflater.inflate(R.layout.emoji_grid_layout, container, false); + grid = (GridView) view.findViewById(R.id.emoji); grid.setColumnWidth(getResources().getDimensionPixelSize(R.dimen.emoji_drawer_size) + 2 * getResources().getDimensionPixelSize(R.dimen.emoji_drawer_item_padding)); grid.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { @@ -46,12 +52,6 @@ public class EmojiPageFragment extends Fragment { } }); grid.setAdapter(new EmojiGridAdapter(getActivity(), model)); - model.setOnModelChangedListener(new OnModelChangedListener() { - @Override public void onModelChanged() { - ((EmojiGridAdapter)grid.getAdapter()).notifyDataSetChanged(); - } - }); - return view; } diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiPageModel.java b/src/org/thoughtcrime/securesms/components/emoji/EmojiPageModel.java index 7c4f4b25ba..4ddcee5c20 100644 --- a/src/org/thoughtcrime/securesms/components/emoji/EmojiPageModel.java +++ b/src/org/thoughtcrime/securesms/components/emoji/EmojiPageModel.java @@ -1,16 +1,7 @@ package org.thoughtcrime.securesms.components.emoji; -public abstract class EmojiPageModel { - protected OnModelChangedListener listener; - - public abstract int getIconRes(); - public abstract int[] getCodePoints(); - - public void setOnModelChangedListener(OnModelChangedListener listener) { - this.listener = listener; - } - - interface OnModelChangedListener { - void onModelChanged(); - } +public interface EmojiPageModel { + int getIconRes(); + int[] getCodePoints(); + boolean isDynamic(); } diff --git a/src/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java b/src/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java index 2b256559c0..1ab96a006d 100644 --- a/src/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java +++ b/src/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java @@ -18,14 +18,13 @@ import java.io.IOException; import java.util.Iterator; import java.util.LinkedHashSet; -public class RecentEmojiPageModel extends EmojiPageModel { +public class RecentEmojiPageModel implements EmojiPageModel { private static final String TAG = RecentEmojiPageModel.class.getSimpleName(); private static final String EMOJI_LRU_PREFERENCE = "pref_recent_emoji"; private static final int EMOJI_LRU_SIZE = 50; private final SharedPreferences prefs; private final LinkedHashSet recentlyUsed; - private OnModelChangedListener listener; public RecentEmojiPageModel(Context context) { this.prefs = PreferenceManager.getDefaultSharedPreferences(context); @@ -54,6 +53,10 @@ public class RecentEmojiPageModel extends EmojiPageModel { return toReversePrimitiveArray(recentlyUsed); } + @Override public boolean isDynamic() { + return true; + } + public void onCodePointSelected(int codePoint) { Log.w(TAG, "onCodePointSelected(" + codePoint + ")"); recentlyUsed.remove(codePoint); @@ -82,12 +85,6 @@ public class RecentEmojiPageModel extends EmojiPageModel { return null; } }.execute(); - - if (listener != null) listener.onModelChanged(); - } - - @Override public void setOnModelChangedListener(OnModelChangedListener listener) { - this.listener = listener; } private LinkedHashSet fromHexString(@Nullable LinkedHashSet stringSet) { diff --git a/src/org/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel.java b/src/org/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel.java index ec0cc3af14..1e814ea5f0 100644 --- a/src/org/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel.java +++ b/src/org/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel.java @@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.components.emoji; import android.support.annotation.DrawableRes; import android.support.annotation.NonNull; -public class StaticEmojiPageModel extends EmojiPageModel { +public class StaticEmojiPageModel implements EmojiPageModel { @DrawableRes private final int icon; @NonNull private final int[] codePoints; @@ -19,4 +19,8 @@ public class StaticEmojiPageModel extends EmojiPageModel { @NonNull public int[] getCodePoints() { return codePoints; } + + @Override public boolean isDynamic() { + return false; + } }