Fixed bounds for native views mounted by litho
Summary: We had an issue where the offset for a native view was effectively caclculated twice and summed, once by litho and once by android. Given the UI debugger expects a nodes bounds to be w.r.t its parent the android systems x,y offset is 'wrong' from ui debuggers perspective, we set it to 0,0 and rely on the calculated offsets by the litho component hierachy Reviewed By: lblasa Differential Revision: D39695663 fbshipit-source-id: d9c2be950fc68bc2286359a62746356e89299cfd
This commit is contained in:
committed by
Facebook GitHub Bot
parent
31fb3dd5be
commit
ed662d2468
@@ -9,7 +9,9 @@ package com.facebook.flipper.plugins.uidebugger.litho
|
||||
|
||||
import com.facebook.flipper.plugins.uidebugger.common.InspectableObject
|
||||
import com.facebook.flipper.plugins.uidebugger.descriptors.BaseTags
|
||||
import com.facebook.flipper.plugins.uidebugger.descriptors.DescriptorRegister
|
||||
import com.facebook.flipper.plugins.uidebugger.descriptors.NodeDescriptor
|
||||
import com.facebook.flipper.plugins.uidebugger.descriptors.SectionName
|
||||
import com.facebook.flipper.plugins.uidebugger.model.Bounds
|
||||
import com.facebook.litho.DebugComponent
|
||||
import com.facebook.litho.LithoView
|
||||
@@ -39,7 +41,37 @@ object LithoViewDescriptor : NodeDescriptor<LithoView> {
|
||||
|
||||
const val LithoTag = "Litho"
|
||||
|
||||
object DebugComponentDescriptor : NodeDescriptor<DebugComponent> {
|
||||
/** a drawable or view that is mounted, along with the correct descriptor */
|
||||
class MountedObject(val obj: Any, val descriptor: NodeDescriptor<Any>)
|
||||
|
||||
object MountedObjectDescriptor : NodeDescriptor<MountedObject> {
|
||||
override fun getId(node: MountedObject): String = node.descriptor.getId(node.obj)
|
||||
|
||||
override fun getBounds(node: MountedObject): Bounds? {
|
||||
val bounds = node.descriptor.getBounds(node.obj)
|
||||
|
||||
/**
|
||||
* When we ask android for the bounds the x,y offset is w.r.t to the nearest android parent view
|
||||
* group. From UI debuggers perspective using the raw android offset will double the total
|
||||
* offset of this native view as the offset is included by the litho components between the
|
||||
* mounted view and its native parent
|
||||
*/
|
||||
return bounds?.copy(x = 0, y = 0)
|
||||
}
|
||||
|
||||
override fun getName(node: MountedObject): String = node.descriptor.getName(node.obj)
|
||||
|
||||
override fun getChildren(node: MountedObject): List<Any> = node.descriptor.getChildren(node.obj)
|
||||
|
||||
override fun getActiveChild(node: MountedObject): Any? = node.descriptor.getActiveChild(node.obj)
|
||||
|
||||
override fun getData(node: MountedObject): Map<SectionName, InspectableObject> =
|
||||
node.descriptor.getData(node.obj)
|
||||
|
||||
override fun getTags(node: MountedObject): Set<String> = node.descriptor.getTags(node.obj)
|
||||
}
|
||||
|
||||
class DebugComponentDescriptor(val register: DescriptorRegister) : NodeDescriptor<DebugComponent> {
|
||||
override fun getId(node: DebugComponent): String = System.identityHashCode(node).toString()
|
||||
|
||||
override fun getName(node: DebugComponent): String {
|
||||
@@ -53,9 +85,12 @@ object DebugComponentDescriptor : NodeDescriptor<DebugComponent> {
|
||||
val mountedDrawable = node.mountedDrawable
|
||||
|
||||
if (mountedView != null) {
|
||||
result.add(mountedView)
|
||||
val descriptor: NodeDescriptor<Any> = register.descriptorForClassUnsafe(mountedView.javaClass)
|
||||
result.add(MountedObject(mountedView, descriptor))
|
||||
} else if (mountedDrawable != null) {
|
||||
result.add(mountedDrawable)
|
||||
val descriptor: NodeDescriptor<Any> =
|
||||
register.descriptorForClassUnsafe(mountedDrawable.javaClass)
|
||||
result.add(MountedObject(mountedDrawable, descriptor))
|
||||
} else {
|
||||
for (child in node.childComponents) {
|
||||
result.add(child)
|
||||
|
||||
@@ -16,7 +16,8 @@ object UIDebuggerLithoSupport {
|
||||
|
||||
fun addDescriptors(register: DescriptorRegister) {
|
||||
register.register(LithoView::class.java, LithoViewDescriptor)
|
||||
register.register(DebugComponent::class.java, DebugComponentDescriptor)
|
||||
register.register(MountedObject::class.java, MountedObjectDescriptor)
|
||||
register.register(DebugComponent::class.java, DebugComponentDescriptor(register))
|
||||
}
|
||||
|
||||
fun addObserver(observerFactory: TreeObserverFactory) {
|
||||
|
||||
Reference in New Issue
Block a user