Summary:
Populate class name for Litho Sections.
See D22922106 (86cafb9e80) for reference
Reviewed By: adityasharat
Differential Revision: D22949896
fbshipit-source-id: d804971708cf8c8466dd74eda3e750957dc95fc9
Summary: Populate class name for Litho Components.
Reviewed By: adityasharat
Differential Revision: D22922106
fbshipit-source-id: e18b748e0e0bd6f511558124a28b4b58d217ded7
Summary:
Added IDE menu functionalities.
Changed minor UX detail - for classes that cannot be opened user will always see 'Can't open' prompt.
Design: https://www.figma.com/file/M0l6qhQqzllIcefVE4tQvG/Error-Reporter-IDE-Selector?node-id=82%3A0
Reviewed By: arpitratan, adityasharat
Differential Revision: D22790328
fbshipit-source-id: 8dfbcf7408c53947909bcf3fa700dee7ae47e14a
Summary: Adds a toggle switch to show/hide disk cache images defaulting to inactive. The image data is only sent on the adb connection when the toggle is activated.
Reviewed By: defHLT
Differential Revision: D20002059
fbshipit-source-id: 05c9e515ffe09441e5cfb6f66eb14559ac4a322c
Summary:
This diff implements the integration between a Litho Editor and Flipper. It does so by converting the Editor format to FlipperObject, and then converting it back from FlipperDynamic.
This conversion works for both `State` and `Prop`. We already provide default implementations for primitive + wrapped types and String, so the functionality should match the existing one.
Reviewed By: passy, Katalune
Differential Revision: D22455220
fbshipit-source-id: f7f633765f3d997ce6de09d2c1277019e72c0802
Summary: Created buttons which enable opening in IDE for classes which are valid.
Reviewed By: adityasharat
Differential Revision: D22724496
fbshipit-source-id: 3532213ab7730aae5e61877ccfecd0558b329d57
Summary:
Created functionality which allows user to open clicked file from inAppErrorReporter.
Created "iface" interface for openInIDE API and created default implementation which indicates that openInIDE is not supported.
Created "impl" implementation specifically for fb4a.
Reviewed By: arpitratan
Differential Revision: D22642497
fbshipit-source-id: 7b3011c128a479e556b869fcc8c4147e153caf71
Summary: Created a communication between Layout Plugin and Flipper Desktop. The API allows users to open given file in a selected IDE. The openInIDE function returns true if the connection with Flipper is established, otherwise returns false.
Reviewed By: adityasharat
Differential Revision: D22625829
fbshipit-source-id: feaf186c107d62b1a75dfc6bbe2c1d66ffd7fd78
Summary:
I think it's somewhat common to have large containers that can hold future views, especially fragments. The problem is the presence of these containers can block the layout inspector's "target" mode.
I found out from cekkaewnumchai that Flipper does in fact return multiple results from the pick, but I think it could still be helpful to have this new tag since it is more convenient than having to do the secondary drill down each time.
Reviewed By: jknoxville
Differential Revision: D22284972
fbshipit-source-id: 1a2826ec746e4f31690db33ed72815ae168bffab
Summary:
Before this diff, `TouchOverlayView` would be an inner non-static class,so it'd be difficult to track memory ownership for it.
It also made `InspectorFlipperPlugin` longer and harder to read.
Reviewed By: cekkaewnumchai
Differential Revision: D22285744
fbshipit-source-id: 6fdd8c33a07be6ab900ebb28a8c3ebf3761fb598
Summary:
Fix for https://github.com/facebook/flipper/issues/1300
The weak refs were not being cleared in two cases:
- On config changes, isFinishing() would be false in onPause()
- When calling finish() from Activity.onCreate(), onPause() isn't guaranteed to be called.
## Changelog
Pull Request resolved: https://github.com/facebook/flipper/pull/1301
Reviewed By: mweststrate
Differential Revision: D22286182
Pulled By: passy
fbshipit-source-id: 948d1d9b2145b6526c0030cf537330409ff7f8c4
Summary: - add another activity where there are two component overlapping each other
Reviewed By: mweststrate
Differential Revision: D21040425
fbshipit-source-id: 5514b59140bbf6b726e6777191e1808be5ac5b6f
Summary: Similar to previous diff but for Litho component
Reviewed By: mweststrate
Differential Revision: D21040426
fbshipit-source-id: 32e997269bbda472917c8ff6f176d05cf502b9dc
Summary: Previously, descriptor stopped iteration (searching) as soon as it finds hit element. This diff changes so that it will always do complete search
Reviewed By: mweststrate
Differential Revision: D21040424
fbshipit-source-id: 9123c6382dcdfefd6df17a95d283f5123906df11
Summary:
- Add return parameter to `createTouch` method: stack of node. This reference will be used to retrieve the final tree structure to be sent back to desktop app.
- `Touch` now keeps every step in component tree (I have concerned for app performance here)
- Edit test to reflect changes
Note:
- `path` will also be returned to keep backward compatibility with older server (desktop) side
Reviewed By: adityasharat
Differential Revision: D21040429
fbshipit-source-id: 6c2b9792378bf08b19fbbda1d2381df8c357170c
Summary: This adds ability to iterate over FlipperObject before sending it to be processed on Flipper desktop
Reviewed By: mweststrate
Differential Revision: D21214901
fbshipit-source-id: a6186a42004f1afb70889a395b1df037447f9881
Summary: 512 is a pretty small blob length. Increasing it to 5120 and changing it to attempt to stringify UTF-8 if not ascii.
Reviewed By: jknoxville
Differential Revision: D21253132
fbshipit-source-id: 1cc9226b86a9b9ddfd73e29c8b0c04ac54b5b4b2
Summary:
Previously, requests were passed to process first in an interceptor, and it is responsibility of an interceptor to process requests for responses. In FlipperOkhttpInterceptor, we did read data from request body before processing it. This caused a bug when the network process itself wants to also read that data, but the stream has been closed because the interceptor has just read. The fix is to report request body after we have triggered network call so that we can just drop request body if we cannot read.
This diff tries to bring back the same functionality while not cause the bug to occur by cloning the content to be read by Flipper and using the same one for the request.
Reviewed By: jknoxville
Differential Revision: D21279679
fbshipit-source-id: 47f8b29a1896705d8d2d601661cd485db572d251
Summary: There's no existing API on the Flipper objects to get an arbitrary Java object, which we need in an inspector plugin we're building (`getDynamic` requires you to know what you want in the end).
Reviewed By: jknoxville
Differential Revision: D21223329
fbshipit-source-id: 29e9f8788be404cec44c6ddeb6b56b939b97b766
Summary:
This enables the feature which showed the theme information in the layout plugin. It was disabled due to the OOM which occurred while exporting flipper trace. The OOM happened when we tried to serialise the whole layout hierarchy and the amount of info added per node by the theme info was quite heavy. Thus removing it solved the OOM problem at that point, but its not the correct solution.
The problem is that each node has too much information and sending it at one stretch is very heavy and causes OOM. So instead of sending it at one stretch, I have broken it into multiple calls at each level of the tree. This no longer causes OOM and we will be able to show theme information too.
Also for iOS we don't have AXNodes call or AXRoot feature implemented, so anyway I had to put a check to not make those calls, so instead I have kept the feature of fetching all nodes on the iOS instead, as there has been no problem on the iOS side with regards to the OOM. But I am indifferent, the same logic will work for iOS too, it might increase the time to export.
issue discussed [here](https://fb.workplace.com/groups/flippersupport/permalink/854729375007722/)
Reviewed By: jknoxville
Differential Revision: D21136057
fbshipit-source-id: becd237a6d53c50af082597f2e8ed790c25cb966
Summary:
Original Issue: https://github.com/facebook/flipper/issues/993
The exception occurs when OkHttp and we try to read request body twice, while it can be only read once.
Hence, we will read request body after it is processed by OkHttp.
Tradeoff for this is requests on Flipper will not appear immediately after fired, but they will appear together with their responses.
There are ways we can get rid of the tradeoff. For example, as demonstrated in D21167308, OkHttp ^3.14.0 contains method `isOneShot`, which can be used to check if we can read request body more than once. Another example is to change server side to accept nullable variable so that we can send request body and others separately.
Reviewed By: passy
Differential Revision: D21175341
fbshipit-source-id: 053789a2c2f28cd8149ea1bb36fd0cfe1c668df7
Summary:
This change makes it possible to remove preferences. I also added a `Delete` context menu option to `DataInspector` because I needed it to implement this feature. passy confirmed that it makes sense to add this because delete is a common action.
Fixes https://github.com/facebook/flipper/issues/451
Pull Request resolved: https://github.com/facebook/flipper/pull/1018
Reviewed By: jknoxville
Differential Revision: D21086308
Pulled By: passy
fbshipit-source-id: 551ff0908d5e6c93f58d6012b42e1ee3531de997
Summary:
Forgot to add it here previously, so it will diverge
from others if there's a global NDK env var set.
Reviewed By: nikoant
Differential Revision: D21061431
fbshipit-source-id: 0a90211a63497bac467b2b9598c7c058145857cc
Summary:
This is in line with the most recent stable Android Studio Release.
Pull Request resolved: https://github.com/facebook/flipper/pull/958
Test Plan:
Used it myself.
Open Source CI required a higher NDK, so let's first check what CI says to that internally now.
Reviewed By: jknoxville
Differential Revision: D20794634
Pulled By: passy
fbshipit-source-id: c32f934634b036ad3c1cad9fc49541e585d64329
Summary:
Fix https://github.com/facebook/flipper/issues/931
This is not how I would *like* to fix this, but it should do the job.
When the switch over to AndroidX was made, the overall abstraction
started to leak and we really need to remodel this in its entirety.
There's also the question of whether we want to support both support
fragments and AndroidX fragments or not. Right now it's kinda-sorta
supported but only under some circumstances, which is not great.
I also added some more defensive try/catches as there's some unsafe casting
involved and future changes may break this causing the entire layout to disappear.
Change Log: Fix support for AndroidX fragments in Layout Inspector.
Pull Request resolved: https://github.com/facebook/flipper/pull/957
Test Plan:
Changed the sample app to include some AndroidX fragments and they
now show up (again) in the view hierarchy:

Tested internally that FB4A fragments show up again, too:
{F233098198}
Reviewed By: mweststrate
Differential Revision: D20792503
Pulled By: passy
fbshipit-source-id: 7030b897ab547d1e8803b7f0d7aaa34263cfaed2
Summary:
Tracks images in disk cache. It seems performant even with 500+ images in disk cache. Sidebar displays the local path for an image when that image is selected. Shows total size of images in disk cache. 'Clear Cache' clears the disk cache.
For now we unpack the async cache request in the plugin, should implement a `getSync()` method on `bufferedDiskCache` in the future. For some reason Flipper doesn't work with a blocking call (https://fburl.com/smj0s4li).
Reviewed By: defHLT
Differential Revision: D20001062
fbshipit-source-id: 1e7a7900e9f42d05e3bf30472e57cd643caa5aca
Summary: We can OOM in flipper, and we'd like to catch those and prevent them from crashing the app. They are Errors, not Exceptions.
Reviewed By: mweststrate
Differential Revision: D20648824
fbshipit-source-id: 60002a3c950518e56189776f05df8f2c92a851f0
Summary: Flipper should never crash the mobile app. This is a plugin entry point, so it's understandable that it can, but we should avoid it whenever possible.
Reviewed By: passy
Differential Revision: D20648373
fbshipit-source-id: f32b428cccdd0c78eb15e9e95a64ecf3f4e10429
Summary:
This is the change made by Pascal at D19813495. to clean up the file
Shouldn't really change how it works but makes it
safer and brings it in line with our coding standards.
Reviewed By: passy
Differential Revision: D20474258
fbshipit-source-id: 67d77316a5b7efd7258072b4f35a2d9c50de408e
Summary:
Add logic on client side
# How it works (from the code)
1. Server side sends request url and method to response data and headers to client side
1.1. This will happen every time server update **any** mock response (add, edit, and remove)
2. Client stores those in map
3. For every network request,
3.1. Check if there is a matching url and method
3.2. If so, create a new response with the data and headers and drop the request
3.3. If not, proceed and send the request and wait for a response
`addNetworkInterceptor` is changed to `addInterceptor` to allow short-circuit and proceed without fetching anything. More info can be found at https://square.github.io/okhttp/interceptors/
Note:
- This is an original PR.
- The content below is from original PR
Add network response mocking for Network plugin. See discussion [here](https://github.com/facebook/flipper/issues/475)
## Changelog
- Add Network response mocking, currently support Android clients only
- Change the Android example app to use `addInterceptor()` instead of `addNetworkInterceptor()`
Pull Request resolved: https://github.com/facebook/flipper/pull/488
Test Plan:
{F231673798}

- Connect an Android device
- Tap on Network plugin
- Click on the Mock button
- Click on Add Route button, and specify the URL
- Edit the mock data in the text area
- Optionally, click the Headers tab to edit the headers data
- Click close button to close the dialog
- Send some network data in your application. You should be able to see the mock data appears in the Network table in those rows highlighted in yellow
Reviewed By: passy
Differential Revision: D16580291
Pulled By: cekkaewnumchai
fbshipit-source-id: fc391f5e7efebc6f51a72b00d16263e009e1fdb0
Summary:
per title
Note:
- This is a part of this PR: https://github.com/facebook/flipper/pull/488
Reviewed By: jknoxville
Differential Revision: D20474257
fbshipit-source-id: d2ac79d03ac67453bd67ecc46ace973be1590c04
Summary:
- Add a new listener to be called when the plugin is initialized
Note:
- This is a part of this PR: https://github.com/facebook/flipper/pull/488
Reviewed By: jknoxville
Differential Revision: D20474259
fbshipit-source-id: ef1673ffa7fbc087761a753fbae813346bd481c3
Summary:
There was a bug reported recently where the fetching all the nodes failed and the error is pasted [here](https://our.intern.facebook.com/intern/paste/P127476330/). From the paste we can see this `android.content.res.Resources$NotFoundException: Unable to find resource ID #0x0`.
Reported bug is [here](https://fb.workplace.com/groups/flippersupport/permalink/830359447444715/)
I was able to repro this luckily
{F231474948}
Reviewed By: xiphirx
Differential Revision: D20441839
fbshipit-source-id: 9e9bfd15422c0f6c6f7a71aa22e9b1c8d640ec4a
Summary: Adds the theme information relating to a Litho component in the layout inspector
Reviewed By: sjkirby
Differential Revision: D20133889
fbshipit-source-id: 93acb745f47c1ff9ce37be35a05b4a6269193a47
Summary: Remove asan checker, we can use `BuildConfig.IS_ASAN_BUILD` to check whether it's a asan build to instead of invoking a JNI api.
Differential Revision: D20088093
fbshipit-source-id: f26d367430a983fbe7b630919a4131fdf2e2d510
Summary: This will query for and display all of the associated theme information for each of the descriptors.
Reviewed By: passy
Differential Revision: D20008056
fbshipit-source-id: 720d224144b0822528ca8e23cdbec9fe9dd25e6b
Summary:
Nested subobjects work but aren't very well typed in the layout plugin.
So changing it to help flipper work with it.
From:
```
positionOnScreen: {x: 234, y: 456},
```
to
```
positionOnScreenX: 234,
positionOnScreenY: 456,
```
Reviewed By: passy
Differential Revision: D19998161
fbshipit-source-id: 4e4d7ced3cb37c527bbdf65549ec436311a8c2b8
Summary: This will query for and display all of the associated theme information for each of the descriptors.
Reviewed By: passy
Differential Revision: D19987003
fbshipit-source-id: c9b51311d28712a1af76c45a434bfb25d28d5c54
Summary:
# Summary
Folly became once again incompatible with the Android NDK, which caused our CI to fail to produce sample APK builds on release. I managed to repro this on my machine and it's working again now.
Sadly, I had to patch another file manually because something about the template parameter inference wasn't working ...
# Notes
This was done by first bumping the version, then going through the compiler errors and simply removing the lines that the C++ compiler in the NDK had trouble inferring the types for. We were lucky in that the exported symbols this affected weren't actually used, so I copied over the file to `overrides/Folly/` and set up another copy rule in Gradle.
# Meta
Pull Request resolved: https://github.com/facebook/flipper/pull/809
Test Plan:
```
./gradlew :sample:assembleDebug
```
Internal, external CI.
Reviewed By: mweststrate
Differential Revision: D19948797
Pulled By: passy
fbshipit-source-id: b2e98d3a5c89b0fc77c157683cde90997232fee0
Summary:
This diff turns the DevTools plugin from a normal plugin in a device plugin. The reason for that can be seen at the end of the test plan in the first stack of this diff: Regardless on which client you open the devtools, you are always looking at the react tree of the app that happens to listen at the appropriate port, unrelated to the actively selected app. This diff moves the plugin from being a client plugin to a device plugin, a Metro device plugin to be precisely, as of the latter there is only one and they should typically correspond (which is why we can trigger reload as done in the previous diff)
Currently we have a Flipper plugin inside the iOS / Android apps with one purpose: to select different ports to listen to on different devices. But this functionality was never implemented, nor seems there to be much demand for. So these plugin don't offer any actual value. The widely used standalone version of the react devtools (https://www.npmjs.com/package/react-devtools) doesn't offer port customization either, so this limitation seems to be acceptable.
To make sure that this change is backward compatible, we make sure to show the metro device if we find metro, regardless whether it is new enough to support log forwarding and reload commands (previously we only showed the device if it has the /events endpoint).
The only case I can think of we are killing with this approach is where people are debugging a RN app, but with having metro running. I doubt that is an actual case, but probably rickhanlonii knows more about that.
Furthermore this diff makes sure that the devTools can connect to physical android devices. Also, making it to the end of this explanation means that you have done most of the reviewing for this diff. The actual code diff is shorter.
Reviewed By: passy
Differential Revision: D19878605
fbshipit-source-id: 3f33e59d4f6e4cce39102420f38afee10018999f
Summary:
Context: https://fb.workplace.com/groups/flippersupport/permalink/804152663398727/
This gives flipper the location of every node, in relation to the entire screen. This allows it to visualize the position of each node on it's own diagram, overlayed over a screenshot for example. The use case in mind is after importing flipper data, you'll still be able to see layout nodes overlayed over a screenshot taken during export.
Currently this is only added to Android Views, meaning we don't get it for Litho views or anything on iOS.
This is basically to get something working end-to-end, and if it's all good, then I'll add the other types of views.
Reviewed By: passy
Differential Revision: D19747691
fbshipit-source-id: 8ba3aae6b7685de6faaf55b9628c200802801db4
Summary:
mityal implemented a new check for nullsafe to warn about potentially
incorrect overrides of `equals` method (not yet released).
While testing some other things I stumbled upon incorrect `equal`
overrides in Flipper, particularly not properly handling `null` param.
Reviewed By: passy
Differential Revision: D19639882
fbshipit-source-id: 7f9aec7270e89a906810807f6849628967047b2a