Add proper toggle for service

This commit is contained in:
Tad 2017-12-16 08:12:52 -05:00
parent c1473846a6
commit 90e5ecdede
5 changed files with 35 additions and 17 deletions

View file

@ -6,7 +6,7 @@ android {
applicationId "us.spotco.malwarescanner"
minSdkVersion 21
targetSdkVersion 26
versionCode 7
versionCode 8
versionName "1.3" }
buildTypes {
release {

View file

@ -1,6 +1,8 @@
package us.spotco.malwarescanner;
import android.Manifest;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
@ -11,12 +13,15 @@ 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;
@ -84,6 +89,7 @@ public class MainActivity extends AppCompatActivity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
menu.findItem(R.id.toggleRealtime).setChecked(isServiceRunning(MalwareScannerService.class));
return true;
}
@ -102,9 +108,14 @@ public class MainActivity extends AppCompatActivity {
Database.loadDatabase(false, Database.signatureDatabases);
}
break;
case R.id.mnuStartRealtime:
Intent realtimeScanner = new Intent(this, MalwareScannerService.class);
startService(realtimeScanner);
case R.id.toggleRealtime:
Intent realtimeScanner = new Intent(getApplicationContext(), MalwareScannerService.class);
if(!item.isChecked()) {
startService(realtimeScanner);
} else {
stopService(realtimeScanner);
}
item.setChecked(!item.isChecked());
break;
case R.id.mnuScanSystem:
scanSystem = !item.isChecked();
@ -125,4 +136,15 @@ public class MainActivity extends AppCompatActivity {
}
return super.onOptionsItemSelected(item);
}
private boolean isServiceRunning(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
}

View file

@ -30,7 +30,6 @@ public class MalwareScannerService extends Service {
if (true) {//Check if we're enabled
malwareMonitors = new ArrayList<>();
malwareMonitors.add(new MalwareMonitor(Environment.getExternalStorageDirectory().toString()));
malwareMonitors.add(new MalwareMonitor(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString()));
for (MalwareMonitor malwareMonitor : malwareMonitors) {
malwareMonitor.startWatching();
@ -69,7 +68,6 @@ public class MalwareScannerService extends Service {
private class MalwareMonitor extends FileObserver {
private String rootPath = null;
private Set<File> filesScannedRecently = new HashSet<>();
public MalwareMonitor(String path) {
super(path);
@ -83,14 +81,10 @@ public class MalwareScannerService extends Service {
public void onEvent(int eventID, String path) {
if (eventID == FileObserver.CLOSE_WRITE) {
File file = new File(rootPath + path);
if (!filesScannedRecently.contains(file)) {
filesScannedRecently.clear();
if (file.exists() && file.length() > 0) {
Set<File> filesToScan = new HashSet<>();
filesToScan.add(file);
filesScannedRecently.add(file);
new MalwareScanner(null, getApplicationContext(), false).execute(filesToScan);
}
if (file.exists() && file.length() > 0) {
Set<File> filesToScan = new HashSet<>();
filesToScan.add(file);
new MalwareScanner(null, getApplicationContext(), false).execute(filesToScan);
}
}
}

View file

@ -1,14 +1,15 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="us.spotco.malwarescanner.MainActivity">
<item
android:id="@+id/mnuUpdateDatabase"
android:title="@string/lblUpdateDatabase" />
<item
android:id="@+id/mnuStartRealtime"
android:title="@string/lblStartRealtime" />
android:id="@+id/toggleRealtime"
android:title="@string/lblRealtimeScannerToggle"
android:checkable="true" />
<item
android:id="@+id/mnuScanSystem"

View file

@ -9,4 +9,5 @@
<string name="lblNotificationRealtimeTitle">Realtime Scanner</string>
<string name="lblNotificationRealtimeText">Malware will be detected in realtime</string>
<string name="lblNotificationRealtimeDetection">Malware Detected!</string>
<string name="lblRealtimeScannerToggle">Realtime Scanner</string>
</resources>