only update recent emoji on other pages

Closes #3208
// FREEBIE
This commit is contained in:
Jake McGinty 2015-05-20 16:51:09 -07:00 committed by Moxie Marlinspike
parent 3effe77830
commit bc164ef549
5 changed files with 29 additions and 31 deletions

View File

@ -154,6 +154,12 @@ public class EmojiDrawer extends Fragment {
return EmojiPageFragment.newInstance(pages.get(i), listener); 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) { @Override public View getCustomTabView(ViewGroup viewGroup, int i) {
ImageView image = new ImageView(context); ImageView image = new ImageView(context);
image.setScaleType(ScaleType.CENTER_INSIDE); image.setScaleType(ScaleType.CENTER_INSIDE);

View File

@ -17,13 +17,13 @@ import android.widget.GridView;
import android.widget.ImageView; import android.widget.ImageView;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.emoji.EmojiPageModel.OnModelChangedListener;
public class EmojiPageFragment extends Fragment { public class EmojiPageFragment extends Fragment {
private static final String TAG = EmojiPageFragment.class.getSimpleName(); private static final String TAG = EmojiPageFragment.class.getSimpleName();
private EmojiPageModel model; private EmojiPageModel model;
private EmojiSelectionListener listener; private EmojiSelectionListener listener;
private GridView grid;
public static EmojiPageFragment newInstance(@NonNull EmojiPageModel model, public static EmojiPageFragment newInstance(@NonNull EmojiPageModel model,
@Nullable EmojiSelectionListener listener) @Nullable EmojiSelectionListener listener)
@ -34,11 +34,17 @@ public class EmojiPageFragment extends Fragment {
return 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, @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) Bundle savedInstanceState)
{ {
final View view = inflater.inflate(R.layout.emoji_grid_layout, container, false); final View view = inflater.inflate(R.layout.emoji_grid_layout, container, false);
final GridView grid = (GridView) view.findViewById(R.id.emoji); 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.setColumnWidth(getResources().getDimensionPixelSize(R.dimen.emoji_drawer_size) + 2 * getResources().getDimensionPixelSize(R.dimen.emoji_drawer_item_padding));
grid.setOnItemClickListener(new OnItemClickListener() { grid.setOnItemClickListener(new OnItemClickListener() {
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { @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)); grid.setAdapter(new EmojiGridAdapter(getActivity(), model));
model.setOnModelChangedListener(new OnModelChangedListener() {
@Override public void onModelChanged() {
((EmojiGridAdapter)grid.getAdapter()).notifyDataSetChanged();
}
});
return view; return view;
} }

View File

@ -1,16 +1,7 @@
package org.thoughtcrime.securesms.components.emoji; package org.thoughtcrime.securesms.components.emoji;
public abstract class EmojiPageModel { public interface EmojiPageModel {
protected OnModelChangedListener listener; int getIconRes();
int[] getCodePoints();
public abstract int getIconRes(); boolean isDynamic();
public abstract int[] getCodePoints();
public void setOnModelChangedListener(OnModelChangedListener listener) {
this.listener = listener;
}
interface OnModelChangedListener {
void onModelChanged();
}
} }

View File

@ -18,14 +18,13 @@ import java.io.IOException;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedHashSet; 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 TAG = RecentEmojiPageModel.class.getSimpleName();
private static final String EMOJI_LRU_PREFERENCE = "pref_recent_emoji"; private static final String EMOJI_LRU_PREFERENCE = "pref_recent_emoji";
private static final int EMOJI_LRU_SIZE = 50; private static final int EMOJI_LRU_SIZE = 50;
private final SharedPreferences prefs; private final SharedPreferences prefs;
private final LinkedHashSet<Integer> recentlyUsed; private final LinkedHashSet<Integer> recentlyUsed;
private OnModelChangedListener listener;
public RecentEmojiPageModel(Context context) { public RecentEmojiPageModel(Context context) {
this.prefs = PreferenceManager.getDefaultSharedPreferences(context); this.prefs = PreferenceManager.getDefaultSharedPreferences(context);
@ -54,6 +53,10 @@ public class RecentEmojiPageModel extends EmojiPageModel {
return toReversePrimitiveArray(recentlyUsed); return toReversePrimitiveArray(recentlyUsed);
} }
@Override public boolean isDynamic() {
return true;
}
public void onCodePointSelected(int codePoint) { public void onCodePointSelected(int codePoint) {
Log.w(TAG, "onCodePointSelected(" + codePoint + ")"); Log.w(TAG, "onCodePointSelected(" + codePoint + ")");
recentlyUsed.remove(codePoint); recentlyUsed.remove(codePoint);
@ -82,12 +85,6 @@ public class RecentEmojiPageModel extends EmojiPageModel {
return null; return null;
} }
}.execute(); }.execute();
if (listener != null) listener.onModelChanged();
}
@Override public void setOnModelChangedListener(OnModelChangedListener listener) {
this.listener = listener;
} }
private LinkedHashSet<Integer> fromHexString(@Nullable LinkedHashSet<String> stringSet) { private LinkedHashSet<Integer> fromHexString(@Nullable LinkedHashSet<String> stringSet) {

View File

@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.components.emoji;
import android.support.annotation.DrawableRes; import android.support.annotation.DrawableRes;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
public class StaticEmojiPageModel extends EmojiPageModel { public class StaticEmojiPageModel implements EmojiPageModel {
@DrawableRes private final int icon; @DrawableRes private final int icon;
@NonNull private final int[] codePoints; @NonNull private final int[] codePoints;
@ -19,4 +19,8 @@ public class StaticEmojiPageModel extends EmojiPageModel {
@NonNull public int[] getCodePoints() { @NonNull public int[] getCodePoints() {
return codePoints; return codePoints;
} }
@Override public boolean isDynamic() {
return false;
}
} }