Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
F
FileManager
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
yanglin
FileManager
Commits
c81d9d2a
Commit
c81d9d2a
authored
Apr 16, 2024
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
替换包名
parent
28cd9e39
Hide whitespace changes
Inline
Side-by-side
Showing
51 changed files
with
2954 additions
and
3051 deletions
+2954
-3051
build.gradle
MyDemo3/app/build.gradle
+2
-2
ExampleInstrumentedTest.kt
...ndroidTest/java/com/xm/mydemo3/ExampleInstrumentedTest.kt
+1
-1
AndroidManifest.xml
MyDemo3/app/src/main/AndroidManifest.xml
+7
-3
HomeViewPagerAdapter.kt
...ain/java/com/test/mydemo3/adapter/HomeViewPagerAdapter.kt
+0
-11
MainActivity.kt
...pp/src/main/java/com/xm/test/myfilemaster/MainActivity.kt
+9
-8
MyApplication.kt
...p/src/main/java/com/xm/test/myfilemaster/MyApplication.kt
+100
-101
BaseActivityViewModel.kt
...om/xm/test/myfilemaster/activity/BaseActivityViewModel.kt
+26
-26
BatteryActivity.kt
...java/com/xm/test/myfilemaster/activity/BatteryActivity.kt
+5
-6
CleanActivity.kt
...n/java/com/xm/test/myfilemaster/activity/CleanActivity.kt
+9
-10
FileManagerActivity.kt
.../com/xm/test/myfilemaster/activity/FileManagerActivity.kt
+5
-5
HomeActivity.kt
...in/java/com/xm/test/myfilemaster/activity/HomeActivity.kt
+6
-21
InternalStorageActivity.kt
.../xm/test/myfilemaster/activity/InternalStorageActivity.kt
+6
-16
MediaActivity.kt
...n/java/com/xm/test/myfilemaster/activity/MediaActivity.kt
+5
-6
MoveOrCopyActivity.kt
...a/com/xm/test/myfilemaster/activity/MoveOrCopyActivity.kt
+6
-13
ScanEmptyFilesActivity.kt
...m/xm/test/myfilemaster/activity/ScanEmptyFilesActivity.kt
+5
-10
ScanLargeFilesActivity.kt
...m/xm/test/myfilemaster/activity/ScanLargeFilesActivity.kt
+5
-18
ScanResultActivity.kt
...a/com/xm/test/myfilemaster/activity/ScanResultActivity.kt
+4
-8
SimilarImagesActivity.kt
...om/xm/test/myfilemaster/activity/SimilarImagesActivity.kt
+9
-9
CleanAdapter.kt
...ain/java/com/xm/test/myfilemaster/adapter/CleanAdapter.kt
+280
-280
CleanAdapter2.kt
...in/java/com/xm/test/myfilemaster/adapter/CleanAdapter2.kt
+6
-6
FileSimilarAdapter.kt
...va/com/xm/test/myfilemaster/adapter/FileSimilarAdapter.kt
+56
-56
FilesItemViewAdapter.kt
.../com/xm/test/myfilemaster/adapter/FilesItemViewAdapter.kt
+130
-131
ImageItemAdapter.kt
...java/com/xm/test/myfilemaster/adapter/ImageItemAdapter.kt
+201
-201
MediaAdapter.kt
...ain/java/com/xm/test/myfilemaster/adapter/MediaAdapter.kt
+94
-100
ScanResultAdapter.kt
...ava/com/xm/test/myfilemaster/adapter/ScanResultAdapter.kt
+62
-62
SimilarBeanAdapter.kt
...va/com/xm/test/myfilemaster/adapter/SimilarBeanAdapter.kt
+120
-120
SimilarGridAdapter.kt
...va/com/xm/test/myfilemaster/adapter/SimilarGridAdapter.kt
+81
-82
AntivirusActivity.kt
...a/com/xm/test/myfilemaster/antivirus/AntivirusActivity.kt
+4
-4
BaseAbsView.kt
...rc/main/java/com/xm/test/myfilemaster/base/BaseAbsView.kt
+14
-14
BaseActivity.kt
...c/main/java/com/xm/test/myfilemaster/base/BaseActivity.kt
+558
-560
BaseActivityListener.kt
...ava/com/xm/test/myfilemaster/base/BaseActivityListener.kt
+10
-10
FileManagerFragment.kt
.../com/xm/test/myfilemaster/fragment/FileManagerFragment.kt
+9
-13
FileManagerViewModel.kt
...com/xm/test/myfilemaster/fragment/FileManagerViewModel.kt
+1
-1
HomeFragment.kt
...in/java/com/xm/test/myfilemaster/fragment/HomeFragment.kt
+12
-13
HomeViewModel.kt
...n/java/com/xm/test/myfilemaster/fragment/HomeViewModel.kt
+1
-1
InternalStorageFragment.kt
.../xm/test/myfilemaster/fragment/InternalStorageFragment.kt
+13
-14
AdConfigData.kt
.../main/java/com/xm/test/myfilemaster/model/AdConfigData.kt
+67
-67
CleanBean.kt
...src/main/java/com/xm/test/myfilemaster/model/CleanBean.kt
+8
-8
FileBean.kt
.../src/main/java/com/xm/test/myfilemaster/model/FileBean.kt
+20
-20
FilesItemBean.kt
...main/java/com/xm/test/myfilemaster/model/FilesItemBean.kt
+12
-12
BatteryUtil.kt
...rc/main/java/com/xm/test/myfilemaster/util/BatteryUtil.kt
+52
-54
FileUtil.kt
...p/src/main/java/com/xm/test/myfilemaster/util/FileUtil.kt
+445
-449
HttpRequest.kt
...rc/main/java/com/xm/test/myfilemaster/util/HttpRequest.kt
+24
-25
MediaUtil.kt
.../src/main/java/com/xm/test/myfilemaster/util/MediaUtil.kt
+113
-113
PermissionUtil.kt
...main/java/com/xm/test/myfilemaster/util/PermissionUtil.kt
+68
-74
SystemServerState.kt
...n/java/com/xm/test/myfilemaster/util/SystemServerState.kt
+37
-37
UrlManager.kt
...src/main/java/com/xm/test/myfilemaster/util/UrlManager.kt
+9
-9
CirclePgBar.java
.../main/java/com/xm/test/myfilemaster/view/CirclePgBar.java
+137
-137
CustomDialog.kt
...c/main/java/com/xm/test/myfilemaster/view/CustomDialog.kt
+98
-102
fragment_home.xml
MyDemo3/app/src/main/res/layout/fragment_home.xml
+1
-1
ExampleUnitTest.kt
MyDemo3/app/src/test/java/com/xm/mydemo3/ExampleUnitTest.kt
+1
-1
No files found.
MyDemo3/app/build.gradle
View file @
c81d9d2a
...
@@ -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
...
...
MyDemo3/app/src/androidTest/java/com/
test
/mydemo3/ExampleInstrumentedTest.kt
→
MyDemo3/app/src/androidTest/java/com/
xm
/mydemo3/ExampleInstrumentedTest.kt
View file @
c81d9d2a
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
...
...
MyDemo3/app/src/main/AndroidManifest.xml
View file @
c81d9d2a
...
@@ -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
MyDemo3/app/src/main/java/com/test/mydemo3/adapter/HomeViewPagerAdapter.kt
deleted
100644 → 0
View file @
28cd9e39
package
com.test.mydemo3.adapter
import
androidx.fragment.app.Fragment
import
androidx.viewpager2.adapter.FragmentStateAdapter
class
HomeViewPagerAdapter
()
{
}
\ No newline at end of file
MyDemo3/app/src/main/java/com/
test/mydemo3
/MainActivity.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/MainActivity.kt
View file @
c81d9d2a
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
()
}
}
...
...
MyDemo3/app/src/main/java/com/
test/mydemo3
/MyApplication.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/MyApplication.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/java/com/
test/mydemo3
/activity/BaseActivityViewModel.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/activity/BaseActivityViewModel.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/java/com/
test/mydemo3
/activity/BatteryActivity.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/activity/BatteryActivity.kt
View file @
c81d9d2a
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
...
...
MyDemo3/app/src/main/java/com/
test/mydemo3
/activity/CleanActivity.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/activity/CleanActivity.kt
View file @
c81d9d2a
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
()
{
...
...
MyDemo3/app/src/main/java/com/
test/mydemo3
/activity/FileManagerActivity.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/activity/FileManagerActivity.kt
View file @
c81d9d2a
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
>()
...
...
MyDemo3/app/src/main/java/com/
test/mydemo3
/activity/HomeActivity.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/activity/HomeActivity.kt
View file @
c81d9d2a
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
...
...
MyDemo3/app/src/main/java/com/
test/mydemo3
/activity/InternalStorageActivity.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/activity/InternalStorageActivity.kt
View file @
c81d9d2a
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
...
...
MyDemo3/app/src/main/java/com/
test/mydemo3
/activity/MediaActivity.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/activity/MediaActivity.kt
View file @
c81d9d2a
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
...
...
MyDemo3/app/src/main/java/com/
test/mydemo3
/activity/MoveOrCopyActivity.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/activity/MoveOrCopyActivity.kt
View file @
c81d9d2a
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
()
{
...
...
MyDemo3/app/src/main/java/com/
test/mydemo3
/activity/ScanEmptyFilesActivity.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/activity/ScanEmptyFilesActivity.kt
View file @
c81d9d2a
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
()
{
...
...
MyDemo3/app/src/main/java/com/
test/mydemo3
/activity/ScanLargeFilesActivity.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/activity/ScanLargeFilesActivity.kt
View file @
c81d9d2a
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
()
{
...
...
MyDemo3/app/src/main/java/com/
test/mydemo3
/activity/ScanResultActivity.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/activity/ScanResultActivity.kt
View file @
c81d9d2a
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
()
{
...
...
MyDemo3/app/src/main/java/com/
test/mydemo3
/activity/SimilarImagesActivity.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/activity/SimilarImagesActivity.kt
View file @
c81d9d2a
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
{
...
...
MyDemo3/app/src/main/java/com/
test/mydemo3
/adapter/CleanAdapter.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/adapter/CleanAdapter.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/java/com/
test/mydemo3
/adapter/CleanAdapter2.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/adapter/CleanAdapter2.kt
View file @
c81d9d2a
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
>()
{
...
...
MyDemo3/app/src/main/java/com/
test/mydemo3
/adapter/FileSimilarAdapter.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/adapter/FileSimilarAdapter.kt
View file @
c81d9d2a
//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
MyDemo3/app/src/main/java/com/
test/mydemo3
/adapter/FilesItemViewAdapter.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/adapter/FilesItemViewAdapter.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/java/com/
test/mydemo3
/adapter/ImageItemAdapter.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/adapter/ImageItemAdapter.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/java/com/
test/mydemo3
/adapter/MediaAdapter.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/adapter/MediaAdapter.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/java/com/
test/mydemo3
/adapter/ScanResultAdapter.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/adapter/ScanResultAdapter.kt
View file @
c81d9d2a
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.t
est.mydemo3.R
import
com.t
rustlook.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
MyDemo3/app/src/main/java/com/
test/mydemo3
/adapter/SimilarBeanAdapter.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/adapter/SimilarBeanAdapter.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/java/com/
test/mydemo3
/adapter/SimilarGridAdapter.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/adapter/SimilarGridAdapter.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/java/com/
test/mydemo3
/antivirus/AntivirusActivity.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/antivirus/AntivirusActivity.kt
View file @
c81d9d2a
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
()
{
...
...
MyDemo3/app/src/main/java/com/
test/mydemo3
/base/BaseAbsView.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/base/BaseAbsView.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/java/com/
test/mydemo3
/base/BaseActivity.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/base/BaseActivity.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/java/com/
test/mydemo3
/base/BaseActivityListener.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/base/BaseActivityListener.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/java/com/
test/mydemo3
/fragment/FileManagerFragment.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/fragment/FileManagerFragment.kt
View file @
c81d9d2a
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
...
...
MyDemo3/app/src/main/java/com/
test/mydemo3
/fragment/FileManagerViewModel.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/fragment/FileManagerViewModel.kt
View file @
c81d9d2a
package
com.
test.mydemo3
.fragment
package
com.
xm.test.myfilemaster
.fragment
import
androidx.lifecycle.ViewModel
import
androidx.lifecycle.ViewModel
...
...
MyDemo3/app/src/main/java/com/
test/mydemo3
/fragment/HomeFragment.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/fragment/HomeFragment.kt
View file @
c81d9d2a
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
)
...
...
MyDemo3/app/src/main/java/com/
test/mydemo3
/fragment/HomeViewModel.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/fragment/HomeViewModel.kt
View file @
c81d9d2a
package
com.
test.mydemo3
.fragment
package
com.
xm.test.myfilemaster
.fragment
import
androidx.lifecycle.ViewModel
import
androidx.lifecycle.ViewModel
...
...
MyDemo3/app/src/main/java/com/
test/mydemo3
/fragment/InternalStorageFragment.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/fragment/InternalStorageFragment.kt
View file @
c81d9d2a
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
{
...
...
MyDemo3/app/src/main/java/com/
test/mydemo3
/model/AdConfigData.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/model/AdConfigData.kt
View file @
c81d9d2a
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
)
)
MyDemo3/app/src/main/java/com/
test/mydemo3
/model/CleanBean.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/model/CleanBean.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/java/com/
test/mydemo3
/model/FileBean.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/model/FileBean.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/java/com/
test/mydemo3
/model/FilesItemBean.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/model/FilesItemBean.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/java/com/
test/mydemo3
/util/BatteryUtil.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/util/BatteryUtil.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/java/com/
test/mydemo3
/util/FileUtil.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/util/FileUtil.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/java/com/
test/mydemo3
/util/HttpRequest.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/util/HttpRequest.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/java/com/
test/mydemo3
/util/MediaUtil.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/util/MediaUtil.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/java/com/
test/mydemo3
/util/PermissionUtil.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/util/PermissionUtil.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/java/com/
test/mydemo3
/util/SystemServerState.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/util/SystemServerState.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/java/com/
test/mydemo3
/util/UrlManager.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/util/UrlManager.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/java/com/
test/mydemo3
/view/CirclePgBar.java
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/view/CirclePgBar.java
View file @
c81d9d2a
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
);
}
}
}
}
}
}
MyDemo3/app/src/main/java/com/
test/mydemo3
/view/CustomDialog.kt
→
MyDemo3/app/src/main/java/com/
xm/test/myfilemaster
/view/CustomDialog.kt
View file @
c81d9d2a
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
MyDemo3/app/src/main/res/layout/fragment_home.xml
View file @
c81d9d2a
...
@@ -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"
/>
...
...
MyDemo3/app/src/test/java/com/
test
/mydemo3/ExampleUnitTest.kt
→
MyDemo3/app/src/test/java/com/
xm
/mydemo3/ExampleUnitTest.kt
View file @
c81d9d2a
package
com.
test
.mydemo3
package
com.
xm
.mydemo3
import
org.junit.Test
import
org.junit.Test
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment