Skip to content
This repository was archived by the owner on Jan 14, 2025. It is now read-only.

Commit f5b8b91

Browse files
Improvements
- Code cleanup - Fixed memory leak
1 parent 8bdbc45 commit f5b8b91

File tree

9 files changed

+165
-143
lines changed

9 files changed

+165
-143
lines changed

Diff for: core/src/main/java/com/dm/material/dashboard/candybar/databases/Database.java

+33-32
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.dm.material.dashboard.candybar.utils.LogUtil;
2020
import com.nostra13.universalimageloader.core.assist.ImageSize;
2121

22+
import java.lang.ref.WeakReference;
2223
import java.util.ArrayList;
2324
import 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
}

Diff for: core/src/main/java/com/dm/material/dashboard/candybar/fragments/dialog/InAppBillingFragment.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
import com.dm.material.dashboard.candybar.utils.LogUtil;
2929
import com.dm.material.dashboard.candybar.utils.listeners.InAppBillingListener;
3030

31+
import java.lang.ref.WeakReference;
32+
3133
/*
3234
* CandyBar - Material Dashboard
3335
*
@@ -59,7 +61,7 @@ public class InAppBillingFragment extends DialogFragment {
5961
private InAppBillingAdapter mAdapter;
6062
private AsyncTask<Void, Void, Boolean> mLoadInAppProducts;
6163

62-
private static BillingProcessor mBillingProcessor;
64+
private static WeakReference<BillingProcessor> mBillingProcessor;
6365

6466
private static final String TYPE = "type";
6567
private static final String KEY = "key";
@@ -83,7 +85,7 @@ private static InAppBillingFragment newInstance(int type, String key, String[] p
8385
public static void showInAppBillingDialog(@NonNull FragmentManager fm, BillingProcessor billingProcessor,
8486
int type, @NonNull String key, @NonNull String[] productId,
8587
int[] productCount) {
86-
mBillingProcessor = billingProcessor;
88+
mBillingProcessor = new WeakReference<>(billingProcessor);
8789
FragmentTransaction ft = fm.beginTransaction();
8890
Fragment prev = fm.findFragmentByTag(TAG);
8991
if (prev != null) {
@@ -193,7 +195,7 @@ protected Boolean doInBackground(Void... voids) {
193195
}
194196

195197
for (int i = 0; i < mProductsId.length; i++) {
196-
SkuDetails product = mBillingProcessor
198+
SkuDetails product = mBillingProcessor.get()
197199
.getPurchaseListingDetails(mProductsId[i]);
198200
if (product != null) {
199201
InAppBilling inAppBilling;

Diff for: core/src/main/java/com/dm/material/dashboard/candybar/tasks/IconRequestBuilderTask.java

+19-16
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.dm.material.dashboard.candybar.utils.listeners.RequestListener;
2525

2626
import java.io.File;
27+
import java.lang.ref.WeakReference;
2728
import java.util.concurrent.Executor;
2829

2930
/*
@@ -46,17 +47,17 @@
4647

4748
public class IconRequestBuilderTask extends AsyncTask<Void, Void, Boolean> {
4849

49-
private Context mContext;
50-
private IconRequestBuilderCallback mCallback;
50+
private WeakReference<Context> mContext;
51+
private WeakReference<IconRequestBuilderCallback> mCallback;
5152
private String mEmailBody;
5253
private LogUtil.Error mError;
5354

5455
private IconRequestBuilderTask(Context context) {
55-
mContext = context;
56+
mContext = new WeakReference<>(context);
5657
}
5758

5859
public IconRequestBuilderTask callback(IconRequestBuilderCallback callback) {
59-
mCallback = callback;
60+
mCallback = new WeakReference<>(callback);
6061
return this;
6162
}
6263

@@ -93,9 +94,9 @@ protected Boolean doInBackground(Void... voids) {
9394
}
9495

9596
StringBuilder stringBuilder = new StringBuilder();
96-
stringBuilder.append(DeviceHelper.getDeviceInfo(mContext));
97+
stringBuilder.append(DeviceHelper.getDeviceInfo(mContext.get()));
9798

98-
if (Preferences.get(mContext).isPremiumRequest()) {
99+
if (Preferences.get(mContext.get()).isPremiumRequest()) {
99100
if (CandyBarApplication.sRequestProperty.getOrderId() != null) {
100101
stringBuilder.append("Order Id: ")
101102
.append(CandyBarApplication.sRequestProperty.getOrderId());
@@ -109,16 +110,16 @@ protected Boolean doInBackground(Void... voids) {
109110

110111
for (int i = 0; i < RequestFragment.sSelectedRequests.size(); i++) {
111112
Request request = CandyBarMainActivity.sMissedApps.get(RequestFragment.sSelectedRequests.get(i));
112-
Database.get(mContext).addRequest(null, request);
113+
Database.get(mContext.get()).addRequest(null, request);
113114

114-
if (Preferences.get(mContext).isPremiumRequest()) {
115+
if (Preferences.get(mContext.get()).isPremiumRequest()) {
115116
Request premiumRequest = Request.Builder()
116117
.name(request.getName())
117118
.activity(request.getActivity())
118119
.productId(CandyBarApplication.sRequestProperty.getProductId())
119120
.orderId(CandyBarApplication.sRequestProperty.getOrderId())
120121
.build();
121-
Database.get(mContext).addPremiumRequest(null, premiumRequest);
122+
Database.get(mContext.get()).addPremiumRequest(null, premiumRequest);
122123
}
123124

124125
if (CandyBarApplication.getConfiguration().isIncludeIconRequestToEmailBody()) {
@@ -149,18 +150,20 @@ protected void onPostExecute(Boolean aBoolean) {
149150
super.onPostExecute(aBoolean);
150151
if (aBoolean) {
151152
try {
152-
if (mCallback != null) mCallback.onFinished();
153+
if (mCallback != null && mCallback.get() != null)
154+
mCallback.get().onFinished();
153155

154156
RequestListener listener = (RequestListener) mContext;
155-
listener.onRequestBuilt(getIntent(CandyBarApplication.sRequestProperty.getComponentName(), mEmailBody),
157+
listener.onRequestBuilt(getIntent(CandyBarApplication.sRequestProperty
158+
.getComponentName(), mEmailBody),
156159
IntentChooserFragment.ICON_REQUEST);
157160
} catch (Exception e) {
158161
LogUtil.e(Log.getStackTraceString(e));
159162
}
160163
} else {
161164
if (mError != null) {
162165
LogUtil.e(mError.getMessage());
163-
mError.showToast(mContext);
166+
mError.showToast(mContext.get());
164167
}
165168
}
166169
}
@@ -192,19 +195,19 @@ private Intent addIntentExtra(@NonNull Intent intent, String emailBody) {
192195
if (CandyBarApplication.sZipPath != null) {
193196
File zip = new File(CandyBarApplication.sZipPath);
194197
if (zip.exists()) {
195-
Uri uri = FileHelper.getUriFromFile(mContext, mContext.getPackageName(), zip);
198+
Uri uri = FileHelper.getUriFromFile(mContext.get(), mContext.get().getPackageName(), zip);
196199
if (uri == null) uri = Uri.fromFile(zip);
197200
intent.putExtra(Intent.EXTRA_STREAM, uri);
198201
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
199202
}
200203
}
201204

202-
String subject = Preferences.get(mContext).isPremiumRequest() ?
205+
String subject = Preferences.get(mContext.get()).isPremiumRequest() ?
203206
"Premium Icon Request " : "Icon Request ";
204-
subject += mContext.getResources().getString(R.string.app_name);
207+
subject += mContext.get().getResources().getString(R.string.app_name);
205208

206209
intent.putExtra(Intent.EXTRA_EMAIL,
207-
new String[]{mContext.getResources().getString(R.string.dev_email)});
210+
new String[]{mContext.get().getResources().getString(R.string.dev_email)});
208211
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
209212
intent.putExtra(Intent.EXTRA_TEXT, emailBody);
210213
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |

0 commit comments

Comments
 (0)