Summary:
Removed all `GK.get('flipper_sandy') ` checks to make Sandy the default in public builds as well.
Changelog: Public OSS builds will now use Sandy by default
Reviewed By: passy
Differential Revision: D25803498
fbshipit-source-id: 17b0b431cd30ebcf1c308af0ce63a05b3798741e
Summary:
This fixes the issue raised [here](https://fb.workplace.com/groups/flippersupport/permalink/1059080941239230/) I added the `-l` tag which is for sending signal
{F360746398}
Reviewed By: jknoxville
Differential Revision: D25945336
fbshipit-source-id: a1d8eaf3888072a64ab682fbbc60c03c15ac023a
Summary:
As reported in https://fb.workplace.com/groups/748354712423318/permalink/773382183253904/, special case no devices being present and suggest to launch an emulator.
Also extends `useStore()` hook to accept no arguments, in which case it works as Redux's own `useStore` hook, except that it is strongly typed.
Reviewed By: passy
Differential Revision: D25803497
fbshipit-source-id: d448ac41e0ba7b713ee883caeb27736a2901975c
Summary:
See previous diff, plugins that are not available during the initial client connection setup didn't show up in the UI, until selecting another device first. This diff fixes that by listening to the `plugins-change` event of the client.
Changelog: Fix issue where React Native plugins didn't show up in the Sandy layout
Reviewed By: passy
Differential Revision: D25755812
fbshipit-source-id: d865d912ecca85d868831c4da7c56b5f0be6c3bf
Summary: For Whitehat adjustment to work with flipper. I would like to enable running the su for emulators and rooted device to enable work with flipperr.
Reviewed By: jknoxville
Differential Revision: D25527298
fbshipit-source-id: 0d3f19891eec7c09d7136867a7aceea40aeac60d
Summary: [Reported in the support group](https://fb.workplace.com/groups/flippersupport/permalink/1040131853134139/), screen recording can't be stopped on Android Marshmallow (SDK version 23). This is because the shell commands used in screen recording are different in SDK 23 compared to higher SDK. First, `pgrep` in SDK 23 doesn't have `-L` option. Second, `ls -l` of SDK 23 returns different pattern; we've relied on the 5th number to indicate the file size of a video, while it is on 4th number for SDK 23.
Reviewed By: passy
Differential Revision: D25641605
fbshipit-source-id: 110cb779ef4b2dc63a862bf5e4e5f3a304a0d8ec
Summary:
Discovered while testing D25584424, Sandy can't be applied and unapplied by regularly changing the setting.
This diff forces restart Flipper to correctly apply or unapply Sandy. This diff adds forced restart updated setting to check if restart is needed or not. Then, it disables regular `Apply` when restart is needed
Reviewed By: nikoant
Differential Revision: D25632887
fbshipit-source-id: 88b31fd740d4a639e20fe45a82e2615b53cad5c3
Summary: Installed plugins loaded and make it impossible to debug plugin changes. We need to disable them by default for `yarn start`. To debug plugin installation and auto-update, need to use command `yarn start --plugin-auto-update` instead.
Reviewed By: passy
Differential Revision: D25639345
fbshipit-source-id: 99b59a90dc09ac33a3604487fe501774e5e6fc39
Summary: Flipper receives a lot of messages which cannot be handled when plugins unbundled. Showing them as warnings is un-actionable with such big amount, so I disabled them.
Reviewed By: mweststrate
Differential Revision: D25557790
fbshipit-source-id: 1a0bc3df2848b194b72ea6d775ffabe416672fee
Summary:
Allow "uninstallation" of bundled plugins which means we mark them as uninstalled and not auto-updating anymore. Uninstalled bundled plugins are shown in "Detected in App" section together with Marketplace plugins where user can install them back.
Changelog:
Plugins can be uninstalled from sidebar in new Sandy UI.
Reviewed By: passy
Differential Revision: D25557789
fbshipit-source-id: 751cad68456313c069af639584541086efc7102b
Summary: Electron/Node.js does not garbage collects unloaded modules by default. Need to cleanup require.cache to fully unload them.
Reviewed By: passy
Differential Revision: D25545962
fbshipit-source-id: 4dce32f39e22adcd2b4f5a55853551379e786e7b
Summary: After unbudling plugins users will need to manually install them. To simlify this transition we can auto-install favorite plugins on every app connection, so users won't need to install plugins which they marked as favorite before.
Reviewed By: passy
Differential Revision: D25538638
fbshipit-source-id: 4ac3ad0c8c026d149f7ce0c4af07da3e8b909772
Summary:
New UX/UI for plugin auto-updates based on Sandy:
- disabled plugins auto-updated silently without any notifications as there is no active state for them so there is nothing to loose.
- enabled plugins can have some state and user can actually work with them, so we cannot reload them automatically. Instead, we show notification in the top of the plugin container asking user to reload the plugin when she is ready.
- if the auto-updated plugin failed to reload - show error notification.
- for non-sandy we continue using notifications as before.
Reviewed By: mweststrate
Differential Revision: D25530384
fbshipit-source-id: de3d0565ef0b930c9343b9e0ed07a4acb51885be
Summary:
I've re-designed interfaces describing plugins as I found that mental overhead working with them became too expensive because of slightly flawed design. However this cascaded changes in many files so you can see how extensively these interfaces used in our codebase.
Before this change we had one interface PluginDetails which described three different entities: 1) plugins installed on the disk 2) plugins bundled into Flipper 3) plugins available on Marketplace. It's hard to use this "general" PluginDetails interface because of this as you always need to think about all three use cases everywhere.
After this change we have 3 separate interfaces: InstalledPluginDetails, BundledPluginDetails and DownloadablePluginDetails and things became much type-safer now.
Reviewed By: mweststrate
Differential Revision: D25530383
fbshipit-source-id: b93593916a980c04e36dc6ffa168797645a0ff9c
Summary: Show progress reporting in sidebar during plugin download. Also handle plugin download errors and show them to user as notifications.
Reviewed By: mweststrate
Differential Revision: D25530385
fbshipit-source-id: 42bf0e65b4434d00c1465705ce9ec5c723df6841
Summary: This diff changes uninstallation procedure for plugins. Instead of deleting plugin files immediately we are keeping them, but mark them as "uninstalled". This makes it possible to re-install plugins quickly in case when user clicked "delete" by mistake.
Reviewed By: mweststrate
Differential Revision: D25493479
fbshipit-source-id: 9ff29d717cdd5401c55388f24d479599579c8dd3
Summary: Added UI for uninstalling plugins from sidebar. To avoid confusion between "disable" and "uninstall" and to reduce possibility of errors when plugins uninstalled accidentally by misclicks, I made it only possible to uninstall plugins after they are disabled. So for enabled plugins two steps are required for uninstalling.
Reviewed By: mweststrate
Differential Revision: D25454117
fbshipit-source-id: 28e67dc1ff2d39ad67e6d2770302a996affd9723
Summary:
This diff adds "download" button to the plugins shown in "Detected in App" section, so they can be downloaded, installed and enabled just in one click.
For now UI is very simple - there is no progress indication and no error handling for failed downloads. I'll add them in next diffs.
Please note that we are explicitly "star" every installed plugin to enable it straight away without additional clicks in "disabled" section.
Reviewed By: mweststrate
Differential Revision: D25393472
fbshipit-source-id: 0a224ea6d03db0ee9a70b7fa35ede9616c03d824
Summary:
This diff changes directory structure for installed plugins to allow installation of multiple versions simultaneously, e.g. to to allow downloading new plugin version while user is still using the previous one, and to have possibility of fast rollback to the previous installed if necessary. The new folder for installed plugins is located in `~/.flipper/installed-plugins` and has the following structure:
flipper-plugin-reactotron
1.0.0
...
package.json
1.0.1
...
package.json
flipper-plugin-network
0.67.1
...
package.json
0.67.2
...
package.json
The tricky part here is that we also need to migrate already installed plugins from the old folder `~/.flipper/thirdparty` to the new folder and maintain the new structure for them.
Another tricky part is that we need to periodically cleanup old versions. For now we will just keep 2 versions of each plugin. Cleanup is performed in background right after Flipper startup.
Reviewed By: mweststrate
Differential Revision: D25393474
fbshipit-source-id: 26617ac26114148f797cc3d6765a42242edc205e
Summary:
New section "Detected in App" in the main sidebar showing plugins which are supported by the currently selected client app, but not installed in Flipper.
Note that in this diff we only show them, there is no "install" button yet. I will add it in a next diff.
Reviewed By: mweststrate
Differential Revision: D25361915
fbshipit-source-id: 8fff6887a8ec04b3b59c939a758c8f801f42490f
Summary:
Separate dispatcher for periodic refreshing available plugins data from the Marketplace backend and caching it locally.
The plugin auto update downloader subscribes to these state refreshes and automatically schedules plugin update downloads when required.
Reviewed By: passy
Differential Revision: D25360897
fbshipit-source-id: 5b6d95b63ff47b8ae9ad8b12e2480d1fed524ca5
Summary: Extracted plugin marketplace API to a separate file and updated it to load full plugin manifests.
Reviewed By: passy
Differential Revision: D25181759
fbshipit-source-id: a63f9ce16249ccc170df148cef5c209fdc6d4d6d
Summary:
A lot of the errors in our monitoring / logs are mere sign in errors. Many of them are unnecessary as they are features triggered automatically even when the user isn't logged in.
This diff improves error handling and prevents requires from being made / features from being used by introducing a `<RequireLogin>` component that will hide an underlying feature if the user isn't logged in.
This also prevents the support request form from failing after the user has filled in all details.
This also fixes an issue where mobilebuilds plugin didn't refresh after the user did log in.
From our monitoring error 1,9 and 10:
{F350458668}
Reviewed By: jknoxville
Differential Revision: D25494356
fbshipit-source-id: 95701381bb74c27b9ea9658dc4df678e5f0710e0
Summary: See https://github.com/facebook/flipper/issues/1755, we did hide the Sandy option in OSS, but not the dark mode option. I intend to enable & switch to Sandy in OSS after the holidays, to make it easier to deal with any possible fallout.
Reviewed By: nikoant
Differential Revision: D25460906
fbshipit-source-id: b80d751f2ff435775d08d17effb81e56db738d4d
Summary: Noticed when testing `selectClient` logic, that if plugin selection is changed programmatically rather than interactively, the selection isn't updated, and the scrolling wasn't working nicely either (since `active` collided with a non-public Ant field it always got overriden).
Reviewed By: nikoant
Differential Revision: D25460681
fbshipit-source-id: 1854ee8b9e6b2a2580f2143cd834ac1eacd296a9
Summary:
Introduced API to replace the deprecated `selectPlugin` in Sandy.
The API can be used to navigate from `device plugin -> device plugin`, or` client plugin -> device / client plugin`
Introduced `isPluginAvailable` as well, so that the user interaction an be fine tuned in case the plugin is not disabled.
Reviewed By: jknoxville
Differential Revision: D25422370
fbshipit-source-id: c6c603f1c68e6291280b3d0883e474448754ded1
Summary: In the Sandy welcome screen, the `Don't show this dialog again` checkbox couldn't not be toggled back on after it was toggled off.
Reviewed By: passy
Differential Revision: D25421721
fbshipit-source-id: c58170bb9442d1114d1197655bc58f61e47da880
Summary: This diff adds an option to wipe local storage to the settings dialog, to reset all preferences, table column widths, changelog and Nux state, etc. etc. in one go. This is primarily an self-fixing mechanism in case we mess up in the future, but useful during development / testing as well.
Reviewed By: passy
Differential Revision: D25421722
fbshipit-source-id: 3b69653b2142a7178ef83e01d35309f3a971e2cf
Summary:
`activatePlugin` events where not recorded correctly for Sandy plugins. Although the starting measuerments is fired the `connections` reducer, the completing event fires from `PluginContainer`. Since this is done as part of a ref-update (!!), see [here](https://www.internalfb.com/intern/diffusion/FBS/browse/master/xplat/sonar/desktop/app/src/PluginContainer.tsx?commit=65a625ea9941&lines=155), and the ref to the corresponding element is not set for Sandy plugins, the event was never marked as completed.
Fixed this by making it part of the `activate` life-cycle event of Sandy plugins.
Reviewed By: passy
Differential Revision: D25421537
fbshipit-source-id: 5cbfeb91cc12e4520fa271bab24034094d7ddb39
Summary: In the Flipper chrome there is a lot of `logger={logger}` prop drilling. Let's not do that anymore in the future by using a proper hook, which is exposed from `flipper-plugin`.
Reviewed By: passy
Differential Revision: D25421304
fbshipit-source-id: 01ec8563c67f7e2fac359c2f8216eba722bff8d9
Summary: Each build will have an embedded file specifying the target release channel for the build. This allows us to do some customisations, e.g. show "Insiders" label in the title and enable Sandy by default for insiders builds.
Reviewed By: jknoxville
Differential Revision: D25399045
fbshipit-source-id: 8e26d0754d0713ced823f86b30b54491d55b4d97
Summary: Metro and Mac device were always hidden in Sandy, but they should only be hidden if they don't have underlying Clients. Fixes https://fb.workplace.com/groups/748354712423318/permalink/775342569724532/
Reviewed By: nikoant
Differential Revision: D25369492
fbshipit-source-id: fdc25c3646d8339ae029425b4c45d8631bbee762
Summary:
This is the 6th most common error in our logging, and I just run into it after upgrading XCode. It happens when idb doesn't return any devices.
(because `''.split('\n')` results in `['']` not `[]`)
Reviewed By: jknoxville
Differential Revision: D25368759
fbshipit-source-id: 44b0e3a5dc4cf06ecdf2dff4a5692943e60d4b1d
Summary: Make sure that GKs can be used in pure sandy plugins.
Reviewed By: jknoxville
Differential Revision: D25368358
fbshipit-source-id: c7c6aa4ecf0443cb3b5d90e22e8aca9a73a69389
Summary: Rust default configuration path changed recently which broke transferring of settings between flipper desktop and launcher. This diff fixes it.
Reviewed By: passy
Differential Revision: D25334963
fbshipit-source-id: d6ebea9e5cfa68858a9fc2a51102815d646ab319
Summary: Delegate to launcher on restart after settings changed. This is required to update Flipper after changing release channel.
Reviewed By: passy
Differential Revision: D25331466
fbshipit-source-id: d98e272971b5782d3b9c46e6ba62d883ebbb804c
Summary:
See previous diff, if the plugin `id` on the class definition mismatches with the `package.json`, the navigation in Sandy will use the wrong id (from the meta data) causing the plugin not to open.
Since the `id` exposed on the class is the one that is used to setup the connect on the client, updated the ids in the `package.json` which have afaik no further meaning.
Pinging nikoant to verify that assumption. I can imagine this might impact historical data / plugin distribution?
Reviewed By: passy, nikoant
Differential Revision: D25302542
fbshipit-source-id: 43fe1667604eb7a28f6f9b7d260bc2a1e6e82dd3
Summary:
FluxStores plugin of AdsManager didn't open on Sandy. The underlying reason is that in Sandy the list was based on the plugin id's as exposed in the `package.json`, while in the old left sidebar it was based on the `id` stored on the Plugin class. And apparently they can differ (will fix that in the next diff)
We can release an update of this plugin after it landed
Reviewed By: passy
Differential Revision: D25302357
fbshipit-source-id: 874aab263fad6a83f63edc4a8f7fa7ceceaef70f
Summary: Wired up tracking to all chrome sections and some import UI elements
Reviewed By: jknoxville
Differential Revision: D25219089
fbshipit-source-id: c75bed91894609dafc5fcc6423a5228211fb92d8
Summary:
This wires up tracking directly to the ANT component library for the following components:
1. `Button`
2. `Collapse.Panel`
3. `Tabs`
Other less commonly used elements can be connected in the future if needed.
I played a bit with different patterns, but in testing the patch-package patching give the most reliable results. Alternatives considered:
1. Expect users to explicitly wrap there components, e.g. `<Tracked><Button>Hi</Button></Tracked>`
1. Didn't implement this because it would be very common to forget, and at the moment you want to make some analysis you'll discover there is no interesting data available. I think for tracking we want to have opt-out rather than opt-in
2. The additional wrapping can cause some subtile layout issues due to static field inspection / forwarded refs (e.g. Ant often has an assumption that relevant children types are _directly_ nested under their parent element. For examle `<Tooltip><Tracked><Button>` does not work as expected
2. Expose our own `Button` / `Collapse` / `Tabs` that applies `Tracked` to an underlying Ant component.
1. also suffers from 1.b.
2. It is gonna be quite confusing for other devs that some elements would need to be imported from `flipper-plugin`, ant some from `antd`, and that this is likely to change over time. We could lint against it, but it will be still suboptimal
Reviewed By: jknoxville
Differential Revision: D25196321
fbshipit-source-id: b559356498c3191a283062a88daacb354b0f79f4
Summary: Connect usage tracking to the Flipper core, individual elements will be wrapped in a next diff
Reviewed By: passy
Differential Revision: D25196284
fbshipit-source-id: 103e1d21d2f23fbbc21975fa85082811f6f53348