TestSharedPreferences.java revision cb3e68e10f4fcb059e68849694fc4d61e4b110d3
14610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richardpackage com.xtremelabs.droidsugar.view;
24610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
34610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richardimport android.content.SharedPreferences;
44610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
5cb3e68e10f4fcb059e68849694fc4d61e4b110d3Ian Fisher & Tyler Schultzimport java.util.HashMap;
64610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richardimport java.util.Hashtable;
74610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richardimport java.util.Map;
84610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
94610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richardpublic class TestSharedPreferences implements SharedPreferences {
104610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
11cb3e68e10f4fcb059e68849694fc4d61e4b110d3Ian Fisher & Tyler Schultz    public static Map<String, Hashtable<String, Object>> content = new HashMap<String, Hashtable<String, Object>>();
12382df616dd52730a354a4c8e6fa466465bcd4488Ian Fisher & Ryan Richard    private static final Object lock = new Object();
134610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    private String filename;
144610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    public int mode;
154610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
16382df616dd52730a354a4c8e6fa466465bcd4488Ian Fisher & Ryan Richard    public static void reset() {
17382df616dd52730a354a4c8e6fa466465bcd4488Ian Fisher & Ryan Richard        content = new Hashtable<String, Hashtable<String, Object>>();
18382df616dd52730a354a4c8e6fa466465bcd4488Ian Fisher & Ryan Richard    }
19382df616dd52730a354a4c8e6fa466465bcd4488Ian Fisher & Ryan Richard
204610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    public TestSharedPreferences(String name, int mode) {
214610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        this.filename = name;
224610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        this.mode = mode;
234610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        if (!content.containsKey(name)) {
244610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard            content.put(name, new Hashtable<String, Object>());
254610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        }
264610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    }
274610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
284610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    @Override
294610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    public Map<String, ?> getAll() {
30cb3e68e10f4fcb059e68849694fc4d61e4b110d3Ian Fisher & Tyler Schultz        return null;
314610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    }
324610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
334610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    @Override
344610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    public String getString(String key, String defValue) {
354610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        return (String) getValue(key, defValue);
364610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    }
374610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
384610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    private Object getValue(String key, Object defValue) {
39382df616dd52730a354a4c8e6fa466465bcd4488Ian Fisher & Ryan Richard        Hashtable<String, Object> fileHash = content.get(filename);
40382df616dd52730a354a4c8e6fa466465bcd4488Ian Fisher & Ryan Richard        if (fileHash != null) {
41382df616dd52730a354a4c8e6fa466465bcd4488Ian Fisher & Ryan Richard            Object value = fileHash.get(key);
42382df616dd52730a354a4c8e6fa466465bcd4488Ian Fisher & Ryan Richard            if (value != null) {
43382df616dd52730a354a4c8e6fa466465bcd4488Ian Fisher & Ryan Richard                return value;
44382df616dd52730a354a4c8e6fa466465bcd4488Ian Fisher & Ryan Richard            }
454610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        }
46382df616dd52730a354a4c8e6fa466465bcd4488Ian Fisher & Ryan Richard        return defValue;
474610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    }
484610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
494610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    @Override
504610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    public int getInt(String key, int defValue) {
514610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        return (Integer) getValue(key, defValue);
524610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    }
534610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
544610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    @Override
554610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    public long getLong(String key, long defValue) {
564610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        return (Long) getValue(key, defValue);
574610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    }
584610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
594610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    @Override
604610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    public float getFloat(String key, float defValue) {
614610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        return (Float) getValue(key, defValue);
624610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    }
634610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
644610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    @Override
654610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    public boolean getBoolean(String key, boolean defValue) {
664610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        return (Boolean) getValue(key, defValue);
674610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    }
684610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
694610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    @Override
704610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    public boolean contains(String key) {
714610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        return content.get(filename).get(key) == null;
724610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    }
734610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
744610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    @Override
754610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    public Editor edit() {
764610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        return new FakeSharedPreferencesEditor();
774610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    }
784610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
794610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    @Override
804610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    public void registerOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener) {
814610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    }
824610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
834610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    @Override
844610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    public void unregisterOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener) {
854610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    }
864610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
874610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    private class FakeSharedPreferencesEditor implements Editor {
884610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
894610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        Hashtable<String, Object> editsThatNeedCommit = new Hashtable<String, Object>();
904610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        private boolean shouldClearOnCommit = false;
914610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
924610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        @Override
934610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        public Editor putString(String key, String value) {
944610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard            editsThatNeedCommit.put(key, value);
954610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard            return this;
964610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        }
974610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
984610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        @Override
994610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        public Editor putInt(String key, int value) {
1004610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard            editsThatNeedCommit.put(key, value);
1014610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard            return this;
1024610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        }
1034610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
1044610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        @Override
1054610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        public Editor putLong(String key, long value) {
1064610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard            editsThatNeedCommit.put(key, value);
1074610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard            return this;
1084610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        }
1094610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
1104610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        @Override
1114610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        public Editor putFloat(String key, float value) {
1124610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard            editsThatNeedCommit.put(key, value);
1134610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard            return this;
1144610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        }
1154610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
1164610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        @Override
1174610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        public Editor putBoolean(String key, boolean value) {
1184610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard            editsThatNeedCommit.put(key, value);
1194610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard            return this;
1204610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        }
1214610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
1224610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        @Override
1234610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        public Editor remove(String key) {
124cb3e68e10f4fcb059e68849694fc4d61e4b110d3Ian Fisher & Tyler Schultz            return null;
1254610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        }
1264610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
1274610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        @Override
1284610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        public Editor clear() {
1294610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard            shouldClearOnCommit = true;
1304610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard            return this;
1314610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        }
1324610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard
1334610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        @Override
1344610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        public boolean commit() {
135cb3e68e10f4fcb059e68849694fc4d61e4b110d3Ian Fisher & Tyler Schultz            Map<String, Object> previousContent = content.get(filename);
136cb3e68e10f4fcb059e68849694fc4d61e4b110d3Ian Fisher & Tyler Schultz            if (shouldClearOnCommit) {
137cb3e68e10f4fcb059e68849694fc4d61e4b110d3Ian Fisher & Tyler Schultz                previousContent.clear();
138cb3e68e10f4fcb059e68849694fc4d61e4b110d3Ian Fisher & Tyler Schultz            } else {
139cb3e68e10f4fcb059e68849694fc4d61e4b110d3Ian Fisher & Tyler Schultz                for (String key : editsThatNeedCommit.keySet()) {
140cb3e68e10f4fcb059e68849694fc4d61e4b110d3Ian Fisher & Tyler Schultz                    previousContent.put(key, editsThatNeedCommit.get(key));
1414610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard                }
1424610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard            }
143cb3e68e10f4fcb059e68849694fc4d61e4b110d3Ian Fisher & Tyler Schultz            return true;
1444610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard        }
1454610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard    }
1464610f4e5bfec32ab53d6b54ab5df88301f403a0dIan Fisher & Ryan Richard}
147