ice, deviceType, }; }, addDeviceType(deviceType) { return { type: ADD_DEVICE_TYPE, deviceType, }; }, editCustomDevice(viewport, oldDevice, newDevice) { return async function ({ dispatch }) { // Edit custom device in storage await editDevice(oldDevice, newDevice, "custom"); // Notify the window that the device should be updated in the device selector. post(window, { type: "change-device", device: newDevice, viewport, }); // Update UI if the device is selected. if (viewport) { dispatch(changeUserAgent(newDevice.userAgent)); dispatch(toggleTouchSimulation(newDevice.touch)); } dispatch({ type: EDIT_DEVICE, deviceType: "custom", viewport, oldDevice, newDevice, }); }; }, removeCustomDevice(device) { return async function ({ dispatch }) { // Remove custom device from device storage await removeDevice(device, "custom"); dispatch({ type: REMOVE_DEVICE, device, deviceType: "custom", }); }; }, updateDeviceDisplayed(device, deviceType, displayed) { return { type: UPDATE_DEVICE_DISPLAYED, device, deviceType, displayed, }; }, loadDevices() { return async function ({ dispatch }) { dispatch({ type: LOAD_DEVICE_LIST_START }); const preferredDevices = loadPreferredDevices(); let deviceByTypes; try { deviceByTypes = await getDevices(); } catch (e) { console.error("Could not load device list: " + e); dispatch({ type: LOAD_DEVICE_LIST_ERROR }); return; } for (const [type, devices] of deviceByTypes.entries()) { dispatch(module.exports.addDeviceType(type)); for (const device of devices) { if (device.os == "fxos") { continue; } const newDevice = Object.assign({}, device, { displayed: preferredDevices.added.has(device.name) || (device.featured && !preferredDevices.removed.has(device.name)), }); dispatch(module.exports.addDevice(newDevice, type)); } } // Add an empty "custom" type if it doesn't exist in device storage if (!deviceByTypes.has("custom")) { dispatch(module.exports.addDeviceType("custom")); } dispatch({ type: LOAD_DEVICE_LIST_END }); }; }, restoreDeviceState() { return async function ({ dispatch, getState }) { const deviceState = await asyncStorage.getItem( "devtools.responsive.deviceState" ); if (!deviceState) { return; } const { id, device: deviceName, deviceType } = deviceState; const devices = getState().devices; if (!devices.types.includes(deviceType)) { // Can't find matching device type. return; } const device = devices[deviceType].find(d => d.name === deviceName); if (!device) { // Can't find device with the same device name. return; } const viewport = getState().viewports[0]; post(window, { type: "change-device", device, viewport, }); dispatch(changeDevice(id, device.name, deviceType)); dispatch(changeViewportAngle(id, viewport.angle)); dispatch(changePixelRatio(id, device.pixelRatio)); dispatch(changeUserAgent(device.userAgent)); dispatch(toggleTouchSimulation(device.touch)); }; }, updateDeviceModal(isOpen, modalOpenedFromViewport = null) { return { type: UPDATE_DEVICE_MODAL, isOpen, modalOpenedFromViewport, }; }, }; PK