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