# 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
