package moe.feng.nhentai.dao; import android.content.Context; import android.text.TextUtils; import java.util.ArrayList; import com.github.sumimakito.quickkv.QuickKV; import com.github.sumimakito.quickkv.database.KeyValueDatabase; public class SearchHistoryManager { private QuickKV mQuickKV; private KeyValueDatabase mDB; private String mSectionName; private ArrayList<String> array; private static ArrayList<Instance> sInstances = new ArrayList<>(); private static final String DATABASE_NAME = "search_history"; private static final int MAX_VOLUME = 15; public static SearchHistoryManager getInstance(Context context, String sectionName) { SearchHistoryManager sInstance = null; for (Instance i : sInstances) { if (i.sectionName.equals(sectionName)) { sInstance = i.manager; break; } } if (sInstance == null) { sInstance = new SearchHistoryManager(context, sectionName); sInstances.add(new Instance(sInstance, sectionName)); } return sInstance; } public SearchHistoryManager(Context context, String sectionName) { this.mQuickKV = new QuickKV(context); this.mSectionName = sectionName; reloadDatabase(); } public void reloadDatabase() { mDB = mQuickKV.getDatabase(DATABASE_NAME + "_" + mSectionName); array = new ArrayList<>(); for (int i = 0; i < MAX_VOLUME; i++) { String s = (String) mDB.get("history_" + i); if (!TextUtils.isEmpty(s)) { array.add(s); } } } public void add(String keyword) { int pos = find(keyword); if (pos < 0) { pos = MAX_VOLUME - 1; } moveArrayToNext(pos - 1); mDB.put("history_0", keyword); mDB.persist(); array.add(0, keyword); } /** Slow! */ public String get(int pos) { return array.get(pos); } public int find(String keyword) { for (int i = MAX_VOLUME - 1; i >= 0; i--) { if (mDB.containsKey("history_" + i)) { if (mDB.get("history_" + i).equals(keyword)){ return i; } } } return -1; } private void moveArrayToNext(int end) { for (int i = end; i >= 0; i--) { if (mDB.containsKey("history_" + i)) { mDB.put("history_" + (i + 1), mDB.get("history_" + i)); } } } public void cleanAll() { mDB.clear(); mDB.persist(); } public ArrayList<String> getAll() { return array; } private static class Instance { SearchHistoryManager manager; String sectionName; public Instance(SearchHistoryManager manager, String sectionName) { this.manager = manager; this.sectionName = sectionName; } } }