Skip to content

Instantly share code, notes, and snippets.

@lvialle
Created April 19, 2011 13:52
Show Gist options
  • Select an option

  • Save lvialle/927847 to your computer and use it in GitHub Desktop.

Select an option

Save lvialle/927847 to your computer and use it in GitHub Desktop.
package com.levelup.foxyring;
import android.content.Context;
import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase;
import android.database.Cursor;
import java.util.Map;
import android.util.Log;
public class FoxyDbPreferences implements SharedPreferences {
static final String TAG = "FoxyRing";
private Context context;
private final String DATABASE_NAME = "FoxyRingPrefs.sqlite";
private final String DATABASE_TABLE = "FoxyPrefs";
SQLiteDatabase foxyDB = null;
FoxyDbPreferences(Context context) {
// Default constructor
this.context = context;
foxyDB = context.openOrCreateDatabase(DATABASE_NAME, 0, null);
final String CREATE_TABLE_FOXYPREFS =
"CREATE TABLE IF NOT EXISTS FoxyPrefs " +
"(PREF_NAME VARCHAR primary key, " +
"PREF_VALUE VARCHAR not null);";
foxyDB.execSQL(CREATE_TABLE_FOXYPREFS);
foxyDB.close();
}
private void putPref(String name, String value) {
foxyDB = context.openOrCreateDatabase(DATABASE_NAME, 0, null);
Cursor c = foxyDB.rawQuery("SELECT PREF_VALUE FROM " + DATABASE_TABLE + " WHERE PREF_NAME='" + name + "'", null);
//Log.i(TAG, "Put pref: "+ name);
if (!c.moveToFirst()) { // not present
//Log.i(TAG, "Create row");
String INSERT_ROW =
"INSERT INTO " + DATABASE_TABLE + " " +
"(PREF_NAME, PREF_VALUE) " +
"VALUES ('" + name +"','"+ value +"');";
foxyDB.execSQL(INSERT_ROW);
} else {
//Log.i(TAG, "Update row");
String INSERT_ROW =
"UPDATE " + DATABASE_TABLE + " set " +
"PREF_VALUE='" + value + "' " +
"WHERE PREF_NAME='"+ name + "';";
foxyDB.execSQL(INSERT_ROW);
}
c.close();
foxyDB.close();
}
private String getPref(String name, String defaultValue) {
foxyDB = context.openOrCreateDatabase(DATABASE_NAME, 0, null);
String dbValue = defaultValue;
Cursor c = foxyDB.rawQuery("SELECT PREF_VALUE FROM " + DATABASE_TABLE + " WHERE PREF_NAME='" + name + "'", null);
if (c.moveToFirst()) { // present
dbValue = c.getString(c.getColumnIndex("PREF_VALUE"));
}
c.close();
foxyDB.close();
return dbValue;
}
public void putBoolean(String name, boolean value) {
String dbValue = String.valueOf(value);
putPref(name, dbValue);
}
public boolean getBoolean(String name, boolean defaultValue) {
String dbDefValue = String.valueOf(defaultValue);
return Boolean.valueOf(getPref(name, dbDefValue));
}
public void putLong(String name, long value) {
String dbValue = String.valueOf(value);
putPref(name, dbValue);
}
public long getLong(String name, long defaultValue) {
String dbDefValue = String.valueOf(defaultValue);
return Long.valueOf(getPref(name, dbDefValue));
}
public void putInt(String name, int value) {
String dbValue = String.valueOf(value);
putPref(name, dbValue);
}
public int getInt(String name, int defaultValue) {
String dbDefValue = String.valueOf(defaultValue);
return Integer.valueOf(getPref(name, dbDefValue));
}
public void putString(String name, String value) {
putPref(name, value);
}
public String getString(String name, String defaultValue) {
return getPref(name, defaultValue);
}
@Override
public boolean contains(String key) {
boolean returnValue = false;
foxyDB = context.openOrCreateDatabase(DATABASE_NAME, 0, null);
Cursor c = foxyDB.rawQuery("SELECT PREF_VALUE FROM " + DATABASE_TABLE + " WHERE PREF_NAME='" + key + "'", null);
if (c.moveToFirst()) {
returnValue = true;
}
c.close();
foxyDB.close();
return returnValue;
}
@Override
public Editor edit() {
return new Editor();
}
@Override
public Map<String, ?> getAll() {
return null;
}
@Override
public float getFloat(String key, float defValue) {
return 0;
}
@Override
public void registerOnSharedPreferenceChangeListener(
OnSharedPreferenceChangeListener listener) {
// TODO Auto-generated method stub
}
@Override
public void unregisterOnSharedPreferenceChangeListener(
OnSharedPreferenceChangeListener listener) {
// TODO Auto-generated method stub
}
public class Editor implements SharedPreferences.Editor {
public SharedPreferences.Editor clear() {
return this;
}
public boolean commit() {
// Nothing to do since our changes are realtime
return true;
// and update any listeners
/*for(OnSharedPreferenceChangeListener listener : listeners) {
listener.onSharedPreferenceChanged(this, null);
}*/
}
@Override
public android.content.SharedPreferences.Editor putBoolean(String key,
boolean value) {
String dbValue = String.valueOf(value);
putPref(key, dbValue);
return this;
}
@Override
public android.content.SharedPreferences.Editor putFloat(String key,
float value) {
putPref(key, String.valueOf(value));
return this;
}
@Override
public android.content.SharedPreferences.Editor putInt(String key,
int value) {
String dbValue = String.valueOf(value);
putPref(key, dbValue);
return this;
}
@Override
public android.content.SharedPreferences.Editor putLong(String key,
long value) {
String dbValue = String.valueOf(value);
putPref(key, dbValue);
return this;
}
@Override
public android.content.SharedPreferences.Editor putString(String key,
String value) {
putPref(key, value);
return this;
}
@Override
public android.content.SharedPreferences.Editor remove(String key) {
return this;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment