11611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo/* 21611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo * Copyright (C) 2011 The Android Open Source Project 31611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo * 41611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo * Licensed under the Apache License, Version 2.0 (the "License"); 51611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo * you may not use this file except in compliance with the License. 61611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo * You may obtain a copy of the License at 71611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo * 81611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo * http://www.apache.org/licenses/LICENSE-2.0 91611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo * 101611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo * Unless required by applicable law or agreed to in writing, software 111611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo * distributed under the License is distributed on an "AS IS" BASIS, 121611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo * See the License for the specific language governing permissions and 141611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo * limitations under the License. 151611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo */ 161611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 171611d0baed730df920b0685d3031a4bc98c6f225Ben Komalopackage com.android.email; 181611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 1917d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xieimport com.google.common.collect.Maps; 201611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 211611d0baed730df920b0685d3031a4bc98c6f225Ben Komaloimport android.content.SharedPreferences; 221611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 231611d0baed730df920b0685d3031a4bc98c6f225Ben Komaloimport java.util.HashMap; 241611d0baed730df920b0685d3031a4bc98c6f225Ben Komaloimport java.util.Map; 251611d0baed730df920b0685d3031a4bc98c6f225Ben Komaloimport java.util.Set; 261611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 271611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 281611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo/** 291611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo * A programmable mock content provider. 301611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo */ 311611d0baed730df920b0685d3031a4bc98c6f225Ben Komalopublic class MockSharedPreferences implements SharedPreferences, SharedPreferences.Editor { 321611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 331611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo private HashMap<String, Object> mValues = Maps.newHashMap(); 341611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo private HashMap<String, Object> mTempValues = Maps.newHashMap(); 351611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 361611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo @SuppressWarnings("unchecked") 371611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo public Editor edit() { 381611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo mTempValues = (HashMap<String, Object>) mValues.clone(); 391611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return this; 401611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 411611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 421611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo public boolean contains(String key) { 431611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return mValues.containsKey(key); 441611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 451611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 461611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo public Map<String, ?> getAll() { 471611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return new HashMap<String, Object>(mValues); 481611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 491611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 501611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo public boolean getBoolean(String key, boolean defValue) { 511611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo if (mValues.containsKey(key)) { 521611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return ((Boolean)mValues.get(key)).booleanValue(); 531611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 541611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return defValue; 551611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 561611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 571611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo public float getFloat(String key, float defValue) { 581611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo if (mValues.containsKey(key)) { 591611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return ((Float)mValues.get(key)).floatValue(); 601611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 611611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return defValue; 621611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 631611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 641611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo public int getInt(String key, int defValue) { 651611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo if (mValues.containsKey(key)) { 661611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return ((Integer)mValues.get(key)).intValue(); 671611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 681611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return defValue; 691611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 701611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 711611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo public long getLong(String key, long defValue) { 721611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo if (mValues.containsKey(key)) { 731611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return ((Long)mValues.get(key)).longValue(); 741611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 751611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return defValue; 761611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 771611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 781611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo public String getString(String key, String defValue) { 791611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo if (mValues.containsKey(key)) 801611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return (String)mValues.get(key); 811611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return defValue; 821611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 831611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 841611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo @SuppressWarnings("unchecked") 851611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo public Set<String> getStringSet(String key, Set<String> defValues) { 861611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo if (mValues.containsKey(key)) { 871611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return (Set<String>) mValues.get(key); 881611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 891611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return defValues; 901611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 911611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 921611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo public void registerOnSharedPreferenceChangeListener( 931611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo OnSharedPreferenceChangeListener listener) { 941611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo throw new UnsupportedOperationException(); 951611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 961611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 971611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo public void unregisterOnSharedPreferenceChangeListener( 981611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo OnSharedPreferenceChangeListener listener) { 991611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo throw new UnsupportedOperationException(); 1001611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 1011611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 1021611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo public Editor putBoolean(String key, boolean value) { 1031611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo mTempValues.put(key, Boolean.valueOf(value)); 1041611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return this; 1051611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 1061611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 1071611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo public Editor putFloat(String key, float value) { 1081611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo mTempValues.put(key, value); 1091611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return this; 1101611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 1111611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 1121611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo public Editor putInt(String key, int value) { 1131611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo mTempValues.put(key, value); 1141611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return this; 1151611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 1161611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 1171611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo public Editor putLong(String key, long value) { 1181611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo mTempValues.put(key, value); 1191611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return this; 1201611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 1211611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 1221611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo public Editor putString(String key, String value) { 1231611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo mTempValues.put(key, value); 1241611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return this; 1251611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 1261611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 1271611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo public Editor putStringSet(String key, Set<String> values) { 1281611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo mTempValues.put(key, values); 1291611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return this; 1301611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 1311611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 1321611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo public Editor remove(String key) { 1331611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo mTempValues.remove(key); 1341611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return this; 1351611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 1361611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 1371611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo public Editor clear() { 1381611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo mTempValues.clear(); 1391611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return this; 1401611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 1411611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 1421611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo @SuppressWarnings("unchecked") 1431611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo public boolean commit() { 1441611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo mValues = (HashMap<String, Object>) mTempValues.clone(); 1451611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo return true; 1461611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 1471611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo 1481611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo public void apply() { 1491611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo commit(); 1501611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo } 1511611d0baed730df920b0685d3031a4bc98c6f225Ben Komalo} 152