mirror of
https://gitee.com/zhangsken/AndroidIDE.git
synced 2026-10-16 07:49:44 +08:00
fix: tab text is not updated when an opened file is renamed
This commit is contained in:
Generated
+5
@@ -169,6 +169,11 @@
|
||||
</map>
|
||||
</option>
|
||||
</component>
|
||||
<component name="EntryPointsManager">
|
||||
<list size="1">
|
||||
<item index="0" class="java.lang.String" itemvalue="org.greenrobot.eventbus.Subscribe" />
|
||||
</list>
|
||||
</component>
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="NullableNotNullManager">
|
||||
<option name="myDefaultNullable" value="androidx.annotation.Nullable" />
|
||||
|
||||
@@ -75,10 +75,10 @@ class RenameAction(context: Context) :
|
||||
return@setPositiveButton
|
||||
}
|
||||
|
||||
notifyFileRenamed(file, context)
|
||||
notifyFileRenamed(file, name, context)
|
||||
|
||||
if (lastHeld != null) {
|
||||
val parent = lastHeld!!.parent
|
||||
val parent = lastHeld.parent
|
||||
parent.deleteChild(lastHeld)
|
||||
val node = TreeNode(File(file.parentFile, name))
|
||||
node.viewHolder = FileTreeViewHolder(context)
|
||||
@@ -91,7 +91,7 @@ class RenameAction(context: Context) :
|
||||
builder.create().show()
|
||||
}
|
||||
|
||||
private fun notifyFileRenamed(file: File, context: Context) {
|
||||
EventBus.getDefault().post(FileRenameEvent(file).apply { putData(context) })
|
||||
private fun notifyFileRenamed(file: File, name: String, context: Context) {
|
||||
EventBus.getDefault().post(FileRenameEvent(file, File(file.parent, name)).apply { putData(context) })
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,6 +38,7 @@ import com.itsaky.androidide.editor.language.treesitter.TSLanguageRegistry
|
||||
import com.itsaky.androidide.editor.language.xml.XMLLanguage
|
||||
import com.itsaky.androidide.editor.schemes.IDEColorSchemeProvider
|
||||
import com.itsaky.androidide.editor.ui.IDEEditor
|
||||
import com.itsaky.androidide.eventbus.events.file.FileRenameEvent
|
||||
import com.itsaky.androidide.interfaces.IEditorHandler
|
||||
import com.itsaky.androidide.models.OpenedFile
|
||||
import com.itsaky.androidide.models.OpenedFilesCache
|
||||
@@ -51,6 +52,8 @@ import com.itsaky.androidide.utils.IntentUtils.openImage
|
||||
import com.itsaky.androidide.utils.flashSuccess
|
||||
import io.github.rosemoe.sora.event.ContentChangeEvent
|
||||
import java.io.File
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
|
||||
/**
|
||||
* Base class for EditorActivity. Handles logic for working with file editors.
|
||||
@@ -500,4 +503,19 @@ open class EditorHandlerActivity : ProjectHandlerActivity(), IEditorHandler {
|
||||
}
|
||||
builder.show()
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
fun onFileRenamed(event: FileRenameEvent) {
|
||||
val index = findIndexOfEditorByFile(event.file)
|
||||
if (index < 0 || index >= binding.tabs.tabCount) {
|
||||
return
|
||||
}
|
||||
|
||||
val editor = getEditorAtIndex(index) ?: return
|
||||
viewModel.updateFile(index, event.newFile)
|
||||
editor.updateFile(event.newFile)
|
||||
|
||||
val tab = binding.tabs.getTabAt(index) ?: return
|
||||
tab.text = event.newFile.name
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,21 +44,13 @@ import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.blankj.utilcode.util.FileIOUtils;
|
||||
import com.blankj.utilcode.util.FileUtils;
|
||||
import com.blankj.utilcode.util.SizeUtils;
|
||||
import com.itsaky.androidide.app.BaseApplication;
|
||||
import com.itsaky.androidide.editor.databinding.LayoutCodeEditorBinding;
|
||||
import com.itsaky.androidide.editor.language.treesitter.TreeSitterLanguage;
|
||||
import com.itsaky.androidide.editor.language.cpp.CppLanguage;
|
||||
import com.itsaky.androidide.editor.language.groovy.GroovyLanguage;
|
||||
import com.itsaky.androidide.editor.language.treesitter.TreeSitterLanguageProvider;
|
||||
import com.itsaky.androidide.editor.schemes.IDEColorScheme;
|
||||
import com.itsaky.androidide.editor.schemes.IDEColorSchemeProvider;
|
||||
import com.itsaky.androidide.editor.ui.EditorSearchLayout;
|
||||
import com.itsaky.androidide.editor.ui.IDEEditor;
|
||||
import com.itsaky.androidide.eventbus.events.preferences.PreferenceChangeEvent;
|
||||
@@ -69,25 +61,19 @@ import com.itsaky.androidide.lsp.java.JavaLanguageServer;
|
||||
import com.itsaky.androidide.lsp.xml.XMLLanguageServer;
|
||||
import com.itsaky.androidide.models.Range;
|
||||
import com.itsaky.androidide.preferences.internal.EditorPreferencesKt;
|
||||
import com.itsaky.androidide.syntax.colorschemes.DynamicColorScheme;
|
||||
import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE;
|
||||
import com.itsaky.androidide.utils.FileUtil;
|
||||
import com.itsaky.androidide.utils.ILogger;
|
||||
import com.itsaky.androidide.utils.TypefaceUtilsKt;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
import org.greenrobot.eventbus.ThreadMode;
|
||||
|
||||
import io.github.rosemoe.sora.text.LineSeparator;
|
||||
import io.github.rosemoe.sora.widget.component.Magnifier;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
import io.github.rosemoe.sora.lang.EmptyLanguage;
|
||||
import io.github.rosemoe.sora.lang.Language;
|
||||
import io.github.rosemoe.sora.text.LineSeparator;
|
||||
import io.github.rosemoe.sora.widget.component.Magnifier;
|
||||
import kotlin.io.FilesKt;
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
import org.greenrobot.eventbus.ThreadMode;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* A view that handles opened code editors.
|
||||
@@ -103,7 +89,7 @@ public class CodeEditorView extends LinearLayout {
|
||||
private final EditorSearchLayout searchLayout;
|
||||
|
||||
public CodeEditorView(
|
||||
@NonNull Context context, @NonNull File file, final @NonNull Range selection) {
|
||||
@NonNull Context context, @NonNull File file, final @NonNull Range selection) {
|
||||
super(context);
|
||||
this.file = file;
|
||||
|
||||
@@ -124,21 +110,21 @@ public class CodeEditorView extends LinearLayout {
|
||||
|
||||
addView(this.binding.getRoot(), new LayoutParams(LayoutParams.MATCH_PARENT, 0, 1f));
|
||||
addView(
|
||||
this.searchLayout, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
|
||||
this.searchLayout, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
|
||||
|
||||
CompletableFuture.runAsync(
|
||||
() -> {
|
||||
final var contents = FileIOUtils.readFile2String(file);
|
||||
final var editor = getEditor();
|
||||
editor.post(() -> {
|
||||
editor.setText(contents, createEditorArgs());
|
||||
postRead();
|
||||
|
||||
selection.validate();
|
||||
editor.validateRange(selection);
|
||||
editor.setSelection(selection);
|
||||
});
|
||||
() -> {
|
||||
final var contents = FileIOUtils.readFile2String(file);
|
||||
final var editor = getEditor();
|
||||
editor.post(() -> {
|
||||
editor.setText(contents, createEditorArgs());
|
||||
postRead();
|
||||
|
||||
selection.validate();
|
||||
editor.validateRange(selection);
|
||||
editor.setSelection(selection);
|
||||
});
|
||||
});
|
||||
|
||||
configureEditorIfNeeded();
|
||||
}
|
||||
@@ -165,7 +151,7 @@ public class CodeEditorView extends LinearLayout {
|
||||
|
||||
protected void postRead() {
|
||||
binding.editor.setupLanguage(getFile());
|
||||
|
||||
|
||||
binding.editor.setLanguageServer(createLanguageServer(file));
|
||||
|
||||
if (IDELanguageClientImpl.isInitialized()) {
|
||||
@@ -180,7 +166,7 @@ public class CodeEditorView extends LinearLayout {
|
||||
((Activity) getContext()).invalidateOptionsMenu();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private ILanguageServer createLanguageServer(File file) {
|
||||
if (!file.isFile()) {
|
||||
return null;
|
||||
@@ -390,7 +376,9 @@ public class CodeEditorView extends LinearLayout {
|
||||
searchLayout.beginSearchMode();
|
||||
}
|
||||
|
||||
/** Mark this files as saved. Even if it not saved. */
|
||||
/**
|
||||
* Mark this files as saved. Even if it not saved.
|
||||
*/
|
||||
public void markAsSaved() {
|
||||
notifySaved();
|
||||
}
|
||||
@@ -408,4 +396,13 @@ public class CodeEditorView extends LinearLayout {
|
||||
super.onDetachedFromWindow();
|
||||
EventBus.getDefault().unregister(this);
|
||||
}
|
||||
|
||||
public void updateFile(@NotNull File file) {
|
||||
final var editor = getEditor();
|
||||
if (editor == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
editor.updateFile(file);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -137,6 +137,11 @@ class EditorViewModel : ViewModel() {
|
||||
mCurrentFile.value = index to file
|
||||
}
|
||||
|
||||
fun updateFile(index: Int, newFile: File) {
|
||||
val files = files.value ?: return
|
||||
files[index] = newFile
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the opened file at the given index.
|
||||
*
|
||||
|
||||
@@ -191,13 +191,17 @@ public class IDEEditor extends CodeEditor implements IEditor, ILspEditor {
|
||||
* @param file The file to set.
|
||||
*/
|
||||
public void setFile(File file) {
|
||||
this.file = file;
|
||||
updateFile(file);
|
||||
|
||||
if (file != null) {
|
||||
dispatchDocumentOpenEvent();
|
||||
}
|
||||
}
|
||||
|
||||
public void updateFile(File file) {
|
||||
this.file = file;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Bundle getExtraArguments() {
|
||||
|
||||
+1
-1
@@ -44,4 +44,4 @@ data class FileDeletionEvent(override val file: File) : FileEvent()
|
||||
*
|
||||
* @author Akash Yadav
|
||||
*/
|
||||
class FileRenameEvent(override val file: File) : FileEvent()
|
||||
class FileRenameEvent(override val file: File, val newFile: File) : FileEvent()
|
||||
Reference in New Issue
Block a user