From 45f8884002fc43053c41c35e57f6a36acbde7027 Mon Sep 17 00:00:00 2001 From: Oluwadara Abijo Date: Wed, 29 Apr 2026 13:01:01 +0100 Subject: [PATCH 1/2] fix(ADFA-3866): Update file tree after renaming --- .../actions/filetree/RenameAction.kt | 46 ++++++++++--------- .../viewmodel/FileManagerViewModel.kt | 14 ++++-- 2 files changed, 35 insertions(+), 25 deletions(-) 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 673f6b2ec1..9d28348e98 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 @@ -23,15 +23,12 @@ import androidx.activity.viewModels import com.itsaky.androidide.R import com.itsaky.androidide.actions.ActionData import com.itsaky.androidide.actions.requireFile -import com.itsaky.androidide.eventbus.events.file.FileRenameEvent import com.itsaky.androidide.idetooltips.TooltipTag import com.itsaky.androidide.preferences.databinding.LayoutDialogTextInputBinding -import com.itsaky.androidide.projects.FileManager import com.itsaky.androidide.utils.DialogUtils +import com.itsaky.androidide.utils.flashError import com.itsaky.androidide.utils.showWithLongPressTooltip import com.itsaky.androidide.viewmodel.FileManagerViewModel -import org.greenrobot.eventbus.EventBus -import java.io.File /** * Action to rename the selected file. @@ -55,19 +52,37 @@ class RenameAction( val binding = LayoutDialogTextInputBinding.inflate(LayoutInflater.from(context)) val builder = DialogUtils.newMaterialDialogBuilder(context) binding.name.editText!!.hint = - context.getString(com.itsaky.androidide.resources.R.string.new_name) + context.getString(R.string.new_name) binding.name.editText!!.setText(file.name) - builder.setTitle(com.itsaky.androidide.resources.R.string.rename_file) - builder.setMessage(com.itsaky.androidide.resources.R.string.msg_rename_file) + builder.setTitle(R.string.rename_file) + builder.setMessage(R.string.msg_rename_file) builder.setView(binding.root) builder.setNegativeButton(android.R.string.cancel, null) - builder.setPositiveButton(com.itsaky.androidide.resources.R.string.rename_file) { + builder.setPositiveButton(R.string.rename_file) { dialogInterface, _ -> dialogInterface.dismiss() val fileManagerViewModel: FileManagerViewModel by context.viewModels() val name: String = binding.name.editText?.text.toString().trim() - fileManagerViewModel.renameFile(file, name) + if (name.length !in 1..40) { + flashError(R.string.msg_invalid_name) + return@setPositiveButton + } + fileManagerViewModel.renameFile(file, name, context) { renamed -> + if (renamed) { + if (lastHeld != null) { + val parent = lastHeld.parent + if (parent != null) { + requestCollapseNode(parent, false) + requestExpandNode(parent) + } else { + requestFileListing() + } + } else { + requestFileListing() + } + } + } } builder.showWithLongPressTooltip( @@ -75,17 +90,4 @@ class RenameAction( tooltipTag = TooltipTag.PROJECT_RENAME_DIALOG ) } - - private fun notifyFileRenamed( - file: File, - name: String, - context: Context, - ) { - val renameEvent = FileRenameEvent(file, File(file.parent, name)) - - // Notify FileManager first - FileManager.onFileRenamed(renameEvent) - - EventBus.getDefault().post(renameEvent.apply { putData(context) }) - } } 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 462e38f751..7da79ca8cd 100644 --- a/app/src/main/java/com/itsaky/androidide/viewmodel/FileManagerViewModel.kt +++ b/app/src/main/java/com/itsaky/androidide/viewmodel/FileManagerViewModel.kt @@ -1,9 +1,12 @@ package com.itsaky.androidide.viewmodel +import android.content.Context import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.blankj.utilcode.util.FileUtils import com.itsaky.androidide.eventbus.events.file.FileRenameEvent +import com.itsaky.androidide.projects.FileManager +import com.itsaky.androidide.resources.R import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.asSharedFlow @@ -23,7 +26,7 @@ class FileManagerViewModel : ViewModel() { private val _operationResult = MutableSharedFlow() val operationResult = _operationResult.asSharedFlow() - fun renameFile(file: File, newName: String) { + fun renameFile(file: File, newName: String, context: Context? = null, onResult: ((Boolean) -> Unit)? = null) { viewModelScope.launch { val renamed = withContext(Dispatchers.IO) { newName.length in 1..40 && FileUtils.rename(file, newName) @@ -32,11 +35,16 @@ class FileManagerViewModel : ViewModel() { if (renamed) { // Notify system of the rename val renameEvent = FileRenameEvent(file, File(file.parent, newName)) + if (context != null) { + renameEvent.put(Context::class.java, context) + } + FileManager.onFileRenamed(renameEvent) EventBus.getDefault().post(renameEvent) - _operationResult.emit(FileOpResult.Success(com.itsaky.androidide.resources.R.string.renamed)) + _operationResult.emit(FileOpResult.Success(R.string.renamed)) } else { - _operationResult.emit(FileOpResult.Error(com.itsaky.androidide.resources.R.string.rename_failed)) + _operationResult.emit(FileOpResult.Error(R.string.rename_failed)) } + onResult?.invoke(renamed) } } } \ No newline at end of file From cbedb328efa107365f1e41fe58b8f8388e45284a Mon Sep 17 00:00:00 2001 From: Oluwadara Abijo Date: Wed, 29 Apr 2026 15:11:31 +0100 Subject: [PATCH 2/2] fix(ADFA-3866): Minor fixes --- .../actions/filetree/RenameAction.kt | 27 ++++++++----------- 1 file changed, 11 insertions(+), 16 deletions(-) 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 9d28348e98..99598925c4 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 @@ -58,29 +58,24 @@ class RenameAction( builder.setMessage(R.string.msg_rename_file) builder.setView(binding.root) builder.setNegativeButton(android.R.string.cancel, null) - builder.setPositiveButton(R.string.rename_file) { - dialogInterface, - _ -> - dialogInterface.dismiss() + 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 } + dialogInterface.dismiss() fileManagerViewModel.renameFile(file, name, context) { renamed -> - if (renamed) { - if (lastHeld != null) { - val parent = lastHeld.parent - if (parent != null) { - requestCollapseNode(parent, false) - requestExpandNode(parent) - } else { - requestFileListing() - } - } else { - requestFileListing() - } + if (!renamed) return@renameFile + + val parent = lastHeld?.parent + + if (parent != null) { + requestCollapseNode(parent, false) + requestExpandNode(parent) + } else { + requestFileListing() } } }