diff --git a/app/src/main/java/eu/faircode/email/DB.java b/app/src/main/java/eu/faircode/email/DB.java
index 062dea1604..c7e3c29f0d 100644
--- a/app/src/main/java/eu/faircode/email/DB.java
+++ b/app/src/main/java/eu/faircode/email/DB.java
@@ -106,8 +106,6 @@ public abstract class DB extends RoomDatabase {
public abstract DaoLog log();
private static DB sInstance;
- private static final ExecutorService executor =
- Helper.getBackgroundExecutor(2, "query"); // AndroidX default thread count: 4
private static final String DB_NAME = "fairemail";
private static final int DB_CHECKPOINT = 1000; // requery/sqlite-android default
@@ -261,6 +259,11 @@ public abstract class DB extends RoomDatabase {
Log.e(ex);
}
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ int threads = prefs.getInt("query_threads", 4); // AndroidX default thread count: 4
+ Log.i("Query threads=" + threads);
+ ExecutorService executor = Helper.getBackgroundExecutor(threads, "query");
+
return Room
.databaseBuilder(context, DB.class, DB_NAME)
.openHelperFactory(new RequerySQLiteOpenHelperFactory())
diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java
index e2a21f944e..b8cd353f6d 100644
--- a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java
+++ b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java
@@ -76,6 +76,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
private SwitchCompat swUpdates;
private SwitchCompat swExperiments;
private TextView tvExperimentsHint;
+ private SwitchCompat swQueries;
private SwitchCompat swCrashReports;
private TextView tvUuid;
private SwitchCompat swDebug;
@@ -98,7 +99,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
private final static String[] RESET_OPTIONS = new String[]{
"shortcuts", "fts", "english", "watchdog", "updates",
- "experiments", "crash_reports", "debug", "auth_sasl", "cleanup_attachments"
+ "experiments", "query_threads", "crash_reports", "debug", "auth_sasl", "cleanup_attachments"
};
private final static String[] RESET_QUESTIONS = new String[]{
@@ -131,6 +132,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
swUpdates = view.findViewById(R.id.swUpdates);
swExperiments = view.findViewById(R.id.swExperiments);
tvExperimentsHint = view.findViewById(R.id.tvExperimentsHint);
+ swQueries = view.findViewById(R.id.swQueries);
swCrashReports = view.findViewById(R.id.swCrashReports);
tvUuid = view.findViewById(R.id.tvUuid);
swDebug = view.findViewById(R.id.swDebug);
@@ -259,6 +261,14 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
}
});
+ swQueries.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
+ prefs.edit().putInt("query_threads", checked ? 2 : 4).commit(); // apply won't work here
+ restart();
+ }
+ });
+
swCrashReports.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
@@ -536,6 +546,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
Helper.isPlayStoreInstall() || !Helper.hasValidFingerprint(getContext())
? View.GONE : View.VISIBLE);
swExperiments.setChecked(prefs.getBoolean("experiments", false));
+ swQueries.setChecked(prefs.getInt("query_threads", 4) < 4);
swCrashReports.setChecked(prefs.getBoolean("crash_reports", false));
tvUuid.setText(prefs.getString("uuid", null));
swDebug.setChecked(prefs.getBoolean("debug", false));
diff --git a/app/src/main/res/layout/fragment_options_misc.xml b/app/src/main/res/layout/fragment_options_misc.xml
index 83351e8966..5ad0f1980d 100644
--- a/app/src/main/res/layout/fragment_options_misc.xml
+++ b/app/src/main/res/layout/fragment_options_misc.xml
@@ -183,6 +183,29 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/swExperiments" />
+
+
+
+
Automatically optimize
Check for updates
Try experimental features
+ Limit parallel database reads
Send error reports
Debug mode
Delete attachments of old messages