/*
* Copyright (C) 2015 Actor LLC. <https://actor.im>
*/
package im.actor.sdk.view.emoji.smiles;
import android.content.Context;
import android.content.SharedPreferences;
import java.util.ArrayList;
import java.util.StringTokenizer;
import im.actor.runtime.android.AndroidContext;
/**
* Created by Jesus Christ. Amen.
*/
public class SmilesRecentsController extends ArrayList<Long> {
private static final String PREFERENCE_NAME = "smiles";
private static final String PREF_RECENTS = "recent_smiles";
private static final Object LOCK = new Object();
private static SmilesRecentsController sInstance;
private Context mContext;
private SmilesRecentsController(Context context) {
mContext = context.getApplicationContext();
loadRecents();
}
public static SmilesRecentsController getInstance() {
return getInstance(AndroidContext.getContext());
}
public static SmilesRecentsController getInstance(Context context) {
if (sInstance == null) {
synchronized (LOCK) {
if (sInstance == null) {
sInstance = new SmilesRecentsController(context);
}
}
}
return sInstance;
}
public void push(Long object) {
if (contains(object)) {
super.remove(object);
}
add(0, object);
while(size()>32){
remove(32);
}
}
@Override
public boolean add(Long object) {
boolean ret = super.add(object);
return ret;
}
@Override
public void add(int index, Long 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(Long.valueOf(tokenizer.nextToken()));
} catch (NumberFormatException e) {
// ignored
}
}
}
public void saveRecents() {
StringBuilder str = new StringBuilder();
int c = size();
for (int i = 0; i < c; i++) {
Long e = get(i);
str.append(e);
if (i < (c - 1)) {
str.append('~');
}
}
SharedPreferences prefs = getPreferences();
prefs.edit().putString(PREF_RECENTS, str.toString()).apply();
}
}