135997f3fdee2984b6d5373326110eda26929001aMakoto Onuki/*
235997f3fdee2984b6d5373326110eda26929001aMakoto Onuki * Copyright (C) 2010 The Android Open Source Project
335997f3fdee2984b6d5373326110eda26929001aMakoto Onuki *
435997f3fdee2984b6d5373326110eda26929001aMakoto Onuki * Licensed under the Apache License, Version 2.0 (the "License");
535997f3fdee2984b6d5373326110eda26929001aMakoto Onuki * you may not use this file except in compliance with the License.
635997f3fdee2984b6d5373326110eda26929001aMakoto Onuki * You may obtain a copy of the License at
735997f3fdee2984b6d5373326110eda26929001aMakoto Onuki *
835997f3fdee2984b6d5373326110eda26929001aMakoto Onuki *      http://www.apache.org/licenses/LICENSE-2.0
935997f3fdee2984b6d5373326110eda26929001aMakoto Onuki *
1035997f3fdee2984b6d5373326110eda26929001aMakoto Onuki * Unless required by applicable law or agreed to in writing, software
1135997f3fdee2984b6d5373326110eda26929001aMakoto Onuki * distributed under the License is distributed on an "AS IS" BASIS,
1235997f3fdee2984b6d5373326110eda26929001aMakoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1335997f3fdee2984b6d5373326110eda26929001aMakoto Onuki * See the License for the specific language governing permissions and
1435997f3fdee2984b6d5373326110eda26929001aMakoto Onuki * limitations under the License.
1535997f3fdee2984b6d5373326110eda26929001aMakoto Onuki */
1635997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
1735997f3fdee2984b6d5373326110eda26929001aMakoto Onukipackage com.android.providers.contacts.util;
1835997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
1935997f3fdee2984b6d5373326110eda26929001aMakoto Onukiimport android.content.SharedPreferences;
2035997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
2138210445730ee04c351c7cc1b3800cfe23e34325Makoto Onukiimport com.google.android.collect.Maps;
2238210445730ee04c351c7cc1b3800cfe23e34325Makoto Onuki
2335997f3fdee2984b6d5373326110eda26929001aMakoto Onukiimport java.util.HashMap;
2435997f3fdee2984b6d5373326110eda26929001aMakoto Onukiimport java.util.Map;
2535997f3fdee2984b6d5373326110eda26929001aMakoto Onukiimport java.util.Set;
2635997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
2735997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
2835997f3fdee2984b6d5373326110eda26929001aMakoto Onuki/**
2935997f3fdee2984b6d5373326110eda26929001aMakoto Onuki * A programmable mock content provider.
3035997f3fdee2984b6d5373326110eda26929001aMakoto Onuki */
3135997f3fdee2984b6d5373326110eda26929001aMakoto Onukipublic class MockSharedPreferences implements SharedPreferences, SharedPreferences.Editor {
3235997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
3335997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    private HashMap<String, Object> mValues = Maps.newHashMap();
3435997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    private HashMap<String, Object> mTempValues = Maps.newHashMap();
3535997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
3635997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    public Editor edit() {
3735997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        return this;
3835997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    }
3935997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
4035997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    public boolean contains(String key) {
4135997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        return mValues.containsKey(key);
4235997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    }
4335997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
4435997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    public Map<String, ?> getAll() {
4535997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        return new HashMap<String, Object>(mValues);
4635997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    }
4735997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
4835997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    public boolean getBoolean(String key, boolean defValue) {
4935997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        if (mValues.containsKey(key)) {
5035997f3fdee2984b6d5373326110eda26929001aMakoto Onuki            return ((Boolean)mValues.get(key)).booleanValue();
5135997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        }
5235997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        return defValue;
5335997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    }
5435997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
5535997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    public float getFloat(String key, float defValue) {
5635997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        if (mValues.containsKey(key)) {
5735997f3fdee2984b6d5373326110eda26929001aMakoto Onuki            return ((Float)mValues.get(key)).floatValue();
5835997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        }
5935997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        return defValue;
6035997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    }
6135997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
6235997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    public int getInt(String key, int defValue) {
6335997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        if (mValues.containsKey(key)) {
6435997f3fdee2984b6d5373326110eda26929001aMakoto Onuki            return ((Integer)mValues.get(key)).intValue();
6535997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        }
6635997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        return defValue;
6735997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    }
6835997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
6935997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    public long getLong(String key, long defValue) {
7035997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        if (mValues.containsKey(key)) {
7135997f3fdee2984b6d5373326110eda26929001aMakoto Onuki            return ((Long)mValues.get(key)).longValue();
7235997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        }
7335997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        return defValue;
7435997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    }
7535997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
7635997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    public String getString(String key, String defValue) {
7735997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        if (mValues.containsKey(key))
7835997f3fdee2984b6d5373326110eda26929001aMakoto Onuki            return (String)mValues.get(key);
7935997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        return defValue;
8035997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    }
8135997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
8235997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    @SuppressWarnings("unchecked")
8335997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    public Set<String> getStringSet(String key, Set<String> defValues) {
8435997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        if (mValues.containsKey(key)) {
8535997f3fdee2984b6d5373326110eda26929001aMakoto Onuki            return (Set<String>) mValues.get(key);
8635997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        }
8735997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        return defValues;
8835997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    }
8935997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
9035997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    public void registerOnSharedPreferenceChangeListener(
9135997f3fdee2984b6d5373326110eda26929001aMakoto Onuki            OnSharedPreferenceChangeListener listener) {
9235997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        throw new UnsupportedOperationException();
9335997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    }
9435997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
9535997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    public void unregisterOnSharedPreferenceChangeListener(
9635997f3fdee2984b6d5373326110eda26929001aMakoto Onuki            OnSharedPreferenceChangeListener listener) {
9735997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        throw new UnsupportedOperationException();
9835997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    }
9935997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
10035997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    public Editor putBoolean(String key, boolean value) {
10135997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        mTempValues.put(key, Boolean.valueOf(value));
10235997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        return this;
10335997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    }
10435997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
10535997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    public Editor putFloat(String key, float value) {
10635997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        mTempValues.put(key, value);
10735997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        return this;
10835997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    }
10935997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
11035997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    public Editor putInt(String key, int value) {
11135997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        mTempValues.put(key, value);
11235997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        return this;
11335997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    }
11435997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
11535997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    public Editor putLong(String key, long value) {
11635997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        mTempValues.put(key, value);
11735997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        return this;
11835997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    }
11935997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
12035997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    public Editor putString(String key, String value) {
12135997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        mTempValues.put(key, value);
12235997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        return this;
12335997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    }
12435997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
12535997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    public Editor putStringSet(String key, Set<String> values) {
12635997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        mTempValues.put(key, values);
12735997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        return this;
12835997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    }
12935997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
13035997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    public Editor remove(String key) {
13135997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        mTempValues.remove(key);
13235997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        return this;
13335997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    }
13435997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
13535997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    public Editor clear() {
13635997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        mTempValues.clear();
13735997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        return this;
13835997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    }
13935997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
14035997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    @SuppressWarnings("unchecked")
14135997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    public boolean commit() {
14235997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        mValues = (HashMap<String, Object>)mTempValues.clone();
14335997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        return true;
14435997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    }
14535997f3fdee2984b6d5373326110eda26929001aMakoto Onuki
14635997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    public void apply() {
14735997f3fdee2984b6d5373326110eda26929001aMakoto Onuki        commit();
14835997f3fdee2984b6d5373326110eda26929001aMakoto Onuki    }
14935997f3fdee2984b6d5373326110eda26929001aMakoto Onuki}
150