SumRead is a production-minded Android application in active development. It provides a floating overlay that lets the user capture a selected screen region, extract text with on-device OCR, read the text aloud locally, summarize it with an optional AI provider, or open a private in-memory chat grounded in the captured content.
This repository is public yet proprietary, and structured for a serious future Google Play release. The current distribution target is a pre-release APK, not a production Play build.

- Architecture: MVVM + Clean Architecture + Hilt.
- UI: Jetpack Compose for the app, view-based overlay for system overlay behavior, custom region selection view for capture accuracy.
- Local-first features: overlay control, screen capture flow, region selection, ML Kit OCR, TextToSpeech.
- AI features: Groq, Gemini, and OpenAI behind provider abstractions with user-supplied keys.
- Chat privacy: memory-only session state, no default storage of captured text or chat history.
- Release posture: pre-release APK workflow prepared, production signing still pending.
- Draggable floating overlay button powered by a foreground service.
- User-initiated MediaProjection capture flow with explicit Android consent.
- Region selection before OCR processing.
- On-device ML Kit text recognition.
- On-device text-to-speech with configurable speed, pitch, and language (27 languages supported).
- TTS language pack installer — opens device TTS settings to download additional voices (Chinese, Japanese, Korean, Arabic, Hindi, and more).
- AI summary mode using a selectable provider (Groq / Gemini / OpenAI).
- Smart AI auto-switch — if the selected provider has no API key, the app automatically falls back to another configured provider so AI features keep working.
- AI chat mode grounded in the selected screen content — ask follow-up questions, verify facts, or summarize further without re-capturing.
- Secure local-only storage for provider API keys (see below).
- Compose settings screen with permission helpers and privacy disclosures.
API keys are never transmitted or stored in plaintext. Each key is:
- Encrypted with a hardware-backed AES-256-GCM key generated inside the Android Keystore (never leaves the secure enclave).
- Stored as a Base64-encoded ciphertext in the app's private SharedPreferences (
sumread_secrets). - Never included in backups (
android:allowBackup="false"). - Accessible only to this app process — no other app can read them.
To add a key: open Settings → AI providers, enter your key in the relevant field, and tap Save.
To remove a key: tap Clear next to the provider.
Supported providers and where to obtain free or low-cost keys:
| Provider | Key source |
|---|---|
| Groq | console.groq.com — free tier available |
| Gemini | aistudio.google.com — free tier available |
| OpenAI | platform.openai.com — pay-as-you-go |
The app follows a single-module clean structure inside app/src/main/java/com/sumread:
data/for settings storage, secure secret storage, OCR, TTS, provider integrations, and repository implementations.domain/for models, repository contracts, and use cases.presentation/for Compose screens, activities, viewmodels, and capture/chat UI state.service/for the persistent overlay service and MediaProjection capture service.di/for Hilt modules and network wiring.util/for app configuration, bitmap helpers, intent building, notifications, and geometry helpers.
- Kotlin
- Android SDK 35 target, min SDK 26
- Gradle Kotlin DSL with version catalog
- Jetpack Compose
- Hilt
- DataStore Preferences
- Android Keystore-backed secret storage
- ML Kit Text Recognition
- Android TextToSpeech
- Retrofit + OkHttp
- Groq and Gemini provider integrations
- Local OCR and local TTS are the default path.
- AI features are optional and clearly separated from local-only features.
- The app never ships with embedded provider keys.
- Captured text is not persisted by default.
- Chat history remains memory-only.
- Foreground notifications make long-running sensitive operations visible.
- Screen capture is always user initiated and always gated by the Android system consent dialog.
- SumRead.apk — latest build from
main - All releases
- Google Play release is planned, not available yet.
- Production signing, store assets, final disclosure copy, and Play review packaging still need completion.
- The repository already includes privacy, data safety, and Play compliance notes to support that path.
- Install Android Studio with Android SDK 35 and JDK 17.
- Clone the private repository.
- Open the project in Android Studio or use the Gradle wrapper from the repository root.
- Build with
./gradlew assembleDebug. - Install the generated debug APK on a device running Android 8.0 or newer.
- Open the app, review permissions, and configure optional provider keys in Settings if you want AI features.
Useful commands:
./gradlew testDebugUnitTest./gradlew lintDebug./gradlew assembleDebug
Recommended manual device checks:
- Start and stop the overlay repeatedly.
- Validate MediaProjection consent and cancellation behavior.
- Validate region selection on light and dark backgrounds.
- Validate local read-aloud without any provider key configured.
- Validate AI summary and chat with each provider independently.
Required or optional permissions are intentionally limited:
SYSTEM_ALERT_WINDOWfor the floating overlay.FOREGROUND_SERVICEfor visible overlay execution.FOREGROUND_SERVICE_SPECIAL_USEfor the overlay foreground service type (required on Android 14+).FOREGROUND_SERVICE_MEDIA_PROJECTIONfor the active capture service.RECORD_AUDIOfor optional speech input in chat.INTERNETonly for optional cloud AI features.
See:
Screenshot placeholders are intentionally reserved until stable device captures are generated:
docs/screenshots/settings.pngdocs/screenshots/overlay.pngdocs/screenshots/region-selection.pngdocs/screenshots/chat.png
- Add a signed pre-release distribution pipeline.
- Expand OCR language options beyond the current Latin recognizer baseline.
- Add streaming response support behind the existing AI provider abstraction.
- Harden device QA across Android 8 through Android 15.
- Prepare final Play listing assets and store review disclosures.
This repository is proprietary and all rights are reserved. See LICENSE.