19
19
import com .dm .material .dashboard .candybar .utils .LogUtil ;
20
20
import com .nostra13 .universalimageloader .core .assist .ImageSize ;
21
21
22
+ import java .lang .ref .WeakReference ;
22
23
import java .util .ArrayList ;
23
24
import java .util .List ;
24
25
@@ -70,14 +71,14 @@ public class Database extends SQLiteOpenHelper {
70
71
71
72
private final Context mContext ;
72
73
73
- private static Database mDatabase ;
74
+ private static WeakReference < Database > mDatabase ;
74
75
private SQLiteDatabase mSQLiteDatabase ;
75
76
76
77
public static Database get (@ NonNull Context context ) {
77
- if (mDatabase == null ) {
78
- mDatabase = new Database (context );
78
+ if (mDatabase == null || mDatabase . get () == null ) {
79
+ mDatabase = new WeakReference <>( new Database (context ) );
79
80
}
80
- return mDatabase ;
81
+ return mDatabase . get () ;
81
82
}
82
83
83
84
private Database (Context context ) {
@@ -179,20 +180,20 @@ private void resetDatabase(SQLiteDatabase db, int oldVersion) {
179
180
180
181
public boolean openDatabase () {
181
182
try {
182
- if (mDatabase == null ) {
183
+ if (mDatabase == null || mDatabase . get () == null ) {
183
184
LogUtil .e ("Database error: openDatabase() database instance is null" );
184
185
return false ;
185
186
}
186
187
187
- if (mDatabase .mSQLiteDatabase == null ) {
188
- mDatabase .mSQLiteDatabase = mDatabase .getWritableDatabase ();
188
+ if (mDatabase .get (). mSQLiteDatabase == null ) {
189
+ mDatabase .get (). mSQLiteDatabase = mDatabase . get () .getWritableDatabase ();
189
190
}
190
191
191
- if (!mDatabase .mSQLiteDatabase .isOpen ()) {
192
+ if (!mDatabase .get (). mSQLiteDatabase .isOpen ()) {
192
193
LogUtil .e ("Database error: database openable false, trying to open the database again" );
193
- mDatabase .mSQLiteDatabase = mDatabase .getWritableDatabase ();
194
+ mDatabase .get (). mSQLiteDatabase = mDatabase . get () .getWritableDatabase ();
194
195
}
195
- return mDatabase .mSQLiteDatabase .isOpen ();
196
+ return mDatabase .get (). mSQLiteDatabase .isOpen ();
196
197
} catch (SQLiteException | NullPointerException e ) {
197
198
LogUtil .e (Log .getStackTraceString (e ));
198
199
return false ;
@@ -201,16 +202,16 @@ public boolean openDatabase() {
201
202
202
203
public boolean closeDatabase () {
203
204
try {
204
- if (mDatabase == null ) {
205
+ if (mDatabase == null || mDatabase . get () == null ) {
205
206
LogUtil .e ("Database error: closeDatabase() database instance is null" );
206
207
return false ;
207
208
}
208
209
209
- if (mDatabase .mSQLiteDatabase == null ) {
210
+ if (mDatabase .get (). mSQLiteDatabase == null ) {
210
211
LogUtil .e ("Database error: trying to close database which is not opened" );
211
212
return false ;
212
213
}
213
- mDatabase .mSQLiteDatabase .close ();
214
+ mDatabase .get (). mSQLiteDatabase .close ();
214
215
return true ;
215
216
} catch (SQLiteException | NullPointerException e ) {
216
217
LogUtil .e (Log .getStackTraceString (e ));
@@ -226,7 +227,7 @@ public void addRequest(@Nullable SQLiteDatabase db, Request request) {
226
227
return ;
227
228
}
228
229
229
- database = mDatabase .mSQLiteDatabase ;
230
+ database = mDatabase .get (). mSQLiteDatabase ;
230
231
}
231
232
232
233
ContentValues values = new ContentValues ();
@@ -246,7 +247,7 @@ public boolean isRequested(String activity) {
246
247
return false ;
247
248
}
248
249
249
- Cursor cursor = mDatabase .mSQLiteDatabase .query (TABLE_REQUEST , null , KEY_ACTIVITY + " = ?" ,
250
+ Cursor cursor = mDatabase .get (). mSQLiteDatabase .query (TABLE_REQUEST , null , KEY_ACTIVITY + " = ?" ,
250
251
new String []{activity }, null , null , null , null );
251
252
int rowCount = cursor .getCount ();
252
253
cursor .close ();
@@ -261,7 +262,7 @@ private List<Request> getRequestedApps(@Nullable SQLiteDatabase db) {
261
262
return new ArrayList <>();
262
263
}
263
264
264
- database = mDatabase .mSQLiteDatabase ;
265
+ database = mDatabase .get (). mSQLiteDatabase ;
265
266
}
266
267
267
268
List <Request > requests = new ArrayList <>();
@@ -290,7 +291,7 @@ public void addPremiumRequest(@Nullable SQLiteDatabase db, Request request) {
290
291
return ;
291
292
}
292
293
293
- database = mDatabase .mSQLiteDatabase ;
294
+ database = mDatabase .get (). mSQLiteDatabase ;
294
295
}
295
296
296
297
ContentValues values = new ContentValues ();
@@ -314,7 +315,7 @@ public List<Request> getPremiumRequest(@Nullable SQLiteDatabase db) {
314
315
return new ArrayList <>();
315
316
}
316
317
317
- database = mDatabase .mSQLiteDatabase ;
318
+ database = mDatabase .get (). mSQLiteDatabase ;
318
319
}
319
320
320
321
List <Request > requests = new ArrayList <>();
@@ -344,8 +345,8 @@ public void addWallpapers(List<?> list) {
344
345
345
346
String query = "INSERT OR IGNORE INTO " +TABLE_WALLPAPERS + " (" +KEY_NAME + "," +KEY_AUTHOR + "," +KEY_URL + ","
346
347
+KEY_THUMB_URL + "," +KEY_ADDED_ON + ") VALUES (?,?,?,?,?);" ;
347
- SQLiteStatement statement = mDatabase .mSQLiteDatabase .compileStatement (query );
348
- mDatabase .mSQLiteDatabase .beginTransaction ();
348
+ SQLiteStatement statement = mDatabase .get (). mSQLiteDatabase .compileStatement (query );
349
+ mDatabase .get (). mSQLiteDatabase .beginTransaction ();
349
350
350
351
for (int i = 0 ; i < list .size (); i ++) {
351
352
statement .clearBindings ();
@@ -377,8 +378,8 @@ public void addWallpapers(List<?> list) {
377
378
}
378
379
}
379
380
}
380
- mDatabase .mSQLiteDatabase .setTransactionSuccessful ();
381
- mDatabase .mSQLiteDatabase .endTransaction ();
381
+ mDatabase .get (). mSQLiteDatabase .setTransactionSuccessful ();
382
+ mDatabase .get (). mSQLiteDatabase .endTransaction ();
382
383
}
383
384
384
385
public void updateWallpaper (Wallpaper wallpaper ) {
@@ -408,7 +409,7 @@ public void updateWallpaper(Wallpaper wallpaper) {
408
409
}
409
410
410
411
if (values .size () > 0 ) {
411
- mDatabase .mSQLiteDatabase .update (TABLE_WALLPAPERS ,
412
+ mDatabase .get (). mSQLiteDatabase .update (TABLE_WALLPAPERS ,
412
413
values , KEY_URL +" = ?" , new String []{wallpaper .getURL ()});
413
414
}
414
415
}
@@ -419,7 +420,7 @@ public int getWallpapersCount() {
419
420
return 0 ;
420
421
}
421
422
422
- Cursor cursor = mDatabase .mSQLiteDatabase .query (TABLE_WALLPAPERS ,
423
+ Cursor cursor = mDatabase .get (). mSQLiteDatabase .query (TABLE_WALLPAPERS ,
423
424
null , null , null , null , null , null , null );
424
425
int rowCount = cursor .getCount ();
425
426
cursor .close ();
@@ -434,7 +435,7 @@ public Wallpaper getWallpaper(String url) {
434
435
}
435
436
436
437
Wallpaper wallpaper = null ;
437
- Cursor cursor = mDatabase .mSQLiteDatabase .query (TABLE_WALLPAPERS ,
438
+ Cursor cursor = mDatabase .get (). mSQLiteDatabase .query (TABLE_WALLPAPERS ,
438
439
null , KEY_URL +" = ?" , new String []{url }, null , null , null , "1" );
439
440
if (cursor .moveToFirst ()) {
440
441
do {
@@ -474,7 +475,7 @@ public List<Wallpaper> getWallpapers() {
474
475
}
475
476
476
477
List <Wallpaper > wallpapers = new ArrayList <>();
477
- Cursor cursor = mDatabase .mSQLiteDatabase .query (TABLE_WALLPAPERS ,
478
+ Cursor cursor = mDatabase .get (). mSQLiteDatabase .query (TABLE_WALLPAPERS ,
478
479
null , null , null , null , null , KEY_ADDED_ON + " DESC, " +KEY_ID );
479
480
if (cursor .moveToFirst ()) {
480
481
do {
@@ -516,7 +517,7 @@ public Wallpaper getRandomWallpaper() {
516
517
}
517
518
518
519
Wallpaper wallpaper = null ;
519
- Cursor cursor = mDatabase .mSQLiteDatabase .query (TABLE_WALLPAPERS ,
520
+ Cursor cursor = mDatabase .get (). mSQLiteDatabase .query (TABLE_WALLPAPERS ,
520
521
null , null , null , null , null , "RANDOM()" , "1" );
521
522
if (cursor .moveToFirst ()) {
522
523
do {
@@ -544,8 +545,8 @@ public void deleteIconRequestData() {
544
545
return ;
545
546
}
546
547
547
- mDatabase .mSQLiteDatabase .delete ("SQLITE_SEQUENCE" , "NAME = ?" , new String []{TABLE_REQUEST });
548
- mDatabase .mSQLiteDatabase .delete (TABLE_REQUEST , null , null );
548
+ mDatabase .get (). mSQLiteDatabase .delete ("SQLITE_SEQUENCE" , "NAME = ?" , new String []{TABLE_REQUEST });
549
+ mDatabase .get (). mSQLiteDatabase .delete (TABLE_REQUEST , null , null );
549
550
}
550
551
551
552
public void deleteWallpapers (List <Wallpaper > wallpapers ) {
@@ -555,7 +556,7 @@ public void deleteWallpapers(List<Wallpaper> wallpapers) {
555
556
}
556
557
557
558
for (Wallpaper wallpaper : wallpapers ) {
558
- mDatabase .mSQLiteDatabase .delete (TABLE_WALLPAPERS , KEY_URL +" = ?" ,
559
+ mDatabase .get (). mSQLiteDatabase .delete (TABLE_WALLPAPERS , KEY_URL +" = ?" ,
559
560
new String []{wallpaper .getURL ()});
560
561
}
561
562
}
@@ -566,7 +567,7 @@ public void deleteWallpapers() {
566
567
return ;
567
568
}
568
569
569
- mDatabase .mSQLiteDatabase .delete ("SQLITE_SEQUENCE" , "NAME = ?" , new String []{TABLE_WALLPAPERS });
570
- mDatabase .mSQLiteDatabase .delete (TABLE_WALLPAPERS , null , null );
570
+ mDatabase .get (). mSQLiteDatabase .delete ("SQLITE_SEQUENCE" , "NAME = ?" , new String []{TABLE_WALLPAPERS });
571
+ mDatabase .get (). mSQLiteDatabase .delete (TABLE_WALLPAPERS , null , null );
571
572
}
572
573
}
0 commit comments