diff --git a/android/src/main/java/com/facebook/flipper/plugins/inspector/InspectorFlipperPlugin.java b/android/src/main/java/com/facebook/flipper/plugins/inspector/InspectorFlipperPlugin.java index d30e9d7ba..51876eaa6 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/inspector/InspectorFlipperPlugin.java +++ b/android/src/main/java/com/facebook/flipper/plugins/inspector/InspectorFlipperPlugin.java @@ -133,6 +133,7 @@ public class InspectorFlipperPlugin implements FlipperPlugin { } }); connection.receive("getRoot", mGetRoot); + connection.receive("getAllNodes", mGetAllNodes); connection.receive("getNodes", mGetNodes); connection.receive("setData", mSetData); connection.receive("setHighlighted", mSetHighlighted); @@ -173,7 +174,7 @@ public class InspectorFlipperPlugin implements FlipperPlugin { @Override public boolean runInBackground() { - return false; + return true; } final FlipperReceiver mShouldShowLithoAccessibilitySettings = @@ -207,6 +208,31 @@ public class InspectorFlipperPlugin implements FlipperPlugin { responder.success(getAXNode(trackObject(mApplication))); } }; + final FlipperReceiver mGetAllNodes = + new MainThreadFlipperReceiver(mConnection) { + @Override + public void onReceiveOnMainThread( + final FlipperObject params, final FlipperResponder responder) throws Exception { + final FlipperObject.Builder result = new FlipperObject.Builder(); + final FlipperObject.Builder AXResults = new FlipperObject.Builder(); + + String rootID = trackObject(mApplication); + populateAllAXNodes(rootID, AXResults); + populateAllNodes(rootID, result); + final FlipperObject output = + new FlipperObject.Builder() + .put( + "allNodes", + new FlipperObject.Builder() + .put("elements", result.build()) + .put("AXelements", AXResults.build()) + .put("rootElement", rootID) + .put("rootAXElement", rootID) + .build()) + .build(); + responder.success(output); + } + }; final FlipperReceiver mGetNodes = new MainThreadFlipperReceiver(mConnection) { @@ -235,6 +261,24 @@ public class InspectorFlipperPlugin implements FlipperPlugin { } }; + void populateAllNodes(String rootNode, FlipperObject.Builder builder) throws Exception { + FlipperObject object = getNode(rootNode); + builder.put(rootNode, object); + FlipperArray children = object.getArray("children"); + for (int i = 0, count = children.length(); i < count; ++i) { + populateAllNodes(children.getString(i), builder); + } + } + + void populateAllAXNodes(String rootNode, FlipperObject.Builder builder) throws Exception { + FlipperObject object = getAXNode(rootNode); + builder.put(rootNode, object); + FlipperArray children = object.getArray("children"); + for (int i = 0, count = children.length(); i < count; ++i) { + populateAllAXNodes(children.getString(i), builder); + } + } + final FlipperReceiver mGetAXNodes = new MainThreadFlipperReceiver(mConnection) { @Override diff --git a/src/PluginContainer.js b/src/PluginContainer.js index 70b4d43a7..0af6bf572 100644 --- a/src/PluginContainer.js +++ b/src/PluginContainer.js @@ -183,8 +183,9 @@ export default connect( pluginKey = getPluginKey(target.id, activePlugin.id); } } - const isArchivedDevice = selectedDevice instanceof ArchivedDevice; - + const isArchivedDevice = !selectedDevice + ? false + : selectedDevice instanceof ArchivedDevice; return { pluginState: pluginStates[pluginKey], activePlugin, diff --git a/src/plugins/layout/layout2/ProxyArchiveClient.js b/src/plugins/layout/layout2/ProxyArchiveClient.js index 78a95b9ce..8215b5650 100644 --- a/src/plugins/layout/layout2/ProxyArchiveClient.js +++ b/src/plugins/layout/layout2/ProxyArchiveClient.js @@ -49,7 +49,9 @@ export function searchNodes( AXMode: boolean, state: PersistedState, ): ?SearchResultTree { - const elements = state[propsForPersistedState(AXMode).ELEMENTS]; + // Even if the axMode is true, we will have to search the normal elements too. + // The AXEelements will automatically populated in constructSearchResultTree + const elements = state[propsForPersistedState(false).ELEMENTS]; const children: Array = []; const match = isMatch(node, query); diff --git a/src/plugins/layout/layout2/__tests__/ProxyArchiveClient.node.js b/src/plugins/layout/layout2/__tests__/ProxyArchiveClient.node.js index cb397f0ec..ebb17ce50 100644 --- a/src/plugins/layout/layout2/__tests__/ProxyArchiveClient.node.js +++ b/src/plugins/layout/layout2/__tests__/ProxyArchiveClient.node.js @@ -83,10 +83,9 @@ function populateChildren(state: PersistedState, axMode: boolean) { 'child1_child1 view', [], ); + state.elements = elements; if (axMode) { state.AXelements = elements; - } else { - state.elements = elements; } } diff --git a/src/plugins/layout/layout2/index.js b/src/plugins/layout/layout2/index.js index 4700a1446..7317c28ea 100644 --- a/src/plugins/layout/layout2/index.js +++ b/src/plugins/layout/layout2/index.js @@ -67,11 +67,7 @@ export default class Layout extends FlipperPlugin { if (!store) { return defaultPromise; } - const selectedDevice = store.getState().connections.selectedDevice; - if (selectedDevice && selectedDevice.os === 'iOS') { - return callClient('getAllNodes').then(({allNodes}) => allNodes); - } - return defaultPromise; + return callClient('getAllNodes').then(({allNodes}) => allNodes); }; static defaultPersistedState = {