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 diagnosticInfoBinding: LayoutDiagnosticInfoBinding? = null
|
||||||
protected var filesTreeFragment: FileTreeFragment? = null
|
protected var filesTreeFragment: FileTreeFragment? = null
|
||||||
protected var editorBottomSheet: BottomSheetBehavior<out View?>? = null
|
protected var editorBottomSheet: BottomSheetBehavior<out View?>? = null
|
||||||
protected var isDestroying = false
|
|
||||||
|
var isDestroying = false
|
||||||
|
protected set
|
||||||
|
|
||||||
protected val log: ILogger = ILogger.newInstance("EditorActivity")
|
protected val log: ILogger = ILogger.newInstance("EditorActivity")
|
||||||
|
|
||||||
|
|||||||
@@ -266,7 +266,7 @@ open class EditorHandlerActivity : ProjectHandlerActivity(), IEditorHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getEditorAtIndex(index: Int): CodeEditorView? {
|
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?) {
|
override fun openFileAndSelect(file: File, selection: Range?) {
|
||||||
|
|||||||
@@ -38,11 +38,22 @@ class EditorBuildEventListener : GradleBuildService.EventListener {
|
|||||||
|
|
||||||
private var activityReference: WeakReference<EditorHandlerActivity> = WeakReference(null)
|
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) {
|
fun setActivity(activity: EditorHandlerActivity) {
|
||||||
this.activityReference = WeakReference(activity)
|
this.activityReference = WeakReference(activity)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun prepareBuild(buildInfo: BuildInfo) {
|
override fun prepareBuild(buildInfo: BuildInfo) {
|
||||||
|
if (!isActivityInaccessible) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
val isFirstBuild = isFirstBuild
|
val isFirstBuild = isFirstBuild
|
||||||
activity()
|
activity()
|
||||||
.setStatus(
|
.setStatus(
|
||||||
@@ -63,6 +74,10 @@ class EditorBuildEventListener : GradleBuildService.EventListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onBuildSuccessful(tasks: List<String?>) {
|
override fun onBuildSuccessful(tasks: List<String?>) {
|
||||||
|
if (!isActivityInaccessible) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
analyzeCurrentFile()
|
analyzeCurrentFile()
|
||||||
|
|
||||||
isFirstBuild = false
|
isFirstBuild = false
|
||||||
@@ -72,12 +87,20 @@ class EditorBuildEventListener : GradleBuildService.EventListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onProgressEvent(event: ProgressEvent) {
|
override fun onProgressEvent(event: ProgressEvent) {
|
||||||
|
if (!isActivityInaccessible) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if (event is ProjectConfigurationStartEvent || event is TaskStartEvent) {
|
if (event is ProjectConfigurationStartEvent || event is TaskStartEvent) {
|
||||||
activity().setStatus(event.descriptor.displayName)
|
activity().setStatus(event.descriptor.displayName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBuildFailed(tasks: List<String?>) {
|
override fun onBuildFailed(tasks: List<String?>) {
|
||||||
|
if (!isActivityInaccessible) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
analyzeCurrentFile()
|
analyzeCurrentFile()
|
||||||
|
|
||||||
isFirstBuild = false
|
isFirstBuild = false
|
||||||
@@ -87,6 +110,10 @@ class EditorBuildEventListener : GradleBuildService.EventListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onOutput(line: String?) {
|
override fun onOutput(line: String?) {
|
||||||
|
if (!isActivityInaccessible) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
line?.let { activity().appendBuildOutput(it) }
|
line?.let { activity().appendBuildOutput(it) }
|
||||||
// TODO This can be handled better when ProgressEvents are received from Tooling API server
|
// TODO This can be handled better when ProgressEvents are received from Tooling API server
|
||||||
if (line!!.contains("BUILD SUCCESSFUL") || line.contains("BUILD FAILED")) {
|
if (line!!.contains("BUILD SUCCESSFUL") || line.contains("BUILD FAILED")) {
|
||||||
@@ -95,6 +122,10 @@ class EditorBuildEventListener : GradleBuildService.EventListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun analyzeCurrentFile() {
|
private fun analyzeCurrentFile() {
|
||||||
|
if (!isActivityInaccessible) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
val editorView = activity().getCurrentEditor()
|
val editorView = activity().getCurrentEditor()
|
||||||
if (editorView != null) {
|
if (editorView != null) {
|
||||||
val editor = editorView.editor
|
val editor = editorView.editor
|
||||||
|
|||||||
Reference in New Issue
Block a user