device-shots 0.5.12 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -61
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -269,7 +269,6 @@ async function captureIosScreenshot(udid, outputPath) {
|
|
|
269
269
|
}
|
|
270
270
|
|
|
271
271
|
// src/devices/android.ts
|
|
272
|
-
import { execSync } from "child_process";
|
|
273
272
|
function sanitizeName2(name) {
|
|
274
273
|
return name.replace(/[ (),]/g, "_").replace(/[^A-Za-z0-9_-]/g, "");
|
|
275
274
|
}
|
|
@@ -335,54 +334,6 @@ async function discoverAndroidDevices(bundleId) {
|
|
|
335
334
|
}
|
|
336
335
|
return devices;
|
|
337
336
|
}
|
|
338
|
-
function sleep(ms) {
|
|
339
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
340
|
-
}
|
|
341
|
-
function adbShellSync(adb, serial, cmd) {
|
|
342
|
-
try {
|
|
343
|
-
const result = execSync(`${adb} -s ${serial} shell ${cmd}`, {
|
|
344
|
-
encoding: "utf-8",
|
|
345
|
-
timeout: 1e4
|
|
346
|
-
});
|
|
347
|
-
return result.trim();
|
|
348
|
-
} catch (e) {
|
|
349
|
-
return e.stdout?.trim() || e.stderr?.trim() || "";
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
async function setAndroidDemoMode(serial, time = "9:30") {
|
|
353
|
-
const hhmm = time.replace(":", "");
|
|
354
|
-
const adb = getAdbPath();
|
|
355
|
-
const ACTION = "com.android.systemui.demo";
|
|
356
|
-
adbShellSync(adb, serial, "settings put global sysui_demo_allowed 1");
|
|
357
|
-
adbShellSync(adb, serial, "settings put global sysui_tuner_demo_on 1");
|
|
358
|
-
await sleep(500);
|
|
359
|
-
let r = adbShellSync(adb, serial, `am broadcast -a ${ACTION} --es command enter`);
|
|
360
|
-
process.stderr.write(`[demo] enter: ${r}
|
|
361
|
-
`);
|
|
362
|
-
await sleep(1e3);
|
|
363
|
-
r = adbShellSync(adb, serial, `am broadcast -a ${ACTION} --es command clock --es hhmm ${hhmm}`);
|
|
364
|
-
process.stderr.write(`[demo] clock: ${r}
|
|
365
|
-
`);
|
|
366
|
-
r = adbShellSync(adb, serial, `am broadcast -a ${ACTION} --es command network --es wifi show --es level 4`);
|
|
367
|
-
process.stderr.write(`[demo] wifi: ${r}
|
|
368
|
-
`);
|
|
369
|
-
r = adbShellSync(adb, serial, `am broadcast -a ${ACTION} --es command network --es mobile show --es datatype none --es level 4`);
|
|
370
|
-
process.stderr.write(`[demo] mobile: ${r}
|
|
371
|
-
`);
|
|
372
|
-
r = adbShellSync(adb, serial, `am broadcast -a ${ACTION} --es command battery --es level 100 --es plugged false`);
|
|
373
|
-
process.stderr.write(`[demo] battery: ${r}
|
|
374
|
-
`);
|
|
375
|
-
r = adbShellSync(adb, serial, `am broadcast -a ${ACTION} --es command notifications --es visible false`);
|
|
376
|
-
process.stderr.write(`[demo] notif: ${r}
|
|
377
|
-
`);
|
|
378
|
-
await sleep(1e3);
|
|
379
|
-
}
|
|
380
|
-
async function clearAndroidDemoMode(serial) {
|
|
381
|
-
const adb = getAdbPath();
|
|
382
|
-
const ACTION = "com.android.systemui.demo";
|
|
383
|
-
adbShellSync(adb, serial, `am broadcast -a ${ACTION} --es command exit`);
|
|
384
|
-
adbShellSync(adb, serial, "settings put global sysui_tuner_demo_on 0");
|
|
385
|
-
}
|
|
386
337
|
async function captureAndroidScreenshot(serial, outputPath) {
|
|
387
338
|
const adb = getAdbPath();
|
|
388
339
|
const deviceTmp = "/sdcard/screenshot_tmp.png";
|
|
@@ -618,7 +569,6 @@ async function captureCommand(options) {
|
|
|
618
569
|
const outputDir = options.output || config.output;
|
|
619
570
|
const platform = options.platform || config.platform;
|
|
620
571
|
const iosTime = options.time || config.time;
|
|
621
|
-
const androidTime = config.androidTime;
|
|
622
572
|
const shouldFrame = !options.noFrame && config.frame;
|
|
623
573
|
const spinner = ora("Discovering devices...").start();
|
|
624
574
|
const devices = await discoverDevices(bundleId, platform);
|
|
@@ -695,13 +645,6 @@ Detected ${devices.length} device(s) with ${bundleIdDisplay}:`)
|
|
|
695
645
|
await setIosStatusBar(iosTime);
|
|
696
646
|
s.succeed("iOS status bar set");
|
|
697
647
|
}
|
|
698
|
-
if (androidDevices.length > 0) {
|
|
699
|
-
const s = ora("Setting clean Android status bar...").start();
|
|
700
|
-
for (const device of androidDevices) {
|
|
701
|
-
await setAndroidDemoMode(device.captureId, androidTime);
|
|
702
|
-
}
|
|
703
|
-
s.succeed("Android demo mode set");
|
|
704
|
-
}
|
|
705
648
|
console.log("");
|
|
706
649
|
const captured = [];
|
|
707
650
|
for (const device of devices) {
|
|
@@ -753,9 +696,6 @@ Detected ${devices.length} device(s) with ${bundleIdDisplay}:`)
|
|
|
753
696
|
if (iosDevices.length > 0) {
|
|
754
697
|
await clearIosStatusBar();
|
|
755
698
|
}
|
|
756
|
-
for (const device of androidDevices) {
|
|
757
|
-
await clearAndroidDemoMode(device.captureId);
|
|
758
|
-
}
|
|
759
699
|
const skippedDupes = captured.length - movedBuckets.size;
|
|
760
700
|
let msg = `
|
|
761
701
|
Captured ${movedBuckets.size} screenshot(s) as '${screenshotName}'.`;
|
|
@@ -865,7 +805,7 @@ async function frameCommand(dir, options) {
|
|
|
865
805
|
var program = new Command();
|
|
866
806
|
program.name("device-shots").description(
|
|
867
807
|
"Capture and frame mobile app screenshots from iOS simulators and Android emulators"
|
|
868
|
-
).version("0.
|
|
808
|
+
).version("0.6.1");
|
|
869
809
|
program.command("capture").description("Capture screenshots from running devices").argument("[name]", "Screenshot name").option("-b, --bundle-id <id>", "App bundle ID").option("-o, --output <dir>", "Output directory").option("-p, --platform <platform>", "ios, android, or both").option("--no-frame", "Skip framing after capture").option("--time <time>", "Status bar time", "9:41").action(async (name, opts) => {
|
|
870
810
|
await captureCommand({ name, ...opts });
|
|
871
811
|
});
|