1919import com .dm .material .dashboard .candybar .utils .LogUtil ;
2020import com .nostra13 .universalimageloader .core .assist .ImageSize ;
2121
22+ import java .lang .ref .WeakReference ;
2223import java .util .ArrayList ;
2324import java .util .List ;
2425
@@ -70,14 +71,14 @@ public class Database extends SQLiteOpenHelper {
7071
7172 private final Context mContext ;
7273
73- private static Database mDatabase ;
74+ private static WeakReference < Database > mDatabase ;
7475 private SQLiteDatabase mSQLiteDatabase ;
7576
7677 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 ) );
7980 }
80- return mDatabase ;
81+ return mDatabase . get () ;
8182 }
8283
8384 private Database (Context context ) {
@@ -179,20 +180,20 @@ private void resetDatabase(SQLiteDatabase db, int oldVersion) {
179180
180181 public boolean openDatabase () {
181182 try {
182- if (mDatabase == null ) {
183+ if (mDatabase == null || mDatabase . get () == null ) {
183184 LogUtil .e ("Database error: openDatabase() database instance is null" );
184185 return false ;
185186 }
186187
187- if (mDatabase .mSQLiteDatabase == null ) {
188- mDatabase .mSQLiteDatabase = mDatabase .getWritableDatabase ();
188+ if (mDatabase .get (). mSQLiteDatabase == null ) {
189+ mDatabase .get (). mSQLiteDatabase = mDatabase . get () .getWritableDatabase ();
189190 }
190191
191- if (!mDatabase .mSQLiteDatabase .isOpen ()) {
192+ if (!mDatabase .get (). mSQLiteDatabase .isOpen ()) {
192193 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 ();
194195 }
195- return mDatabase .mSQLiteDatabase .isOpen ();
196+ return mDatabase .get (). mSQLiteDatabase .isOpen ();
196197 } catch (SQLiteException | NullPointerException e ) {
197198 LogUtil .e (Log .getStackTraceString (e ));
198199 return false ;
@@ -201,16 +202,16 @@ public boolean openDatabase() {
201202
202203 public boolean closeDatabase () {
203204 try {
204- if (mDatabase == null ) {
205+ if (mDatabase == null || mDatabase . get () == null ) {
205206 LogUtil .e ("Database error: closeDatabase() database instance is null" );
206207 return false ;
207208 }
208209
209- if (mDatabase .mSQLiteDatabase == null ) {
210+ if (mDatabase .get (). mSQLiteDatabase == null ) {
210211 LogUtil .e ("Database error: trying to close database which is not opened" );
211212 return false ;
212213 }
213- mDatabase .mSQLiteDatabase .close ();
214+ mDatabase .get (). mSQLiteDatabase .close ();
214215 return true ;
215216 } catch (SQLiteException | NullPointerException e ) {
216217 LogUtil .e (Log .getStackTraceString (e ));
@@ -226,7 +227,7 @@ public void addRequest(@Nullable SQLiteDatabase db, Request request) {
226227 return ;
227228 }
228229
229- database = mDatabase .mSQLiteDatabase ;
230+ database = mDatabase .get (). mSQLiteDatabase ;
230231 }
231232
232233 ContentValues values = new ContentValues ();
@@ -246,7 +247,7 @@ public boolean isRequested(String activity) {
246247 return false ;
247248 }
248249
249- Cursor cursor = mDatabase .mSQLiteDatabase .query (TABLE_REQUEST , null , KEY_ACTIVITY + " = ?" ,
250+ Cursor cursor = mDatabase .get (). mSQLiteDatabase .query (TABLE_REQUEST , null , KEY_ACTIVITY + " = ?" ,
250251 new String []{activity }, null , null , null , null );
251252 int rowCount = cursor .getCount ();
252253 cursor .close ();
@@ -261,7 +262,7 @@ private List<Request> getRequestedApps(@Nullable SQLiteDatabase db) {
261262 return new ArrayList <>();
262263 }
263264
264- database = mDatabase .mSQLiteDatabase ;
265+ database = mDatabase .get (). mSQLiteDatabase ;
265266 }
266267
267268 List <Request > requests = new ArrayList <>();
@@ -290,7 +291,7 @@ public void addPremiumRequest(@Nullable SQLiteDatabase db, Request request) {
290291 return ;
291292 }
292293
293- database = mDatabase .mSQLiteDatabase ;
294+ database = mDatabase .get (). mSQLiteDatabase ;
294295 }
295296
296297 ContentValues values = new ContentValues ();
@@ -314,7 +315,7 @@ public List<Request> getPremiumRequest(@Nullable SQLiteDatabase db) {
314315 return new ArrayList <>();
315316 }
316317
317- database = mDatabase .mSQLiteDatabase ;
318+ database = mDatabase .get (). mSQLiteDatabase ;
318319 }
319320
320321 List <Request > requests = new ArrayList <>();
@@ -344,8 +345,8 @@ public void addWallpapers(List<?> list) {
344345
345346 String query = "INSERT OR IGNORE INTO " +TABLE_WALLPAPERS + " (" +KEY_NAME + "," +KEY_AUTHOR + "," +KEY_URL + ","
346347 +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 ();
349350
350351 for (int i = 0 ; i < list .size (); i ++) {
351352 statement .clearBindings ();
@@ -377,8 +378,8 @@ public void addWallpapers(List<?> list) {
377378 }
378379 }
379380 }
380- mDatabase .mSQLiteDatabase .setTransactionSuccessful ();
381- mDatabase .mSQLiteDatabase .endTransaction ();
381+ mDatabase .get (). mSQLiteDatabase .setTransactionSuccessful ();
382+ mDatabase .get (). mSQLiteDatabase .endTransaction ();
382383 }
383384
384385 public void updateWallpaper (Wallpaper wallpaper ) {
@@ -408,7 +409,7 @@ public void updateWallpaper(Wallpaper wallpaper) {
408409 }
409410
410411 if (values .size () > 0 ) {
411- mDatabase .mSQLiteDatabase .update (TABLE_WALLPAPERS ,
412+ mDatabase .get (). mSQLiteDatabase .update (TABLE_WALLPAPERS ,
412413 values , KEY_URL +" = ?" , new String []{wallpaper .getURL ()});
413414 }
414415 }
@@ -419,7 +420,7 @@ public int getWallpapersCount() {
419420 return 0 ;
420421 }
421422
422- Cursor cursor = mDatabase .mSQLiteDatabase .query (TABLE_WALLPAPERS ,
423+ Cursor cursor = mDatabase .get (). mSQLiteDatabase .query (TABLE_WALLPAPERS ,
423424 null , null , null , null , null , null , null );
424425 int rowCount = cursor .getCount ();
425426 cursor .close ();
@@ -434,7 +435,7 @@ public Wallpaper getWallpaper(String url) {
434435 }
435436
436437 Wallpaper wallpaper = null ;
437- Cursor cursor = mDatabase .mSQLiteDatabase .query (TABLE_WALLPAPERS ,
438+ Cursor cursor = mDatabase .get (). mSQLiteDatabase .query (TABLE_WALLPAPERS ,
438439 null , KEY_URL +" = ?" , new String []{url }, null , null , null , "1" );
439440 if (cursor .moveToFirst ()) {
440441 do {
@@ -474,7 +475,7 @@ public List<Wallpaper> getWallpapers() {
474475 }
475476
476477 List <Wallpaper > wallpapers = new ArrayList <>();
477- Cursor cursor = mDatabase .mSQLiteDatabase .query (TABLE_WALLPAPERS ,
478+ Cursor cursor = mDatabase .get (). mSQLiteDatabase .query (TABLE_WALLPAPERS ,
478479 null , null , null , null , null , KEY_ADDED_ON + " DESC, " +KEY_ID );
479480 if (cursor .moveToFirst ()) {
480481 do {
@@ -516,7 +517,7 @@ public Wallpaper getRandomWallpaper() {
516517 }
517518
518519 Wallpaper wallpaper = null ;
519- Cursor cursor = mDatabase .mSQLiteDatabase .query (TABLE_WALLPAPERS ,
520+ Cursor cursor = mDatabase .get (). mSQLiteDatabase .query (TABLE_WALLPAPERS ,
520521 null , null , null , null , null , "RANDOM()" , "1" );
521522 if (cursor .moveToFirst ()) {
522523 do {
@@ -544,8 +545,8 @@ public void deleteIconRequestData() {
544545 return ;
545546 }
546547
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 );
549550 }
550551
551552 public void deleteWallpapers (List <Wallpaper > wallpapers ) {
@@ -555,7 +556,7 @@ public void deleteWallpapers(List<Wallpaper> wallpapers) {
555556 }
556557
557558 for (Wallpaper wallpaper : wallpapers ) {
558- mDatabase .mSQLiteDatabase .delete (TABLE_WALLPAPERS , KEY_URL +" = ?" ,
559+ mDatabase .get (). mSQLiteDatabase .delete (TABLE_WALLPAPERS , KEY_URL +" = ?" ,
559560 new String []{wallpaper .getURL ()});
560561 }
561562 }
@@ -566,7 +567,7 @@ public void deleteWallpapers() {
566567 return ;
567568 }
568569
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 );
571572 }
572573}
0 commit comments