From 205a39b6bf780570d73a509fd8621922cdf226e7 Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Fri, 20 Jan 2023 20:24:33 +0530 Subject: [PATCH] fix: memory leak caused due to retained ViewInfoSheet instance in DesignerWorkspaceFragment --- .../uidesigner/fragments/DesignerWorkspaceFragment.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/uidesigner/src/main/java/com/itsaky/androidide/uidesigner/fragments/DesignerWorkspaceFragment.kt b/uidesigner/src/main/java/com/itsaky/androidide/uidesigner/fragments/DesignerWorkspaceFragment.kt index 2be73ad7e..1b9ba92d9 100644 --- a/uidesigner/src/main/java/com/itsaky/androidide/uidesigner/fragments/DesignerWorkspaceFragment.kt +++ b/uidesigner/src/main/java/com/itsaky/androidide/uidesigner/fragments/DesignerWorkspaceFragment.kt @@ -56,10 +56,13 @@ class DesignerWorkspaceFragment : BaseFragment() { private var binding: FragmentDesignerWorkspaceBinding? = null internal val viewModel by viewModels(ownerProducer = { requireActivity() }) + private var _viewInfo: ViewInfoSheet? = null private val touchSlop by lazy { get(requireContext()).scaledTouchSlop } - private val viewInfo by lazy { ViewInfoSheet() } private val inflater by lazy { UiLayoutInflater() } + private val viewInfo: ViewInfoSheet + get() = this._viewInfo ?: ViewInfoSheet().also { _viewInfo = it } + internal var isInflating = false internal val workspaceView by lazy { UiViewGroup(LayoutFile(File(""), ""), LinearLayout::class.qualifiedName!!, binding!!.workspace) @@ -136,13 +139,14 @@ class DesignerWorkspaceFragment : BaseFragment() { override fun onDestroyView() { super.onDestroyView() this.binding = null + this._viewInfo = null this.hierarchyHandler.release() this.attrHandler.release() this.inflationHandler.release() this.inflater.close() } - internal fun setupView(view: com.itsaky.androidide.inflater.IView) { + internal fun setupView(view: IView) { if (view is CommonUiView && !view.needSetup) { return } @@ -171,7 +175,7 @@ class DesignerWorkspaceFragment : BaseFragment() { } } - internal fun showViewInfo(view: com.itsaky.androidide.inflater.IView) { + internal fun showViewInfo(view: IView) { viewModel.view = view viewInfo.show(childFragmentManager, ViewInfoSheet.TAG) }