Skip to content

Commit 7d5c378

Browse files
committed
Account for orientation of phone
Now that we lock camera orientation, we need to explicitly handle rotation
1 parent 2e81967 commit 7d5c378

3 files changed

Lines changed: 13 additions & 8 deletions

File tree

app/src/main/kotlin/com/darkrockstudios/app/securecamera/camera/CameraContent.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ internal fun CameraContent(
144144
capturePhoto = capturePhoto,
145145
navController = navController,
146146
paddingValues = paddingValues,
147-
iconRotation = deviceRotation,
147+
cameraRotation = deviceRotation,
148148
)
149149
} else {
150150
NoCameraPermission(navController, permissionsState)

app/src/main/kotlin/com/darkrockstudios/app/securecamera/camera/CameraControls.kt

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ fun CameraControls(
4848
capturePhoto: MutableState<Boolean?>,
4949
navController: NavController,
5050
paddingValues: PaddingValues,
51-
iconRotation: Float = 0f,
51+
cameraRotation: Float = 0f,
5252
) {
5353
val scope = rememberCoroutineScope()
5454
var isFlashOn by rememberSaveable(cameraController.flashMode) { mutableStateOf(cameraController.flashMode == ImageCapture.FLASH_MODE_ON) }
@@ -89,6 +89,7 @@ fun CameraControls(
8989
location = location,
9090
isFlashOn = isFlashOn,
9191
context = context,
92+
deviceRotation = cameraRotation.toInt(),
9293
)
9394
} finally {
9495
activeJobs =
@@ -142,14 +143,14 @@ fun CameraControls(
142143
modifier = Modifier
143144
.align(Alignment.TopCenter)
144145
.padding(top = paddingValues.calculateTopPadding().plus(64.dp)),
145-
textRotation = iconRotation,
146+
textRotation = cameraRotation,
146147
)
147148

148149
LevelIndicator(
149150
modifier = Modifier
150151
.align(Alignment.Center)
151152
.padding(top = paddingValues.calculateTopPadding().plus(16.dp)),
152-
deviceRotation = iconRotation,
153+
deviceRotation = cameraRotation,
153154
)
154155

155156
if (isRecording) {
@@ -175,7 +176,7 @@ fun CameraControls(
175176
Icon(
176177
imageVector = Icons.Filled.MoreVert,
177178
contentDescription = stringResource(id = R.string.camera_more_options_content_description),
178-
modifier = Modifier.rotate(iconRotation),
179+
modifier = Modifier.rotate(cameraRotation),
179180
)
180181
}
181182
}
@@ -207,7 +208,7 @@ fun CameraControls(
207208
onLensToggle = { cameraController.toggleLens() },
208209
onClose = { isTopControlsVisible = false },
209210
paddingValues = paddingValues,
210-
iconRotation = iconRotation,
211+
iconRotation = cameraRotation,
211212
)
212213
}
213214

@@ -222,7 +223,7 @@ fun CameraControls(
222223
onCapture = { doCapturePhoto() },
223224
onToggleRecording = { doToggleRecording() },
224225
onModeChange = { mode -> cameraController.switchCaptureMode(mode) },
225-
iconRotation = iconRotation,
226+
iconRotation = cameraRotation,
226227
)
227228
}
228229
}
@@ -234,6 +235,7 @@ private suspend fun handleImageCapture(
234235
context: Context,
235236
location: Location?,
236237
isFlashOn: Boolean,
238+
deviceRotation: Int,
237239
) {
238240
val gpsCoordinates = location?.let {
239241
GpsCoordinates(
@@ -251,6 +253,7 @@ private suspend fun handleImageCapture(
251253
val path = imageSaver.saveImage(
252254
image = image,
253255
applyRotation = true,
256+
deviceRotation = deviceRotation,
254257
latLng = gpsCoordinates,
255258
)
256259
Timber.i("Image saved at: $path")

app/src/main/kotlin/com/darkrockstudios/app/securecamera/camera/SecureImageRepository.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ class SecureImageRepository(
190190
image: CapturedImage,
191191
latLng: GpsCoordinates?,
192192
applyRotation: Boolean,
193+
deviceRotation: Int = 0,
193194
quality: Int = 90,
194195
): File {
195196
val dir = getGalleryDirectory()
@@ -206,7 +207,8 @@ class SecureImageRepository(
206207

207208
var rawSensorBitmap = image.sensorBitmap
208209
if (applyRotation) {
209-
rawSensorBitmap = rawSensorBitmap.rotate(image.rotationDegrees)
210+
val effectiveRotation = (image.rotationDegrees - deviceRotation) % 360
211+
rawSensorBitmap = rawSensorBitmap.rotate(effectiveRotation)
210212
}
211213

212214
val jpgBytes = compressBitmapToJpeg(rawSensorBitmap, quality)

0 commit comments

Comments
 (0)