Repository navigation
Releases
v2.5.3 — Sense group translation + configurable OpenAI endpoint
New
- SENSE_GROUP detect mode: tap a word and GPT identifies the sense group (semantic chunk / 意群) containing it, then translates just that chunk — not the whole sentence. Word + sentence are sent together so GPT pinpoints the right chunk. Cached per-word on the OCR'd Sentence so repeat taps are instant;
mapLatestcancels stale requests as the pointer moves. - OpenAI dialog now lets you set both a custom Base URL and a custom Model name. Required for third-party OpenAI-compatible proxies that don't route
gpt-4o-mini(e.g. proxies that list it in/v1/modelsbut returnunknown providerwhen called — pick a model your proxy genuinely routes, likegpt-5.4-mini).
Fixes
- Retrofit
HttpExceptionnow logs the error body, so future routing failures (e.g. wrong model, cooldown, auth) are visible in logcat without a packet capture.
Notes
- Debug-signed APK (personal fork).
- Sense group requires an OpenAI key + an OpenAI-compatible endpoint configured in Settings → OpenAI API Key.
🤖 Generated with Claude Code
v2.4.5 — Stale VM cache fix + foldable screen dimensions
Fixes
Stale ViewModel cache in OverlayService
The 5 getXxxViewModel() helpers used private lateinit var as a manual cache. Once the service's viewModelStore got cleared, ViewModelProvider would return a fresh ViewModel but the stale lateinit var still pointed at the old one — UI bound to a dead VM, translations silently stopped working until a full re-grant.
Fix: drop the manual cache and rely on ViewModelProvider's own caching in viewModelStore.
Foldable screen dimensions on inner ↔ outer transition
ScreenInfoHolder.updateScreenInfoInService() only swapped width/height based on orientation. That's correct for rotation but wrong for foldables — inner and outer screens are physically different displays (Z Fold 5: inner 1812×2176, outer 970×2485). After folding, the cached size was wrong, the VirtualDisplay was created at the wrong dimensions, and the bubble cursor disappeared off-screen.
Fix: re-read WindowManager.currentWindowMetrics.bounds on every configuration change (with displayMetrics fallback < API 30). Also fix a race in collectAndStoreScreenInfo so dimensions are set synchronously instead of inside decorView.post {}.
Known behavior
After folding/unfolding the device, screen recording permission must be re-granted on the next translate tap. This is Android's documented design: VirtualDisplay.resize()+setSurface() only covers same-display configuration changes; switching between physical displays invalidates the MediaProjection.
Install
Side-load the attached APK (debug-signed).
v2.4.3 — Fix screen-lock re-permission prompt
Fix the most annoying UX issue: every screen lock used to force re-granting screen recording permission. After this update you grant it once per app run — locking/unlocking the phone no longer re-prompts.
What changed
CaptureRepository.kt had a 3-second inactivity Runnable that nulled the MediaProjection token when the screen turned off, tearing down the projection. On Android 14+ the token is single-use, so the next translate tap had no choice but to ask the user for permission again.
The fix removes that destructive timeout. OverlayService is already a START_STICKY foreground service with foregroundServiceType=mediaProjection, so the projection happily survives lock/unlock as long as we don't kill it ourselves. See commit 99fea3d for the diff.
You will still need to re-grant permission if you:
- Hit "Stop sharing" in the system notification
- Exit the app from its notification action
- Reboot the phone
Install
- Download
screen-trans-v2.4.3-debug.apkbelow (152 MB), or pull from/sdcard/Download/on the build device. - Installs as an update over v2.4.2 — your settings and data are preserved (same package, same debug signing key,
versionCodebumped 20402 → 20403).
Build info
applicationId:com.galaxy.airviewdictionaryversionCode/versionName:20403/2.4.3- Debug-keystore signed (not Play-Store ready); uses Google's official test AdMob App ID.
🤖 Generated with Claude Code
Screen Translate v1.0.0
First release of Screen Translate — point, tap, and instantly translate any text on your Android screen.
What's inside
app-debug.apk(153 MB) — debug build, signed with the Android debug keystore.- Tested working on Android (Samsung) via floating bubble overlay + screen capture + OCR + Google ML Kit translation.
- 146+ languages supported, on-device translation models downloaded on demand.
Install
- Download
app-debug.apkbelow. - On Android, enable Install unknown apps for your browser/file manager.
- Open the APK to install.
- On first launch, grant Display over other apps and Accessibility / screen-capture permissions.
Notes
- This is a debug build — uses Google's official test AdMob App ID (
ca-app-pub-3940256099942544~3347511713), so any ads shown are test ads. - Built on aarch64 (PRoot Ubuntu on Termux).
- For a release build with your own AdMob account, edit
app/build.gradle.ktsand sign with your own keystore.
🤖 Generated with Claude Code