mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2026-07-31 07:44:24 +02:00
Charts: Use database read lock on DBAccess, enable parallel async tasks
This commit is contained in:
+4
-3
@@ -18,6 +18,7 @@ package nodomain.freeyourgadget.gadgetbridge.activities;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
@@ -94,7 +95,7 @@ public class ActivitySummariesChartFragment extends AbstractActivityChartFragmen
|
||||
this.gbDevice = gbDevice;
|
||||
if (this.view != null) {
|
||||
setupChart();
|
||||
createLocalRefreshTask("getting hr and activity", getActivity()).execute();
|
||||
createLocalRefreshTask("getting hr and activity", getActivity()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,7 +118,7 @@ public class ActivitySummariesChartFragment extends AbstractActivityChartFragmen
|
||||
this.view = view;
|
||||
if (this.trackFile != null || this.gbDevice != null) {
|
||||
setupChart();
|
||||
createLocalRefreshTask("getting hr and activity", getActivity()).execute();
|
||||
createLocalRefreshTask("getting hr and activity", getActivity()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -218,7 +219,7 @@ public class ActivitySummariesChartFragment extends AbstractActivityChartFragmen
|
||||
public class RefreshTask extends DBAccess {
|
||||
|
||||
public RefreshTask(String task, Context context) {
|
||||
super(task, context);
|
||||
super(task, context, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+4
-3
@@ -17,6 +17,7 @@
|
||||
package nodomain.freeyourgadget.gadgetbridge.activities;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
@@ -82,7 +83,7 @@ public class BatteryInfoChartFragment extends AbstractGBFragment {
|
||||
this.gbDevice = gbDevice;
|
||||
this.batteryIndex = batteryIndex;
|
||||
try {
|
||||
createRefreshTask("Visualizing data", getActivity()).execute();
|
||||
createRefreshTask("Visualizing data", getActivity()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
} catch (Exception e) {
|
||||
LOG.debug("Unable to fill charts data right now:", e);
|
||||
}
|
||||
@@ -136,7 +137,7 @@ public class BatteryInfoChartFragment extends AbstractGBFragment {
|
||||
mChart = rootView.findViewById(R.id.activitysleepchart);
|
||||
if (this.gbDevice != null) {
|
||||
setupChart();
|
||||
createRefreshTask("Visualizing data", getActivity()).execute();
|
||||
createRefreshTask("Visualizing data", getActivity()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
return rootView;
|
||||
}
|
||||
@@ -213,7 +214,7 @@ public class BatteryInfoChartFragment extends AbstractGBFragment {
|
||||
public class RefreshTask extends DBAccess {
|
||||
|
||||
public RefreshTask(String task, Context context) {
|
||||
super(task, context);
|
||||
super(task, context, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+4
-3
@@ -23,6 +23,7 @@ import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -77,7 +78,7 @@ public class DevicesFragment extends Fragment {
|
||||
case DeviceManager.ACTION_DEVICES_CHANGED:
|
||||
case GBApplication.ACTION_NEW_DATA:
|
||||
if (action.equals(GBApplication.ACTION_NEW_DATA)) {
|
||||
createRefreshTask("get activity data", requireContext(), device).execute();
|
||||
createRefreshTask("get activity data", requireContext(), device).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
if (device != null) {
|
||||
// Refresh only this device
|
||||
@@ -129,7 +130,7 @@ public class DevicesFragment extends Fragment {
|
||||
@Override
|
||||
public void run() {
|
||||
if (getContext() != null) {
|
||||
createRefreshTask("get activity data", getContext(), null).execute();
|
||||
createRefreshTask("get activity data", getContext(), null).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -242,7 +243,7 @@ public class DevicesFragment extends Fragment {
|
||||
private final GBDevice device;
|
||||
|
||||
public RefreshTask(final String task, final Context context, final GBDevice device) {
|
||||
super(task, context);
|
||||
super(task, context, false);
|
||||
this.device = device;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -343,7 +343,7 @@ public abstract class AbstractChartFragment<D extends ChartsData> extends Abstra
|
||||
if (refreshTask != null && refreshTask.getStatus() != AsyncTask.Status.FINISHED) {
|
||||
refreshTask.cancel(true);
|
||||
}
|
||||
refreshTask = createRefreshTask("Visualizing data", getActivity()).execute();
|
||||
refreshTask = createRefreshTask("Visualizing data", getActivity()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -357,7 +357,7 @@ public abstract class AbstractChartFragment<D extends ChartsData> extends Abstra
|
||||
private D chartsData;
|
||||
|
||||
public RefreshTask(final String task, final Context context) {
|
||||
super(task, context);
|
||||
super(task, context, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+3
-2
@@ -18,6 +18,7 @@ package nodomain.freeyourgadget.gadgetbridge.activities.charts;
|
||||
|
||||
import android.app.DatePickerDialog;
|
||||
import android.content.Context;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
@@ -161,7 +162,7 @@ public class ActivityListingDashboard extends MaterialDialogFragment {
|
||||
battery_status_time_span_text.setText(text);
|
||||
battery_status_date_from_text.setText(DateTimeUtils.formatDate(new Date(timeFrom * 1000L)));
|
||||
battery_status_date_to_text.setText(DateTimeUtils.formatDate(new Date(timeTo * 1000L)));
|
||||
createRefreshTask("Visualizing step sessions", getActivity()).execute();
|
||||
createRefreshTask("Visualizing step sessions", getActivity()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -301,7 +302,7 @@ public class ActivityListingDashboard extends MaterialDialogFragment {
|
||||
public class RefreshTask extends DBAccess {
|
||||
|
||||
public RefreshTask(String task, Context context) {
|
||||
super(task, context);
|
||||
super(task, context, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+4
-3
@@ -22,6 +22,7 @@ import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcel;
|
||||
@@ -142,8 +143,8 @@ public class StepStreaksDashboard extends MaterialDialogFragment {
|
||||
populateData();
|
||||
}
|
||||
}
|
||||
createTaskCalculateLatestStepsStreak("Visualizing data current", getActivity(), PERIOD_CURRENT).execute();
|
||||
createTaskCalculateLatestStepsStreak("Visualizing data maximum", getActivity(), PERIOD_TOTALS).execute();
|
||||
createTaskCalculateLatestStepsStreak("Visualizing data current", getActivity(), PERIOD_CURRENT).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
createTaskCalculateLatestStepsStreak("Visualizing data maximum", getActivity(), PERIOD_TOTALS).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
|
||||
void indicate_progress(boolean inProgress) {
|
||||
@@ -242,7 +243,7 @@ public class StepStreaksDashboard extends MaterialDialogFragment {
|
||||
String period;
|
||||
|
||||
public TaskCalculateLatestStepsStreak(String taskName, Context context, String period) {
|
||||
super(taskName, context);
|
||||
super(taskName, context, false);
|
||||
this.period = period;
|
||||
}
|
||||
|
||||
|
||||
@@ -35,10 +35,12 @@ public abstract class DBAccess extends AsyncTask {
|
||||
private final String mTask;
|
||||
private final Context mContext;
|
||||
private Exception mError;
|
||||
private final boolean mForWrite;
|
||||
|
||||
public DBAccess(String task, Context context) {
|
||||
public DBAccess(String task, Context context, boolean forWrite) {
|
||||
mTask = task;
|
||||
mContext = context;
|
||||
mForWrite = forWrite;
|
||||
}
|
||||
|
||||
public Context getContext() {
|
||||
@@ -49,7 +51,7 @@ public abstract class DBAccess extends AsyncTask {
|
||||
|
||||
@Override
|
||||
protected Object doInBackground(Object[] params) {
|
||||
try (DBHandler db = GBApplication.acquireDB()) {
|
||||
try (DBHandler db = (mForWrite ? GBApplication.acquireDB() : GBApplication.acquireDbReadOnly())) {
|
||||
doInBackground(db);
|
||||
} catch (Exception e) {
|
||||
LOG.error("Error during DBAccess for {}", mTask, e);
|
||||
|
||||
+1
-1
@@ -144,7 +144,7 @@ public class GBDeviceEventBatteryInfo extends GBDeviceEvent {
|
||||
GBDevice gbDevice;
|
||||
|
||||
public StoreDataTask(String task, Context context, GBDevice device, GBDeviceEventBatteryInfo deviceEvent) {
|
||||
super(task, context);
|
||||
super(task, context, true);
|
||||
this.deviceEvent = deviceEvent;
|
||||
this.gbDevice = device;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user