device-shots 0.5.11 → 0.5.12

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.
Files changed (2) hide show
  1. package/dist/index.js +36 -23
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -269,6 +269,7 @@ async function captureIosScreenshot(udid, outputPath) {
269
269
  }
270
270
 
271
271
  // src/devices/android.ts
272
+ import { execSync } from "child_process";
272
273
  function sanitizeName2(name) {
273
274
  return name.replace(/[ (),]/g, "_").replace(/[^A-Za-z0-9_-]/g, "");
274
275
  }
@@ -337,38 +338,50 @@ async function discoverAndroidDevices(bundleId) {
337
338
  function sleep(ms) {
338
339
  return new Promise((resolve) => setTimeout(resolve, ms));
339
340
  }
340
- async function demoBroadcast(serial, extras) {
341
- const adb = getAdbPath();
342
- await run(adb, [
343
- "-s",
344
- serial,
345
- "shell",
346
- "am",
347
- "broadcast",
348
- "-a",
349
- "com.android.systemui.demo",
350
- ...extras
351
- ]);
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
+ }
352
351
  }
353
352
  async function setAndroidDemoMode(serial, time = "9:30") {
354
353
  const hhmm = time.replace(":", "");
355
354
  const adb = getAdbPath();
356
- await run(adb, ["-s", serial, "shell", "settings", "put", "global", "sysui_demo_allowed", "1"]);
357
- await run(adb, ["-s", serial, "shell", "settings", "put", "global", "sysui_tuner_demo_on", "1"]);
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
358
  await sleep(500);
359
- await demoBroadcast(serial, ["--es", "command", "enter"]);
359
+ let r = adbShellSync(adb, serial, `am broadcast -a ${ACTION} --es command enter`);
360
+ process.stderr.write(`[demo] enter: ${r}
361
+ `);
360
362
  await sleep(1e3);
361
- await demoBroadcast(serial, ["--es", "command", "clock", "--es", "hhmm", hhmm]);
362
- await demoBroadcast(serial, ["--es", "command", "network", "--es", "wifi", "show", "--es", "level", "4"]);
363
- await demoBroadcast(serial, ["--es", "command", "network", "--es", "mobile", "show", "--es", "datatype", "none", "--es", "level", "4"]);
364
- await demoBroadcast(serial, ["--es", "command", "battery", "--es", "level", "100", "--es", "plugged", "false"]);
365
- await demoBroadcast(serial, ["--es", "command", "notifications", "--es", "visible", "false"]);
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
+ `);
366
378
  await sleep(1e3);
367
379
  }
368
380
  async function clearAndroidDemoMode(serial) {
369
- await demoBroadcast(serial, ["--es", "command", "exit"]);
370
381
  const adb = getAdbPath();
371
- await run(adb, ["-s", serial, "shell", "settings", "put", "global", "sysui_tuner_demo_on", "0"]);
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");
372
385
  }
373
386
  async function captureAndroidScreenshot(serial, outputPath) {
374
387
  const adb = getAdbPath();
@@ -852,7 +865,7 @@ async function frameCommand(dir, options) {
852
865
  var program = new Command();
853
866
  program.name("device-shots").description(
854
867
  "Capture and frame mobile app screenshots from iOS simulators and Android emulators"
855
- ).version("0.5.11");
868
+ ).version("0.5.12");
856
869
  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) => {
857
870
  await captureCommand({ name, ...opts });
858
871
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "device-shots",
3
- "version": "0.5.11",
3
+ "version": "0.5.12",
4
4
  "description": "Capture and frame mobile app screenshots from iOS simulators and Android emulators",
5
5
  "type": "module",
6
6
  "bin": {