aboutsummaryrefslogtreecommitdiffstats
path: root/src/github/ankushsachdeva/emojicon/EmojiconRecentsManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/github/ankushsachdeva/emojicon/EmojiconRecentsManager.java')
-rw-r--r--src/github/ankushsachdeva/emojicon/EmojiconRecentsManager.java128
1 files changed, 128 insertions, 0 deletions
diff --git a/src/github/ankushsachdeva/emojicon/EmojiconRecentsManager.java b/src/github/ankushsachdeva/emojicon/EmojiconRecentsManager.java
new file mode 100644
index 0000000..ce9cc67
--- /dev/null
+++ b/src/github/ankushsachdeva/emojicon/EmojiconRecentsManager.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright 2014 Ankush Sachdeva
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package github.ankushsachdeva.emojicon;
+
+import github.ankushsachdeva.emojicon.emoji.Emojicon;
+
+import java.util.ArrayList;
+import java.util.StringTokenizer;
+
+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";
+
+ private static final Object LOCK = new Object();
+ private static EmojiconRecentsManager sInstance;
+
+ private Context mContext;
+
+ private EmojiconRecentsManager(Context context) {
+ mContext = context.getApplicationContext();
+ loadRecents();
+ }
+
+ public static EmojiconRecentsManager getInstance(Context context) {
+ if (sInstance == null) {
+ synchronized (LOCK) {
+ if (sInstance == null) {
+ sInstance = new EmojiconRecentsManager(context);
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public int getRecentPage() {
+ return getPreferences().getInt(PREF_PAGE, 0);
+ }
+
+ public void setRecentPage(int page) {
+ getPreferences().edit().putInt(PREF_PAGE, page).commit();
+ }
+
+ 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);
+ }
+ add(0, object);
+ }
+
+ @Override
+ public boolean add(Emojicon object) {
+ boolean ret = super.add(object);
+ saveRecents();
+ return ret;
+ }
+
+ @Override
+ public void add(int index, Emojicon object) {
+ super.add(index, object);
+ saveRecents();
+ }
+
+ @Override
+ public boolean remove(Object object) {
+ boolean ret = super.remove(object);
+ saveRecents();
+ 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 {
+ int codepoint = Integer.parseInt(tokenizer.nextToken());
+ add(Emojicon.fromCodePoint(codepoint));
+ }
+ catch (NumberFormatException e) {
+ // ignored
+ }
+ }
+ }
+
+ private void saveRecents() {
+ StringBuilder str = new StringBuilder();
+ int c = size();
+ for (int i = 0; i < c; i++) {
+ Emojicon e = get(i);
+ str.append(e.getEmoji().codePointAt(0));
+ if (i < (c - 1)) {
+ str.append('~');
+ }
+ }
+ SharedPreferences prefs = getPreferences();
+ prefs.edit().putString(PREF_RECENTS, str.toString()).commit();
+ }
+
+}