From 0befda3456d8bffb0553feedd2e275591ca029bb Mon Sep 17 00:00:00 2001 From: Tad Date: Sat, 16 Dec 2017 09:31:42 -0500 Subject: [PATCH] Persistence! --- app/build.gradle | 4 +-- app/src/main/AndroidManifest.xml | 20 ++++++++++++++- .../spotco/malwarescanner/BootReceiver.java | 23 +++++++++++++++++ .../us/spotco/malwarescanner/Database.java | 5 +++- .../spotco/malwarescanner/MainActivity.java | 11 +++++--- .../spotco/malwarescanner/MalwareScanner.java | 1 - .../malwarescanner/MalwareScannerService.java | 25 +++++++------------ 7 files changed, 64 insertions(+), 25 deletions(-) create mode 100644 app/src/main/java/us/spotco/malwarescanner/BootReceiver.java diff --git a/app/build.gradle b/app/build.gradle index e7eb9b7..9e5c9b3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,8 +6,8 @@ android { applicationId "us.spotco.malwarescanner" minSdkVersion 21 targetSdkVersion 26 - versionCode 9 - versionName "1.4" } + versionCode 10 + versionName "1.5" } buildTypes { release { minifyEnabled false diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index af5140b..417718f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ + + + + android:exported="false"> + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/us/spotco/malwarescanner/BootReceiver.java b/app/src/main/java/us/spotco/malwarescanner/BootReceiver.java new file mode 100644 index 0000000..fb8e3ab --- /dev/null +++ b/app/src/main/java/us/spotco/malwarescanner/BootReceiver.java @@ -0,0 +1,23 @@ +package us.spotco.malwarescanner; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; + +public class BootReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { + SharedPreferences prefs = context.getSharedPreferences(BuildConfig.APPLICATION_ID, Context.MODE_PRIVATE); + boolean autostart = prefs.getBoolean("autostart", true); + + if (autostart) { + Intent realtimeScanner = new Intent(context, MalwareScannerService.class); + context.startService(realtimeScanner); + } + } + } + +} diff --git a/app/src/main/java/us/spotco/malwarescanner/Database.java b/app/src/main/java/us/spotco/malwarescanner/Database.java index fa6a9a1..8ff27b2 100644 --- a/app/src/main/java/us/spotco/malwarescanner/Database.java +++ b/app/src/main/java/us/spotco/malwarescanner/Database.java @@ -2,7 +2,6 @@ package us.spotco.malwarescanner; import android.content.Context; import android.os.AsyncTask; -import android.util.Log; import android.widget.TextView; import java.io.BufferedReader; @@ -37,6 +36,10 @@ public class Database { //signatureDatabases.add(new SignatureDatabase("http://cdn.malware.expert/malware.expert.hdb", "malware.expert.hdb")); } + public static boolean areDatabasesAvailable() { + return databasePath.listFiles().length > 0; + } + public static boolean isDatabaseLoaded() { return signaturesMD5.size() > 0 && signaturesSHA1.size() > 0 && signaturesSHA256.size() > 0; } diff --git a/app/src/main/java/us/spotco/malwarescanner/MainActivity.java b/app/src/main/java/us/spotco/malwarescanner/MainActivity.java index 9880cb0..f58c0ad 100644 --- a/app/src/main/java/us/spotco/malwarescanner/MainActivity.java +++ b/app/src/main/java/us/spotco/malwarescanner/MainActivity.java @@ -4,6 +4,7 @@ import android.Manifest; import android.app.ActivityManager; import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.AsyncTask; @@ -13,15 +14,12 @@ import android.support.design.widget.FloatingActionButton; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.SwitchCompat; import android.support.v7.widget.Toolbar; import android.text.method.ScrollingMovementMethod; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.WindowManager; -import android.widget.CompoundButton; -import android.widget.Switch; import android.widget.TextView; import java.io.File; @@ -30,6 +28,7 @@ import java.util.Set; public class MainActivity extends AppCompatActivity { + private SharedPreferences prefs = null; private boolean scanSystem = false; private boolean scanApps = true; private boolean scanInternal = true; @@ -56,6 +55,8 @@ public class MainActivity extends AppCompatActivity { final Database database = new Database(this, logView); final MalwareScanner malwareScanner = new MalwareScanner(this, this, true); + prefs = getSharedPreferences(BuildConfig.APPLICATION_ID, Context.MODE_PRIVATE); + FloatingActionButton fab = findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override @@ -110,10 +111,12 @@ public class MainActivity extends AppCompatActivity { break; case R.id.toggleRealtime: Intent realtimeScanner = new Intent(getApplicationContext(), MalwareScannerService.class); - if(!item.isChecked()) { + if (!item.isChecked()) { startService(realtimeScanner); + prefs.edit().putBoolean("autostart", true).apply(); } else { stopService(realtimeScanner); + prefs.edit().putBoolean("autostart", false).apply(); } item.setChecked(!item.isChecked()); break; diff --git a/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java b/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java index 53735e0..a5e0bc9 100644 --- a/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java +++ b/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java @@ -7,7 +7,6 @@ import android.content.Context; import android.os.AsyncTask; import android.os.SystemClock; import android.support.v4.app.NotificationCompat; -import android.util.Log; import android.widget.TextView; import java.io.File; diff --git a/app/src/main/java/us/spotco/malwarescanner/MalwareScannerService.java b/app/src/main/java/us/spotco/malwarescanner/MalwareScannerService.java index f1a8f0e..58d727b 100644 --- a/app/src/main/java/us/spotco/malwarescanner/MalwareScannerService.java +++ b/app/src/main/java/us/spotco/malwarescanner/MalwareScannerService.java @@ -9,8 +9,6 @@ import android.os.Environment; import android.os.FileObserver; import android.os.IBinder; import android.support.v4.app.NotificationCompat; -import android.util.Log; -import android.widget.Toast; import java.io.File; import java.util.ArrayList; @@ -28,21 +26,16 @@ public class MalwareScannerService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { - if (true) {//Check if we're enabled - malwareMonitors = new ArrayList<>(); - malwareMonitors.add(new MalwareMonitor(Environment.getExternalStorageDirectory().toString())); - malwareMonitors.add(new MalwareMonitor(Environment.getExternalStorageDirectory() + "/Documents")); - malwareMonitors.add(new MalwareMonitor(Environment.getExternalStorageDirectory() + "/Download")); + malwareMonitors = new ArrayList<>(); + malwareMonitors.add(new MalwareMonitor(Environment.getExternalStorageDirectory().toString())); + malwareMonitors.add(new MalwareMonitor(Environment.getExternalStorageDirectory() + "/Documents")); + malwareMonitors.add(new MalwareMonitor(Environment.getExternalStorageDirectory() + "/Download")); - for (MalwareMonitor malwareMonitor : malwareMonitors) { - malwareMonitor.startWatching(); - } - Toast.makeText(this, "Theia: Realtime Scanning Started", Toast.LENGTH_SHORT).show(); - setForeground(); - } else { - stopSelf(); + for (MalwareMonitor malwareMonitor : malwareMonitors) { + malwareMonitor.startWatching(); } - + //Toast.makeText(this, "Theia: Realtime Scanning Started", Toast.LENGTH_SHORT).show(); + setForeground(); return START_STICKY; } @@ -51,7 +44,7 @@ public class MalwareScannerService extends Service { for (MalwareMonitor malwareMonitor : malwareMonitors) { malwareMonitor.stopWatching(); } - Toast.makeText(this, "Theia: Realtime Scanning Stopped", Toast.LENGTH_SHORT).show(); + //Toast.makeText(this, "Theia: Realtime Scanning Stopped", Toast.LENGTH_SHORT).show(); } private void setForeground() {