More small improvements

- Don't try to load the database multiple times at once
- Add the signature count to the notification
- Format numbers for the locale
- Improve check for when no databases are available
This commit is contained in:
Tad 2021-02-22 23:28:07 -05:00
parent ebdfc0c737
commit 28f710d5ad
9 changed files with 32 additions and 22 deletions

Binary file not shown.

View file

@ -6,7 +6,7 @@ android {
applicationId "us.spotco.malwarescanner"
minSdkVersion 16
targetSdkVersion 30
versionCode 57
versionCode 58
versionName "2.15"
resConfigs "en", "de", "fr"
}

View file

@ -47,6 +47,7 @@ class Database {
private static File databasePath = null;
private static ThreadPoolExecutor threadPoolExecutor = null;
private static boolean databaseFullyLoaded = false;
private static boolean databaseCurrentlyLoading = false;
public final static HashSet<SignatureDatabase> signatureDatabases = new HashSet<>();
public final static String baseURL = "https://divested.dev/MalwareScannerSignatures/";
@ -64,11 +65,11 @@ class Database {
}
public static boolean areDatabasesAvailable() {
return databasePath != null && databasePath.listFiles().length > 0;
return databasePath != null && databasePath.listFiles().length > 0 && signatureDatabases.size() > 0;
}
public static boolean isDatabaseLoaded() {
return databaseFullyLoaded && signaturesMD5.size() > 0 && signaturesSHA1.size() > 0 && signaturesSHA256.size() > 0;
return areDatabasesAvailable() && databaseFullyLoaded && signaturesMD5.size() > 0 && signaturesSHA1.size() > 0 && signaturesSHA256.size() > 0;
}
public static int getSignatureCount() {
@ -112,9 +113,10 @@ class Database {
}
}
public static void loadDatabase(Context context, boolean ignoreifLoaded, HashSet<SignatureDatabase> signatureDatabases) {
if (!isDatabaseLoaded() || !ignoreifLoaded && isDatabaseLoaded()) {
public static void loadDatabase(Context context, boolean forceReload, HashSet<SignatureDatabase> signatureDatabases) {
if ((!isDatabaseLoaded() || forceReload) && !databaseCurrentlyLoading) {
databaseFullyLoaded = false;
databaseCurrentlyLoading = true;
initDatabase(context);
signaturesMD5.clear();
signaturesSHA1.clear();
@ -162,6 +164,7 @@ class Database {
signaturesSHA256.put("6a0b4866f143c32e651662cebf7f380d27b0db809db3b6a34cf34c7436ab6bbf".substring(0, Utils.MAX_HASH_LENGTH), "Hypatia-Test-Signature");
System.gc();
databaseFullyLoaded = true;
databaseCurrentlyLoading = false;
}
}

View file

@ -139,7 +139,7 @@ public class MainActivity extends AppCompatActivity {
}
private void selectDatabases() {
final String[] databases = {"ClamAV: Android Only (GPL-2.0)", "ClamAV: Main (GPL-2.0)", "ClamAV: Daily [LARGE] (GPL-2.0)", "ESET (BSD 2-Clause)", "Extra (unused)"};
final String[] databases = {"ClamAV: Android Only (GPL-2.0)", "ClamAV: Main (GPL-2.0)", "ClamAV: Daily [MASSIVE] (GPL-2.0)", "ESET (BSD 2-Clause)", "Extra (unused)"};
final boolean[] databaseDefaults = {
prefs.getBoolean("SIGNATURES_CLAMAV-ANDROID", true),
prefs.getBoolean("SIGNATURES_CLAMAV-MAIN", false),

View file

@ -35,6 +35,7 @@ import java.io.FileInputStream;
import java.io.InputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.text.NumberFormat;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
@ -107,21 +108,25 @@ class MalwareScanner extends AsyncTask<Set<File>, Object, String> {
fileHashesSHA1.clear();
fileHashesSHA256.clear();
publishProgress("\t" + context.getString(R.string.main_files_pending_scan, filesToScan[0].size() + "") + "\n", true);
publishProgress("\t" + context.getString(R.string.main_files_pending_scan, NumberFormat.getInstance().format(filesToScan[0].size()) + "") + "\n", true);
Database.loadDatabase(context, true, Database.signatureDatabases);
Database.loadDatabase(context, false, Database.signatureDatabases);
int delayCount = 0;
if (Database.areDatabasesAvailable()) {
while (!Database.isDatabaseLoaded() && delayCount <= 90) {
try {
Thread.sleep(1000);
delayCount++;
//publishProgress("\t" + context.getString(R.string.main_database_loading), true);
if((delayCount % 15) == 0) {
publishProgress("\t" + context.getString(R.string.main_database_loading), true);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
if (Database.isDatabaseLoaded()) {
publishProgress("\t" + context.getString(R.string.main_database_loaded, Database.getSignatureCount() + "") + "\n", true);
publishProgress("\t" + context.getString(R.string.main_database_loaded, NumberFormat.getInstance().format(Database.getSignatureCount()) + "") + "\n", true);
//Get file hashes
publishProgress("\t" + context.getString(R.string.main_hashing_files), true);

View file

@ -32,6 +32,7 @@ import android.widget.Toast;
import androidx.core.app.NotificationCompat;
import java.io.File;
import java.text.NumberFormat;
import java.util.HashSet;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
@ -58,7 +59,7 @@ public class MalwareScannerService extends Service {
threadPoolExecutor.execute(new Runnable() {
@Override
public void run() {
Database.loadDatabase(getApplicationContext(), true, Database.signatureDatabases);
Database.loadDatabase(getApplicationContext(), false, Database.signatureDatabases);
}
});
@ -129,7 +130,8 @@ public class MalwareScannerService extends Service {
}
private void updateForegroundNotification() {
foregroundNotification.setSubText(getString(R.string.main_files_scanned_count, Utils.FILES_SCANNED + ""));
foregroundNotification
.setSubText(NumberFormat.getInstance().format(Database.getSignatureCount()) + " sigs" + "" + getString(R.string.main_files_scanned_count, NumberFormat.getInstance().format(Utils.FILES_SCANNED) + ""));
notificationManager.notify(-1, foregroundNotification.build());
}

View file

@ -2,7 +2,7 @@
<resources>
<string name="app_name">Hypatia</string>
<string name="app_copyright">Copyright 2017-2021 Divested Computing Group</string>
<string name="app_license">Lizenz: GPLv3</string>
<string name="app_license">Lizenz: GPL-3.0</string>
<string name="app_db_type_clamav">Basierend auf ClamAV-Signaturen</string>
<string name="lblOnionRoutingToggle">Download über Tor</string>

View file

@ -1,7 +1,7 @@
<resources>
<string name="app_name">Hypatia</string>
<string name="app_copyright">Copyright 2017-2021 Divested Computing Group</string>
<string name="app_license">Licence: GPLv3</string>
<string name="app_license">Licence: GPL-3.0</string>
<string name="app_db_type_clamav">Propulsé par les signatures de ClamAV</string>
<string name="lblOnionRoutingToggle">Téléchargement par Tor</string>

View file

@ -1,8 +1,8 @@
<resources>
<string name="app_name">Hypatia</string>
<string name="app_copyright">Copyright 2017-2021 Divested Computing Group</string>
<string name="app_license">License: GPLv3</string>
<string name="app_db_type_clamav">Powered by ClamAV signatures</string>
<string name="app_license">License: GPL-3.0</string>
<string name="app_db_type_clamav">Powered by ClamAV style signatures</string>
<string name="lblOnionRoutingToggle">Download over Tor</string>
<string name="lblOnionRoutingEnabledHint">Downloading over Tor, this may take a while...</string>