11ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang/* 21ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang * Copyright (C) 2010 The Android Open Source Project 31ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang * 41ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang * Licensed under the Apache License, Version 2.0 (the "License"); 51ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang * you may not use this file except in compliance with the License. 61ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang * You may obtain a copy of the License at 71ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang * 81ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang * http://www.apache.org/licenses/LICENSE-2.0 91ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang * 101ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang * Unless required by applicable law or agreed to in writing, software 111ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang * distributed under the License is distributed on an "AS IS" BASIS, 121ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang * See the License for the specific language governing permissions and 141ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang * limitations under the License. 151ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang */ 161ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 171ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Changpackage com.android.camera; 181ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 191ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Changimport android.content.Context; 201ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Changimport android.content.SharedPreferences; 211ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Changimport android.content.SharedPreferences.OnSharedPreferenceChangeListener; 221ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Changimport android.preference.PreferenceManager; 231ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 241ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Changimport java.util.Map; 25d26dfad8d2f864d362230cc5357c9aa38f72138cChih-Chung Changimport java.util.Set; 261ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Changimport java.util.WeakHashMap; 271ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Changimport java.util.concurrent.CopyOnWriteArrayList; 281ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 291ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Changpublic class ComboPreferences implements SharedPreferences, OnSharedPreferenceChangeListener { 301ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang private SharedPreferences mPrefGlobal; // global preferences 311ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang private SharedPreferences mPrefLocal; // per-camera preferences 321ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang private CopyOnWriteArrayList<OnSharedPreferenceChangeListener> mListeners; 331ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang private static WeakHashMap<Context, ComboPreferences> sMap = 341ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang new WeakHashMap<Context, ComboPreferences>(); 351ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 361ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public ComboPreferences(Context context) { 371ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mPrefGlobal = PreferenceManager.getDefaultSharedPreferences(context); 381ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mPrefGlobal.registerOnSharedPreferenceChangeListener(this); 391ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang synchronized (sMap) { 401ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang sMap.put(context, this); 411ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 421ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mListeners = new CopyOnWriteArrayList<OnSharedPreferenceChangeListener>(); 431ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 441ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 451ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public static ComboPreferences get(Context context) { 461ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang synchronized (sMap) { 471ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return sMap.get(context); 481ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 491ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 501ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 514a70e66b58207703f8a705548efcd5353106e452Wu-cheng Li // Sets the camera id and reads its preferences. Each camera has its own 524a70e66b58207703f8a705548efcd5353106e452Wu-cheng Li // preferences. 537add00693c1ec910bc8700fe046ee18cbe4e1148Wu-cheng Li public void setLocalId(Context context, int cameraId) { 547add00693c1ec910bc8700fe046ee18cbe4e1148Wu-cheng Li String prefName = context.getPackageName() + "_preferences_" + cameraId; 551ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang if (mPrefLocal != null) { 561ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mPrefLocal.unregisterOnSharedPreferenceChangeListener(this); 571ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 581ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mPrefLocal = context.getSharedPreferences( 591ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang prefName, Context.MODE_PRIVATE); 601ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mPrefLocal.registerOnSharedPreferenceChangeListener(this); 611ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 621ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 631ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public SharedPreferences getGlobal() { 641ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return mPrefGlobal; 651ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 661ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 671ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public SharedPreferences getLocal() { 681ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return mPrefLocal; 691ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 701ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 711ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public Map<String, ?> getAll() { 721ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang throw new UnsupportedOperationException(); // Can be implemented if needed. 731ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 741ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 751ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang private static boolean isGlobal(String key) { 7613d91fc0fa66ef056397be20f013b51992e109deWu-cheng Li return key.equals(CameraSettings.KEY_VIDEO_TIME_LAPSE_FRAME_INTERVAL) 7713d91fc0fa66ef056397be20f013b51992e109deWu-cheng Li || key.equals(CameraSettings.KEY_CAMERA_ID) 7898d615769af2b08bcddf02ee1b11f5288ec5cf92Wu-cheng Li || key.equals(CameraSettings.KEY_RECORD_LOCATION) 79d6e5029b2df45210834334f7c2e99dfc85e962f0Chih-yu Huang || key.equals(CameraSettings.KEY_CAMERA_FIRST_USE_HINT_SHOWN) 80d6e5029b2df45210834334f7c2e99dfc85e962f0Chih-yu Huang || key.equals(CameraSettings.KEY_VIDEO_FIRST_USE_HINT_SHOWN) 8171e76dcebdbb3e5768fc948bed9c529a5787294eWu-cheng Li || key.equals(CameraSettings.KEY_VIDEO_EFFECT); 821ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 831ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 841ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public String getString(String key, String defValue) { 851ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang if (isGlobal(key) || !mPrefLocal.contains(key)) { 861ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return mPrefGlobal.getString(key, defValue); 871ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } else { 881ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return mPrefLocal.getString(key, defValue); 891ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 901ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 911ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 921ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public int getInt(String key, int defValue) { 931ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang if (isGlobal(key) || !mPrefLocal.contains(key)) { 941ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return mPrefGlobal.getInt(key, defValue); 951ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } else { 961ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return mPrefLocal.getInt(key, defValue); 971ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 981ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 991ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 1001ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public long getLong(String key, long defValue) { 1011ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang if (isGlobal(key) || !mPrefLocal.contains(key)) { 1021ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return mPrefGlobal.getLong(key, defValue); 1031ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } else { 1041ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return mPrefLocal.getLong(key, defValue); 1051ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 1061ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 1071ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 1081ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public float getFloat(String key, float defValue) { 1091ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang if (isGlobal(key) || !mPrefLocal.contains(key)) { 1101ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return mPrefGlobal.getFloat(key, defValue); 1111ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } else { 1121ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return mPrefLocal.getFloat(key, defValue); 1131ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 1141ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 1151ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 1161ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public boolean getBoolean(String key, boolean defValue) { 1171ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang if (isGlobal(key) || !mPrefLocal.contains(key)) { 1181ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return mPrefGlobal.getBoolean(key, defValue); 1191ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } else { 1201ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return mPrefLocal.getBoolean(key, defValue); 1211ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 1221ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 1231ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 124b13acb76f5b86f46dfe07830648ec14524e83d39Chih-Chung Chang // This method is not used. 125450254a7c9b30e4f36429b46895c944458f59962Chih-Chung Chang public Set<String> getStringSet(String key, Set<String> defValues) { 126d26dfad8d2f864d362230cc5357c9aa38f72138cChih-Chung Chang throw new UnsupportedOperationException(); 127d26dfad8d2f864d362230cc5357c9aa38f72138cChih-Chung Chang } 128d26dfad8d2f864d362230cc5357c9aa38f72138cChih-Chung Chang 1291ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public boolean contains(String key) { 1301ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang if (mPrefLocal.contains(key)) return true; 1311ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang if (mPrefGlobal.contains(key)) return true; 1321ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return false; 1331ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 1341ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 1351ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang private class MyEditor implements Editor { 1361ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang private Editor mEditorGlobal; 1371ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang private Editor mEditorLocal; 1381ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 1391ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang MyEditor() { 1401ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mEditorGlobal = mPrefGlobal.edit(); 1411ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mEditorLocal = mPrefLocal.edit(); 1421ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 1431ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 1441ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public boolean commit() { 1451ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang boolean result1 = mEditorGlobal.commit(); 1461ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang boolean result2 = mEditorLocal.commit(); 1471ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return result1 && result2; 1481ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 1491ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 1507bf93fe43dccbe31cfa6fe859ae7f9f946d8e923Brad Fitzpatrick public void apply() { 1514e5aa452a0e2438f9af1f08c56b1a7b414e561d9Brad Fitzpatrick mEditorGlobal.apply(); 1524e5aa452a0e2438f9af1f08c56b1a7b414e561d9Brad Fitzpatrick mEditorLocal.apply(); 15320ddc2054b04d40b4e15e0831d3df02f30b600e8Brad Fitzpatrick } 15420ddc2054b04d40b4e15e0831d3df02f30b600e8Brad Fitzpatrick 1551ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang // Note: clear() and remove() affects both local and global preferences. 1561ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public Editor clear() { 1571ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mEditorGlobal.clear(); 1581ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mEditorLocal.clear(); 1591ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return this; 1601ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 1611ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 1621ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public Editor remove(String key) { 1631ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mEditorGlobal.remove(key); 1641ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mEditorLocal.remove(key); 1651ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return this; 1661ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 1671ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 1681ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public Editor putString(String key, String value) { 1691ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang if (isGlobal(key)) { 1701ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mEditorGlobal.putString(key, value); 1711ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } else { 1721ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mEditorLocal.putString(key, value); 1731ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 1741ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return this; 1751ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 1761ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 1771ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public Editor putInt(String key, int value) { 1781ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang if (isGlobal(key)) { 1791ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mEditorGlobal.putInt(key, value); 1801ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } else { 1811ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mEditorLocal.putInt(key, value); 1821ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 1831ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return this; 1841ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 1851ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 1861ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public Editor putLong(String key, long value) { 1871ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang if (isGlobal(key)) { 1881ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mEditorGlobal.putLong(key, value); 1891ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } else { 1901ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mEditorLocal.putLong(key, value); 1911ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 1921ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return this; 1931ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 1941ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 1951ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public Editor putFloat(String key, float value) { 1961ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang if (isGlobal(key)) { 1971ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mEditorGlobal.putFloat(key, value); 1981ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } else { 1991ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mEditorLocal.putFloat(key, value); 2001ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 2011ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return this; 2021ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 2031ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 2041ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public Editor putBoolean(String key, boolean value) { 2051ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang if (isGlobal(key)) { 2061ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mEditorGlobal.putBoolean(key, value); 2071ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } else { 2081ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mEditorLocal.putBoolean(key, value); 2091ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 2101ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return this; 2111ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 212b13acb76f5b86f46dfe07830648ec14524e83d39Chih-Chung Chang 213b13acb76f5b86f46dfe07830648ec14524e83d39Chih-Chung Chang // This method is not used. 214b13acb76f5b86f46dfe07830648ec14524e83d39Chih-Chung Chang public Editor putStringSet(String key, Set<String> values) { 215b13acb76f5b86f46dfe07830648ec14524e83d39Chih-Chung Chang throw new UnsupportedOperationException(); 216b13acb76f5b86f46dfe07830648ec14524e83d39Chih-Chung Chang } 2171ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 2181ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 2191ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang // Note the remove() and clear() of the returned Editor may not work as 2201ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang // expected because it doesn't touch the global preferences at all. 2211ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public Editor edit() { 2221ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang return new MyEditor(); 2231ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 2241ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 2251ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public void registerOnSharedPreferenceChangeListener( 2261ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang OnSharedPreferenceChangeListener listener) { 2271ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mListeners.add(listener); 2281ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 2291ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 2301ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public void unregisterOnSharedPreferenceChangeListener( 2311ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang OnSharedPreferenceChangeListener listener) { 2321ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang mListeners.remove(listener); 2331ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 2341ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang 2351ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 2361ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang String key) { 2371ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang for (OnSharedPreferenceChangeListener listener : mListeners) { 2381ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang listener.onSharedPreferenceChanged(this, key); 2391ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 2401ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang } 2411ef634d277d550ed55b5b7089dfd56ed71815bd6Chih-Chung Chang} 242