From 5eb476a059560e3183addce1332660276d4926e8 Mon Sep 17 00:00:00 2001 From: Ole-Morten Duesund Date: Mon, 11 May 2026 13:51:17 +0200 Subject: [PATCH] Fix landscape image rotating opposite to device MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OrientationDetector mapped the OrientationEventListener angle to Surface.ROTATION_* with 90 and 270 swapped relative to the CameraX docs example. The angle reports the device's physical clockwise rotation, whereas Surface.ROTATION_* describes the screen's logical rotation (opposite direction), so the values must be inverted. Symptom: rotating the phone clockwise rotated the live preview counter- clockwise (and vice versa), instead of keeping world-up at screen-up. The bug was previously masked because the only consumer of the value (deviceRotation in capturePhoto) is unused — the live preview commit (d321f07) wired this same value into CameraX's setTargetRotation, which exposed the inverted mapping. Bump to 1.1.7. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../java/no/naiv/tiltshift/util/OrientationDetector.kt | 10 ++++++++-- version.properties | 4 ++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/no/naiv/tiltshift/util/OrientationDetector.kt b/app/src/main/java/no/naiv/tiltshift/util/OrientationDetector.kt index f7b49da..45bcf3a 100644 --- a/app/src/main/java/no/naiv/tiltshift/util/OrientationDetector.kt +++ b/app/src/main/java/no/naiv/tiltshift/util/OrientationDetector.kt @@ -24,11 +24,17 @@ class OrientationDetector(private val context: Context) { override fun onOrientationChanged(orientation: Int) { if (orientation == ORIENTATION_UNKNOWN) return + // OrientationEventListener reports the device's physical rotation + // (clockwise from natural). Surface.ROTATION_* describes the screen's + // logical rotation, which is the opposite direction — so device tilted + // 90° CW (orientation ≈ 90, "left side at top") maps to ROTATION_270, + // and 90° CCW (orientation ≈ 270) maps to ROTATION_90. Matches the + // CameraX docs example for setTargetRotation. val rotation = when { orientation >= 315 || orientation < 45 -> Surface.ROTATION_0 - orientation >= 45 && orientation < 135 -> Surface.ROTATION_90 + orientation >= 45 && orientation < 135 -> Surface.ROTATION_270 orientation >= 135 && orientation < 225 -> Surface.ROTATION_180 - else -> Surface.ROTATION_270 + else -> Surface.ROTATION_90 } if (rotation != lastRotation) { diff --git a/version.properties b/version.properties index 7f96eb7..0f86d43 100644 --- a/version.properties +++ b/version.properties @@ -1,4 +1,4 @@ versionMajor=1 versionMinor=1 -versionPatch=6 -versionCode=8 +versionPatch=7 +versionCode=9