Summary:
Add a simple scheduler which operates in the following way.
There are two type of tasks: main, background.
The main task will run on the main thread whilst the background task will run on a background thread.
The main task will be executing at a fixed internal whereas the background task will get queued on demand but can effectively consume what was produced by the main task at its own rate.
Reviewed By: LukeDefeo
Differential Revision: D38975283
fbshipit-source-id: 0633385d2938705a16f5fc75a28cad067e4a8e55
Summary: This adds a simple traversal to the UI. As it stands, it will most likely be updated in future iterations.
Reviewed By: LukeDefeo
Differential Revision: D38907292
fbshipit-source-id: 98cea1f971a4ef37ba2d1c75b882dd44df29bb3a
Summary:
Scaffolded desktop UI for UI debugger
I changed getroot from an rpc call to an event sent on connect. The root should never change as its the application object.
Reviewed By: lblasa
Differential Revision: D38866008
fbshipit-source-id: ca0f1908bedb643238f11ed796922e3359619167
Summary:
Introducing descriptors. Taken from the existing inspector, refreshed with a few things from Stetho, and translated to Kotlin.
Note: doesn't use FlipperObject or FlipperArray.
This is a very rough draft for them all, but can be used as basis for experimentation.
Reviewed By: LukeDefeo
Differential Revision: D38860763
fbshipit-source-id: 9f6bf4ad0e61fc40b0a773dfb8bfa80b1f397b3a
Summary:
Introduce ApplicationRef which holds a reference to Application. It exposes a few utility methods to get view roots and activities.
ApplicationInspector has a few template methods for useful things which are not used in this diff and most likely will either be moved/deleted/changed on the final implementation.
Reviewed By: LukeDefeo
Differential Revision: D38829523
fbshipit-source-id: b8aeb133dceb3af42b5f7d6851ef531d35fc7d69
Summary:
EnumMapping and InspectableValue taken from the original 'inspector' plugin but translated to Kotlin.
Accumulator is just a Map<String, Any>
Reviewed By: LukeDefeo
Differential Revision: D38823678
fbshipit-source-id: 6af395cab2e3e6930575eb63d22d660dab962fde
Summary:
folly::dynamic, std::string, implicit constructors and method overloading is not a good combination.
This renames the send method to sendRaw as to avoid issues with existing plugins currently sending string params.
Reviewed By: mweststrate
Differential Revision: D38827539
fbshipit-source-id: 653f62e41ebfbe93d1af25f39c81f6b05bf84cb4
Summary:
^
So far, we had the 'uidebugger' plugin as a meta-only plugin.
This change moves the plugin to OSS space as it will ultimately be its right place.
It will also make it easier to iterate on it.
The plugin itself is not ready for consumption but at no point we are documenting or integrating it with our samples.
Reviewed By: passy
Differential Revision: D38742336
fbshipit-source-id: 5cf124722fa7ba75ee9b998c507bfdfb2e4782c1
Summary:
For C++, folly::dynamic is used throughout.
On iOS and Android though, Flipper goes through multiple conversions to get to a folly::dynamic only to ultimately obtain a JSON string from it.
Let's take a look at Android:
There are multiple types like FlipperObject, FlipperArray that wrap around a JSONObject.
When data needs to be sent:
1. The JSONObject is asked for its string representation.
2. The string representation is then parsed by folly to construct the folly::dynamic instance.
3. The step above involves an extra boundary cross through JNI.
4. Ultimately, a socket or ws connection does not understand folly::dynamic so we then get a JSON string representation from it.
5. Data is sent.
As described above, for big enough objects, this represents an issue.
So, the idea of this change, is to allow plugins to send a JSON string instead. This will remove a few serialisation/deserialisation steps from the process.
*Note: this API is not currently used by anything so there's no impact to existing plugins.*
Changelog: expose a send method that accept a string as params
Reviewed By: LukeDefeo
Differential Revision: D38741582
fbshipit-source-id: 78e0acd80fc8c97378ee986cbaf377078996ed60
Summary:
Resolves https://github.com/facebook/flipper/issues/3926. Open to suggestions on the tag value, just sort of picked one that could be pointed to for anyone that wants to track these in their apps.
## Changelog
Tag sockets used by Flipper to fix strict mode warnings about untagged sockets.
Pull Request resolved: https://github.com/facebook/flipper/pull/3928
Test Plan:
Edit FlipperSampleApplication.java with the following:
```
public class FlipperSampleApplication extends Application {
Override
public void onCreate() {
StrictMode.setThreadPolicy(
new StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.build()
);
StrictMode.setVmPolicy(
new StrictMode.VmPolicy.Builder()
.detectAll()
.penaltyLog()
.build()
);
...
```
That will enable strict mode. Now build/launch the sample application.
Use adb logcat to inspect warnings:
```
adb logcat -s StrictMode
```
Without tagging the socket, the following warning should be observed:
```
D/StrictMode: StrictMode policy violation: android.os.strictmode.UntaggedSocketViolation: Untagged socket detected; use TrafficStats.setTrafficStatsTag() to track all network usage
```
After applying the fix, that warning should go away.
Reviewed By: lblasa
Differential Revision: D38280819
Pulled By: passy
fbshipit-source-id: 0c841b13237cbcb0ff8b8226fb44655a74b775c6
Summary: In a previous diff D32278523 (8764da7c0b) The desktop request was changed from send to call. Call expects a response and not all code paths return a response. Most calls to set highlight are timing out.
Reviewed By: mweststrate
Differential Revision: D38074704
fbshipit-source-id: 6e85416d6b6470efaa177ad1b74420c8237366d5
Summary:
This change isolates the usage of folly async from Flipper. Is now self-contained in Flipper Folly schedulers.
Users of Flipper can decide not to use the types defined in that header and implement their own.
NOTE: changes are minimal, we are just replacing direct calls to folly event base with a scheduler which simply relays this on to folly.
Reviewed By: fabiomassimo
Differential Revision: D36626483
fbshipit-source-id: add0241caf4af0aa5c3b5c2e7efc2e725f5400ab
Summary:
`getChilAt` can return `null` (see also line 671), probably when the UI changes during the inspection process. Added a null check that should protect against the failure reported in P501013941
Changelog: Fixed NPE during search in layout plugin (Android)
Reviewed By: lblasa
Differential Revision: D36369508
fbshipit-source-id: 1f066d1a73bdfe875d66f7200ded0d0776af8321
Summary:
This change isolates the usage of folly async from Flipper. Is now self-contained in Flipper Folly schedulers.
Users of Flipper can decide not to use the types defined in that header and implement their own.
NOTE: changes are minimal, we are just replacing direct calls to folly event base with a scheduler which simply relays this on to folly.
Reviewed By: fabiomassimo
Differential Revision: D36052198
fbshipit-source-id: 170d64a324a1f1f100224e2622a59cbac3c8b642
Summary:
`AndroidFlipperClient.java` is a debug tool, and it has some strict mode violation.
We should exempt them to reduce noise on logcat.
- 1.
```
D StrictMode policy violation; ~duration=43 ms: android.os.strictmode.DiskReadViolation
D at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1596)
D at libcore.io.BlockGuardOs.access(BlockGuardOs.java:71)
D at libcore.io.ForwardingOs.access(ForwardingOs.java:72)
D at android.app.ActivityThread$AndroidOs.access(ActivityThread.java:7578)
D at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:281)
D at java.io.File.exists(File.java:815)
D at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:681)
D at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:672)
D at android.app.ContextImpl.getFilesDir(ContextImpl.java:717)
D at android.content.ContextWrapper.getFilesDir(ContextWrapper.java:253)
D at com.facebook.flipper.android.AndroidFlipperClient.getInstance(AndroidFlipperClient.java:55)
```
- 2.
```
D StrictMode policy violation; ~duration=46 ms: android.os.strictmode.DiskReadViolation
D at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1596)
D at libcore.io.BlockGuardOs.read(BlockGuardOs.java:304)
D at libcore.io.ForwardingOs.read(ForwardingOs.java:176)
D at libcore.io.IoBridge.read(IoBridge.java:509)
D at java.io.FileInputStream.read(FileInputStream.java:320)
D at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
D at java.io.BufferedInputStream.read(BufferedInputStream.java:347)
D at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:291)
D at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:355)
D at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:181)
D at java.io.InputStreamReader.read(InputStreamReader.java:184)
D at java.io.BufferedReader.fill(BufferedReader.java:172)
D at java.io.BufferedReader.readLine(BufferedReader.java:335)
D at java.io.BufferedReader.readLine(BufferedReader.java:400)
D at com.facebook.flipper.android.FlipperProps.getFlipperPortsPropValue(FlipperProps.java:92)
D at com.facebook.flipper.android.FlipperProps.getFlipperDefaultAltPortsPropValue(FlipperProps.java:76)
D at com.facebook.flipper.android.FlipperProps.getAltInsecurePort(FlipperProps.java:37)
D at com.facebook.flipper.android.AndroidFlipperClient.getInstance(AndroidFlipperClient.java:47)
```
Reviewed By: nikoant
Differential Revision: D35784406
fbshipit-source-id: b55ce458e04a44d98565972132707a392d71281c
Summary:
This is a prototype for view preview within Flipper.
If enabled, a preview of the selected element is rendered in the attribute inspector.
Changelog: Add view preview/snapshot for the Layout plugin on Android.
Reviewed By: mweststrate
Differential Revision: D35009246
fbshipit-source-id: a442ff7f57093f463016811f0f451b52f579b448
Summary:
DefaultSqliteDatabaseProvider only list databases in the "files" folder & "databases" folder:
/data/user/0/com.facebook.wakizashi/files/
/data/user/0/com.facebook.wakizashi/databases/
On Messenger in Blue, msys database is located in the folder /data/data/com.facebook.wakizashi/app_mib_msys and therefore is not found automatically.
This patch makes the Database Flipper dolphin see the msys database by also listing the databases referred via extraDatabaseFiles.
Differential Revision: D35041276
fbshipit-source-id: e91b95fdc3bb31d414087cdea4a6825a98f3210a
Summary:
^
Note: this is already a working case. The difference is that if we are unable to establish a socket connection, we will not attempt to create one using rsocket.
Changelog: Removes rsocket-fallback for mobile clients
Reviewed By: nikoant
Differential Revision: D33655430
fbshipit-source-id: cb6f752f2d1354ab46d011b1f19c89520e1e7dd3
Summary:
Pull Request resolved: https://github.com/facebook/flipper/pull/3125
Better stream creation and disposal.
A report was generated with the following error:
StrictMode policy violation: android.os.strictmode.LeakedClosableViolation: A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
Changelog: Close input stream after use which was causing strict mode policy violation crashes and possibly leaking resources.
Reviewed By: passy
Differential Revision: D32830690
fbshipit-source-id: de3ffaf1b600590c4060a381fae66e73e08745cb
Summary:
This change addresses a warning and provides a safer way of resolving the connection promise.
Also, fixes an issue whereas the websocket connection was not being reestablished as the listener is not notified when we manually disconnect.
Reviewed By: passy
Differential Revision: D32591859
fbshipit-source-id: 78ce4eac5414a924217867f2f47b04829da3b705
Summary:
Changelog: Fix theme reflection logging lot of errors if the APIs aren't accessible, see #1736
Harden theme reflection based on the comments in https://github.com/facebook/flipper/issues/1736
Reviewed By: jknoxville
Differential Revision: D32202434
fbshipit-source-id: 99178df56c91715f9eff1e4764ebc55b29ecb6f3
Summary: Fixed NPE linked by task. From the code, that stuff should never be null, unless there is some threading / concurrency issue, which there apparently is. In that case, failing with a warning is imho a bit more elegant than raising exceptions from a debugging tool
Reviewed By: lblasa
Differential Revision: D32278044
fbshipit-source-id: 710fcdcfe458f33bbb806d9f2f1b9352252eedec
Summary:
[Reported in the support request](https://fb.workplace.com/groups/flippersupport/posts/1237466586733997/), Activity object is held by ObjectTracker even though the Activity is destroyed. This, in this case, caused strict mode in Portal app to forcibly terminate.
This diff tried to remove activities from the reference holder.
Reviewed By: passy
Differential Revision: D31828290
fbshipit-source-id: aad7e8d7ba14069f8dd7c654a3604d482d85e110
Summary:
Add screenreader-focusable property to AccessibilityUtil#getAccessibilityNodeInfoData
The accessibility hierarchy displays various AccessibilityNodeInfo properties. However, it was missing the screenreader-focusable property.
## Changelog
Display screenreader-focusable property in the accessibility hierarchy.
Pull Request resolved: https://github.com/facebook/flipper/pull/2925
Test Plan: Test suite passes and code lints.
Reviewed By: mweststrate
Differential Revision: D31312381
Pulled By: passy
fbshipit-source-id: c5044cef6aabe5bd2d2ce5e315f5aafd6990a137
Summary: Changelog: The 'nativeplugins' on Android are no longer supported
Reviewed By: jknoxville
Differential Revision: D29163281
fbshipit-source-id: fb4032f240fc306608fe57479f3124d4e7a3400f
Summary: Traverse recursively the /files directory and show all databases with .db extension in Flipper. Traversal depth is limited to 5 by default for performance reasons.
Reviewed By: mweststrate
Differential Revision: D28451609
fbshipit-source-id: de27c855fee220e0b79061c9b2df1eba6f5ef2af
Summary: Was early returning on the first attempt to load theme data, this was left over from when the the theme feature was temporarily disabled.
Reviewed By: passy
Differential Revision: D27284040
fbshipit-source-id: bb641fbe4cd9c0ea6012e89dbda67e5dd10d59bd
Summary:
- Made `EnumMapping` support generic value type - `ImageView.ScaleType` is a Java enum; the scaleType api uses this instead of int types.
- Introduce descriptor for `ImageView` and allow getting/setting scaleType.
Reviewed By: mweststrate
Differential Revision: D26092725
fbshipit-source-id: ea3a4ee036b2b808f14277387d360318b7d25824
Summary: Legacy resources are deprecated, this is what we should be using
Reviewed By: jselbo
Differential Revision: D25903962
fbshipit-source-id: ffa91a3aee8956591b7daab523bda2e59fec9932
Summary: This change will allow loading flipper not only internal build but also in builds that explicitly turn on LOAD_FLIPPER_EXPLICIT in build config
Reviewed By: timur-valiev
Differential Revision: D25369245
fbshipit-source-id: 9f8e5c7033aa4ded6ce7bc8cc5b5c252ba65692b
Summary:
This diff adds the Java classes that serialize to the data expected by the new timeline widget. See D23865369 for the JS counterpart.
Currently the Flipper plugin uses `toString` to get the wire values. I'm not feeling like using a json library or dealing with JSONObject's nonsense, so these are rolled manually for now.
Reviewed By: astreet
Differential Revision: D24254377
fbshipit-source-id: b2fc00400c40b47ac29c9b83c0b66621c3677974
Summary: jknoxville helped me debug this. The underlying problem was that we didn't include a dependency which is transitive in gradle land. We swallowed the exception and just returned an empty list. I left an error log in there to make future debugging easier. For reference, this was the error:
Reviewed By: cekkaewnumchai
Differential Revision: D23759727
fbshipit-source-id: 244510d2765913bf4c89458e336889c3c6838fc4
Summary: This broke DB opening in FB apps. Will try to fix and reland this, but need to unblock people first.
Reviewed By: cekkaewnumchai
Differential Revision: D23705962
fbshipit-source-id: 3c9ff3a74e5a6d34e6cb2c75e7e2cec749b5a60e
Summary:
This change will allow to use various SQLiteDatabase implementations: standard Android implementation, [requery/sqlite-android](https://github.com/requery/sqlite-android) and so on. See issue https://github.com/facebook/flipper/issues/1183
## Changelog
Android Databases Plugin: `SqliteDatabaseConnectionProvider` returns `SupportSQLiteDatabase` instead of `SQLiteDatabase`.
Pull Request resolved: https://github.com/facebook/flipper/pull/1196
Test Plan: Check that Databases Plugin shows correct data on the sample Android application.
Reviewed By: mweststrate
Differential Revision: D23294272
Pulled By: passy
fbshipit-source-id: c07ebeb869ab01d41281f75541cbb3411f0ebae0
Summary:
The function `setLayoutParams` expects the values to be set to be at array position 0+, and they were on position 1+ instead.
This effectively prevented users from setting LayoutParameters.
Reviewed By: muraziz
Differential Revision: D23538531
fbshipit-source-id: cc828363ee8d7408d1df29d98c37b09893826bb1
Summary: This diff uses the new picker defined in EnumMapping for regular Android View properties.
Reviewed By: muraziz
Differential Revision: D23538532
fbshipit-source-id: be5b776453e7322fb13a5f9e6a66a1f8d1243e79
Summary: This diff makes EnumMapping compatible with the new Layout widget "picker"
Reviewed By: muraziz
Differential Revision: D23538548
fbshipit-source-id: 7bdb01648c1ad5e2d0d7594c98df5ed89d893702
Summary: Detect if resolved path is properly computed and accordingly display a success or error notification within InAppErrorReporter.
Reviewed By: arpitratan
Differential Revision: D23425001
fbshipit-source-id: 4ca903a8b9e83dc0e11bb823537f56678dd85b76