mirror of
https://github.com/MaintainTeam/Hypatia.git
synced 2025-02-28 21:38:21 +03:00
Make the app smaller
Signed-off-by: Tad <tad@spotco.us>
This commit is contained in:
parent
1ab21d949a
commit
1fcaab82b8
13 changed files with 89 additions and 107 deletions
|
@ -6,8 +6,8 @@ android {
|
|||
applicationId "us.spotco.malwarescanner"
|
||||
minSdkVersion 16
|
||||
targetSdkVersion 32
|
||||
versionCode 93
|
||||
versionName "2.28"
|
||||
versionCode 94
|
||||
versionName "2.29"
|
||||
resConfigs 'en', 'af', 'de', 'es', 'fi', 'fr', 'it', 'pl', 'pt', 'ru'
|
||||
}
|
||||
buildTypes {
|
||||
|
@ -29,6 +29,5 @@ android {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'androidx.appcompat:appcompat:1.6.0'
|
||||
implementation 'com.google.android.material:material:1.8.0'
|
||||
|
||||
}
|
||||
|
|
|
@ -18,14 +18,13 @@
|
|||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme"
|
||||
android:theme="@android:style/Theme.DeviceDefault"
|
||||
android:largeHeap="true"
|
||||
android:requestLegacyExternalStorage="true">
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/AppTheme.NoActionBar"
|
||||
android:screenOrientation="portrait"
|
||||
android:configChanges="orientation|keyboardHidden"
|
||||
android:exported="true">
|
||||
|
|
|
@ -20,6 +20,7 @@ package us.spotco.malwarescanner;
|
|||
import static android.os.Build.VERSION.SDK_INT;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
|
@ -28,7 +29,6 @@ import android.content.Intent;
|
|||
import android.content.SharedPreferences;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
|
@ -43,23 +43,16 @@ import android.widget.EditText;
|
|||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.app.AppCompatDelegate;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashSet;
|
||||
|
||||
public class MainActivity extends AppCompatActivity {
|
||||
public class MainActivity extends Activity {
|
||||
|
||||
private SharedPreferences prefs = null;
|
||||
private MalwareScanner malwareScanner = null;
|
||||
|
||||
private TextView logView;
|
||||
private Menu menu;
|
||||
|
||||
private static final String buildVersionName = BuildConfig.VERSION_NAME;
|
||||
|
||||
|
@ -72,12 +65,15 @@ public class MainActivity extends AppCompatActivity {
|
|||
|
||||
@Override
|
||||
protected final void onCreate(Bundle savedInstanceState) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
setTheme(android.R.style.Theme_DeviceDefault_DayNight);
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
|
||||
}
|
||||
super.onCreate(savedInstanceState);
|
||||
Utils.setContext(getApplicationContext());
|
||||
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
|
||||
setContentView(R.layout.activity_main);
|
||||
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||
setSupportActionBar(toolbar);
|
||||
setContentView(R.layout.content_main);
|
||||
|
||||
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
|
||||
|
||||
|
@ -94,17 +90,6 @@ public class MainActivity extends AppCompatActivity {
|
|||
|
||||
prefs = getSharedPreferences(BuildConfig.APPLICATION_ID, Context.MODE_PRIVATE);
|
||||
|
||||
final FloatingActionButton fab = findViewById(R.id.fab);
|
||||
fab.setOnClickListener(view -> {
|
||||
if (!malwareScanner.running) {
|
||||
startScanner();
|
||||
} else {
|
||||
logView.append("\n" + getString(R.string.main_cancelling_scan) + "\n\n");
|
||||
malwareScanner.cancel(true);
|
||||
malwareScanner.running = false;
|
||||
}
|
||||
});
|
||||
|
||||
requestPermissions();
|
||||
|
||||
Utils.considerStartService(this);
|
||||
|
@ -113,23 +98,27 @@ public class MainActivity extends AppCompatActivity {
|
|||
@Override
|
||||
public final boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.menu_main, menu);
|
||||
this.menu = menu;
|
||||
menu.findItem(R.id.toggleRealtime).setChecked(Utils.isServiceRunning(MalwareScannerService.class, this));
|
||||
menu.findItem(R.id.toggleOnionRouting).setChecked(prefs.getBoolean("ONION_ROUTING", false));
|
||||
updateScanButton(false);
|
||||
return true;
|
||||
}
|
||||
|
||||
private void requestPermissions() {
|
||||
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
|
||||
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_PERMISSION_EXTERNAL_STORAGE);
|
||||
if (SDK_INT >= Build.VERSION_CODES.M) {
|
||||
if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
|
||||
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_PERMISSION_EXTERNAL_STORAGE);
|
||||
}
|
||||
}
|
||||
if (SDK_INT >= Build.VERSION_CODES.R) {
|
||||
if (!Environment.isExternalStorageManager()) {
|
||||
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
|
||||
Uri uri = Uri.fromParts("package", getPackageName(), null);
|
||||
intent.setData(uri);
|
||||
startActivity(intent);
|
||||
}
|
||||
}
|
||||
if (SDK_INT >= Build.VERSION_CODES.R) {
|
||||
if (!Environment.isExternalStorageManager()) {
|
||||
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
|
||||
Uri uri = Uri.fromParts("package", getPackageName(), null);
|
||||
intent.setData(uri);
|
||||
startActivity(intent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void showCredits() {
|
||||
|
@ -272,6 +261,15 @@ public class MainActivity extends AppCompatActivity {
|
|||
case R.id.mnuFullCredits:
|
||||
showCredits();
|
||||
break;
|
||||
case R.id.btnStartScan:
|
||||
if (!malwareScanner.running) {
|
||||
updateScanButton(true);
|
||||
startScanner();
|
||||
} else {
|
||||
logView.append("\n" + getString(R.string.main_cancelling_scan) + "\n\n");
|
||||
malwareScanner.cancel(true);
|
||||
malwareScanner.running = false;
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
@ -294,7 +292,19 @@ public class MainActivity extends AppCompatActivity {
|
|||
if (scanExternal) {
|
||||
filesToScan.add(new File("/storage"));
|
||||
}
|
||||
|
||||
|
||||
malwareScanner.executeOnExecutor(Utils.getThreadPoolExecutor(), filesToScan);
|
||||
new Thread(() -> {
|
||||
try {
|
||||
while(malwareScanner.running){
|
||||
Thread.sleep(500);
|
||||
}
|
||||
runOnUiThread(() -> updateScanButton(false));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
private void updateDatabase() {
|
||||
|
@ -305,4 +315,26 @@ public class MainActivity extends AppCompatActivity {
|
|||
}
|
||||
}
|
||||
|
||||
private void updateScanButton(boolean running) {
|
||||
if (running) {
|
||||
if (SDK_INT >= Build.VERSION_CODES.O) {
|
||||
menu.findItem(R.id.btnStartScan).setIconTintList(getColorStateList(R.color.colorRed));
|
||||
} else {
|
||||
findViewById(R.id.btnStartScan).setBackgroundColor(getResources().getColor(R.color.colorRed));
|
||||
}
|
||||
if (SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
menu.findItem(R.id.btnStartScan).setIcon(getDrawable(android.R.drawable.ic_menu_close_clear_cancel));
|
||||
}
|
||||
} else {
|
||||
if (SDK_INT >= Build.VERSION_CODES.O) {
|
||||
menu.findItem(R.id.btnStartScan).setIconTintList(getColorStateList(R.color.colorGreen));
|
||||
} else {
|
||||
findViewById(R.id.btnStartScan).setBackgroundColor(getResources().getColor(R.color.colorGreen));
|
||||
}
|
||||
if (SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
menu.findItem(R.id.btnStartScan).setIcon(getDrawable(android.R.drawable.ic_media_play));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -28,8 +28,6 @@ import android.os.Environment;
|
|||
import android.os.SystemClock;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.core.app.NotificationCompat;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.InputStream;
|
||||
|
@ -78,15 +76,15 @@ class MalwareScanner extends AsyncTask<HashSet<File>, Object, String> {
|
|||
}
|
||||
} else if (!userFacingOnly) {
|
||||
String[] malwareDetect = result.split(" in ");
|
||||
NotificationCompat.Builder mBuilder =
|
||||
new NotificationCompat.Builder(context)
|
||||
Notification.Builder mBuilder =
|
||||
new Notification.Builder(context)
|
||||
.setSmallIcon(R.drawable.ic_notification)
|
||||
.setContentTitle(context.getText(R.string.lblNotificationRealtimeDetection) + " " + malwareDetect[0])
|
||||
.setContentText(malwareDetect[1])
|
||||
.setPriority(Notification.PRIORITY_MAX)
|
||||
.setDefaults(Notification.DEFAULT_VIBRATE);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
mBuilder.setVisibility(NotificationCompat.VISIBILITY_SECRET);
|
||||
mBuilder.setVisibility(Notification.VISIBILITY_SECRET);
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
mBuilder.setChannelId("DETECTION");
|
||||
|
|
|
@ -29,8 +29,6 @@ import android.os.FileObserver;
|
|||
import android.os.IBinder;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.core.app.NotificationCompat;
|
||||
|
||||
import java.io.File;
|
||||
import java.text.NumberFormat;
|
||||
import java.util.HashSet;
|
||||
|
@ -40,7 +38,7 @@ public class MalwareScannerService extends Service {
|
|||
|
||||
private final HashSet<RecursiveFileObserver> malwareMonitors = new HashSet<>();
|
||||
private ThreadPoolExecutor threadPoolExecutor = null;
|
||||
private NotificationCompat.Builder foregroundNotification = null;
|
||||
private Notification.Builder foregroundNotification = null;
|
||||
private NotificationManager notificationManager = null;
|
||||
|
||||
@Override
|
||||
|
@ -105,7 +103,7 @@ public class MalwareScannerService extends Service {
|
|||
|
||||
private void setForeground() {
|
||||
foregroundNotification =
|
||||
new NotificationCompat.Builder(this)
|
||||
new Notification.Builder(this)
|
||||
.setSmallIcon(R.drawable.ic_notification)
|
||||
.setContentTitle(getText(R.string.lblNotificationRealtimeTitle))
|
||||
.setContentText(getText(R.string.lblNotificationRealtimeText))
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.coordinatorlayout.widget.CoordinatorLayout 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"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context="us.spotco.malwarescanner.MainActivity">
|
||||
|
||||
<com.google.android.material.appbar.AppBarLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:theme="@style/AppTheme.AppBarOverlay">
|
||||
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
android:background="?attr/colorPrimary"
|
||||
app:popupTheme="@style/AppTheme.PopupOverlay" />
|
||||
|
||||
</com.google.android.material.appbar.AppBarLayout>
|
||||
|
||||
<include layout="@layout/content_main" />
|
||||
|
||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
android:id="@+id/fab"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom|end"
|
||||
android:layout_margin="@dimen/fab_margin"
|
||||
app:srcCompat="@android:drawable/ic_media_play" />
|
||||
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
|
@ -2,6 +2,11 @@
|
|||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:context="us.spotco.malwarescanner.MainActivity">
|
||||
|
||||
<item
|
||||
android:id="@+id/btnStartScan"
|
||||
android:title="@string/scan_control"
|
||||
android:icon="@android:drawable/ic_media_play"
|
||||
android:showAsAction="always"/>
|
||||
<item
|
||||
android:id="@+id/toggleOnionRouting"
|
||||
android:title="@string/lblOnionRoutingToggle"
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="colorPrimary">#4CAF50</color>
|
||||
<color name="light_blue">#03a9f4</color>
|
||||
<color name="red">#f44336</color>
|
||||
</resources>
|
||||
<color name="colorRed">#FF0000</color>
|
||||
<color name="colorGreen">#008000</color>
|
||||
</resources>
|
|
@ -59,4 +59,5 @@
|
|||
<string name="db_desc_size_small">Small</string>
|
||||
<string name="db_desc_size_medium">Medium</string>
|
||||
<string name="db_desc_size_large">Large</string>
|
||||
<string name="scan_control">Scan Control</string>
|
||||
</resources>
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
<resources>
|
||||
|
||||
<!-- Base application theme. -->
|
||||
<style name="AppTheme" parent="Theme.AppCompat.DayNight.DarkActionBar">
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="colorPrimary">@color/colorPrimary</item>
|
||||
<item name="colorPrimaryDark">@color/colorPrimary</item>
|
||||
<item name="colorAccent">@color/light_blue</item>
|
||||
</style>
|
||||
|
||||
<style name="AppTheme.NoActionBar">
|
||||
<item name="windowActionBar">false</item>
|
||||
<item name="windowNoTitle">true</item>
|
||||
</style>
|
||||
|
||||
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.DayNight.ActionBar" />
|
||||
|
||||
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.DayNight" />
|
||||
|
||||
</resources>
|
1
fastlane/metadata/android/en-US/changelogs/92.txt
Normal file
1
fastlane/metadata/android/en-US/changelogs/92.txt
Normal file
|
@ -0,0 +1 @@
|
|||
* Don't trim hashes as much to reduce false positives
|
1
fastlane/metadata/android/en-US/changelogs/93.txt
Normal file
1
fastlane/metadata/android/en-US/changelogs/93.txt
Normal file
|
@ -0,0 +1 @@
|
|||
* Don't trim hashes as much to reduce false positives
|
2
fastlane/metadata/android/en-US/changelogs/94.txt
Normal file
2
fastlane/metadata/android/en-US/changelogs/94.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
* Make the app smalller
|
||||
* Colorize the manual scan button when possible
|
Loading…
Add table
Reference in a new issue