All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.WazaBe.HoloEverywhere.internal._SharedPreferencesImpl_XML Maven / Gradle / Ivy

The newest version!
package com.WazaBe.HoloEverywhere.internal;

import java.lang.reflect.Constructor;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Build.VERSION;
import android.util.Log;

import com.WazaBe.HoloEverywhere.app.Base;
import com.WazaBe.HoloEverywhere.preference.SharedPreferences;

public final class _SharedPreferencesImpl_XML implements SharedPreferences {
	private static final class BaseEditor implements Editor {
		private android.content.SharedPreferences.Editor editor;

		public BaseEditor(android.content.SharedPreferences.Editor editor) {
			if (editor == null) {
				throw new IllegalArgumentException(
						"SharedPreferences.Editor can't be null");
			}
			this.editor = editor;
		}

		@Override
		@SuppressLint("NewApi")
		public void apply() {
			if (VERSION.SDK_INT >= 9) {
				editor.apply();
			} else {
				editor.commit();
			}
		}

		@Override
		public Editor clear() {
			editor.clear();
			return this;
		}

		@Override
		public boolean commit() {
			return editor.commit();
		}

		@Override
		public Editor putBoolean(String key, boolean value) {
			editor.putBoolean(key, value);
			return this;
		}

		@Override
		public Editor putFloat(String key, float value) {
			editor.putFloat(key, value);
			return this;
		}

		@Override
		public Editor putFloatSet(String key, Set value) {
			return putSet(key, value);
		}

		@Override
		public Editor putInt(String key, int value) {
			editor.putInt(key, value);
			return this;
		}

		@Override
		public Editor putIntSet(String key, Set value) {
			return putSet(key, value);
		}

		@Override
		public Editor putJSONArray(String key, JSONArray value) {
			editor.putString(key, value.toString());
			return this;
		}

		@Override
		public Editor putJSONObject(String key, JSONObject value) {
			editor.putString(key, value.toString());
			return this;
		}

		@Override
		public Editor putLong(String key, long value) {
			editor.putLong(key, value);
			return this;
		}

		@Override
		public Editor putLongSet(String key, Set value) {
			return putSet(key, value);
		}

		private Editor putSet(String key, Set value) {
			editor.putString(key, _SharedPreferencesImpl_XML.setToString(value));
			return this;
		}

		@Override
		public Editor putString(String key, String value) {
			editor.putString(key, value);
			return this;
		}

		@Override
		@SuppressLint("NewApi")
		public Editor putStringSet(String key, Set value) {
			if (VERSION.SDK_INT >= 11) {
				editor.putStringSet(key, value);
			} else {
				editor.putString(key,
						_SharedPreferencesImpl_XML.setToString(value));
			}
			return this;
		}

		@Override
		public Editor remove(String key) {
			editor.remove(key);
			return this;
		}
	}

	public static class BaseOnSharedPreferenceChangeListener implements
			android.content.SharedPreferences.OnSharedPreferenceChangeListener {
		private static final Map instances = new HashMap();

		public static BaseOnSharedPreferenceChangeListener obtain(
				SharedPreferences prefs,
				OnSharedPreferenceChangeListener listener) {
			return BaseOnSharedPreferenceChangeListener.obtain(prefs, listener,
					BaseOnSharedPreferenceChangeListener.class);
		}

		@SuppressWarnings("unchecked")
		public static  T obtain(
				SharedPreferences prefs,
				OnSharedPreferenceChangeListener listener, Class clazz) {
			if (!BaseOnSharedPreferenceChangeListener.instances
					.containsKey(listener)) {
				synchronized (BaseOnSharedPreferenceChangeListener.instances) {
					if (!BaseOnSharedPreferenceChangeListener.instances
							.containsKey(listener)) {
						try {
							Constructor constructor = clazz.getConstructor(
									SharedPreferences.class,
									OnSharedPreferenceChangeListener.class);
							constructor.setAccessible(true);
							BaseOnSharedPreferenceChangeListener.instances.put(
									listener,
									constructor.newInstance(prefs, listener));
						} catch (Exception e) {
							e.printStackTrace();
						}
					}
				}
			}
			return (T) BaseOnSharedPreferenceChangeListener.instances
					.get(listener);
		}

		private OnSharedPreferenceChangeListener listener;

		private SharedPreferences prefs;

		public BaseOnSharedPreferenceChangeListener(SharedPreferences prefs,
				OnSharedPreferenceChangeListener listener) {
			this.prefs = prefs;
			this.listener = listener;
		}

		@Override
		public void onSharedPreferenceChanged(
				android.content.SharedPreferences sharedPreferences, String key) {
			listener.onSharedPreferenceChanged(prefs, key);
		}
	}

	private static String setToString(Set set) {
		return new JSONArray(set).toString();
	}

	private static  Set stringToSet(String string, Class clazz) {
		try {
			JSONArray array = new JSONArray(string);
			Set set = new HashSet(array.length());
			for (int i = 0; i < array.length(); i++) {
				set.add(clazz.cast(array.get(i)));
			}
			return set;
		} catch (ClassCastException e) {
			Log.e("SupportSharedPreferences", "Error of cast", e);
			return null;
		} catch (JSONException e) {
			return null;
		}
	}

	private final android.content.SharedPreferences prefs;

	public _SharedPreferencesImpl_XML(Context context, String name, int mode) {
		if (context instanceof Base) {
			prefs = ((Base) context).superGetSharedPreferences(name, mode);
		} else {
			prefs = context.getSharedPreferences(name, mode);
		}
	}

	@Override
	public boolean contains(String key) {
		return prefs.contains(key);
	}

	@Override
	public Editor edit() {
		return new BaseEditor(prefs.edit());
	}

	@Override
	public Map getAll() {
		return prefs.getAll();
	}

	@Override
	public boolean getBoolean(String key, boolean defValue) {
		return prefs.getBoolean(key, defValue);
	}

	@Override
	public float getFloat(String key, float defValue) {
		return prefs.getFloat(key, defValue);
	}

	@Override
	public Set getFloatSet(String key, Set defValue) {
		return getSet(key, defValue, Float.class);
	}

	@Override
	public int getInt(String key, int defValue) {
		return prefs.getInt(key, defValue);
	}

	@Override
	public Set getIntSet(String key, Set defValue) {
		return getSet(key, defValue, Integer.class);
	}

	@Override
	public JSONArray getJSONArray(String key, JSONArray defValue) {
		String s = prefs.getString(key, null);
		try {
			return s == null ? defValue : new JSONArray(s);
		} catch (JSONException e) {
			return new JSONArray();
		}
	}

	@Override
	public JSONObject getJSONObject(String key, JSONObject defValue) {
		String s = prefs.getString(key, null);
		try {
			return s == null ? defValue : new JSONObject(s);
		} catch (JSONException e) {
			return new JSONObject();
		}
	}

	@Override
	public long getLong(String key, long defValue) {
		return prefs.getLong(key, defValue);
	}

	@Override
	public Set getLongSet(String key, Set defValue) {
		return getSet(key, defValue, Long.class);
	}

	private  Set getSet(String key, Set defValue, Class clazz) {
		String s = prefs.getString(key, null);
		if (s == null) {
			return defValue;
		} else {
			return _SharedPreferencesImpl_XML.stringToSet(s, clazz);
		}
	}

	@Override
	public String getString(String key, String defValue) {
		return prefs.getString(key, defValue);
	}

	@SuppressLint("NewApi")
	@Override
	public Set getStringSet(String key, Set defValue) {
		if (VERSION.SDK_INT >= 11) {
			return prefs.getStringSet(key, defValue);
		} else {
			return getSet(key, defValue, String.class);
		}
	}

	@Override
	public void registerOnSharedPreferenceChangeListener(
			android.content.SharedPreferences.OnSharedPreferenceChangeListener listener) {
		prefs.registerOnSharedPreferenceChangeListener(listener);
	}

	@Override
	public void registerOnSharedPreferenceChangeListener(
			OnSharedPreferenceChangeListener listener) {
		prefs.registerOnSharedPreferenceChangeListener(BaseOnSharedPreferenceChangeListener
				.obtain(this, listener));
	}

	@Override
	public void unregisterOnSharedPreferenceChangeListener(
			android.content.SharedPreferences.OnSharedPreferenceChangeListener listener) {
		prefs.unregisterOnSharedPreferenceChangeListener(listener);
	}

	@Override
	public void unregisterOnSharedPreferenceChangeListener(
			OnSharedPreferenceChangeListener listener) {
		prefs.unregisterOnSharedPreferenceChangeListener(BaseOnSharedPreferenceChangeListener
				.obtain(this, listener));
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy