#!/usr/bin/env bash # frontend → detour build → install on the connected phone → launch → screenshot set -euo pipefail cd /f/Coding/SoulStream export MSYS_NO_PATHCONV=1 ADB="$(cygpath -u "$LOCALAPPDATA")/Android/Sdk/platform-tools/adb.exe" echo "== vite $(date +%T)" npx vite build 2>&1 | grep -i "error\|built in" || true bash src-tauri/android/build.sh APK=src-tauri/gen/android/app/build/outputs/apk/arm64/debug/app-arm64-debug.apk echo "== install $(date +%T)" "$ADB" install -r "$APK" 2>&1 | tail -2 # the media card is a notification; a debug install grants the permission up # front so the first play never stops on the system's dialog "$ADB" shell pm grant com.soulstream.app android.permission.POST_NOTIFICATIONS 2>/dev/null || true "$ADB" shell am force-stop com.soulstream.app # launch and screenshot only when the phone is ours to drive: SoulStream or # the launcher on screen. Never take the screen from another app. FOCUS=$("$ADB" shell dumpsys window 2>/dev/null | grep -a "mCurrentFocus" | head -1) if echo "$FOCUS" | grep -qi "soulstream\|launcher"; then "$ADB" shell am start -n com.soulstream.app/.MainActivity >/dev/null sleep 5 OUT="${SS_SHOT_DIR:-$(cygpath -u "$TEMP")}" "$ADB" exec-out screencap -p > "$OUT/px-1.png" echo "== shot $(date +%T) -> $OUT/px-1.png" else echo "== installed; not launched (the phone is in use: $FOCUS)" fi