android-motion-specialist
Expert Android developer for the Motion Detector project. Use this skill when working on Camera2 API integration, motion detection algorithms, Android networking (LAN sockets + Supabase Realtime), debugging crashes, or any Android/Kotlin development tasks specific to this sprint timing application.
Best use case
android-motion-specialist is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Expert Android developer for the Motion Detector project. Use this skill when working on Camera2 API integration, motion detection algorithms, Android networking (LAN sockets + Supabase Realtime), debugging crashes, or any Android/Kotlin development tasks specific to this sprint timing application.
Teams using android-motion-specialist should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/android-motion-specialist/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How android-motion-specialist Compares
| Feature / Agent | android-motion-specialist | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Expert Android developer for the Motion Detector project. Use this skill when working on Camera2 API integration, motion detection algorithms, Android networking (LAN sockets + Supabase Realtime), debugging crashes, or any Android/Kotlin development tasks specific to this sprint timing application.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
SKILL.md Source
# Android Motion Detection Specialist
## Overview
Specialized agent for developing and debugging the Motion Detector Android application - a sprint timing system using camera-based motion detection with tripwire functionality, multi-device synchronization via LAN sockets and Supabase Realtime.
## When to Use This Skill
Trigger this skill when:
- Working on Camera2 API integration or camera configuration
- Debugging motion detection algorithm or tripwire feature
- Implementing or debugging LAN socket networking
- Troubleshooting Supabase Realtime integration
- Analyzing Android crashes or performance issues
- Modifying lobby/participant management
- Optimizing frame processing or FPS control
- Any Kotlin/Android development on this project
## Core Capabilities
### 1. Camera2 Architecture Expert
**Specialization**: Camera2 API, image capture, preview management
**Key Tasks**:
- Configure camera characteristics and resolution selection
- Debug camera state transitions and lifecycle issues
- Optimize image format (YUV_420_888, NV21) for performance
- Implement FPS limiting and frame rate control
- Handle camera permissions and error recovery
**Reference**: Load `references/camera2-architecture.md` for component details
**Common Patterns**:
```kotlin
// Query supported resolutions
characteristicsHelper.getSupportedResolutions(cameraId, ImageFormat.YUV_420_888)
// Set FPS range
captureRequestBuilder.set(
CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,
Range(targetFps, targetFps)
)
```
### 2. Motion Detection Algorithm Specialist
**Specialization**: Frame difference algorithm, tripwire implementation, performance optimization
**Key Tasks**:
- Tune sensitivity and motion threshold parameters
- Implement and debug tripwire region detection
- Optimize frame processing (pixel sampling, resolution)
- Diagnose false positives/negatives
- Profile and reduce CPU usage
**Reference**: Load `references/motion-detection-algorithm.md` for algorithm details
**Key Parameters**:
- **sensitivity**: Pixel difference threshold (0-255) - Lower = more sensitive
- **motionThreshold**: Percentage of pixels (0.0-1.0) - Lower = more sensitive
- **tripwirePosition**: Horizontal position (0.0-1.0) - 0=left, 0.5=center, 1=right
- **tripwireWidth**: Width fraction (0.0-1.0) - Smaller = narrower detection zone
### 3. Networking Architecture Expert
**Specialization**: LAN sockets, Supabase Realtime, timing synchronization
**Key Tasks**:
- Debug LAN socket server/client connections
- Implement Supabase Realtime messaging
- Handle network state changes and reconnection
- Optimize latency for timing precision
- Troubleshoot WiFi discovery issues
**Reference**: Load `references/networking-architecture.md` for architecture
**Network Flow**:
1. **Discovery**: Supabase Realtime (4-digit session codes)
2. **Handshake**: Host broadcasts LAN IP:port via Realtime
3. **Connection**: Client connects TCP socket (port 9898)
4. **Timing**: LAN for low latency or Supabase fallback
### 4. Debugging & Performance Optimization
**Specialization**: Crash analysis, logcat interpretation, profiling
**Key Tasks**:
- Analyze stack traces and crash logs
- Use Android Studio Profiler (CPU, Memory, Network)
- Debug Camera2 state issues
- Profile frame processing performance
- Identify memory leaks and resource cleanup issues
**Reference**: Load `references/debugging-guide.md` for debugging strategies
**Common Tools**:
- Android Studio Debugger with breakpoints
- Logcat filtering: `tag:MotionDetector OR tag:Camera2Manager`
- CPU/Memory/Network profilers
- ADB commands for device inspection
## Project-Specific Knowledge
### Architecture Overview
**Main Components**:
- **MainActivity**: Camera screen with motion detection
- **LobbyActivity**: Device pairing and role assignment
- **Camera2Manager**: Camera2 API orchestrator
- **MotionDetector**: Frame difference algorithm with tripwire
- **LobbyRepository**: Supabase data access layer
- **LanSocketServer/Client**: TCP networking for timing
**Data Flow**:
```
Camera2 → ImageReader → MotionDetector → Timer
Lobby → Supabase → LAN Handshake → Timing Sync
```
**Reference**: Load `references/project-structure.md` for complete file layout
### Role-Based Timing System
**Roles**:
- **START**: Triggers when runner enters start gate
- **SPLIT**: Optional mid-course checkpoint
- **FINISH**: Final timing at finish line
**Assignment Flow**:
1. Host assigns roles via LobbyActivity dropdown
2. Roles sync via Supabase Realtime to `participants` table
3. Device with matching role can trigger timing event
4. Event broadcasts to all devices (LAN or Supabase mode)
5. Timing stored in `timing_events` table
### Configuration Files
**Supabase Setup** (`local.properties` - gitignored):
```properties
supabase.url=https://xxxxx.supabase.co
supabase.anon.key=your-anon-key
```
**Build Injection** (`app/build.gradle.kts`):
```kotlin
buildConfigField("String", "SUPABASE_URL", localProps["supabase.url"])
buildConfigField("String", "SUPABASE_ANON_KEY", localProps["supabase.anon.key"])
```
## Workflow Decision Tree
### Starting a New Task
**1. Is it camera-related?**
- YES → Load `references/camera2-architecture.md`
- Focus on Camera2Manager, CaptureSessionManager, CameraPreview
- Check camera lifecycle and state management
**2. Is it motion detection?**
- YES → Load `references/motion-detection-algorithm.md`
- Focus on MotionDetector.kt
- Consider parameter tuning and tripwire logic
**3. Is it networking?**
- YES → Load `references/networking-architecture.md`
- Focus on LanSocket classes, LobbyRepository
- Check both Supabase and LAN code paths
**4. Is it a crash or bug?**
- YES → Load `references/debugging-guide.md`
- Analyze stack trace first
- Check common issues section for similar patterns
**5. Need project context?**
- YES → Load `references/project-structure.md`
- Understand component relationships
- Review data flow diagrams
### Implementing a Feature
**Step 1**: Understand the requirement
- Which component does it affect?
- Does it require camera, motion, or network changes?
**Step 2**: Read relevant references
- Load applicable reference docs based on domain
- Review existing implementations in that file
- Check for similar patterns elsewhere
**Step 3**: Plan the implementation
- Identify specific files to modify
- Consider threading (main, camera, network)
- Plan error handling and null safety
**Step 4**: Implement with best practices
- Use Kotlin idioms (data classes, sealed classes, null safety)
- Handle lifecycle properly (onCreate, onPause, onDestroy)
- Add logging for debugging
- Follow existing code style
**Step 5**: Test thoroughly
- Unit tests for pure logic (MotionDetector)
- Manual testing on physical device
- Check edge cases (rotation, backgrounding, permissions)
### Debugging a Problem
**Step 1**: Gather information
- Read crash log or error message carefully
- Note timestamp and affected component
- Reproduce the issue consistently
**Step 2**: Locate the issue
- Find crash location in stack trace
- Read surrounding code in that file
- Load `references/debugging-guide.md` for similar issues
**Step 3**: Form hypothesis
- What caused this? Null reference? State issue? Threading?
- Is it lifecycle-related (camera closing early)?
- Check logcat for warnings before crash
**Step 4**: Test hypothesis
- Add strategic breakpoints or logging
- Run with Android Studio debugger attached
- Verify assumptions about state
**Step 5**: Implement fix
- Fix root cause, not just symptoms
- Add null checks or state guards
- Update related code if needed
- Test fix thoroughly and check for regressions
## Common Implementation Patterns
### Camera Initialization Pattern
```kotlin
// 1. Check permission
if (ContextCompat.checkSelfPermission(this, CAMERA) == GRANTED) {
camera2Manager.openCamera(cameraId)
}
// 2. Camera opened callback
override fun onOpened(camera: CameraDevice) {
camera2Manager.createCaptureSession(surfaces, callbacks)
}
// 3. Session configured callback
override fun onConfigured(session: CameraCaptureSession) {
session.setRepeatingRequest(previewRequest, callback, handler)
}
```
### Motion Detection Pattern
```kotlin
// 1. Receive frame from ImageReader
override fun onImageAvailable(reader: ImageReader) {
val image = reader.acquireLatestImage() ?: return
// 2. Extract Y plane (grayscale)
val plane = image.planes[0]
val data = ByteArray(plane.buffer.remaining())
plane.buffer.get(data)
// 3. Detect motion with tripwire
val motion = motionDetector.detectMotionFromByteArray(
data, image.width, image.height
)
// 4. Handle result
if (motion && !timerStarted) {
timerManager.start()
timerStarted = true
}
// 5. Cleanup
image.close()
}
```
### Network Handshake Pattern
```kotlin
// HOST SIDE
// 1. Create lobby and get session code
val sessionCode = lobbyRepository.createLobby(deviceId, deviceName)
// 2. Start LAN server
lanServer = LanSocketServer(port = 9898)
lanServer.start()
// 3. Broadcast LAN offer via Realtime
channel.broadcast("lan_offer", mapOf(
"ip" to localIp,
"port" to 9898
))
// CLIENT SIDE
// 1. Join lobby with session code
lobbyRepository.joinLobby(sessionCode, deviceId, deviceName)
// 2. Subscribe to LAN offer
channel.on("lan_offer") { payload ->
val hostIp = payload["ip"] as String
val port = payload["port"] as Int
// 3. Connect to host
lanClient = LanSocketClient(hostIp, port)
lanClient.connect()
}
```
## Best Practices
### Code Quality
- Use Kotlin data classes for data models
- Prefer sealed classes for state representation
- Use coroutines for async operations (avoid callbacks)
- Handle nullable types with safe calls (`?.`) or Elvis (`?:`)
- Add KDoc comments for public APIs
### Error Handling
- Wrap Camera2 calls in try-catch (CameraAccessException)
- Check for null before using Camera/Session references
- Handle network exceptions gracefully with retry logic
- Provide user feedback via Toast or Snackbar
### Resource Management
- Close ImageReader when done (onPause/onDestroy)
- Release camera in onPause, reopen in onResume
- Close sockets in cleanup methods
- Cancel coroutines properly (lifecycleScope)
### Threading
- Camera operations on HandlerThread (not main)
- Frame processing on background thread or coroutine
- UI updates always on main thread (use Handler/runOnUiThread)
- Network I/O on IO dispatcher (Dispatchers.IO)
### Logging
- Use consistent log tags (e.g., "Camera2Manager", "MotionDetector")
- Log state transitions and important events
- Log errors with full stack traces
- Use BuildConfig.DEBUG to disable verbose logs in release
## Quick Reference
### Common ADB Commands
```bash
# Install APK
adb install -r app/build/outputs/apk/debug/app-debug.apk
# View logs in realtime
adb logcat -v time | grep "MotionDetector\|Camera2"
# Clear logs
adb logcat -c
# Force stop app
adb shell am force-stop com.motiondetector
# Check WiFi connection
adb shell dumpsys wifi | grep "SSID"
```
### Common Gradle Commands
```bash
# Clean build
./gradlew clean
# Build debug APK
./gradlew assembleDebug
# Install on connected device
./gradlew installDebug
# Run unit tests
./gradlew test
```
### Logcat Filters
```
# Camera-related logs
tag:Camera2Manager OR tag:CaptureSessionManager OR tag:CameraPreview
# Motion detection
tag:MotionDetector
# Networking
tag:LanSocket OR tag:LobbyRepository OR tag:Supabase
# Crashes and errors only
level:error OR level:assert
```
## Integration with Task Tool
### When to Use Subagents
**Use `subagent_type=Explore`** when:
- Investigating unfamiliar codebase architecture
- Finding all usages of a class across the project
- Understanding data flow across multiple components
**Use `subagent_type=code-reviewer`** when:
- Reviewing code before committing
- Checking for common Android anti-patterns
- Validating null safety and resource cleanup
**Use `subagent_type=debugger`** when:
- Complex crash analysis spanning multiple files
- Performance bottleneck investigation
- Memory leak detection across components
### When to Use This Skill Directly
Use this skill directly (without subagents) when:
- You know exactly which file to modify
- Implementing a well-defined feature
- Making targeted bug fixes in a single component
- The task is self-contained within one domain
## Resources
Detailed reference documentation available in `references/`:
- **camera2-architecture.md**: Camera2 API components, workflows, threading
- **motion-detection-algorithm.md**: Frame difference algorithm, tripwire, tuning
- **networking-architecture.md**: LAN sockets, Supabase Realtime, timing sync
- **debugging-guide.md**: Debugging tools, common issues, crash analysis
- **project-structure.md**: File layout, data flow, dependencies, build config
Load references as needed based on the specific task domain. References contain code examples, common patterns, and troubleshooting guides.Related Skills
android
Build, review, and refactor Android mobile apps (Kotlin) using modern Android patterns. Use for tasks like setting up Gradle modules, Jetpack Compose UI, navigation, ViewModel/state management, networking (Retrofit/OkHttp), persistence (Room/DataStore), DI (Hilt/Koin), testing, performance, release builds, and Play Store readiness.
android-watch-logs
Start real-time log streaming from connected Android device using adb logcat. Shows only app's log messages. Use when monitoring app behavior, debugging, or viewing Android logs.
android-use
Control Android devices via ADB commands - tap, swipe, type, navigate apps
android-supabase
Supabase integration patterns for Android - authentication, database, realtime subscriptions. Use when setting up Supabase SDK, implementing OAuth, querying database, or setting up realtime.
android-stop-app
Stop the Android app running on connected device. Cleanly terminates the app using force-stop. Use when stopping the app for debugging, testing, or cleanup.
android-project
Navigate and analyze Android project structure, modules, and dependencies. Use when exploring project structure, finding related files, analyzing dependencies, or locating code patterns.
android-notification-builder
Эксперт Android notifications. Используй для push notifications, channels и notification patterns.
android-kotlin
Android Kotlin development with Coroutines, Jetpack Compose, Hilt, and MockK testing
android-kotlin-development
Develop native Android apps with Kotlin. Covers MVVM with Jetpack, Compose for modern UI, Retrofit for API calls, Room for local storage, and navigation architecture.
android-keystore-generation
Generate production and local development keystores for Android release signing
android-gradle
Automate Gradle tasks for Android projects - build, test, coverage, clean. Use when building APKs, running unit tests, generating coverage reports, or checking dependencies.
android-firebase
Firebase integration patterns for Android - Crashlytics, Analytics, Remote Config, FCM. Use when setting up crash reporting, analytics events, remote configuration, or push notifications.