mirror of
https://gitee.com/zhangsken/AndroidIDE.git
synced 2026-10-16 07:49:44 +08:00
feat: maintain insertion and inflation order of ActionItems
This commit is contained in:
+4
-4
@@ -41,7 +41,7 @@ import java.util.concurrent.ConcurrentHashMap
|
||||
class DefaultActionsRegistry : ActionsRegistry() {
|
||||
|
||||
private val log = ILogger.newInstance("DefaultActionsRegistry")
|
||||
private val actions = ConcurrentHashMap<String, HashMap<String, ActionItem>>()
|
||||
private val actions = ConcurrentHashMap<String, LinkedHashMap<String, ActionItem>>()
|
||||
private val listeners = mutableSetOf<ActionExecListener>()
|
||||
|
||||
init {
|
||||
@@ -50,15 +50,15 @@ class DefaultActionsRegistry : ActionsRegistry() {
|
||||
|
||||
override fun getActions(location: ActionItem.Location): MutableMap<String, ActionItem> {
|
||||
if (actions[location.id] == null) {
|
||||
actions[location.id] = hashMapOf()
|
||||
actions[location.id] = java.util.LinkedHashMap()
|
||||
}
|
||||
|
||||
return actions[location.id]!!
|
||||
}
|
||||
|
||||
override fun registerAction(action: ActionItem): Boolean {
|
||||
val actionsAtLocation = getActions(action.location)
|
||||
actionsAtLocation[action.id] = action
|
||||
val actions = getActions(action.location)
|
||||
actions[action.id] = action
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
@@ -73,7 +73,6 @@ import com.itsaky.androidide.lsp.models.DiagnosticItem
|
||||
import com.itsaky.androidide.models.DiagnosticGroup
|
||||
import com.itsaky.androidide.models.LogLine
|
||||
import com.itsaky.androidide.models.OpenedFile
|
||||
import com.itsaky.androidide.models.OpenedFilesCache
|
||||
import com.itsaky.androidide.models.Range
|
||||
import com.itsaky.androidide.models.SearchResult
|
||||
import com.itsaky.androidide.projects.ProjectManager.getProjectDirPath
|
||||
@@ -86,7 +85,6 @@ import com.itsaky.androidide.ui.editor.CodeEditorView
|
||||
import com.itsaky.androidide.uidesigner.UIDesignerActivity
|
||||
import com.itsaky.androidide.utils.ActionMenuUtils.createMenu
|
||||
import com.itsaky.androidide.utils.DialogUtils.newMaterialDialogBuilder
|
||||
import com.itsaky.androidide.utils.EditorActivityActions.Companion.register as registerActivityActions
|
||||
import com.itsaky.androidide.utils.ILogger
|
||||
import com.itsaky.androidide.utils.InstallationResultHandler.onResult
|
||||
import com.itsaky.androidide.utils.SingleSessionCallback
|
||||
@@ -161,7 +159,7 @@ abstract class BaseEditorActivity :
|
||||
protected abstract fun doSaveAll(): Boolean
|
||||
protected abstract fun doDismissSearchProgress()
|
||||
protected abstract fun doConfirmProjectClose()
|
||||
protected abstract fun getOpenedFiles() : List<OpenedFile>
|
||||
protected abstract fun getOpenedFiles(): List<OpenedFile>
|
||||
|
||||
protected open fun preDestroy() {
|
||||
viewModel.isConfigChange = !isDestroying
|
||||
@@ -236,8 +234,6 @@ abstract class BaseEditorActivity :
|
||||
setupContainers()
|
||||
setupDiagnosticInfo()
|
||||
|
||||
registerActivityActions(this)
|
||||
|
||||
uiDesignerResultLauncher =
|
||||
registerForActivityResult(StartActivityForResult(), this::handleUiDesignerResult)
|
||||
}
|
||||
@@ -260,11 +256,6 @@ abstract class BaseEditorActivity :
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
// Actions are cleared when the activity is paused to avoid holding references to the activity
|
||||
// So, when resumed, they should be registered and inflated again.
|
||||
// Actions are cleared when the activity is paused to avoid holding references to the activity
|
||||
// So, when resumed, they should be registered and inflated again.
|
||||
registerActivityActions(this)
|
||||
invalidateOptionsMenu()
|
||||
|
||||
try {
|
||||
@@ -365,7 +356,7 @@ abstract class BaseEditorActivity :
|
||||
}
|
||||
|
||||
open fun showDaemonStatus() {
|
||||
val shell = app.newShell{ t -> getDaemonStatusFragment().append(t) }
|
||||
val shell = app.newShell { t -> getDaemonStatusFragment().append(t) }
|
||||
shell.bgAppend(String.format("echo '%s'", getString(string.msg_getting_daemom_status)))
|
||||
shell.bgAppend(
|
||||
String.format("cd '%s' && sh gradlew --status", Objects.requireNonNull(getProjectDirPath()))
|
||||
@@ -492,7 +483,7 @@ abstract class BaseEditorActivity :
|
||||
viewModel._isBuildInProgress.observe(this) { onBuildStatusChanged() }
|
||||
viewModel._isInitializing.observe(this) { onBuildStatusChanged() }
|
||||
viewModel._statusText.observe(this) { binding.bottomSheet.setStatus(it.first, it.second) }
|
||||
|
||||
|
||||
viewModel.observeFiles(this) { files ->
|
||||
binding.apply {
|
||||
if (files == null || files.isEmpty()) {
|
||||
@@ -504,7 +495,7 @@ abstract class BaseEditorActivity :
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
setupNoEditorView()
|
||||
setupBottomSheet()
|
||||
|
||||
@@ -688,4 +679,4 @@ abstract class BaseEditorActivity :
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
package com.itsaky.androidide.handlers
|
||||
|
||||
import android.content.Context
|
||||
import androidx.lifecycle.DefaultLifecycleObserver
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import com.itsaky.androidide.eventbus.events.Event
|
||||
@@ -31,6 +32,7 @@ import com.itsaky.androidide.projects.FileManager
|
||||
import com.itsaky.androidide.projects.ProjectManager
|
||||
import com.itsaky.androidide.projects.util.BootClasspathProvider
|
||||
import com.itsaky.androidide.utils.EditorActivityActions
|
||||
import com.itsaky.androidide.utils.EditorActivityActions.Companion
|
||||
import com.itsaky.androidide.utils.Environment
|
||||
import java.util.concurrent.CompletableFuture
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
@@ -45,6 +47,7 @@ class EditorActivityLifecyclerObserver : DefaultLifecycleObserver {
|
||||
private val fileActionsHandler = FileTreeActionHandler()
|
||||
|
||||
override fun onCreate(owner: LifecycleOwner) {
|
||||
EditorActivityActions.register(owner as Context)
|
||||
dispatchEvent(OnCreateEvent())
|
||||
}
|
||||
|
||||
@@ -56,6 +59,7 @@ class EditorActivityLifecyclerObserver : DefaultLifecycleObserver {
|
||||
}
|
||||
|
||||
override fun onResume(owner: LifecycleOwner) {
|
||||
EditorActivityActions.register(owner as Context)
|
||||
dispatchEvent(OnResumeEvent())
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user