1 package jp
.gr
.java_conf
.ofnhwx
.olib
.utils
;
3 import java
.io
.FileInputStream
;
4 import java
.io
.FileOutputStream
;
5 import java
.io
.ObjectInputStream
;
6 import java
.io
.ObjectOutputStream
;
8 import java
.util
.Map
.Entry
;
10 import android
.content
.Context
;
11 import android
.content
.SharedPreferences
;
12 import android
.os
.Build
;
13 import android
.preference
.PreferenceManager
;
16 * デフォルト設定の取得・設定を行うクラス.
19 public final class OPreference
{
22 private static OPreference sInstance
= null;
25 private static enum Type
{
32 private final Context context
;
33 private final SharedPreferences preferences
;
38 * @return {@link OPreference}のインスタンス
40 public static OPreference
getInstance(Context context
) {
41 if (sInstance
== null) {
42 sInstance
= new OPreference(context
.getApplicationContext());
47 private OPreference(Context context
) {
48 this.context
= context
;
49 this.preferences
= PreferenceManager
.getDefaultSharedPreferences(context
);
63 * @param key 更新するデフォルト設定の名前
66 * @return 更新に成功したかどうかを返す
67 * @throws IllegalArgumentException たぶん発生することはない
69 private boolean write(String key
, Object value
, Type type
) {
70 SharedPreferences
.Editor editor
= preferences
.edit();
73 editor
.putBoolean(key
, (Boolean
)value
);
76 editor
.putFloat(key
, (Float
)value
);
79 editor
.putInt(key
, (Integer
)value
);
82 editor
.putLong(key
, (Long
)value
);
85 editor
.putString(key
, (String
)value
);
88 throw new IllegalArgumentException("Unrecognized type: " + value
.getClass().getSimpleName());
90 return editor
.commit();
94 * デフォルト設定を更新する(boolean値)
95 * @param key 更新するデフォルト設定の名前
97 * @return 更新に成功したかどうかを返す
99 public boolean write(String key
, boolean value
) {
100 return write(key
, value
, Type
.BOOLEAN
);
104 * デフォルト設定を更新する(float値)
105 * @param key 更新するデフォルト設定の名前
107 * @return 更新に成功したかどうかを返す
109 public boolean write(String key
, float value
) {
110 return write(key
, value
, Type
.FLOAT
);
115 * @param key 更新するデフォルト設定の名前
117 * @return 更新に成功したかどうかを返す
119 public boolean write(String key
, int value
) {
120 return write(key
, value
, Type
.INT
);
124 * デフォルト設定を更新する(long値)
125 * @param key 更新するデフォルト設定の名前
127 * @return 更新に成功したかどうかを返す
129 public boolean write(String key
, long value
) {
130 return write(key
, value
, Type
.LONG
);
134 * デフォルト設定を更新する(String値)
135 * @param key 更新するデフォルト設定の名前
137 * @return 更新に成功したかどうかを返す
139 public boolean write(String key
, String value
) {
140 return write(key
, value
, Type
.STRING
);
144 * デフォルト設定を更新する(boolean値)
145 * @param key 更新するデフォルト設定のリソースID
147 * @return 更新に成功したかどうかを返す
149 public boolean write(int resId
, boolean value
) {
150 return write(context
.getString(resId
), value
, Type
.BOOLEAN
);
154 * デフォルト設定を更新する(float値)
155 * @param key 更新するデフォルト設定のリソースID
157 * @return 更新に成功したかどうかを返す
159 public boolean write(int resId
, float value
) {
160 return write(context
.getString(resId
), value
, Type
.FLOAT
);
165 * @param key 更新するデフォルト設定のリソースID
167 * @return 更新に成功したかどうかを返す
169 public boolean write(int resId
, int value
) {
170 return write(context
.getString(resId
), value
, Type
.INT
);
174 * デフォルト設定を更新する(long値)
175 * @param key 更新するデフォルト設定のリソースID
177 * @return 更新に成功したかどうかを返す
179 public boolean write(int resId
, long value
) {
180 return write(context
.getString(resId
), value
, Type
.LONG
);
184 * デフォルト設定を更新する(String値)
185 * @param key 更新するデフォルト設定のリソースID
187 * @return 更新に成功したかどうかを返す
189 public boolean write(int resId
, String value
) {
190 return write(context
.getString(resId
), value
, Type
.STRING
);
195 * @param key 取得するデフォルト設定の名前
196 * @param defValue デフォルトが設定されていない場合に返す値
197 * @return 指定したデフォルト設定の値
199 public boolean getBoolean(String key
, boolean defValue
) {
200 return preferences
.getBoolean(key
, defValue
);
205 * @param key 取得するデフォルト設定の名前
206 * @param defValue デフォルトが設定されていない場合に返す値
207 * @return 指定したデフォルト設定の値
209 public float getFloat(String key
, float defValue
) {
210 return preferences
.getFloat(key
, defValue
);
215 * @param key 取得するデフォルト設定の名前
216 * @param defValue デフォルトが設定されていない場合に返す値
217 * @return 指定したデフォルト設定の値
219 public int getInt(String key
, int defValue
) {
220 return preferences
.getInt(key
, defValue
);
225 * @param key 取得するデフォルト設定の名前
226 * @param defValue デフォルトが設定されていない場合に返す値
227 * @return 指定したデフォルト設定の値
229 public long getLong(String key
, long defValue
) {
230 return preferences
.getLong(key
, defValue
);
235 * @param key 取得するデフォルト設定の名前
236 * @param defValue デフォルトが設定されていない場合に返す値
237 * @return 指定したデフォルト設定の値
239 public String
getString(String key
, String defValue
) {
240 return preferences
.getString(key
, defValue
);
245 * @param key 取得するデフォルト設定のリソースID
246 * @param defValue デフォルトが設定されていない場合に返す値
247 * @return 指定したデフォルト設定の値
249 public boolean getBoolean(int resId
, boolean defValue
) {
250 return preferences
.getBoolean(context
.getString(resId
), defValue
);
255 * @param key 取得するデフォルト設定のリソースID
256 * @param defValue デフォルトが設定されていない場合に返す値
257 * @return 指定したデフォルト設定の値
259 public float getFloat(int resId
, float defValue
) {
260 return preferences
.getFloat(context
.getString(resId
), defValue
);
265 * @param key 取得するデフォルト設定のリソースID
266 * @param defValue デフォルトが設定されていない場合に返す値
267 * @return 指定したデフォルト設定の値
269 public int getInt(int resId
, int defValue
) {
270 return preferences
.getInt(context
.getString(resId
), defValue
);
275 * @param key 取得するデフォルト設定のリソースID
276 * @param defValue デフォルトが設定されていない場合に返す値
277 * @return 指定したデフォルト設定の値
279 public long getLong(int resId
, long defValue
) {
280 return preferences
.getLong(context
.getString(resId
), defValue
);
285 * @param key 取得するデフォルト設定のリソースID
286 * @param defValue デフォルトが設定されていない場合に返す値
287 * @return 指定したデフォルト設定の値
289 public String
getString(int resId
, String defValue
) {
290 return preferences
.getString(context
.getString(resId
), defValue
);
294 * 名前からDrawableリソースのIDを取得する
295 * @param name 取得するリソースの名前
296 * @return リソースID(見つからない場合'0')
298 public int getDrawableId(String name
) {
299 return context
.getResources().getIdentifier(name
, "drawable", context
.getPackageName());
303 * 名前から文字列リソースのIDを取得する
304 * @param name 取得するリソースの名前
305 * @return リソースID(見つからない場合'0')
307 public int getStringId(String name
) {
308 return context
.getResources().getIdentifier(name
, "string", context
.getPackageName());
311 // 以下、`Galaxy S 2.2.1'への対策
313 private static final String FILENAME
= "preferences.dat";
315 private boolean isGalaxyS() {
316 return Build
.MODEL
.equals("SC-02B");
319 private void readFromFile() {
320 FileInputStream fis
= null;
321 ObjectInputStream ois
= null;
323 fis
= context
.openFileInput(FILENAME
);
324 ois
= new ObjectInputStream(fis
);
325 @SuppressWarnings("unchecked")
326 Map
<String
, ?
> map
= (Map
<String
, ?
>)ois
.readObject();
327 for (Entry
<String
, ?
> entry
: map
.entrySet()) {
328 Object value
= entry
.getValue();
329 if (value
instanceof Boolean
) {
330 write(entry
.getKey(), (Boolean
)value
);
331 } else if (value
instanceof Float
) {
332 write(entry
.getKey(), (Float
)value
);
333 } else if (value
instanceof Integer
) {
334 write(entry
.getKey(), (Integer
)value
);
335 } else if (value
instanceof Long
) {
336 write(entry
.getKey(), (Long
)value
);
337 } else if (value
instanceof String
) {
338 write(entry
.getKey(), (String
)value
);
341 } catch (Exception e
) {
344 try { ois
.close(); } catch (Exception e
) {}
345 try { fis
.close(); } catch (Exception e
) {}
349 private void writeToFile() {
350 FileOutputStream fos
= null;
351 ObjectOutputStream oos
= null;
353 fos
= context
.openFileOutput(FILENAME
, Context
.MODE_WORLD_READABLE
);
354 oos
= new ObjectOutputStream(fos
);
355 oos
.writeObject(preferences
.getAll());
356 } catch (Exception e
) {
359 try { oos
.close(); } catch (Exception e
) {}
360 try { fos
.close(); } catch (Exception e
) {}