From 62ca083a9cf9690570d4abac37b60d2c8c64ffdd Mon Sep 17 00:00:00 2001 From: Ankush Sachdeva Date: Tue, 2 Sep 2014 02:51:57 +0530 Subject: inital commit --- .../emojicon/EmojiconRecentsManager.java | 128 +++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 src/github/ankushsachdeva/emojicon/EmojiconRecentsManager.java (limited to 'src/github/ankushsachdeva/emojicon/EmojiconRecentsManager.java') 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 { + + 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(); + } + +} -- cgit v1.2.3