Commit b3931ba8 authored by Your Name's avatar Your Name

迭代+病毒功能

parent a11a3403
......@@ -126,4 +126,5 @@ object GlobalConfig {
inline var isMalwareAgree
get() = SPUtils.getInstance().getBoolean(KEY_MALWARE_SCAN)
set(value) = SPUtils.getInstance().putBoolean(KEY_MALWARE_SCAN, value)
}
\ No newline at end of file
package com.swiftcleaner.chovey.model.util
import android.content.Context
import android.net.ConnectivityManager
import android.net.NetworkCapabilities
/**
* 作者:马海钊
* 时间:2025/2/10 16:44
* 功能:
*/
class NetWork {
fun isNetworkAvailable(context: Context): Boolean {
val connectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager
connectivityManager?.let {
val network = it.activeNetwork
val capabilities = it.getNetworkCapabilities(network)
return capabilities?.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) == true
}
return false
}
}
\ No newline at end of file
......@@ -3,35 +3,50 @@ package com.swiftcleaner.chovey.view;
import static com.swiftcleaner.chovey.GlobalConfig.ID_NOT_CLEANED;
import static com.swiftcleaner.chovey.GlobalConfig.ID_WHEATHER;
import static com.swiftcleaner.chovey.GlobalConfig.ID_XINGZUO;
import static com.swiftcleaner.chovey.GlobalConfig.URL_PRIVACY;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.widget.Toast;
import com.gyf.immersionbar.ImmersionBar;
import com.swiftcleaner.chovey.CleanApplication;
import com.swiftcleaner.chovey.GlobalConfig;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.admob.AdmobManager;
import com.swiftcleaner.chovey.business.push.NotificationUtils;
import com.swiftcleaner.chovey.databinding.ActivityMainBinding;
import com.swiftcleaner.chovey.databinding.DialogMalwareTipsBinding;
import com.swiftcleaner.chovey.model.tool.MemoryUtils;
import com.swiftcleaner.chovey.model.util.NetWork;
import com.swiftcleaner.chovey.model.util.PermissionUtils;
import com.swiftcleaner.chovey.view.activity.AppProcessActivity;
import com.swiftcleaner.chovey.view.activity.BatteryInfoActivity;
import com.swiftcleaner.chovey.view.activity.CleanJunkActivity;
import com.swiftcleaner.chovey.view.activity.InfoActivity;
import com.swiftcleaner.chovey.view.activity.LargeFileActivity;
import com.swiftcleaner.chovey.view.activity.MalwareCleanActivity;
import com.swiftcleaner.chovey.view.activity.ScreenShotActivity;
import com.swiftcleaner.chovey.view.activity.SettingActivity;
import com.swiftcleaner.chovey.view.activity.SimilarPhotosActivity;
......@@ -51,7 +66,7 @@ public class MainActivity extends AppCompatActivity {
private ActivityResultLauncher<String[]> multiplePermissionsLauncher;
private ActivityResultLauncher<Intent> notificationSettingsLauncher;
private FullscreenDialog fullscreenDialog;
private static final int REQUEST_CODE_STORAGE_PERMISSION = 101;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......@@ -59,7 +74,6 @@ public class MainActivity extends AppCompatActivity {
View view = binding.getRoot();
setContentView(view);
initBar();
if (!isCleaned()) {
fullscreenDialog = new FullscreenDialog(this);
fullscreenDialog.setOnDialogDismissListener(new FullscreenDialog.OnDialogDismissListener() {
......@@ -73,26 +87,116 @@ public class MainActivity extends AppCompatActivity {
initPermission();
initShow();
// binding.jiantou.setOnClickListener(v->{
// NotificationUtils.INSTANCE.sendNotification(
// CleanApplication.context,
// ID_XINGZUO,
// "xingzuo"
// );
// NotificationUtils.INSTANCE.sendNotification(
// CleanApplication.context,
// ID_WHEATHER,
// "wheather"
// );
// Log.d("NotificationUtils","111");
// });
binding.cl3VirusScan.setOnClickListener(v->{
NetWork netWork = new NetWork();
boolean networkAvailable = netWork.isNetworkAvailable(this);
if (networkAvailable){
showTipsDialog(this, () -> {
qx();
});
}else {
Toast.makeText(this, this.getString(R.string.no_network_try_again), Toast.LENGTH_SHORT).show();
}
});
}
private void qx() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
// 如果没有权限,请求权限
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
}, REQUEST_CODE_STORAGE_PERMISSION);
} else {
// 如果已经有权限,执行相关操作
performPermissionGrantedAction();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CODE_STORAGE_PERMISSION) {
if (grantResults.length > 0 &&
grantResults[0] == PackageManager.PERMISSION_GRANTED &&
grantResults[1] == PackageManager.PERMISSION_GRANTED) {
// 用户授予了权限
performPermissionGrantedAction();
} else {
// 用户拒绝了权限
performPermissionGrantedAction();
}
}
}
private void performPermissionGrantedAction() {
startActivity(new Intent(this,MalwareCleanActivity.class));
}
public void showTipsDialog(Context context, final Runnable confirm) {
if (!isCleanedBingDu()) {
DialogMalwareTipsBinding binding = DialogMalwareTipsBinding.inflate(LayoutInflater.from(context));
Dialog dialog = new Dialog(context,R.style.TransparentDialogTheme);
//dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCanceledOnTouchOutside(true);
dialog.setCancelable(true);
dialog.setContentView(binding.getRoot());
dialog.show();
binding.tvCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
SharedPreferences prefs = getSharedPreferences("CleanBingDu", MODE_PRIVATE);
binding.tvSure.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor edit = prefs.edit();
edit.putBoolean("cleanbd",true);
edit.commit();
v.setEnabled(false);
dialog.dismiss();
confirm.run();
}
});
binding.tvContent8.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
context.startActivity(
new Intent(Intent.ACTION_VIEW, Uri.parse(context.getString(R.string.trustlook_privacy_policy)))
);
}
});
binding.tvContent8.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);
binding.tvContent10.setText(URL_PRIVACY);
binding.tvContent10.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
context.startActivity(
new Intent(Intent.ACTION_VIEW, Uri.parse(URL_PRIVACY))
);
}
});
binding.tvContent10.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);
} else {
confirm.run();
}
}
private boolean isCleaned() {
SharedPreferences prefs = getSharedPreferences("AppPrefs", MODE_PRIVATE);
return prefs.getBoolean("cleaned", false);
}
private boolean isCleanedBingDu() {
SharedPreferences prefs = getSharedPreferences("CleanBingDu", MODE_PRIVATE);
return prefs.getBoolean("cleanbd", false);
}
private void initShow() {
binding.lottieAnimattionView.setAnimation(R.raw.cleaner_junk_found_animation);
binding.lottieAnimattionView.playAnimation();
......
......@@ -624,7 +624,8 @@ public class CleanJunkActivity extends BaseActivity<ActivityCleanJunkBinding> {
private void initAnimation(String str) {
Intent intent = new Intent(this, EndCleanJunkActivity.class);
intent.putExtra("cleanstr", str);
intent.putExtra("cleanstr", "Cleaned " + str + " junk files");
intent.putExtra("title", "Clean Junk");
startActivity(intent);
finish();
}
......
......@@ -108,7 +108,9 @@ public class EndCleanJunkActivity extends BaseActivity<ActivityEndCleanJunkBindi
private void initShow() {
Intent intent = getIntent();
String stringExtra = intent.getStringExtra("cleanstr");
binding.endCleanJunkFileNum.setText("Cleaned " + stringExtra + " junk files");
String title = intent.getStringExtra("title");
binding.endCleanJunkFileNum.setText(stringExtra);
binding.title.setText(title);
binding.ivReturn.setOnClickListener(v -> initCustDialog());
binding.buttonBatteryInfoCheckNo.setOnClickListener(v -> {
startActivity(new Intent(EndCleanJunkActivity.this, InfoActivity.class));
......
......@@ -45,7 +45,7 @@ public class GuideActivity extends AppCompatActivity {
View view = binding.getRoot();
setContentView(view);
initBar();
preferences = CleanApplication.context.getGuideSharedPreferences();
adapter = new ViewPagerAdapter(getSupportFragmentManager(), FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
binding.viewPager.setAdapter(adapter);
binding.viewPager.setPagingEnabled(false);
......@@ -88,6 +88,11 @@ public class GuideActivity extends AppCompatActivity {
if (currentPosition < adapter.getCount() - 1) {
binding.viewPager.setCurrentItem(currentPosition + 1, true);
} else {
preferences = CleanApplication.context.getGuideSharedPreferences();
SharedPreferences.Editor edit = preferences.edit();
edit.putBoolean("isGuideSP",true);
edit.commit();
if (AdmobManager.INSTANCE.isShowAdInterGuide()){
AdmobManager.INSTANCE.showInterstitialAd(this,
() -> {
......@@ -122,9 +127,6 @@ public class GuideActivity extends AppCompatActivity {
if (!checkFilesAccessPermission(this)) {
// 没有权限,请求权限
requestFilesAccessPermission();
SharedPreferences.Editor edit = preferences.edit();
edit.putBoolean("isGuideSP",true);
edit.commit();
}
}
......
......@@ -313,7 +313,8 @@ public class LargeFileActivity extends BaseActivity<ActivityLargeFileBinding> {
private void initAnimation(String str) {
Intent intent = new Intent(this, EndCleanJunkActivity.class);
intent.putExtra("cleanstr", str);
intent.putExtra("cleanstr", "Cleaned " + str + " junk files");
intent.putExtra("title", "Clean Junk");
startActivity(intent);
finish();
}
......
......@@ -276,6 +276,12 @@ class MalwareCleanActivity : AppCompatActivity() {
binding.ivEmpty.visibility = if (appList.isEmpty()) View.VISIBLE else View.GONE
if (appList.isEmpty()) {
// actionCleanResult(0, getString(R.string.malware_scan))
val intent = Intent(this, EndCleanJunkActivity::class.java).apply {
putExtra("cleanstr", "Your phone is completely secure\\nno threats found!")
putExtra("title", "Antivirus Scan")
}
startActivity(intent)
finish()
} else {
showNativeAd(this, { nativeAd: NativeAd? ->
nativeAd?.let {
......
......@@ -305,7 +305,8 @@ public class ScreenShotActivity extends BaseActivity<ActivityScreenShotBinding>
}
private void initAnimation(String cleanSize) {
Intent intent = new Intent(this, EndCleanJunkActivity.class);
intent.putExtra("cleanstr", cleanSize);
intent.putExtra("cleanstr", "Cleaned " + cleanSize + " junk files");
intent.putExtra("title", "Clean Junk");
startActivity(intent);
finish();
}
......
......@@ -236,7 +236,8 @@ class SimilarPhotosActivity : AppCompatActivity() {
withContext(Dispatchers.Main) {
MediaHelps.updateMedia(applicationContext, paths)
val intent = Intent(this@SimilarPhotosActivity, EndCleanJunkActivity::class.java)
intent.putExtra("cleanstr", formatFileSize(selectedFiles.sumOf { it.size }))
intent.putExtra("cleanstr", "Cleaned"+formatFileSize(selectedFiles.sumOf { it.size })+"junk files")
intent.putExtra("title", "Clean Junk")
startActivity(intent)
finish()
}
......
......@@ -307,7 +307,8 @@ public class WhatsAppActivity extends BaseActivity<ActivityWhatsAppBinding> {
private void initAnimation(String str) {
Intent intent = new Intent(this, EndCleanJunkActivity.class);
intent.putExtra("cleanstr", str);
intent.putExtra("cleanstr", "Cleaned " + str + " junk files");
intent.putExtra("title", "Clean Junk");
startActivity(intent);
finish();
}
......
......@@ -45,6 +45,7 @@
app:layout_constraintTop_toTopOf="@id/cl1" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
......
......@@ -256,40 +256,39 @@
app:layout_constraintStart_toStartOf="@id/cl3_clean_junk"
app:layout_constraintTop_toBottomOf="@id/iv_clean_junk" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl3_app_manager"
android:id="@+id/cl3_Virus_Scan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="@id/cl3"
app:layout_constraintBottom_toBottomOf="@id/cl3"
app:layout_constraintEnd_toEndOf="@id/cl3"
app:layout_constraintStart_toStartOf="@id/cl3"
app:layout_constraintTop_toTopOf="@id/cl3">
<ImageView
android:id="@+id/iv_app_manager"
android:id="@+id/iv_Virus_Scan"
android:layout_width="50dp"
android:layout_height="50dp"
android:scaleType="fitXY"
android:src="@mipmap/h_appmanager"
app:layout_constraintEnd_toEndOf="@id/cl3_app_manager"
app:layout_constraintStart_toStartOf="@id/cl3_app_manager"
app:layout_constraintTop_toTopOf="@id/cl3_app_manager" />
android:src="@mipmap/h_virus"
app:layout_constraintEnd_toEndOf="@id/cl3_Virus_Scan"
app:layout_constraintStart_toStartOf="@id/cl3_Virus_Scan"
app:layout_constraintTop_toTopOf="@id/cl3_Virus_Scan" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="App Manager"
android:text="Virus Scan"
android:textColor="#000000"
android:textSize="15sp"
app:layout_constraintEnd_toEndOf="@id/cl3_app_manager"
app:layout_constraintStart_toStartOf="@id/cl3_app_manager"
app:layout_constraintTop_toBottomOf="@id/iv_app_manager" />
app:layout_constraintEnd_toEndOf="@id/cl3_Virus_Scan"
app:layout_constraintStart_toStartOf="@id/cl3_Virus_Scan"
app:layout_constraintTop_toBottomOf="@id/iv_Virus_Scan" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl3_battery_info"
android:id="@+id/cl3_app_manager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="18dp"
......@@ -298,26 +297,28 @@
app:layout_constraintTop_toTopOf="@id/cl3">
<ImageView
android:id="@+id/iv_battery_info"
android:id="@+id/iv_app_manager"
android:layout_width="50dp"
android:layout_height="50dp"
android:scaleType="fitXY"
android:src="@mipmap/h_batteryinfo"
app:layout_constraintEnd_toEndOf="@id/cl3_battery_info"
app:layout_constraintStart_toStartOf="@id/cl3_battery_info"
app:layout_constraintTop_toTopOf="@id/cl3_battery_info" />
android:src="@mipmap/h_appmanager"
app:layout_constraintEnd_toEndOf="@id/cl3_app_manager"
app:layout_constraintStart_toStartOf="@id/cl3_app_manager"
app:layout_constraintTop_toTopOf="@id/cl3_app_manager" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="Battery Info"
android:text="App Manager"
android:textColor="#000000"
android:textSize="15sp"
app:layout_constraintEnd_toEndOf="@id/cl3_battery_info"
app:layout_constraintStart_toStartOf="@id/cl3_battery_info"
app:layout_constraintTop_toBottomOf="@id/iv_battery_info" />
app:layout_constraintEnd_toEndOf="@id/cl3_app_manager"
app:layout_constraintStart_toStartOf="@id/cl3_app_manager"
app:layout_constraintTop_toBottomOf="@id/iv_app_manager" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<com.swiftcleaner.chovey.business.admob.NativeView
......@@ -353,15 +354,55 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/more_textview">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl3_battery_info"
android:layout_width="match_parent"
android:layout_height="72dp"
android:background="@drawable/shape_radio_20dp_white"
app:layout_constraintEnd_toEndOf="@id/cl4"
app:layout_constraintStart_toStartOf="@id/cl4"
app:layout_constraintTop_toTopOf="@id/cl4">
<ImageView
android:layout_width="44dp"
android:layout_height="44dp"
android:layout_marginStart="14dp"
android:scaleType="fitXY"
android:src="@mipmap/h_batteryinfo"
app:layout_constraintBottom_toBottomOf="@id/cl3_battery_info"
app:layout_constraintStart_toStartOf="@id/cl3_battery_info"
app:layout_constraintTop_toTopOf="@id/cl3_battery_info" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="72dp"
android:text="Battery Info"
android:textColor="#000000"
android:textSize="15sp"
app:layout_constraintBottom_toBottomOf="@id/cl3_battery_info"
app:layout_constraintStart_toStartOf="@id/cl3_battery_info"
app:layout_constraintTop_toTopOf="@id/cl3_battery_info" />
<ImageView
android:layout_width="18dp"
android:layout_height="18dp"
android:layout_marginEnd="11dp"
android:scaleType="fitXY"
android:src="@mipmap/jiantou"
app:layout_constraintBottom_toBottomOf="@id/cl3_battery_info"
app:layout_constraintEnd_toEndOf="@id/cl3_battery_info"
app:layout_constraintTop_toTopOf="@id/cl3_battery_info" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/large_file_cleaner"
android:layout_width="match_parent"
android:layout_height="72dp"
android:layout_marginTop="12dp"
android:background="@drawable/shape_radio_20dp_white"
app:layout_constraintEnd_toEndOf="@id/cl4"
app:layout_constraintStart_toStartOf="@id/cl4"
app:layout_constraintTop_toTopOf="@id/cl4">
app:layout_constraintTop_toBottomOf="@id/cl3_battery_info">
<ImageView
android:layout_width="44dp"
......
......@@ -155,7 +155,7 @@
android:layout_width="80dp"
android:layout_height="80dp"
android:scaleType="fitCenter"
android:src="@mipmap/dx_clean"
android:src="@mipmap/dx_virus"
app:layout_constraintBottom_toBottomOf="@id/radarview"
app:layout_constraintEnd_toEndOf="@id/radarview"
app:layout_constraintStart_toStartOf="@id/radarview"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment