# DroidScope — TODO ## Legend - `[x]` Done - `[ ]` Not started - `[~]` In progress --- ## Infrastructure - [x] Project scaffold (Wails + Go + React/TS + Kotlin SDK) - [x] Monorepo structure (`desktop/`, `backend-go/`, `frontend-react/`, `android-sdk/`) - [x] Go workspace (`go.work`) - [x] Shared event protocol (Go structs + TypeScript types) - [x] Dev script (`scripts/dev.sh`) — builds backend, desktop, regenerates bindings, type-checks, then starts - [x] Build script (`scripts/build.sh`) - [x] Development guide (`DEVELOPMENT.md`) - [x] Bundle ADB binary infrastructure (`desktop/internal/adbembed/`) - [x] ADB discovery at runtime (embedded → ANDROID_HOME → PATH fallback) - [x] Download ADB binaries for distribution (`scripts/download-adb.sh` ready, run once) - [ ] CI/CD pipeline --- ## Phase 1 — MVP ### Device Management - [x] ADB wrapper (`backend-go/adb/`) - [x] List connected devices (1s poll) - [x] Device connect / disconnect - [x] Wireless ADB support - [x] Device reconnect handling - [x] Emulator support - [x] Static device info (model, Android version, ABI, manufacturer, screen, build fingerprint) - [x] Live device stats — 1s poll (available RAM, battery level/status, thermal status, available storage, IP) - [x] Frontend: device list panel with real-time updates - [x] Frontend: wireless connect dialog - [x] Frontend: disconnect action - [x] Frontend: device info panel — static fields fetched once, live fields pulsing every second - [x] Frontend: RAM usage progress bar (live) - [x] Frontend: split layout — device list + info detail side by side - [x] Frontend: selected device (info view) vs profiled device (monitoring target) — separate concepts - [x] Frontend: Profile / Stop profiling toggle per device card - [x] Frontend: active profiling indicator bar in device list - [x] Frontend: auto-clear selected + profiled device when device disconnects or goes offline ### Logcat - [~] Backend stub (`backend-go/logcat/stream.go`) - [ ] Real-time logcat streaming via ADB - [ ] Structured log parsing (priority, tag, PID, message) - [ ] Wails event push to frontend - [ ] Frontend: log table with virtualized rendering - [ ] Frontend: filter by tag - [ ] Frontend: filter by priority (V/D/I/W/E/A) - [ ] Frontend: search - [ ] Frontend: export logs ### Network Inspector - [ ] Android SDK: OkHttp interceptor - [ ] Backend: receive + store network events - [ ] Frontend: request list - [ ] Frontend: request detail (headers, body, timing) - [ ] Frontend: response detail (status, headers, body, size) - [ ] Frontend: JSON formatting - [ ] Frontend: cURL export - [ ] Frontend: filter / search ### Shared Preferences Inspector - [ ] Backend: pull + parse SharedPreferences XML via ADB - [ ] Backend: write-back support - [ ] Frontend: key/value table - [ ] Frontend: inline editing (String, Int, Long, Float, Boolean, StringSet) - [ ] Frontend: live update polling ### SQLite Browser - [ ] Backend: pull database file via ADB - [ ] Backend: query execution - [ ] Frontend: table list - [ ] Frontend: table data viewer (paginated) - [ ] Frontend: SQL query editor - [ ] Frontend: query history - [ ] Frontend: export ### File Browser - [ ] Backend: `adb shell ls` traversal - [ ] Backend: file download (`adb pull`) - [ ] Backend: file upload (`adb push`) - [ ] Backend: file delete - [ ] Frontend: file tree / list - [ ] Frontend: text / JSON / image preview ### Runtime Configuration - [ ] Android SDK: base URL override hook - [ ] Android SDK: feature flag toggle - [ ] Backend: send config command to device - [ ] Frontend: URL override input - [ ] Frontend: feature flag toggles - [ ] Frontend: deep link launcher --- ## Phase 2 - [ ] FPS monitoring (backend + frontend chart) - [ ] Memory monitoring (heap, GC events) - [ ] StrictMode violation monitoring - [ ] Thread monitoring + ANR risk --- ## Phase 3 - [ ] Memory leak detection (Activity/Fragment) - [ ] Compose recomposition tooling - [ ] Advanced tracing - [ ] Flamegraphs --- ## Android SDK - [x] Project skeleton (`android-sdk/`) - [x] `DroidScope.init()` / `shutdown()` entry point - [ ] WebSocket transport to desktop - [ ] Network interceptor (OkHttp) - [ ] SharedPreferences observer - [ ] Logcat forwarder (SDK-side filtering) - [ ] FPS collector (Choreographer) - [ ] Memory collector (Debug.MemoryInfo) - [ ] StrictMode collector - [ ] Compose recomposition collector --- ## Frontend Shell - [x] Sidebar navigation - [x] Dark theme - [x] Selected device vs profiled device — two independent concepts in store - [x] `useActiveDevice` hook — reads `profiledDeviceId`; `isMonitoring = false` pauses all feature panels - [x] `NoDeviceSelected` shared component — guides user to Profile a device - [x] Per-device data cache (`deviceCache`) — retained on device switch, never cleared automatically - [ ] Persistent profiled device indicator in sidebar or top bar - [ ] Multi-tab panel support - [ ] Keyboard shortcuts - [ ] Global search - [ ] Settings page