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
Expand all
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
This diff is collapsed.
Click to expand it.
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