diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ApplicationRefDescriptor.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ApplicationRefDescriptor.kt index 7bf0f27af..4a3beadc7 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ApplicationRefDescriptor.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ApplicationRefDescriptor.kt @@ -9,6 +9,7 @@ package com.facebook.flipper.plugins.uidebugger.descriptors import android.app.Activity import android.view.View +import android.view.ViewGroup import com.facebook.flipper.plugins.uidebugger.core.ApplicationRef import com.facebook.flipper.plugins.uidebugger.model.Bounds import com.facebook.flipper.plugins.uidebugger.util.DisplayMetrics @@ -34,17 +35,21 @@ object ApplicationRefDescriptor : ChainedDescriptor() { val activeRoots = node.rootsResolver.rootViews() - val added = mutableSetOf() - for (activity: Activity in node.activitiesStack) { - children.add(activity) - added.add(activity.window.decorView) - } + val decorViewToActivity: Map = + node.activitiesStack.toList().map { it.window.decorView to it }.toMap() - // Picks up root views not tied to an activity (dialogs) for (root in activeRoots) { - if (!added.contains(root)) { - children.add(root) - added.add(root) + // if there is an activity for this root view use that, + // if not just return the mystery floating decor view + val activity = decorViewToActivity[root] + if (activity != null) { + children.add(activity) + } else { + if (root is ViewGroup && root.childCount > 0) { + // sometimes there is a root view on top that has no children and we dont want to add + // these as they will become active + children.add(root) + } } }