Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
A
appzxhy
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
wanglei
appzxhy
Commits
2111510d
Commit
2111510d
authored
Jul 11, 2025
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[AI重构]AI重构LargeFileCleanActivity
parent
8a6e6deb
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
185 additions
and
114 deletions
+185
-114
LargeFileCleanActivity.kt
.../simplecleaner/app/ui/largefile/LargeFileCleanActivity.kt
+35
-114
LargeFileCleanAdapter.kt
...m/simplecleaner/app/ui/largefile/LargeFileCleanAdapter.kt
+69
-0
LargeFileCleanViewModel.kt
...simplecleaner/app/ui/largefile/LargeFileCleanViewModel.kt
+81
-0
No files found.
app/src/main/java/com/simplecleaner/app/ui/largefile/LargeFileCleanActivity.kt
View file @
2111510d
...
@@ -38,10 +38,14 @@ import kotlinx.coroutines.Dispatchers
...
@@ -38,10 +38,14 @@ import kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.async
import
kotlinx.coroutines.async
import
kotlinx.coroutines.launch
import
kotlinx.coroutines.launch
import
java.util.Calendar
import
java.util.Calendar
import
androidx.activity.viewModels
import
com.simplecleaner.app.ui.largefile.LargeFileCleanViewModel
import
com.simplecleaner.app.ui.largefile.LargeFileCleanAdapter
class
LargeFileCleanActivity
:
BaseActivity
<
ActivityLargeFileCleanBinding
>(
ActivityLargeFileCleanBinding
::
inflate
)
{
class
LargeFileCleanActivity
:
BaseActivity
<
ActivityLargeFileCleanBinding
>(
ActivityLargeFileCleanBinding
::
inflate
)
{
private
val
viewModel
:
LargeFileCleanViewModel
by
viewModels
()
private
val
LARGE_FILE_SIZE
:
Long
=
1024
*
1024
*
10
private
val
LARGE_FILE_SIZE
:
Long
=
1024
*
1024
*
10
private
val
typeList
by
lazy
{
private
val
typeList
by
lazy
{
listOf
(
listOf
(
...
@@ -74,53 +78,11 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
...
@@ -74,53 +78,11 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
)
)
}
}
private
var
typePosition
=
0
private
val
adapter
:
LargeFileCleanAdapter
by
lazy
{
private
var
sizePosition
=
0
LargeFileCleanAdapter
(
emptyList
())
{
position
->
private
var
timePosition
=
0
viewModel
.
toggleSelect
(
position
)
private
var
total
:
Long
=
0
adapter
.
notifyItemChanged
(
position
)
private
var
allData
=
mutableListOf
<
FileBean
>()
updateView
()
private
var
list
=
mutableListOf
<
FileBean
>()
private
val
adapter
by
lazy
{
class
ViewHolder
(
val
binding
:
ItemLargeFileCleanBinding
)
:
RecyclerView
.
ViewHolder
(
binding
.
root
)
object
:
RecyclerView
.
Adapter
<
ViewHolder
>()
{
override
fun
onCreateViewHolder
(
parent
:
ViewGroup
,
viewType
:
Int
):
ViewHolder
{
val
binding
=
ItemLargeFileCleanBinding
.
inflate
(
LayoutInflater
.
from
(
parent
.
context
),
parent
,
false
)
return
ViewHolder
(
binding
)
}
override
fun
getItemCount
():
Int
=
list
.
size
override
fun
onBindViewHolder
(
holder
:
ViewHolder
,
position
:
Int
)
{
val
item
=
list
[
position
]
holder
.
binding
.
ivVideo
.
isVisible
=
MineTypeUtils
.
isVideo
(
item
.
mineType
)
if
(
MineTypeUtils
.
isImage
(
item
.
mineType
)
||
MineTypeUtils
.
isVideo
(
item
.
mineType
))
{
val
round
=
resources
.
getDimensionPixelSize
(
R
.
dimen
.
dp_4
)
val
options
=
RequestOptions
().
transform
(
CenterCrop
(),
RoundedCorners
(
round
))
Glide
.
with
(
holder
.
itemView
.
context
)
.
load
(
item
.
path
)
.
apply
(
options
)
.
into
(
holder
.
binding
.
ivIcon
)
}
else
if
(
MineTypeUtils
.
isAudio
(
item
.
mineType
))
{
holder
.
binding
.
ivIcon
.
setImageResource
(
R
.
drawable
.
icon_yinping_large
)
}
else
if
(
MineTypeUtils
.
isApk
(
item
.
mineType
))
{
holder
.
binding
.
ivIcon
.
setImageResource
(
R
.
drawable
.
icon_app_large
)
}
else
if
(
MineTypeUtils
.
isDoc
(
item
.
mineType
))
{
holder
.
binding
.
ivIcon
.
setImageResource
(
R
.
drawable
.
icon_wenjianx_large
)
}
else
{
holder
.
binding
.
ivIcon
.
setImageResource
(
R
.
drawable
.
icon_yingyong_large
)
}
holder
.
binding
.
tvName
.
text
=
item
.
name
holder
.
binding
.
tvLength
.
text
=
Utils
.
getSizeFormat
(
item
.
length
)
holder
.
binding
.
ivSelect
.
isSelected
=
item
.
isSelected
holder
.
binding
.
viewLine
.
visibility
=
if
(
position
==
itemCount
-
1
)
View
.
GONE
else
View
.
VISIBLE
holder
.
itemView
.
setOnClickListener
{
item
.
isSelected
=
!
item
.
isSelected
notifyItemChanged
(
position
)
updateView
()
}
}
}
}
}
}
...
@@ -153,7 +115,7 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
...
@@ -153,7 +115,7 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
}
}
private
fun
updateView
()
{
private
fun
updateView
()
{
total
=
list
.
filter
{
it
.
isSelected
}.
sumOf
{
it
.
length
}
val
total
=
viewModel
.
getFilteredList
()
.
filter
{
it
.
isSelected
}.
sumOf
{
it
.
length
}
setTextSize
(
binding
.
tvDelete
,
getString
(
R
.
string
.
delete
),
total
)
setTextSize
(
binding
.
tvDelete
,
getString
(
R
.
string
.
delete
),
total
)
binding
.
tvDelete
.
isEnabled
=
total
>
0
binding
.
tvDelete
.
isEnabled
=
total
>
0
if
(
binding
.
tvDelete
.
isEnabled
==
true
)
{
if
(
binding
.
tvDelete
.
isEnabled
==
true
)
{
...
@@ -169,17 +131,17 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
...
@@ -169,17 +131,17 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
when
(
tabType
)
{
when
(
tabType
)
{
1
->
{
1
->
{
textView
=
binding
.
tvType
textView
=
binding
.
tvType
typePosition
=
position
viewModel
.
typePosition
=
position
}
}
2
->
{
2
->
{
textView
=
binding
.
tvSize
textView
=
binding
.
tvSize
sizePosition
=
position
viewModel
.
sizePosition
=
position
}
}
3
->
{
3
->
{
textView
=
binding
.
tvTime
textView
=
binding
.
tvTime
timePosition
=
position
viewModel
.
timePosition
=
position
}
}
}
}
textView
.
text
=
item
.
name
textView
.
text
=
item
.
name
...
@@ -194,58 +156,12 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
...
@@ -194,58 +156,12 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
@SuppressLint
(
"NotifyDataSetChanged"
)
@SuppressLint
(
"NotifyDataSetChanged"
)
private
fun
filterData
()
{
private
fun
filterData
()
{
allData
.
forEach
{
it
.
isSelected
=
false
}
viewModel
.
filterData
()
var
data
=
filterType
(
allData
,
typePosition
)
adapter
.
setData
(
viewModel
.
getFilteredList
())
data
=
filterSize
(
data
,
sizePosition
)
binding
.
rvLargeFile
.
visibility
=
if
(
viewModel
.
getFilteredList
().
isEmpty
())
View
.
GONE
else
View
.
VISIBLE
data
=
filterTime
(
data
,
timePosition
)
binding
.
ivEmpty
.
visibility
=
if
(
viewModel
.
getFilteredList
().
isEmpty
())
View
.
VISIBLE
else
View
.
GONE
list
=
data
.
toMutableList
()
binding
.
tvDelete
.
visibility
=
if
(
viewModel
.
getFilteredList
().
isEmpty
())
View
.
GONE
else
View
.
VISIBLE
adapter
.
notifyDataSetChanged
()
updateView
()
binding
.
rvLargeFile
.
visibility
=
if
(
list
.
isEmpty
())
View
.
GONE
else
View
.
VISIBLE
binding
.
ivEmpty
.
visibility
=
if
(
list
.
isEmpty
())
View
.
VISIBLE
else
View
.
GONE
binding
.
tvDelete
.
visibility
=
if
(
list
.
isEmpty
())
View
.
GONE
else
View
.
VISIBLE
}
private
fun
filterType
(
list
:
List
<
FileBean
>,
position
:
Int
):
List
<
FileBean
>
{
return
when
(
position
)
{
1
->
list
.
filter
{
MineTypeUtils
.
isImage
(
it
.
mineType
)
}
2
->
list
.
filter
{
MineTypeUtils
.
isVideo
(
it
.
mineType
)
}
3
->
list
.
filter
{
MineTypeUtils
.
isAudio
(
it
.
mineType
)
}
4
->
list
.
filter
{
MineTypeUtils
.
isDoc
(
it
.
mineType
)
}
5
->
list
.
filter
{
MineTypeUtils
.
isApk
(
it
.
mineType
)
}
6
->
list
.
filterNot
{
file
->
MineTypeUtils
.
mineTypes
.
any
{
mimeType
->
file
.
mineType
.
startsWith
(
mimeType
)
}
}
else
->
{
list
}
}
}
private
fun
filterSize
(
list
:
List
<
FileBean
>,
position
:
Int
):
List
<
FileBean
>
{
return
when
(
position
)
{
1
->
list
.
filter
{
it
.
length
>=
LARGE_FILE_SIZE
*
2
}
2
->
list
.
filter
{
it
.
length
>=
LARGE_FILE_SIZE
*
5
}
3
->
list
.
filter
{
it
.
length
>=
LARGE_FILE_SIZE
*
10
}
4
->
list
.
filter
{
it
.
length
>=
LARGE_FILE_SIZE
*
50
}
else
->
{
list
.
filter
{
it
.
length
>=
LARGE_FILE_SIZE
}
}
}
}
private
fun
filterTime
(
list
:
List
<
FileBean
>,
position
:
Int
):
List
<
FileBean
>
{
return
when
(
position
)
{
1
->
list
.
filter
{
it
.
lastModified
>
Calendar
.
getInstance
().
apply
{
add
(
Calendar
.
WEEK_OF_YEAR
,
-
1
)
}.
timeInMillis
}
2
->
list
.
filter
{
it
.
lastModified
>
Calendar
.
getInstance
().
apply
{
add
(
Calendar
.
MONTH
,
-
1
)
}.
timeInMillis
}
3
->
list
.
filter
{
it
.
lastModified
>
Calendar
.
getInstance
().
apply
{
add
(
Calendar
.
MONTH
,
-
3
)
}.
timeInMillis
}
4
->
list
.
filter
{
it
.
lastModified
>
Calendar
.
getInstance
().
apply
{
add
(
Calendar
.
MONTH
,
-
6
)
}.
timeInMillis
}
5
->
list
.
filter
{
it
.
lastModified
>
Calendar
.
getInstance
().
apply
{
add
(
Calendar
.
YEAR
,
-
1
)
}.
timeInMillis
}
else
->
{
list
}
}
}
}
private
fun
clearTab
()
{
private
fun
clearTab
()
{
...
@@ -289,6 +205,7 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
...
@@ -289,6 +205,7 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
binding
.
ivType
.
isSelected
=
true
binding
.
ivType
.
isSelected
=
true
binding
.
tvOtherThan
.
visibility
=
View
.
GONE
binding
.
tvOtherThan
.
visibility
=
View
.
GONE
showTab
(
1
,
typeList
)
showTab
(
1
,
typeList
)
viewModel
.
typePosition
=
1
}
}
binding
.
llSize
->
{
binding
.
llSize
->
{
...
@@ -296,6 +213,7 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
...
@@ -296,6 +213,7 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
binding
.
tvOtherThan
.
text
=
getString
(
R
.
string
.
larger_than
)
binding
.
tvOtherThan
.
text
=
getString
(
R
.
string
.
larger_than
)
binding
.
tvOtherThan
.
visibility
=
View
.
VISIBLE
binding
.
tvOtherThan
.
visibility
=
View
.
VISIBLE
showTab
(
2
,
sizeList
)
showTab
(
2
,
sizeList
)
viewModel
.
sizePosition
=
2
}
}
binding
.
llTime
->
{
binding
.
llTime
->
{
...
@@ -303,8 +221,10 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
...
@@ -303,8 +221,10 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
binding
.
tvOtherThan
.
text
=
getString
(
R
.
string
.
other_types
)
binding
.
tvOtherThan
.
text
=
getString
(
R
.
string
.
other_types
)
binding
.
tvOtherThan
.
visibility
=
View
.
VISIBLE
binding
.
tvOtherThan
.
visibility
=
View
.
VISIBLE
showTab
(
3
,
timeList
)
showTab
(
3
,
timeList
)
viewModel
.
timePosition
=
3
}
}
}
}
filterData
()
}
}
@SuppressLint
(
"NotifyDataSetChanged"
)
@SuppressLint
(
"NotifyDataSetChanged"
)
...
@@ -340,19 +260,19 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
...
@@ -340,19 +260,19 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
binding
.
rvTab
.
layoutManager
=
LinearLayoutManager
(
this
)
binding
.
rvTab
.
layoutManager
=
LinearLayoutManager
(
this
)
binding
.
rvLargeFile
.
adapter
=
adapter
binding
.
rvLargeFile
.
adapter
=
adapter
binding
.
rvLargeFile
.
layoutManager
=
LinearLayoutManager
(
this
)
binding
.
rvLargeFile
.
layoutManager
=
LinearLayoutManager
(
this
)
initData
()
viewModel
.
largeFileSize
=
1024
*
1024
*
10
viewModel
.
loadFiles
(
this
)
{
adapter
.
setData
(
viewModel
.
getFilteredList
())
updateView
()
binding
.
rvLargeFile
.
visibility
=
if
(
viewModel
.
getFilteredList
().
isEmpty
())
View
.
GONE
else
View
.
VISIBLE
binding
.
ivEmpty
.
visibility
=
if
(
viewModel
.
getFilteredList
().
isEmpty
())
View
.
VISIBLE
else
View
.
GONE
binding
.
tvDelete
.
visibility
=
if
(
viewModel
.
getFilteredList
().
isEmpty
())
View
.
GONE
else
View
.
VISIBLE
}
showAdAnimation
(
LottieEnum
.
LARGE_FILE_LOTTIE
)
{
showAdAnimation
(
LottieEnum
.
LARGE_FILE_LOTTIE
)
{
AdsMgr
.
showNative
(
binding
.
flAd
,
R
.
layout
.
layout_admob_native_custom
)
AdsMgr
.
showNative
(
binding
.
flAd
,
R
.
layout
.
layout_admob_native_custom
)
}
}
}
}
private
fun
initData
()
{
lifecycleScope
.
launch
(
Dispatchers
.
IO
)
{
allData
=
async
{
MediaUtils
.
findFiles
(
this
@LargeFileCleanActivity
,
LARGE_FILE_SIZE
)
}.
await
()
launch
(
Dispatchers
.
Main
)
{
filterData
()
}
}
}
override
fun
initListener
()
{
override
fun
initListener
()
{
super
.
initListener
()
super
.
initListener
()
binding
.
ivBack
.
setOnClickListener
{
onBackPressedDispatcher
.
onBackPressed
()
}
binding
.
ivBack
.
setOnClickListener
{
onBackPressedDispatcher
.
onBackPressed
()
}
...
@@ -369,14 +289,15 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
...
@@ -369,14 +289,15 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
hiddenTab
()
hiddenTab
()
}
}
binding
.
tvDelete
.
setOnClickListener
{
binding
.
tvDelete
.
setOnClickListener
{
if
(
total
<=
0
)
return
@setOnClickListener
if
(
viewModel
.
getFilteredList
().
isEmpty
()
||
viewModel
.
getFilteredList
().
filter
{
it
.
isSelected
}
.
sumOf
{
it
.
length
}
<=
0
)
return
@setOnClickListener
val
dialog
=
ConfirmDialog
(
this
)
val
dialog
=
ConfirmDialog
(
this
)
dialog
.
action
=
{
dialog
.
action
=
{
cleanFileBeans
(
list
)
cleanFileBeans
(
viewModel
.
getFilteredList
()
)
AdsMgr
.
showInsert
(
this
,
showCallBack
=
object
:
AdsShowCallBack
()
{
AdsMgr
.
showInsert
(
this
,
showCallBack
=
object
:
AdsShowCallBack
()
{
override
fun
next
()
{
override
fun
next
()
{
CleanResultActivity
.
functionKey
=
LARGE_FILE_CLEAN
CleanResultActivity
.
functionKey
=
LARGE_FILE_CLEAN
CleanResultActivity
.
total
=
total
CleanResultActivity
.
total
=
viewModel
.
getFilteredList
().
filter
{
it
.
isSelected
}.
sumOf
{
it
.
length
}
CleanResultActivity
.
titleName
=
getString
(
R
.
string
.
large_file_clean
)
CleanResultActivity
.
titleName
=
getString
(
R
.
string
.
large_file_clean
)
goToAc
(
CleanResultActivity
::
class
.
java
)
goToAc
(
CleanResultActivity
::
class
.
java
)
}
}
...
...
app/src/main/java/com/simplecleaner/app/ui/largefile/LargeFileCleanAdapter.kt
0 → 100644
View file @
2111510d
package
com.simplecleaner.app.ui.largefile
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
androidx.core.view.isVisible
import
androidx.recyclerview.widget.RecyclerView
import
com.bumptech.glide.Glide
import
com.bumptech.glide.load.resource.bitmap.CenterCrop
import
com.bumptech.glide.load.resource.bitmap.RoundedCorners
import
com.bumptech.glide.request.RequestOptions
import
com.simplecleaner.app.R
import
com.simplecleaner.app.bean.FileBean
import
com.simplecleaner.app.databinding.ItemLargeFileCleanBinding
import
com.simplecleaner.app.utils.MineTypeUtils
import
com.simplecleaner.app.utils.Utils
class
LargeFileCleanAdapter
(
private
var
data
:
List
<
FileBean
>,
private
val
onItemClick
:
(
Int
)
->
Unit
)
:
RecyclerView
.
Adapter
<
LargeFileCleanAdapter
.
ViewHolder
>()
{
inner
class
ViewHolder
(
val
binding
:
ItemLargeFileCleanBinding
)
:
RecyclerView
.
ViewHolder
(
binding
.
root
)
{
init
{
binding
.
root
.
setOnClickListener
{
val
position
=
bindingAdapterPosition
if
(
position
!=
RecyclerView
.
NO_POSITION
)
{
onItemClick
(
position
)
}
}
}
}
override
fun
onCreateViewHolder
(
parent
:
ViewGroup
,
viewType
:
Int
):
ViewHolder
{
val
binding
=
ItemLargeFileCleanBinding
.
inflate
(
LayoutInflater
.
from
(
parent
.
context
),
parent
,
false
)
return
ViewHolder
(
binding
)
}
override
fun
getItemCount
():
Int
=
data
.
size
override
fun
onBindViewHolder
(
holder
:
ViewHolder
,
position
:
Int
)
{
val
item
=
data
[
position
]
holder
.
binding
.
ivVideo
.
isVisible
=
MineTypeUtils
.
isVideo
(
item
.
mineType
)
if
(
MineTypeUtils
.
isImage
(
item
.
mineType
)
||
MineTypeUtils
.
isVideo
(
item
.
mineType
))
{
val
round
=
holder
.
itemView
.
resources
.
getDimensionPixelSize
(
R
.
dimen
.
dp_4
)
val
options
=
RequestOptions
().
transform
(
CenterCrop
(),
RoundedCorners
(
round
))
Glide
.
with
(
holder
.
itemView
.
context
)
.
load
(
item
.
path
)
.
apply
(
options
)
.
into
(
holder
.
binding
.
ivIcon
)
}
else
if
(
MineTypeUtils
.
isAudio
(
item
.
mineType
))
{
holder
.
binding
.
ivIcon
.
setImageResource
(
R
.
drawable
.
icon_yinping_large
)
}
else
if
(
MineTypeUtils
.
isApk
(
item
.
mineType
))
{
holder
.
binding
.
ivIcon
.
setImageResource
(
R
.
drawable
.
icon_app_large
)
}
else
if
(
MineTypeUtils
.
isDoc
(
item
.
mineType
))
{
holder
.
binding
.
ivIcon
.
setImageResource
(
R
.
drawable
.
icon_wenjianx_large
)
}
else
{
holder
.
binding
.
ivIcon
.
setImageResource
(
R
.
drawable
.
icon_yingyong_large
)
}
holder
.
binding
.
tvName
.
text
=
item
.
name
holder
.
binding
.
tvLength
.
text
=
Utils
.
getSizeFormat
(
item
.
length
)
holder
.
binding
.
ivSelect
.
isSelected
=
item
.
isSelected
holder
.
binding
.
viewLine
.
visibility
=
if
(
position
==
itemCount
-
1
)
View
.
GONE
else
View
.
VISIBLE
}
fun
setData
(
newData
:
List
<
FileBean
>)
{
data
=
newData
notifyDataSetChanged
()
}
}
\ No newline at end of file
app/src/main/java/com/simplecleaner/app/ui/largefile/LargeFileCleanViewModel.kt
0 → 100644
View file @
2111510d
package
com.simplecleaner.app.ui.largefile
import
android.content.Context
import
androidx.lifecycle.ViewModel
import
androidx.lifecycle.viewModelScope
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.launch
import
kotlinx.coroutines.withContext
import
com.simplecleaner.app.bean.FileBean
import
com.simplecleaner.app.utils.MediaUtils
import
com.simplecleaner.app.utils.MineTypeUtils
import
java.util.Calendar
class
LargeFileCleanViewModel
:
ViewModel
()
{
private
var
allData
:
List
<
FileBean
>
=
emptyList
()
private
var
filteredList
:
List
<
FileBean
>
=
emptyList
()
var
typePosition
=
0
var
sizePosition
=
0
var
timePosition
=
0
var
largeFileSize
:
Long
=
1024
*
1024
*
10
fun
loadFiles
(
context
:
Context
,
onLoaded
:
(()
->
Unit
)?
=
null
)
{
viewModelScope
.
launch
(
Dispatchers
.
IO
)
{
allData
=
MediaUtils
.
findFiles
(
context
,
largeFileSize
)
filterData
()
withContext
(
Dispatchers
.
Main
)
{
onLoaded
?.
invoke
()
}
}
}
fun
filterData
()
{
filteredList
=
filterType
(
allData
,
typePosition
)
.
let
{
filterSize
(
it
,
sizePosition
)
}
.
let
{
filterTime
(
it
,
timePosition
)
}
}
fun
getFilteredList
():
List
<
FileBean
>
=
filteredList
fun
toggleSelect
(
position
:
Int
)
{
if
(
position
in
filteredList
.
indices
)
{
filteredList
[
position
].
isSelected
=
!
filteredList
[
position
].
isSelected
}
}
private
fun
filterType
(
list
:
List
<
FileBean
>,
position
:
Int
):
List
<
FileBean
>
{
return
when
(
position
)
{
1
->
list
.
filter
{
MineTypeUtils
.
isImage
(
it
.
mineType
)
}
2
->
list
.
filter
{
MineTypeUtils
.
isVideo
(
it
.
mineType
)
}
3
->
list
.
filter
{
MineTypeUtils
.
isAudio
(
it
.
mineType
)
}
4
->
list
.
filter
{
MineTypeUtils
.
isDoc
(
it
.
mineType
)
}
5
->
list
.
filter
{
MineTypeUtils
.
isApk
(
it
.
mineType
)
}
6
->
list
.
filterNot
{
file
->
MineTypeUtils
.
mineTypes
.
any
{
mimeType
->
file
.
mineType
.
startsWith
(
mimeType
)
}
}
else
->
list
}
}
private
fun
filterSize
(
list
:
List
<
FileBean
>,
position
:
Int
):
List
<
FileBean
>
{
return
when
(
position
)
{
1
->
list
.
filter
{
it
.
length
>=
largeFileSize
*
2
}
2
->
list
.
filter
{
it
.
length
>=
largeFileSize
*
5
}
3
->
list
.
filter
{
it
.
length
>=
largeFileSize
*
10
}
4
->
list
.
filter
{
it
.
length
>=
largeFileSize
*
50
}
else
->
list
.
filter
{
it
.
length
>=
largeFileSize
}
}
}
private
fun
filterTime
(
list
:
List
<
FileBean
>,
position
:
Int
):
List
<
FileBean
>
{
return
when
(
position
)
{
1
->
list
.
filter
{
it
.
lastModified
>
Calendar
.
getInstance
().
apply
{
add
(
Calendar
.
WEEK_OF_YEAR
,
-
1
)
}.
timeInMillis
}
2
->
list
.
filter
{
it
.
lastModified
>
Calendar
.
getInstance
().
apply
{
add
(
Calendar
.
MONTH
,
-
1
)
}.
timeInMillis
}
3
->
list
.
filter
{
it
.
lastModified
>
Calendar
.
getInstance
().
apply
{
add
(
Calendar
.
MONTH
,
-
3
)
}.
timeInMillis
}
4
->
list
.
filter
{
it
.
lastModified
>
Calendar
.
getInstance
().
apply
{
add
(
Calendar
.
MONTH
,
-
6
)
}.
timeInMillis
}
5
->
list
.
filter
{
it
.
lastModified
>
Calendar
.
getInstance
().
apply
{
add
(
Calendar
.
YEAR
,
-
1
)
}.
timeInMillis
}
else
->
list
}
}
}
\ No newline at end of file
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