fix: startParse() not called

This commit is contained in:
Akash Yadav
2022-11-25 09:21:21 +05:30
parent 159b9c18fa
commit c2c21c5b94
5 changed files with 25 additions and 3 deletions
Binary file not shown.
@@ -27,6 +27,7 @@ import com.itsaky.androidide.fragments.BaseFragment
import com.itsaky.androidide.inflater.IInflateEventsListener
import com.itsaky.androidide.inflater.ILayoutInflater
import com.itsaky.androidide.inflater.OnInflateViewEvent
import com.itsaky.androidide.inflater.internal.utils.startParse
import com.itsaky.androidide.uidesigner.UIDesignerActivity
import com.itsaky.androidide.uidesigner.databinding.FragmentDesignerWorkspaceBinding
import com.itsaky.androidide.uidesigner.databinding.LayoutDesignerErrorBinding
@@ -85,7 +86,7 @@ class DesignerWorkspaceFragment : BaseFragment() {
emptyList()
}
if (inflated.isEmpty()) {
binding!!.workspace.addView(createErrorView("Failed to infflate view"))
binding!!.workspace.addView(createErrorView("Failed to inflate view"))
}
}
@@ -30,6 +30,6 @@
android:background="@drawable/bg_designer_view"
android:backgroundTint="@color/primaryLightColor"
android:backgroundTintMode="src_atop"
android:orientation="horizontal" />
android:orientation="vertical" />
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -45,7 +45,10 @@ import com.itsaky.androidide.inflater.InflationStartEvent
import com.itsaky.androidide.inflater.OnApplyAttributeEvent
import com.itsaky.androidide.inflater.OnInflateViewEvent
import com.itsaky.androidide.inflater.internal.utils.IDTable
import com.itsaky.androidide.inflater.internal.utils.endParse
import com.itsaky.androidide.inflater.internal.utils.isParsing
import com.itsaky.androidide.inflater.internal.utils.parseLayoutReference
import com.itsaky.androidide.inflater.internal.utils.startParse
import com.itsaky.androidide.projects.ProjectManager
import com.itsaky.androidide.projects.api.AndroidModule
import com.itsaky.androidide.utils.ILogger
@@ -75,10 +78,14 @@ open class LayoutInflaterImpl : ILayoutInflater() {
override fun inflate(file: File, parent: ViewGroup): List<IView> {
this._primaryInflatingFile = file
IDTable.newRound()
if (!isParsing) {
startParse(file)
}
inflationEventListener?.onEvent(InflationStartEvent())
return doInflate(file, parent).apply {
inflationEventListener?.onEvent(InflationFinishEvent(this))
_primaryInflatingFile = null
endParse()
}
}
@@ -22,14 +22,28 @@ import com.itsaky.androidide.projects.api.AndroidModule
import java.io.File
private var currentModule: AndroidModule? = null
var isParsing: Boolean = false
private set
val module: AndroidModule
get() =
currentModule ?: throw IllegalStateException("You must call startParse(AndroidModule) first")
fun startParse(file: File) {
if (isParsing) {
return
}
(ProjectManager.findModuleForFile(file) as? AndroidModule)?.let {
startParse(it)
}
}
fun startParse(m: AndroidModule) {
currentModule = m
isParsing = true
}
fun endParse() {
currentModule = null
}
isParsing = false
}