· 8 years ago · Jul 27, 2018, 07:36 PM
1package com.levelup.foxyring;
2
3import android.content.Context;
4import android.content.SharedPreferences;
5import android.database.sqlite.SQLiteDatabase;
6import android.database.Cursor;
7import java.util.Map;
8
9import android.util.Log;
10
11public class FoxyDbPreferences implements SharedPreferences {
12
13 static final String TAG = "FoxyRing";
14
15 private Context context;
16
17 private final String DATABASE_NAME = "FoxyRingPrefs.sqlite";
18 private final String DATABASE_TABLE = "FoxyPrefs";
19 SQLiteDatabase foxyDB = null;
20
21 FoxyDbPreferences(Context context) {
22 // Default constructor
23 this.context = context;
24 foxyDB = context.openOrCreateDatabase(DATABASE_NAME, 0, null);
25
26 final String CREATE_TABLE_FOXYPREFS =
27 "CREATE TABLE IF NOT EXISTS FoxyPrefs " +
28 "(PREF_NAME VARCHAR primary key, " +
29 "PREF_VALUE VARCHAR not null);";
30
31 foxyDB.execSQL(CREATE_TABLE_FOXYPREFS);
32 foxyDB.close();
33
34
35 }
36
37 private void putPref(String name, String value) {
38 foxyDB = context.openOrCreateDatabase(DATABASE_NAME, 0, null);
39
40
41 Cursor c = foxyDB.rawQuery("SELECT PREF_VALUE FROM " + DATABASE_TABLE + " WHERE PREF_NAME='" + name + "'", null);
42 //Log.i(TAG, "Put pref: "+ name);
43 if (!c.moveToFirst()) { // not present
44 //Log.i(TAG, "Create row");
45 String INSERT_ROW =
46 "INSERT INTO " + DATABASE_TABLE + " " +
47 "(PREF_NAME, PREF_VALUE) " +
48 "VALUES ('" + name +"','"+ value +"');";
49 foxyDB.execSQL(INSERT_ROW);
50
51 } else {
52 //Log.i(TAG, "Update row");
53 String INSERT_ROW =
54 "UPDATE " + DATABASE_TABLE + " set " +
55 "PREF_VALUE='" + value + "' " +
56 "WHERE PREF_NAME='"+ name + "';";
57 foxyDB.execSQL(INSERT_ROW);
58 }
59
60 c.close();
61 foxyDB.close();
62
63 }
64
65 private String getPref(String name, String defaultValue) {
66 foxyDB = context.openOrCreateDatabase(DATABASE_NAME, 0, null);
67 String dbValue = defaultValue;
68
69 Cursor c = foxyDB.rawQuery("SELECT PREF_VALUE FROM " + DATABASE_TABLE + " WHERE PREF_NAME='" + name + "'", null);
70
71 if (c.moveToFirst()) { // present
72
73 dbValue = c.getString(c.getColumnIndex("PREF_VALUE"));
74 }
75
76 c.close();
77 foxyDB.close();
78 return dbValue;
79 }
80
81 public void putBoolean(String name, boolean value) {
82 String dbValue = String.valueOf(value);
83 putPref(name, dbValue);
84 }
85
86 public boolean getBoolean(String name, boolean defaultValue) {
87 String dbDefValue = String.valueOf(defaultValue);
88 return Boolean.valueOf(getPref(name, dbDefValue));
89 }
90
91 public void putLong(String name, long value) {
92 String dbValue = String.valueOf(value);
93 putPref(name, dbValue);
94 }
95
96 public long getLong(String name, long defaultValue) {
97 String dbDefValue = String.valueOf(defaultValue);
98 return Long.valueOf(getPref(name, dbDefValue));
99 }
100
101 public void putInt(String name, int value) {
102 String dbValue = String.valueOf(value);
103 putPref(name, dbValue);
104 }
105
106 public int getInt(String name, int defaultValue) {
107 String dbDefValue = String.valueOf(defaultValue);
108 return Integer.valueOf(getPref(name, dbDefValue));
109 }
110
111 public void putString(String name, String value) {
112 putPref(name, value);
113 }
114
115 public String getString(String name, String defaultValue) {
116 return getPref(name, defaultValue);
117 }
118
119 @Override
120 public boolean contains(String key) {
121 boolean returnValue = false;
122 foxyDB = context.openOrCreateDatabase(DATABASE_NAME, 0, null);
123 Cursor c = foxyDB.rawQuery("SELECT PREF_VALUE FROM " + DATABASE_TABLE + " WHERE PREF_NAME='" + key + "'", null);
124 if (c.moveToFirst()) {
125 returnValue = true;
126 }
127 c.close();
128 foxyDB.close();
129 return returnValue;
130 }
131
132 @Override
133 public Editor edit() {
134 return new Editor();
135 }
136
137 @Override
138 public Map<String, ?> getAll() {
139 return null;
140 }
141
142
143 @Override
144 public float getFloat(String key, float defValue) {
145 return 0;
146 }
147
148 @Override
149 public void registerOnSharedPreferenceChangeListener(
150 OnSharedPreferenceChangeListener listener) {
151 // TODO Auto-generated method stub
152
153 }
154
155 @Override
156 public void unregisterOnSharedPreferenceChangeListener(
157 OnSharedPreferenceChangeListener listener) {
158 // TODO Auto-generated method stub
159
160 }
161
162 public class Editor implements SharedPreferences.Editor {
163
164 public SharedPreferences.Editor clear() {
165 return this;
166 }
167
168 public boolean commit() {
169 // Nothing to do since our changes are realtime
170 return true;
171
172 // and update any listeners
173 /*for(OnSharedPreferenceChangeListener listener : listeners) {
174 listener.onSharedPreferenceChanged(this, null);
175 }*/
176 }
177
178 @Override
179 public android.content.SharedPreferences.Editor putBoolean(String key,
180 boolean value) {
181 String dbValue = String.valueOf(value);
182 putPref(key, dbValue);
183 return this;
184 }
185
186 @Override
187 public android.content.SharedPreferences.Editor putFloat(String key,
188 float value) {
189 putPref(key, String.valueOf(value));
190 return this;
191 }
192
193 @Override
194 public android.content.SharedPreferences.Editor putInt(String key,
195 int value) {
196 String dbValue = String.valueOf(value);
197 putPref(key, dbValue);
198 return this;
199 }
200
201 @Override
202 public android.content.SharedPreferences.Editor putLong(String key,
203 long value) {
204 String dbValue = String.valueOf(value);
205 putPref(key, dbValue);
206 return this;
207 }
208
209 @Override
210 public android.content.SharedPreferences.Editor putString(String key,
211 String value) {
212 putPref(key, value);
213 return this;
214 }
215
216 @Override
217 public android.content.SharedPreferences.Editor remove(String key) {
218 return this;
219 }
220 }
221}