Commit c81d9d2a authored by wanglei's avatar wanglei

替换包名

parent 28cd9e39
...@@ -5,11 +5,11 @@ plugins { ...@@ -5,11 +5,11 @@ plugins {
android { android {
namespace 'com.test.mydemo3' namespace 'com.xm.test.myfilemaster'
compileSdk 34 compileSdk 34
defaultConfig { defaultConfig {
applicationId "com.tttt.datarecoveryrenew" applicationId "com.xm.test.myfilemaster"
minSdk 25 minSdk 25
targetSdk 33 targetSdk 33
versionCode 1 versionCode 1
......
package com.test.mydemo3 package com.xm.mydemo3
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
......
...@@ -108,13 +108,17 @@ ...@@ -108,13 +108,17 @@
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> <!-- 病毒扫描,key是和包名绑定的 --> </activity>
<!-- 病毒扫描,key是和包名绑定的 -->
<meta-data <meta-data
android:name="com.trustlook.ApiKey" android:name="com.trustlook.ApiKey"
android:value="b8ade465f682b1ae8bcf942eb4e07aab435ee02a10196283b38daa66" /> <!-- 垃圾清理 --> android:value="86984b67c2db250b6a0dfd8923ac623c776c8af9ee520ba5d60e8799" />
<!-- 垃圾清理 -->
<meta-data <meta-data
android:name="com.trustlook.cleansdk.ApiKey" android:name="com.trustlook.cleansdk.ApiKey"
android:value="b8ade465f682b1ae8bcf942eb4e07aab435ee02a10196283b38daa66" /> android:value="86984b67c2db250b6a0dfd8923ac623c776c8af9ee520ba5d60e8799" />
</application> </application>
</manifest> </manifest>
\ No newline at end of file
package com.test.mydemo3.adapter
import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
class HomeViewPagerAdapter() {
}
\ No newline at end of file
package com.test.mydemo3 package com.xm.test.myfilemaster
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
...@@ -14,12 +14,12 @@ import com.applovin.sdk.AppLovinMediationProvider ...@@ -14,12 +14,12 @@ import com.applovin.sdk.AppLovinMediationProvider
import com.applovin.sdk.AppLovinSdk import com.applovin.sdk.AppLovinSdk
import com.applovin.sdk.AppLovinSdkInitializationConfiguration import com.applovin.sdk.AppLovinSdkInitializationConfiguration
import com.kongzue.dialogx.DialogX import com.kongzue.dialogx.DialogX
import com.test.mydemo3.activity.HomeActivity import com.xm.test.myfilemaster.activity.HomeActivity
import com.test.mydemo3.util.UrlManager import com.xm.test.myfilemaster.util.UrlManager
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
class MainActivity : AppCompatActivity() , MaxAdListener { class MainActivity : AppCompatActivity(), MaxAdListener {
private lateinit var mProgressBar: ProgressBar private lateinit var mProgressBar: ProgressBar
private lateinit var interstitialAd: MaxInterstitialAd private lateinit var interstitialAd: MaxInterstitialAd
...@@ -45,15 +45,15 @@ class MainActivity : AppCompatActivity() , MaxAdListener { ...@@ -45,15 +45,15 @@ class MainActivity : AppCompatActivity() , MaxAdListener {
.build(); .build();
val handler = Handler() val handler = Handler()
var count: Int = 0 var count: Int = 0
val runnable = object : Runnable{ val runnable = object : Runnable {
override fun run() { override fun run() {
if (count <= 100){ if (count <= 100) {
runOnUiThread { runOnUiThread {
mProgressBar.setProgress(count) mProgressBar.setProgress(count)
count += 10 count += 10
} }
handler.postDelayed(this, 300) handler.postDelayed(this, 300)
}else{ } else {
startVi() startVi()
} }
} }
...@@ -63,7 +63,8 @@ class MainActivity : AppCompatActivity() , MaxAdListener { ...@@ -63,7 +63,8 @@ class MainActivity : AppCompatActivity() , MaxAdListener {
handler.postDelayed(runnable, 300) handler.postDelayed(runnable, 300)
} }
} }
fun startVi(){
fun startVi() {
startActivity(Intent(this, HomeActivity::class.java)) startActivity(Intent(this, HomeActivity::class.java))
finish() finish()
} }
......
package com.test.mydemo3 package com.xm.test.myfilemaster
import android.app.Application import android.app.Application
import android.content.Context import android.content.Context
import android.util.Log import android.util.Log
import androidx.lifecycle.Lifecycle import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent import androidx.lifecycle.OnLifecycleEvent
import androidx.lifecycle.ProcessLifecycleOwner import androidx.lifecycle.ProcessLifecycleOwner
import com.applovin.mediation.MaxAd import com.applovin.mediation.MaxAd
import com.applovin.mediation.MaxAdListener import com.applovin.mediation.MaxAdListener
import com.applovin.mediation.MaxError import com.applovin.mediation.MaxError
import com.applovin.mediation.ads.MaxAppOpenAd import com.applovin.mediation.ads.MaxAppOpenAd
import com.applovin.sdk.AppLovinSdk import com.applovin.sdk.AppLovinSdk
import com.applovin.sdk.AppLovinSdkConfiguration import com.cloud.cleanjunksdk.task.CheckSdkCallback
import com.cloud.cleanjunksdk.task.CheckSdkCallback import com.cloud.cleanjunksdk.task.Clean
import com.cloud.cleanjunksdk.task.Clean import com.cloud.cleanjunksdk.task.CleanSDK
import com.cloud.cleanjunksdk.task.CleanSDK import com.cloud.cleanjunksdk.tools.Region
import com.cloud.cleanjunksdk.tools.Region import com.trustlook.sdk.cloudscan.CloudScanClient
import com.test.mydemo3.util.UrlManager import com.xm.test.myfilemaster.util.UrlManager
import com.trustlook.sdk.cloudscan.CloudScanClient
class MyApplication : Application() {
class MyApplication : Application() { private lateinit var appOpenManager: ExampleAppOpenManager
private lateinit var appOpenManager: ExampleAppOpenManager
companion object {
companion object{ var mCleanSdk: Clean? = null
var mCleanSdk: Clean? = null var mCloudScan: CloudScanClient? = null
var mCloudScan: CloudScanClient? = null }
}
override fun onCreate() {
override fun onCreate() { super.onCreate()
super.onCreate()
// AppLovinSdk.getInstance( this ).initializeSdk({ configuration: AppLovinSdkConfiguration ->
// AppLovinSdk.getInstance( this ).initializeSdk({ configuration: AppLovinSdkConfiguration -> // {
// { // appOpenManager = ExampleAppOpenManager(applicationContext)
// appOpenManager = ExampleAppOpenManager(applicationContext) // }
// } // )
// ) // }
// } CleanSDK.init(this, this, Region.INTL, object : CheckSdkCallback {
CleanSDK.init(MyApplication(), this, Region.INTL, object : CheckSdkCallback { override fun onSuccess(p0: Clean?) {
override fun onSuccess(p0: Clean?) { mCleanSdk = p0!!
mCleanSdk = p0!! Log.e("yanglin", "onSuccess: clean INIT")
Log.e("yanglin", "onSuccess: clean INIT", ) }
}
override fun onError(error: Int) {
override fun onError(p0: Int) { Log.e("yanglin", "onError: INIT error=$error")
Log.e("yanglin", "onError: INIT", ) }
} })
}) mCloudScan = CloudScanClient.Builder(this)
mCloudScan = CloudScanClient.Builder(this) .setRegion(com.trustlook.sdk.data.Region.INTL)
.setRegion(com.trustlook.sdk.data.Region.INTL) .setConnectionTimeout(30000)
.setConnectionTimeout(30000) .setSocketTimeout(30000)
.setSocketTimeout(30000) .build()
.build() AppLovinSdk.getInstance(this).initializeSdk {
AppLovinSdk.getInstance(this).initializeSdk { appOpenManager = ExampleAppOpenManager(applicationContext)
appOpenManager = ExampleAppOpenManager(applicationContext) }
} }
}
class ExampleAppOpenManager(applicationContext: Context?) : LifecycleObserver, MaxAdListener {
class ExampleAppOpenManager(applicationContext: Context?) : LifecycleObserver, MaxAdListener { private lateinit var appOpenAd: MaxAppOpenAd
private lateinit var appOpenAd: MaxAppOpenAd private lateinit var context: Context
private lateinit var context: Context
init {
init { ProcessLifecycleOwner.get().lifecycle.addObserver(this)
ProcessLifecycleOwner.get().lifecycle.addObserver(this)
context = applicationContext!!
context = applicationContext!!
appOpenAd = MaxAppOpenAd(UrlManager.AD_UNIT_ID, applicationContext)
appOpenAd = MaxAppOpenAd(UrlManager.AD_UNIT_ID, applicationContext!!) appOpenAd.setListener(this)
appOpenAd.setListener(this) appOpenAd.loadAd()
appOpenAd.loadAd() }
}
private fun showAdIfReady() {
private fun showAdIfReady() { if (appOpenAd == null || !AppLovinSdk.getInstance(context).isInitialized) return
if (appOpenAd == null || !AppLovinSdk.getInstance(context).isInitialized) return
if (appOpenAd.isReady) {
if (appOpenAd.isReady) { appOpenAd.showAd(UrlManager.TEST_PLACEMENT_HERE)
appOpenAd.showAd(UrlManager.TEST_PLACEMENT_HERE) } else {
} else { appOpenAd.loadAd()
appOpenAd.loadAd() }
} }
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
@OnLifecycleEvent(Lifecycle.Event.ON_START) fun onStart() {
fun onStart() { showAdIfReady()
showAdIfReady() }
}
override fun onAdLoaded(ad: MaxAd) {}
override fun onAdLoaded(ad: MaxAd) {} override fun onAdLoadFailed(adUnitId: String, error: MaxError) {}
override fun onAdLoadFailed(adUnitId: String, error: MaxError) {} override fun onAdDisplayed(ad: MaxAd) {}
override fun onAdDisplayed(ad: MaxAd) {} override fun onAdClicked(ad: MaxAd) {}
override fun onAdClicked(ad: MaxAd) {}
override fun onAdHidden(ad: MaxAd) {
override fun onAdHidden(ad: MaxAd) { appOpenAd.loadAd()
appOpenAd.loadAd() }
}
override fun onAdDisplayFailed(ad: MaxAd, error: MaxError) {
override fun onAdDisplayFailed(ad: MaxAd, error: MaxError) { appOpenAd.loadAd()
appOpenAd.loadAd() }
} }
}
} }
\ No newline at end of file
package com.test.mydemo3.activity package com.xm.test.myfilemaster.activity
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
class BaseActivityViewModel : ViewModel() { class BaseActivityViewModel : ViewModel() {
// private var mSelectNumber = MutableLiveData<SelectNumber>() // private var mSelectNumber = MutableLiveData<SelectNumber>()
private val _myInt = MutableLiveData<Int>() private val _myInt = MutableLiveData<Int>()
val myInt: LiveData<Int> get() = _myInt val myInt: LiveData<Int> get() = _myInt
fun setNumber(number: Int){ fun setNumber(number: Int){
_myInt.value = number _myInt.value = number
} }
// fun getNumber() : LiveData<SelectNumber>{ // fun getNumber() : LiveData<SelectNumber>{
// return mSelectNumber // return mSelectNumber
// } // }
// //
// fun setNumber(number: Int){ // fun setNumber(number: Int){
// mSelectNumber.value = SelectNumber(number) // mSelectNumber.value = SelectNumber(number)
// } // }
} }
\ No newline at end of file
package com.test.mydemo3.activity package com.xm.test.myfilemaster.activity
import android.content.ContentResolver
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.BatteryManager import android.os.BatteryManager
...@@ -13,10 +12,10 @@ import android.view.View ...@@ -13,10 +12,10 @@ import android.view.View
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import com.test.mydemo3.R import com.xm.test.myfilemaster.R
import com.test.mydemo3.util.BatteryUtil import com.xm.test.myfilemaster.util.BatteryUtil
import com.test.mydemo3.util.PermissionUtil import com.xm.test.myfilemaster.util.PermissionUtil
import com.test.mydemo3.util.SystemServerState import com.xm.test.myfilemaster.util.SystemServerState
import java.util.Calendar import java.util.Calendar
import java.util.Date import java.util.Date
......
package com.test.mydemo3.activity package com.xm.test.myfilemaster.activity
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
...@@ -8,7 +8,6 @@ import android.os.Looper ...@@ -8,7 +8,6 @@ import android.os.Looper
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import android.widget.ImageView import android.widget.ImageView
import android.widget.ListView
import android.widget.ProgressBar import android.widget.ProgressBar
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
...@@ -23,14 +22,14 @@ import com.cloud.cleanjunksdk.residual.ResidualBean ...@@ -23,14 +22,14 @@ import com.cloud.cleanjunksdk.residual.ResidualBean
import com.cloud.cleanjunksdk.task.JunkScanCallback import com.cloud.cleanjunksdk.task.JunkScanCallback
import com.cm.plugincluster.junkengine.junk.bean.MediaFile import com.cm.plugincluster.junkengine.junk.bean.MediaFile
import com.cm.plugincluster.junkengine.junk.engine.MEDIA_TYPE import com.cm.plugincluster.junkengine.junk.engine.MEDIA_TYPE
import com.test.mydemo3.MyApplication import com.xm.test.myfilemaster.MyApplication
import com.test.mydemo3.R import com.xm.test.myfilemaster.R
import com.test.mydemo3.adapter.CleanAdapter import com.xm.test.myfilemaster.adapter.CleanAdapter
import com.test.mydemo3.adapter.CleanAdapter2 import com.xm.test.myfilemaster.adapter.CleanAdapter2
import com.test.mydemo3.antivirus.AntivirusActivity import com.xm.test.myfilemaster.antivirus.AntivirusActivity
import com.test.mydemo3.model.CleanBean import com.xm.test.myfilemaster.model.CleanBean
import com.test.mydemo3.model.FileBean import com.xm.test.myfilemaster.model.FileBean
import com.test.mydemo3.util.FileUtil import com.xm.test.myfilemaster.util.FileUtil
import java.io.File import java.io.File
class CleanActivity : AppCompatActivity() { class CleanActivity : AppCompatActivity() {
......
package com.test.mydemo3.activity package com.xm.test.myfilemaster.activity
import android.os.Bundle import android.os.Bundle
import com.kongzue.dialogx.dialogs.WaitDialog import com.kongzue.dialogx.dialogs.WaitDialog
import com.test.mydemo3.R import com.xm.test.myfilemaster.R
import com.test.mydemo3.base.BaseActivity import com.xm.test.myfilemaster.base.BaseActivity
import com.test.mydemo3.model.FileBean import com.xm.test.myfilemaster.model.FileBean
import com.test.mydemo3.util.FileUtil import com.xm.test.myfilemaster.util.FileUtil
class FileManagerActivity : BaseActivity() { class FileManagerActivity : BaseActivity() {
private var mFileBeanList = ArrayList<FileBean>() private var mFileBeanList = ArrayList<FileBean>()
......
package com.test.mydemo3.activity package com.xm.test.myfilemaster.activity
import android.Manifest import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.Environment
import android.provider.MediaStore.Audio.Radio
import android.provider.Settings
import android.view.View import android.view.View
import android.widget.RadioButton import android.widget.RadioButton
import android.widget.RadioGroup import android.widget.RadioGroup
import android.widget.Toast
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.annotation.IdRes
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import androidx.core.view.get
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.viewpager.widget.ViewPager
import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2 import androidx.viewpager2.widget.ViewPager2
import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback
import com.permissionx.guolindev.PermissionX import com.permissionx.guolindev.PermissionX
import com.permissionx.guolindev.callback.RequestCallback import com.permissionx.guolindev.callback.RequestCallback
import com.test.mydemo3.R import com.xm.test.myfilemaster.R
import com.test.mydemo3.fragment.FileManagerFragment import com.xm.test.myfilemaster.fragment.FileManagerFragment
import com.test.mydemo3.fragment.HomeFragment import com.xm.test.myfilemaster.fragment.HomeFragment
import com.test.mydemo3.fragment.InternalStorageFragment import com.xm.test.myfilemaster.fragment.InternalStorageFragment
import com.test.mydemo3.util.PermissionUtil import com.xm.test.myfilemaster.util.PermissionUtil
import java.security.Permission
import javax.security.auth.callback.Callback
class HomeActivity : AppCompatActivity() { class HomeActivity : AppCompatActivity() {
private val REQUEST_MANAGE_EXTERNAL_STORAGE_PERMISSION = 101 private val REQUEST_MANAGE_EXTERNAL_STORAGE_PERMISSION = 101
......
package com.test.mydemo3.activity package com.xm.test.myfilemaster.activity
import android.Manifest
import android.content.Context
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.Environment import android.os.Environment
import android.util.Log
import android.util.SparseBooleanArray
import android.widget.ListView import android.widget.ListView
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat
import com.kongzue.dialogx.dialogs.WaitDialog import com.kongzue.dialogx.dialogs.WaitDialog
import com.test.mydemo3.R import com.xm.test.myfilemaster.R
import com.test.mydemo3.base.BaseActivity import com.xm.test.myfilemaster.base.BaseActivity
import com.test.mydemo3.model.FileBean import com.xm.test.myfilemaster.model.FileBean
import com.test.mydemo3.model.FilesItemBean import com.xm.test.myfilemaster.util.FileUtil
import com.test.mydemo3.util.FileUtil import com.xm.test.myfilemaster.util.PermissionUtil
import com.test.mydemo3.util.PermissionUtil
import java.io.File
class InternalStorageActivity : BaseActivity() { class InternalStorageActivity : BaseActivity() {
private lateinit var mFilesItemListView: ListView private lateinit var mFilesItemListView: ListView
......
package com.test.mydemo3.activity package com.xm.test.myfilemaster.activity
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.os.Bundle import android.os.Bundle
...@@ -7,15 +7,14 @@ import android.view.View ...@@ -7,15 +7,14 @@ import android.view.View
import android.widget.CheckBox import android.widget.CheckBox
import android.widget.GridView import android.widget.GridView
import android.widget.ImageView import android.widget.ImageView
import android.widget.ScrollView
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import com.kongzue.dialogx.dialogs.WaitDialog import com.kongzue.dialogx.dialogs.WaitDialog
import com.test.mydemo3.R import com.xm.test.myfilemaster.R
import com.test.mydemo3.adapter.MediaAdapter import com.xm.test.myfilemaster.adapter.MediaAdapter
import com.test.mydemo3.model.FileBean import com.xm.test.myfilemaster.model.FileBean
import com.test.mydemo3.util.FileUtil import com.xm.test.myfilemaster.util.FileUtil
class MediaActivity : AppCompatActivity() { class MediaActivity : AppCompatActivity() {
private lateinit var mGridView: GridView private lateinit var mGridView: GridView
......
package com.test.mydemo3.activity package com.xm.test.myfilemaster.activity
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.util.SparseBooleanArray import android.util.SparseBooleanArray
import android.view.View import android.view.View
import android.widget.LinearLayout
import android.widget.ListView import android.widget.ListView
import android.widget.TextView import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.isVisible import androidx.core.view.isVisible
import com.test.mydemo3.R import com.xm.test.myfilemaster.R
import com.test.mydemo3.adapter.FilesItemViewAdapter import com.xm.test.myfilemaster.adapter.FilesItemViewAdapter
import com.test.mydemo3.base.BaseActivity import com.xm.test.myfilemaster.fragment.InternalStorageFragment
import com.test.mydemo3.fragment.InternalStorageFragment import com.xm.test.myfilemaster.model.FileBean
import com.test.mydemo3.model.FileBean import com.xm.test.myfilemaster.util.FileUtil
import com.test.mydemo3.util.FileUtil
class MoveOrCopyActivity : ComponentActivity() { class MoveOrCopyActivity : ComponentActivity() {
......
package com.test.mydemo3.activity package com.xm.test.myfilemaster.activity
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.util.SparseBooleanArray
import android.view.View
import android.widget.ListView import android.widget.ListView
import com.kongzue.dialogx.dialogs.WaitDialog import com.kongzue.dialogx.dialogs.WaitDialog
import com.test.mydemo3.R import com.xm.test.myfilemaster.R
import com.test.mydemo3.adapter.FilesItemViewAdapter import com.xm.test.myfilemaster.base.BaseActivity
import com.test.mydemo3.base.BaseActivity import com.xm.test.myfilemaster.model.FileBean
import com.test.mydemo3.model.FileBean import com.xm.test.myfilemaster.util.FileUtil
import com.test.mydemo3.model.FilesItemBean
import com.test.mydemo3.util.FileUtil
class ScanEmptyFilesActivity : BaseActivity() { class ScanEmptyFilesActivity : BaseActivity() {
......
package com.test.mydemo3.activity package com.xm.test.myfilemaster.activity
import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.provider.MediaStore
import android.util.Log
import android.util.SparseBooleanArray
import android.view.View
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.ListView import android.widget.ListView
import android.widget.Toast
import com.airbnb.lottie.utils.Utils
import com.kongzue.dialogx.dialogs.WaitDialog import com.kongzue.dialogx.dialogs.WaitDialog
import com.test.mydemo3.R import com.xm.test.myfilemaster.R
import com.test.mydemo3.base.BaseActivity import com.xm.test.myfilemaster.base.BaseActivity
import com.test.mydemo3.model.FileBean import com.xm.test.myfilemaster.model.FileBean
import com.test.mydemo3.model.FilesItemBean import com.xm.test.myfilemaster.util.FileUtil
import com.test.mydemo3.util.FileUtil
import java.io.File
class ScanLargeFilesActivity : BaseActivity() { class ScanLargeFilesActivity : BaseActivity() {
......
package com.test.mydemo3.activity package com.xm.test.myfilemaster.activity
import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.widget.ImageView import android.widget.ImageView
import android.widget.ListView import android.widget.ListView
import android.widget.TextView import android.widget.TextView
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.isVisible import androidx.core.view.isVisible
import com.test.mydemo3.R
import com.test.mydemo3.adapter.ScanResultAdapter
import com.test.mydemo3.view.CustomDialog
import com.trustlook.sdk.data.AppInfo import com.trustlook.sdk.data.AppInfo
import com.xm.test.myfilemaster.R
import com.xm.test.myfilemaster.adapter.ScanResultAdapter
import com.xm.test.myfilemaster.view.CustomDialog
class ScanResultActivity : AppCompatActivity() { class ScanResultActivity : AppCompatActivity() {
......
package com.test.mydemo3.activity package com.xm.test.myfilemaster.activity
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
...@@ -14,14 +14,14 @@ import androidx.lifecycle.Observer ...@@ -14,14 +14,14 @@ import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.cloud.cleanjunksdk.similar.PicSimilarInfo import com.cloud.cleanjunksdk.similar.PicSimilarInfo
import com.cloud.cleanjunksdk.task.JunkScanCallback
import com.cloud.cleanjunksdk.task.SimilarScanCallBack import com.cloud.cleanjunksdk.task.SimilarScanCallBack
import com.test.mydemo3.MyApplication import com.xm.test.myfilemaster.MyApplication
import com.test.mydemo3.R import com.xm.test.myfilemaster.R
import com.test.mydemo3.adapter.ImageItemAdapter import com.xm.test.myfilemaster.adapter.ImageItemAdapter
import com.test.mydemo3.adapter.SimilarBeanAdapter import com.xm.test.myfilemaster.adapter.SimilarBeanAdapter
import com.test.mydemo3.base.BaseActivity import com.xm.test.myfilemaster.base.BaseActivity
import com.test.mydemo3.model.FileBean import com.xm.test.myfilemaster.model.FileBean
import com.xm.test.myfilemaster.view.CustomDialog
import java.io.File import java.io.File
class SimilarImagesActivity : AppCompatActivity(), OnClickListener{ class SimilarImagesActivity : AppCompatActivity(), OnClickListener{
...@@ -175,7 +175,7 @@ class SimilarImagesActivity : AppCompatActivity(), OnClickListener{ ...@@ -175,7 +175,7 @@ class SimilarImagesActivity : AppCompatActivity(), OnClickListener{
isClickEditBtn = true isClickEditBtn = true
} }
R.id.btn_delete ->{ R.id.btn_delete ->{
val customDialog = com.test.mydemo3.view.CustomDialog(this) val customDialog = CustomDialog(this)
customDialog.setsCancel(View.OnClickListener { customDialog.setsCancel(View.OnClickListener {
customDialog.dismiss() customDialog.dismiss()
}).setsConfirm(View.OnClickListener { }).setsConfirm(View.OnClickListener {
......
package com.test.mydemo3.adapter package com.xm.test.myfilemaster.adapter
import android.content.Context import android.content.Context
import android.util.SparseBooleanArray import android.util.SparseBooleanArray
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.BaseAdapter import android.widget.BaseAdapter
import android.widget.CheckBox import android.widget.CheckBox
import android.widget.ImageView import android.widget.ImageView
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.ListView import android.widget.ListView
import android.widget.RelativeLayout import android.widget.RelativeLayout
import android.widget.TextView import android.widget.TextView
import com.test.mydemo3.R import com.xm.test.myfilemaster.R
import com.test.mydemo3.model.CleanBean import com.xm.test.myfilemaster.model.CleanBean
import com.test.mydemo3.model.FileBean import com.xm.test.myfilemaster.model.FileBean
import com.test.mydemo3.util.FileUtil import com.xm.test.myfilemaster.util.FileUtil
class CleanAdapter( class CleanAdapter(
fileBeanList: ArrayList<CleanBean>, fileBeanList: ArrayList<CleanBean>,
context: Context, context: Context,
) : BaseAdapter(){ ) : BaseAdapter(){
private var dataBeanList: ArrayList<CleanBean> private var dataBeanList: ArrayList<CleanBean>
private var context: Context private var context: Context
private var inflater: LayoutInflater private var inflater: LayoutInflater
private var sparseBooleanArray = ArrayList<SparseBooleanArray>() private var sparseBooleanArray = ArrayList<SparseBooleanArray>()
private var itemAdapters = ArrayList<ItemAdapter>() private var itemAdapters = ArrayList<ItemAdapter>()
private lateinit var viewHolder: ViewHolder private lateinit var viewHolder: ViewHolder
var mFileCheckedItemList = ArrayList<ArrayList<FileBean>>() var mFileCheckedItemList = ArrayList<ArrayList<FileBean>>()
var mAllSizes = ArrayList<Long>() var mAllSizes = ArrayList<Long>()
companion object{ companion object{
var isCleanOver = false var isCleanOver = false
var isClickAlls = ArrayList<Boolean>() var isClickAlls = ArrayList<Boolean>()
} }
init { init {
this.dataBeanList = fileBeanList this.dataBeanList = fileBeanList
this.context = context this.context = context
this.inflater = LayoutInflater.from(context) this.inflater = LayoutInflater.from(context)
} }
override fun getCount(): Int { override fun getCount(): Int {
return dataBeanList.size return dataBeanList.size
} }
override fun getItem(position: Int): Any { override fun getItem(position: Int): Any {
return dataBeanList[position] return dataBeanList[position]
} }
override fun getItemId(position: Int): Long { override fun getItemId(position: Int): Long {
return position.toLong() return position.toLong()
} }
fun setData(fileBeanList: ArrayList<CleanBean>){ fun setData(fileBeanList: ArrayList<CleanBean>){
this.dataBeanList = fileBeanList this.dataBeanList = fileBeanList
notifyDataSetChanged() notifyDataSetChanged()
} }
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var view: View? = null var view: View? = null
if (convertView != null){ if (convertView != null){
view = convertView view = convertView
viewHolder = view.tag as ViewHolder viewHolder = view.tag as ViewHolder
}else{ }else{
viewHolder = ViewHolder() viewHolder = ViewHolder()
view = inflater.inflate(R.layout.clean_list_item_layout, null) view = inflater.inflate(R.layout.clean_list_item_layout, null)
viewHolder.listView = view.findViewById(R.id.clean_item_list) viewHolder.listView = view.findViewById(R.id.clean_item_list)
viewHolder.itemNameTv = view.findViewById(R.id.clean_item_name) viewHolder.itemNameTv = view.findViewById(R.id.clean_item_name)
viewHolder.unfoldImg = view.findViewById(R.id.clean_item_unfold) viewHolder.unfoldImg = view.findViewById(R.id.clean_item_unfold)
viewHolder.moreImg = view.findViewById(R.id.clean_item_more) viewHolder.moreImg = view.findViewById(R.id.clean_item_more)
viewHolder.sizeTv = view.findViewById(R.id.file_item_size) viewHolder.sizeTv = view.findViewById(R.id.file_item_size)
viewHolder.checkBox = view.findViewById(R.id.clean_item_check_box) viewHolder.checkBox = view.findViewById(R.id.clean_item_check_box)
viewHolder.itemBar = view.findViewById(R.id.clean_item_bar) viewHolder.itemBar = view.findViewById(R.id.clean_item_bar)
view.tag = viewHolder view.tag = viewHolder
} }
viewHolder.itemNameTv?.text = dataBeanList[position].typeName viewHolder.itemNameTv?.text = dataBeanList[position].typeName
setOnclickListener(viewHolder) setOnclickListener(viewHolder)
sparseBooleanArray.add(SparseBooleanArray()) sparseBooleanArray.add(SparseBooleanArray())
isClickAlls.add(false) isClickAlls.add(false)
mFileCheckedItemList.add(ArrayList()) mFileCheckedItemList.add(ArrayList())
val layoutParams = viewHolder.listView?.layoutParams as LinearLayout.LayoutParams val layoutParams = viewHolder.listView?.layoutParams as LinearLayout.LayoutParams
itemAdapters.add(ItemAdapter(context, dataBeanList[position].fileBeans, sparseBooleanArray[position], position)) itemAdapters.add(ItemAdapter(context, dataBeanList[position].fileBeans, sparseBooleanArray[position], position))
viewHolder.listView?.visibility = if (!isCleanOver) View.GONE else View.VISIBLE viewHolder.listView?.visibility = if (!isCleanOver) View.GONE else View.VISIBLE
viewHolder.unfoldImg?.visibility = if (!isCleanOver) View.GONE else View.VISIBLE viewHolder.unfoldImg?.visibility = if (!isCleanOver) View.GONE else View.VISIBLE
viewHolder.sizeTv?.visibility = if (!isCleanOver) View.GONE else View.VISIBLE viewHolder.sizeTv?.visibility = if (!isCleanOver) View.GONE else View.VISIBLE
viewHolder.checkBox?.visibility = if (!isCleanOver) View.GONE else View.VISIBLE viewHolder.checkBox?.visibility = if (!isCleanOver) View.GONE else View.VISIBLE
viewHolder.moreImg?.visibility = if (isCleanOver) View.GONE else View.VISIBLE viewHolder.moreImg?.visibility = if (isCleanOver) View.GONE else View.VISIBLE
var allSize: Long = 0 var allSize: Long = 0
for (fileBean in dataBeanList[position].fileBeans){ for (fileBean in dataBeanList[position].fileBeans){
allSize += fileBean.fileSize allSize += fileBean.fileSize
} }
viewHolder.sizeTv?.text = if (allSize > 1024 * 1024 * 1024){ viewHolder.sizeTv?.text = if (allSize > 1024 * 1024 * 1024){
"${allSize / 1024 / 1024 / 1024} GB" "${allSize / 1024 / 1024 / 1024} GB"
}else if (allSize > 1024 * 1024){ }else if (allSize > 1024 * 1024){
"${allSize / 1024 / 1024} MB" "${allSize / 1024 / 1024} MB"
}else if (allSize > 1024){ }else if (allSize > 1024){
"${allSize / 1024} KB" "${allSize / 1024} KB"
}else{ }else{
"${allSize} B" "${allSize} B"
} }
mAllSizes.add(allSize) mAllSizes.add(allSize)
layoutParams.height = FileUtil.dpToPx(62*itemAdapters[position]?.count!!, context) layoutParams.height = FileUtil.dpToPx(62*itemAdapters[position]?.count!!, context)
viewHolder.listView?.adapter = itemAdapters[position] viewHolder.listView?.adapter = itemAdapters[position]
viewHolder.itemBar?.setOnClickListener { viewHolder.itemBar?.setOnClickListener {
// Log.e("yanglin", "setViewOnclickListener: 11111111", ) // Log.e("yanglin", "setViewOnclickListener: 11111111", )
dataBeanList[position].isListViewShow = !dataBeanList[position].isListViewShow dataBeanList[position].isListViewShow = !dataBeanList[position].isListViewShow
// viewHolder.listView?.visibility = if (dataBeanList[position].isListViewShow) View.GONE else View.VISIBLE // viewHolder.listView?.visibility = if (dataBeanList[position].isListViewShow) View.GONE else View.VISIBLE
notifyDataSetChanged() notifyDataSetChanged()
} }
// viewHolder.listView?.visibility = if (!dataBeanList[position].isListViewShow) View.GONE else View.VISIBLE // viewHolder.listView?.visibility = if (!dataBeanList[position].isListViewShow) View.GONE else View.VISIBLE
viewHolder.listView?.setOnItemClickListener { parent, view, itemPosition, id -> viewHolder.listView?.setOnItemClickListener { parent, view, itemPosition, id ->
if (isCleanOver) if (isCleanOver)
updateCheckBoxStatus(position, view, itemPosition, viewHolder.listView!!, dataBeanList[position].fileBeans) updateCheckBoxStatus(position, view, itemPosition, viewHolder.listView!!, dataBeanList[position].fileBeans)
} }
viewHolder.checkBox?.setOnClickListener { viewHolder.checkBox?.setOnClickListener {
viewHolder.checkBox?.isChecked = !viewHolder.checkBox?.isChecked!! viewHolder.checkBox?.isChecked = !viewHolder.checkBox?.isChecked!!
selectAll(dataBeanList[position].fileBeans, viewHolder.checkBox?.isChecked!!, position) selectAll(dataBeanList[position].fileBeans, viewHolder.checkBox?.isChecked!!, position)
notifyDataSetChanged() notifyDataSetChanged()
} }
return view!! return view!!
} }
fun selectAll(fileBeanList: ArrayList<FileBean>, isChecked: Boolean, position: Int){ fun selectAll(fileBeanList: ArrayList<FileBean>, isChecked: Boolean, position: Int){
mFileCheckedItemList[position].clear() mFileCheckedItemList[position].clear()
setStateCheckedMap(position, isChecked) setStateCheckedMap(position, isChecked)
mFileCheckedItemList[position].addAll(fileBeanList) mFileCheckedItemList[position].addAll(fileBeanList)
} }
fun setStateCheckedMap(position: Int,isChecked: Boolean){ fun setStateCheckedMap(position: Int,isChecked: Boolean){
for(i in dataBeanList[position].fileBeans.indices){ for(i in dataBeanList[position].fileBeans.indices){
sparseBooleanArray[position].put(i, isChecked) sparseBooleanArray[position].put(i, isChecked)
viewHolder.listView?.setItemChecked(i, isChecked) viewHolder.listView?.setItemChecked(i, isChecked)
} }
} }
fun updateCheckBoxStatus(position: Int, view: View, itemPosition: Int, lv: ListView, fileBeanList: ArrayList<FileBean>){ fun updateCheckBoxStatus(position: Int, view: View, itemPosition: Int, lv: ListView, fileBeanList: ArrayList<FileBean>){
val viewHolder = view.tag as ItemAdapter.ItemViewHolder val viewHolder = view.tag as ItemAdapter.ItemViewHolder
viewHolder.selectSwitch.toggle() viewHolder.selectSwitch.toggle()
lv.setItemChecked(itemPosition, viewHolder.selectSwitch.isChecked) lv.setItemChecked(itemPosition, viewHolder.selectSwitch.isChecked)
sparseBooleanArray[position].put(itemPosition, viewHolder.selectSwitch.isChecked) sparseBooleanArray[position].put(itemPosition, viewHolder.selectSwitch.isChecked)
if (viewHolder.selectSwitch.isChecked){ if (viewHolder.selectSwitch.isChecked){
mFileCheckedItemList[position].add(fileBeanList[itemPosition]) mFileCheckedItemList[position].add(fileBeanList[itemPosition])
}else{ }else{
mFileCheckedItemList[position].remove(fileBeanList[itemPosition]) mFileCheckedItemList[position].remove(fileBeanList[itemPosition])
} }
itemAdapters[position]?.notifyDataSetChanged() itemAdapters[position]?.notifyDataSetChanged()
} }
private fun setOnclickListener(viewHolder: ViewHolder) { private fun setOnclickListener(viewHolder: ViewHolder) {
viewHolder.moreImg?.setOnClickListener { viewHolder.moreImg?.setOnClickListener {
} }
viewHolder.itemBar?.setOnClickListener { viewHolder.itemBar?.setOnClickListener {
} }
} }
class ViewHolder{ class ViewHolder{
var itemNameTv: TextView? = null var itemNameTv: TextView? = null
var unfoldImg: ImageView? = null var unfoldImg: ImageView? = null
var moreImg: ImageView? = null var moreImg: ImageView? = null
var sizeTv: TextView? = null var sizeTv: TextView? = null
var checkBox: CheckBox? = null var checkBox: CheckBox? = null
var listView: ListView? = null var listView: ListView? = null
var itemBar: View? = null var itemBar: View? = null
} }
private class ItemAdapter( private class ItemAdapter(
context: Context, context: Context,
dataList: ArrayList<FileBean>, dataList: ArrayList<FileBean>,
sparseBooleanArray: SparseBooleanArray, sparseBooleanArray: SparseBooleanArray,
itemPosition: Int itemPosition: Int
): BaseAdapter(){ ): BaseAdapter(){
private var context: Context private var context: Context
private var inflater: LayoutInflater private var inflater: LayoutInflater
private var dataList: ArrayList<FileBean> private var dataList: ArrayList<FileBean>
private var sparseBooleanArray: SparseBooleanArray private var sparseBooleanArray: SparseBooleanArray
private var itemPosition: Int private var itemPosition: Int
init { init {
this.context = context this.context = context
this.dataList = dataList this.dataList = dataList
this.inflater = LayoutInflater.from(context) this.inflater = LayoutInflater.from(context)
this.sparseBooleanArray = sparseBooleanArray this.sparseBooleanArray = sparseBooleanArray
this.itemPosition = itemPosition this.itemPosition = itemPosition
} }
override fun getCount(): Int { override fun getCount(): Int {
return dataList.size return dataList.size
} }
override fun getItem(position: Int): Any { override fun getItem(position: Int): Any {
return dataList[position] return dataList[position]
} }
override fun getItemId(position: Int): Long { override fun getItemId(position: Int): Long {
return position.toLong() return position.toLong()
} }
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var itemViewHolder: ItemViewHolder var itemViewHolder: ItemViewHolder
var view: View var view: View
if (convertView != null){ if (convertView != null){
view = convertView view = convertView
itemViewHolder = view.tag as ItemViewHolder itemViewHolder = view.tag as ItemViewHolder
}else{ }else{
itemViewHolder = ItemViewHolder() itemViewHolder = ItemViewHolder()
view = inflater.inflate(R.layout.files_item_layout, null) view = inflater.inflate(R.layout.files_item_layout, null)
itemViewHolder.fileIcon = view.findViewById(R.id.files_item_icon) itemViewHolder.fileIcon = view.findViewById(R.id.files_item_icon)
itemViewHolder.fileJoinTo = view.findViewById(R.id.file_join_to_img) itemViewHolder.fileJoinTo = view.findViewById(R.id.file_join_to_img)
itemViewHolder.fileNone = view.findViewById(R.id.file_item_none) itemViewHolder.fileNone = view.findViewById(R.id.file_item_none)
itemViewHolder.fileName = view.findViewById(R.id.file_item_name) itemViewHolder.fileName = view.findViewById(R.id.file_item_name)
itemViewHolder.selectSwitch = view.findViewById(R.id.file_select_switch) itemViewHolder.selectSwitch = view.findViewById(R.id.file_select_switch)
itemViewHolder.itemLayout = view.findViewById(R.id.item_layout) itemViewHolder.itemLayout = view.findViewById(R.id.item_layout)
view.tag = itemViewHolder view.tag = itemViewHolder
} }
itemViewHolder.fileJoinTo.visibility = View.GONE itemViewHolder.fileJoinTo.visibility = View.GONE
itemViewHolder.selectSwitch.visibility = if (!isCleanOver) View.GONE else View.VISIBLE itemViewHolder.selectSwitch.visibility = if (!isCleanOver) View.GONE else View.VISIBLE
itemViewHolder.selectSwitch.isChecked = sparseBooleanArray[position] itemViewHolder.selectSwitch.isChecked = sparseBooleanArray[position]
when(itemPosition){ when(itemPosition){
0 ->{ 0 ->{
itemViewHolder.fileName.text = dataList[position].fileName itemViewHolder.fileName.text = dataList[position].fileName
itemViewHolder.fileNone.text = dataList[position].filePath itemViewHolder.fileNone.text = dataList[position].filePath
} }
1 ->{ 1 ->{
itemViewHolder.fileIcon.setImageDrawable(dataList[position].drawable) itemViewHolder.fileIcon.setImageDrawable(dataList[position].drawable)
itemViewHolder.fileName.text = dataList[position].fileName itemViewHolder.fileName.text = dataList[position].fileName
itemViewHolder.fileNone.text = dataList[position].filePath itemViewHolder.fileNone.text = dataList[position].filePath
} }
3 ->{ 3 ->{
// itemViewHolder.fileIcon.setImageDrawable(dataList[position].drawable) // itemViewHolder.fileIcon.setImageDrawable(dataList[position].drawable)
itemViewHolder.fileIcon.setImageResource(R.drawable.ic_log_file) itemViewHolder.fileIcon.setImageResource(R.drawable.ic_log_file)
itemViewHolder.fileName.text = dataList[position].fileName itemViewHolder.fileName.text = dataList[position].fileName
itemViewHolder.fileNone.text = dataList[position].hint itemViewHolder.fileNone.text = dataList[position].hint
} }
4 ->{ 4 ->{
itemViewHolder.fileIcon.setImageResource(R.drawable.ic_log_file) itemViewHolder.fileIcon.setImageResource(R.drawable.ic_log_file)
itemViewHolder.fileName.text = dataList[position].fileName itemViewHolder.fileName.text = dataList[position].fileName
itemViewHolder.fileNone.text = dataList[position].filePath itemViewHolder.fileNone.text = dataList[position].filePath
} }
} }
itemViewHolder.fileIcon itemViewHolder.fileIcon
itemViewHolder.fileName itemViewHolder.fileName
itemViewHolder.fileNone itemViewHolder.fileNone
if (isCleanOver) View.GONE else View.VISIBLE if (isCleanOver) View.GONE else View.VISIBLE
return view return view
} }
class ItemViewHolder{ class ItemViewHolder{
lateinit var fileIcon: ImageView lateinit var fileIcon: ImageView
lateinit var fileJoinTo: ImageView lateinit var fileJoinTo: ImageView
lateinit var fileName: TextView lateinit var fileName: TextView
lateinit var fileNone: TextView lateinit var fileNone: TextView
lateinit var selectSwitch: CheckBox lateinit var selectSwitch: CheckBox
lateinit var itemLayout: RelativeLayout lateinit var itemLayout: RelativeLayout
} }
} }
} }
\ No newline at end of file
package com.test.mydemo3.adapter package com.xm.test.myfilemaster.adapter
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.test.mydemo3.R import com.xm.test.myfilemaster.R
import com.test.mydemo3.databinding.CleanListItemLayoutBinding import com.xm.test.myfilemaster.databinding.CleanListItemLayoutBinding
import com.test.mydemo3.databinding.FilesItemLayoutBinding import com.xm.test.myfilemaster.databinding.FilesItemLayoutBinding
import com.test.mydemo3.model.CleanBean import com.xm.test.myfilemaster.model.CleanBean
import com.test.mydemo3.model.FileBean import com.xm.test.myfilemaster.model.FileBean
class CleanAdapter2 : RecyclerView.Adapter<CleanAdapter2.AAA>() { class CleanAdapter2 : RecyclerView.Adapter<CleanAdapter2.AAA>() {
......
//package com.test.mydemo3.adapter //package com.test.mydemo3.adapter
// //
//import android.view.View //import android.view.View
//import android.view.ViewGroup //import android.view.ViewGroup
//import androidx.recyclerview.widget.RecyclerView //import androidx.recyclerview.widget.RecyclerView
//import androidx.recyclerview.widget.RecyclerView.ViewHolder //import androidx.recyclerview.widget.RecyclerView.ViewHolder
//import com.test.mydemo3.model.FileBean //import com.test.mydemo3.model.FileBean
// //
//class FileSimilarAdapter<T : ViewHolder?>() : RecyclerView.Adapter<T>(){ //class FileSimilarAdapter<T : ViewHolder?>() : RecyclerView.Adapter<T>(){
// //
// val fileList = arrayListOf<FileBean>() // val fileList = arrayListOf<FileBean>()
// private var firstRefresh = true // private var firstRefresh = true
// //
// fun setData(data: List<FileBean>) { // fun setData(data: List<FileBean>) {
// fileList.clear() // fileList.clear()
// fileList.addAll(data) // fileList.addAll(data)
//// notifyDataSetChanged() //// notifyDataSetChanged()
// } // }
// //
// fun addData(data: List<FileBean>) { // fun addData(data: List<FileBean>) {
// fileList.addAll(data) // fileList.addAll(data)
//// notifyDataSetChanged() //// notifyDataSetChanged()
// } // }
// //
// //
// fun clearData() { // fun clearData() {
// if (fileList.size == 0) return // if (fileList.size == 0) return
// fileList.clear() // fileList.clear()
//// notifyDataSetChanged() //// notifyDataSetChanged()
// } // }
// //
//// @SuppressLint("NotifyDataSetChanged") //// @SuppressLint("NotifyDataSetChanged")
// fun removeData(data: List<FileBean>) { // fun removeData(data: List<FileBean>) {
// data.forEach { // data.forEach {
// val index = fileList.indexOf(it) // val index = fileList.indexOf(it)
// if (index != -1) { // if (index != -1) {
// fileList.removeAt(index) // fileList.removeAt(index)
//// notifyItemRemoved(index) //// notifyItemRemoved(index)
// } // }
// } // }
// } // }
// //
//// override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): T & Any { //// override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): T & Any {
//// ////
//// ////
//// } //// }
// //
// override fun getItemCount(): Int { // override fun getItemCount(): Int {
// return fileList.size // return fileList.size
// } // }
// //
// override fun onBindViewHolder(holder: T & Any, position: Int) { // override fun onBindViewHolder(holder: T & Any, position: Int) {
// return // return
// } // }
// //
// //
//} //}
\ No newline at end of file
package com.test.mydemo3.adapter package com.xm.test.myfilemaster.adapter
import android.content.Context import android.content.Context
import android.util.SparseBooleanArray import android.util.SparseBooleanArray
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.BaseAdapter import android.widget.BaseAdapter
import android.widget.CheckBox import android.widget.CheckBox
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import com.airbnb.lottie.utils.Utils import com.xm.test.myfilemaster.R
import com.test.mydemo3.R import com.xm.test.myfilemaster.model.FileBean
import com.test.mydemo3.base.BaseActivity import com.xm.test.myfilemaster.util.FileUtil
import com.test.mydemo3.model.FileBean
import com.test.mydemo3.util.FileUtil class FilesItemViewAdapter(
mItemFileList: List<FileBean>, mContext: Context,
class FilesItemViewAdapter( stateCheckedMap: SparseBooleanArray
mItemFileList: List<FileBean>,mContext: Context, ): BaseAdapter() {
stateCheckedMap: SparseBooleanArray private var mFileBeanList: List<FileBean>
): BaseAdapter() { private var mInflater: LayoutInflater
private var mFileBeanList: List<FileBean> private var mContext: Context
private var mInflater: LayoutInflater private var mStateCheckedMap: SparseBooleanArray
private var mContext: Context private var isEditBtnClick = false
private var mStateCheckedMap: SparseBooleanArray private var isFileShow = true
private var isEditBtnClick = false init {
private var isFileShow = true this.mFileBeanList = mItemFileList
init { this.mContext = mContext
this.mFileBeanList = mItemFileList this.mInflater = LayoutInflater.from(mContext)
this.mContext = mContext this.mStateCheckedMap = stateCheckedMap
this.mInflater = LayoutInflater.from(mContext) }
this.mStateCheckedMap = stateCheckedMap
} fun setData(fileList: List<FileBean>){
this.mFileBeanList = fileList
fun setData(fileList: List<FileBean>){ this.notifyDataSetChanged()
this.mFileBeanList = fileList }
this.notifyDataSetChanged() override fun getCount(): Int {
}
override fun getCount(): Int { return mFileBeanList.size
}
return mFileBeanList.size
} override fun getItem(position: Int): Any {
return mFileBeanList[position]
override fun getItem(position: Int): Any { }
return mFileBeanList[position]
} override fun getItemId(position: Int): Long {
return position.toLong()
override fun getItemId(position: Int): Long { }
return position.toLong()
} override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { var viewHolder: ViewHolder? = null
var view : View? = null
var viewHolder: ViewHolder? = null
var view : View? = null if (convertView != null){
view = convertView
if (convertView != null){ viewHolder = view.tag as ViewHolder
view = convertView }else{
viewHolder = view.tag as ViewHolder view = mInflater.inflate(R.layout.files_item_layout, null)
}else{ viewHolder = ViewHolder()
view = mInflater.inflate(R.layout.files_item_layout, null) viewHolder.fileIcon = view.findViewById(R.id.files_item_icon)
viewHolder = ViewHolder() viewHolder.fileJoinTo = view.findViewById(R.id.file_join_to_img)
viewHolder.fileIcon = view.findViewById(R.id.files_item_icon) viewHolder.fileName = view.findViewById(R.id.file_item_name)
viewHolder.fileJoinTo = view.findViewById(R.id.file_join_to_img) viewHolder.fileNone = view.findViewById(R.id.file_item_none)
viewHolder.fileName = view.findViewById(R.id.file_item_name) viewHolder.selectSwitch = view.findViewById(R.id.file_select_switch)
viewHolder.fileNone = view.findViewById(R.id.file_item_none) view.tag = viewHolder
viewHolder.selectSwitch = view.findViewById(R.id.file_select_switch) }
view.tag = viewHolder val filesItemBean = mFileBeanList[position]
}
val filesItemBean = mFileBeanList[position] viewHolder.fileName.text = filesItemBean.fileName
if (filesItemBean.isDir){
viewHolder.fileName.text = filesItemBean.fileName viewHolder.fileIcon.setImageResource(R.drawable.ic_files)
if (filesItemBean.isDir){ viewHolder.fileJoinTo.visibility = if(isEditBtnClick) View.GONE else View.VISIBLE
viewHolder.fileIcon.setImageResource(R.drawable.ic_files) viewHolder.selectSwitch.visibility = if(isEditBtnClick) View.VISIBLE else View.GONE
viewHolder.fileJoinTo.visibility = if(isEditBtnClick) View.GONE else View.VISIBLE val (year, month, day) = FileUtil.getFileCreateTime(filesItemBean.filePath)
viewHolder.selectSwitch.visibility = if(isEditBtnClick) View.VISIBLE else View.GONE viewHolder.fileNone.text = "${filesItemBean.childList.size} item | $month-$day, $year"
val (year, month, day) = FileUtil.getFileCreateTime(filesItemBean.filePath) }else {
viewHolder.fileNone.text = "${filesItemBean.childList.size} item | $month-$day, $year" val icon = when(filesItemBean.fileType){
}else { "png","jpg"->{
val icon = when(filesItemBean.fileType){ R.drawable.ic_image}
"png","jpg"->{R.drawable.ic_image} "mp4", "3gp", "avi"->{R.drawable.ic_video}
"mp4", "3gp", "avi"->{R.drawable.ic_video} "mp3","aac","wav"->{R.drawable.ic_audio}
"mp3","aac","wav"->{R.drawable.ic_audio} "zip"->{R.drawable.ic_zip}
"zip"->{R.drawable.ic_zip} "apk"->{R.drawable.ic_apk}
"apk"->{R.drawable.ic_apk} "log"->{R.drawable.ic_log_file}
"log"->{R.drawable.ic_log_file} "doc","docm","docx"->{R.drawable.ic_word}
"doc","docm","docx"->{R.drawable.ic_word} "xlsx", "xlsm", "xlsb", "xltx"->{R.drawable.ic_excel}
"xlsx", "xlsm", "xlsb", "xltx"->{R.drawable.ic_excel} "ppt"->{R.drawable.ic_ppt}
"ppt"->{R.drawable.ic_ppt} "pdf"->{R.drawable.ic_pdf}
"pdf"->{R.drawable.ic_pdf} "txt"->{R.drawable.ic_txt}
"txt"->{R.drawable.ic_txt} else -> {R.drawable.ic_copy}
else -> {R.drawable.ic_copy} }
} viewHolder.fileIcon.setImageResource(icon)
viewHolder.fileIcon.setImageResource(icon) viewHolder.fileJoinTo.visibility = View.GONE
viewHolder.fileJoinTo.visibility = View.GONE viewHolder.selectSwitch.visibility = if(isEditBtnClick) View.VISIBLE else View.GONE
viewHolder.selectSwitch.visibility = if(isEditBtnClick) View.VISIBLE else View.GONE var sizeStr : String = ""
var sizeStr : String = "" sizeStr = if (filesItemBean.fileSize > 1024 * 1024 * 1024){
sizeStr = if (filesItemBean.fileSize > 1024 * 1024 * 1024){ "size ${filesItemBean.fileSize / 1024 / 1024 / 1024} GB"
"size ${filesItemBean.fileSize / 1024 / 1024 / 1024} GB" }else if (filesItemBean.fileSize > 1024 * 1024){
}else if (filesItemBean.fileSize > 1024 * 1024){ "size ${filesItemBean.fileSize / 1024 / 1024} MB"
"size ${filesItemBean.fileSize / 1024 / 1024} MB" }else if (filesItemBean.fileSize > 1024){
}else if (filesItemBean.fileSize > 1024){ "size ${filesItemBean.fileSize / 1024} KB"
"size ${filesItemBean.fileSize / 1024} KB" }else{
}else{ "size ${filesItemBean.fileSize} B"
"size ${filesItemBean.fileSize} B" }
} viewHolder.fileNone.text = "$sizeStr,type ${filesItemBean.fileType}"
viewHolder.fileNone.text = "$sizeStr,type ${filesItemBean.fileType}" }
}
viewHolder.selectSwitch.isChecked = mStateCheckedMap[position]
viewHolder.selectSwitch.isChecked = mStateCheckedMap[position] // viewHolder.selectSwitch.visibility =
// viewHolder.selectSwitch.visibility = // if (BaseActivity.isClickEditBtn) View.VISIBLE else View.GONE
// if (BaseActivity.isClickEditBtn) View.VISIBLE else View.GONE // viewHolder.fileJoinTo.visibility =
// viewHolder.fileJoinTo.visibility = // if (!BaseActivity.isClickEditBtn) View.VISIBLE else View.GONE
// if (!BaseActivity.isClickEditBtn) View.VISIBLE else View.GONE
return view!!
return view!! }
} fun setEditClickState(isClick: Boolean){
fun setEditClickState(isClick: Boolean){ this.isEditBtnClick = isClick
this.isEditBtnClick = isClick }
} fun setFileShow(isShow: Boolean){
fun setFileShow(isShow: Boolean){ isFileShow = isShow
isFileShow = isShow }
}
class ViewHolder{
class ViewHolder{ lateinit var fileIcon: ImageView
lateinit var fileIcon: ImageView lateinit var fileJoinTo: ImageView
lateinit var fileJoinTo: ImageView lateinit var fileName: TextView
lateinit var fileName: TextView lateinit var fileNone: TextView
lateinit var fileNone: TextView lateinit var selectSwitch: CheckBox
lateinit var selectSwitch: CheckBox }
}
} }
\ No newline at end of file
package com.test.mydemo3.adapter package com.xm.test.myfilemaster.adapter
import android.content.Context import android.content.Context
import android.graphics.BitmapFactory import android.graphics.BitmapFactory
import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.BitmapDrawable
import android.util.Log import android.util.Log
import android.util.SparseBooleanArray import android.util.SparseBooleanArray
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.BaseAdapter import android.widget.BaseAdapter
import android.widget.CheckBox import android.widget.CheckBox
import android.widget.GridView import android.widget.GridView
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import com.cloud.cleanjunksdk.similar.PicSimilarInfo import com.cloud.cleanjunksdk.similar.PicSimilarInfo
import com.test.mydemo3.R import com.xm.test.myfilemaster.R
import com.test.mydemo3.activity.SimilarImagesActivity import com.xm.test.myfilemaster.activity.SimilarImagesActivity
import com.test.mydemo3.model.FileBean import com.xm.test.myfilemaster.model.FileBean
import com.test.mydemo3.util.FileUtil import com.xm.test.myfilemaster.util.FileUtil
class ImageItemAdapter(mContext: Context class ImageItemAdapter(mContext: Context
, mDataList: ArrayList<ArrayList<FileBean>>): BaseAdapter() { , mDataList: ArrayList<ArrayList<FileBean>>): BaseAdapter() {
private var mContext: Context private var mContext: Context
private var mDataList: ArrayList<ArrayList<FileBean>> private var mDataList: ArrayList<ArrayList<FileBean>>
private var mInfler: LayoutInflater private var mInfler: LayoutInflater
private var mItemCheckedArray = ArrayList<SparseBooleanArray>() private var mItemCheckedArray = ArrayList<SparseBooleanArray>()
private lateinit var mImageViewHolder: ViewHolder private lateinit var mImageViewHolder: ViewHolder
var itemAdapter = ArrayList<ItemAdapter>() var itemAdapter = ArrayList<ItemAdapter>()
var mCheckedLists = ArrayList<FileBean>() var mCheckedLists = ArrayList<FileBean>()
init { init {
this.mInfler = LayoutInflater.from(mContext) this.mInfler = LayoutInflater.from(mContext)
this.mContext = mContext this.mContext = mContext
this.mDataList = mDataList this.mDataList = mDataList
} }
override fun getCount(): Int { override fun getCount(): Int {
Log.e("yanglin", "getCount: mdatalist ${mDataList.size}", ) Log.e("yanglin", "getCount: mdatalist ${mDataList.size}", )
return mDataList.size return mDataList.size
} }
override fun getItem(position: Int): Any { override fun getItem(position: Int): Any {
return mDataList[position] return mDataList[position]
} }
override fun getItemId(position: Int): Long { override fun getItemId(position: Int): Long {
return position.toLong() return position.toLong()
} }
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var view = convertView var view = convertView
if (convertView != null){ if (convertView != null){
mImageViewHolder = view?.tag as ViewHolder mImageViewHolder = view?.tag as ViewHolder
}else{ }else{
mImageViewHolder = ViewHolder() mImageViewHolder = ViewHolder()
view = mInfler.inflate(R.layout.image_item_layout, null) view = mInfler.inflate(R.layout.image_item_layout, null)
mImageViewHolder.similar = view.findViewById(R.id.similar_image_num_text) mImageViewHolder.similar = view.findViewById(R.id.similar_image_num_text)
mImageViewHolder.itemGrid = view.findViewById(R.id.image_item_grid) mImageViewHolder.itemGrid = view.findViewById(R.id.image_item_grid)
view.tag = mImageViewHolder view.tag = mImageViewHolder
} }
if (mItemCheckedArray.size != mDataList.size){ if (mItemCheckedArray.size != mDataList.size){
mItemCheckedArray.add(SparseBooleanArray()) mItemCheckedArray.add(SparseBooleanArray())
// itemAdapter.add(ItemAdapter(mDataList[position], mContext, mItemCheckedArray[position], position)) // itemAdapter.add(ItemAdapter(mDataList[position], mContext, mItemCheckedArray[position], position))
} }
mImageViewHolder.similar.text = mImageViewHolder.similar.text =
String.format(mContext.getString(R.string.similar, mDataList[position].size.toString())) String.format(mContext.getString(R.string.similar, mDataList[position].size.toString()))
val layoutParams = mImageViewHolder.itemGrid.layoutParams val layoutParams = mImageViewHolder.itemGrid.layoutParams
if (itemAdapter[position].count.toFloat() / 4.0 == 1.0){ if (itemAdapter[position].count.toFloat() / 4.0 == 1.0){
layoutParams.height = FileUtil.dpToPx(83*(itemAdapter[position].count / 4), mContext) layoutParams.height = FileUtil.dpToPx(83*(itemAdapter[position].count / 4), mContext)
}else{ }else{
layoutParams.height = FileUtil.dpToPx(83*(itemAdapter[position].count / 4 + 1 ), mContext) layoutParams.height = FileUtil.dpToPx(83*(itemAdapter[position].count / 4 + 1 ), mContext)
} }
mImageViewHolder.itemGrid.setOnItemClickListener { itemParent, itemView, itemPosition, itemId -> mImageViewHolder.itemGrid.setOnItemClickListener { itemParent, itemView, itemPosition, itemId ->
if (SimilarImagesActivity.isClickEditBtn){ if (SimilarImagesActivity.isClickEditBtn){
println("yanglin positioin $position itemPostion $itemPosition") println("yanglin positioin $position itemPostion $itemPosition")
updateCheckBoxStatus(position, itemView, itemPosition, mImageViewHolder.itemGrid, mDataList[position]) updateCheckBoxStatus(position, itemView, itemPosition, mImageViewHolder.itemGrid, mDataList[position])
} }
} }
mImageViewHolder.itemGrid.adapter = itemAdapter[position] mImageViewHolder.itemGrid.adapter = itemAdapter[position]
return view!! return view!!
} }
fun selectAll(isChecked: Boolean){ fun selectAll(isChecked: Boolean){
Log.e("yanglin", "selectAll: $isChecked", ) Log.e("yanglin", "selectAll: $isChecked", )
mCheckedLists.clear() mCheckedLists.clear()
if (!isChecked){ if (!isChecked){
for (i in 0..< mDataList.size){ for (i in 0..< mDataList.size){
mItemCheckedArray[i].clear() mItemCheckedArray[i].clear()
} }
}else{ }else{
for (i in 0..< mDataList.size){ for (i in 0..< mDataList.size){
mCheckedLists.clear() mCheckedLists.clear()
setStateCheckedMap(i, isChecked) setStateCheckedMap(i, isChecked)
mCheckedLists.addAll(mDataList[i]) mCheckedLists.addAll(mDataList[i])
itemAdapter[i].notifyDataSetChanged() itemAdapter[i].notifyDataSetChanged()
} }
} }
} }
fun setStateCheckedMap(position: Int,isChecked: Boolean){ fun setStateCheckedMap(position: Int,isChecked: Boolean){
for(i in mDataList[position].indices){ for(i in mDataList[position].indices){
mItemCheckedArray[position].put(i, isChecked) mItemCheckedArray[position].put(i, isChecked)
mImageViewHolder.itemGrid.setItemChecked(i, isChecked) mImageViewHolder.itemGrid.setItemChecked(i, isChecked)
} }
} }
fun updateCheckBoxStatus(position: Int, view: View, itemPosition: Int, lv: GridView, fileBeanList: ArrayList<FileBean>){ fun updateCheckBoxStatus(position: Int, view: View, itemPosition: Int, lv: GridView, fileBeanList: ArrayList<FileBean>){
val viewHolder = view.tag as ItemAdapter.ViewHolder val viewHolder = view.tag as ItemAdapter.ViewHolder
viewHolder.checkBox.toggle() viewHolder.checkBox.toggle()
lv.setItemChecked(itemPosition, viewHolder.checkBox.isChecked) lv.setItemChecked(itemPosition, viewHolder.checkBox.isChecked)
mItemCheckedArray[position].put(itemPosition, viewHolder.checkBox.isChecked) mItemCheckedArray[position].put(itemPosition, viewHolder.checkBox.isChecked)
if (viewHolder.checkBox.isChecked){ if (viewHolder.checkBox.isChecked){
mCheckedLists.add(fileBeanList[itemPosition]) mCheckedLists.add(fileBeanList[itemPosition])
}else{ }else{
mCheckedLists.remove(fileBeanList[itemPosition]) mCheckedLists.remove(fileBeanList[itemPosition])
} }
itemAdapter[position].notifyDataSetChanged() itemAdapter[position].notifyDataSetChanged()
} }
fun setData(datas: ArrayList<ArrayList<FileBean>>){ fun setData(datas: ArrayList<ArrayList<FileBean>>){
this.mDataList = datas this.mDataList = datas
notifyDataSetChanged() notifyDataSetChanged()
} }
class ViewHolder{ class ViewHolder{
lateinit var similar: TextView lateinit var similar: TextView
lateinit var itemGrid: GridView lateinit var itemGrid: GridView
} }
class ItemAdapter(list: ArrayList<PicSimilarInfo>, context: Context, class ItemAdapter(list: ArrayList<PicSimilarInfo>, context: Context,
mStateCheckedMap: SparseBooleanArray, mPosition: Int): BaseAdapter(){ mStateCheckedMap: SparseBooleanArray, mPosition: Int): BaseAdapter(){
private var context: Context private var context: Context
private var dataList: ArrayList<PicSimilarInfo> private var dataList: ArrayList<PicSimilarInfo>
private var stateCheckedMap: SparseBooleanArray private var stateCheckedMap: SparseBooleanArray
private var inflater: LayoutInflater private var inflater: LayoutInflater
private var mPosition: Int private var mPosition: Int
init { init {
this.context = context this.context = context
this.dataList = list this.dataList = list
this.stateCheckedMap = mStateCheckedMap this.stateCheckedMap = mStateCheckedMap
this.inflater = LayoutInflater.from(context) this.inflater = LayoutInflater.from(context)
this.mPosition = mPosition this.mPosition = mPosition
} }
override fun getCount(): Int { override fun getCount(): Int {
return dataList.size return dataList.size
} }
override fun getItem(position: Int): Any { override fun getItem(position: Int): Any {
return dataList[position] return dataList[position]
} }
override fun getItemId(position: Int): Long { override fun getItemId(position: Int): Long {
return position.toLong() return position.toLong()
} }
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var view = convertView var view = convertView
val itemHolder: ViewHolder val itemHolder: ViewHolder
if (convertView != null){ if (convertView != null){
itemHolder = view?.tag as ViewHolder itemHolder = view?.tag as ViewHolder
}else{ }else{
view = inflater.inflate(R.layout.item_layout, null) view = inflater.inflate(R.layout.item_layout, null)
itemHolder = ViewHolder() itemHolder = ViewHolder()
itemHolder.imageView = view.findViewById(R.id.item_image) itemHolder.imageView = view.findViewById(R.id.item_image)
itemHolder.checkBox = view.findViewById(R.id.check_item_image_switch) itemHolder.checkBox = view.findViewById(R.id.check_item_image_switch)
view.tag = itemHolder view.tag = itemHolder
} }
// BitmapDrawable(context.resources, BitmapFactory.decodeFile(dataList[position].filePath)) // BitmapDrawable(context.resources, BitmapFactory.decodeFile(dataList[position].filePath))
itemHolder.checkBox.visibility = if (SimilarImagesActivity.isClickEditBtn) View.VISIBLE else View.GONE itemHolder.checkBox.visibility = if (SimilarImagesActivity.isClickEditBtn) View.VISIBLE else View.GONE
itemHolder.imageView.setImageDrawable(BitmapDrawable(context.resources, BitmapFactory.decodeFile(dataList[mPosition].getmList()[position].path))) itemHolder.imageView.setImageDrawable(BitmapDrawable(context.resources, BitmapFactory.decodeFile(dataList[mPosition].getmList()[position].path)))
itemHolder.imageView.layoutParams.height = FileUtil.dpToPx(83, context) itemHolder.imageView.layoutParams.height = FileUtil.dpToPx(83, context)
// if (DuplicateImagesActivity.isClickCheckBoxAllBtn){ // if (DuplicateImagesActivity.isClickCheckBoxAllBtn){
// itemHolder.checkBox.isChecked = true // itemHolder.checkBox.isChecked = true
// }else{ // }else{
itemHolder.checkBox.isChecked = stateCheckedMap[position] itemHolder.checkBox.isChecked = stateCheckedMap[position]
// } // }
return view!! return view!!
} }
fun setData(datas: ArrayList<PicSimilarInfo>){ fun setData(datas: ArrayList<PicSimilarInfo>){
this.dataList = datas this.dataList = datas
} }
class ViewHolder{ class ViewHolder{
lateinit var checkBox: CheckBox lateinit var checkBox: CheckBox
lateinit var imageView: ImageView lateinit var imageView: ImageView
} }
} }
} }
\ No newline at end of file
package com.test.mydemo3.adapter package com.xm.test.myfilemaster.adapter
import android.content.Context import android.content.Context
import android.graphics.BitmapFactory import android.util.SparseBooleanArray
import android.graphics.drawable.BitmapDrawable import android.view.LayoutInflater
import android.os.Looper import android.view.View
import android.util.SparseBooleanArray import android.view.ViewGroup
import android.view.LayoutInflater import android.widget.BaseAdapter
import android.view.View import android.widget.CheckBox
import android.view.ViewGroup import android.widget.ImageView
import android.widget.BaseAdapter import com.xm.test.myfilemaster.R
import android.widget.CheckBox import com.xm.test.myfilemaster.activity.MediaActivity
import android.widget.ImageView import com.xm.test.myfilemaster.model.FileBean
import com.bumptech.glide.Glide import com.xm.test.myfilemaster.util.FileUtil
import com.test.mydemo3.R
import com.test.mydemo3.activity.MediaActivity class MediaAdapter(
import com.test.mydemo3.model.FileBean mListData: ArrayList<FileBean>,
import com.test.mydemo3.util.FileUtil mContext: Context,
import com.test.mydemo3.util.MediaUtil mStateCheckedMap: SparseBooleanArray,
import java.util.logging.Handler fileType: String,
mItemHeight: Int
class MediaAdapter( ): BaseAdapter() {
mListData: ArrayList<FileBean>,
mContext: Context, private var mListData: ArrayList<FileBean>
mStateCheckedMap: SparseBooleanArray, private var mContext: Context
fileType: String, private var mInflater: LayoutInflater
mItemHeight: Int private var mStateCheckedMap: SparseBooleanArray
): BaseAdapter() { private var mFileType: String
private var mItemHeight: Int = 0
private var mListData: ArrayList<FileBean> private var dpToPx = 0
private var mContext: Context init {
private var mInflater: LayoutInflater this.mListData = mListData
private var mStateCheckedMap: SparseBooleanArray this.mContext = mContext
private var mFileType: String this.mStateCheckedMap = mStateCheckedMap
private var mItemHeight: Int = 0 this.mInflater = LayoutInflater.from(mContext)
private var dpToPx = 0 this.mFileType = fileType
init { this.mItemHeight =mItemHeight
this.mListData = mListData this.dpToPx = FileUtil.dpToPx(mItemHeight, mContext)
this.mContext = mContext }
this.mStateCheckedMap = mStateCheckedMap override fun getCount(): Int {
this.mInflater = LayoutInflater.from(mContext)
this.mFileType = fileType return mListData.size
this.mItemHeight =mItemHeight }
this.dpToPx = FileUtil.dpToPx(mItemHeight, mContext)
} override fun getItem(position: Int): Any {
override fun getCount(): Int { return mListData[position]
}
return mListData.size
} override fun getItemId(position: Int): Long {
return position.toLong()
override fun getItem(position: Int): Any { }
return mListData[position]
} override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var mViewHolder: ViewHolder
override fun getItemId(position: Int): Long { var view:View? = convertView
return position.toLong() if (view != null){
} mViewHolder = view.tag as ViewHolder
}else{
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { mViewHolder = ViewHolder()
var mViewHolder: ViewHolder view = mInflater.inflate(R.layout.item_layout,null)
var view:View? = convertView
if (view != null){ mViewHolder.image = view.findViewById(R.id.item_image)
mViewHolder = view.tag as ViewHolder mViewHolder.checkedBox = view.findViewById(R.id.check_item_image_switch)
}else{ view.tag = mViewHolder
mViewHolder = ViewHolder() }
view = mInflater.inflate(R.layout.item_layout,null)
if (mFileType.equals("image")){
mViewHolder.image = view.findViewById(R.id.item_image)
mViewHolder.checkedBox = view.findViewById(R.id.check_item_image_switch) mViewHolder.image.setImageDrawable(mListData[position].drawable)
view.tag = mViewHolder mViewHolder.image.layoutParams.height = dpToPx
}
}else{
if (mFileType.equals("image")){ mViewHolder.image.setImageResource(R.drawable.ic_video)
mViewHolder.image.layoutParams.height = dpToPx
mViewHolder.image.setImageDrawable(mListData[position].drawable) }
mViewHolder.image.layoutParams.height = dpToPx
mViewHolder.checkedBox.visibility = if (MediaActivity.isClickEditBtn) View.VISIBLE else View.GONE
}else{
mViewHolder.image.setImageResource(R.drawable.ic_video) mViewHolder.checkedBox.isChecked = mStateCheckedMap[position]
mViewHolder.image.layoutParams.height = dpToPx
} return view!!
}
mViewHolder.checkedBox.visibility = if (MediaActivity.isClickEditBtn) View.VISIBLE else View.GONE fun setItemHeight(height: Int){
this.mItemHeight = height
mViewHolder.checkedBox.isChecked = mStateCheckedMap[position] }
fun setData(data: ArrayList<FileBean>) {
return view!! this.mListData = data
} this.notifyDataSetChanged()
fun setItemHeight(height: Int){ }
this.mItemHeight = height
} class ViewHolder{
fun setData(data: ArrayList<FileBean>) { lateinit var image: ImageView
this.mListData = data lateinit var checkedBox: CheckBox
this.notifyDataSetChanged() }
}
class ViewHolder{
lateinit var image: ImageView
lateinit var checkedBox: CheckBox
}
} }
\ No newline at end of file
package com.test.mydemo3.adapter package com.xm.test.myfilemaster.adapter
import android.content.Context import android.content.Context
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.BaseAdapter import android.widget.BaseAdapter
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import com.test.mydemo3.R import com.trustlook.sdk.data.AppInfo
import com.trustlook.sdk.data.AppInfo import com.xm.test.myfilemaster.R
class ScanResultAdapter(dataList: ArrayList<AppInfo>, class ScanResultAdapter(dataList: ArrayList<AppInfo>,
context: Context) : BaseAdapter() { context: Context) : BaseAdapter() {
private var dataList: ArrayList<AppInfo> private var dataList: ArrayList<AppInfo>
private var inflater: LayoutInflater private var inflater: LayoutInflater
private var context: Context private var context: Context
init { init {
this.dataList = dataList this.dataList = dataList
this.context = context this.context = context
this.inflater = LayoutInflater.from(context) this.inflater = LayoutInflater.from(context)
} }
override fun getCount(): Int { override fun getCount(): Int {
return dataList.size return dataList.size
} }
override fun getItem(position: Int): Any { override fun getItem(position: Int): Any {
return dataList[position] return dataList[position]
} }
override fun getItemId(position: Int): Long { override fun getItemId(position: Int): Long {
return position.toLong() return position.toLong()
} }
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var view: View var view: View
var viewHolder : ScanResultViewHolder var viewHolder : ScanResultViewHolder
if (convertView != null){ if (convertView != null){
view = convertView view = convertView
viewHolder = view.tag as ScanResultViewHolder viewHolder = view.tag as ScanResultViewHolder
}else{ }else{
viewHolder = ScanResultViewHolder() viewHolder = ScanResultViewHolder()
view = inflater.inflate(R.layout.scan_result_list_item_layout, null) view = inflater.inflate(R.layout.scan_result_list_item_layout, null)
viewHolder.appIcon = view.findViewById(R.id.scan_app_icon) viewHolder.appIcon = view.findViewById(R.id.scan_app_icon)
viewHolder.appName = view.findViewById(R.id.scan_app_name) viewHolder.appName = view.findViewById(R.id.scan_app_name)
viewHolder.appHint = view.findViewById(R.id.scan_app_hint) viewHolder.appHint = view.findViewById(R.id.scan_app_hint)
view.tag = viewHolder view.tag = viewHolder
} }
viewHolder.appIcon viewHolder.appIcon
viewHolder.appName.text = dataList[position].appName viewHolder.appName.text = dataList[position].appName
viewHolder.appHint.text = dataList[position].virusName viewHolder.appHint.text = dataList[position].virusName
return view return view
} }
class ScanResultViewHolder{ class ScanResultViewHolder{
lateinit var appIcon: ImageView lateinit var appIcon: ImageView
lateinit var appName: TextView lateinit var appName: TextView
lateinit var appHint: TextView lateinit var appHint: TextView
} }
} }
\ No newline at end of file
package com.test.mydemo3.adapter package com.xm.test.myfilemaster.adapter
import android.content.Context import android.content.Context
import android.util.Log import android.util.Log
import android.util.SparseBooleanArray import android.util.SparseBooleanArray
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.GridView import android.widget.GridView
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.cloud.cleanjunksdk.similar.PicInfo import com.cloud.cleanjunksdk.similar.PicInfo
import com.cloud.cleanjunksdk.similar.PicSimilarInfo import com.cloud.cleanjunksdk.similar.PicSimilarInfo
import com.test.mydemo3.R import com.xm.test.myfilemaster.R
import com.test.mydemo3.activity.SimilarImagesActivity import com.xm.test.myfilemaster.activity.SimilarImagesActivity
import com.test.mydemo3.databinding.ImageItemLayoutBinding import com.xm.test.myfilemaster.databinding.ImageItemLayoutBinding
import com.test.mydemo3.util.FileUtil import com.xm.test.myfilemaster.util.FileUtil
class SimilarBeanAdapter(context: Context) : RecyclerView.Adapter<SimilarBeanAdapter.AA>() { class SimilarBeanAdapter(context: Context) : RecyclerView.Adapter<SimilarBeanAdapter.AA>() {
private val list = arrayListOf<PicSimilarInfo>() private val list = arrayListOf<PicSimilarInfo>()
private var context: Context private var context: Context
var mCheckedLists: MutableList<PicInfo> = mutableListOf<PicInfo>() var mCheckedLists: MutableList<PicInfo> = mutableListOf<PicInfo>()
private var mItemCheckedArray = ArrayList<SparseBooleanArray>() private var mItemCheckedArray = ArrayList<SparseBooleanArray>()
val mGridAdapters = ArrayList<SimilarGridAdapter>() val mGridAdapters = ArrayList<SimilarGridAdapter>()
val holders = ArrayList<AA>() val holders = ArrayList<AA>()
init { init {
this.context = context this.context = context
} }
fun Int.inflate(parent: ViewGroup, attachToRoot: Boolean = false): View { fun Int.inflate(parent: ViewGroup, attachToRoot: Boolean = false): View {
return LayoutInflater.from(parent.context).inflate(this, parent, attachToRoot) return LayoutInflater.from(parent.context).inflate(this, parent, attachToRoot)
} }
class AA(view: View) : RecyclerView.ViewHolder(view) { class AA(view: View) : RecyclerView.ViewHolder(view) {
val binding = ImageItemLayoutBinding.bind(view) val binding = ImageItemLayoutBinding.bind(view)
} }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AA { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AA {
val root = R.layout.image_item_layout.inflate(parent) val root = R.layout.image_item_layout.inflate(parent)
return AA(root) return AA(root)
} }
override fun getItemCount(): Int { override fun getItemCount(): Int {
return list.size return list.size
} }
override fun onBindViewHolder(holder: AA, position: Int) { override fun onBindViewHolder(holder: AA, position: Int) {
holders.add(holder) holders.add(holder)
if (mItemCheckedArray.size != list.size){ if (mItemCheckedArray.size != list.size){
mItemCheckedArray.add(SparseBooleanArray()) mItemCheckedArray.add(SparseBooleanArray())
// itemAdapter.add(ItemAdapter(mDataList[position], mContext, mItemCheckedArray[position], position)) // itemAdapter.add(ItemAdapter(mDataList[position], mContext, mItemCheckedArray[position], position))
} }
mGridAdapters.add(SimilarGridAdapter(list[position].getmList(), context, mItemCheckedArray[position], position)) mGridAdapters.add(SimilarGridAdapter(list[position].getmList(), context, mItemCheckedArray[position], position))
// val data = list[position] // val data = list[position]
holder.binding.similarImageNumText.text = holder.binding.similarImageNumText.text =
String.format(context.getString(R.string.similar, list[position].getmList().size.toString())) String.format(context.getString(R.string.similar, list[position].getmList().size.toString()))
val layoutParams = holder.binding.imageItemGrid.layoutParams val layoutParams = holder.binding.imageItemGrid.layoutParams
if (list[position].getmList().size.toFloat() / 4.0 == 1.0){ if (list[position].getmList().size.toFloat() / 4.0 == 1.0){
layoutParams.height = FileUtil.dpToPx(83*(list[position].getmList().size / 4), context) layoutParams.height = FileUtil.dpToPx(83*(list[position].getmList().size / 4), context)
}else{ }else{
layoutParams.height = FileUtil.dpToPx(83*(list[position].getmList().size / 4 + 1 ), context) layoutParams.height = FileUtil.dpToPx(83*(list[position].getmList().size / 4 + 1 ), context)
} }
holder.binding.imageItemGrid.setOnItemClickListener { parent, view, itemPosition, id -> holder.binding.imageItemGrid.setOnItemClickListener { parent, view, itemPosition, id ->
if (SimilarImagesActivity.isClickEditBtn){ if (SimilarImagesActivity.isClickEditBtn){
println("yanglin positioin $position itemPostion $itemPosition") println("yanglin positioin $position itemPostion $itemPosition")
updateCheckBoxStatus(position, view, itemPosition, holder.binding.imageItemGrid, list[position].getmList()) updateCheckBoxStatus(position, view, itemPosition, holder.binding.imageItemGrid, list[position].getmList())
} }
} }
holder.binding.imageItemGrid.adapter = mGridAdapters[position] holder.binding.imageItemGrid.adapter = mGridAdapters[position]
} }
fun updateCheckBoxStatus(position: Int, view: View, itemPosition: Int, lv: GridView, fileBeanList: MutableList<PicInfo>){ fun updateCheckBoxStatus(position: Int, view: View, itemPosition: Int, lv: GridView, fileBeanList: MutableList<PicInfo>){
val viewHolder = view.tag as ImageItemAdapter.ItemAdapter.ViewHolder val viewHolder = view.tag as ImageItemAdapter.ItemAdapter.ViewHolder
viewHolder.checkBox.toggle() viewHolder.checkBox.toggle()
lv.setItemChecked(itemPosition, viewHolder.checkBox.isChecked) lv.setItemChecked(itemPosition, viewHolder.checkBox.isChecked)
mItemCheckedArray[position].put(itemPosition, viewHolder.checkBox.isChecked) mItemCheckedArray[position].put(itemPosition, viewHolder.checkBox.isChecked)
if (viewHolder.checkBox.isChecked){ if (viewHolder.checkBox.isChecked){
mCheckedLists.add(fileBeanList[itemPosition]) mCheckedLists.add(fileBeanList[itemPosition])
}else{ }else{
mCheckedLists.remove(fileBeanList[itemPosition]) mCheckedLists.remove(fileBeanList[itemPosition])
} }
mGridAdapters[position].notifyDataSetChanged() mGridAdapters[position].notifyDataSetChanged()
} }
fun setData(data: List<PicSimilarInfo>) { fun setData(data: List<PicSimilarInfo>) {
list.clear() list.clear()
list.addAll(data) list.addAll(data)
notifyDataSetChanged() notifyDataSetChanged()
} }
fun selectAll(isChecked: Boolean){ fun selectAll(isChecked: Boolean){
Log.e("yanglin", "selectAll: $isChecked", ) Log.e("yanglin", "selectAll: $isChecked", )
mCheckedLists.clear() mCheckedLists.clear()
if (!isChecked){ if (!isChecked){
for (i in 0..< list.size){ for (i in 0..< list.size){
mItemCheckedArray[i].clear() mItemCheckedArray[i].clear()
} }
}else{ }else{
for (i in 0..< list.size){ for (i in 0..< list.size){
mCheckedLists.clear() mCheckedLists.clear()
setStateCheckedMap(i, isChecked) setStateCheckedMap(i, isChecked)
mCheckedLists.addAll(list[i].getmList()) mCheckedLists.addAll(list[i].getmList())
mGridAdapters[i].notifyDataSetChanged() mGridAdapters[i].notifyDataSetChanged()
} }
} }
} }
fun setStateCheckedMap(position: Int, isChecked: Boolean){ fun setStateCheckedMap(position: Int, isChecked: Boolean){
for(i in list[position].getmList().indices){ for(i in list[position].getmList().indices){
mItemCheckedArray[position].put(i, isChecked) mItemCheckedArray[position].put(i, isChecked)
holders[position].binding.imageItemGrid.setItemChecked(i, isChecked) holders[position].binding.imageItemGrid.setItemChecked(i, isChecked)
} }
} }
} }
\ No newline at end of file
package com.test.mydemo3.adapter package com.xm.test.myfilemaster.adapter
import android.content.Context import android.content.Context
import android.graphics.BitmapFactory import android.graphics.BitmapFactory
import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.BitmapDrawable
import android.util.SparseBooleanArray import android.util.SparseBooleanArray
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.BaseAdapter import android.widget.BaseAdapter
import android.widget.CheckBox import android.widget.CheckBox
import android.widget.ImageView import android.widget.ImageView
import com.cloud.cleanjunksdk.similar.PicInfo import com.cloud.cleanjunksdk.similar.PicInfo
import com.cloud.cleanjunksdk.similar.PicSimilarInfo import com.xm.test.myfilemaster.R
import com.test.mydemo3.R import com.xm.test.myfilemaster.activity.SimilarImagesActivity
import com.test.mydemo3.activity.SimilarImagesActivity import com.xm.test.myfilemaster.util.FileUtil
import com.test.mydemo3.util.FileUtil
class SimilarGridAdapter(
class SimilarGridAdapter( list: MutableList<PicInfo>, context: Context,
list: MutableList<PicInfo>, context: Context, mStateCheckedMap: SparseBooleanArray, mPosition: Int): BaseAdapter(){
mStateCheckedMap: SparseBooleanArray, mPosition: Int): BaseAdapter(){
private var context: Context
private var context: Context private var dataList: MutableList<PicInfo>
private var dataList: MutableList<PicInfo> private var stateCheckedMap: SparseBooleanArray
private var stateCheckedMap: SparseBooleanArray private var inflater: LayoutInflater
private var inflater: LayoutInflater private var mPosition: Int
private var mPosition: Int init {
init { this.context = context
this.context = context this.dataList = list
this.dataList = list this.stateCheckedMap = mStateCheckedMap
this.stateCheckedMap = mStateCheckedMap this.inflater = LayoutInflater.from(context)
this.inflater = LayoutInflater.from(context) this.mPosition = mPosition
this.mPosition = mPosition }
}
override fun getCount(): Int {
override fun getCount(): Int { return dataList.size
return dataList.size }
}
override fun getItem(position: Int): Any {
override fun getItem(position: Int): Any { return dataList[position]
return dataList[position] }
}
override fun getItemId(position: Int): Long {
override fun getItemId(position: Int): Long { return position.toLong()
return position.toLong() }
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { var view = convertView
var view = convertView val itemHolder: ViewHolder
val itemHolder: ViewHolder if (convertView != null){
if (convertView != null){ itemHolder = view?.tag as ViewHolder
itemHolder = view?.tag as ViewHolder }else{
}else{ view = inflater.inflate(R.layout.item_layout, null)
view = inflater.inflate(R.layout.item_layout, null) itemHolder = ViewHolder()
itemHolder = ViewHolder() itemHolder.imageView = view.findViewById(R.id.item_image)
itemHolder.imageView = view.findViewById(R.id.item_image) itemHolder.checkBox = view.findViewById(R.id.check_item_image_switch)
itemHolder.checkBox = view.findViewById(R.id.check_item_image_switch) view.tag = itemHolder
view.tag = itemHolder }
} // BitmapDrawable(context.resources, BitmapFactory.decodeFile(dataList[position].filePath))
// BitmapDrawable(context.resources, BitmapFactory.decodeFile(dataList[position].filePath)) itemHolder.checkBox.visibility = if (SimilarImagesActivity.isClickEditBtn) View.VISIBLE else View.GONE
itemHolder.checkBox.visibility = if (SimilarImagesActivity.isClickEditBtn) View.VISIBLE else View.GONE itemHolder.imageView.setImageDrawable(BitmapDrawable(context.resources, BitmapFactory.decodeFile(dataList[position].path)))
itemHolder.imageView.setImageDrawable(BitmapDrawable(context.resources, BitmapFactory.decodeFile(dataList[position].path))) itemHolder.imageView.layoutParams.height = FileUtil.dpToPx(83, context)
itemHolder.imageView.layoutParams.height = FileUtil.dpToPx(83, context)
// if (DuplicateImagesActivity.isClickCheckBoxAllBtn){
// if (DuplicateImagesActivity.isClickCheckBoxAllBtn){ // itemHolder.checkBox.isChecked = true
// itemHolder.checkBox.isChecked = true // }else{
// }else{ itemHolder.checkBox.isChecked = stateCheckedMap[position]
itemHolder.checkBox.isChecked = stateCheckedMap[position] // }
// }
return view!!
return view!!
}
}
fun setData(datas: MutableList<PicInfo>){
fun setData(datas: MutableList<PicInfo>){ this.dataList = datas
this.dataList = datas }
}
class ViewHolder{
class ViewHolder{ lateinit var checkBox: CheckBox
lateinit var checkBox: CheckBox lateinit var imageView: ImageView
lateinit var imageView: ImageView }
}
} }
\ No newline at end of file
package com.test.mydemo3.antivirus package com.xm.test.myfilemaster.antivirus
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
...@@ -9,11 +9,11 @@ import android.view.View ...@@ -9,11 +9,11 @@ import android.view.View
import android.widget.ProgressBar import android.widget.ProgressBar
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import com.test.mydemo3.MyApplication
import com.test.mydemo3.R
import com.test.mydemo3.activity.ScanResultActivity
import com.trustlook.sdk.cloudscan.CloudScanListener import com.trustlook.sdk.cloudscan.CloudScanListener
import com.trustlook.sdk.data.AppInfo import com.trustlook.sdk.data.AppInfo
import com.xm.test.myfilemaster.MyApplication
import com.xm.test.myfilemaster.R
import com.xm.test.myfilemaster.activity.ScanResultActivity
class AntivirusActivity : AppCompatActivity() { class AntivirusActivity : AppCompatActivity() {
......
package com.test.mydemo3.base package com.xm.test.myfilemaster.base
import android.content.Context import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import android.view.View import android.view.View
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
abstract class BaseAbsView : ComponentActivity(),View.OnClickListener { abstract class BaseAbsView : ComponentActivity(),View.OnClickListener {
override fun onCreateView(name: String, context: Context, attrs: AttributeSet): View? { override fun onCreateView(name: String, context: Context, attrs: AttributeSet): View? {
return super.onCreateView(name, context, attrs) return super.onCreateView(name, context, attrs)
} }
abstract fun initView() abstract fun initView()
} }
\ No newline at end of file
package com.test.mydemo3.base package com.xm.test.myfilemaster.base
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Bundle
import android.os.Bundle import android.util.Log
import android.util.Log import android.util.SparseBooleanArray
import android.util.SparseBooleanArray import android.view.View
import android.view.View import android.widget.CheckBox
import android.widget.CheckBox import android.widget.ImageView
import android.widget.ImageView import android.widget.LinearLayout
import android.widget.LinearLayout import android.widget.ListView
import android.widget.ListView import android.widget.RelativeLayout
import android.widget.RelativeLayout import android.widget.TextView
import android.widget.TextView import android.widget.Toast
import android.widget.Toast import androidx.core.content.FileProvider
import androidx.core.content.FileProvider import androidx.core.view.isVisible
import androidx.core.view.isVisible import androidx.lifecycle.Observer
import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelProvider import com.xm.test.myfilemaster.R
import com.test.mydemo3.R import com.xm.test.myfilemaster.activity.BaseActivityViewModel
import com.test.mydemo3.activity.BaseActivityViewModel import com.xm.test.myfilemaster.activity.HomeActivity
import com.test.mydemo3.activity.HomeActivity import com.xm.test.myfilemaster.activity.MoveOrCopyActivity
import com.test.mydemo3.activity.MoveOrCopyActivity import com.xm.test.myfilemaster.adapter.FilesItemViewAdapter
import com.test.mydemo3.adapter.FilesItemViewAdapter import com.xm.test.myfilemaster.model.FileBean
import com.test.mydemo3.fragment.InternalStorageFragment import com.xm.test.myfilemaster.util.FileUtil
import com.test.mydemo3.model.FileBean import com.xm.test.myfilemaster.util.PermissionUtil
import com.test.mydemo3.util.FileUtil import com.xm.test.myfilemaster.view.CustomDialog
import com.test.mydemo3.util.PermissionUtil import java.io.File
import com.test.mydemo3.view.CustomDialog
import java.io.File abstract class BaseActivity : BaseAbsView(), BaseActivityListener{
lateinit var mTitleText: TextView
abstract class BaseActivity : BaseAbsView(), BaseActivityListener{ lateinit var mShareBtn: ImageView
lateinit var mTitleText: TextView lateinit var mDeleteBtn: ImageView
lateinit var mShareBtn: ImageView lateinit var mNewBtn: ImageView
lateinit var mDeleteBtn: ImageView lateinit var mCancelBtn: ImageView
lateinit var mNewBtn: ImageView lateinit var mQuitBtn: ImageView
lateinit var mCancelBtn: ImageView lateinit var mEditBtn: ImageView
lateinit var mQuitBtn: ImageView lateinit var mBottomBar: View
lateinit var mEditBtn: ImageView lateinit var mSelectNumText: TextView
lateinit var mBottomBar: View
lateinit var mSelectNumText: TextView lateinit var mCheckItemSelectAllBtn: CheckBox
lateinit var mCheckItemSelectAllBtn: CheckBox lateinit var mMoveBottomBtn: LinearLayout
lateinit var mRenameBottomBtn: LinearLayout
lateinit var mMoveBottomBtn: LinearLayout lateinit var mCopyBottomBtn: LinearLayout
lateinit var mRenameBottomBtn: LinearLayout lateinit var mDeleteBottomBtn: LinearLayout
lateinit var mCopyBottomBtn: LinearLayout lateinit var mCancelBottomBtn: LinearLayout
lateinit var mDeleteBottomBtn: LinearLayout
lateinit var mCancelBottomBtn: LinearLayout lateinit var mSwitchSelectView: RelativeLayout
lateinit var mNotFileFoundLayout: View
lateinit var mSwitchSelectView: RelativeLayout lateinit var mNotPermissionLayout: View
lateinit var mNotFileFoundLayout: View
lateinit var mNotPermissionLayout: View private lateinit var mFilesItemListView: ListView
private lateinit var mFilesItemListView: ListView // lateinit var mBinding: Binding
// lateinit var mBinding: Binding lateinit var mBaseViewModel : BaseActivityViewModel
lateinit var mBaseViewModel : BaseActivityViewModel var mIsMove = true //true is move, false is copy,
lateinit var mFileAdapter: FilesItemViewAdapter
var mIsMove = true //true is move, false is copy, lateinit var mItemCheckedArray: SparseBooleanArray
lateinit var mFileAdapter: FilesItemViewAdapter var mFileCheckedItemList = ArrayList<FileBean>()
lateinit var mItemCheckedArray: SparseBooleanArray lateinit var mItemDataList: ArrayList<FileBean>
var mFileCheckedItemList = ArrayList<FileBean>() var mFilesItemLists = ArrayList<ArrayList<FileBean>>()
lateinit var mItemDataList: ArrayList<FileBean> var mCurrentFilePath: String = FileUtil.EXTERNAL_STORAGE
var mFilesItemLists = ArrayList<ArrayList<FileBean>>() var mCurrentFileBean: FileBean? = null
var mCurrentFilePath: String = FileUtil.EXTERNAL_STORAGE var mTitleStr: String = ""
var mCurrentFileBean: FileBean? = null var mCurrentList: ArrayList<FileBean> = ArrayList()
var mTitleStr: String = "" lateinit var mCurrantFilePathTv: TextView
var mCurrentList: ArrayList<FileBean> = ArrayList()
lateinit var mCurrantFilePathTv: TextView companion object{
var isClickEditBtn = false
companion object{ var isClickCheckBoxAllBtn = false
var isClickEditBtn = false var switchNumber = 0
var isClickCheckBoxAllBtn = false }
var switchNumber = 0
} abstract fun getLayout():Int
abstract fun getLayout():Int override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
override fun onCreate(savedInstanceState: Bundle?) { initView()
super.onCreate(savedInstanceState) isQuitShow(true)
initView() isNewShow(true)
isQuitShow(true) isEditShow(true)
isNewShow(true) }
isEditShow(true)
} override fun initView() {
setContentView(getLayout())
override fun initView() {
setContentView(getLayout()) mBaseViewModel = ViewModelProvider(this)[BaseActivityViewModel::class.java]
mBaseViewModel = ViewModelProvider(this)[BaseActivityViewModel::class.java] mTitleText = findViewById(R.id.title_bar_text)
mShareBtn = findViewById(R.id.btn_share)
mTitleText = findViewById(R.id.title_bar_text) mDeleteBtn = findViewById(R.id.btn_delete)
mShareBtn = findViewById(R.id.btn_share) mNewBtn = findViewById(R.id.btn_new)
mDeleteBtn = findViewById(R.id.btn_delete) mCancelBtn = findViewById(R.id.btn_cancel)
mNewBtn = findViewById(R.id.btn_new) mQuitBtn = findViewById(R.id.btn_quit)
mCancelBtn = findViewById(R.id.btn_cancel) mEditBtn = findViewById(R.id.btn_edit)
mQuitBtn = findViewById(R.id.btn_quit) mBottomBar = findViewById(R.id.bottom_btn_group)
mEditBtn = findViewById(R.id.btn_edit) mSwitchSelectView = findViewById(R.id.switch_and_select_layout)
mBottomBar = findViewById(R.id.bottom_btn_group) mSelectNumText = findViewById(R.id.select_num)
mSwitchSelectView = findViewById(R.id.switch_and_select_layout) mCheckItemSelectAllBtn = findViewById(R.id.checkbox_item_all)
mSelectNumText = findViewById(R.id.select_num) mNotFileFoundLayout = findViewById(R.id.not_file_found_layout)
mCheckItemSelectAllBtn = findViewById(R.id.checkbox_item_all) mNotPermissionLayout = findViewById(R.id.not_file_permission_layout)
mNotFileFoundLayout = findViewById(R.id.not_file_found_layout) mCurrantFilePathTv = findViewById(R.id.current_file_path)
mNotPermissionLayout = findViewById(R.id.not_file_permission_layout)
mCurrantFilePathTv = findViewById(R.id.current_file_path)
mMoveBottomBtn = mBottomBar.findViewById(R.id.btn_move_bottom)
mRenameBottomBtn = mBottomBar.findViewById(R.id.btn_rename_bottom)
mMoveBottomBtn = mBottomBar.findViewById(R.id.btn_move_bottom) mCopyBottomBtn = mBottomBar.findViewById(R.id.btn_copy_bottom)
mRenameBottomBtn = mBottomBar.findViewById(R.id.btn_rename_bottom) mDeleteBottomBtn = mBottomBar.findViewById(R.id.btn_delete_bottom)
mCopyBottomBtn = mBottomBar.findViewById(R.id.btn_copy_bottom) mCancelBottomBtn = mBottomBar.findViewById(R.id.btn_cancel_bottom)
mDeleteBottomBtn = mBottomBar.findViewById(R.id.btn_delete_bottom)
mCancelBottomBtn = mBottomBar.findViewById(R.id.btn_cancel_bottom) mTitleText.setOnClickListener(this)
mShareBtn.setOnClickListener(this)
mTitleText.setOnClickListener(this) mDeleteBtn.setOnClickListener(this)
mShareBtn.setOnClickListener(this) mNewBtn.setOnClickListener(this)
mDeleteBtn.setOnClickListener(this) mCancelBtn.setOnClickListener(this)
mNewBtn.setOnClickListener(this) mQuitBtn.setOnClickListener(this)
mCancelBtn.setOnClickListener(this) mEditBtn.setOnClickListener(this)
mQuitBtn.setOnClickListener(this) mCheckItemSelectAllBtn.setOnClickListener(this)
mEditBtn.setOnClickListener(this)
mCheckItemSelectAllBtn.setOnClickListener(this)
mMoveBottomBtn.setOnClickListener(this)
mRenameBottomBtn.setOnClickListener(this)
mMoveBottomBtn.setOnClickListener(this) mCopyBottomBtn.setOnClickListener(this)
mRenameBottomBtn.setOnClickListener(this) mDeleteBottomBtn.setOnClickListener(this)
mCopyBottomBtn.setOnClickListener(this) mCancelBottomBtn.setOnClickListener(this)
mDeleteBottomBtn.setOnClickListener(this)
mCancelBottomBtn.setOnClickListener(this) findViewById<CheckBox>(R.id.checkbox_item_all).setOnClickListener(this)
findViewById<TextView>(R.id.go_to_setting_btn).setOnClickListener(this)
findViewById<CheckBox>(R.id.checkbox_item_all).setOnClickListener(this)
findViewById<TextView>(R.id.go_to_setting_btn).setOnClickListener(this) mBaseViewModel.setNumber(0)
mBaseViewModel.myInt.observe(this, Observer {
mBaseViewModel.setNumber(0) mSelectNumText.text = String.format(getString(R.string.select_0, switchNumber.toString()))
mBaseViewModel.myInt.observe(this, Observer { })
mSelectNumText.text = String.format(getString(R.string.select_0, switchNumber.toString())) }
})
} override fun setTitle(str: String) {
mTitleStr = str
override fun setTitle(str: String) { mTitleText.text=mTitleStr
mTitleStr = str }
mTitleText.text=mTitleStr
} override fun isDeleteShow(isShow: Boolean) {
mDeleteBtn.visibility = if (isShow) View.VISIBLE else View.GONE
override fun isDeleteShow(isShow: Boolean) { }
mDeleteBtn.visibility = if (isShow) View.VISIBLE else View.GONE
} override fun isShareShow(isShow: Boolean) {
mShareBtn.visibility = if (isShow) View.VISIBLE else View.GONE
override fun isShareShow(isShow: Boolean) { }
mShareBtn.visibility = if (isShow) View.VISIBLE else View.GONE
} override fun isNewShow(isShow: Boolean) {
mNewBtn.visibility = if (isShow) View.VISIBLE else View.GONE
override fun isNewShow(isShow: Boolean) { }
mNewBtn.visibility = if (isShow) View.VISIBLE else View.GONE
} override fun isCancelShow(isShow: Boolean) {
mCancelBtn.visibility = if (isShow) View.VISIBLE else View.GONE
override fun isCancelShow(isShow: Boolean) { }
mCancelBtn.visibility = if (isShow) View.VISIBLE else View.GONE
} override fun isQuitShow(isShow: Boolean) {
mQuitBtn.visibility = if (isShow) View.VISIBLE else View.GONE
override fun isQuitShow(isShow: Boolean) { }
mQuitBtn.visibility = if (isShow) View.VISIBLE else View.GONE
} override fun isEditShow(isShow: Boolean) {
mEditBtn.visibility = if (isShow) View.VISIBLE else View.GONE
override fun isEditShow(isShow: Boolean) { }
mEditBtn.visibility = if (isShow) View.VISIBLE else View.GONE fun isCurrantTvShow(isShow: Boolean){
} mCurrantFilePathTv.visibility = if (isShow) View.VISIBLE else View.GONE
fun isCurrantTvShow(isShow: Boolean){ }
mCurrantFilePathTv.visibility = if (isShow) View.VISIBLE else View.GONE
} override fun onClick(v: View?) {
when(v?.id){
override fun onClick(v: View?) { R.id.btn_cancel ->{
when(v?.id){ cancel()
R.id.btn_cancel ->{ }
cancel() R.id.btn_quit ->{
} if (backQuit()) finish()
R.id.btn_quit ->{ }
if (backQuit()) finish() R.id.btn_new ->{
} createNewDir()
R.id.btn_new ->{ }
createNewDir() R.id.btn_edit ->{
} mNewBtn.visibility = View.GONE
R.id.btn_edit ->{ mQuitBtn.visibility = View.GONE
mNewBtn.visibility = View.GONE mEditBtn.visibility =View.GONE
mQuitBtn.visibility = View.GONE
mEditBtn.visibility =View.GONE mCancelBtn.visibility = View.VISIBLE
mShareBtn.visibility = View.VISIBLE
mCancelBtn.visibility = View.VISIBLE mBottomBar.visibility = View.VISIBLE
mShareBtn.visibility = View.VISIBLE mSwitchSelectView.visibility = View.VISIBLE
mBottomBar.visibility = View.VISIBLE
mSwitchSelectView.visibility = View.VISIBLE isClickEditBtn = true
mFileAdapter.setEditClickState(isClickEditBtn)
isClickEditBtn = true }
mFileAdapter.setEditClickState(isClickEditBtn) R.id.btn_delete ->{
} //TODO 删除
R.id.btn_delete ->{ }
//TODO 删除 R.id.btn_share ->{
} if (switchNumber > 1){
R.id.btn_share ->{ var uris = ArrayList<Uri>()
if (switchNumber > 1){ for (fileBean: FileBean in mFileCheckedItemList){
var uris = ArrayList<Uri>() uris.add(
for (fileBean: FileBean in mFileCheckedItemList){ FileProvider.getUriForFile(this,
uris.add( this.packageName + ".provider", File(fileBean.filePath))
FileProvider.getUriForFile(this, )
this.packageName + ".provider", File(fileBean.filePath)) }
) shareMultipleFiles(uris)
} }else if (switchNumber == 1){
shareMultipleFiles(uris) val uri = Uri.parse(mFileCheckedItemList[0].filePath)
}else if (switchNumber == 1){ shareFile(uri)
val uri = Uri.parse(mFileCheckedItemList[0].filePath) }
shareFile(uri) }
} R.id.btn_move_bottom ->{
} if (switchNumber == 0) return
R.id.btn_move_bottom ->{ // mCancelBottomBtn.visibility = View.VISIBLE
if (switchNumber == 0) return // mQuitBtn.visibility = View.VISIBLE
// mCancelBottomBtn.visibility = View.VISIBLE // mCancelBtn.visibility = View.GONE
// mQuitBtn.visibility = View.VISIBLE //// mDeleteBtn.visibility = View.GONE
// mCancelBtn.visibility = View.GONE // mShareBtn.visibility = View.GONE
//// mDeleteBtn.visibility = View.GONE // mCopyBottomBtn.visibility = View.GONE
// mShareBtn.visibility = View.GONE // mRenameBottomBtn.visibility = View.GONE
// mCopyBottomBtn.visibility = View.GONE // mDeleteBottomBtn.visibility = View.GONE
// mRenameBottomBtn.visibility = View.GONE // mTitleText.text = "Move To.."
// mDeleteBottomBtn.visibility = View.GONE // if (mFilesItemLists.size>0){
// mTitleText.text = "Move To.." // intent.putExtra("fileBeans",mFilesItemLists[0])
// if (mFilesItemLists.size>0){ // }else{
// intent.putExtra("fileBeans",mFilesItemLists[0]) // intent.putExtra("fileBeans",mItemDataList)
// }else{ // }
// intent.putExtra("fileBeans",mItemDataList) // intent.putExtra("filePath", mFileCheckedItemList[0].filePath)
// } var intent = Intent(this, MoveOrCopyActivity::class.java)
// intent.putExtra("filePath", mFileCheckedItemList[0].filePath) intent.putExtra("checkedItemBeans", mFileCheckedItemList)
var intent = Intent(this, MoveOrCopyActivity::class.java) intent.putExtra("operate", "move")
intent.putExtra("checkedItemBeans", mFileCheckedItemList) startActivity(intent)
intent.putExtra("operate", "move")
startActivity(intent) }
R.id.btn_rename_bottom ->{
} rename()
R.id.btn_rename_bottom ->{ }
rename() R.id.btn_copy_bottom ->{
} if (switchNumber == 0) return
R.id.btn_copy_bottom ->{ // mCancelBottomBtn.visibility = View.VISIBLE
if (switchNumber == 0) return // mQuitBtn.visibility = View.VISIBLE
// mCancelBottomBtn.visibility = View.VISIBLE // mCancelBtn.visibility = View.GONE
// mQuitBtn.visibility = View.VISIBLE // mDeleteBtn.visibility = View.GONE
// mCancelBtn.visibility = View.GONE // mShareBtn.visibility = View.GONE
// mDeleteBtn.visibility = View.GONE // mMoveBottomBtn.visibility = View.GONE
// mShareBtn.visibility = View.GONE // mRenameBottomBtn.visibility = View.GONE
// mMoveBottomBtn.visibility = View.GONE // mDeleteBottomBtn.visibility = View.GONE
// mRenameBottomBtn.visibility = View.GONE // mTitleText.text = "Copy To.."
// mDeleteBottomBtn.visibility = View.GONE var intent = Intent(this, MoveOrCopyActivity::class.java)
// mTitleText.text = "Copy To.." intent.putExtra("checkedItemBeans", mFileCheckedItemList)
var intent = Intent(this, MoveOrCopyActivity::class.java) intent.putExtra("operate", "copy")
intent.putExtra("checkedItemBeans", mFileCheckedItemList) startActivity(intent)
intent.putExtra("operate", "copy")
startActivity(intent) }
R.id.btn_delete_bottom ->{
} val files = ArrayList<String>()
R.id.btn_delete_bottom ->{ for (fileBean: FileBean in mFileCheckedItemList){
val files = ArrayList<String>() files.add(fileBean.filePath)
for (fileBean: FileBean in mFileCheckedItemList){ }
files.add(fileBean.filePath) if(FileUtil.deleteFiles(files)){
} Toast.makeText(this, "delete success!", Toast.LENGTH_LONG).show()
if(FileUtil.deleteFiles(files)){ }else{
Toast.makeText(this, "delete success!", Toast.LENGTH_LONG).show() Toast.makeText(this, "delete failed!", Toast.LENGTH_LONG).show()
}else{ }
Toast.makeText(this, "delete failed!", Toast.LENGTH_LONG).show() }
} R.id.btn_cancel_bottom ->{
}
R.id.btn_cancel_bottom ->{ mTitleText.text = mTitleStr
mCancelBottomBtn.visibility = View.GONE
mTitleText.text = mTitleStr mQuitBtn.visibility = View.GONE
mCancelBottomBtn.visibility = View.GONE mCancelBtn.visibility = View.VISIBLE
mQuitBtn.visibility = View.GONE // mDeleteBtn.visibility = View.VISIBLE
mCancelBtn.visibility = View.VISIBLE mShareBtn.visibility = View.VISIBLE
// mDeleteBtn.visibility = View.VISIBLE mCopyBottomBtn.visibility = View.VISIBLE
mShareBtn.visibility = View.VISIBLE mMoveBottomBtn.visibility = View.VISIBLE
mCopyBottomBtn.visibility = View.VISIBLE mRenameBottomBtn.visibility = View.VISIBLE
mMoveBottomBtn.visibility = View.VISIBLE mDeleteBottomBtn.visibility = View.VISIBLE
mRenameBottomBtn.visibility = View.VISIBLE }
mDeleteBottomBtn.visibility = View.VISIBLE R.id.checkbox_item_all ->{
} isClickCheckBoxAllBtn = !isClickCheckBoxAllBtn
R.id.checkbox_item_all ->{ mCheckItemSelectAllBtn.isChecked = isClickCheckBoxAllBtn
isClickCheckBoxAllBtn = !isClickCheckBoxAllBtn selectAll()
mCheckItemSelectAllBtn.isChecked = isClickCheckBoxAllBtn }
selectAll() R.id.go_to_setting_btn ->{
} PermissionUtil.requestPermission(this)
R.id.go_to_setting_btn ->{ // Toast.makeText(this, "你好", Toast.LENGTH_LONG).show()
PermissionUtil.requestPermission(this) // Intent().apply { action = Intent.ACTION_APPLICATION_DETAILS_SETTINGS }
// Toast.makeText(this, "你好", Toast.LENGTH_LONG).show() }
// Intent().apply { action = Intent.ACTION_APPLICATION_DETAILS_SETTINGS } }
} }
}
} private fun rename() {
if (switchNumber == 0 || switchNumber > 1) return
private fun rename() { val customDialog = CustomDialog(this)
if (switchNumber == 0 || switchNumber > 1) return customDialog.setsConfirm(View.OnClickListener {
val customDialog = CustomDialog(this) val name = customDialog.getEditTextStr()
customDialog.setsConfirm(View.OnClickListener { Log.e(
val name = customDialog.getEditTextStr() "yanglin ",
Log.e( "onClick: rename = $name checkedPath =${mFileCheckedItemList[0].filePath}",
"yanglin ", )
"onClick: rename = $name checkedPath =${mFileCheckedItemList[0].filePath}", val renameFile = FileUtil.renameFile(
) mFileCheckedItemList[0].filePath,
val renameFile = FileUtil.renameFile( name + ".${mFileCheckedItemList[0].fileType}"
mFileCheckedItemList[0].filePath, )
name + ".${mFileCheckedItemList[0].fileType}" if (renameFile) {
) Toast.makeText(this, "new fileName success!", Toast.LENGTH_LONG).show()
if (renameFile) { for (fileBean: FileBean in mItemDataList) {
Toast.makeText(this, "new fileName success!", Toast.LENGTH_LONG).show() if (fileBean.fileName.contains(mFileCheckedItemList[0].fileName)
for (fileBean: FileBean in mItemDataList) { && fileBean.filePath.contains(mFileCheckedItemList[0].filePath)
if (fileBean.fileName.contains(mFileCheckedItemList[0].fileName) ) {
&& fileBean.filePath.contains(mFileCheckedItemList[0].filePath) fileBean.fileName = name + ".${mFileCheckedItemList[0].fileType}"
) { }
fileBean.fileName = name + ".${mFileCheckedItemList[0].fileType}" }
} } else {
} Toast.makeText(this, "new fileName failed!", Toast.LENGTH_LONG).show()
} else { }
Toast.makeText(this, "new fileName failed!", Toast.LENGTH_LONG).show() customDialog.dismiss()
} }).setsCancel(View.OnClickListener {
customDialog.dismiss() customDialog.dismiss()
}).setsCancel(View.OnClickListener { }).show()
customDialog.dismiss() customDialog.setsTitle("Rename")
}).show() customDialog.setsHint("Please enter a new name")
customDialog.setsTitle("Rename") }
customDialog.setsHint("Please enter a new name")
} private fun createNewDir() {
val customDialog = CustomDialog(this)
private fun createNewDir() {
val customDialog = CustomDialog(this) customDialog.setsCancel(View.OnClickListener {
customDialog.dismiss()
customDialog.setsCancel(View.OnClickListener { }).setsConfirm(View.OnClickListener {
customDialog.dismiss() val editTextStr = customDialog.getEditTextStr()
}).setsConfirm(View.OnClickListener {
val editTextStr = customDialog.getEditTextStr() mItemDataList
for (fileBean: FileBean in mItemDataList) {
mItemDataList if (editTextStr.equals(fileBean.fileName)) {
for (fileBean: FileBean in mItemDataList) { Toast.makeText(this, "Existing file", Toast.LENGTH_SHORT).show()
if (editTextStr.equals(fileBean.fileName)) { customDialog.dismiss()
Toast.makeText(this, "Existing file", Toast.LENGTH_SHORT).show() return@OnClickListener
customDialog.dismiss() }
return@OnClickListener }
} val filesItemBean = FileUtil.createDirectory(mCurrentFilePath, editTextStr)
} if (filesItemBean.filePath.equals("-1")) {
val filesItemBean = FileUtil.createDirectory(mCurrentFilePath, editTextStr) Toast.makeText(this, "Create failed", Toast.LENGTH_SHORT).show()
if (filesItemBean.filePath.equals("-1")) { customDialog.dismiss()
Toast.makeText(this, "Create failed", Toast.LENGTH_SHORT).show() } else {
customDialog.dismiss() if (filesItemBean.childList.size == 0){
} else { mFilesItemListView.visibility = View.VISIBLE
if (filesItemBean.childList.size == 0){ mNotFileFoundLayout.visibility = View.GONE
mFilesItemListView.visibility = View.VISIBLE mItemDataList.clear()
mNotFileFoundLayout.visibility = View.GONE }
mItemDataList.clear() mItemDataList.add(filesItemBean)
} mFileAdapter.setData(mItemDataList)
mItemDataList.add(filesItemBean) mFileAdapter.notifyDataSetChanged()
mFileAdapter.setData(mItemDataList) customDialog.dismiss()
mFileAdapter.notifyDataSetChanged() }
customDialog.dismiss() }).show()
} }
}).show()
} fun setStateCheckedMap(isChecked: Boolean){
for(i in mItemDataList.indices){
fun setStateCheckedMap(isChecked: Boolean){ mItemCheckedArray.put(i, isChecked)
for(i in mItemDataList.indices){ mFilesItemListView.setItemChecked(i, isChecked)
mItemCheckedArray.put(i, isChecked) }
mFilesItemListView.setItemChecked(i, isChecked) }
}
} fun setOnListViewItemClickListener(lv: ListView){
lv.setOnItemClickListener { parent, view, position, id ->
fun setOnListViewItemClickListener(lv: ListView){ Log.e("TAG", "setOnListViewItemClickListener: 第$position" )
lv.setOnItemClickListener { parent, view, position, id -> if (!isClickEditBtn){
Log.e("TAG", "setOnListViewItemClickListener: 第$position" ) mCurrentFileBean = mItemDataList[position]
if (!isClickEditBtn){ if (!mCurrentFileBean?.fileType.equals("dir")){
mCurrentFileBean = mItemDataList[position] return@setOnItemClickListener
if (!mCurrentFileBean?.fileType.equals("dir")){ }
return@setOnItemClickListener mFilesItemLists.add(mItemDataList)
} mCurrantFilePathTv.text = "Internal Storage/ ${mCurrentFileBean?.fileName}"
mFilesItemLists.add(mItemDataList) mCurrentList.add(mCurrentFileBean!!)
mCurrantFilePathTv.text = "Internal Storage/ ${mCurrentFileBean?.fileName}" if (mCurrentFileBean?.fileType.equals("dir") && mCurrentFileBean?.childList?.size!! > 0){
mCurrentList.add(mCurrentFileBean!!) Thread(Runnable {
if (mCurrentFileBean?.fileType.equals("dir") && mCurrentFileBean?.childList?.size!! > 0){ runOnUiThread {
Thread(Runnable { mItemDataList = mCurrentFileBean!!.childList
runOnUiThread { val fileListSort = FileUtil.fileListSort(mItemDataList)
mItemDataList = mCurrentFileBean!!.childList mFileAdapter.setData(fileListSort)
val fileListSort = FileUtil.fileListSort(mItemDataList) }
mFileAdapter.setData(fileListSort) }).start()
} }else if(mCurrentFileBean?.fileType.equals("dir") && mCurrentFileBean?.childList?.size == 0){
}).start() mFilesItemListView.visibility = View.GONE
}else if(mCurrentFileBean?.fileType.equals("dir") && mCurrentFileBean?.childList?.size == 0){ mNotFileFoundLayout.visibility = View.VISIBLE
mFilesItemListView.visibility = View.GONE }
mNotFileFoundLayout.visibility = View.VISIBLE
} }else{
updateCheckBoxStatus(view, position)
}else{ }
updateCheckBoxStatus(view, position) }
} }
}
} fun setAdapter(lv: ListView, itemList: ArrayList<FileBean>){
mFilesItemListView = lv
fun setAdapter(lv: ListView, itemList: ArrayList<FileBean>){ mItemDataList = itemList
mFilesItemListView = lv mItemCheckedArray = SparseBooleanArray()
mItemDataList = itemList mFileAdapter = FilesItemViewAdapter(itemList, this, mItemCheckedArray)
mItemCheckedArray = SparseBooleanArray() mFilesItemListView.adapter = mFileAdapter
mFileAdapter = FilesItemViewAdapter(itemList, this, mItemCheckedArray) setOnListViewItemClickListener(mFilesItemListView)
mFilesItemListView.adapter = mFileAdapter mNotPermissionLayout.visibility = View.GONE
setOnListViewItemClickListener(mFilesItemListView) if (HomeActivity.isPermission){
mNotPermissionLayout.visibility = View.GONE if (itemList.size >0){
if (HomeActivity.isPermission){ mNotFileFoundLayout.visibility = View.GONE
if (itemList.size >0){ mFilesItemListView.visibility = View.VISIBLE
mNotFileFoundLayout.visibility = View.GONE isEditShow(true)
mFilesItemListView.visibility = View.VISIBLE }else{
isEditShow(true) mFilesItemListView.visibility = View.GONE
}else{ mNotFileFoundLayout.visibility = View.VISIBLE
mFilesItemListView.visibility = View.GONE isEditShow(false)
mNotFileFoundLayout.visibility = View.VISIBLE }
isEditShow(false)
} }else{
mNotPermissionLayout.visibility = View.VISIBLE
}else{ mFilesItemListView.visibility = View.GONE
mNotPermissionLayout.visibility = View.VISIBLE // mNotFileFoundLayout.visibility = View.GONE
mFilesItemListView.visibility = View.GONE isEditShow(false)
// mNotFileFoundLayout.visibility = View.GONE }
isEditShow(false) }
}
} fun updateCheckBoxStatus(view: View, position: Int){
val viewHolder = view.tag as FilesItemViewAdapter.ViewHolder
fun updateCheckBoxStatus(view: View, position: Int){ viewHolder.selectSwitch.toggle()
val viewHolder = view.tag as FilesItemViewAdapter.ViewHolder mFilesItemListView.setItemChecked(position, viewHolder.selectSwitch.isChecked)
viewHolder.selectSwitch.toggle() mItemCheckedArray.put(position, viewHolder.selectSwitch.isChecked)
mFilesItemListView.setItemChecked(position, viewHolder.selectSwitch.isChecked) if (viewHolder.selectSwitch.isChecked){
mItemCheckedArray.put(position, viewHolder.selectSwitch.isChecked) mFileCheckedItemList.add(mItemDataList[position])
if (viewHolder.selectSwitch.isChecked){ }else{
mFileCheckedItemList.add(mItemDataList[position]) mFileCheckedItemList.remove(mItemDataList[position])
}else{ }
mFileCheckedItemList.remove(mItemDataList[position]) mFileAdapter.notifyDataSetChanged()
} switchNumber = mFileCheckedItemList.size
mFileAdapter.notifyDataSetChanged() mBaseViewModel.setNumber(switchNumber)
switchNumber = mFileCheckedItemList.size }
mBaseViewModel.setNumber(switchNumber) fun selectAll(){
} mFileCheckedItemList.clear()
fun selectAll(){ switchNumber = if (isClickCheckBoxAllBtn){
mFileCheckedItemList.clear() setStateCheckedMap( true)
switchNumber = if (isClickCheckBoxAllBtn){ mFileCheckedItemList.addAll(mItemDataList)
setStateCheckedMap( true) mFileCheckedItemList.size
mFileCheckedItemList.addAll(mItemDataList) }else{
mFileCheckedItemList.size setStateCheckedMap( false)
}else{ 0
setStateCheckedMap( false) }
0 mFileAdapter.notifyDataSetChanged()
} mBaseViewModel.setNumber(switchNumber)
mFileAdapter.notifyDataSetChanged() // mSelectNumText.text = String.format(getString(R.string.select_0, mSelectNum.toString()))
mBaseViewModel.setNumber(switchNumber) }
// mSelectNumText.text = String.format(getString(R.string.select_0, mSelectNum.toString()))
} fun cancel(){
setStateCheckedMap(false)
fun cancel(){ mNewBtn.visibility = View.VISIBLE
setStateCheckedMap(false) mQuitBtn.visibility = View.VISIBLE
mNewBtn.visibility = View.VISIBLE mEditBtn.visibility =View.VISIBLE
mQuitBtn.visibility = View.VISIBLE mCancelBtn.visibility = View.GONE
mEditBtn.visibility =View.VISIBLE mDeleteBtn.visibility = View.GONE
mCancelBtn.visibility = View.GONE mShareBtn.visibility = View.GONE
mDeleteBtn.visibility = View.GONE mBottomBar.visibility = View.GONE
mShareBtn.visibility = View.GONE mSwitchSelectView.visibility = View.GONE
mBottomBar.visibility = View.GONE
mSwitchSelectView.visibility = View.GONE isClickEditBtn = false
mFileAdapter.setEditClickState(isClickEditBtn)
isClickEditBtn = false switchNumber = 0
mFileAdapter.setEditClickState(isClickEditBtn) if (mFileAdapter != null){
switchNumber = 0 mFileAdapter.notifyDataSetChanged()
if (mFileAdapter != null){ }
mFileAdapter.notifyDataSetChanged() }
}
} override fun onBackPressed() {
if (isClickEditBtn){
override fun onBackPressed() { cancel()
if (isClickEditBtn){ }else{
cancel() if (backQuit()) super.onBackPressed()
}else{ }
if (backQuit()) super.onBackPressed() }
} fun backQuit(): Boolean{
} val size = mFilesItemLists.size
fun backQuit(): Boolean{ if (size-1 == 0){
val size = mFilesItemLists.size mCurrantFilePathTv.text = "Internal Storage/"
if (size-1 == 0){ }
mCurrantFilePathTv.text = "Internal Storage/" if (size < 1){
} if (mNotFileFoundLayout.isVisible && mItemDataList.size > 0){
if (size < 1){ mFilesItemListView.visibility = View.VISIBLE
if (mNotFileFoundLayout.isVisible && mItemDataList.size > 0){ mNotFileFoundLayout.visibility = View.GONE
mFilesItemListView.visibility = View.VISIBLE mFileAdapter.setData(mItemDataList)
mNotFileFoundLayout.visibility = View.GONE return false
mFileAdapter.setData(mItemDataList) }
return false return true
} }else{
return true mFileAdapter.setData(mFilesItemLists[size-1])
}else{ mItemDataList = mFilesItemLists[size-1]
mFileAdapter.setData(mFilesItemLists[size-1]) mFilesItemListView.visibility = View.VISIBLE
mItemDataList = mFilesItemLists[size-1] mNotFileFoundLayout.visibility = View.GONE
mFilesItemListView.visibility = View.VISIBLE mFilesItemLists.remove(mFilesItemLists[size-1])
mNotFileFoundLayout.visibility = View.GONE mCurrentList.remove(mCurrentList[size-1])
mFilesItemLists.remove(mFilesItemLists[size-1]) if (size - 1 > 0){
mCurrentList.remove(mCurrentList[size-1]) mCurrentFileBean = mCurrentList[size-2]
if (size - 1 > 0){ mCurrantFilePathTv.text = "Internal Storage/ ${mCurrentFileBean?.fileName}"
mCurrentFileBean = mCurrentList[size-2] }else{
mCurrantFilePathTv.text = "Internal Storage/ ${mCurrentFileBean?.fileName}" mCurrantFilePathTv.text = "Internal Storage/"
}else{ }
mCurrantFilePathTv.text = "Internal Storage/" return false
} }
return false }
}
} private fun shareFile(uri: Uri) {
val intent = Intent(Intent.ACTION_SEND)
private fun shareFile(uri: Uri) { intent.type = "text/plain"
val intent = Intent(Intent.ACTION_SEND) intent.putExtra(Intent.EXTRA_STREAM, uri)
intent.type = "text/plain" startActivity(Intent.createChooser(intent, "Share File"))
intent.putExtra(Intent.EXTRA_STREAM, uri) }
startActivity(Intent.createChooser(intent, "Share File")) private fun shareMultipleFiles(uris: ArrayList<Uri>) {
} val intent = Intent(Intent.ACTION_SEND_MULTIPLE)
private fun shareMultipleFiles(uris: ArrayList<Uri>) { intent.type = "*/*"
val intent = Intent(Intent.ACTION_SEND_MULTIPLE) intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris)
intent.type = "*/*" startActivity(Intent.createChooser(intent, "Share Files"))
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris) }
startActivity(Intent.createChooser(intent, "Share Files"))
} fun getCurrentFileBean() : FileBean?{
return mCurrentFileBean
fun getCurrentFileBean() : FileBean?{ }
return mCurrentFileBean
} fun setOnClickBtn() {
mEditBtn.setOnClickListener {
fun setOnClickBtn() { mBottomBar.visibility = View.GONE
mEditBtn.setOnClickListener { mEditBtn.visibility = View.GONE
mBottomBar.visibility = View.GONE mQuitBtn.visibility = View.GONE
mEditBtn.visibility = View.GONE findViewById<ImageView>(R.id.btn_share).visibility = View.GONE
mQuitBtn.visibility = View.GONE findViewById<View>(R.id.switch_and_select_layout).visibility = View.VISIBLE
findViewById<ImageView>(R.id.btn_share).visibility = View.GONE mDeleteBtn.visibility = View.VISIBLE
findViewById<View>(R.id.switch_and_select_layout).visibility = View.VISIBLE mCancelBtn.visibility = View.VISIBLE
mDeleteBtn.visibility = View.VISIBLE BaseActivity.isClickEditBtn = true
mCancelBtn.visibility = View.VISIBLE isNewShow(false)
BaseActivity.isClickEditBtn = true mFileAdapter.setEditClickState(true)
isNewShow(false)
mFileAdapter.setEditClickState(true) }
mCancelBtn.setOnClickListener {
} mEditBtn.visibility = View.VISIBLE
mCancelBtn.setOnClickListener { mQuitBtn.visibility = View.VISIBLE
mEditBtn.visibility = View.VISIBLE mDeleteBtn.visibility = View.GONE
mQuitBtn.visibility = View.VISIBLE mCancelBtn.visibility = View.GONE
mDeleteBtn.visibility = View.GONE findViewById<View>(R.id.switch_and_select_layout).visibility = View.GONE
mCancelBtn.visibility = View.GONE BaseActivity.isClickEditBtn = false
findViewById<View>(R.id.switch_and_select_layout).visibility = View.GONE isNewShow(false)
BaseActivity.isClickEditBtn = false mFileAdapter.setEditClickState(false)
isNewShow(false) }
mFileAdapter.setEditClickState(false) // mDeleteBtn.setOnClickListener {
} // super.onClick(mDeleteBtn)
// mDeleteBtn.setOnClickListener { // }
// super.onClick(mDeleteBtn) }
// } fun setFileShow(isShow: Boolean){
} mFileAdapter.setFileShow(isShow)
fun setFileShow(isShow: Boolean){ }
mFileAdapter.setFileShow(isShow)
}
} }
\ No newline at end of file
package com.test.mydemo3.base package com.xm.test.myfilemaster.base
interface BaseActivityListener { interface BaseActivityListener {
fun setTitle(str: String) fun setTitle(str: String)
fun isDeleteShow(isShow: Boolean) fun isDeleteShow(isShow: Boolean)
fun isShareShow(isShow: Boolean) fun isShareShow(isShow: Boolean)
fun isNewShow(isShow: Boolean) fun isNewShow(isShow: Boolean)
fun isCancelShow(isShow: Boolean) fun isCancelShow(isShow: Boolean)
fun isQuitShow(isShow: Boolean) fun isQuitShow(isShow: Boolean)
fun isEditShow(isShow: Boolean) fun isEditShow(isShow: Boolean)
} }
\ No newline at end of file
package com.test.mydemo3.fragment package com.xm.test.myfilemaster.fragment
import android.content.Intent import android.content.Intent
import androidx.fragment.app.viewModels
import android.os.Bundle import android.os.Bundle
import android.util.SparseBooleanArray import android.util.SparseBooleanArray
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
...@@ -9,17 +8,14 @@ import android.view.LayoutInflater ...@@ -9,17 +8,14 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.GridView import android.widget.GridView
import android.widget.LinearLayout import com.xm.test.myfilemaster.R
import android.widget.RelativeLayout import com.xm.test.myfilemaster.activity.FileManagerActivity
import com.test.mydemo3.R import com.xm.test.myfilemaster.activity.MediaActivity
import com.test.mydemo3.activity.FileManagerActivity import com.xm.test.myfilemaster.adapter.MediaAdapter
import com.test.mydemo3.activity.MediaActivity import com.xm.test.myfilemaster.model.FileBean
import com.test.mydemo3.adapter.MediaAdapter import com.xm.test.myfilemaster.util.MediaUtil
import com.test.mydemo3.model.FileBean import com.xm.test.myfilemaster.util.PermissionUtil
import com.test.mydemo3.util.FileUtil import com.xm.test.myfilemaster.view.CustomDialog
import com.test.mydemo3.util.MediaUtil
import com.test.mydemo3.util.PermissionUtil
import com.test.mydemo3.view.CustomDialog
class FileManagerFragment : Fragment(), View.OnClickListener { class FileManagerFragment : Fragment(), View.OnClickListener {
private lateinit var mView: View private lateinit var mView: View
......
package com.test.mydemo3.fragment package com.xm.test.myfilemaster.fragment
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
......
package com.test.mydemo3.fragment package com.xm.test.myfilemaster.fragment
import android.app.ActivityManager import android.app.ActivityManager
import android.content.Context import android.content.Context
...@@ -15,16 +15,15 @@ import android.view.ViewGroup ...@@ -15,16 +15,15 @@ import android.view.ViewGroup
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.ProgressBar import android.widget.ProgressBar
import android.widget.TextView import android.widget.TextView
import com.test.mydemo3.R import com.xm.test.myfilemaster.R
import com.test.mydemo3.activity.BatteryActivity import com.xm.test.myfilemaster.activity.BatteryActivity
import com.test.mydemo3.activity.CleanActivity import com.xm.test.myfilemaster.activity.CleanActivity
import com.test.mydemo3.activity.SimilarImagesActivity import com.xm.test.myfilemaster.activity.ScanEmptyFilesActivity
import com.test.mydemo3.activity.ScanEmptyFilesActivity import com.xm.test.myfilemaster.activity.ScanLargeFilesActivity
import com.test.mydemo3.activity.ScanLargeFilesActivity import com.xm.test.myfilemaster.activity.SimilarImagesActivity
import com.test.mydemo3.antivirus.AntivirusActivity import com.xm.test.myfilemaster.antivirus.AntivirusActivity
import com.test.mydemo3.util.PermissionUtil import com.xm.test.myfilemaster.util.PermissionUtil
import com.test.mydemo3.view.CirclePgBar import com.xm.test.myfilemaster.view.CustomDialog
import com.test.mydemo3.view.CustomDialog
class HomeFragment : Fragment(), OnClickListener{ class HomeFragment : Fragment(), OnClickListener{
private lateinit var mView: View private lateinit var mView: View
...@@ -37,7 +36,7 @@ class HomeFragment : Fragment(), OnClickListener{ ...@@ -37,7 +36,7 @@ class HomeFragment : Fragment(), OnClickListener{
private lateinit var mMemoryUseText: TextView private lateinit var mMemoryUseText: TextView
private lateinit var mMemoryUseProgress: ProgressBar private lateinit var mMemoryUseProgress: ProgressBar
private lateinit var mBatteryInfo: View private lateinit var mBatteryInfo: View
private lateinit var mCirclePgBar: CirclePgBar private lateinit var mCirclePgBar: com.xm.test.myfilemaster.view.CirclePgBar
companion object { companion object {
fun newInstance() = HomeFragment() fun newInstance() = HomeFragment()
} }
...@@ -81,7 +80,7 @@ class HomeFragment : Fragment(), OnClickListener{ ...@@ -81,7 +80,7 @@ class HomeFragment : Fragment(), OnClickListener{
mScanEmptyFiles.setOnClickListener(this) mScanEmptyFiles.setOnClickListener(this)
mBatteryInfo.setOnClickListener(this) mBatteryInfo.setOnClickListener(this)
mView.findViewById<CirclePgBar>(R.id.progress_circular).setOnClickListener(this) mView.findViewById<com.xm.test.myfilemaster.view.CirclePgBar>(R.id.progress_circular).setOnClickListener(this)
mView.findViewById<View>(R.id.home_clean_btn).setOnClickListener(this) mView.findViewById<View>(R.id.home_clean_btn).setOnClickListener(this)
mView.findViewById<View>(R.id.antivirus_btn).setOnClickListener (this) mView.findViewById<View>(R.id.antivirus_btn).setOnClickListener (this)
......
package com.test.mydemo3.fragment package com.xm.test.myfilemaster.fragment
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
......
package com.test.mydemo3.fragment package com.xm.test.myfilemaster.fragment
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
...@@ -22,18 +22,17 @@ import androidx.core.view.isVisible ...@@ -22,18 +22,17 @@ import androidx.core.view.isVisible
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import com.kongzue.dialogx.dialogs.WaitDialog import com.kongzue.dialogx.dialogs.WaitDialog
import com.test.mydemo3.MyApplication import com.xm.test.myfilemaster.MyApplication
import com.test.mydemo3.R import com.xm.test.myfilemaster.R
import com.test.mydemo3.activity.BaseActivityViewModel import com.xm.test.myfilemaster.activity.BaseActivityViewModel
import com.test.mydemo3.activity.HomeActivity import com.xm.test.myfilemaster.activity.HomeActivity
import com.test.mydemo3.activity.InternalStorageActivity import com.xm.test.myfilemaster.activity.MoveOrCopyActivity
import com.test.mydemo3.activity.MoveOrCopyActivity import com.xm.test.myfilemaster.adapter.FilesItemViewAdapter
import com.test.mydemo3.adapter.FilesItemViewAdapter import com.xm.test.myfilemaster.base.BaseActivity
import com.test.mydemo3.base.BaseActivity import com.xm.test.myfilemaster.model.FileBean
import com.test.mydemo3.model.FileBean import com.xm.test.myfilemaster.util.FileUtil
import com.test.mydemo3.util.FileUtil import com.xm.test.myfilemaster.util.PermissionUtil
import com.test.mydemo3.util.PermissionUtil import com.xm.test.myfilemaster.view.CustomDialog
import com.test.mydemo3.view.CustomDialog
import java.io.File import java.io.File
class InternalStorageFragment : Fragment(), View.OnClickListener { class InternalStorageFragment : Fragment(), View.OnClickListener {
...@@ -225,7 +224,7 @@ class InternalStorageFragment : Fragment(), View.OnClickListener { ...@@ -225,7 +224,7 @@ class InternalStorageFragment : Fragment(), View.OnClickListener {
mBaseViewModel.setNumber(switchNumber) mBaseViewModel.setNumber(switchNumber)
} }
R.id.btn_delete ->{ R.id.btn_delete ->{
val customDialog = com.test.mydemo3.view.CustomDialog(requireContext()) val customDialog = CustomDialog(requireContext())
customDialog.setsCancel(View.OnClickListener { customDialog.setsCancel(View.OnClickListener {
customDialog.dismiss() customDialog.dismiss()
}).setsConfirm(View.OnClickListener { }).setsConfirm(View.OnClickListener {
......
package com.test.mydemo3.model package com.xm.test.myfilemaster.model
data class GlobalConfig( data class GlobalConfig(
val cacheTime: Int, val cacheTime: Int,
val rateWindowInterval: Int, val rateWindowInterval: Int,
val buyInsertInterval: Int, val buyInsertInterval: Int,
val natureInsertInterval: Int, val natureInsertInterval: Int,
val notDialogInterval: Int val notDialogInterval: Int
) )
data class PushManagement( data class PushManagement(
val pushShow: Int, val pushShow: Int,
val newUserAvoidTime: Int, val newUserAvoidTime: Int,
val allPushInterval: Int, val allPushInterval: Int,
val oPushInterval: Int, val oPushInterval: Int,
val pushCircleOrder: List<Int>, val pushCircleOrder: List<Int>,
val scenePush: List<Int> val scenePush: List<Int>
) )
data class AdsCfg( data class AdsCfg(
val adOpen: AdInfo, val adOpen: AdInfo,
val adInsertBattery: AdInfo val adInsertBattery: AdInfo
) )
data class AdInfo( data class AdInfo(
val isShow: Boolean, val isShow: Boolean,
val showInterval: Int, val showInterval: Int,
val newUserAvoidTime: Int, val newUserAvoidTime: Int,
val unitId: String, val unitId: String,
val type: String, val type: String,
val openAdIsShow: Int, val openAdIsShow: Int,
val loadingPageTime: Int val loadingPageTime: Int
) )
data class PushCfg( data class PushCfg(
val batteryPush: PushInfo, val batteryPush: PushInfo,
val batteryLowBoost: PushInfo val batteryLowBoost: PushInfo
) )
data class PushInfo( data class PushInfo(
val pushStayTime: Int, val pushStayTime: Int,
val lastUseInterval: Int, val lastUseInterval: Int,
val featureEx1: Int, val featureEx1: Int,
val pushInterval: Int val pushInterval: Int
) )
data class Result( data class Result(
val data: Data val data: Data
) )
data class Data( data class Data(
val globalConfig: GlobalConfig, val globalConfig: GlobalConfig,
val pushManagement: PushManagement, val pushManagement: PushManagement,
val adsCfg: AdsCfg, val adsCfg: AdsCfg,
val pushCfg: PushCfg val pushCfg: PushCfg
) )
data class AdConfigData( data class AdConfigData(
val status: Int, val status: Int,
val msg: String, val msg: String,
val sign: String, val sign: String,
val result: Result, val result: Result,
val extras: Any?, val extras: Any?,
val enc: Any?, val enc: Any?,
val security: String val security: String
) )
package com.test.mydemo3.model package com.xm.test.myfilemaster.model
import java.io.Serializable import java.io.Serializable
class CleanBean: Serializable { class CleanBean: Serializable {
lateinit var typeName: String lateinit var typeName: String
var isListViewShow = false var isListViewShow = false
var fileBeans = ArrayList<FileBean>() var fileBeans = ArrayList<FileBean>()
} }
\ No newline at end of file
package com.test.mydemo3.model package com.xm.test.myfilemaster.model
import android.graphics.Bitmap import android.graphics.Bitmap
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import java.io.Serializable import java.io.Serializable
class FileBean : Serializable{ class FileBean : Serializable{
var fileName: String = "" var fileName: String = ""
var filePath: String = "" var filePath: String = ""
var hint: String? = null var hint: String? = null
var isDir: Boolean = false var isDir: Boolean = false
var drawable : Drawable? = null var drawable : Drawable? = null
var fileType: String = "" var fileType: String = ""
var fileSize: Long = 0 var fileSize: Long = 0
var fileBitmap: Bitmap? = null var fileBitmap: Bitmap? = null
var childList = ArrayList<FileBean>() var childList = ArrayList<FileBean>()
override fun toString(): String { override fun toString(): String {
return "FileBean(fileName='$fileName', filePath='$filePath', isDir=$isDir, fileType='$fileType', childList=${childList.toString()})" return "FileBean(fileName='$fileName', filePath='$filePath', isDir=$isDir, fileType='$fileType', childList=${childList.toString()})"
} }
} }
\ No newline at end of file
package com.test.mydemo3.model package com.xm.test.myfilemaster.model
class FilesItemBean{ class FilesItemBean{
var resId: Int = 0 var resId: Int = 0
lateinit var mItemFileName: String lateinit var mItemFileName: String
lateinit var mItemFileNone: String lateinit var mItemFileNone: String
var mItemSelectChecked: Boolean = false var mItemSelectChecked: Boolean = false
lateinit var mItemFilePath: String lateinit var mItemFilePath: String
var mFileItemCount: Int = 0 var mFileItemCount: Int = 0
var mFileSize: Int = 0 var mFileSize: Int = 0
var mFileType: Int = 0 // type 1 empty, 2 ..., 3 ... var mFileType: Int = 0 // type 1 empty, 2 ..., 3 ...
} }
\ No newline at end of file
package com.test.mydemo3.util package com.xm.test.myfilemaster.util
import android.annotation.SuppressLint import android.content.Context
import android.content.Context import android.content.Intent
import android.content.Intent import android.content.IntentFilter
import android.content.IntentFilter
import java.util.Objects object BatteryUtil {
lateinit var technology : String
object BatteryUtil { var voltage: Int = 0 //瓦特
lateinit var technology : String var level: Int = 0 //电量
var voltage: Int = 0 //瓦特 var temperature: Double = 0.0 //温度
var level: Int = 0 //电量 lateinit var status : String
var temperature: Double = 0.0 //温度 lateinit var health : String
lateinit var status : String lateinit var plugged : String
lateinit var health : String
lateinit var plugged : String
/**
* 获取电池容量
/** * */
* 获取电池容量 /*fun getBatteryCapacity(context: Context): String{
* */ val mPowerProfile : Objects
/*fun getBatteryCapacity(context: Context): String{ var batteryCapacity = 0.0
val mPowerProfile : Objects val POWER_PROFILE_CLASS = "com.android.internal.os.PowerProfile"
var batteryCapacity = 0.0 try {
val POWER_PROFILE_CLASS = "com.android.internal.os.PowerProfile" mPowerProfile = Class.forName(POWER_PROFILE_CLASS)
try { .getConstructor(Context::class.java)
mPowerProfile = Class.forName(POWER_PROFILE_CLASS) .newInstance(context) as Objects
.getConstructor(Context::class.java) batteryCapacity = Class
.newInstance(context) as Objects .forName(POWER_PROFILE_CLASS)
batteryCapacity = Class .getMethod("getBatteryCapacity")
.forName(POWER_PROFILE_CLASS) .invoke(mPowerProfile) as Double
.getMethod("getBatteryCapacity")
.invoke(mPowerProfile) as Double }catch (e: Exception){
e.printStackTrace()
}catch (e: Exception){ }
e.printStackTrace()
} return batteryCapacity.toString()
}*/
return batteryCapacity.toString()
}*/ fun ReceiverBatteryOhterInfo(context: Context){
val intentFilter = IntentFilter(Intent.ACTION_BATTERY_CHANGED)
fun ReceiverBatteryOhterInfo(context: Context){ val receiver = context.registerReceiver(null, intentFilter)
val intentFilter = IntentFilter(Intent.ACTION_BATTERY_CHANGED) technology = receiver?.getStringExtra("technology").toString()
val receiver = context.registerReceiver(null, intentFilter) if (technology.equals("") || technology.equals(null)){
technology = receiver?.getStringExtra("technology").toString() technology = "Unknown"
if (technology.equals("") || technology.equals(null)){ }
technology = "Unknown" voltage = receiver?.getIntExtra("voltage",0) as Int
} level = receiver.getIntExtra("level", 0) as Int
voltage = receiver?.getIntExtra("voltage",0) as Int temperature = receiver.getIntExtra("temperature", 0 ) / 10.0
level = receiver.getIntExtra("level", 0) as Int
temperature = receiver.getIntExtra("temperature", 0 ) / 10.0 }
}
} }
\ No newline at end of file
package com.test.mydemo3.util package com.xm.test.myfilemaster.util
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.graphics.BitmapFactory import android.graphics.BitmapFactory
import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.BitmapDrawable
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Environment import android.os.Environment
import android.provider.MediaStore import android.provider.MediaStore
import android.util.Log import android.util.Log
import android.util.TypedValue import android.util.TypedValue
import com.test.mydemo3.model.FileBean import com.xm.test.myfilemaster.model.FileBean
import kotlinx.coroutines.DelicateCoroutinesApi import java.io.File
import kotlinx.coroutines.Dispatchers import java.io.IOException
import kotlinx.coroutines.GlobalScope import java.text.SimpleDateFormat
import kotlinx.coroutines.launch import java.util.Date
import java.io.File
import java.io.IOException object FileUtil {
import java.text.SimpleDateFormat
import java.util.Date val EXTERNAL_STORAGE: String = Environment.getExternalStorageDirectory().path
object FileUtil { const val TEXT_MIME_TYPE = "text/plain"
const val ZIP_MIME_TYPE = "application/zip"
val EXTERNAL_STORAGE: String = Environment.getExternalStorageDirectory().path const val RAR_MIME_TYPE = "application/x-rar-compressed"
const val ZIP_7Z_MIME_TYPE ="application/x-7z-compressed"
const val TEXT_MIME_TYPE = "text/plain" const val PDF_MIME_TYPE = "application/pdf"
const val ZIP_MIME_TYPE = "application/zip" const val WORD_MIME_TYPE = "application/msword"
const val RAR_MIME_TYPE = "application/x-rar-compressed" const val EXCEL_MIME_TYPE = "application/vnd.ms-excel"
const val ZIP_7Z_MIME_TYPE ="application/x-7z-compressed" const val PPT_MIME_TYPE = "application/vnd.ms-powerpoint"
const val PDF_MIME_TYPE = "application/pdf" const val APK_MIME_TYPE = "application/vnd.android.package-archive"
const val WORD_MIME_TYPE = "application/msword" const val MP3_MIME_TYPE = "audio/mpeg"
const val EXCEL_MIME_TYPE = "application/vnd.ms-excel" const val WAV_MIME_TYPE = "audio/x-wav"
const val PPT_MIME_TYPE = "application/vnd.ms-powerpoint"
const val APK_MIME_TYPE = "application/vnd.android.package-archive" fun getFileCreateTime(filePath: String) : Triple<Int, Int, Int>{
const val MP3_MIME_TYPE = "audio/mpeg" val folder = File(filePath)
const val WAV_MIME_TYPE = "audio/x-wav" val fileCreateTime = folder.lastModified()
val date = Date(fileCreateTime)
fun getFileCreateTime(filePath: String) : Triple<Int, Int, Int>{ val format = SimpleDateFormat("yyyy-MM-dd")
val folder = File(filePath) val yearMonthDay = format.format(date).split("-")
val fileCreateTime = folder.lastModified() return Triple(yearMonthDay[0].toInt(), yearMonthDay[1].toInt(), yearMonthDay[2].toInt())
val date = Date(fileCreateTime) }
val format = SimpleDateFormat("yyyy-MM-dd")
val yearMonthDay = format.format(date).split("-") fun createDirectory(path: String, fileDirName: String): FileBean{
return Triple(yearMonthDay[0].toInt(), yearMonthDay[1].toInt(), yearMonthDay[2].toInt()) val fileBean = FileBean()
} val file = File(path + "/" + fileDirName)
fileBean.filePath = "-1"
fun createDirectory(path: String, fileDirName: String): FileBean{ if (!file.exists()){
val fileBean = FileBean() val mkdirs = file.mkdirs()
val file = File(path + "/" + fileDirName) if (mkdirs){
fileBean.filePath = "-1" if (file.isDirectory){
if (!file.exists()){ fileBean.fileName = file.name
val mkdirs = file.mkdirs() fileBean.filePath = file.path
if (mkdirs){ fileBean.fileSize = file.length()
if (file.isDirectory){ fileBean.fileType = getFileType(file)
fileBean.fileName = file.name fileBean.isDir = true
fileBean.filePath = file.path }
fileBean.fileSize = file.length() }
fileBean.fileType = getFileType(file) }
fileBean.isDir = true
} return fileBean
} }
}
return fileBean @SuppressLint("Range")
} fun scanFiles(context: Context, uri: Uri, minSize: Long) : ArrayList<FileBean>{
var filesItemBean : FileBean
var fileListItemBean = ArrayList<FileBean>()
@SuppressLint("Range") val projection = arrayOf(
fun scanFiles(context: Context, uri: Uri, minSize: Long) : ArrayList<FileBean>{ MediaStore.Files.FileColumns._ID,
var filesItemBean : FileBean MediaStore.Files.FileColumns.DISPLAY_NAME,
var fileListItemBean = ArrayList<FileBean>() MediaStore.Files.FileColumns.SIZE
val projection = arrayOf( )
MediaStore.Files.FileColumns._ID,
MediaStore.Files.FileColumns.DISPLAY_NAME, val cursor = context.contentResolver.query(uri, projection,null,null,null)
MediaStore.Files.FileColumns.SIZE if (cursor != null && cursor.moveToFirst()){
) do {
val fileSize = cursor.getLong(cursor.getColumnIndex(MediaStore.Files.FileColumns.SIZE))
val cursor = context.contentResolver.query(uri, projection,null,null,null) if (fileSize > minSize){
if (cursor != null && cursor.moveToFirst()){ filesItemBean = FileBean()
do { filesItemBean.fileName = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.DISPLAY_NAME))
val fileSize = cursor.getLong(cursor.getColumnIndex(MediaStore.Files.FileColumns.SIZE)) filesItemBean.fileSize = fileSize
if (fileSize > minSize){ filesItemBean.filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.RELATIVE_PATH))
filesItemBean = FileBean() filesItemBean.isDir = false
filesItemBean.fileName = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.DISPLAY_NAME)) filesItemBean.fileType = getFileType(File(filesItemBean.filePath))
filesItemBean.fileSize = fileSize
filesItemBean.filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.RELATIVE_PATH)) fileListItemBean.add(filesItemBean)
filesItemBean.isDir = false }
filesItemBean.fileType = getFileType(File(filesItemBean.filePath))
}while (cursor.moveToNext())
fileListItemBean.add(filesItemBean) cursor.close()
} }
}while (cursor.moveToNext()) return fileListItemBean
cursor.close()
} }
return fileListItemBean @SuppressLint("Range")
fun sanRecursive(context: Context, uri: Uri, minSize: Long): ArrayList<FileBean>{
} var filesItemBeanList = ArrayList<FileBean>()
filesItemBeanList.addAll(scanFiles(context, uri, minSize))
@SuppressLint("Range")
fun sanRecursive(context: Context, uri: Uri, minSize: Long): ArrayList<FileBean>{ val selection = MediaStore.Files.FileColumns.MEDIA_TYPE + "=" +
var filesItemBeanList = ArrayList<FileBean>() MediaStore.Files.FileColumns.MEDIA_TYPE_NONE
filesItemBeanList.addAll(scanFiles(context, uri, minSize)) val sortOrder = MediaStore.Files.FileColumns.DATE_MODIFIED
val cursor = context.contentResolver.query(uri,null, selection,null, sortOrder)
val selection = MediaStore.Files.FileColumns.MEDIA_TYPE + "=" + if (cursor != null && cursor.moveToFirst()){
MediaStore.Files.FileColumns.MEDIA_TYPE_NONE do {
val sortOrder = MediaStore.Files.FileColumns.DATE_MODIFIED val fileId = cursor.getLong(cursor.getColumnIndex(MediaStore.Files.FileColumns._ID))
val cursor = context.contentResolver.query(uri,null, selection,null, sortOrder) val chiIdUri = Uri.withAppendedPath(uri,""+ fileId)
if (cursor != null && cursor.moveToFirst()){ filesItemBeanList.addAll(scanFiles(context,chiIdUri, minSize))
do {
val fileId = cursor.getLong(cursor.getColumnIndex(MediaStore.Files.FileColumns._ID)) }while (cursor.moveToNext())
val chiIdUri = Uri.withAppendedPath(uri,""+ fileId) cursor.close()
filesItemBeanList.addAll(scanFiles(context,chiIdUri, minSize)) }
return filesItemBeanList
}while (cursor.moveToNext()) }
cursor.close()
} fun getAllFilesAndDirectories(context: Context): ArrayList<FileBean>{
return filesItemBeanList var fileList = ArrayList<FileBean>()
} // val internalStorageDir = context.filesDir
val internalStorageDir = File(EXTERNAL_STORAGE)
fun getAllFilesAndDirectories(context: Context): ArrayList<FileBean>{ if (internalStorageDir != null && internalStorageDir.exists()){
var fileList = ArrayList<FileBean>() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// val internalStorageDir = context.filesDir traverseDirectory(internalStorageDir, fileList)
val internalStorageDir = File(EXTERNAL_STORAGE) }
if (internalStorageDir != null && internalStorageDir.exists()){ }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
traverseDirectory(internalStorageDir, fileList) return fileList
} }
}
fun traverseDirectory(directory: File, fileList:ArrayList<FileBean>){
return fileList val files = directory.listFiles()
}
if (files!=null){
fun traverseDirectory(directory: File, fileList:ArrayList<FileBean>){ for (file: File in files){
val files = directory.listFiles() val fileBean: FileBean = FileBean()
fileBean.fileName = file.name
if (files!=null){ fileBean.filePath = file.path
for (file: File in files){ fileBean.isDir = file.isDirectory
val fileBean: FileBean = FileBean() // val type = Files.probeContentType(Paths.get(file.path))
fileBean.fileName = file.name if (file.isDirectory){
fileBean.filePath = file.path val children = ArrayList<FileBean>()
fileBean.isDir = file.isDirectory // traverseDirectory(file, children)
// val type = Files.probeContentType(Paths.get(file.path)) fileBean.childList = children
if (file.isDirectory){ fileBean.fileType = "dir"
val children = ArrayList<FileBean>() }else{
// traverseDirectory(file, children) fileBean.fileType = getFileType(file)
fileBean.childList = children fileBean.fileSize = file.length()
fileBean.fileType = "dir" }
}else{ fileList.add(fileBean)
fileBean.fileType = getFileType(file) }
fileBean.fileSize = file.length() }
} }
fileList.add(fileBean)
} fun getFileList(directory: File) : ArrayList<FileBean>{
} val fileBeans = ArrayList<FileBean>()
} // val directory = Environment.getExternalStorageDirectory()
val files = directory.listFiles()
fun getFileList(directory: File) : ArrayList<FileBean>{ for (file in files!!){
val fileBeans = ArrayList<FileBean>() if (!file.isHidden && !file.name.startsWith(".") && file.name != ".face") {
// val directory = Environment.getExternalStorageDirectory() val fileBean = FileBean()
val files = directory.listFiles() fileBean.fileName = file.name
for (file in files!!){ fileBean.filePath = file.path
if (!file.isHidden && !file.name.startsWith(".") && file.name != ".face") { fileBean.isDir = file.isDirectory
val fileBean = FileBean() // val type = Files.probeContentType(Paths.get(file.path))
fileBean.fileName = file.name if (file.isDirectory){
fileBean.filePath = file.path val children = ArrayList<FileBean>()
fileBean.isDir = file.isDirectory traverseDirectory(file, children)
// val type = Files.probeContentType(Paths.get(file.path)) fileBean.childList = children
if (file.isDirectory){ fileBean.fileType = "dir"
val children = ArrayList<FileBean>() }else{
traverseDirectory(file, children) fileBean.fileType = getFileType(file)
fileBean.childList = children fileBean.fileSize = file.length()
fileBean.fileType = "dir" }
}else{ Log.e("yanglin", "getFileList: childList.size = ${fileBean.childList.size}", )
fileBean.fileType = getFileType(file) fileBeans.add(fileBean)
fileBean.fileSize = file.length() }
} }
Log.e("yanglin", "getFileList: childList.size = ${fileBean.childList.size}", ) return fileBeans
fileBeans.add(fileBean) }
}
} fun getFileType(file: File): String{
return fileBeans val fileName = file.name
} val indexOf = fileName.lastIndexOf(".")
if (indexOf != -1 && indexOf < fileName.length -1){
fun getFileType(file: File): String{ return fileName.substring(indexOf + 1)
val fileName = file.name }else{
val indexOf = fileName.lastIndexOf(".") return "notType"
if (indexOf != -1 && indexOf < fileName.length -1){ }
return fileName.substring(indexOf + 1) }
}else{
return "notType" fun fileListSort(fileList: ArrayList<FileBean>): ArrayList<FileBean>{
} fileList.sortWith(Comparator { fileBean1, fileBean2 ->
} if (File(fileBean1.filePath).isDirectory && !File(fileBean2.filePath).isDirectory) {
-1
fun fileListSort(fileList: ArrayList<FileBean>): ArrayList<FileBean>{ } else if (!File(fileBean1.filePath).isDirectory && File(fileBean2.filePath).isDirectory) {
fileList.sortWith(Comparator { fileBean1, fileBean2 -> 1
if (File(fileBean1.filePath).isDirectory && !File(fileBean2.filePath).isDirectory) { } else {
-1 fileBean1.fileName.compareTo(fileBean2.fileName)
} else if (!File(fileBean1.filePath).isDirectory && File(fileBean2.filePath).isDirectory) { }
1 })
} else { return fileList
fileBean1.fileName.compareTo(fileBean2.fileName) }
} /**
}) * 查询大于10M的文件
return fileList * ***/
} fun search10MFiles(context: Context, sizeInByte: Int): ArrayList<FileBean>{
/** val fileBeans = ArrayList<FileBean>()
* 查询大于10M的文件 val projection = arrayOf(
* ***/ MediaStore.Files.FileColumns.DATA,
fun search10MFiles(context: Context, sizeInByte: Int): ArrayList<FileBean>{ MediaStore.Files.FileColumns.SIZE
val fileBeans = ArrayList<FileBean>() )
val projection = arrayOf(
MediaStore.Files.FileColumns.DATA, val selection = "${MediaStore.Files.FileColumns.SIZE} > ?"
MediaStore.Files.FileColumns.SIZE val selectionArgs = arrayOf(sizeInByte.toString())
)
context.contentResolver.query(
val selection = "${MediaStore.Files.FileColumns.SIZE} > ?" MediaStore.Files.getContentUri("external"),
val selectionArgs = arrayOf(sizeInByte.toString()) projection,
selection,
context.contentResolver.query( selectionArgs,
MediaStore.Files.getContentUri("external"), null
projection, )?.use { cursor ->
selection, val dataColumnIndex = cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA)
selectionArgs,
null while (cursor.moveToNext()) {
)?.use { cursor -> val filePath = cursor.getString(dataColumnIndex)
val dataColumnIndex = cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA) val fileBean = FileBean()
val file = File(filePath)
while (cursor.moveToNext()) { fileBean.fileName = file.name
val filePath = cursor.getString(dataColumnIndex) fileBean.filePath = file.path
val fileBean = FileBean() fileBean.fileSize = file.length()
val file = File(filePath) fileBean.fileType = getFileType(file)
fileBean.fileName = file.name fileBean.isDir = false
fileBean.filePath = file.path fileBeans.add(fileBean)
fileBean.fileSize = file.length() }
fileBean.fileType = getFileType(file) }
fileBean.isDir = false return fileBeans
fileBeans.add(fileBean) }
}
} fun renameFile(oldPath: String, newName: String): Boolean {
return fileBeans val oldFile = File(oldPath)
} val parentDir = oldFile.parentFile // 获取文件的父目录
val newFile = File(parentDir, newName) // 构建新的文件路径
fun renameFile(oldPath: String, newName: String): Boolean { return oldFile.renameTo(newFile)
val oldFile = File(oldPath) }
val parentDir = oldFile.parentFile // 获取文件的父目录
val newFile = File(parentDir, newName) // 构建新的文件路径 fun deleteFiles(filePaths: List<String>): Boolean {
return oldFile.renameTo(newFile) var allDeleted = true
} for (filePath in filePaths) {
val file = File(filePath)
fun deleteFiles(filePaths: List<String>): Boolean { val deleted = file.delete()
var allDeleted = true if (!deleted) {
for (filePath in filePaths) { // 删除失败
val file = File(filePath) allDeleted = false
val deleted = file.delete() }
if (!deleted) { }
// 删除失败 return allDeleted
allDeleted = false }
}
} fun moveFile(path: String, destinationPath: String) : Boolean{
return allDeleted val file = File(path)
} val destinationFile = File(destinationPath)
Log.e("yanglin", "moveFile: filePath = ${path}, currentPath = $destinationPath", )
fun moveFile(path: String, destinationPath: String) : Boolean{ return file.renameTo(destinationFile)
val file = File(path) }
val destinationFile = File(destinationPath)
Log.e("yanglin", "moveFile: filePath = ${path}, currentPath = $destinationPath", ) fun copyFile(path: String, destinationPath: String): Boolean{
return file.renameTo(destinationFile) return try {
} File(path).inputStream().use { input->
File(destinationPath).outputStream().use { output->
fun copyFile(path: String, destinationPath: String): Boolean{ input.copyTo(output)
return try { }
File(path).inputStream().use { input-> }
File(destinationPath).outputStream().use { output-> true
input.copyTo(output) }catch (e: IOException){
} e.printStackTrace()
} false
true }
}catch (e: IOException){ }
e.printStackTrace() fun scanEmptyFiles(filePath: String, fileList: ArrayList<FileBean>){
false val files = File(filePath).listFiles() // 获取当前目录下的所有文件和文件夹
} if (files != null) {
} for (file in files) {
fun scanEmptyFiles(filePath: String, fileList: ArrayList<FileBean>){ if (file.isDirectory && file.listFiles()?.isEmpty() == true) { // 如果是文件夹,则递归搜索
val files = File(filePath).listFiles() // 获取当前目录下的所有文件和文件夹 val fileBean: FileBean = FileBean()
if (files != null) { fileBean.fileName = file.name
for (file in files) { fileBean.filePath = file.path
if (file.isDirectory && file.listFiles()?.isEmpty() == true) { // 如果是文件夹,则递归搜索 fileBean.fileSize = file.length()
val fileBean: FileBean = FileBean() fileBean.fileType = "dir"
fileBean.fileName = file.name fileBean.isDir = true
fileBean.filePath = file.path fileList.add(fileBean)
fileBean.fileSize = file.length()
fileBean.fileType = "dir" }else if (file.isDirectory){
fileBean.isDir = true scanEmptyFiles(file.path,fileList)
fileList.add(fileBean) }
}
}else if (file.isDirectory){ }
scanEmptyFiles(file.path,fileList) }
}
}
} fun dpToPx(dp: Int, context: Context): Int{
} return TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
dp.toFloat(),
fun dpToPx(dp: Int, context: Context): Int{ context.resources.displayMetrics
return TypedValue.applyDimension( ).toInt()
TypedValue.COMPLEX_UNIT_DIP, }
dp.toFloat(),
context.resources.displayMetrics @SuppressLint("Recycle")
).toInt() fun getMediaData(context: Context): ArrayList<FileBean>{
} val fileBeans = ArrayList<FileBean>()
val projection = arrayOf(MediaStore.Images.Media.DATA)
@SuppressLint("Recycle") val cursor = context.contentResolver.query(
fun getMediaData(context: Context): ArrayList<FileBean>{ MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
val fileBeans = ArrayList<FileBean>() projection,
val projection = arrayOf(MediaStore.Images.Media.DATA) null, null, null
val cursor = context.contentResolver.query( )
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection, cursor?.let {
null, null, null val indexOrThrow = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)
) while (cursor.moveToNext()){
val imagePath = cursor.getString(indexOrThrow)
cursor?.let { val bitmap = BitmapFactory.decodeFile(imagePath)
val indexOrThrow = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA) val file = File(imagePath)
while (cursor.moveToNext()){
val imagePath = cursor.getString(indexOrThrow) val fileBean = FileBean()
val bitmap = BitmapFactory.decodeFile(imagePath) fileBean.fileBitmap = bitmap
val file = File(imagePath) fileBean.fileName = file.name
fileBean.filePath = imagePath
val fileBean = FileBean() fileBean.fileType = getFileType(file)
fileBean.fileBitmap = bitmap Log.e("yanglin", "getFileList: childList.size = ${imagePath}", )
fileBean.fileName = file.name fileBeans.add(fileBean)
fileBean.filePath = imagePath }
fileBean.fileType = getFileType(file) }
Log.e("yanglin", "getFileList: childList.size = ${imagePath}", ) return fileBeans
fileBeans.add(fileBean) }
}
} fun getTypeFiles(types: Array<String>, fileBeans: ArrayList<FileBean>){
return fileBeans
} MediaStore.Files()
val externalStorageDir = Environment.getExternalStorageDirectory()
fun getTypeFiles(types: Array<String>, fileBeans: ArrayList<FileBean>){ externalStorageDir.listFiles()?.forEach {
if (it.isDirectory){
MediaStore.Files() getTypeFiles(types, fileBeans)
val externalStorageDir = Environment.getExternalStorageDirectory() }else{
externalStorageDir.listFiles()?.forEach { val fileBean = FileBean()
if (it.isDirectory){ for (type in types){
getTypeFiles(types, fileBeans) if (type.contains(getFileType(it))){
}else{
val fileBean = FileBean() fileBean.fileName = it.name
for (type in types){ fileBean.filePath = it.path
if (type.contains(getFileType(it))){ fileBean.fileSize = it.length()
fileBean.fileType = type
fileBean.fileName = it.name fileBean.isDir = false
fileBean.filePath = it.path fileBeans.add(fileBean)
fileBean.fileSize = it.length() break
fileBean.fileType = type }
fileBean.isDir = false }
fileBeans.add(fileBean) }
break }
} }
}
} @SuppressLint("Range")
} fun getMediaFiles(context: Context, fileType: String, limit: Int): ArrayList<FileBean> {
} val fileBeans = ArrayList<FileBean>()
val projection = arrayOf(MediaStore.Images.Media.DATA)
@SuppressLint("Range") var contentUri : Uri
fun getMediaFiles(context: Context, fileType: String, limit: Int): ArrayList<FileBean> { if (fileType.contains("image")){
val fileBeans = ArrayList<FileBean>() contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
val projection = arrayOf(MediaStore.Images.Media.DATA) }else if (fileType.contains("video")){
var contentUri : Uri contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI
if (fileType.contains("image")){ }else if (fileType.contains("audio")){
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
}else if (fileType.contains("video")){ }else{
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
}else if (fileType.contains("audio")){ }
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI val cursor = context.contentResolver.query(
}else{ contentUri,
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI projection,
} null,
val cursor = context.contentResolver.query( null,
contentUri, null
projection, )
null, cursor?.use {
null, var count = 0
null while (it.moveToNext()) {
) if (count < limit){
cursor?.use { val imagePath = it.getString(it.getColumnIndex(MediaStore.Images.Media.DATA))
var count = 0 // images.add(imagePath)
while (it.moveToNext()) { val fileBean = FileBean()
if (count < limit){ val file = File(imagePath)
val imagePath = it.getString(it.getColumnIndex(MediaStore.Images.Media.DATA)) fileBean.fileName = file.name
// images.add(imagePath) fileBean.filePath = file.path
val fileBean = FileBean() fileBean.fileSize = file.length()
val file = File(imagePath) fileBean.fileType = getFileType(file)
fileBean.fileName = file.name fileBean.isDir = false
fileBean.filePath = file.path fileBean.drawable = if (fileType.contains("image")) BitmapDrawable(context.resources, BitmapFactory.decodeFile(file.path)) else null
fileBean.fileSize = file.length() fileBeans.add(fileBean)
fileBean.fileType = getFileType(file) }
fileBean.isDir = false count ++
fileBean.drawable = if (fileType.contains("image")) BitmapDrawable(context.resources, BitmapFactory.decodeFile(file.path)) else null }
fileBeans.add(fileBean) cursor.close()
} }
count ++
} return fileBeans
cursor.close() }
}
fun getFileType(mimeType: String, context: Context): ArrayList<FileBean>{
return fileBeans val fileBeans: ArrayList<FileBean> = ArrayList()
} val projection = arrayOf(
MediaStore.Files.FileColumns.DATA,
fun getFileType(mimeType: String, context: Context): ArrayList<FileBean>{ MediaStore.Files.FileColumns.MIME_TYPE
val fileBeans: ArrayList<FileBean> = ArrayList() )
val projection = arrayOf(
MediaStore.Files.FileColumns.DATA, val selection = "${MediaStore.Files.FileColumns.MIME_TYPE} = ?"
MediaStore.Files.FileColumns.MIME_TYPE val selectionArgs = arrayOf(mimeType)
)
context.contentResolver.query(
val selection = "${MediaStore.Files.FileColumns.MIME_TYPE} = ?" MediaStore.Files.getContentUri("external"),
val selectionArgs = arrayOf(mimeType) projection,
selection,
context.contentResolver.query( selectionArgs,
MediaStore.Files.getContentUri("external"), null
projection, )?.use { cursor ->
selection, val dataColumnIndex = cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA)
selectionArgs, while (cursor.moveToNext()) {
null val filePath = cursor.getString(dataColumnIndex)
)?.use { cursor -> val fileBean = FileBean()
val dataColumnIndex = cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA) val file = File(filePath)
while (cursor.moveToNext()) { fileBean.fileName = file.name
val filePath = cursor.getString(dataColumnIndex) fileBean.filePath = file.path
val fileBean = FileBean() fileBean.fileSize = file.length()
val file = File(filePath) fileBean.fileType = getFileType(file)
fileBean.fileName = file.name fileBean.isDir = false
fileBean.filePath = file.path fileBeans.add(fileBean)
fileBean.fileSize = file.length() }
fileBean.fileType = getFileType(file) cursor.close()
fileBean.isDir = false }
fileBeans.add(fileBean)
} return fileBeans
cursor.close() }
}
return fileBeans
}
} }
\ No newline at end of file
package com.test.mydemo3.util package com.xm.test.myfilemaster.util
import com.google.gson.Gson import com.google.gson.Gson
import com.test.mydemo3.model.AdConfigData import com.xm.test.myfilemaster.model.AdConfigData
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import okhttp3.Response
object HttpRequest {
object HttpRequest {
fun getMaxAdConfig(){
fun getMaxAdConfig(){ Thread(Runnable {
Thread(Runnable { val okHttpClient = OkHttpClient()
val okHttpClient = OkHttpClient() val request = Request.Builder()
val request = Request.Builder() .url(UrlManager.URL_)
.url(UrlManager.URL_) .build()
.build()
val response = okHttpClient.newCall(request).execute()
val response = okHttpClient.newCall(request).execute() if (response.isSuccessful){
if (response.isSuccessful){ Gson().fromJson(response.body().toString(), AdConfigData::class.java)
Gson().fromJson(response.body().toString(), AdConfigData::class.java) }
}
}).start()
}).start() }
}
} }
\ No newline at end of file
package com.test.mydemo3.util package com.xm.test.myfilemaster.util
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.ContentResolver import android.content.ContentResolver
import android.content.Context import android.content.Context
import android.graphics.Bitmap import android.graphics.Bitmap
import android.graphics.BitmapFactory import android.graphics.BitmapFactory
import android.provider.MediaStore import android.provider.MediaStore
import android.util.TypedValue import android.util.TypedValue
import com.test.mydemo3.model.FileBean import com.xm.test.myfilemaster.model.FileBean
import java.io.File import java.io.File
object MediaUtil { object MediaUtil {
fun cropImage(imagePath: String, desiredWidth: Int, desiredHeight: Int, context: Context): Bitmap { fun cropImage(imagePath: String, desiredWidth: Int, desiredHeight: Int, context: Context): Bitmap {
val desiredHeight_ = TypedValue.applyDimension( val desiredHeight_ = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, TypedValue.COMPLEX_UNIT_DIP,
desiredHeight.toFloat(), desiredHeight.toFloat(),
context.resources.displayMetrics context.resources.displayMetrics
).toInt() ).toInt()
val desiredWidth_ = TypedValue.applyDimension( val desiredWidth_ = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, TypedValue.COMPLEX_UNIT_DIP,
desiredWidth.toFloat(), desiredWidth.toFloat(),
context.resources.displayMetrics context.resources.displayMetrics
).toInt() ).toInt()
// 从图片路径中加载 Bitmap // 从图片路径中加载 Bitmap
val options = BitmapFactory.Options() val options = BitmapFactory.Options()
options.inJustDecodeBounds = true options.inJustDecodeBounds = true
BitmapFactory.decodeFile(imagePath, options) BitmapFactory.decodeFile(imagePath, options)
// 计算采样率以便加载图片时节省内存 // 计算采样率以便加载图片时节省内存
options.inSampleSize = calculateInSampleSize(options, desiredWidth_, desiredHeight_) options.inSampleSize = calculateInSampleSize(options, desiredWidth_, desiredHeight_)
// 加载 Bitmap // 加载 Bitmap
options.inJustDecodeBounds = false options.inJustDecodeBounds = false
val bitmap = BitmapFactory.decodeFile(imagePath, options) val bitmap = BitmapFactory.decodeFile(imagePath, options)
// 裁剪 Bitmap // 裁剪 Bitmap
return Bitmap.createScaledBitmap(bitmap, desiredWidth_, desiredHeight_, false) return Bitmap.createScaledBitmap(bitmap, desiredWidth_, desiredHeight_, false)
} }
fun calculateInSampleSize(options: BitmapFactory.Options, desiredWidth: Int, desiredHeight: Int): Int { fun calculateInSampleSize(options: BitmapFactory.Options, desiredWidth: Int, desiredHeight: Int): Int {
val height = options.outHeight val height = options.outHeight
val width = options.outWidth val width = options.outWidth
var inSampleSize = 1 var inSampleSize = 1
if (height > desiredHeight || width > desiredWidth) { if (height > desiredHeight || width > desiredWidth) {
val halfHeight = height / 2 val halfHeight = height / 2
val halfWidth = width / 2 val halfWidth = width / 2
while ((halfHeight / inSampleSize) >= desiredHeight && (halfWidth / inSampleSize) >= desiredWidth) { while ((halfHeight / inSampleSize) >= desiredHeight && (halfWidth / inSampleSize) >= desiredWidth) {
inSampleSize *= 2 inSampleSize *= 2
} }
} }
return inSampleSize return inSampleSize
} }
@SuppressLint("Range") @SuppressLint("Range")
fun getRecentImages(context: Context, limit: Int): ArrayList<FileBean> { fun getRecentImages(context: Context, limit: Int): ArrayList<FileBean> {
// val images = mutableListOf<String>() // val images = mutableListOf<String>()
val images = ArrayList<FileBean>() val images = ArrayList<FileBean>()
val contentResolver: ContentResolver = context.contentResolver val contentResolver: ContentResolver = context.contentResolver
val projection = arrayOf(MediaStore.Images.Media.DATA) val projection = arrayOf(MediaStore.Images.Media.DATA)
val sortOrder = "${MediaStore.Images.Media.DATE_MODIFIED} DESC" val sortOrder = "${MediaStore.Images.Media.DATE_MODIFIED} DESC"
val cursor = contentResolver.query( val cursor = contentResolver.query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection, projection,
null, null,
null, null,
sortOrder sortOrder
) )
cursor?.use { cursor?.use {
var count = 0 var count = 0
while (it.moveToNext() && count < limit) { while (it.moveToNext() && count < limit) {
val fileBean = FileBean() val fileBean = FileBean()
val imagePath = it.getString(it.getColumnIndex(MediaStore.Images.Media.DATA)) val imagePath = it.getString(it.getColumnIndex(MediaStore.Images.Media.DATA))
// images.add(imagePath) // images.add(imagePath)
val file = File(imagePath) val file = File(imagePath)
fileBean.fileName = file.name fileBean.fileName = file.name
fileBean.filePath = file.absolutePath fileBean.filePath = file.absolutePath
fileBean.fileType = FileUtil.getFileType(file) fileBean.fileType = FileUtil.getFileType(file)
fileBean.fileBitmap = BitmapFactory.decodeFile(imagePath) fileBean.fileBitmap = BitmapFactory.decodeFile(imagePath)
images.add(fileBean) images.add(fileBean)
count++ count++
} }
} }
cursor?.close() cursor?.close()
return images return images
} }
// fun findSimilarImages(baseImagePath: String, imageDirectoryPath: String, threshold: Double): List<String> { // fun findSimilarImages(baseImagePath: String, imageDirectoryPath: String, threshold: Double): List<String> {
// val similarImages = mutableListOf<String>() // val similarImages = mutableListOf<String>()
// //
// val baseImage = File(baseImagePath) // val baseImage = File(baseImagePath)
// val baseImageHash = ImageHash.getHash(baseImage) // val baseImageHash = ImageHash.getHash(baseImage)
// //
// val imageDirectory = File(imageDirectoryPath) // val imageDirectory = File(imageDirectoryPath)
// val imageFiles = imageDirectory.listFiles { file -> file.isFile } // val imageFiles = imageDirectory.listFiles { file -> file.isFile }
// //
// imageFiles?.let { // imageFiles?.let {
// for (imageFile in it) { // for (imageFile in it) {
// val imageHash = ImageHash.getHash(imageFile) // val imageHash = ImageHash.getHash(imageFile)
// val similarity = ImageHash.getSimilarity(baseImageHash, imageHash) // val similarity = ImageHash.getSimilarity(baseImageHash, imageHash)
// if (similarity >= threshold) { // if (similarity >= threshold) {
// similarImages.add(imageFile.absolutePath) // similarImages.add(imageFile.absolutePath)
// } // }
// } // }
// } // }
// //
// return similarImages // return similarImages
// } // }
} }
\ No newline at end of file
package com.test.mydemo3.util package com.xm.test.myfilemaster.util
import android.Manifest import android.Manifest
import android.app.Activity import android.content.Context
import android.content.Context import android.content.Intent
import android.content.Intent import android.content.pm.PackageManager
import android.content.pm.PackageManager import android.net.Uri
import android.net.Uri import android.os.Build
import android.os.Build import android.os.Environment
import android.os.Environment import android.provider.Settings
import android.provider.Settings import androidx.activity.ComponentActivity
import androidx.activity.ComponentActivity import androidx.core.app.ActivityCompat
import androidx.activity.result.contract.ActivityResultContract import androidx.fragment.app.FragmentActivity
import androidx.activity.result.contract.ActivityResultContracts import com.permissionx.guolindev.PermissionX
import androidx.core.app.ActivityCompat import com.permissionx.guolindev.callback.RequestCallback
import androidx.core.content.ContextCompat import com.xm.test.myfilemaster.activity.HomeActivity
import androidx.fragment.app.FragmentActivity
import com.permissionx.guolindev.PermissionX object PermissionUtil {
import com.permissionx.guolindev.callback.RequestCallback
import com.test.mydemo3.activity.HomeActivity var LOCATION_PERMISSION = false
import com.test.mydemo3.base.BaseActivity fun requestPermission(context: Context?){
import java.security.Permissions if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){
object PermissionUtil { }else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.R) {
val intent = Intent().apply {
var LOCATION_PERMISSION = false action = Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
fun requestPermission(context: Context?){ data = Uri.fromParts("package", context?.packageName, null)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){ flags = Intent.FLAG_ACTIVITY_NEW_TASK
}
}else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.R) { context?.startActivity(intent)
val intent = Intent().apply {
action = Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION }else{
data = Uri.fromParts("package", context?.packageName, null) val intent = Intent().apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
} data = Uri.fromParts("package", context?.packageName, null)
context?.startActivity(intent) }
context?.startActivity(intent)
}else{ }
val intent = Intent().apply { }
action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
data = Uri.fromParts("package", context?.packageName, null) fun checkGrantedPermission(activity: ComponentActivity?) : Boolean{
} if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){
context?.startActivity(intent) //TODO android 14以上
} HomeActivity.isPermission = Environment.isExternalStorageManager()
} return HomeActivity.isPermission
}else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.R) {
fun checkGrantedPermission(activity: ComponentActivity?) : Boolean{ HomeActivity.isPermission = Environment.isExternalStorageManager()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){ return HomeActivity.isPermission
//TODO android 14以上 }else{
HomeActivity.isPermission = Environment.isExternalStorageManager() HomeActivity.isPermission = ActivityCompat.checkSelfPermission(activity!!, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
return HomeActivity.isPermission return HomeActivity.isPermission
}else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.R) { }
HomeActivity.isPermission = Environment.isExternalStorageManager() }
return HomeActivity.isPermission
}else{ fun requestLocationPermission(context: FragmentActivity?){
HomeActivity.isPermission = ActivityCompat.checkSelfPermission(activity!!, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED PermissionX.init(context!!).permissions(
return HomeActivity.isPermission Manifest.permission.ACCESS_FINE_LOCATION,
} Manifest.permission.ACCESS_COARSE_LOCATION,
} ).request(RequestCallback{ allGranted, grantedList, deniedList ->
if (allGranted){
fun requestLocationPermission(context: FragmentActivity?){ LOCATION_PERMISSION = true
PermissionX.init(context!!).permissions( }else{
Manifest.permission.ACCESS_FINE_LOCATION, LOCATION_PERMISSION = false
Manifest.permission.ACCESS_COARSE_LOCATION, }
).request(RequestCallback{ allGranted, grantedList, deniedList -> })
if (allGranted){ }
LOCATION_PERMISSION = true
}else{
LOCATION_PERMISSION = false
}
})
}
} }
\ No newline at end of file
package com.test.mydemo3.util package com.xm.test.myfilemaster.util
import android.bluetooth.BluetoothAdapter import android.bluetooth.BluetoothAdapter
import android.content.ContentResolver import android.content.ContentResolver
import android.content.Context import android.content.Context
import android.location.LocationManager import android.location.LocationManager
import android.net.wifi.WifiManager import android.net.wifi.WifiManager
import android.provider.Settings import android.provider.Settings
object SystemServerState { object SystemServerState {
fun isGPSEnabled(context: Context): Boolean { fun isGPSEnabled(context: Context): Boolean {
val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) ?: false return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) ?: false
} }
fun isBluetoothEnabled(): Boolean { fun isBluetoothEnabled(): Boolean {
val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter() val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
return bluetoothAdapter?.isEnabled ?: false return bluetoothAdapter?.isEnabled ?: false
} }
fun isHotspotEnabled(context: Context): Boolean { fun isHotspotEnabled(context: Context): Boolean {
val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager
return wifiManager.isWifiEnabled ?: false return wifiManager.isWifiEnabled ?: false
} }
fun isAutoBrightnessEnabled(contentResolver: ContentResolver?): Boolean { fun isAutoBrightnessEnabled(contentResolver: ContentResolver?): Boolean {
try { try {
val mode: Int = val mode: Int =
Settings.System.getInt(contentResolver, Settings.System.SCREEN_BRIGHTNESS_MODE) Settings.System.getInt(contentResolver, Settings.System.SCREEN_BRIGHTNESS_MODE)
return mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC return mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC
} catch (e: Settings.SettingNotFoundException) { } catch (e: Settings.SettingNotFoundException) {
e.printStackTrace() e.printStackTrace()
} }
return false return false
} }
} }
\ No newline at end of file
package com.test.mydemo3.util package com.xm.test.myfilemaster.util
object UrlManager { object UrlManager {
const val AD_APP_KEY = "GGPreND6SRmCt1zJgn5faiLGD8c2PVGPLgPpSg7cHanVTud1DhtuI9MmteTqlEviaJ57WnxW68kQDaATJ5z3cW" const val AD_APP_KEY = "GGPreND6SRmCt1zJgn5faiLGD8c2PVGPLgPpSg7cHanVTud1DhtuI9MmteTqlEviaJ57WnxW68kQDaATJ5z3cW"
const val AD_UNIT_ID = "" const val AD_UNIT_ID = ""
const val TEST_PLACEMENT_HERE = "" const val TEST_PLACEMENT_HERE = ""
const val URL_ = "https://api.magicfolder.xyz/cccfig?pkg=testonline" const val URL_ = "https://api.magicfolder.xyz/cccfig?pkg=testonline"
} }
\ No newline at end of file
package com.test.mydemo3.view; package com.xm.test.myfilemaster.view;
import android.content.Context; import android.content.Context;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.Color; import android.graphics.Paint;
import android.graphics.Paint; import android.graphics.RectF;
import android.graphics.RectF; import android.util.AttributeSet;
import android.util.AttributeSet; import android.view.View;
import android.view.View;
import com.xm.test.myfilemaster.R;
import com.test.mydemo3.R;
/** /**
* Created by Jay on 2015/8/5 0005. * Created by Jay on 2015/8/5 0005.
*/ */
public class CirclePgBar extends View { public class CirclePgBar extends View {
private Paint mBackPaint; private Paint mBackPaint;
private Paint mFrontPaint; private Paint mFrontPaint;
private Paint mTextPaint; private Paint mTextPaint;
private float mStrokeWidth = 50; private float mStrokeWidth = 50;
private float mHalfStrokeWidth = mStrokeWidth / 2; private float mHalfStrokeWidth = mStrokeWidth / 2;
private float mRadius = 200; private float mRadius = 200;
private RectF mRect; private RectF mRect;
private int mProgress = 0; private int mProgress = 0;
//目标值,想改多少就改多少 //目标值,想改多少就改多少
private int mTargetProgress = 90; private int mTargetProgress = 90;
private int mMax = 100; private int mMax = 100;
private int mWidth; private int mWidth;
private int mHeight; private int mHeight;
private Context mContext; private Context mContext;
public CirclePgBar(Context context) { public CirclePgBar(Context context) {
super(context); super(context);
this.mContext = context; this.mContext = context;
init(); init();
} }
public CirclePgBar(Context context, AttributeSet attrs) { public CirclePgBar(Context context, AttributeSet attrs) {
super(context, attrs); super(context, attrs);
this.mContext = context; this.mContext = context;
init(); init();
} }
public CirclePgBar(Context context, AttributeSet attrs, int defStyleAttr) { public CirclePgBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr); super(context, attrs, defStyleAttr);
this.mContext = context; this.mContext = context;
init(); init();
} }
//完成相关参数初始化 //完成相关参数初始化
private void init() { private void init() {
mBackPaint = new Paint(); mBackPaint = new Paint();
mBackPaint.setColor(mContext.getColor(R.color.progress_background)); mBackPaint.setColor(mContext.getColor(R.color.progress_background));
mBackPaint.setAntiAlias(true); mBackPaint.setAntiAlias(true);
mBackPaint.setStyle(Paint.Style.STROKE); mBackPaint.setStyle(Paint.Style.STROKE);
mBackPaint.setStrokeWidth(mStrokeWidth); mBackPaint.setStrokeWidth(mStrokeWidth);
mBackPaint.setStrokeWidth(20); mBackPaint.setStrokeWidth(20);
mFrontPaint = new Paint(); mFrontPaint = new Paint();
mFrontPaint.setColor(mContext.getColor(R.color.white)); mFrontPaint.setColor(mContext.getColor(R.color.white));
mFrontPaint.setAntiAlias(true); mFrontPaint.setAntiAlias(true);
mFrontPaint.setStyle(Paint.Style.STROKE); mFrontPaint.setStyle(Paint.Style.STROKE);
mFrontPaint.setStrokeWidth(mStrokeWidth); mFrontPaint.setStrokeWidth(mStrokeWidth);
mFrontPaint.setStrokeWidth(20); mFrontPaint.setStrokeWidth(20);
mTextPaint = new Paint(); mTextPaint = new Paint();
mTextPaint.setColor(mContext.getColor(R.color.white)); mTextPaint.setColor(mContext.getColor(R.color.white));
mTextPaint.setAntiAlias(true); mTextPaint.setAntiAlias(true);
mTextPaint.setTextSize(120); mTextPaint.setTextSize(120);
mTextPaint.setTextAlign(Paint.Align.CENTER); mTextPaint.setTextAlign(Paint.Align.CENTER);
} }
//重写测量大小的onMeasure方法和绘制View的核心方法onDraw() //重写测量大小的onMeasure方法和绘制View的核心方法onDraw()
@Override @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec); super.onMeasure(widthMeasureSpec, heightMeasureSpec);
mWidth = getRealSize(widthMeasureSpec); mWidth = getRealSize(widthMeasureSpec);
mHeight = getRealSize(heightMeasureSpec); mHeight = getRealSize(heightMeasureSpec);
setMeasuredDimension(mWidth, mHeight); setMeasuredDimension(mWidth, mHeight);
} }
@Override @Override
protected void onDraw(Canvas canvas) { protected void onDraw(Canvas canvas) {
initRect(); initRect();
float angle = mProgress / (float) mMax * 360; float angle = mProgress / (float) mMax * 360;
canvas.drawCircle(mWidth / 2, mHeight / 2, mRadius, mBackPaint); canvas.drawCircle(mWidth / 2, mHeight / 2, mRadius, mBackPaint);
canvas.drawArc(mRect, -90, angle, false, mFrontPaint); canvas.drawArc(mRect, -90, angle, false, mFrontPaint);
// canvas.drawText(mProgress + "%", mWidth / 2 + mHalfStrokeWidth -20, mHeight / 2 + mHalfStrokeWidth + 20, mTextPaint); // canvas.drawText(mProgress + "%", mWidth / 2 + mHalfStrokeWidth -20, mHeight / 2 + mHalfStrokeWidth + 20, mTextPaint);
if (mProgress < mTargetProgress) { if (mProgress < mTargetProgress) {
mProgress += 1; mProgress += 1;
invalidate(); invalidate();
} }
} }
public void setTargetProgress(int value){ public void setTargetProgress(int value){
this.mTargetProgress = value; this.mTargetProgress = value;
} }
public int getRealSize(int measureSpec) { public int getRealSize(int measureSpec) {
int result = 1; int result = 1;
int mode = MeasureSpec.getMode(measureSpec); int mode = MeasureSpec.getMode(measureSpec);
int size = MeasureSpec.getSize(measureSpec); int size = MeasureSpec.getSize(measureSpec);
if (mode == View.MeasureSpec.AT_MOST || mode == MeasureSpec.UNSPECIFIED) { if (mode == View.MeasureSpec.AT_MOST || mode == MeasureSpec.UNSPECIFIED) {
//自己计算 //自己计算
result = (int) (mRadius * 2 + mStrokeWidth); result = (int) (mRadius * 2 + mStrokeWidth);
} else { } else {
result = size; result = size;
} }
return result; return result;
} }
private void initRect() { private void initRect() {
if (mRect == null) { if (mRect == null) {
mRect = new RectF(); mRect = new RectF();
int viewSize = (int) (mRadius * 2); int viewSize = (int) (mRadius * 2);
int left = (mWidth - viewSize) / 2; int left = (mWidth - viewSize) / 2;
int top = (mHeight - viewSize) / 2; int top = (mHeight - viewSize) / 2;
int right = left + viewSize; int right = left + viewSize;
int bottom = top + viewSize; int bottom = top + viewSize;
mRect.set(left, top, right, bottom); mRect.set(left, top, right, bottom);
} }
} }
} }
package com.test.mydemo3.view package com.xm.test.myfilemaster.view
import android.app.Dialog import android.app.Dialog
import android.content.Context import android.content.Context
import android.content.res.ColorStateList import android.graphics.Color
import android.content.res.Resources import android.graphics.Point
import android.graphics.Color import android.graphics.drawable.ColorDrawable
import android.graphics.Point import android.os.Bundle
import android.graphics.drawable.ColorDrawable import android.view.View
import android.graphics.drawable.Drawable import android.widget.EditText
import android.os.Bundle import android.widget.TextView
import android.view.View import com.xm.test.myfilemaster.R
import android.widget.Button
import android.widget.EditText class CustomDialog(context: Context?) : Dialog(context!!), View.OnClickListener{
import android.widget.TextView private lateinit var mEdit: EditText
import com.test.mydemo3.R private lateinit var mCancel: TextView
private lateinit var mSure: TextView
class CustomDialog(context: Context?) : Dialog(context!!), View.OnClickListener{ private var mTitle: TextView? = null
private lateinit var mEdit: EditText private var mHint: TextView? = null
private lateinit var mCancel: TextView private var mCancelListener: View.OnClickListener? = null
private lateinit var mSure: TextView private var mSureListener: View.OnClickListener? = null
private var mTitle: TextView? = null
private var mHint: TextView? = null override fun onCreate(savedInstanceState: Bundle?) {
private var mCancelListener: View.OnClickListener? = null super.onCreate(savedInstanceState)
private var mSureListener: View.OnClickListener? = null setContentView(R.layout.dialog_custom_layout)
setCancelable(false)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
setContentView(R.layout.dialog_custom_layout) val windowManager = window?.windowManager
setCancelable(false) val display = windowManager?.defaultDisplay
val params = window?.attributes
window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) val size = Point()
val windowManager = window?.windowManager display?.getSize(size)
val display = windowManager?.defaultDisplay params?.width = ((size.x) * 0.959).toInt()
val params = window?.attributes window?.attributes = params
val size = Point()
display?.getSize(size) mEdit = findViewById(R.id.dialog_edit)
params?.width = ((size.x) * 0.959).toInt() mCancel = findViewById(R.id.dialog_cancel_btn)
window?.attributes = params mSure = findViewById(R.id.dialog_sure_btn)
mEdit = findViewById(R.id.dialog_edit) mTitle = findViewById(R.id.dialog_title_text)
mCancel = findViewById(R.id.dialog_cancel_btn) mHint = findViewById(R.id.dialog_hint_text)
mSure = findViewById(R.id.dialog_sure_btn)
mCancel.setOnClickListener(this)
mTitle = findViewById(R.id.dialog_title_text) mSure.setOnClickListener(this)
mHint = findViewById(R.id.dialog_hint_text)
mCancel.setOnClickListener(this) }
mSure.setOnClickListener(this)
fun setsConfirm(sure: View.OnClickListener): CustomDialog{
this.mSureListener = sure
} return this
}
fun setsConfirm(sure: View.OnClickListener): CustomDialog{ fun setsCancel(cancel: View.OnClickListener): CustomDialog{
this.mSureListener = sure this.mCancelListener = cancel
return this return this
} }
fun setsCancel(cancel: View.OnClickListener): CustomDialog{ fun setsTitle(str: String): CustomDialog{
this.mCancelListener = cancel findViewById<TextView>(R.id.dialog_title_text).text = str
return this return this
} }
fun setsTitle(str: String): CustomDialog{ fun setsHint(str: String): CustomDialog{
findViewById<TextView>(R.id.dialog_title_text).text = str findViewById<TextView>(R.id.dialog_hint_text).text = str
return this return this
} }
fun setsHint(str: String): CustomDialog{ fun setsRightDelete(str: String): CustomDialog{
findViewById<TextView>(R.id.dialog_hint_text).text = str mSure.text = str
return this mSure.setTextColor(Color.RED)
} mSure.setBackgroundResource(R.drawable.bg_btn_cancel_shape)
fun setsRightDelete(str: String): CustomDialog{ return this
mSure.text = str }
mSure.setTextColor(Color.RED) fun isShowEditText(isShow : Boolean): CustomDialog{
mSure.setBackgroundResource(R.drawable.bg_btn_cancel_shape) mEdit.visibility = if (isShow) View.VISIBLE else View.GONE
return this return this
} }
fun isShowEditText(isShow : Boolean): CustomDialog{ fun isShowHintText(isShow : Boolean): CustomDialog{
mEdit.visibility = if (isShow) View.VISIBLE else View.GONE findViewById<TextView>(R.id.dialog_hint_text).visibility = if (isShow) View.VISIBLE else View.GONE
return this return this
} }
fun isShowHintText(isShow : Boolean): CustomDialog{
findViewById<TextView>(R.id.dialog_hint_text).visibility = if (isShow) View.VISIBLE else View.GONE fun getEditTextStr(): String{
return this return mEdit.text.toString()
} }
fun getEditTextStr(): String{ override fun onClick(v: View?) {
return mEdit.text.toString() when (v?.id){
} R.id.dialog_cancel_btn ->{
if (mCancelListener != null){
override fun onClick(v: View?) { mCancelListener?.onClick(v)
when (v?.id){ }
R.id.dialog_cancel_btn ->{ }
if (mCancelListener != null){ R.id.dialog_sure_btn ->{
mCancelListener?.onClick(v) if (mSureListener != null){
} mSureListener?.onClick(v)
} }
R.id.dialog_sure_btn ->{ }
if (mSureListener != null){ }
mSureListener?.onClick(v) }
}
}
}
}
} }
\ No newline at end of file
...@@ -149,7 +149,7 @@ ...@@ -149,7 +149,7 @@
<!-- android:visibility="gone"--> <!-- android:visibility="gone"-->
<!-- app:lottie_loop="true"/>--> <!-- app:lottie_loop="true"/>-->
<com.test.mydemo3.view.CirclePgBar <com.xm.test.myfilemaster.view.CirclePgBar
android:id="@+id/progress_circular" android:id="@+id/progress_circular"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"/> android:layout_height="match_parent"/>
......
package com.test.mydemo3 package com.xm.mydemo3
import org.junit.Test import org.junit.Test
......
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