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