From 410b6a6043b0687a5b8b2fe5e4cc3631f47d4e20 Mon Sep 17 00:00:00 2001 From: Mihaela Ogrezeanu Date: Wed, 6 Mar 2019 07:49:06 -0800 Subject: [PATCH] Update Section hierarchy when child views change Summary: we only include in the inspector hierarchy the sections which are visible on screen. If as a result of a UI change the hierarchy of visible sections changes (for example when scrolling to a section that wasn't previously visible) this forces the section hierarchy to be recreated. passy not sure if there's an easier way of making the children of a node invalidate, let me know if you have any suggestions Depends on D14300298 Reviewed By: passy Differential Revision: D14301404 fbshipit-source-id: 551e1910d0a80238027e32417aab8d42ed1c00b3 --- .../plugins/inspector/NodeDescriptor.java | 2 +- .../descriptors/ViewGroupDescriptor.java | 3 ++- .../plugins/litho/DebugSectionDescriptor.java | 19 +++++++++++++++ .../litho/LithoRecyclerViewDescriptor.java | 24 ++++++++++++++++++- 4 files changed, 45 insertions(+), 3 deletions(-) diff --git a/android/src/main/java/com/facebook/flipper/plugins/inspector/NodeDescriptor.java b/android/src/main/java/com/facebook/flipper/plugins/inspector/NodeDescriptor.java index 56d3398c9..c62e09e50 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/inspector/NodeDescriptor.java +++ b/android/src/main/java/com/facebook/flipper/plugins/inspector/NodeDescriptor.java @@ -49,7 +49,7 @@ public abstract class NodeDescriptor { * and/or children have changed. This will trigger Flipper to re-query this node getting any new * data. */ - protected final void invalidate(final T node) { + public void invalidate(final T node) { if (mConnection != null) { new ErrorReportingRunnable(mConnection) { @Override diff --git a/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/ViewGroupDescriptor.java b/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/ViewGroupDescriptor.java index 77489578b..f12de21f9 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/ViewGroupDescriptor.java +++ b/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/ViewGroupDescriptor.java @@ -74,7 +74,8 @@ public class ViewGroupDescriptor extends NodeDescriptor { public void runOrThrow() throws Exception { if (connected()) { if (key.set(node)) { - invalidate(node); + NodeDescriptor descriptor = descriptorForClass(node.getClass()); + descriptor.invalidate(node); invalidateAX(node); } diff --git a/android/src/main/java/com/facebook/flipper/plugins/litho/DebugSectionDescriptor.java b/android/src/main/java/com/facebook/flipper/plugins/litho/DebugSectionDescriptor.java index 70b2bc7b9..bb67652da 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/litho/DebugSectionDescriptor.java +++ b/android/src/main/java/com/facebook/flipper/plugins/litho/DebugSectionDescriptor.java @@ -11,6 +11,7 @@ import android.view.View; import android.view.ViewGroup; import androidx.core.view.MarginLayoutParamsCompat; import androidx.core.view.ViewCompat; +import com.facebook.flipper.core.ErrorReportingRunnable; import com.facebook.flipper.core.FlipperDynamic; import com.facebook.flipper.core.FlipperObject; import com.facebook.flipper.plugins.inspector.HighlightedOverlay; @@ -22,6 +23,24 @@ import java.util.ArrayList; import java.util.List; public class DebugSectionDescriptor extends NodeDescriptor { + + @Override + public void invalidate(final DebugSection debugSection) { + super.invalidate(debugSection); + + new ErrorReportingRunnable(mConnection) { + @Override + protected void runOrThrow() throws Exception { + for (int i = 0; i < getChildCount(debugSection); i++) { + Object child = getChildAt(debugSection, i); + if (child instanceof DebugSection) { + invalidate((DebugSection) child); + } + } + } + }.run(); + } + @Override public void init(DebugSection node) throws Exception {} diff --git a/android/src/main/java/com/facebook/flipper/plugins/litho/LithoRecyclerViewDescriptor.java b/android/src/main/java/com/facebook/flipper/plugins/litho/LithoRecyclerViewDescriptor.java index 5377ed691..8c54cfe54 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/litho/LithoRecyclerViewDescriptor.java +++ b/android/src/main/java/com/facebook/flipper/plugins/litho/LithoRecyclerViewDescriptor.java @@ -19,8 +19,30 @@ import java.util.ArrayList; import java.util.List; public class LithoRecyclerViewDescriptor extends NodeDescriptor { + @Override - public void init(LithoRecylerView node) throws Exception {} + public void invalidate(final LithoRecylerView node) { + super.invalidate(node); + + new com.facebook.flipper.core.ErrorReportingRunnable(mConnection) { + @Override + protected void runOrThrow() throws Exception { + final Object child; + child = getChildAt(node, 0); + if (child instanceof DebugSection) { + DebugSection childSection = (DebugSection) child; + final NodeDescriptor descriptor = descriptorForClass(DebugSection.class); + descriptor.invalidate(childSection); + } + } + }.run(); + } + + @Override + public void init(final LithoRecylerView node) throws Exception { + final NodeDescriptor descriptor = descriptorForClass(ViewGroup.class); + descriptor.init(node); + } @Override public String getId(LithoRecylerView node) throws Exception {