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