From 28f710d5adb84d9be1b75a63c546f986bf9fac68 Mon Sep 17 00:00:00 2001 From: Tad Date: Mon, 22 Feb 2021 23:28:07 -0500 Subject: [PATCH] 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 --- .idea/caches/build_file_checksums.ser | Bin 532 -> 532 bytes app/build.gradle | 2 +- .../us/spotco/malwarescanner/Database.java | 11 +++++--- .../spotco/malwarescanner/MainActivity.java | 2 +- .../spotco/malwarescanner/MalwareScanner.java | 25 +++++++++++------- .../malwarescanner/MalwareScannerService.java | 6 +++-- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values/strings.xml | 4 +-- 9 files changed, 32 insertions(+), 22 deletions(-) diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index da131403d73a505039442040ad8088315ee29775..8a393e31b747bb06ce81b956c019152869660e91 100644 GIT binary patch delta 33 rcmV++0N($U1e64jm;}uv83?hQX8{qi+y<3M#%uNurXeMv-6jcm)OHN* delta 33 rcmV++0N($U1e64jm;}reo))p3X8{rM`6ZvJuH&qPmkQ_$r`&~j_1zES diff --git a/app/build.gradle b/app/build.gradle index 375400e..0ee5e30 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,7 +6,7 @@ android { applicationId "us.spotco.malwarescanner" minSdkVersion 16 targetSdkVersion 30 - versionCode 57 + versionCode 58 versionName "2.15" resConfigs "en", "de", "fr" } diff --git a/app/src/main/java/us/spotco/malwarescanner/Database.java b/app/src/main/java/us/spotco/malwarescanner/Database.java index ae9dd73..844d170 100644 --- a/app/src/main/java/us/spotco/malwarescanner/Database.java +++ b/app/src/main/java/us/spotco/malwarescanner/Database.java @@ -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 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 signatureDatabases) { - if (!isDatabaseLoaded() || !ignoreifLoaded && isDatabaseLoaded()) { + public static void loadDatabase(Context context, boolean forceReload, HashSet 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; } } diff --git a/app/src/main/java/us/spotco/malwarescanner/MainActivity.java b/app/src/main/java/us/spotco/malwarescanner/MainActivity.java index 2dbee70..0ce5e0b 100644 --- a/app/src/main/java/us/spotco/malwarescanner/MainActivity.java +++ b/app/src/main/java/us/spotco/malwarescanner/MainActivity.java @@ -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), diff --git a/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java b/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java index f17e433..581680a 100644 --- a/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java +++ b/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java @@ -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, 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; - while (!Database.isDatabaseLoaded() && delayCount <= 90) { - try { - Thread.sleep(1000); - delayCount++; - //publishProgress("\t" + context.getString(R.string.main_database_loading), true); - } catch (InterruptedException e) { - e.printStackTrace(); + if (Database.areDatabasesAvailable()) { + while (!Database.isDatabaseLoaded() && delayCount <= 90) { + try { + Thread.sleep(1000); + delayCount++; + 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); diff --git a/app/src/main/java/us/spotco/malwarescanner/MalwareScannerService.java b/app/src/main/java/us/spotco/malwarescanner/MalwareScannerService.java index bbca189..bbaa50b 100644 --- a/app/src/main/java/us/spotco/malwarescanner/MalwareScannerService.java +++ b/app/src/main/java/us/spotco/malwarescanner/MalwareScannerService.java @@ -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()); } diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 87650ab..9b9ab6f 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -2,7 +2,7 @@ Hypatia Copyright 2017-2021 Divested Computing Group - Lizenz: GPLv3 + Lizenz: GPL-3.0 Basierend auf ClamAV-Signaturen Download über Tor diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index b80553b..d2dda23 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1,7 +1,7 @@ Hypatia Copyright 2017-2021 Divested Computing Group - Licence: GPLv3 + Licence: GPL-3.0 Propulsé par les signatures de ClamAV Téléchargement par Tor diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8a5b7d2..605c097 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,8 +1,8 @@ Hypatia Copyright 2017-2021 Divested Computing Group - License: GPLv3 - Powered by ClamAV signatures + License: GPL-3.0 + Powered by ClamAV style signatures Download over Tor Downloading over Tor, this may take a while...