Commit 2111510d authored by wanglei's avatar wanglei

[AI重构]AI重构LargeFileCleanActivity

parent 8a6e6deb
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
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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment