• v1.1.15 b057613bac

    v1.1.15 Stable

    olemd released this 2026-05-11 16:59:56 +02:00 | 1 commits to main since this release

    Bug fixes

    • Captured photos now embed the user's physical tilt at shutter time in the EXIF orientation tag. The bitmap is still saved in the device's portrait frame (since the activity is locked to portrait), but gallery viewers will rotate the image to match how the phone was actually held — so a landscape shot opens as a landscape image. `deviceRotation` was already being passed into the capture handler from `OrientationEventListener`; it was just being ignored in favour of a hardcoded `ORIENTATION_NORMAL`.

    🤖 Generated with Claude Code

    Downloads
  • v1.1.14 e4892c4b12

    v1.1.14 Stable

    olemd released this 2026-05-11 16:52:43 +02:00 | 2 commits to main since this release

    Behaviour change

    • The activity is now locked to portrait, and all the camera-image rotation tracking from v1.1.6–v1.1.13 is removed. The camera passthrough goes back to the simple fixed 90° texcoord rotation, and the GL surface stays portrait-sized regardless of how the phone is held. The camera image lives in the device's portrait frame and visually follows the phone as it tilts. The UI is also locked to portrait layout in this release — a follow-up will rotate the icon overlays so they stay readable when the phone is held sideways.

    🤖 Generated with Claude Code

    Downloads
  • v1.1.13 5b553c7196

    v1.1.13 Stable

    olemd released this 2026-05-11 16:32:06 +02:00 | 3 commits to main since this release

    Bug fixes

    • Fix the camera image briefly rotating wrong when the device crosses the ~45° tilt threshold. The renderer's texcoord buffer was being swapped as soon as OrientationEventListener fired (at 45°), but the activity itself only rotates a bit later — leaving the GL surface and texcoord buffer mismatched for that window. The renderer now sources its rotation from Display.rotation via LocalConfiguration instead, so the texcoord flip happens in lock-step with the actual activity rotation. OrientationEventListener is still used for EXIF orientation on capture.

    🤖 Generated with Claude Code

    Downloads
  • v1.1.12 a2dfa7db3d

    v1.1.12 Stable

    olemd released this 2026-05-11 16:14:42 +02:00 | 4 commits to main since this release

    Bug fixes

    • Camera image now follows the device orientation so world-up stays at screen-up in all four rotations, while the UI keeps adapting to landscape/portrait as before. Drops the SurfaceTexture.getTransformMatrix()-based approach (which does not honour Preview.targetRotation for custom SurfaceProviders) and the manual matrix-composition attempts from v1.1.6–1.1.11 in favour of four precomputed texcoord buffers, one per Surface.ROTATION_*. Verified empirically in the emulator across all four rotations.

    🤖 Generated with Claude Code

    Downloads
  • v1.1.11 1cd2b0a57c

    v1.1.11 Stable

    olemd released this 2026-05-11 15:49:19 +02:00 | 7 commits to main since this release

    Bug fixes

    • Camera image now keeps world-up at screen-up through all four device orientations. Re-introduces the v1.1.9 inverse-rotation approach (composes an extra rotation around the texcoord centre on top of the SurfaceTexture's sensor-to-buffer matrix), but with the angle signs flipped — the v1.1.9 angles were 180° off for both landscape orientations and showed the image upside-down on a real device. Verified empirically against the emulator's virtual scene (sky/road/buildings) in all four rotations.

    🤖 Generated with Claude Code

    Downloads
  • v1.1.10 4f8661f648

    v1.1.10 Stable

    olemd released this 2026-05-11 15:26:37 +02:00 | 9 commits to main since this release

    Behaviour change

    • The camera image is no longer transformed when the device rotates. The orientation tracking introduced in v1.1.6 (and the follow-up patches in 1.1.7–1.1.9) is reverted: no SurfaceTexture matrix manipulation, no rebinding on rotation, no inverse-rotation correction. The activity stays `fullSensor` so the Compose UI and the tilt-shift effect overlays continue to rotate with the device, but the camera frame itself is left alone — matching "normal camera doesn't flip the picture when rotating the phone".

    🤖 Generated with Claude Code

    Downloads
  • v1.1.9 6d7be66341

    v1.1.9 Stable

    olemd released this 2026-05-11 14:49:23 +02:00 | 10 commits to main since this release

    Bug fixes

    • Fix one landscape orientation rendering the camera image upside down. SurfaceTexture.getTransformMatrix() with a custom SurfaceProvider returns the same sensor-to-buffer matrix for all four device orientations — it does not vary with Preview.targetRotation. Combined with the activity rotating under fullSensor, one of the two landscape orientations rendered the image upside down on a real device (masked in the v1.1.7/1.1.8 emulator testing by the virtual scene's near-symmetry). The fix composes an additional rotation around the texcoord centre, inverse to the activity rotation, on every frame — so the four orientations now produce four distinct matrices and world-up stays at screen-up in all of them.

    🤖 Generated with Claude Code

    Downloads
  • v1.1.8 f0d81db068

    v1.1.8 Stable

    olemd released this 2026-05-11 14:06:47 +02:00 | 11 commits to main since this release

    Bug fixes

    • Fix landscape preview rotating with the device instead of re-orienting. Rotating to landscape previously left the camera writing a portrait-oriented frame into the landscape GL surface, because Preview.setTargetRotation() on an already-bound use case does not refresh the live SurfaceTexture transform matrix or buffer size with a custom SurfaceProvider. The fix rebinds the camera use cases on rotation change so CameraX issues a fresh SurfaceRequest with a resolution and matrix that match the new orientation. Also reverts the v1.1.7 OrientationDetector change — that mapping was correct already for a fullSensor activity and not the root cause.

    🤖 Generated with Claude Code

    Downloads
  • v1.1.7 5eb476a059

    v1.1.7 Stable

    olemd released this 2026-05-11 13:52:17 +02:00 | 12 commits to main since this release

    Bug fixes

    • Fix landscape image rotating opposite to device rotation. The orientation listener's angle (device's physical clockwise rotation) was mapped to Surface.ROTATION_* (screen's logical rotation, opposite direction) with 90/270 swapped relative to the CameraX docs example. Result: rotating the phone CW rotated the live preview CCW. Now world-up stays at screen-up regardless of orientation.

    🤖 Generated with Claude Code

    Downloads
  • v1.1.6 ca260411d8

    v1.1.6 Stable

    olemd released this 2026-05-07 16:36:54 +02:00 | 14 commits to main since this release

    Highlights

    Landscape orientation now works. Previously the camera preview was hardcoded to portrait and the UI broke on rotation.

    Changes

    • Camera preview re-orients with the device by reading SurfaceTexture.getTransformMatrix() instead of using a fixed 90° texcoord rotation.
    • Preview and ImageCapture now have their targetRotation updated live, so capture EXIF stays correct in any orientation.
    • Crop-to-fill aspect math swaps effective camera dimensions between portrait and landscape.
    • Slider control panel scrolls when the screen is too short (only visible in landscape on most phones).

    Install

    Sideload the attached APK on Android 15+. Signed with the project release key.

    Downloads