aboutsummaryrefslogtreecommitdiffstats
path: root/libs/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconRecentsManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'libs/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconRecentsManager.java')
-rw-r--r--libs/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconRecentsManager.java98
1 files changed, 29 insertions, 69 deletions
diff --git a/libs/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconRecentsManager.java b/libs/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconRecentsManager.java
index 9fbb987e..6110d012 100644
--- a/libs/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconRecentsManager.java
+++ b/libs/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconRecentsManager.java
@@ -16,43 +16,33 @@
package github.ankushsachdeva.emojicon;
-import github.ankushsachdeva.emojicon.emoji.Emojicon;
-
-import java.util.ArrayList;
-import java.util.StringTokenizer;
+import java.util.Iterator;
+import java.util.LinkedList;
import android.content.Context;
import android.content.SharedPreferences;
/**
-* @author Daniele Ricci
-*/
-public class EmojiconRecentsManager extends ArrayList<Emojicon> {
-
- private static final String PREFERENCE_NAME = "emojicon";
- private static final String PREF_RECENTS = "recent_emojis";
- private static final String PREF_PAGE = "recent_page";
+ * @author Daniele Ricci
+ */
+class EmojiconRecentsManager {
- private static final Object LOCK = new Object();
- private static EmojiconRecentsManager sInstance;
+ private static final String PREFERENCE_NAME = "emojicon_v2";
+ private static final String PREF_RECENTS = "recent_emojis_v2";
+ private static final String PREF_PAGE = "recent_page_v2";
+ private static final String EMOJI_DIVIDER = " ";
+ private final LinkedList<Emojicon> mEmoji;
private Context mContext;
- private EmojiconRecentsManager(Context context) {
+ public EmojiconRecentsManager(Context context) {
mContext = context.getApplicationContext();
- loadRecents();
+ mEmoji = loadRecent();
}
- public static EmojiconRecentsManager getInstance(Context context) {
- if (sInstance == null) {
- synchronized (LOCK) {
- if (sInstance == null) {
- sInstance = new EmojiconRecentsManager(context);
- }
- }
- }
- return sInstance;
+ public LinkedList<Emojicon> getEmojiList() {
+ return mEmoji;
}
public int getRecentPage() {
@@ -64,61 +54,31 @@ public class EmojiconRecentsManager extends ArrayList<Emojicon> {
}
public void push(Emojicon object) {
- // FIXME totally inefficient way of adding the emoji to the adapter
- // TODO this should be probably replaced by a deque
- if (contains(object)) {
- super.remove(object);
+ if (mEmoji.contains(object)) {
+ mEmoji.remove(object);
}
- add(0, object);
- }
-
- @Override
- public boolean add(Emojicon object) {
- boolean ret = super.add(object);
- return ret;
+ mEmoji.addFirst(object);
}
- @Override
- public void add(int index, Emojicon object) {
- super.add(index, object);
- }
-
- @Override
- public boolean remove(Object object) {
- boolean ret = super.remove(object);
- return ret;
- }
-
private SharedPreferences getPreferences() {
return mContext.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
}
- private void loadRecents() {
- SharedPreferences prefs = getPreferences();
- String str = prefs.getString(PREF_RECENTS, "");
- StringTokenizer tokenizer = new StringTokenizer(str, "~");
- while (tokenizer.hasMoreTokens()) {
- try {
- add(new Emojicon(tokenizer.nextToken()));
- }
- catch (NumberFormatException e) {
- // ignored
- }
+ private LinkedList<Emojicon> loadRecent() {
+ String allEmoji = getPreferences().getString(PREF_RECENTS, "");
+ if (allEmoji != null) {
+ return new LinkedList<>(EmojiconGroup.fromString(allEmoji, 0).getEmojicons());
+ } else {
+ return new LinkedList<>();
}
}
-
- public void saveRecents() {
+
+ public void save() {
StringBuilder str = new StringBuilder();
- int c = size();
- for (int i = 0; i < c; i++) {
- Emojicon e = get(i);
- str.append(e.getEmoji());
- if (i < (c - 1)) {
- str.append('~');
- }
+ for (Iterator<Emojicon> iterator = mEmoji.iterator(); iterator.hasNext(); ) {
+ Emojicon emojicon = iterator.next();
+ str.append(emojicon.getId()).append(iterator.hasNext() ? EMOJI_DIVIDER : "");
}
- SharedPreferences prefs = getPreferences();
- prefs.edit().putString(PREF_RECENTS, str.toString()).commit();
+ getPreferences().edit().putString(PREF_RECENTS, str.toString()).apply();
}
-
}