mirror of
https://gitee.com/zhangsken/AndroidIDE.git
synced 2026-10-16 07:49:44 +08:00
fix: check for activity accessibility for each build callback in EditorBuildEventListener (#1604)
This commit is contained in:
@@ -104,7 +104,9 @@ abstract class BaseEditorActivity :
|
||||
protected var diagnosticInfoBinding: LayoutDiagnosticInfoBinding? = null
|
||||
protected var filesTreeFragment: FileTreeFragment? = null
|
||||
protected var editorBottomSheet: BottomSheetBehavior<out View?>? = null
|
||||
protected var isDestroying = false
|
||||
|
||||
var isDestroying = false
|
||||
protected set
|
||||
|
||||
protected val log: ILogger = ILogger.newInstance("EditorActivity")
|
||||
|
||||
|
||||
@@ -266,7 +266,7 @@ open class EditorHandlerActivity : ProjectHandlerActivity(), IEditorHandler {
|
||||
}
|
||||
|
||||
override fun getEditorAtIndex(index: Int): CodeEditorView? {
|
||||
return binding.editorContainer.getChildAt(index) as CodeEditorView?
|
||||
return _binding?.editorContainer?.getChildAt(index) as CodeEditorView?
|
||||
}
|
||||
|
||||
override fun openFileAndSelect(file: File, selection: Range?) {
|
||||
|
||||
@@ -38,11 +38,22 @@ class EditorBuildEventListener : GradleBuildService.EventListener {
|
||||
|
||||
private var activityReference: WeakReference<EditorHandlerActivity> = WeakReference(null)
|
||||
|
||||
private val isActivityInaccessible: Boolean
|
||||
get() {
|
||||
return activityReference.get()?.let { activity ->
|
||||
activity.isDestroyed || activity.isFinishing || activity.isDestroying
|
||||
} == true
|
||||
}
|
||||
|
||||
fun setActivity(activity: EditorHandlerActivity) {
|
||||
this.activityReference = WeakReference(activity)
|
||||
}
|
||||
|
||||
override fun prepareBuild(buildInfo: BuildInfo) {
|
||||
if (!isActivityInaccessible) {
|
||||
return
|
||||
}
|
||||
|
||||
val isFirstBuild = isFirstBuild
|
||||
activity()
|
||||
.setStatus(
|
||||
@@ -63,6 +74,10 @@ class EditorBuildEventListener : GradleBuildService.EventListener {
|
||||
}
|
||||
|
||||
override fun onBuildSuccessful(tasks: List<String?>) {
|
||||
if (!isActivityInaccessible) {
|
||||
return
|
||||
}
|
||||
|
||||
analyzeCurrentFile()
|
||||
|
||||
isFirstBuild = false
|
||||
@@ -72,12 +87,20 @@ class EditorBuildEventListener : GradleBuildService.EventListener {
|
||||
}
|
||||
|
||||
override fun onProgressEvent(event: ProgressEvent) {
|
||||
if (!isActivityInaccessible) {
|
||||
return
|
||||
}
|
||||
|
||||
if (event is ProjectConfigurationStartEvent || event is TaskStartEvent) {
|
||||
activity().setStatus(event.descriptor.displayName)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onBuildFailed(tasks: List<String?>) {
|
||||
if (!isActivityInaccessible) {
|
||||
return
|
||||
}
|
||||
|
||||
analyzeCurrentFile()
|
||||
|
||||
isFirstBuild = false
|
||||
@@ -87,6 +110,10 @@ class EditorBuildEventListener : GradleBuildService.EventListener {
|
||||
}
|
||||
|
||||
override fun onOutput(line: String?) {
|
||||
if (!isActivityInaccessible) {
|
||||
return
|
||||
}
|
||||
|
||||
line?.let { activity().appendBuildOutput(it) }
|
||||
// TODO This can be handled better when ProgressEvents are received from Tooling API server
|
||||
if (line!!.contains("BUILD SUCCESSFUL") || line.contains("BUILD FAILED")) {
|
||||
@@ -95,6 +122,10 @@ class EditorBuildEventListener : GradleBuildService.EventListener {
|
||||
}
|
||||
|
||||
private fun analyzeCurrentFile() {
|
||||
if (!isActivityInaccessible) {
|
||||
return
|
||||
}
|
||||
|
||||
val editorView = activity().getCurrentEditor()
|
||||
if (editorView != null) {
|
||||
val editor = editorView.editor
|
||||
|
||||
Reference in New Issue
Block a user