Commit 985eb386 authored by wanglei's avatar wanglei

feat:白包bug修复

parent bd6767e7
......@@ -3,20 +3,7 @@
<component name="deploymentTargetDropDown">
<value>
<entry key="app">
<State>
<runningDeviceTargetSelectedWithDropDown>
<Target>
<type value="RUNNING_DEVICE_TARGET" />
<deviceKey>
<Key>
<type value="SERIAL_NUMBER" />
<value value="3426369207001D6" />
</Key>
</deviceKey>
</Target>
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2024-03-21T08:35:33.717775700Z" />
</State>
<State />
</entry>
</value>
</component>
......
......@@ -5,7 +5,7 @@
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="#JAVA_HOME" />
<option name="gradleJvm" value="jbr-17" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
......
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
......
......@@ -6,7 +6,6 @@ interface AdapterCommonDataFunction {
abstract fun setData(data: List<FileBean>)
abstract fun addData(data: List<FileBean>)
abstract fun addDataFinish(data: List<FileBean>)
abstract fun clearData()
abstract fun removeData(data: List<FileBean>)
abstract fun getSelectData(): List<FileBean>
......
......@@ -21,17 +21,9 @@ abstract class CommonAdapter<T : ViewHolder?>() : RecyclerView.Adapter<T>(),
@SuppressLint("NotifyDataSetChanged")
override fun addData(data: List<FileBean>) {
fileList.addAll(data)
if (firstRefresh) {
notifyDataSetChanged()
firstRefresh = false
}
}
@SuppressLint("NotifyDataSetChanged")
override fun addDataFinish(data: List<FileBean>) {
fileList.addAll(data)
notifyDataSetChanged()
}
@SuppressLint("NotifyDataSetChanged")
override fun clearData() {
......@@ -61,12 +53,11 @@ abstract class CommonAdapter<T : ViewHolder?>() : RecyclerView.Adapter<T>(),
@SuppressLint("NotifyDataSetChanged")
override fun toggleSelect(select: Boolean) {
fileList.mapIndexed { index, fileBean ->
if (fileBean.isSelect != select) {
fileBean.isSelect = select
notifyItemChanged(index, "单条刷新")
}
fileList.forEach {
fileBean ->
fileBean.isSelect=select
}
notifyDataSetChanged()
}
......
......@@ -174,9 +174,10 @@ fun File.isDocument(): Boolean {
return isWord() or isExcel() or isPPt() or isPdf() or isTxt()
}
fun File.toFileBean(): FileBean {
fun File.toFileBean(id: Long = 0): FileBean {
val timeE = SimpleDateFormat("MMM dd, yyyy", Locale.ENGLISH).format(lastModified())
return FileBean(
id = id,
name = name,
path = absolutePath,
size = length(),
......
package com.zxhy.solarmasterace.internalstorage
import android.annotation.SuppressLint
import android.content.Context
import android.os.Environment
import android.util.Log
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import com.zxhy.solarmasterace.R
import com.zxhy.solarmasterace.adapter.CommonAdapter
import com.zxhy.solarmasterace.adapter.ItemCardFileViewHolder
......@@ -21,6 +23,7 @@ class FileDirectoryAdapter(
private var currentDir = Environment.getExternalStorageDirectory()
private var isSelectMode = false
private var pageTurn = true
private var operationFile = arrayListOf<FileBean>()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemCardFileViewHolder {
return ItemCardFileViewHolder(R.layout.item_card_file.inflate(parent))
......@@ -68,6 +71,18 @@ class FileDirectoryAdapter(
if (!pageTurn) return@setOnClickListener
nextPage(data)
}
//该列表是选中列表
if (operationFile.map { it.path }.contains(data.path)) {
root.setOnClickListener { }
root.setCardBackgroundColor(
ContextCompat.getColor(
context, R.color.color_F4F4F4
)
)
} else {
root.setCardBackgroundColor(ContextCompat.getColor(context, R.color.white))
}
}
} else {
holder.binding.apply {
......@@ -118,4 +133,16 @@ class FileDirectoryAdapter(
return currentDir
}
//当选中选中的列表,无法复制 移动到自身
fun notifyCannotSelect(data: List<FileBean>) {
val selectList = arrayListOf<FileBean>()
selectList.addAll(data)
operationFile = selectList
notifyDataSetChanged()
}
fun clearCannotSelect() {
operationFile = arrayListOf()
}
}
\ No newline at end of file
......@@ -31,8 +31,7 @@ class InternalStorageActivity : AppCompatActivity() {
private val MODE_BROWSE = 0
private val MODE_SELECT = 1
private val MODE_SELECTED_OPERATION = 2
private val MODE_LOCK = -1
private var currentMode = MODE_BROWSE //0普通浏览模式 1可选模式 2选中操作模式 -1无权限锁功能模式
private var currentMode = MODE_BROWSE //0普通浏览模式 1可选模式 2选中操作模式
private lateinit var activityLauncher: ActivityLauncher
override fun onCreate(savedInstanceState: Bundle?) {
......@@ -148,16 +147,21 @@ class InternalStorageActivity : AppCompatActivity() {
val files = fileDirectoryAdapter.getSelectData().map { it.file() }
deleteFiles(files) {
showCardTip("Successfully deleted!")
switchBrowseMode()
}
}
binding.ivMove.setOnClickListener {
val moveFile = arrayListOf<File>()
fileDirectoryAdapter.getSelectData().map { moveFile.add(it.file()) }
val selectList = fileDirectoryAdapter.getSelectData()
selectList.map { moveFile.add(it.file()) }
fileDirectoryAdapter.notifyCannotSelect(selectList)
switchSelectedOperationMode("Motion", moveFile)
}
binding.ivCopy.setOnClickListener {
val copyFile = arrayListOf<File>()
fileDirectoryAdapter.getSelectData().map { copyFile.add(it.file()) }
val selectList = fileDirectoryAdapter.getSelectData()
selectList.map { copyFile.add(it.file()) }
fileDirectoryAdapter.notifyCannotSelect(selectList)
switchSelectedOperationMode("Copy", copyFile)
}
}
......@@ -185,6 +189,7 @@ class InternalStorageActivity : AppCompatActivity() {
binding.tvDefine.setOnClickListener {
moveFiles(files) {
showCardTip("Successfully moved!")
fileDirectoryAdapter.clearCannotSelect()
switchBrowseMode()
}
}
......@@ -193,6 +198,7 @@ class InternalStorageActivity : AppCompatActivity() {
"Copy" -> {
binding.tvDefine.setOnClickListener {
copyFiles(files) {
fileDirectoryAdapter.clearCannotSelect()
showCardTip("Successfully copied!")
switchBrowseMode()
}
......@@ -210,7 +216,10 @@ class InternalStorageActivity : AppCompatActivity() {
val dir = fileDirectoryAdapter.getCurrentDir() ?: File("")
files.forEach {
if (it.isFile) {
it.copyTo(File(dir, it.name))
val destFile = File(dir, it.name)
if (!destFile.exists()) {
it.copyTo(destFile)
}
} else {
FileHelper.copyDirectory(it, File(dir, it.name))
}
......
package com.zxhy.solarmasterace.quicktools
import android.os.Environment
import androidx.lifecycle.LifecycleCoroutineScope
import androidx.lifecycle.lifecycleScope
import com.zxhy.solarmasterace.data.DupFileBean
import com.zxhy.solarmasterace.data.FileBean
import com.zxhy.solarmasterace.data.isApk
......@@ -16,6 +18,8 @@ import com.zxhy.solarmasterace.data.isVideo
import com.zxhy.solarmasterace.data.isWord
import com.zxhy.solarmasterace.data.isZip
import com.zxhy.solarmasterace.data.toFileBean
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.io.File
import java.util.Stack
......@@ -52,9 +56,11 @@ fun dupImage(): List<DupFileBean> {
}
fun largeFile(
lifecycleScope: LifecycleCoroutineScope,
onDo: ((file: List<FileBean>) -> Unit)? = null,
onFinish: ((file: List<FileBean>, count: Int) -> Unit)? = null
) {
lifecycleScope.launch(Dispatchers.IO) {
val rootDir = Environment.getExternalStorageDirectory()
val tempList = arrayListOf<FileBean>()
var count = 0
......@@ -69,6 +75,9 @@ fun largeFile(
}
}
onFinish?.invoke(tempList, count)
}
}
fun audioFile(
......@@ -295,15 +304,17 @@ fun emptyFile(
}
fun imageFile(
lifecycleCoroutineScope: LifecycleCoroutineScope,
onDo: ((file: List<FileBean>) -> Unit)? = null,
onFinish: ((file: List<FileBean>, count: Int) -> Unit)? = null
onFinish: ((file: List<FileBean>, count: Long) -> Unit)? = null
) {
lifecycleCoroutineScope.launch(Dispatchers.IO) {
val rootDir = Environment.getExternalStorageDirectory()
val tempList = arrayListOf<FileBean>()
var count = 0
var count = 0L
FileHelper.linkedLisTraverseFolder(rootDir) {
if (it.isImage()) {
tempList.add(it.toFileBean())
tempList.add(it.toFileBean(count))
count++
if (tempList.size == 10) {
onDo?.invoke(tempList)
......@@ -312,8 +323,10 @@ fun imageFile(
}
}
onFinish?.invoke(tempList, count)
}
}
fun videoFile(
onDo: ((file: List<FileBean>) -> Unit)? = null,
onFinish: ((file: List<FileBean>, count: Int) -> Unit)? = null
......
......@@ -83,7 +83,8 @@ object FileHelper {
val currentFile = stackFiles.peek()
val subFiles = currentFile.listFiles()
for (i in subFiles!!.indices) {
if (subFiles != null) {
for (i in subFiles.indices) {
if (subFiles[i].isFile) {
if (!subFiles[i].delete()) {
return false
......@@ -92,6 +93,7 @@ object FileHelper {
stackFiles.push(subFiles[i])
}
}
}
if (currentFile === stackFiles.peek()) {
if (!currentFile.delete()) {
return false
......@@ -108,6 +110,7 @@ object FileHelper {
* @param target 目标文件夹
*/
fun copyDirectory(source: File, target: File) {
try {
if (source.isDirectory) {
if (!target.exists()) target.mkdir()
......@@ -115,8 +118,14 @@ object FileHelper {
copyDirectory(File(source, sub), File(target, sub))
}
} else {
if (!target.exists()) {
source.copyTo(target)
}
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}
\ No newline at end of file
......@@ -6,4 +6,6 @@
<color name="color_FF4CE0AB">#FF4CE0AB</color>
<color name="color_FF333333">#FF333333</color>
<color name="color_FF999999">#FF999999</color>
<color name="color_999999">#999999</color>
<color name="color_F4F4F4">#F4F4F4</color>
</resources>
\ 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