Commit Graph

2838 Commits

Author SHA1 Message Date
Luke De Feo
477eae1993 Hit test can produce multiple nodes
Summary:
There are situations where multiple siblings overlap and they are both hit. Previously we picked the first one in the hierachy. Now we produce a list of hit children. The list will not have 2 nodes in the same ancestor path.

We store the hovered nodes as a list as we may want to present a modal in future to ask user which node they indented to select. That said simply sorting nodes by area seems to give decent results so we can start with this

Reviewed By: lblasa

Differential Revision: D41220271

fbshipit-source-id: 643a369113da28e8c4749725a7aee7aa5d08c401
2022-11-14 07:05:58 -08:00
Luke De Feo
062e87f50f Use mouse position for hit test for 2D vizualizer
Summary:
The Dom events for the divs that are very close together were not firing correctly causing the old implementation to not track the hovered node correctly. This was really frustrating trying to select a node amongst many close neighbours.

The new approach uses the mouse x,y position and performs a hit test. Currently we do a dfs looking for the first deepest child that interests the mouse x,y. In a future diff we will extract a list when there are multiple candidates.

Hovered node was removed from react props since both the tree and visualisor depend on it meaning when hover state changes the whole app is rerendered. Instead we have moved hover state to an atom which is subscribed to by each visualsation node. Only if the old or new value matches the particular nodes id do we set state. The viz nodes were memo'd to prevent children renderning. The result is that for a hover change at most 2 nodes out of the 500 or so will rerender.

I attempted to do the same with the tree but it wasnt working with the controlled tree environment + focus state. The perf seems fine as is so will leave it for now

Reviewed By: lblasa

Differential Revision: D41218324

fbshipit-source-id: 7f80bcee256abad2689a88d7e209f92417aab672
2022-11-14 07:05:58 -08:00
Luke De Feo
bfe098485f Nested node structure for vizualiser
Summary: This structure makes sense for the vizualiser which itself is a nested structure. It also saves the awkward branch of there is no key in the map.

Reviewed By: lblasa

Differential Revision: D40670371

fbshipit-source-id: 6c1b960a77749be9e8a193decf6b8d50ce6c7968
2022-11-14 07:05:58 -08:00
Michel Weststrate
7626453f55 Fall back to memory password storage if keytar is not available
Summary:
Not in all environments keytar is available, but still it will be useful to be able to login to intern with Flipper, even for temporarily sessions. This solution falls back to in memory storage.

Note that the underlying assuption is that multiple different users are not connected to the same Flipper server, as this would share their session!

https://fb.workplace.com/groups/flippersupport/permalink/1498550730625580/

Reviewed By: passy

Differential Revision: D41218132

fbshipit-source-id: 6e518d742df639bfbdc9a36ed1fa56ecb363a0b0
2022-11-11 08:28:25 -08:00
Shreesh Ayachit
79bf56e72c Add export and import to Shared Preferences plugin
Summary:
We want to enable backing up and restoring debug settings between app installations.

Currently it is a manual process to click into menu and perform multiple operations.

With this feature, we can export and import shared preferences which will eliminate manual steps on devices.

Reviewed By: mweststrate

Differential Revision: D40987341

fbshipit-source-id: 15dd9600ee5cfd80a085117bdba4d434e4d2198f
2022-11-11 07:09:09 -08:00
Lorenzo Blasa
612bd69605 Styles refactoring
Summary: This change extracts most styles used across the inspector components and puts them in Styles.tsx

Reviewed By: passy

Differential Revision: D41026862

fbshipit-source-id: 461a78fb4a707d9a455281ec020bac95191ddfce
2022-11-11 03:22:39 -08:00
Lorenzo Blasa
f33e3fc78b Add qualified name to Node
Summary:
Our descriptors currently have a method to return the name as it will be displayed on the elements hierarchy.

However, it doesn't provide enough context if the name is to be used to discover the type in our code base.

This change adds a qualified name method that can provide a more complete name which can indeed be used by the Open In IDE functionality, for example.

Reviewed By: passy

Differential Revision: D40936785

fbshipit-source-id: 790ae02b9ebf37501765c52a24307fcaaaf9c14d
2022-11-11 03:22:39 -08:00
Lorenzo Blasa
51ca3a6cd7 Expose env via flipperLib
Summary:
This change exposes the env variables via the FlipperLib interface used by plugins.

The variables are already white-listed and safe to be used by plugins according to documentation.

Reviewed By: antonk52

Differential Revision: D40852147

fbshipit-source-id: bbb3b052d33bf5cf75c81166af2400fe6a359256
2022-11-10 12:40:27 -08:00
Lorenzo Blasa
caaded026b Big Grep Search
Summary: Add Big Grep Search for Android elements.

Reviewed By: antonk52

Differential Revision: D40634183

fbshipit-source-id: faecfc8900211478655ddff6499ff797e3136f91
2022-11-10 11:52:28 -08:00
Lorenzo Blasa
01dc22b1ab Attributes Metadata
Summary:
Before this change, attributes and attribute metadata were intermingled and sent as one unit via subtree update event.

This represented a few issues:
- Repetitiveness. For each declared and dynamic attribute, metadata was included on each value unit.
- Metadata can vary in size and thus can have a negative impact on payload size.
- The attribute name which is part of metadata is a string which always overhead on processing.
- Metadata instantiation is not cheap thus this also incurs in processing overhead i.e. even instantiating a single string can have an impact.

The proposal is to separate metadata of attributes from the actual node reported attributes. This solves the problems mentioned above.

Reviewed By: LukeDefeo

Differential Revision: D40674156

fbshipit-source-id: 0788551849fbce53065f819ba503e7e4afc03cc0
2022-11-10 11:52:28 -08:00
generatedunixname89002005306973
019bcaeb9e Flipper Release: v0.174.0
Summary: Releasing version 0.174.0

Reviewed By: mweststrate

Differential Revision: D41154768

fbshipit-source-id: bc9dbccae2ae413024a6573ec7ba57f4933f1741
2022-11-10 06:52:13 -08:00
Andrey Goncharov
7e9166137c Add verbose logging for Android cert exchange
Reviewed By: lblasa

Differential Revision: D40981864

fbshipit-source-id: f99f517c5abdce839a441c21d50ce8488b249313
2022-11-04 08:23:44 -07:00
Andrey Goncharov
2c767e1920 Make the universal export work on the older Android devices
Summary: On older Android devices (API 24) `-printf ` is not available

Reviewed By: lblasa

Differential Revision: D40980640

fbshipit-source-id: d1a1bcadc496deaf3d514c1e45b2e0104a937b18
2022-11-04 08:23:44 -07:00
Andrey Goncharov
26241cf5c0 Skip logging data for the 'upload-scibe-logs-event''
Summary:
Logging data for this event turnslogs into unreadable mess
{F789339377}

Reviewed By: lblasa

Differential Revision: D40978819

fbshipit-source-id: ac0894b2a490aa902180c50e7712b168211c7013
2022-11-04 08:23:44 -07:00
Andrey Goncharov
2a108854d2 Make flipper-server-client gracefully handle malformed messages
Summary: FlipperServerClient can use any socket to transfer the data. Since we do not control the socket, we cannot guarantee what comes out of it (hello, Jest E2E tunnel!). We need to handle unexpected messages gracefully.

Reviewed By: passy

Differential Revision: D40891384

fbshipit-source-id: 6f873037aa49bac3fc4c09fa49483cdec537ae40
2022-11-03 06:57:17 -07:00
Andrey Goncharov
60a439ef7b Remove window refernce from flipper-server-client
Summary: Remove `window` reference to use flipper-server-client in NodeJS context (windows is not defined there)

Reviewed By: passy

Differential Revision: D40859805

fbshipit-source-id: 23415f9d504e4dbba4035b942c73add86edf02de
2022-11-03 06:57:17 -07:00
Andrey Goncharov
82e5cfd368 Expose isLoggedIn to plugin creators
Summary: Re-expose one of the legacy exports we had before. Requested by MSYS

Reviewed By: passy

Differential Revision: D40979328

fbshipit-source-id: 7e8f089a182a62f392f3a720bee9b81698930f9d
2022-11-03 06:29:24 -07:00
Andrey Goncharov
226ccf91f6 Create flipper-server-client package
Summary:
FlipperServerClient is a useful abstraction for any JS-based client of headless Flipper. No need to bundle it with flipper-frontend-core, as the rest is not useful for external clients.
Currently, I am planning to add it to jest-e2e to send commands to Flipper

Reviewed By: lblasa

Differential Revision: D40765668

fbshipit-source-id: af48710bb15444ac1ecd649fe9a2ab252f3088f3
2022-10-31 04:26:43 -07:00
generatedunixname89002005306973
aef077f54f Flipper Release: v0.173.0
Summary: Releasing version 0.173.0

Reviewed By: lblasa

Differential Revision: D40803306

fbshipit-source-id: 502ae3cb94994454c31aee05573ec1d43150862a
2022-10-28 09:27:02 -07:00
Lorenzo Blasa
587f428cf8 Allow plugins to use css
Summary:
Flipper plugins fail when importing css from third-party dependencies. This diff tries to fix that.

Effectively, the plugin can import the css and export it when is bundled.

When we load the plugin, we check if there's a css file for it. If there's one, we return it and try to use it.

Reviewed By: aigoncharov

Differential Revision: D40758178

fbshipit-source-id: e53afffcc481504905d5eeb1aea1f9114ee2a86b
2022-10-27 22:50:30 -07:00
generatedunixname89002005306973
1923ad0142 Flipper Release: v0.172.0
Summary: Releasing version 0.172.0

Reviewed By: aigoncharov

Differential Revision: D40720215

fbshipit-source-id: 24b3c7a82d285ee6bfc1819a38aaa7243350ea0a
2022-10-26 08:55:46 -07:00
Andrey Goncharov
8aa226722c Revert adding ui-debugger css into the main bundle
Summary:
Importing CSS from nested node_modules residing inside of the plugins folder breaks publish-static-docs-flipper-diff job. See D40717045.
Reverting it to unblock the release

Reviewed By: lblasa

Differential Revision: D40717654

fbshipit-source-id: ac3f4ce92d69b0e3bed9cd116678785390e26e4e
2022-10-26 06:30:55 -07:00
Andrey Goncharov
b025cda861 Stop doing eval to load server add-ons
Summary:
Closes https://github.com/facebook/flipper/issues/4203

CHANGELOG: Stop doing eval to load server add-ons

On Windows `details.path`  contains backslashes. When we interpolate it, it loses one of the backslashes and subsequently `require` fails to load it. If we do not interpolate it (by ditching eval) it has the double backslash and work just fine.

Reviewed By: lblasa

Differential Revision: D40715523

fbshipit-source-id: 50c52f2a53690b585a32d3009f1692cf0b0d8428
2022-10-26 05:00:00 -07:00
Andrey Goncharov
3e88a53a3f Fix WebSocket server not starting on Windows
Summary: When Flipper starts with Flipper Server enabled, on Windows we forgot to attach the WebSocket handler. It led to a white screen on Electron or to connection timeout messages on Flipper Server.

Reviewed By: passy, lblasa

Differential Revision: D40679781

fbshipit-source-id: 1c8df8012efc54077409eb8891b1d82ddaf16689
2022-10-26 03:36:04 -07:00
Luke De Feo
b2c7d67586 More subtile selection and hover state for vizualizer
Summary:
Old hover state is now selection state
New hover state is a slightly thicker border

Reviewed By: lblasa

Differential Revision: D40637724

fbshipit-source-id: 7b13bc864bc1f626cf0982517befcb80615e7cc0
2022-10-25 07:10:38 -07:00
Luke De Feo
f282a5eb8a Ant tree -> React complex tree
Summary:
Upgraded from ant tree library to the much more capable React complex tree. Added the following:
1. Ability to expand / collapse nodes while automatically expanding / collapsing active/inactive children when they change
2. Keyboard controls of tree all the time
3. Basic search functionality
4. Selecting node in tree focuses and scrolls in the tree
5. Hover state for tree

Reviewed By: lblasa

Differential Revision: D40633876

fbshipit-source-id: 8dcef5ec2c277e476a3eb3cdaef62b15c25323c0
2022-10-25 07:10:38 -07:00
Luke De Feo
0c52ad307e Improve selection in vizualizer
Summary:
Clicking on a node a second time will unselect which was impossible before.

The behaviour of the on click handler doesnt always line up what is currently hovered, this is a temporary work around. There are deeper issues with this in that on exit we hover the parent, but in some situations the parent is too small to propagate. In future we will use the mouse position and do a hit test and drive selection / hover from that

Reviewed By: lblasa

Differential Revision: D40637356

fbshipit-source-id: 9df19dbf619845891bb46624730d7cf74f73cf25
2022-10-25 07:10:38 -07:00
Luke De Feo
b1bee28f08 Coordinate update event when litho scrolls or is shifted
Summary: See doc comment for explanation

Reviewed By: lblasa

Differential Revision: D40587610

fbshipit-source-id: f0909440c4e6e3cc9f5c7b557198a93ba8809bd9
2022-10-25 07:10:38 -07:00
Andrey Goncharov
06dbcecfad Open support request when user creates a universal export
Summary:
Design doc: https://docs.google.com/document/d/1HLCFl46RfqG0o1mSt8SWrwf_HMfOCRg_oENioc1rkvQ/ed

It does not make too much sense to have 2 different entry points to export Flipper debug data and to create a support request. It only creates ambiguity for our users. We could open the support request form automatically for them every time. In those rare cases when they try to attach new data to an existing support request, they can always not submit the form.

Reviewed By: passy

Differential Revision: D40632145

fbshipit-source-id: 6ca454d6e885493b32ac3aad008482045dccf51d
2022-10-25 05:31:48 -07:00
Andrey Goncharov
778a56d7ac Create and upload a universal export when using the support request link
Summary: Design doc: https://docs.google.com/document/d/1HLCFl46RfqG0o1mSt8SWrwf_HMfOCRg_oENioc1rkvQ/edit#

Reviewed By: passy

Differential Revision: D40586468

fbshipit-source-id: 4d6a8706c7d1cad1951bda701c51f0998c985628
2022-10-25 05:31:48 -07:00
Andrey Goncharov
970c03d942 Add uploading to internal cloud storage
Summary:
Design doc: https://docs.google.com/document/d/1HLCFl46RfqG0o1mSt8SWrwf_HMfOCRg_oENioc1rkvQ/edit#

We'll use it in the subsequent diff to automatically upload a universal export

Reviewed By: passy

Differential Revision: D40585810

fbshipit-source-id: 5b409d716c2ead040865130d379d4f593cb68483
2022-10-25 05:31:48 -07:00
Andrey Goncharov
5d921966fb Introduce the Rage button to users
Summary: Design doc: https://docs.google.com/document/d/1HLCFl46RfqG0o1mSt8SWrwf_HMfOCRg_oENioc1rkvQ/edit#

Reviewed By: passy

Differential Revision: D40553286

fbshipit-source-id: 5007e2df9979ed7897af380cd7595173e634fb5a
2022-10-25 05:31:48 -07:00
Andrey Goncharov
14bdc87b11 Remove Flipper logs export menu
Summary:
Design doc: https://docs.google.com/document/d/1HLCFl46RfqG0o1mSt8SWrwf_HMfOCRg_oENioc1rkvQ/edit#

We have a universal export now. Why would we ask for logs only?

Reviewed By: passy

Differential Revision: D40553127

fbshipit-source-id: 674482e39746e789d70bf800daa5f021d83bb093
2022-10-25 05:31:48 -07:00
Andrey Goncharov
2289d6c0e2 Create a partial universal export in case of errors
Summary:
Design doc: https://docs.google.com/document/d/1HLCFl46RfqG0o1mSt8SWrwf_HMfOCRg_oENioc1rkvQ/edit#

Attach what we can to the universal export file if any of the steps time out

CHANGELOG: Add a universal debug export button

Reviewed By: passy

Differential Revision: D40552235

fbshipit-source-id: 775afccacf053fbcf764d1f39e93a89ad20dee0a
2022-10-25 05:31:48 -07:00
Andrey Goncharov
e886427003 Make device debug info fetching fault tolerant
Summary:
Design doc: https://docs.google.com/document/d/1HLCFl46RfqG0o1mSt8SWrwf_HMfOCRg_oENioc1rkvQ/edit#

Some files on the devices could be unavailable due to lack of permissions (hello SELinux and enterprise builds of iOS apps). Instead of failing the export, we should fetch what we can.

Reviewed By: passy

Differential Revision: D40551931

fbshipit-source-id: 698e157b1283b9e959909b6439cd09d2dc8dc8d6
2022-10-25 05:31:48 -07:00
Andrey Goncharov
80f947212b Add a modal with status updates for the universal export
Summary:
Design doc: https://docs.google.com/document/d/1HLCFl46RfqG0o1mSt8SWrwf_HMfOCRg_oENioc1rkvQ/edit#

Exporting all files form a device and export Flipper's own state could take a long time. We need to keep our users updated on the status.

Reviewed By: passy

Differential Revision: D40551661

fbshipit-source-id: d5c94fb99d4bc8b4495ce463915b77c475548f01
2022-10-25 05:31:48 -07:00
Andrey Goncharov
96aa0ac02b Automatically export all plugins as a part of a universal export
Summary: Design doc: https://docs.google.com/document/d/1HLCFl46RfqG0o1mSt8SWrwf_HMfOCRg_oENioc1rkvQ/edit#

Reviewed By: passy

Differential Revision: D40550440

fbshipit-source-id: 2f88c84124c35524d020fd2bcd8487dc2c64d8f3
2022-10-25 05:31:48 -07:00
Andrey Goncharov
6af6652ab2 Export data for the universal export as a single zip archive
Summary:
Design doc: https://docs.google.com/document/d/1HLCFl46RfqG0o1mSt8SWrwf_HMfOCRg_oENioc1rkvQ/edit#

It is better UX not to prompt a user multiple times to save various pieces of the debug export

Reviewed By: passy

Differential Revision: D40550084

fbshipit-source-id: 51ea3acee7daf5074682219020e1e1eed2182b7d
2022-10-25 05:31:48 -07:00
Andrey Goncharov
821bf2b5b7 Get files from Flipper folder for every app on an iOS device
Summary:
Design doc: https://docs.google.com/document/d/1HLCFl46RfqG0o1mSt8SWrwf_HMfOCRg_oENioc1rkvQ/edit#

Fetch list of files in the `/sonar` folder on iOS devices and fetch all the files

Reviewed By: passy

Differential Revision: D40548410

fbshipit-source-id: d38cbbb1e3b5579c13f30777233e3caf7b8c9b34
2022-10-25 05:31:48 -07:00
Andrey Goncharov
3c8ebf105a Get files from Flipper folder for every app on an Android device
Summary:
Design doc: https://docs.google.com/document/d/1HLCFl46RfqG0o1mSt8SWrwf_HMfOCRg_oENioc1rkvQ/edit#

We'll make the fetching more resilient to errors in subsequent diffs

Reviewed By: passy

Differential Revision: D40512932

fbshipit-source-id: df3d2b14c033ec4434b2bf408f05734d71dee092
2022-10-25 05:31:48 -07:00
Andrey Goncharov
480a3d26f0 List contents of Flipper folder on Android
Summary:
Design doc: https://docs.google.com/document/d/1HLCFl46RfqG0o1mSt8SWrwf_HMfOCRg_oENioc1rkvQ/edit#

In later diffs, we'll start fetching the actual files as well. The list of available files itself might be useful already to see what we have in our folder on the device

Reviewed By: passy

Differential Revision: D40508960

fbshipit-source-id: 96193fef3fed64d509cd3397513ae3e94438ae22
2022-10-25 05:31:48 -07:00
Andrey Goncharov
2db9bccf75 Export client logs for the active client as a part of the universal export
Summary:
Design doc: https://docs.google.com/document/d/1HLCFl46RfqG0o1mSt8SWrwf_HMfOCRg_oENioc1rkvQ/edit#

Introduce a command rto fetch debug data from the devices

Reviewed By: passy

Differential Revision: D40470838

fbshipit-source-id: 40a7ec66b1266ceff1b31b5b4f19b93765b78615
2022-10-25 05:31:48 -07:00
Andrey Goncharov
ef0d9fb77e Export Flipper state as a part of the universal export
Summary:
Design doc: https://docs.google.com/document/d/1HLCFl46RfqG0o1mSt8SWrwf_HMfOCRg_oENioc1rkvQ/edit#

Create Flipper export as a part on the universal export

Reviewed By: passy

Differential Revision: D40468242

fbshipit-source-id: b1b8e4df3b630c6163bb383482123c12dfc6e118
2022-10-25 05:31:48 -07:00
Andrey Goncharov
0e5af8095f Stash and export debug logs
Summary:
Design doc: https://docs.google.com/document/d/1HLCFl46RfqG0o1mSt8SWrwf_HMfOCRg_oENioc1rkvQ/edit#

Stash all logs including debug ones for the export

Reviewed By: lblasa

Differential Revision: D40467905

fbshipit-source-id: 963ce8e92d2131220640a63f5e9c38f4317af061
2022-10-25 05:31:48 -07:00
Andrey Goncharov
be72375d18 Add "Rage" button
Summary:
Design doc: https://docs.google.com/document/d/1HLCFl46RfqG0o1mSt8SWrwf_HMfOCRg_oENioc1rkvQ/edit#

Add a button to export all possible debug data at once. IN subsequent diffs, I'll add more extensive data collection.

Reviewed By: antonk52

Differential Revision: D40467606

fbshipit-source-id: 6a4225945b1feb6c1a8073b5209a62ba0beb6148
2022-10-25 05:31:48 -07:00
Lorenzo Blasa
edb7de7311 Fix style naming for bounds and spacebox inspectors
Summary: ^

Reviewed By: passy

Differential Revision: D40632902

fbshipit-source-id: ae4cc57b3b64cac0cbeffc20c3189e3a01e13949
2022-10-25 03:09:00 -07:00
Lorenzo Blasa
bb3b1cecef Simple antd types for each inspectable type
Summary:
Replace draft inspectors with read-only components.

This is a first step into having a richer UI. At the moment, these are read-only components but will likely be extended in the future as to allow editing of values.

Reviewed By: LukeDefeo

Differential Revision: D40345016

fbshipit-source-id: a6aef5861474b4aa8353c00ef257ab17b4cff00e
2022-10-25 03:09:00 -07:00
Lorenzo Blasa
9721993576 Displayable name for attributes utility function
Summary:
Utility function that transforms lower camel case attribute names to a more readable name.

e.g. sizeToFit -> Size To Fit

Reviewed By: antonk52

Differential Revision: D40344715

fbshipit-source-id: f0745b892a78cc262133197a4d4b7624a7e2141d
2022-10-25 03:09:00 -07:00
Lorenzo Blasa
1ee89d0e64 Add enum and boolean inspectables
Summary: Add types to support enum and boolean inspectables

Reviewed By: aigoncharov

Differential Revision: D40344566

fbshipit-source-id: c1f719e634a4096e5dd63d3b96c6d64c9684c62b
2022-10-25 03:09:00 -07:00
Lorenzo Blasa
c46ddf7912 Foundations for inspector
Summary:
^

This laids the foundation for the inspector. It just reorganises a few bits.

Reviewed By: LukeDefeo

Differential Revision: D40319611

fbshipit-source-id: 8cf9b151c631faa1f26a7a6dfaa86b01abc42fe5
2022-10-25 03:09:00 -07:00