diff --git a/app/build.gradle b/app/build.gradle
index 862c53a044..7e07656d7f 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -163,7 +163,6 @@ android {
buildConfigField "String", "GPA_URI", localProperties.getProperty("gpa.uri", "\"\"")
buildConfigField "String", "INFO_URI", localProperties.getProperty("info.uri", "\"\"")
buildConfigField "String", "DEV_DOMAIN", localProperties.getProperty("dev.domain", "\"\"")
- buildConfigField "String", "VT_APIKEY", localProperties.getProperty("vt.apikey", "\"\"")
buildConfigField "String", "FDROID", "\"https://f-droid.org/packages/%s/\""
}
fdroid {
@@ -180,7 +179,6 @@ android {
buildConfigField "String", "GPA_URI", "\"\""
buildConfigField "String", "INFO_URI", "\"\""
buildConfigField "String", "DEV_DOMAIN", "\"\""
- buildConfigField "String", "VT_APIKEY", "\"\""
buildConfigField "String", "FDROID", "\"https://f-droid.org/packages/%s/\""
}
play {
@@ -198,7 +196,6 @@ android {
buildConfigField "String", "GPA_URI", "\"\""
buildConfigField "String", "INFO_URI", "\"\""
buildConfigField "String", "DEV_DOMAIN", "\"\""
- buildConfigField "String", "VT_APIKEY", "\"\""
buildConfigField "String", "FDROID", "\"\""
}
amazon {
@@ -216,7 +213,6 @@ android {
buildConfigField "String", "GPA_URI", "\"\""
buildConfigField "String", "INFO_URI", "\"\""
buildConfigField "String", "DEV_DOMAIN", "\"\""
- buildConfigField "String", "VT_APIKEY", "\"\""
buildConfigField "String", "FDROID", "\"\""
}
}
diff --git a/app/src/extra/java/eu/faircode/email/Check.java b/app/src/extra/java/eu/faircode/email/Check.java
index d2254def28..aa42684b74 100644
--- a/app/src/extra/java/eu/faircode/email/Check.java
+++ b/app/src/extra/java/eu/faircode/email/Check.java
@@ -20,12 +20,14 @@ package eu.faircode.email;
*/
import android.content.Context;
+import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.LifecycleOwner;
+import androidx.preference.PreferenceManager;
import org.json.JSONObject;
@@ -60,7 +62,10 @@ public class Check {
hash = Helper.getHash(is, "SHA-256");
}
- if (!TextUtils.isEmpty(BuildConfig.VT_APIKEY)) {
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ String apikey = prefs.getString("vt_apikey", null);
+
+ if (!TextUtils.isEmpty(apikey)) {
//hash = "51e31f76c8d70eaeda1aba0e21fc50f44d261b81416c4338ac3f71694a6648b3";
URL url = new URL(URI_VT_ENDPOINT + "api/v3/files/" + hash);
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
@@ -68,7 +73,7 @@ public class Check {
connection.setReadTimeout(VT_TIMEOUT * 1000);
connection.setConnectTimeout(VT_TIMEOUT * 1000);
ConnectionHelper.setUserAgent(context, connection);
- connection.setRequestProperty("x-apikey", BuildConfig.VT_APIKEY);
+ connection.setRequestProperty("x-apikey", apikey);
connection.connect();
try {
diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java
index 8e766083a1..d5e65799c6 100644
--- a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java
+++ b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java
@@ -43,8 +43,11 @@ import android.os.Bundle;
import android.os.Debug;
import android.os.Environment;
import android.provider.Settings;
+import android.text.Editable;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
+import android.text.TextUtils;
+import android.text.TextWatcher;
import android.text.style.RelativeSizeSpan;
import android.text.style.StyleSpan;
import android.util.Pair;
@@ -59,6 +62,7 @@ import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
+import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.Spinner;
@@ -120,6 +124,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
private ImageButton ibDeepL;
private SwitchCompat swVirusTotal;
private TextView tvVirusTotalPrivacy;
+ private EditText etVirusTotal;
private SwitchCompat swUpdates;
private ImageButton ibChannelUpdated;
private SwitchCompat swCheckWeekly;
@@ -220,7 +225,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
private final static String[] RESET_OPTIONS = new String[]{
"sort_answers", "shortcuts", "fts",
"classification", "class_min_probability", "class_min_difference",
- "language", "lt_enabled", "deepl_enabled", "vt_enabled",
+ "language", "lt_enabled", "deepl_enabled", "vt_enabled", "vt_apikey",
"updates", "weekly", "show_changelog",
"crash_reports", "cleanup_attachments",
"watchdog", "experiments", "main_log", "protocol", "log_level", "debug", "leak_canary", "test1",
@@ -309,6 +314,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
ibDeepL = view.findViewById(R.id.ibDeepL);
swVirusTotal = view.findViewById(R.id.swVirusTotal);
tvVirusTotalPrivacy = view.findViewById(R.id.tvVirusTotalPrivacy);
+ etVirusTotal = view.findViewById(R.id.etVirusTotal);
swUpdates = view.findViewById(R.id.swUpdates);
ibChannelUpdated = view.findViewById(R.id.ibChannelUpdated);
swCheckWeekly = view.findViewById(R.id.swWeekly);
@@ -653,6 +659,27 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
}
});
+ etVirusTotal.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+ // Do nothing
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ // Do nothing
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ String apikey = s.toString().trim();
+ if (TextUtils.isEmpty(apikey))
+ prefs.edit().remove("vt_apikey").apply();
+ else
+ prefs.edit().putString("vt_apikey", apikey).apply();
+ }
+ });
+
swUpdates.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
@@ -1670,6 +1697,9 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
if ("last_cleanup".equals(key))
setLastCleanup(prefs.getLong(key, -1));
+ if ("vt_apikey".equals(key))
+ return;
+
setOptions();
}
@@ -1813,6 +1843,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
swLanguageTool.setChecked(prefs.getBoolean("lt_enabled", false));
swDeepL.setChecked(prefs.getBoolean("deepl_enabled", false));
swVirusTotal.setChecked(prefs.getBoolean("vt_enabled", false));
+ etVirusTotal.setText(prefs.getString("vt_apikey", null));
swUpdates.setChecked(prefs.getBoolean("updates", true));
swCheckWeekly.setChecked(prefs.getBoolean("weekly", Helper.hasPlayStore(getContext())));
swCheckWeekly.setEnabled(swUpdates.isChecked());
diff --git a/app/src/main/res/layout/fragment_options_misc.xml b/app/src/main/res/layout/fragment_options_misc.xml
index a3f2197f4a..31f382960f 100644
--- a/app/src/main/res/layout/fragment_options_misc.xml
+++ b/app/src/main/res/layout/fragment_options_misc.xml
@@ -416,6 +416,18 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/swVirusTotal" />
+
+
+ app:constraint_referenced_ids="swVirusTotal,tvVirusTotalPrivacy,etVirusTotal" />