Skip to main content
Glama
Shake.ts1.97 kB
import { AdbUtils } from "../../utils/android-cmdline-tools/adb"; import { BaseVisualChange, ProgressCallback } from "./BaseVisualChange"; import { BootedDevice, ShakeOptions, ShakeResult } from "../../models"; import { logger } from "../../utils/logger"; import { Axe } from "../../utils/ios-cmdline-tools/axe"; export class Shake extends BaseVisualChange { constructor(device: BootedDevice, adb: AdbUtils | null = null, axe: Axe | null = null) { super(device, adb, axe); } async execute( options: ShakeOptions = {}, progress?: ProgressCallback ): Promise<ShakeResult> { const duration = options.duration ?? 1000; // Default 1 second const intensity = options.intensity ?? 100; // Default intensity of 100 return this.observedInteraction( async () => { try { // Start the shake by setting high acceleration values await this.adb.executeCommand(`emu sensor set acceleration ${intensity}:${intensity}:${intensity}`); logger.info(`Started shake with intensity ${intensity} for ${duration}ms`); // Wait for the specified duration await new Promise(resolve => setTimeout(resolve, duration)); // Stop the shake by resetting acceleration to 0 await this.adb.executeCommand(`emu sensor set acceleration 0:0:0`); logger.info("Shake completed"); return { success: true, duration, intensity }; } catch (error) { logger.error(`Failed to execute shake: ${error}`); return { success: false, duration, intensity, error: `Failed to shake device: ${error}` }; } }, { changeExpected: false, // Shake typically doesn't change UI directly timeoutMs: duration + 2000, // Give extra time beyond shake duration tolerancePercent: 0.00, progress } ); } }

Implementation Reference

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zillow/auto-mobile'

If you have feedback or need assistance with the MCP directory API, please join our Discord server