1 package org.fedorahosted.freeotp;
3 import java.util.LinkedList;
6 import org.fedorahosted.freeotp.Token.TokenUriInvalidException;
7 import org.json.JSONArray;
8 import org.json.JSONException;
10 import android.content.Context;
11 import android.content.SharedPreferences;
13 public class TokenStore {
14 private static final String NAME = "tokens";
15 private static final String ORDER = "tokenOrder";
16 private SharedPreferences prefs;
18 private List<String> getTokenOrder() {
20 JSONArray array = new JSONArray(prefs.getString(ORDER, null));
21 List<String> out = new LinkedList<String>();
22 for (int i = 0; i < array.length(); i++)
23 out.add(array.getString(i));
25 } catch (JSONException e) {
26 } catch (NullPointerException e) {
29 return new LinkedList<String>();
32 private SharedPreferences.Editor setTokenOrder(List<String> order) {
33 JSONArray array = new JSONArray();
34 for (String key : order)
37 return prefs.edit().putString(ORDER, array.toString());
40 public TokenStore(Context ctx) {
41 prefs = ctx.getApplicationContext()
42 .getSharedPreferences(NAME, Context.MODE_PRIVATE);
45 public void add(Token token) {
46 String key = token.getID();
48 if (prefs.contains(key))
51 List<String> order = getTokenOrder();
53 setTokenOrder(order).putString(key, token.toString()).apply();
56 public void del(int index) {
57 List<String> order = getTokenOrder();
58 String key = order.remove(index);
59 setTokenOrder(order).remove(key).apply();
62 public void save(Token token) {
63 prefs.edit().putString(token.getID(), token.toString()).apply();
66 public Token get(int index) {
68 return new Token(prefs.getString(getTokenOrder().get(index), null));
69 } catch (TokenUriInvalidException e) {
71 } catch (NullPointerException e) {
78 public int getTokenCount() {
79 return getTokenOrder().size();
82 public void move(int fromIndex, int toIndex) {
83 List<String> order = getTokenOrder();
84 if (fromIndex < 0 || fromIndex > order.size())
86 if (toIndex < 0 || toIndex > order.size())
89 order.add(toIndex, order.remove(fromIndex));
90 setTokenOrder(order).apply();