Commit 798187b5 authored by wanglei's avatar wanglei

直接复制拆包大法好

parent 22fac569
Pipeline #1081 canceled with stages
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties
# Default ignored files
/shelf/
/workspace.xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
<option name="resolveExternalAnnotations" value="false" />
</GradleProjectSettings>
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectMigrations">
<option name="MigrateToGradleLocalJavaHome">
<set>
<option value="$PROJECT_DIR$" />
</set>
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
\ No newline at end of file
# clean master
文件清理fileselect的拆包
[蓝湖地址](https://lanhuapp.com/web/#/item/project/stage?tid=7ffa1f58-bb1b-47af-90c6-cdc70bba2a91&pid=47bfbe9a-fa90-439f-a47d-1822a107e010)
\ No newline at end of file
/build
\ No newline at end of file
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'com.google.gms.google-services'
}
android {
signingConfigs {
release {
storeFile file('/Users/mangguo/apk/testfile')
storePassword '123456'
keyAlias 'key0'
keyPassword '123456'
}
}
namespace 'com.xm.test.myfilemaster'
compileSdk 34
defaultConfig {
applicationId "com.xm.test.myfilemaster"
minSdk 21
targetSdk 33
versionCode 13
versionName "2.2"
ndk {
abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64'
}
setProperty("archivesBaseName", "master-v${versionName}")
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
buildFeatures {
viewBinding true
buildConfig true
}
lintOptions {
abortOnError false
}
}
dependencies {
implementation(fileTree("libs"))
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.10.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
implementation 'com.blankj:utilcodex:1.31.1'
implementation 'com.github.JavaNoober.BackgroundLibrary:libraryx:1.7.6'
implementation 'com.github.bumptech.glide:glide:4.15.1'
implementation "io.github.cymchad:BaseRecyclerViewAdapterHelper:3.0.14"
implementation("com.facebook.android:facebook-android-sdk:[8,9)")
implementation("com.google.android.gms:play-services-ads:22.5.0")
implementation("com.google.ads.mediation:applovin:12.3.0.0")
implementation("com.google.ads.mediation:facebook:6.15.0.0")
implementation("com.google.ads.mediation:mintegral:16.6.51.0")
implementation("com.google.ads.mediation:pangle:5.8.0.7.0")
implementation platform('com.google.firebase:firebase-bom:32.1.0')
implementation 'com.google.firebase:firebase-database-ktx'
implementation 'com.google.firebase:firebase-analytics-ktx'
implementation "com.squareup.okhttp3:okhttp:4.9.0"
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0'
implementation "com.android.installreferrer:installreferrer:2.2"
implementation 'com.goz.trade.myfilemaster:lxntgw:v30-jiagu-gp'
// implementation 'com.solar.fileaceoneweea.inmanagerso:l1b2t123457j1:v30-jiagu-gp'
implementation 'com.airbnb.android:lottie:6.4.0'
implementation files('libs/cloudscan_sdk_5.0.5.20240306.aar')
implementation files('libs/trustlook_cleanjunk_sdk_release_3.0.4.20240322.aar')
}
\ No newline at end of file
{
"project_info": {
"project_number": "233428959956",
"project_id": "my-file-master-reader",
"storage_bucket": "my-file-master-reader.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:233428959956:android:e8762fde482c0acb93b141",
"android_client_info": {
"package_name": "com.xm.test.myfilemaster"
}
},
"oauth_client": [],
"api_key": [
{
"current_key": "AIzaSyD5a64Y_E88SFobAqPA_dkhMsjh-JmSvfE"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": []
}
}
}
],
"configuration_version": "1"
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
-keep class com.trustlook.** {
*;
}
\ No newline at end of file
This diff is collapsed.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<application
android:name=".application.FileMasterApplication"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/l_6565"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.MyFileMaster"
android:requestLegacyExternalStorage="true"
android:requestRawExternalStorageAccess="true"
tools:targetApi="31">
<activity
android:name=".activity.GuestActivity"
android:configChanges="keyboardHidden|orientation|screenSize|locale|density|fontScale|layoutDirection|navigation|uiMode|screenLayout|mcc|mnc"
android:excludeFromRecents="true"
android:exported="true"
android:immersive="true"
android:launchMode="singleInstance"
android:showOnLockScreen="true"
android:taskAffinity=":fd_demo"
android:theme="@style/FullScreenTheme.Null"
android:windowSoftInputMode="adjustUnspecified|stateHidden|adjustResize">
<intent-filter>
<action android:name="android.settings.INPUT_METHOD_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="desk" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".activity.MainActivity" android:screenOrientation="portrait"/>
<activity android:name=".activity.FileDeleActivity" android:screenOrientation="portrait"/>
<activity android:name=".activity.ImagesActivity" android:screenOrientation="portrait"/>
<activity android:name=".activity.FileManagerActivity" android:screenOrientation="portrait"/>
<activity android:name=".activity.CleanUpActivity" android:screenOrientation="portrait"/>
<activity android:name=".activity.RelsutActivity" android:screenOrientation="portrait"/>
<activity android:name=".activity.NewBackActivity" android:screenOrientation="portrait"/>
<activity android:name=".activity.TempdeActivity" android:screenOrientation="portrait"/>
<activity android:name=".activity.AntivirusActivity" android:screenOrientation="portrait"/>
<activity android:name=".activity.AppManageActivity" android:screenOrientation="portrait"/>
<activity android:name=".activity.BatteryInfoActivity" android:screenOrientation="portrait"/>
<activity android:name=".activity.CleaningActivity" android:screenOrientation="portrait"/>
<activity android:name=".activity.ProcessScanActivity" android:screenOrientation="portrait"/>
<activity android:name=".activity.TmpScanActivity" android:screenOrientation="portrait"/>
<activity android:name=".activity.DcScanActivity" android:screenOrientation="portrait"/>
<activity android:name=".activity.GuideActivity" android:screenOrientation="portrait"/>
<activity android:name=".activity.GuideCleanActivity" android:screenOrientation="portrait"/>
<activity android:name=".activity.SimilarPicActivity" android:screenOrientation="portrait"/>
<activity android:name=".activity.VirusAppsActivity" android:screenOrientation="portrait"/>
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-3940256099942544~3347511713" />
<meta-data
android:name="com.google.android.gms.ads.flag.OPTIMIZE_INITIALIZATION"
android:value="true" />
<meta-data
android:name="com.google.android.gms.ads.flag.OPTIMIZE_AD_LOADING"
android:value="true" />
<meta-data
android:name="com.trustlook.ApiKey"
android:value="b8c65a04c0275968a2b25c2d7ee51aa0bda73d3f0bccd34ad2ae99e3" />
<meta-data
android:name="com.trustlook.cleansdk.ApiKey"
android:value="0d424850e7e84dea7c4389edd3ae2ab6260c2501d5151f9e89ae855f" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true"
tools:replace="android:authorities">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"
tools:replace="android:resource" />
</provider>
</application>
</manifest>
\ No newline at end of file
package com.xm.test.myfilemaster.activity
import android.animation.ValueAnimator
import android.content.Intent
import android.graphics.Color
import android.util.Log
import android.view.animation.LinearInterpolator
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import androidx.core.view.isVisible
import androidx.core.view.updatePadding
import com.blankj.utilcode.util.BarUtils
import com.blankj.utilcode.util.ToastUtils
import com.trustlook.sdk.Constants
import com.trustlook.sdk.cloudscan.CloudScanClient
import com.trustlook.sdk.cloudscan.CloudScanListener
import com.trustlook.sdk.data.AppInfo
import com.trustlook.sdk.data.Error
import com.trustlook.sdk.data.Region
import com.xm.test.myfilemaster.R
import com.xm.test.myfilemaster.databinding.NewLayoutAutiviusBinding
import com.xm.test.myfilemaster.tools.BaseActivity
import com.xm.test.myfilemaster.tools.ConfigHelper
import com.xm.test.myfilemaster.tools.ad.AdmobAdHelper
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlin.random.Random
class AntivirusActivity : BaseActivity<NewLayoutAutiviusBinding>() {
override val binding: NewLayoutAutiviusBinding by lazy {
NewLayoutAutiviusBinding.inflate(layoutInflater)
}
private var cloudScanClient: CloudScanClient? = null
private var mScanList = ArrayList<AppInfo>()
override fun onStart() {
super.onStart()
checkPermission()
}
private var mProcess = 0
override fun initView() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
binding.idParentLayout.setBackgroundResource(R.drawable.shape_7f7cff_9591ff)
ValueAnimator.ofFloat(0f, 360f).run {
duration = 1000
interpolator = LinearInterpolator()
repeatCount = ValueAnimator.INFINITE
repeatMode = ValueAnimator.RESTART
addUpdateListener {
binding.idImgAni.rotation = it.animatedValue as Float
}
start()
}
cloudScanClient = CloudScanClient.Builder(this)
.setRegion(Region.INTL)
.setConnectionTimeout(30000)
.setSocketTimeout(30000)
.build()
// AdmobAdHelper.showNativeAd(this, binding.idFlAd)
// cloudScanClient.startPackagenameScan("com.twitter.android", new CloudScanListener() {
binding.root.postDelayed({
AdmobAdHelper.showInterstitialAd(this) {
binding.root.postDelayed({
// RelsutActivity.launch(this, title = RelsutActivity.type_antivirus)
// finish()
}, Random.nextLong(600, 1400))
}
}, Random.nextLong(2500, 5000))
}
override fun onPermissionsResult(isGranted: Boolean) {
if (isGranted) {
startScan()
} else {
ToastUtils.showShort("No permission.")
}
}
private fun addPro() {
MainScope().launch(Dispatchers.Main) {
var index = 0
launch {
while (mProcess < 100) {
delay(100)
mProcess += 1
if (mScanList.isNotEmpty()) {
binding.idTvAppPackage.text = mScanList[index].packageName
// index = (index + 1) % mScanList.size
index += 1
mProcess = mProcess.coerceAtLeast(index * 100 / mScanList.size)
}
binding.idTvBfb.isVisible = true
binding.idCurrentPro.text = "$mProcess"
binding.idProcess.progress = mProcess
}
val mVirsList = mScanList.filter {
it.score > 5
}
AdmobAdHelper.showInterstitialAd(this@AntivirusActivity) {
if (mVirsList.isNotEmpty()) {
ConfigHelper.riskAppList = mVirsList
startActivity(Intent(this@AntivirusActivity, VirusAppsActivity::class.java))
finish()
} else {
RelsutActivity.launch(
this@AntivirusActivity,
title = RelsutActivity.type_antivirus
)
finish()
}
}
}
}
}
private fun startScan() {
cloudScanClient?.startQuickScan(object : CloudScanListener() {
override fun onScanStarted() {
Log.d(Constants.TAG, "startQuickScan onScanStarted")
binding.idTvText.text = "Security scan..."
addPro()
}
override fun onScanProgress(curr: Int, total: Int, result: AppInfo) {
Log.d(
Constants.TAG,
"startQuickScan onScanProgress $curr/$total"
)
}
override fun onScanError(errCode: Int, message: String) {
Log.d(Constants.TAG, "startQuickScan onScanError $errCode")
var ErrorMessage = ""
ErrorMessage = if (errCode == Error.HOST_NOT_DEFINED) {
"Error $errCode: HOST_NOT_DEFINED"
} else if (errCode == Error.INVALID_INPUT) {
"Error $errCode: INVALID_INPUT, no samples to scan"
} else if (errCode == Error.SERVER_NOT_AVAILABLE) {
"Error $errCode: SERVER_NOT_AVAILABLE"
} else if (errCode == Error.KEY_SERVER_NOT_AVAILABLE) {
"Error $errCode: KEY_SERVER_NOT_AVAILABLE"
} else if (errCode == Error.SCAN_SERVER_NOT_AVAILABLE) {
"Error $errCode: SCAN_SERVER_NOT_AVAILABLE"
} else if (errCode == Error.JSON_EXCEPTION) {
"Error $errCode: JSON_EXCEPTION"
} else if (errCode == Error.IO_EXCEPTION) {
"Error $errCode: IO_EXCEPTION"
} else if (errCode == Error.NO_NETWORK) {
"Error $errCode: NO_NETWORK"
} else if (errCode == Error.SOCKET_TIMEOUT_EXCEPTION) {
"Error $errCode: SOCKET_TIMEOUT_EXCEPTION"
} else if (errCode == Error.INVALID_KEY) {
"Error $errCode: INVALID_KEY, please check the key in AndroidManifest.xml"
} else if (errCode == Error.UNSTABLE_NETWORK) {
"Error $errCode: UNSTABLE_NETWORT"
} else if (errCode == Error.INVALID_SIGNATURE) {
"Error $errCode: INVALID_SIGNATURE"
} else {
"Error $errCode $message"
}
}
override fun onScanCanceled() {
Toast.makeText(
this@AntivirusActivity,
"startQuickScan onScanCanceled",
Toast.LENGTH_LONG
).show()
}
override fun onScanInterrupt() {}
override fun onScanFinished(results: List<AppInfo>) {
Log.d(Constants.TAG, "startQuickScan onScanFinished " + results.size + " APPs")
mScanList.addAll(results)
// fragment.update(results, results.size)
// packagenameScan();
}
})
}
override fun onDestroy() {
super.onDestroy()
cloudScanClient?.cancelScan()
}
override fun initListener() {
binding.idBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
// RelsutActivity.launch(this@AntivirusActivity, title = RelsutActivity.type_antivirus)
finish()
}
})
}
}
\ No newline at end of file
package com.xm.test.myfilemaster.activity
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.activity.OnBackPressedCallback
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.blankj.utilcode.util.AppUtils
import com.xm.test.myfilemaster.R
import com.xm.test.myfilemaster.databinding.ActivityLayoutAppManageBinding
import com.xm.test.myfilemaster.tools.BaseActivity
import com.xm.test.myfilemaster.tools.ConfigHelper
import com.xm.test.myfilemaster.tools.FileHelper
import com.xm.test.myfilemaster.tools.KotlinExt.setOnClickListener
import com.xm.test.myfilemaster.tools.KotlinExt.toFormatSize
import com.xm.test.myfilemaster.tools.ad.AdmobAdHelper
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
class AppManageActivity : BaseActivity<ActivityLayoutAppManageBinding>() {
override val isLightMode = true
override val binding: ActivityLayoutAppManageBinding by lazy {
ActivityLayoutAppManageBinding.inflate(layoutInflater)
}
override fun initView() {
AdmobAdHelper.showNativeAd(this, binding.idFlAd)
binding.idTotalUsed.text =
"Total:${FileHelper.ramInfo.totalMem.toFormatSize()} / ${FileHelper.ramInfo.availMem.toFormatSize()} used"
binding.idPr.progress =
(FileHelper.ramInfo.availMem * 100L / FileHelper.ramInfo.totalMem).toInt()
if (ConfigHelper.appList.isNullOrEmpty()) {
MainScope().launch(Dispatchers.IO) {
ConfigHelper.appList = AppUtils.getAppsInfo()
launch(Dispatchers.Main) {
ConfigHelper.appList?.run {
setAdapter(filter { !it.isSystem })
}
}
}
} else {
ConfigHelper.appList?.run {
setAdapter(filter { !it.isSystem })
}
}
}
private fun setAdapter(list: List<AppUtils.AppInfo>) {
binding.idRlAppManage.run {
layoutManager = LinearLayoutManager(context)
adapter = object : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): RecyclerView.ViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_temp_app, parent, false)
return object : RecyclerView.ViewHolder(view) {}
}
override fun getItemCount() = list.size
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
holder.itemView.run {
findViewById<ImageView>(R.id.id_app_icon).setImageDrawable(list[position].icon)
findViewById<TextView>(R.id.id_app_name).text = list[position].name
holder.itemView.setOnClickListener {
AppUtils.launchAppDetailsSettings(list[position].packageName)
}
}
}
}
}
}
override fun initListener() {
listOf(binding.idManageFin, binding.idAppProcessBack).setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
// RelsutActivity.launch(this@AppManageActivity, title = RelsutActivity.type_app_manager)
finish()
}
})
}
}
\ No newline at end of file
package com.xm.test.myfilemaster.activity
import android.graphics.Color
import android.os.BatteryManager
import androidx.activity.OnBackPressedCallback
import androidx.core.view.updatePadding
import com.blankj.utilcode.util.BarUtils
import com.xm.test.myfilemaster.databinding.ActivityLayoutBatteryInfoBinding
import com.xm.test.myfilemaster.tools.BaseActivity
import com.xm.test.myfilemaster.tools.BatteryReceiver
import com.xm.test.myfilemaster.tools.KotlinExt.setOnClickListener
import com.xm.test.myfilemaster.tools.ad.AdmobAdHelper
class BatteryInfoActivity : BaseActivity<ActivityLayoutBatteryInfoBinding>() {
override val binding: ActivityLayoutBatteryInfoBinding by lazy {
ActivityLayoutBatteryInfoBinding.inflate(layoutInflater)
}
override fun initView() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.idTopLl.updatePadding(top = BarUtils.getStatusBarHeight())
AdmobAdHelper.showNativeAd(this, binding.idFlAd)
val percent = BatteryReceiver.level / BatteryReceiver.scale.toFloat()
binding.idDcdl.text = "${(percent * 100).toInt()}%"
val remainingCapacity = BatteryReceiver.mAh * percent
val estimatedTimeLeft = (remainingCapacity / 4.5f).toInt()
binding.idTvSc.text = "%02d h %02d m".format(estimatedTimeLeft / 60, estimatedTimeLeft % 60)
binding.idTv01.text = "Temperature: ${BatteryReceiver.temperature/10f}℃"
binding.idTv02.text = "Voltage: ${BatteryReceiver.voltage}v"
binding.idTv03.text = "Average current: ${(percent * 100).toInt()}%"
when (BatteryReceiver.health) {
BatteryManager.BATTERY_HEALTH_GOOD -> binding.idTv04.text = "Battery voltage: GOOD"
BatteryManager.BATTERY_HEALTH_OVERHEAT -> binding.idTv04.text ="Battery voltage: OVERHEAT"
BatteryManager.BATTERY_HEALTH_DEAD -> binding.idTv04.text ="Battery voltage: DEAD"
BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE -> binding.idTv04.text ="Battery voltage: OVER_VOLTAGE"
BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE -> binding.idTv04.text ="Battery voltage: UNSPECIFIED_FAILURE"
BatteryManager.BATTERY_HEALTH_COLD -> binding.idTv04.text ="Battery voltage: COLD"
else->binding.idTv04.text ="UNKNOWN"
}
binding.idTv05.text = "Battery model: ${BatteryReceiver.technology}"
}
override fun initListener() {
listOf(binding.idBatteryBack,binding.idBatteryFin).setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
RelsutActivity.launch(this@BatteryInfoActivity, title = RelsutActivity.type_battery_info)
finish()
}
})
}
}
\ No newline at end of file
package com.xm.test.myfilemaster.activity
import android.graphics.Color
import androidx.activity.OnBackPressedCallback
import androidx.core.view.updatePadding
import com.blankj.utilcode.util.BarUtils
import com.blankj.utilcode.util.ToastUtils
import com.xm.test.myfilemaster.databinding.ActivityLayoutCleaningBinding
import com.xm.test.myfilemaster.tools.BaseActivity
import com.xm.test.myfilemaster.tools.FileHelper
import com.xm.test.myfilemaster.tools.ad.AdmobAdHelper
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import java.io.File
import kotlin.random.Random
class CleaningActivity : BaseActivity<ActivityLayoutCleaningBinding>() {
private val list by lazy {
intent.getStringArrayExtra("list") ?: arrayOf()
}
override val isLightMode = true
override val binding: ActivityLayoutCleaningBinding by lazy {
ActivityLayoutCleaningBinding.inflate(layoutInflater)
}
private var size = 0L
override fun initView() {
// Enolmo.
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
AdmobAdHelper.showNativeAd(this, binding.idAd)
MainScope().launch(Dispatchers.IO) {
try {
list.forEach {
val file = File(it)
val fileSize = FileHelper.getSize(file)
if (FileHelper.deleteFile(file)) {
size += fileSize
}
}
} catch (_: Exception) {
} finally {
binding.root.postDelayed({
AdmobAdHelper.showInterstitialAd(this@CleaningActivity) {
binding.root.postDelayed(::toNext, 100)
}
}, Random.nextLong(2000, 5000))
}
}
}
private fun toNext() {
RelsutActivity.launch(this, title = RelsutActivity.type_clean_up, size = size)
finish()
}
override fun initListener() {
binding.idBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
onBackPressedDispatcher.addCallback(
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
ToastUtils.showShort("Scanning, please wait")
}
}
)
}
}
\ No newline at end of file
package com.xm.test.myfilemaster.activity
import android.content.Intent
import android.graphics.Color
import androidx.activity.OnBackPressedCallback
import androidx.core.view.updatePadding
import com.blankj.utilcode.util.BarUtils
import com.xm.test.myfilemaster.databinding.ActivityLayoutDcScanBinding
import com.xm.test.myfilemaster.tools.BaseActivity
import com.xm.test.myfilemaster.tools.ad.AdmobAdHelper
import kotlin.random.Random
class DcScanActivity:BaseActivity<ActivityLayoutDcScanBinding>() {
override val binding: ActivityLayoutDcScanBinding by lazy {
ActivityLayoutDcScanBinding.inflate(layoutInflater)
}
override fun initView() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
AdmobAdHelper.showNativeAd(this, binding.idFlAd)
binding.root.postDelayed({
AdmobAdHelper.showInterstitialAd(this) {
binding.root.postDelayed({
startActivity(Intent(this, BatteryInfoActivity::class.java))
finish()
}, Random.nextLong(600, 1400))
}
}, Random.nextLong(2500, 5000))
}
override fun initListener() {
binding.idTvDcScanBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
startActivity(Intent(this@DcScanActivity, BatteryInfoActivity::class.java))
finish()
}
})
}
}
\ No newline at end of file
package com.xm.test.myfilemaster.activity
import android.app.Activity
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.Environment
import android.provider.Settings
import androidx.core.view.isVisible
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.blankj.utilcode.util.FileUtils
import com.blankj.utilcode.util.TimeUtils
import com.blankj.utilcode.util.ToastUtils
import com.bumptech.glide.Glide
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.xm.test.myfilemaster.R
import com.xm.test.myfilemaster.databinding.ActivityLayoutFileDeleBinding
import com.xm.test.myfilemaster.tools.BaseActivity
import com.xm.test.myfilemaster.tools.FileHelper
import com.xm.test.myfilemaster.tools.KotlinExt.setOnClickListener
import com.xm.test.myfilemaster.tools.KotlinExt.string
import com.xm.test.myfilemaster.tools.ad.AdmobAdHelper
import com.xm.test.myfilemaster.tools.bean.FileBean
import kotlin.random.Random
class FileDeleActivity : BaseActivity<ActivityLayoutFileDeleBinding>() {
override val isLightMode = true
private var isSelectAll = false
private var intentType = 0
override val binding: ActivityLayoutFileDeleBinding by lazy {
ActivityLayoutFileDeleBinding.inflate(layoutInflater)
}
companion object {
fun launch(activity: Activity, type: Int) {
activity.startActivity(
Intent(activity, FileDeleActivity::class.java).putExtra(
"T",
type
)
)
}
}
private val type by lazy {
intent.getIntExtra("T", FileHelper.type_doc)
}
override fun initView() {
setView()
setListener()
AdmobAdHelper.showNativeAd(this, binding.idFlAd)
}
private fun setView() {
binding.idTitle.text = when (type) {
FileHelper.type_image -> {
intentType = 1
R.string.image.string()
}
FileHelper.type_video -> {
intentType = 2
R.string.video.string()
}
FileHelper.type_music -> R.string.audio.string()
FileHelper.type_word -> R.string.word.string()
FileHelper.type_doc -> R.string.document.string()
FileHelper.type_apk -> R.string.apk.string()
FileHelper.type_zip -> R.string.zip.string()
FileHelper.type_txt -> R.string.txt.string()
FileHelper.type_pdf -> R.string.pdf.string()
else -> ""
}
binding.idRl.run {
if (intentType == 0) {
layoutManager = LinearLayoutManager(context)
} else {
layoutManager = GridLayoutManager(context, 3)
}
adapter = mAdapter
}
}
private fun setListener() {
listOf(binding.idTitle, binding.idImgBack).setOnClickListener {
finish()
}
binding.idSelecall.setOnClickListener {
if (isSelectAll) {
isSelectAll = false
binding.idSelecall.text = R.string.select_all.string()
} else {
isSelectAll = true
binding.idSelecall.text = R.string.cance.string()
}
mAdapter.data.forEach { it.isSelect = isSelectAll }
mAdapter.notifyItemRangeChanged(0, mAdapter.data.size, 1)
}
binding.idDelete.setOnClickListener {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && !Environment.isExternalStorageManager()) {
val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
intent.addCategory("android.intent.category.DEFAULT")
intent.data = Uri.parse("package:${applicationContext.packageName}")
startActivity(intent)
} else {
val list = mAdapter.data.filter { it.isSelect && FileUtils.delete(it.path) }
if (list.isNotEmpty()) {
binding.idWaiting.isVisible = true
binding.idWaiting.postDelayed({
AdmobAdHelper.showInterstitialAd(
this,
Random.nextBoolean(),
isASkip = false
) {
binding.idWaiting.postDelayed({
binding.idWaiting.isVisible = false
ToastUtils.showShort(R.string.delete_suc.string())
list.forEach {
fileList.remove(it)
}
mAdapter.setList(fileList)
}, 1000)
}
}, 2000)
} else {
ToastUtils.showShort(R.string.delete_fail.string())
}
}
}
}
override fun onStart() {
super.onStart()
checkPermission()
}
override fun onPermissionsResult(isGranted: Boolean) {
if(isGranted){
FileHelper.isStop = false
FileHelper.getFilesByType(type) {
it ?: return@getFilesByType
fileList.addAll(it)
mAdapter.addData(it)
if (it.isNotEmpty()) {
binding.idProg.isVisible = false
binding.idTvEmpty.isVisible = false
}
if (FileHelper.isStop && mAdapter.data.isEmpty()) {
binding.idDelete.isEnabled = false
binding.idProg.isVisible = false
binding.idTvEmpty.isVisible = true
}
}
}else{
ToastUtils.showShort("No permission.")
finish()
}
}
private var isRequest = false
private val fileList = mutableListOf<FileBean>()
override fun onResume() {
super.onResume()
FileHelper.isStop = false
}
override fun onPause() {
super.onPause()
FileHelper.isStop = true
}
private val mAdapter by lazy {
object : BaseQuickAdapter<FileBean, BaseViewHolder>(
when (intentType) {
0 -> {
R.layout.item_other
}
else -> R.layout.item_meiti
}
) {
override fun convert(holder: BaseViewHolder, item: FileBean) {
if (intentType != 0) {
holder.setVisible(R.id.id_img_play, intentType == 2)
if (listOf("png", "jpg", "gif", "mp4").contains(item.type)) {
Glide.with(context).load(item.path).into(holder.getView(R.id.id_left_icon))
}
} else {
holder.setImageResource(
R.id.id_left_icon, when {
item.isDir -> R.mipmap.f_666
listOf("pdf").contains(item.type) -> R.mipmap.p_99
listOf("apk").contains(item.type) -> R.mipmap.a_11
listOf("txt").contains(item.type) -> R.mipmap.t_879
listOf("mp3").contains(item.type) -> R.mipmap.audio_11
listOf("doc", "docx").contains(item.type) -> R.mipmap.w_99
listOf(
"pdf",
"docx",
"doc",
"xls",
"ppt"
).contains(item.type) -> R.mipmap.d_11
listOf("zip").contains(item.type) -> R.mipmap.z_11
else -> R.mipmap.f_666
}
)
holder.setText(R.id.id_file_name, item.name)
holder.setText(
R.id.id_file_date, TimeUtils.millis2String(
item.time,
"dd.MM.yyyy HH:mm"
)
)
}
holder.setVisible(R.id.id_img_select, item.isSelect)
}
override fun convert(holder: BaseViewHolder, item: FileBean, payloads: List<Any>) {
holder.setVisible(R.id.id_img_select, item.isSelect)
}
init {
setOnItemClickListener { _, _, position ->
data[position].isSelect = !data[position].isSelect
if (data.all { it.isSelect }) {
isSelectAll = true
binding.idSelecall.text = R.string.cance.string()
} else {
isSelectAll = false
binding.idSelecall.text = R.string.select_all.string()
}
notifyItemRangeChanged(0, data.size, 1)
}
}
}
}
}
\ No newline at end of file
package com.xm.test.myfilemaster.activity
import android.content.Intent
import android.graphics.Color
import com.blankj.utilcode.util.BarUtils
import com.xm.test.myfilemaster.databinding.ActivityLayoutGuestBinding
import com.xm.test.myfilemaster.tools.BaseSplashActivity
import com.xm.test.myfilemaster.tools.ConfigHelper
import com.xm.test.myfilemaster.tools.ad.AdmobAdHelper
import com.xm.test.myfilemaster.tools.desk.DeskHelper
import com.xm.test.myfilemaster.tools.desk.NotifyHelper
class GuestActivity : BaseSplashActivity<ActivityLayoutGuestBinding>() {
override val binding: ActivityLayoutGuestBinding by lazy {
ActivityLayoutGuestBinding.inflate(layoutInflater)
}
override fun getProgressBar() =binding.idGuestPro
override fun getLaunchIntent(tag: String?, type: Int): Intent {
return when (tag) {
NotifyHelper.install, NotifyHelper.uninstall -> Intent(this, CleanUpActivity::class.java)
NotifyHelper.timer, DeskHelper.timer -> listOf(
Intent(this, CleanUpActivity::class.java),
Intent(this, ProcessScanActivity::class.java),
Intent(this, AntivirusActivity::class.java),
Intent(this, TmpScanActivity::class.java),
Intent(this, DcScanActivity::class.java),
)[type]
else -> Intent(this, GuideActivity::class.java)
}
}
override fun loadOpen(callback: () -> Unit) {
AdmobAdHelper.loadInterstitialAd(this)
AdmobAdHelper.loadAppOpenAd(onLoad = callback)
}
override fun showOpen(callback: () -> Unit) {
if (!ConfigHelper.isConfigA && AdmobAdHelper.isLaunchShowInter && AdmobAdHelper.isInterLoaded()) {
AdmobAdHelper.showInterstitialAd(this, onHidden = callback)
} else {
if(AdmobAdHelper.isOpenAdLoaded()){
AdmobAdHelper.showAppOpenAd(this, onHidden = callback)
}else{
AdmobAdHelper.showInterstitialAd(this, onHidden = callback)
}
}
AdmobAdHelper.loadNativeAd()
}
override fun initView() {
super.initView()
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
}
}
\ No newline at end of file
package com.xm.test.myfilemaster.activity
import android.content.Intent
import com.blankj.utilcode.util.SPUtils
import com.xm.test.myfilemaster.databinding.ActivityLayoutGuideBinding
import com.xm.test.myfilemaster.tools.BaseActivity
import com.xm.test.myfilemaster.tools.ConfigHelper
import com.xm.test.myfilemaster.tools.ad.AdmobAdHelper
class GuideActivity:BaseActivity<ActivityLayoutGuideBinding>() {
override val isLightMode = true
override val binding: ActivityLayoutGuideBinding by lazy {
ActivityLayoutGuideBinding.inflate(layoutInflater)
}
private var guideCount = 0
get() = SPUtils.getInstance().getInt("guideCount", field)
set(value) {
SPUtils.getInstance().put("guideCount", value, true)
field = value
}
override fun initView() {
if (ConfigHelper.isConfigA || guideCount >= 2) {
startActivity(Intent(this, MainActivity::class.java))
finish()
return
}
guideCount++
if (guideCount >= 2) {
startActivity(Intent(this, GuideCleanActivity::class.java))
finish()
}
}
override fun initListener() {
binding.root.setOnClickListener {
AdmobAdHelper.showInterstitialAd(this) {
binding.root.post {
startActivity(Intent(this, GuideCleanActivity::class.java))
finish()
}
}
}
}
}
\ No newline at end of file
package com.xm.test.myfilemaster.activity
import android.content.Intent
import android.graphics.Color
import androidx.core.view.updatePadding
import com.blankj.utilcode.util.BarUtils
import com.xm.test.myfilemaster.databinding.ActivityLayoutGuideCleanBinding
import com.xm.test.myfilemaster.tools.BaseActivity
import com.xm.test.myfilemaster.tools.KotlinExt.toFormatSize
import com.xm.test.myfilemaster.tools.ad.AdmobAdHelper
import kotlin.random.Random
class GuideCleanActivity:BaseActivity<ActivityLayoutGuideCleanBinding>() {
override val binding: ActivityLayoutGuideCleanBinding by lazy {
ActivityLayoutGuideCleanBinding.inflate(layoutInflater)
}
override fun initView() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
AdmobAdHelper.showNativeAd(this, binding.idNative)
binding.idSize.text ="${Random.nextLong(50 * 1024 * 1024, 200 * 1024 * 1024).toFormatSize()}"
}
override fun initListener() {
binding.idSkip.setOnClickListener {
startActivity(Intent(this, MainActivity::class.java))
finish()
}
binding.root.setOnClickListener {
startActivity(Intent(this, CleanUpActivity::class.java))
finish()
}
}
}
\ No newline at end of file
package com.xm.test.myfilemaster.activity
import android.graphics.Color
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.blankj.utilcode.util.BarUtils
import com.bumptech.glide.Glide
import com.xm.test.myfilemaster.databinding.ActivityLayoutImagesBinding
class ImagesActivity : AppCompatActivity() {
private lateinit var binding: ActivityLayoutImagesBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding = ActivityLayoutImagesBinding.inflate(layoutInflater)
setContentView(binding.root)
setImage()
}
private fun setImage(){
binding.idBack.setOnClickListener {
finish()
}
Glide.with(this).load(intent.getStringExtra("path"))
.into(binding.idBigImg)
}
}
\ No newline at end of file
package com.xm.test.myfilemaster.activity
import com.xm.test.myfilemaster.databinding.ActivityLayoutLargeFileBinding
import com.xm.test.myfilemaster.tools.BaseActivity
class LargeFileCleanActivity : BaseActivity<ActivityLayoutLargeFileBinding>() {
override val binding: ActivityLayoutLargeFileBinding by lazy {
ActivityLayoutLargeFileBinding.inflate(layoutInflater)
}
override fun initView() {
}
}
\ No newline at end of file
package com.xm.test.myfilemaster.application
import com.xm.test.myfilemaster.tools.BaseApplication
class FileMasterApplication : BaseApplication() {
override fun init() {
}
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
package com.xm.test.myfilemaster.tools.bean
data class MediaEntity(val path:String,val name:String="",val time:Long)
This diff is collapsed.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white" />
<corners android:radius="13dp" />
<stroke
android:width="1dp"
android:color="#DFE0F0" />
</shape>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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