Skip to content

Releases

v2.5.3 — Sense group translation + configurable OpenAI endpoint

Choose a tag to compare

@Tensorlong Tensorlong released this 13 May 00:13

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; mapLatest cancels 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/models but return unknown provider when called — pick a model your proxy genuinely routes, like gpt-5.4-mini).

Fixes

  • Retrofit HttpException now 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

Choose a tag to compare

@Tensorlong Tensorlong released this 12 May 15:27

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

Choose a tag to compare

@Tensorlong Tensorlong released this 12 May 09:17

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.apk below (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, versionCode bumped 20402 → 20403).

Build info

  • applicationId: com.galaxy.airviewdictionary
  • versionCode / 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

Choose a tag to compare

@Tensorlong Tensorlong released this 12 May 04:06

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

  1. Download app-debug.apk below.
  2. On Android, enable Install unknown apps for your browser/file manager.
  3. Open the APK to install.
  4. 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.kts and sign with your own keystore.

🤖 Generated with Claude Code