diff --git a/app/src/main/java/com/itsaky/androidide/actions/filetree/RenameAction.kt b/app/src/main/java/com/itsaky/androidide/actions/filetree/RenameAction.kt index 99598925c4..bf765963e0 100644 --- a/app/src/main/java/com/itsaky/androidide/actions/filetree/RenameAction.kt +++ b/app/src/main/java/com/itsaky/androidide/actions/filetree/RenameAction.kt @@ -61,10 +61,17 @@ class RenameAction( builder.setPositiveButton(R.string.rename_file) { dialogInterface, _ -> val fileManagerViewModel: FileManagerViewModel by context.viewModels() val name: String = binding.name.editText?.text.toString().trim() - if (name.length !in 1..40) { - flashError(R.string.msg_invalid_name) - return@setPositiveButton + when { + name.isEmpty() -> { + flashError(R.string.msg_invalid_name) + return@setPositiveButton + } + name.length > 40 -> { + flashError(R.string.file_name_too_long) + return@setPositiveButton + } } + dialogInterface.dismiss() fileManagerViewModel.renameFile(file, name, context) { renamed -> if (!renamed) return@renameFile diff --git a/app/src/main/java/com/itsaky/androidide/viewmodel/FileManagerViewModel.kt b/app/src/main/java/com/itsaky/androidide/viewmodel/FileManagerViewModel.kt index 7da79ca8cd..7041f446bc 100644 --- a/app/src/main/java/com/itsaky/androidide/viewmodel/FileManagerViewModel.kt +++ b/app/src/main/java/com/itsaky/androidide/viewmodel/FileManagerViewModel.kt @@ -1,6 +1,7 @@ package com.itsaky.androidide.viewmodel import android.content.Context +import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.blankj.utilcode.util.FileUtils @@ -28,8 +29,15 @@ class FileManagerViewModel : ViewModel() { fun renameFile(file: File, newName: String, context: Context? = null, onResult: ((Boolean) -> Unit)? = null) { viewModelScope.launch { + val destFile = File(file.parentFile, newName) val renamed = withContext(Dispatchers.IO) { - newName.length in 1..40 && FileUtils.rename(file, newName) + if (file.name.equals(newName, ignoreCase = true)) { + val uniqueSuffix = System.currentTimeMillis() + val tempFile = File(file.parentFile, "$newName-$uniqueSuffix.cotg") + file.renameTo(tempFile) && tempFile.renameTo(destFile) + } else { + FileUtils.rename(file, newName) + } } if (renamed) { diff --git a/resources/src/main/res/values/strings.xml b/resources/src/main/res/values/strings.xml index 6290f7415b..20673fc8f0 100644 --- a/resources/src/main/res/values/strings.xml +++ b/resources/src/main/res/values/strings.xml @@ -255,6 +255,7 @@ Enter a new name for the file/folder. Renamed successfully Unable to rename file + File name cannot exceed 40 characters Deleted successfully Unable to delete file Copy path