Commit d645bfd6 authored by wanglei's avatar wanglei

...

parent 3084da4b
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<option name="LINE_SEPARATOR" value="&#13;&#10;" />
<option name="RIGHT_MARGIN" value="120" />
<JetCodeStyleSettings>
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings>
......
......@@ -4,7 +4,6 @@ plugins {
}
android {
namespace 'com.xm.test.myfile'
compileSdk 34
......@@ -63,47 +62,55 @@ dependencies {
androidTestImplementation libs.androidx.junit
androidTestImplementation libs.androidx.espresso.core
//noinspection GradleDependency
implementation 'androidx.viewpager2:viewpager2:1.0.0'
//Lottie动画
implementation "com.airbnb.android:lottie:3.6.0"
def dialogx_version = "0.0.49"
implementation "com.kongzue.dialogx:DialogX:${dialogx_version}"
implementation 'com.guolindev.permissionx:permissionx:1.7.1'
implementation 'com.github.bumptech.glide:glide:4.12.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
implementation 'com.applovin:applovin-sdk:+'
implementation 'com.applovin.mediation:google-adapter:+'
implementation 'com.applovin.mediation:vungle-adapter:+'
implementation 'com.applovin.mediation:facebook-adapter:+'
implementation 'com.applovin.mediation:mintegral-adapter:+'
implementation 'com.applovin.mediation:bytedance-adapter:+'
implementation 'com.google.android.gms:play-services-location:21.2.0'
implementation 'com.google.android.ump:user-messaging-platform:2.1.0'
implementation "androidx.lifecycle:lifecycle-process:2.6.2"
implementation("androidx.datastore:datastore-preferences:1.0.0")
implementation 'com.google.code.gson:gson:2.10.1'
implementation 'com.squareup.okhttp3:okhttp:4.10.0'
implementation("com.squareup.okhttp3:logging-interceptor:4.10.0")
// compile(name:'trustlook_cleanjunk_sdk_release_3.0.4.20240322',ext:'aar')
implementation files('libs/trustlook_cleanjunk_sdk_release_3.0.4.20240322.aar')
implementation files('libs/cloudscan_sdk_5.0.5.20240306.aar')
//公司配置上报相关
implementation("com.blankj:utilcodex:1.31.1")
implementation("androidx.datastore:datastore-preferences:1.0.0")
implementation 'com.google.code.gson:gson:2.10.1'
implementation 'com.squareup.okhttp3:okhttp:4.10.0'
implementation("com.squareup.okhttp3:logging-interceptor:4.10.0")
//广告相关
implementation(fileTree("libs"))
// implementation("com.applovin:applovin-sdk:+")
// implementation 'com.applovin.mediation:google-adapter:+'
// implementation 'com.applovin.mediation:vungle-adapter:+'
// implementation 'com.applovin.mediation:facebook-adapter:+'
// implementation 'com.applovin.mediation:mintegral-adapter:+'
// implementation 'com.applovin.mediation:bytedance-adapter:+'
// implementation 'com.google.android.ump:user-messaging-platform:2.1.0'
//google
implementation 'com.google.android.gms:play-services-location:21.2.0'
implementation("com.facebook.android:facebook-android-sdk:[8,9)")
//applovin
implementation 'com.applovin:applovin-sdk:12.4.2'
implementation 'com.applovin.mediation:google-adapter:23.0.0.0'
implementation 'com.applovin.mediation:ironsource-adapter:8.0.0.0.0'
implementation 'com.applovin.mediation:vungle-adapter:7.3.1.2'
implementation 'com.applovin.mediation:facebook-adapter:6.17.0.0'
implementation 'com.applovin.mediation:mintegral-adapter:16.7.21.0'
implementation 'com.applovin.mediation:bytedance-adapter:5.9.0.2.0'
implementation 'com.applovin.mediation:yandex-adapter:6.4.1.0'
//facebook
implementation 'com.facebook.android:facebook-android-sdk:[8,9)'
//firebase
implementation(platform("com.google.firebase:firebase-bom:32.1.0"))
implementation("com.google.firebase:firebase-database-ktx")
implementation("com.google.firebase:firebase-analytics-ktx")
}
......@@ -15,6 +15,7 @@ import com.xm.test.myfile.SpKey.isAgreeAppPageKey
import com.xm.test.myfile.activity.HomeActivity
import com.xm.test.myfile.ad.ComUtils
import com.xm.test.myfile.ad.MaxAdUtils
import com.xm.test.myfile.ad.MyReportViewListener.setMyReportViewListener
import com.xm.test.myfile.databinding.ActivityMainBinding
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
......@@ -47,7 +48,7 @@ class MainActivity : AppCompatActivity() {
startAppPage()
}
findViewById<View>(R.id.start_app_btn).setOnClickListener {
findViewById<View>(R.id.start_app_btn).setMyReportViewListener(javaClass.simpleName) {
val edit = MyApplication.mSp?.edit()
edit?.putBoolean(isAgreeAppPageKey, true)
edit?.apply()
......@@ -68,8 +69,7 @@ class MainActivity : AppCompatActivity() {
binding.llContent.visibility = View.VISIBLE
startProgress()
(application as MyApplication).initMax {
MaxAdUtils.loadOpenAd { flag ->
if (flag) {
MaxAdUtils.loadOpenAd {
timer(period = 300) {
if (isFinishing || isDestroyed) {
......@@ -88,7 +88,6 @@ class MainActivity : AppCompatActivity() {
}
}
}
}
MaxAdUtils.loadMaxNativeAd()
MaxAdUtils.loadInterstitialAd(this@MainActivity)
}
......
......@@ -13,6 +13,7 @@ import android.widget.ImageView
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.xm.test.myfile.R
import com.xm.test.myfile.ad.MyReportViewListener.setMyReportViewListener
import com.xm.test.myfile.util.BatteryUtil
import com.xm.test.myfile.util.SystemServerState
import java.util.Calendar
......@@ -56,36 +57,36 @@ class BatteryActivity : AppCompatActivity() {
}
private fun setOnClickListener() {
mQuitView.setOnClickListener {
mQuitView.setMyReportViewListener(javaClass.simpleName) {
finish()
}
mHotspotSwitch.setOnClickListener {
mHotspotSwitch.setMyReportViewListener(javaClass.simpleName) {
// isHotspotOpen = !isHotspotOpen
// setViewSwitch(mHotspotSwitch, isHotspotOpen)
startActivity(Intent(Settings.ACTION_DATA_ROAMING_SETTINGS))
}
mBluetoothSwitch.setOnClickListener {
mBluetoothSwitch.setMyReportViewListener(javaClass.simpleName) {
// isBluetoothOpen = !isBluetoothOpen
// setViewSwitch(mBluetoothSwitch, isBluetoothOpen)
startActivity(Intent(Settings.ACTION_BLUETOOTH_SETTINGS))
}
mAutoBrightSwitch.setOnClickListener {
mAutoBrightSwitch.setMyReportViewListener(javaClass.simpleName) {
// isAutoBrightOpen = !isAutoBrightOpen
// setViewSwitch(mAutoBrightSwitch, isAutoBrightOpen)
startActivity(Intent(Settings.ACTION_DISPLAY_SETTINGS))
}
mGpsSwitch.setOnClickListener {
mGpsSwitch.setMyReportViewListener(javaClass.simpleName) {
// isGpsOpen = !isGpsOpen
// setViewSwitch(mGpsSwitch, isGpsOpen)
startActivity(Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS))
}
findViewById<View>(R.id.battery_quit_btn_2).setOnClickListener {
findViewById<View>(R.id.battery_quit_btn_2).setMyReportViewListener(javaClass.simpleName) {
finish()
}
findViewById<View>(R.id.battery_go_to_result).setOnClickListener {
findViewById<View>(R.id.battery_go_to_result).setMyReportViewListener(javaClass.simpleName) {
val intent = Intent(this, ResultPageActivity::class.java)
intent.putExtra("pageTitle", "Battery")
intent.putExtra("pageName", "battery")
......
......@@ -25,6 +25,7 @@ import com.cm.plugincluster.junkengine.junk.bean.MediaFile
import com.cm.plugincluster.junkengine.junk.engine.MEDIA_TYPE
import com.xm.test.myfile.MyApplication
import com.xm.test.myfile.R
import com.xm.test.myfile.ad.MyReportViewListener.setMyReportViewListener
import com.xm.test.myfile.adapter.CleanAdapter
import com.xm.test.myfile.adapter.CleanAdapter2
import com.xm.test.myfile.model.CleanBean
......@@ -135,11 +136,11 @@ class CleanActivity : AppCompatActivity(), CleanAdapter2.IClean {
private fun setViewOnclickListener() {
mQuitBtn?.setOnClickListener {
mQuitBtn?.setMyReportViewListener(javaClass.simpleName) {
finish()
}
findViewById<View>(R.id.clean_click_text).setOnClickListener {
findViewById<View>(R.id.clean_click_text).setMyReportViewListener(javaClass.simpleName) {
mAnimation.visibility = View.VISIBLE
Thread(Runnable {
Thread.sleep(1000)
......
......@@ -9,6 +9,7 @@ import android.widget.VideoView
import androidx.appcompat.app.AppCompatActivity
import com.bumptech.glide.Glide
import com.xm.test.myfile.R
import com.xm.test.myfile.ad.MyReportViewListener.setMyReportViewListener
class ImageShowActivity : AppCompatActivity() {
......@@ -46,11 +47,11 @@ class ImageShowActivity : AppCompatActivity() {
}
private fun setOnClickListener() {
mShareBtn.setOnClickListener {
mShareBtn.setMyReportViewListener(javaClass.simpleName) {
val uri = Uri.parse(mFilePath)
shareFile(uri)
}
mDeleteBtn.setOnClickListener {
mDeleteBtn.setMyReportViewListener(javaClass.simpleName) {
}
}
......
......@@ -15,6 +15,7 @@ import com.kongzue.dialogx.dialogs.WaitDialog
import com.test.mydemo3.activity.ImageShowActivity
import com.xm.test.myfile.MyApplication
import com.xm.test.myfile.R
import com.xm.test.myfile.ad.MyReportViewListener.setMyReportViewListener
import com.xm.test.myfile.adapter.MediaAdapter
import com.xm.test.myfile.model.FileBean
import com.xm.test.myfile.util.FileUtil
......@@ -42,7 +43,8 @@ class MediaActivity : AppCompatActivity() {
// private lateinit var binding: ActivityMediaBinding
private var mItemAdapter: MediaAdapter? = null
// private var mItemAdapter: MediaAdapter2? = null
// private var mItemAdapter: MediaAdapter2? = null
private var mDataList: ArrayList<String> = ArrayList<String>()
private var mCheckedDataList: ArrayList<FileBean> = ArrayList<FileBean>()
......@@ -98,9 +100,9 @@ class MediaActivity : AppCompatActivity() {
mItemAdapter = MediaAdapter(mItemDataList, this, mItemCheckedArray, mFileType!!, 115)
mGridView.adapter = mItemAdapter
if (HomeActivity.isPermission){
if (HomeActivity.isPermission) {
getListData()
}else{
} else {
mGridView.visibility = View.GONE
mEditBtn.visibility = View.GONE
mNotPermissionView.visibility = View.VISIBLE
......@@ -136,7 +138,7 @@ class MediaActivity : AppCompatActivity() {
private fun setOnclickListener() {
mEditBtn.setOnClickListener {
mEditBtn.setMyReportViewListener(javaClass.simpleName) {
mQuitBtn.visibility = View.GONE
mEditBtn.visibility = View.GONE
mSelectBar.visibility = View.VISIBLE
......@@ -146,13 +148,13 @@ class MediaActivity : AppCompatActivity() {
isClickEditBtn = true
mItemAdapter?.notifyDataSetChanged()
}
mCancelBtn.setOnClickListener {
mCancelBtn.setMyReportViewListener(javaClass.simpleName) {
cancelBtn()
}
mQuitBtn.setOnClickListener {
mQuitBtn.setMyReportViewListener(javaClass.simpleName) {
finish()
}
mCheckedBtn.setOnClickListener {
mCheckedBtn.setMyReportViewListener(javaClass.simpleName) {
mIsCheckClick = !mIsCheckClick
selectAll()
}
......@@ -170,24 +172,21 @@ class MediaActivity : AppCompatActivity() {
startActivity(intent)
}
}
findViewById<View>(R.id.go_to_setting_btn).setOnClickListener {
findViewById<View>(R.id.go_to_setting_btn).setMyReportViewListener(javaClass.simpleName) {
PermissionUtil.requestPermission(this)
}
mDeleteBtn.setOnClickListener {
val customDialog = CustomDialog(this)
customDialog.setsCancel(View.OnClickListener {
customDialog.dismiss()
}).setsConfirm(View.OnClickListener {
for (fileBean in mCheckedDataList!!){
mDeleteBtn.setMyReportViewListener(javaClass.simpleName) {
val customDialog = CustomDialog(this, sureClick = {
for (fileBean in mCheckedDataList) {
MyApplication.mCleanSdk?.delete(File(fileBean.filePath))
mItemDataList.remove(fileBean)
}
customDialog.dismiss()
mItemAdapter?.notifyDataSetChanged()
}).show()
})
customDialog.show()
customDialog.isShowEditText(false)
customDialog.setsTitle("Delete")
customDialog.setsHint("Are you sure you want to delete ${mCheckedDataList.size} item?")
.setsTitle("Delete")
.setsHint("Are you sure you want to delete ${mCheckedDataList.size} item?")
}
}
......
......@@ -9,6 +9,7 @@ import android.widget.Toast
import androidx.activity.ComponentActivity
import androidx.core.view.isVisible
import com.xm.test.myfile.R
import com.xm.test.myfile.ad.MyReportViewListener.setMyReportViewListener
import com.xm.test.myfile.adapter.FilesItemViewAdapter
import com.xm.test.myfile.fragment.InternalStorageFragment
import com.xm.test.myfile.model.FileBean
......@@ -38,15 +39,16 @@ class MoveOrCopyActivity : ComponentActivity() {
}
private fun setViewOnClickListener() {
findViewById<View>(R.id.btn_quit).setOnClickListener {
if(backQuit()) finish()
findViewById<View>(R.id.btn_quit).setMyReportViewListener(javaClass.simpleName) {
if (backQuit()) finish()
}
findViewById<View>(R.id.btn_cancel_bottom).setOnClickListener(View.OnClickListener {
findViewById<View>(R.id.btn_cancel_bottom).setMyReportViewListener(javaClass.simpleName) {
finish()
})
findViewById<View>(R.id.btn_move_bottom).setOnClickListener(View.OnClickListener {
var moveFile = if (mCurrentBean != null) {
}
findViewById<View>(R.id.btn_move_bottom).setMyReportViewListener(javaClass.simpleName) {
val moveFile = if (mCurrentBean != null) {
FileUtil.moveFile(mCheckedItems[0].filePath, mCurrentBean!!.filePath)
} else {
FileUtil.moveFile(mCheckedItems[0].filePath, FileUtil.EXTERNAL_STORAGE)
......@@ -57,7 +59,7 @@ class MoveOrCopyActivity : ComponentActivity() {
Toast.makeText(this, "move failed!", Toast.LENGTH_LONG).show()
}
finish()
})
}
findViewById<View>(R.id.btn_copy_bottom).setOnClickListener(View.OnClickListener {
var moveFile = if (mCurrentBean != null) {
......@@ -98,8 +100,8 @@ class MoveOrCopyActivity : ComponentActivity() {
findViewById<View>(R.id.btn_cancel_bottom).visibility = View.VISIBLE
}
fun setAdapter(){
if (mItemDatas?.size!! > 0){
fun setAdapter() {
if (mItemDatas?.size!! > 0) {
mNotFileFoundLayout.visibility = View.GONE
mListView?.visibility = View.VISIBLE
}
......@@ -110,16 +112,17 @@ class MoveOrCopyActivity : ComponentActivity() {
setOnListViewItemClickListener()
}
fun setOnListViewItemClickListener(){
fun setOnListViewItemClickListener() {
findViewById<ListView>(R.id.files_item_listview).setOnItemClickListener { parent, view, position, id ->
mCurrentBean = mItemDatas?.get(position)
if (!mCurrentBean?.fileType.equals("dir")){
if (!mCurrentBean?.fileType.equals("dir")) {
return@setOnItemClickListener
}
mFilesItemLists.add(mItemDatas!!)
mCurrentBeans.add(mCurrentBean!!)
mCurrantFilePathTv.text = "Internal Storage/ ${mCurrentBean?.fileName}"
if (mCurrentBean?.fileType.equals("dir") && mCurrentBean?.childList?.size!! > 0){
if (mCurrentBean?.fileType.equals("dir") && mCurrentBean?.childList?.size!! > 0) {
Thread(Runnable {
runOnUiThread {
mItemDatas = mCurrentBean!!.childList
......@@ -127,25 +130,27 @@ class MoveOrCopyActivity : ComponentActivity() {
mItemAdapter?.setData(fileListSort)
}
}).start()
}else if(mCurrentBean?.fileType.equals("dir") && mCurrentBean?.childList?.size == 0){
} else if (mCurrentBean?.fileType.equals("dir") && mCurrentBean?.childList?.size == 0) {
mListView?.visibility = View.GONE
mNotFileFoundLayout.visibility = View.VISIBLE
}
}
}
override fun onDestroy() {
if(backQuit()) finish()
if (backQuit()) finish()
mItemAdapter?.setEditClickState(true)
super.onDestroy()
// BaseActivity.isClickEditBtn = true
}
fun backQuit(): Boolean{
fun backQuit(): Boolean {
val size = mFilesItemLists.size
if (size-1 == 0){
if (size - 1 == 0) {
mCurrantFilePathTv.text = "Internal Storage/"
}
if (size < 1){
if (mNotFileFoundLayout.isVisible && mItemDatas?.size!! > 0){
if (size < 1) {
if (mNotFileFoundLayout.isVisible && mItemDatas?.size!! > 0) {
mListView?.visibility = View.VISIBLE
mNotFileFoundLayout.visibility = View.GONE
mItemAdapter?.setData(mItemDatas!!)
......@@ -153,17 +158,17 @@ class MoveOrCopyActivity : ComponentActivity() {
}
mCurrentBeans.clear()
return true
}else{
mItemAdapter?.setData(mFilesItemLists[size-1])
mItemDatas = mFilesItemLists[size-1]
} else {
mItemAdapter?.setData(mFilesItemLists[size - 1])
mItemDatas = mFilesItemLists[size - 1]
mListView?.visibility = View.VISIBLE
mNotFileFoundLayout.visibility = View.GONE
mFilesItemLists.remove(mFilesItemLists[size-1])
mCurrentBeans.remove(mCurrentBeans[size-1])
if (size - 1 > 0){
mCurrentBean = mCurrentBeans[size-2]
mFilesItemLists.remove(mFilesItemLists[size - 1])
mCurrentBeans.remove(mCurrentBeans[size - 1])
if (size - 1 > 0) {
mCurrentBean = mCurrentBeans[size - 2]
mCurrantFilePathTv.text = "Internal Storage/ ${mCurrentBean?.fileName}"
}else{
} else {
mCurrantFilePathTv.text = "Internal Storage/"
}
return false
......@@ -171,7 +176,7 @@ class MoveOrCopyActivity : ComponentActivity() {
}
override fun onBackPressed() {
if (backQuit()){
if (backQuit()) {
super.onBackPressed()
}
}
......
......@@ -4,6 +4,7 @@ import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.activity.ComponentActivity
import com.xm.test.myfile.ad.MyReportViewListener.setMyReportViewListener
import com.xm.test.myfile.antivirus.AntivirusActivity
import com.xm.test.myfile.databinding.ResultLayoutBinding
......@@ -45,27 +46,27 @@ class ResultPageActivity : ComponentActivity() {
}
fun setViewOnClickListener(){
binding.goToAntivirus.setOnClickListener {
binding.goToAntivirus.setMyReportViewListener(javaClass.simpleName) {
startActivity(Intent(this, AntivirusActivity::class.java))
finish()
}
binding.goToBattery.setOnClickListener {
binding.goToBattery.setMyReportViewListener(javaClass.simpleName) {
startActivity(Intent(this, BatteryActivity::class.java))
finish()
}
binding.goToScanLarge.setOnClickListener {
binding.goToScanLarge.setMyReportViewListener(javaClass.simpleName) {
startActivity(Intent(this, ScanLargeFilesActivity::class.java))
finish()
}
binding.goToScanSimilarImages.setOnClickListener {
binding.goToScanSimilarImages.setMyReportViewListener(javaClass.simpleName) {
startActivity(Intent(this, SimilarImagesActivity::class.java))
finish()
}
binding.goToClean.setOnClickListener {
binding.goToClean.setMyReportViewListener(javaClass.simpleName) {
startActivity(Intent(this, CleanActivity::class.java))
finish()
}
binding.resultQuitBtn.setOnClickListener {
binding.resultQuitBtn.setMyReportViewListener(javaClass.simpleName) {
finish()
}
}
......
......@@ -12,41 +12,37 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.isVisible
import com.trustlook.sdk.data.AppInfo
import com.xm.test.myfile.R
import com.xm.test.myfile.ad.MaxAdUtils
import com.xm.test.myfile.ad.MyReportViewListener.setMyReportViewListener
import com.xm.test.myfile.adapter.ScanResultAdapter
import com.xm.test.myfile.databinding.ActivityScanResultBinding
import com.xm.test.myfile.view.CustomDialog
class ScanResultActivity : AppCompatActivity() {
private var mResult: ArrayList<AppInfo>? = null
private lateinit var mListView: ListView
private lateinit var mAppinfoPage: View
private lateinit var mDeleteGroupView: View
private lateinit var mGoItBtn: TextView
private lateinit var mScanResultListLyout: View
private lateinit var mAntivirusSuccessView: View
private var mScanResultAdapter: ScanResultAdapter? = null
private var mResult: ArrayList<AppInfo> = arrayListOf()
private lateinit var mScanResultAdapter: ScanResultAdapter
private lateinit var mIdentifyText: TextView
private lateinit var mSettleText: TextView
private var mCurrentAppInfo: AppInfo? = null
private var mCurr = 0
private var mIgnoreCount = 0
private var mCurr = 0//总数
private var mIgnoreCount = 0//忽略的数量
private lateinit var binding: ActivityScanResultBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_scan_result)
binding = ActivityScanResultBinding.inflate(layoutInflater)
setContentView(binding.root)
mResult = intent.getSerializableExtra("result") as ArrayList<AppInfo>
mCurr = intent.getIntExtra("curr", 0)
findViewById<TextView>(R.id.scan_result_secure_num_text).text =
intent.getStringExtra("total")
binding.tvScanNumber.text = intent.getStringExtra("total")
initView()
setViewClickListener()
}
private fun setViewClickListener() {
mListView.setOnItemClickListener { parent, view, position, id ->
// Intent(this, )
binding.lvVirusApp.setOnItemClickListener { parent, view, position, id ->
val appIcon = findViewById<ImageView>(R.id.scan_app_info_icon)
val appName = findViewById<TextView>(R.id.scan_app_info_name)
val appDate = findViewById<TextView>(R.id.scan_app_info_date)
......@@ -57,80 +53,57 @@ class ScanResultActivity : AppCompatActivity() {
appIcon.setImageDrawable(packageInfo.applicationInfo.loadIcon(packageManager))
appName.text = mResult!![position].appName
mCurrentAppInfo = mResult!![position]
// mResult!![position]
mAppinfoPage.visibility = View.VISIBLE
mDeleteGroupView.visibility = View.VISIBLE
mScanResultListLyout.visibility = View.GONE
mGoItBtn.visibility = View.GONE
virusDetail()
}
findViewById<View>(R.id.scan_delete_yes).setOnClickListener {
val customDialog = CustomDialog(this)
customDialog.setsCancel {
customDialog.dismiss()
}.setsConfirm {
binding.tvDelete.setMyReportViewListener(javaClass.simpleName) {
val customDialog = CustomDialog(this, sureClick = {
val packageName = mCurrentAppInfo!!.packageName // 要卸载的应用包名
val intent = Intent(Intent.ACTION_UNINSTALL_PACKAGE)
intent.data = Uri.parse("package:$packageName")
startActivity(intent)
mAppinfoPage.visibility = View.GONE
mDeleteGroupView.visibility = View.GONE
mGoItBtn.visibility = View.VISIBLE
mScanResultListLyout.visibility = View.VISIBLE
customDialog.dismiss()
// Intent(Intent.ACTION_DELETE, Uri.parse("package:${mCurrentAppInfo!!.packageName}"))
// startActivity(intent)
// mResult?.remove(mCurrentAppInfo!!)
}.show()
customDialog.isShowEditText(false)
customDialog.setsTitle("Delete")
customDialog.setsHint("Do you want to uninstall this app?")
customDialog.setsRightDelete("Delete")
virusDetail()
})
customDialog.show()
customDialog
.isShowEditText(false)
.setsTitle("Delete")
.setsHint("Do you want to uninstall this app?")
.setsRightDelete("Delete")
}
findViewById<View>(R.id.scan_delete_ignore).setOnClickListener {
binding.tvIgnore.setMyReportViewListener(javaClass.simpleName) {
val customDialog = CustomDialog(this)
customDialog.setsCancel {
customDialog.dismiss()
}.setsConfirm {
val customDialog = CustomDialog(this, sureClick = {
mCurrentAppInfo?.let {
mIgnoreCount++
mResult?.remove(mCurrentAppInfo!!)
mAppinfoPage.visibility = View.GONE
mDeleteGroupView.visibility = View.GONE
mGoItBtn.visibility = View.VISIBLE
mScanResultListLyout.visibility = View.VISIBLE
mScanResultAdapter?.notifyDataSetChanged()
customDialog.dismiss()
}.show()
mResult.remove(it)
virusList()
mScanResultAdapter.notifyDataSetChanged()
}
})
customDialog.show()
customDialog.isShowEditText(false)
// customDialog.setsTitle("Delete")
customDialog.setShowTitle(false)
customDialog.setsHint("Are you sure you want to ignore the app?")
customDialog.setRightBtnText("Ignore")
.setShowTitle(false)
.setsHint("Are you sure you want to ignore the app?")
.setRightBtnText("Ignore")
}
findViewById<View>(R.id.antivirus_success_quit_btn).setOnClickListener {
binding.includeVirusFinish.ivBack.setMyReportViewListener(javaClass.simpleName) {
finish()
}
findViewById<View>(R.id.scan_result_go_it_text).setOnClickListener {
mSettleText.text = mIgnoreCount.toString()
mAntivirusSuccessView.visibility = View.VISIBLE
}
findViewById<View>(R.id.scan_result_quit_btn).setOnClickListener {
if (mAppinfoPage.isVisible) {
mAppinfoPage.visibility = View.GONE
mDeleteGroupView.visibility = View.GONE
mGoItBtn.visibility = View.VISIBLE
mScanResultListLyout.visibility = View.VISIBLE
} else {
finish()
binding.tvGot.setMyReportViewListener(javaClass.simpleName) {
}
binding.ivBack.setMyReportViewListener(javaClass.simpleName) {
onBackPressed()
}
findViewById<View>(R.id.scan_result_finish_text).setOnClickListener {
findViewById<View>(R.id.scan_result_finish_text).setMyReportViewListener(javaClass.simpleName) {
val intent = Intent(this, ResultPageActivity::class.java)
intent.putExtra("pageTitle", "Antivirus")
intent.putExtra("pageName", "antivirus")
......@@ -141,33 +114,47 @@ class ScanResultActivity : AppCompatActivity() {
}
private fun initView() {
mListView = findViewById(R.id.scan_result_list)
mAppinfoPage = findViewById(R.id.app_info_page_layout)
mDeleteGroupView = findViewById(R.id.scan_result_delete_group_layout)
mGoItBtn = findViewById(R.id.scan_result_go_it_text)
mScanResultListLyout = findViewById(R.id.scan_result_list_layout)
mAntivirusSuccessView = findViewById(R.id.antivirus_success_view)
mIdentifyText = findViewById(R.id.identify_num_text)
mSettleText = findViewById(R.id.settle_num_text)
mIdentifyText.text = mCurr.toString()
mScanResultAdapter = ScanResultAdapter(mResult!!, this)
mScanResultAdapter = ScanResultAdapter(mResult, this)
mListView.adapter = mScanResultAdapter
binding.lvVirusApp.adapter = mScanResultAdapter
}
override fun onBackPressed() {
if (mAppinfoPage.isVisible) {
mAppinfoPage.visibility = View.GONE
mDeleteGroupView.visibility = View.GONE
mGoItBtn.visibility = View.VISIBLE
mScanResultListLyout.visibility = View.VISIBLE
if (binding.llVirusDetail.isVisible) {
virusList()
} else {
super.onBackPressed()
}
}
fun virusList() {
binding.llVirusDetail.visibility = View.GONE
binding.llButtonYn.visibility = View.GONE
binding.llVirusResult.visibility = View.VISIBLE
binding.tvGot.visibility = View.VISIBLE
}
fun virusDetail() {
binding.llVirusResult.visibility = View.GONE
binding.tvGot.visibility = View.GONE
binding.llVirusDetail.visibility = View.VISIBLE
binding.llButtonYn.visibility = View.VISIBLE
}
fun virusFinish() {
binding.llVirusResult.visibility = View.GONE
binding.tvGot.visibility = View.GONE
binding.includeVirusFinish.root.visibility = View.VISIBLE
binding.includeVirusFinish.tvSettleNum.text = mIgnoreCount.toString()
MaxAdUtils.showMaxNativeAd(this, binding.includeVirusFinish.flAd, slotname = "native_slot")
}
override fun onResume() {
super.onResume()
if (mCurrentAppInfo != null) {
......
......@@ -22,7 +22,7 @@ import com.xm.test.myfile.model.FileBean
import com.xm.test.myfile.view.CustomDialog
import java.io.File
class SimilarImagesActivity : AppCompatActivity(), OnClickListener, SimilarBeanAdapter.RefreshNumberText{
class SimilarImagesActivity : AppCompatActivity(), OnClickListener, SimilarBeanAdapter.RefreshNumberText {
private lateinit var mTitleText: TextView
private lateinit var mShareBtn: ImageView
......@@ -46,7 +46,7 @@ class SimilarImagesActivity : AppCompatActivity(), OnClickListener, SimilarBeanA
private var mSimilarDatas = ArrayList<ArrayList<FileBean>>()
companion object{
companion object {
var isClickEditBtn: Boolean = false
var switchNumber: Int = 0
var isClickCheckBoxAllBtn: Boolean = false
......@@ -54,7 +54,6 @@ class SimilarImagesActivity : AppCompatActivity(), OnClickListener, SimilarBeanA
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_duplicate_images)
......@@ -92,7 +91,7 @@ class SimilarImagesActivity : AppCompatActivity(), OnClickListener, SimilarBeanA
setNumber(0)
startDuplicateImages()
// mDeleteBtn.setOnClickListener {
// mDeleteBtn.setMyReportViewListener(javaClass.simpleName) {
// }
}
......@@ -127,12 +126,12 @@ class SimilarImagesActivity : AppCompatActivity(), OnClickListener, SimilarBeanA
mRecycleView.visibility = View.GONE
findViewById<View>(R.id.not_file_found_layout).visibility = View.VISIBLE
mEditBtn.visibility = View.GONE
}else{
} else {
findViewById<View>(R.id.not_file_found_layout).visibility = View.GONE
mRecycleView.visibility = View.VISIBLE
mEditBtn.visibility = View.VISIBLE
// mImageItemAdapter?.setData(mDataBeans)
Log.e("yanglin", "onSmilarScanFinish: mSimilarDatas.size = ${mSimilarDatas.size}", )
Log.e("yanglin", "onSmilarScanFinish: mSimilarDatas.size = ${mSimilarDatas.size}")
mSimilarBeanAdapter?.setData(mSimilarDatas)
}
}
......@@ -144,20 +143,23 @@ class SimilarImagesActivity : AppCompatActivity(), OnClickListener, SimilarBeanA
override fun onClick(v: View?) {
when(v?.id){
R.id.btn_cancel ->{
when (v?.id) {
R.id.btn_cancel -> {
cancel()
}
R.id.btn_quit ->{
R.id.btn_quit -> {
finish()
}
R.id.btn_new ->{
R.id.btn_new -> {
// createNewDir()
}
R.id.btn_edit ->{
R.id.btn_edit -> {
mNewBtn.visibility = View.GONE
mQuitBtn.visibility = View.GONE
mEditBtn.visibility =View.GONE
mEditBtn.visibility = View.GONE
mDeleteBtn.visibility = View.VISIBLE
mCancelBtn.visibility = View.VISIBLE
......@@ -169,17 +171,15 @@ class SimilarImagesActivity : AppCompatActivity(), OnClickListener, SimilarBeanA
mSimilarBeanAdapter?.refreshItem()
}
R.id.btn_delete ->{
val customDialog = CustomDialog(this)
customDialog.setsCancel(View.OnClickListener {
customDialog.dismiss()
}).setsConfirm(View.OnClickListener {
for (fileBean in mSimilarBeanAdapter?.mCheckedLists!!){
R.id.btn_delete -> {
val customDialog = CustomDialog(this, sureClick = {
for (fileBean in mSimilarBeanAdapter?.mCheckedLists!!) {
MyApplication.mCleanSdk?.delete(File(fileBean.filePath))
for (i in 0..<mSimilarDatas.size){
for (i in 0..<mSimilarDatas.size) {
mSimilarDatas[i].forEach {
if (fileBean.filePath.contains(it.filePath)){
Log.e("yanglin", "onClick: ${mSimilarDatas[i]}", )
if (fileBean.filePath.contains(it.filePath)) {
Log.e("yanglin", "onClick: ${mSimilarDatas[i]}")
mSimilarDatas[i].remove(fileBean)
return@forEach
}
......@@ -191,30 +191,29 @@ class SimilarImagesActivity : AppCompatActivity(), OnClickListener, SimilarBeanA
mSimilarBeanAdapter?.notifyDataSetChanged()
mSimilarBeanAdapter?.refreshItem()
setNumber(0)
customDialog.dismiss()
}).show()
customDialog.isShowEditText(false)
customDialog.setsTitle("Delete")
customDialog.setsHint("Are you sure you want to delete ${mSimilarBeanAdapter?.mCheckedLists!!.size ?: 0} item?")
})
customDialog.show()
customDialog
.isShowEditText(false)
.setsTitle("Delete")
.setsHint("Are you sure you want to delete ${mSimilarBeanAdapter?.mCheckedLists!!.size ?: 0} item?")
}
R.id.checkbox_item_all ->{
R.id.checkbox_item_all -> {
isClickCheckBoxAllBtn = !isClickCheckBoxAllBtn
mCheckItemSelectAllBtn.isChecked = isClickCheckBoxAllBtn
// mImageItemAdapter?.selectAll(isClickCheckBoxAllBtn)
mSimilarBeanAdapter?.selectAll(isClickCheckBoxAllBtn)
mSimilarBeanAdapter?.refreshItem()
// mBaseViewModel.setNumber(mSimilarBeanAdapter?.mCheckedLists!!.size)
}
}
}
fun cancel(){
fun cancel() {
// setStateCheckedMap(false)
mSimilarBeanAdapter?.selectAll(false)
mNewBtn.visibility = View.VISIBLE
mQuitBtn.visibility = View.VISIBLE
mEditBtn.visibility =View.VISIBLE
mEditBtn.visibility = View.VISIBLE
mCancelBtn.visibility = View.GONE
mDeleteBtn.visibility = View.GONE
mShareBtn.visibility = View.GONE
......@@ -231,9 +230,9 @@ class SimilarImagesActivity : AppCompatActivity(), OnClickListener, SimilarBeanA
}
override fun onBackPressed() {
if (mCancelBtn.isVisible){
if (mCancelBtn.isVisible) {
cancel()
}else{
} else {
super.onBackPressed()
}
}
......
......@@ -23,26 +23,9 @@ import java.io.IOException
object EventHelper {
private val url by lazy {
fun commonData(): JSONObject {
val pkg = ConfigHelper.packageName
val url = StringBuilder("${ConfigHelper.eventUrl}/${pkg.filter { it.isLowerCase() }.substring(4, 9)}sp")
url.append("?pkg=$pkg")
url.toString()
}
fun event(key: String, value: String? = null, ext: JSONObject? = null, isSingleEvent: Boolean = false) {
if (isSingleEvent) {
val stringSet = SPUtils.getInstance().getStringSet("singleEvent")
if (stringSet.contains(key)) {
return
}
}
val pkg = ConfigHelper.packageName
val d1 = JSONObject()
.put("action", key)
.put("value", value)
.put("ext", ext)
val d2 = JSONObject()
return JSONObject()
.put("${pkg}_1", "${ScreenUtils.getScreenHeight()}")
.put("${pkg}_2", "${ScreenUtils.getScreenWidth()}")
.put("${pkg}_3", DeviceUtils.getModel())
......@@ -57,26 +40,40 @@ object EventHelper {
.put("${pkg}_14", "${AppUtils.getAppVersionCode()}")
.put("${pkg}_15", "google")
.put("${pkg}_24", BuildConfig.BUILD_TYPE)
// .put("${pkg}_25", PhoneTools.isRoot())
.put("${pkg}_25", KokoReportHelper.isShellRooted())
// .put("${pkg}_26", PhoneTools.isHooked())
.put("${pkg}_26", KokoReportHelper.isHooked())
// .put("${pkg}_27", PhoneTools.isEmulator())
.put("${pkg}_27", KokoReportHelper.isVirtualMachine())
// .put("${pkg}_29", PhoneTools.checkWifiProxy())
.put("${pkg}_29", KokoReportHelper.isWifiProxy(MyApplication.fContext))
// .put("${pkg}_30", PhoneTools.hasVPN())
.put("${pkg}_28", KokoReportHelper.isSimCardInserted(MyApplication.fContext))
.put("${pkg}_29", KokoReportHelper.isProxy(MyApplication.fContext))
.put("${pkg}_30", KokoReportHelper.isVpnConnected(MyApplication.fContext))
// .put("${pkg}_31", if(DeviceUtils.isDevelopmentSettingsEnabled()){1} else 0)
.put("${pkg}_31", if (KokoReportHelper.isEnableDeveloperDebug(MyApplication.fContext)) 1 else 0)
// .put("${pkg}_32", PhoneTools.isBatteryCharg())
.put("${pkg}_31", KokoReportHelper.isEnableDeveloperDebug(MyApplication.fContext))
.put("${pkg}_32", isCharging(MyApplication.fContext))
// .put("${pkg}_33", ConfigHelper.sensorParm)
.put("${pkg}_33", GravitySensorManager.sensorParm)
.put("${pkg}_33", GravitySensorManager.sensorParam)
}
private val url by lazy {
val pkg = ConfigHelper.packageName
val url = StringBuilder("${ConfigHelper.eventUrl}/${pkg.filter { it.isLowerCase() }.substring(4, 9)}sp")
url.append("?pkg=$pkg")
url.toString()
}
fun event(key: String, value: String? = null, ext: JSONObject? = null, isSingleEvent: Boolean = false) {
if (isSingleEvent) {
val stringSet = SPUtils.getInstance().getStringSet("singleEvent")
if (stringSet.contains(key)) {
return
}
}
val d1 = JSONObject()
.put("action", key)
.put("value", value)
.put("ext", ext)
val data = JSONObject()
.put("data", d1)
.put("bp", d2)
.put("bp", commonData())
.toString()
......
......@@ -20,27 +20,12 @@ class GravitySensorManager(val context: Context) {
private var sensorManager: SensorManager = context.getSystemService(Context.SENSOR_SERVICE) as SensorManager
private var mySensorEventListener: MySensorEventListener? = null
private var xWave = 0f
private var yWave = 0f
private var zWave = 0f
private val initValue = AtomicBoolean(false)
companion object {
private var x: Float = 0f
private var y: Float = 0f
private var z: Float = 0f
var sensorParm: String = "$x:$y:$z"
}
init {
val time = Timer()
val timerTask = object : TimerTask() {
override fun run() {
}
}
time.schedule(timerTask, 5.seconds.toLong(DurationUnit.MILLISECONDS), 20.seconds.toLong(DurationUnit.MILLISECONDS))
var sensorParam: String = "$x:$y:$z"
}
inner class MySensorEventListener : SensorEventListener {
......@@ -50,27 +35,11 @@ class GravitySensorManager(val context: Context) {
*/
override fun onSensorChanged(event: SensorEvent) {
if (event.sensor.type == Sensor.TYPE_ACCELEROMETER) {
// if (!initValue.get()) {
// x = event.values[SensorManager.DATA_X]
// y = event.values[SensorManager.DATA_Y]
// z = event.values[SensorManager.DATA_Z]
// initValue.set(true)
// } else {
//
// val changeX = x - event.values[SensorManager.DATA_X]
// val changeY = y - event.values[SensorManager.DATA_Y]
// val changeZ = z - event.values[SensorManager.DATA_Z]
//
// xWave = changeX.coerceAtLeast(xWave)
// yWave = changeY.coerceAtLeast(yWave)
// zWave = changeZ.coerceAtLeast(zWave)
//
// }
x = event.values[SensorManager.DATA_X]
y = event.values[SensorManager.DATA_Y]
z = event.values[SensorManager.DATA_Z]
sensorParam = "$x:$y:$z"
// Log.e("GravitySensorManager", "$x:$y:$z")
}
}
......
......@@ -8,11 +8,13 @@ import android.content.pm.PackageManager
import android.hardware.Sensor
import android.hardware.SensorManager
import android.net.ConnectivityManager
import android.net.NetworkCapabilities
import android.net.Proxy
import android.os.BatteryManager
import android.os.Build
import android.telephony.TelephonyManager
import android.text.TextUtils
import androidx.annotation.RequiresApi
import java.io.DataOutputStream
import java.io.File
import java.lang.reflect.Method
......@@ -38,8 +40,9 @@ object KokoReportHelper {
/**
* 通过执行shell命令来判断设备是否已经root
* 0:未root,1:已root
*/
fun isShellRooted(): Boolean {
fun isShellRooted(): Int {
try {
val process = Runtime.getRuntime().exec("su")
val os = DataOutputStream(process.outputStream)
......@@ -48,34 +51,38 @@ object KokoReportHelper {
os.flush()
process.waitFor()
if (process.exitValue() == 0) {
return true
return 1
}
} catch (e: Exception) {
// e.printStackTrace()
}
return false
return 0
}
/**
* 是否是虚拟机
* https://blog.51cto.com/u_16175492/7712954
* 检查当前设备的信息,包括设备型号、产品名称、品牌、硬件等
* 0:非模拟器,1:是模拟器
*/
fun isVirtualMachine(): Boolean {
fun isVirtualMachine(): Int {
val manufacturer = Build.MANUFACTURER
val model = Build.MODEL
val product = Build.PRODUCT
return if (manufacturer.contains("Genymotion") || model.contains("Emulator") || product.contains("sdk")) {
true
} else false
1
} else 0
}
/**
* 是否插sim卡
* 0:未装,1:已装
*/
fun isSimCardInserted(context: Context): Boolean {
fun isSimCardInserted(context: Context): Int {
val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
return telephonyManager.getSimState() == TelephonyManager.SIM_STATE_READY
val flag = telephonyManager.getSimState() == TelephonyManager.SIM_STATE_READY
return if (flag) 1 else 0
}
......@@ -83,9 +90,10 @@ object KokoReportHelper {
* 是否有代理
* 判断设备 是否使用代理上网
* https://blog.csdn.net/verynewbeee/article/details/135698990
* 0:未开启代理,1:已开启代理
*/
@SuppressLint("ObsoleteSdkInt")
fun isWifiProxy(context: Context?): Boolean {
fun isProxy(context: Context?): Int {
val IS_ICS_OR_LATER = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH
val proxyAddress: String
val proxyPort: Int
......@@ -97,25 +105,28 @@ object KokoReportHelper {
proxyAddress = Proxy.getHost(context)
proxyPort = Proxy.getPort(context)
}
return !TextUtils.isEmpty(proxyAddress) && proxyPort != -1
val flag = !TextUtils.isEmpty(proxyAddress) && proxyPort != -1
return if (flag) 1 else 0
}
/**
* 是否开启vpn
* https://cloud.tencent.com/developer/ask/2122015
* 0:未连接VPN,1:已连接VPN
*/
@SuppressLint("ObsoleteSdkInt")
fun isVpnConnected(context: Context): Boolean {
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
val networkInfo = cm.activeNetworkInfo
if (networkInfo != null) {
return networkInfo.type == ConnectivityManager.TYPE_VPN
}
fun isVpnConnected(context: Context): Any {
val cm =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val currentNetwork = cm.activeNetwork
val networkCapabilities = cm.getNetworkCapabilities(currentNetwork)
return if (networkCapabilities != null) {
val flag1 = networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)
val flag2 = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
if (flag1 && flag2) 1 else 0
} else {
// 低版本 Android 系统可能需要使用其他方法检测 VPN 连接
0
}
return false
}
......@@ -123,9 +134,10 @@ object KokoReportHelper {
* 开发者模式是否开启
*
* 检测是否开启动了usb 调试模式
* 0:未开启开发者模式,1:已开启开发者模式
*/
@SuppressLint("PrivateApi")
fun isEnableDeveloperDebug(context: Context): Boolean {
fun isEnableDeveloperDebug(context: Context): Int {
var adb = ""
try {
val clazz = Class.forName("android.os.SystemProperties")
......@@ -134,21 +146,24 @@ object KokoReportHelper {
} catch (e: java.lang.Exception) {
}
return adb == "adb"
val flag = adb == "adb"
return if (flag) 1 else 0
}
/**
* 是否在充电
* https://blog.csdn.net/su749520/article/details/83898354
* 0:未在充电,1:正在充电
*/
fun isCharging(context: Context): Boolean {
fun isCharging(context: Context): Int {
val batteryBroadcast = context.registerReceiver(
null,
IntentFilter(Intent.ACTION_BATTERY_CHANGED)
)
// 0 means we are discharging, anything else means charging
val isCharging = batteryBroadcast!!.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) != 0
return isCharging
return if (isCharging) 1 else 0
}
......@@ -181,6 +196,9 @@ object KokoReportHelper {
return sensorAccelerometer != null
}
/**
* 0:未Hook,1:已Hook
*/
fun isHooked(): Int {
try {
// 检测Xposed
......
......@@ -4,16 +4,14 @@ import android.view.View
object MyReportViewListener {
class ReportViewListener(val className: String, val click: () -> Unit) : View.OnClickListener {
override fun onClick(v: View) {
val idString = v.context.resources.getResourceEntryName(v.id)
EventHelper.event("viewClick_${className}_$idString")
click.invoke()
fun View.setMyReportViewListener(className: String, click: (view: View) -> Unit) {
this.setMyReportViewListener(javaClass.simpleName) {
var idString = ""
runCatching {
idString = it.context.resources.getResourceEntryName(it.id)
}
EventHelper.event("viewClick_${className}_$idString")
click.invoke(it)
}
fun View.setMyReportViewListener(className: String, click: () -> Unit) {
this.setOnClickListener(ReportViewListener(className, click))
}
}
\ No newline at end of file
......@@ -13,6 +13,7 @@ import android.widget.ListView
import android.widget.RelativeLayout
import android.widget.TextView
import com.xm.test.myfile.R
import com.xm.test.myfile.ad.MyReportViewListener.setMyReportViewListener
import com.xm.test.myfile.model.CleanBean
import com.xm.test.myfile.model.FileBean
import com.xm.test.myfile.util.FileUtil
......@@ -110,7 +111,7 @@ class CleanAdapter(
layoutParams.height = FileUtil.dpToPx(62*itemAdapters[position]?.count!!, context)
viewHolder.listView?.adapter = itemAdapters[position]
viewHolder.itemBar?.setOnClickListener {
viewHolder.itemBar?.setMyReportViewListener(javaClass.simpleName) {
// Log.e("yanglin", "setViewOnclickListener: 11111111", )
dataBeanList[position].isListViewShow = !dataBeanList[position].isListViewShow
// viewHolder.listView?.visibility = if (dataBeanList[position].isListViewShow) View.GONE else View.VISIBLE
......@@ -123,7 +124,7 @@ class CleanAdapter(
}
viewHolder.checkBox?.setOnClickListener {
viewHolder.checkBox?.setMyReportViewListener(javaClass.simpleName) {
viewHolder.checkBox?.isChecked = !viewHolder.checkBox?.isChecked!!
selectAll(dataBeanList[position].fileBeans, viewHolder.checkBox?.isChecked!!, position)
notifyDataSetChanged()
......
......@@ -7,6 +7,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.xm.test.myfile.R
import com.xm.test.myfile.ad.MyReportViewListener.setMyReportViewListener
import com.xm.test.myfile.databinding.CleanListItemLayoutBinding
import com.xm.test.myfile.databinding.FilesItemLayoutBinding
import com.xm.test.myfile.model.CleanBean
......@@ -79,13 +80,13 @@ class CleanAdapter2(mIClean: IClean) : RecyclerView.Adapter<CleanAdapter2.AAA>()
} else {
holder.binding.cleanItemList.visibility = View.GONE
}
holder.binding.cleanItemBar.setOnClickListener {
holder.binding.cleanItemBar.setMyReportViewListener(javaClass.simpleName) {
data.isListViewShow = !data.isListViewShow
notifyItemChanged(position)
}
holder.binding.cleanItemCheckBox.isChecked = mSwitchAll[position]
selectAll(mSwitchAll[position],position)
holder.binding.cleanItemCheckBox.setOnClickListener {
holder.binding.cleanItemCheckBox.setMyReportViewListener(javaClass.simpleName) {
if (CleanAdapter.isCleanOver){
mSwitchAll[position] = !mSwitchAll[position]
selectAll(mSwitchAll[position], position)
......@@ -165,7 +166,7 @@ class CleanAdapter2(mIClean: IClean) : RecyclerView.Adapter<CleanAdapter2.AAA>()
holder.binding.fileSelectSwitch.isChecked = mCheckedBooleanArrays[itemPosition][position]
holder.binding.itemLayout.setOnClickListener {
holder.binding.itemLayout.setMyReportViewListener(javaClass.simpleName) {
Log.e("yanglin", "onBindViewHolder: $itemPosition $position", )
mCheckedBooleanArrays[itemPosition].put(position, !mCheckedBooleanArrays[itemPosition][position])
if (mCheckedBooleanArrays[itemPosition][position]){
......@@ -179,7 +180,7 @@ class CleanAdapter2(mIClean: IClean) : RecyclerView.Adapter<CleanAdapter2.AAA>()
// holder.binding.fileSelectSwitch.isChecked = !holder.binding.fileSelectSwitch.isChecked
}
// holder.binding.fileSelectSwitch.setOnClickListener {
// holder.binding.fileSelectSwitch.setMyReportViewListener(javaClass.simpleName) {
// sibList[position].isChecked = !sibList[position].isChecked
// if (holder.binding.fileSelectSwitch.isChecked){
// mFileCheckedItemList.add(sibList[position])
......
package com.xm.test.myfile.antivirus
import android.content.Intent
import android.content.SharedPreferences
import android.os.Bundle
import android.os.Handler
import android.os.Looper
......@@ -11,15 +10,14 @@ import android.widget.ProgressBar
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.stringPreferencesKey
import com.trustlook.sdk.cloudscan.CloudScanListener
import com.trustlook.sdk.data.AppInfo
import com.xm.test.myfile.MyApplication
import com.xm.test.myfile.R
import com.xm.test.myfile.activity.ScanResultActivity
import com.xm.test.myfile.ad.MaxAdUtils
import com.xm.test.myfile.ad.MyReportViewListener.setMyReportViewListener
import com.xm.test.myfile.ad.queryDataStoreBlock
import com.xm.test.myfile.ad.saveDataStore
import com.xm.test.myfile.ad.saveDataStoreBlock
import com.xm.test.myfile.databinding.ActivityAntivirusBinding
......@@ -49,19 +47,19 @@ class AntivirusActivity : AppCompatActivity() {
private fun setOnclickListener() {
binding.ivBack.setOnClickListener {
binding.ivBack.setMyReportViewListener(javaClass.simpleName) {
MyApplication.mCloudScan?.cancelScan()
finish()
}
binding.ivBack2.setOnClickListener {
binding.ivBack2.setMyReportViewListener(javaClass.simpleName) {
MyApplication.mCloudScan?.cancelScan()
finish()
}
findViewById<View>(R.id.Start_scanning).setOnClickListener {
findViewById<View>(R.id.Start_scanning).setMyReportViewListener(javaClass.simpleName) {
saveDataStoreBlock(AGREE_VIRUS_PRIVACY_KEY, true)
startAntivirus()
}
findViewById<View>(R.id.antivirus_stop_text).setOnClickListener {
findViewById<View>(R.id.antivirus_stop_text).setMyReportViewListener(javaClass.simpleName) {
MyApplication.mCloudScan?.cancelScan()
finish()
}
......
......@@ -10,16 +10,11 @@ import android.view.ViewGroup
import android.widget.GridView
import com.xm.test.myfile.R
import com.xm.test.myfile.activity.FileManagerActivity
import com.xm.test.myfile.activity.HomeActivity
import com.xm.test.myfile.activity.MediaActivity
import com.xm.test.myfile.ad.MaxAdUtils
import com.xm.test.myfile.adapter.MediaAdapter
import com.xm.test.myfile.databinding.FragmentFileManagerBinding
import com.xm.test.myfile.databinding.FragmentHomeBinding
import com.xm.test.myfile.model.FileBean
import com.xm.test.myfile.util.MediaUtil
import com.xm.test.myfile.util.PermissionUtil
import com.xm.test.myfile.view.CustomDialog
class FileManagerFragment : Fragment(), View.OnClickListener {
private lateinit var mView: View
......@@ -83,18 +78,18 @@ class FileManagerFragment : Fragment(), View.OnClickListener {
mTxtBtn.setOnClickListener(this)
mRecentView.setOnClickListener(this)
mImageBtn.setOnClickListener {
mImageBtn.setMyReportViewListener(javaClass.simpleName) {
val intent = Intent(context, MediaActivity::class.java)
intent.putExtra("fileType", "image")
context?.startActivity(intent)
}
mVideoBtn.setOnClickListener {
mVideoBtn.setMyReportViewListener(javaClass.simpleName) {
val intent = Intent(context, MediaActivity::class.java)
intent.putExtra("fileType", "video")
context?.startActivity(intent)
}
mRecentView.setOnClickListener {
mRecentView.setMyReportViewListener(javaClass.simpleName) {
val intent = Intent(context, MediaActivity::class.java)
intent.putExtra("fileType", "image")
context?.startActivity(intent)
......
......@@ -21,11 +21,8 @@ import com.xm.test.myfile.activity.CleanActivity
import com.xm.test.myfile.activity.ScanEmptyFilesActivity
import com.xm.test.myfile.activity.ScanLargeFilesActivity
import com.xm.test.myfile.activity.SimilarImagesActivity
import com.xm.test.myfile.ad.MaxAdUtils
import com.xm.test.myfile.antivirus.AntivirusActivity
import com.xm.test.myfile.databinding.FragmentHomeBinding
import com.xm.test.myfile.util.PermissionUtil
import com.xm.test.myfile.view.CustomDialog
class HomeFragment : Fragment(), OnClickListener {
private lateinit var mView: View
......
......@@ -6,23 +6,31 @@ import android.graphics.Color
import android.graphics.Point
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.widget.EditText
import android.widget.TextView
import com.xm.test.myfile.R
import com.xm.test.myfile.ad.MyReportViewListener.setMyReportViewListener
import com.xm.test.myfile.databinding.DialogCustomLayoutBinding
class CustomDialog(context: Context?) : Dialog(context!!), View.OnClickListener{
class CustomDialog(
val context: Context,
val sureClick: (() -> Unit)? = null,
val cancelClick: (() -> Unit)? = null
) :
Dialog(context) {
private lateinit var mEdit: EditText
private lateinit var mCancel: TextView
private lateinit var mSure: TextView
private var mTitle: TextView? = null
private var mHint: TextView? = null
private var mCancelListener: View.OnClickListener? = null
private var mSureListener: View.OnClickListener? = null
private lateinit var binding: DialogCustomLayoutBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.dialog_custom_layout)
binding = DialogCustomLayoutBinding.inflate(LayoutInflater.from(context))
setContentView(binding.root)
setCancelable(false)
window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
......@@ -41,65 +49,54 @@ class CustomDialog(context: Context?) : Dialog(context!!), View.OnClickListener{
mTitle = findViewById(R.id.dialog_title_text)
mHint = findViewById(R.id.dialog_hint_text)
mCancel.setOnClickListener(this)
mSure.setOnClickListener(this)
binding.dialogCancelBtn.setMyReportViewListener(javaClass.simpleName) {
cancelClick?.invoke()
dismiss()
}
fun setsConfirm(sure: View.OnClickListener): CustomDialog{
this.mSureListener = sure
return this
binding.dialogSureBtn.setMyReportViewListener(javaClass.simpleName) {
sureClick?.invoke()
dismiss()
}
fun setsCancel(cancel: View.OnClickListener): CustomDialog{
this.mCancelListener = cancel
return this
}
fun setsTitle(str: String): CustomDialog{
fun setsTitle(str: String): CustomDialog {
findViewById<TextView>(R.id.dialog_title_text).text = str
return this
}
fun setsHint(str: String): CustomDialog{
fun setsHint(str: String): CustomDialog {
findViewById<TextView>(R.id.dialog_hint_text).text = str
return this
}
fun setShowTitle(isShow: Boolean){
fun setShowTitle(isShow: Boolean): CustomDialog {
mTitle?.visibility = if (isShow) View.VISIBLE else View.GONE
return this
}
fun setsRightDelete(str: String): CustomDialog{
fun setsRightDelete(str: String): CustomDialog {
mSure.text = str
mSure.setTextColor(Color.RED)
mSure.setBackgroundResource(R.drawable.bg_btn_cancel_shape)
return this
}
fun setRightBtnText(str: String){
fun setRightBtnText(str: String) {
mSure.text = str
}
fun isShowEditText(isShow : Boolean): CustomDialog{
mEdit.visibility = if (isShow) View.VISIBLE else View.GONE
fun isShowEditText(isShow: Boolean): CustomDialog {
binding.dialogEdit.visibility = if (isShow) View.VISIBLE else View.GONE
return this
}
fun isShowHintText(isShow : Boolean): CustomDialog{
fun isShowHintText(isShow: Boolean): CustomDialog {
findViewById<TextView>(R.id.dialog_hint_text).visibility = if (isShow) View.VISIBLE else View.GONE
return this
}
fun getEditTextStr(): String{
fun getEditTextStr(): String {
return mEdit.text.toString()
}
override fun onClick(v: View?) {
when (v?.id){
R.id.dialog_cancel_btn ->{
if (mCancelListener != null){
mCancelListener?.onClick(v)
}
}
R.id.dialog_sure_btn ->{
if (mSureListener != null){
mSureListener?.onClick(v)
}
}
}
}
}
\ No newline at end of file
......@@ -6,11 +6,12 @@ import android.view.Gravity
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.appcompat.app.AlertDialog
import com.xm.test.myfile.ad.MyReportViewListener.setMyReportViewListener
import com.xm.test.myfile.databinding.DialogManageStorageBinding
object ManageStorageDialog {
fun Context.showManageStorageDialog( action: () -> Unit) {
fun Context.showManageStorageDialog(action: () -> Unit) {
val binding = DialogManageStorageBinding.inflate(LayoutInflater.from(this))
val dialog = AlertDialog.Builder(this).setView(binding.root).create()
dialog.setCanceledOnTouchOutside(false)
......@@ -24,7 +25,7 @@ object ManageStorageDialog {
lp?.gravity = Gravity.BOTTOM
dialog.window?.attributes = lp
dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
binding.tvAllow.setOnClickListener {
binding.tvAllow.setMyReportViewListener(javaClass.simpleName) {
dialog.dismiss()
action.invoke()
}
......
......@@ -7,6 +7,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AlertDialog
import com.xm.test.myfile.ad.MaxAdUtils
import com.xm.test.myfile.ad.MyReportViewListener.setMyReportViewListener
import com.xm.test.myfile.databinding.DialogWhetherQuitBinding
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.MainScope
......@@ -26,10 +27,10 @@ object QuitDialog {
lp?.height = ViewGroup.LayoutParams.WRAP_CONTENT
dialog.window?.attributes = lp
dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
binding.tvCancel.setOnClickListener {
binding.tvCancel.setMyReportViewListener(javaClass.simpleName) {
dialog.dismiss()
}
binding.tvConfirm.setOnClickListener {
binding.tvConfirm.setMyReportViewListener(javaClass.simpleName) {
dialog.dismiss()
action.invoke()
}
......
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F8F8F8"
android:orientation="vertical"
tools:context=".activity.ScanResultActivity">
<ImageView
android:id="@+id/scan_result_quit_btn"
android:id="@+id/iv_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:src="@drawable/ic_quit"
......@@ -20,7 +20,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_gravity="center_horizontal"
android:layout_marginTop="12dp"
android:text="Scan Results"
android:textColor="@color/black"
......@@ -28,12 +28,12 @@
android:textStyle="bold"
tools:ignore="HardcodedText,SpUsage" />
<!-- 扫描列表 -->
<LinearLayout
android:id="@+id/scan_result_list_layout"
android:id="@+id/ll_virus_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/ad_group_layout"
android:layout_below="@+id/scan_result_quit_btn"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical">
<RelativeLayout
......@@ -58,7 +58,7 @@
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/scan_result_secure_num_text"
android:id="@+id/tv_scan_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
......@@ -72,19 +72,20 @@
</RelativeLayout>
<ListView
android:id="@+id/scan_result_list"
android:id="@+id/lv_virus_app"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="8dp"
android:background="@color/white"
android:scrollbars="none" />
</LinearLayout>
<!-- 错误详情 -->
<LinearLayout
android:id="@+id/app_info_page_layout"
android:id="@+id/ll_virus_detail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/scan_result_quit_btn"
android:layout_margin="16dp"
android:orientation="vertical"
android:visibility="gone">
......@@ -194,7 +195,6 @@
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
......@@ -277,27 +277,37 @@
</LinearLayout>
<!--两种按钮模式 -->
<LinearLayout
android:id="@+id/ad_group_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/white"
android:orientation="vertical">
<TextView
android:id="@+id/tv_got"
android:layout_width="match_parent"
android:layout_height="34dp"
android:layout_marginHorizontal="50dp"
android:layout_marginVertical="8dp"
android:background="@drawable/bg_btn_sure_shape"
android:gravity="center"
android:text="Got it"
android:textColor="@color/white"
android:textSize="19sp"
android:textStyle="bold"
android:visibility="gone"
tools:ignore="HardcodedText" />
<LinearLayout
android:id="@+id/scan_result_delete_group_layout"
android:id="@+id/ll_button_yn"
android:layout_width="match_parent"
android:layout_height="34dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:layout_marginVertical="8dp"
android:orientation="horizontal"
android:visibility="gone">
<TextView
android:id="@+id/scan_delete_yes"
android:id="@+id/tv_delete"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="16dp"
......@@ -312,7 +322,7 @@
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/scan_delete_ignore"
android:id="@+id/tv_ignore"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="8dp"
......@@ -328,46 +338,25 @@
</LinearLayout>
<TextView
android:id="@+id/scan_result_go_it_text"
android:layout_width="match_parent"
android:layout_height="34dp"
android:layout_marginStart="50dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="50dp"
android:layout_marginBottom="16dp"
android:background="@drawable/bg_btn_sure_shape"
android:gravity="center"
android:text="Got it"
android:textColor="@color/white"
android:textSize="19sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
</LinearLayout>
<FrameLayout
android:id="@+id/fl_ad"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
android:layout_gravity="center_horizontal"
android:layout_marginTop="8dp"
android:layout_marginBottom="20dp"
android:visibility="gone" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ad"
tools:ignore="ContentDescription" />
</FrameLayout>
</LinearLayout>
<RelativeLayout
android:id="@+id/antivirus_success_view"
<!-- 扫描成功布局 -->
<include
android:id="@+id/include_virus_finish"
layout="@layout/antivirus_success_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone">
android:visibility="gone" />
<include layout="@layout/antivirus_success_layout" />
</RelativeLayout>
</RelativeLayout>
\ No newline at end of file
</LinearLayout>
\ No newline at end of file
......@@ -6,7 +6,7 @@
android:background="#F8F8F8">
<ImageView
android:id="@+id/antivirus_success_quit_btn"
android:id="@+id/iv_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
......@@ -16,7 +16,7 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/antivirus_success_quit_btn"
android:layout_below="@id/iv_back"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:orientation="vertical">
......@@ -58,7 +58,7 @@
tools:ignore="HardcodedText,SpUsage" />
<TextView
android:id="@+id/identify_num_text"
android:id="@+id/tv_identify_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
......@@ -99,7 +99,7 @@
tools:ignore="HardcodedText,RtlHardcoded" />
<TextView
android:id="@+id/settle_num_text"
android:id="@+id/tv_settle_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
......@@ -140,17 +140,10 @@
<FrameLayout
android:id="@+id/fl_ad"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ad"
tools:ignore="ContentDescription" />
</FrameLayout>
android:layout_gravity="center_horizontal" />
</LinearLayout>
......
......@@ -7,15 +7,13 @@ pluginManagement {
includeGroupByRegex("androidx.*")
}
}
flatDir {
dirs 'libs'
}
google()
mavenCentral()
gradlePluginPortal()
maven {
url 'https://artifacts.applovin.com/android'
}
maven { url "https://android-sdk.is.com" }
maven { url "https://artifact.bytedance.com/repository/pangle" }
maven { url "https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea" }
}
......@@ -31,6 +29,7 @@ dependencyResolutionManagement {
maven {
url 'https://artifacts.applovin.com/android'
}
maven { url "https://android-sdk.is.com" }
maven { url "https://artifact.bytedance.com/repository/pangle" }
maven { url "https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea" }
}
......
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