Track device register and unregister
Summary: Now we get one event for every time an android or iOS device is detected by flipper. This is different from a successfull connection. E.g. it may not have any flipper-enabled apps running. Reviewed By: danielbuechele Differential Revision: D13377316 fbshipit-source-id: 80e42ab0ae1c2ab50d4bec732a0fa86fcd941991
This commit is contained in:
committed by
Facebook Github Bot
parent
f7ddf3b496
commit
140f846797
@@ -13,19 +13,19 @@ import type BaseDevice from '../devices/BaseDevice';
|
|||||||
import type Logger from '../fb-stubs/Logger.js';
|
import type Logger from '../fb-stubs/Logger.js';
|
||||||
const adb = require('adbkit-fb');
|
const adb = require('adbkit-fb');
|
||||||
|
|
||||||
function createDevice(client, device): Promise<AndroidDevice> {
|
function createDevice(adbClient, device): Promise<AndroidDevice> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const type =
|
const type =
|
||||||
device.type !== 'device' || device.id.startsWith('emulator')
|
device.type !== 'device' || device.id.startsWith('emulator')
|
||||||
? 'emulator'
|
? 'emulator'
|
||||||
: 'physical';
|
: 'physical';
|
||||||
|
|
||||||
client.getProperties(device.id).then(async props => {
|
adbClient.getProperties(device.id).then(async props => {
|
||||||
let name = props['ro.product.model'];
|
let name = props['ro.product.model'];
|
||||||
if (type === 'emulator') {
|
if (type === 'emulator') {
|
||||||
name = (await getRunningEmulatorName(device.id)) || name;
|
name = (await getRunningEmulatorName(device.id)) || name;
|
||||||
}
|
}
|
||||||
const androidDevice = new AndroidDevice(device.id, type, name, client);
|
const androidDevice = new AndroidDevice(device.id, type, name, adbClient);
|
||||||
androidDevice.reverse();
|
androidDevice.reverse();
|
||||||
resolve(androidDevice);
|
resolve(androidDevice);
|
||||||
});
|
});
|
||||||
@@ -115,10 +115,7 @@ export default (store: Store, logger: Logger) => {
|
|||||||
)
|
)
|
||||||
.map((device: BaseDevice) => device.serial);
|
.map((device: BaseDevice) => device.serial);
|
||||||
|
|
||||||
store.dispatch({
|
unregisterDevices(deviceIDsToRemove);
|
||||||
type: 'UNREGISTER_DEVICES',
|
|
||||||
payload: new Set(deviceIDsToRemove),
|
|
||||||
});
|
|
||||||
console.error('adb server was shutdown');
|
console.error('adb server was shutdown');
|
||||||
setTimeout(watchAndroidDevices, 500);
|
setTimeout(watchAndroidDevices, 500);
|
||||||
} else {
|
} else {
|
||||||
@@ -128,34 +125,20 @@ export default (store: Store, logger: Logger) => {
|
|||||||
|
|
||||||
tracker.on('add', async device => {
|
tracker.on('add', async device => {
|
||||||
if (device.type !== 'offline') {
|
if (device.type !== 'offline') {
|
||||||
const androidDevice = await createDevice(client, device);
|
registerDevice(client, device);
|
||||||
store.dispatch({
|
|
||||||
type: 'REGISTER_DEVICE',
|
|
||||||
payload: androidDevice,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
tracker.on('change', async device => {
|
tracker.on('change', async device => {
|
||||||
if (device.type === 'offline') {
|
if (device.type === 'offline') {
|
||||||
store.dispatch({
|
unregisterDevices([device.id]);
|
||||||
type: 'UNREGISTER_DEVICES',
|
|
||||||
payload: new Set([device.id]),
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
const androidDevice = await createDevice(client, device);
|
registerDevice(client, device);
|
||||||
store.dispatch({
|
|
||||||
type: 'REGISTER_DEVICE',
|
|
||||||
payload: androidDevice,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
tracker.on('remove', device => {
|
tracker.on('remove', device => {
|
||||||
store.dispatch({
|
unregisterDevices([device.id]);
|
||||||
type: 'UNREGISTER_DEVICES',
|
|
||||||
payload: new Set([device.id]),
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
@@ -171,5 +154,31 @@ export default (store: Store, logger: Logger) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
async function registerDevice(adbClient: any, deviceData: any) {
|
||||||
|
const androidDevice = await createDevice(adbClient, deviceData);
|
||||||
|
logger.track('usage', 'register-device', {
|
||||||
|
os: 'Android',
|
||||||
|
name: androidDevice.title,
|
||||||
|
serial: androidDevice.serial,
|
||||||
|
});
|
||||||
|
store.dispatch({
|
||||||
|
type: 'REGISTER_DEVICE',
|
||||||
|
payload: androidDevice,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function unregisterDevices(deviceIds: Array<string>) {
|
||||||
|
deviceIds.forEach(id =>
|
||||||
|
logger.track('usage', 'unregister-device', {
|
||||||
|
os: 'Android',
|
||||||
|
serial: id,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
store.dispatch({
|
||||||
|
type: 'UNREGISTER_DEVICES',
|
||||||
|
payload: new Set(deviceIds),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
watchAndroidDevices();
|
watchAndroidDevices();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ window.addEventListener('beforeunload', () => {
|
|||||||
portForwarders.forEach(process => process.kill());
|
portForwarders.forEach(process => process.kill());
|
||||||
});
|
});
|
||||||
|
|
||||||
function queryDevices(store: Store): Promise<void> {
|
function queryDevices(store: Store, logger: Logger): Promise<void> {
|
||||||
const {connections} = store.getState();
|
const {connections} = store.getState();
|
||||||
const currentDeviceIDs: Set<string> = new Set(
|
const currentDeviceIDs: Set<string> = new Set(
|
||||||
connections.devices
|
connections.devices
|
||||||
@@ -65,6 +65,12 @@ function queryDevices(store: Store): Promise<void> {
|
|||||||
if (currentDeviceIDs.has(udid)) {
|
if (currentDeviceIDs.has(udid)) {
|
||||||
currentDeviceIDs.delete(udid);
|
currentDeviceIDs.delete(udid);
|
||||||
} else {
|
} else {
|
||||||
|
logger.track('usage', 'register-device', {
|
||||||
|
os: 'iOS',
|
||||||
|
type: type,
|
||||||
|
name: name,
|
||||||
|
serial: udid,
|
||||||
|
});
|
||||||
store.dispatch({
|
store.dispatch({
|
||||||
type: 'REGISTER_DEVICE',
|
type: 'REGISTER_DEVICE',
|
||||||
payload: new IOSDevice(udid, type, name),
|
payload: new IOSDevice(udid, type, name),
|
||||||
@@ -73,6 +79,9 @@ function queryDevices(store: Store): Promise<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (currentDeviceIDs.size > 0) {
|
if (currentDeviceIDs.size > 0) {
|
||||||
|
currentDeviceIDs.forEach(id =>
|
||||||
|
logger.track('usage', 'unregister-device', {os: 'iOS', serial: id}),
|
||||||
|
);
|
||||||
store.dispatch({
|
store.dispatch({
|
||||||
type: 'UNREGISTER_DEVICES',
|
type: 'UNREGISTER_DEVICES',
|
||||||
payload: currentDeviceIDs,
|
payload: currentDeviceIDs,
|
||||||
@@ -123,10 +132,10 @@ export default (store: Store, logger: Logger) => {
|
|||||||
if (process.platform !== 'darwin') {
|
if (process.platform !== 'darwin') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
queryDevices(store)
|
queryDevices(store, logger)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
const simulatorUpdateInterval = setInterval(() => {
|
const simulatorUpdateInterval = setInterval(() => {
|
||||||
queryDevices(store).catch(err => {
|
queryDevices(store, logger).catch(err => {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
clearInterval(simulatorUpdateInterval);
|
clearInterval(simulatorUpdateInterval);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user