Skip to content

Commit df7b177

Browse files
committed
[fix] modify the cameraLayout to fix the issue of the finger blocking the camera preview when in landscape mode.details see#40
1 parent f6b24d7 commit df7b177

File tree

1 file changed

+80
-18
lines changed
  • feature/camera/src/main/java/com/android/developers/androidify/camera

1 file changed

+80
-18
lines changed

feature/camera/src/main/java/com/android/developers/androidify/camera/CameraLayout.kt

Lines changed: 80 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,12 @@
1515
*/
1616
package com.android.developers.androidify.camera
1717

18+
import android.content.Context
19+
import android.hardware.display.DisplayManager
20+
import android.view.Surface.ROTATION_90
1821
import androidx.compose.foundation.background
1922
import androidx.compose.foundation.border
23+
import androidx.compose.foundation.layout.Arrangement
2024
import androidx.compose.foundation.layout.Box
2125
import androidx.compose.foundation.layout.BoxWithConstraints
2226
import androidx.compose.foundation.layout.Column
@@ -33,12 +37,18 @@ import androidx.compose.foundation.layout.safeDrawingPadding
3337
import androidx.compose.foundation.layout.size
3438
import androidx.compose.foundation.layout.width
3539
import androidx.compose.runtime.Composable
40+
import androidx.compose.runtime.getValue
41+
import androidx.compose.runtime.mutableStateOf
42+
import androidx.compose.runtime.remember
43+
import androidx.compose.runtime.setValue
3644
import androidx.compose.ui.Alignment
3745
import androidx.compose.ui.Modifier
3846
import androidx.compose.ui.graphics.Color
47+
import androidx.compose.ui.platform.LocalContext
3948
import androidx.compose.ui.tooling.preview.Preview
4049
import androidx.compose.ui.tooling.preview.PreviewParameter
4150
import androidx.compose.ui.unit.dp
51+
import androidx.lifecycle.compose.LifecycleStartEffect
4252
import com.android.developers.androidify.theme.AndroidifyTheme
4353
import com.android.developers.androidify.theme.TertiaryContainer
4454
import com.android.developers.androidify.util.FoldablePreviewParameters
@@ -61,6 +71,23 @@ internal fun CameraLayout(
6171
isTabletop: Boolean = false,
6272
modifier: Modifier = Modifier,
6373
) {
74+
val mContext = LocalContext.current
75+
var isCameraLeft by remember { mutableStateOf(false) }
76+
LifecycleStartEffect(Unit){
77+
val displayManager = mContext.getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
78+
val displayListener = object : DisplayManager.DisplayListener {
79+
override fun onDisplayChanged(displayId: Int) {
80+
val rotation = displayManager.getDisplay(displayId).rotation
81+
isCameraLeft = rotation == ROTATION_90
82+
}
83+
override fun onDisplayAdded(displayId: Int) {}
84+
override fun onDisplayRemoved(displayId: Int) {}
85+
}
86+
displayManager.registerDisplayListener(displayListener, null)
87+
onStopOrDispose {
88+
displayManager.unregisterDisplayListener(displayListener)
89+
}
90+
}
6491
BoxWithConstraints(
6592
modifier
6693
.fillMaxSize()
@@ -88,6 +115,7 @@ internal fun CameraLayout(
88115
zoomButton,
89116
guideText,
90117
guide,
118+
isCameraLeft
91119
)
92120

93121
this.maxWidth > maxHeight && allowsFullContent() -> CompactHorizontalCameraLayout(
@@ -314,15 +342,25 @@ private fun MediumHorizontalCameraLayout(
314342
zoomButton: @Composable (modifier: Modifier) -> Unit,
315343
guideText: @Composable (modifier: Modifier) -> Unit,
316344
guide: @Composable (modifier: Modifier) -> Unit,
345+
isCameraLeft: Boolean = false,
317346
modifier: Modifier = Modifier,
318347
) {
319348
Row(modifier.fillMaxSize()) {
320-
VerticalControlsLayout(
321-
captureButton,
322-
flipCameraButton,
323-
zoomButton = null,
324-
Modifier.weight(1f),
325-
)
349+
if (isCameraLeft) {
350+
Spacer(
351+
Modifier
352+
.fillMaxHeight()
353+
.weight(1f),
354+
)
355+
} else {
356+
VerticalControlsLayout(
357+
captureButton,
358+
flipCameraButton,
359+
zoomButton = null,
360+
Modifier.weight(1f),
361+
isCameraLeft,
362+
)
363+
}
326364

327365
Box(
328366
Modifier
@@ -342,11 +380,21 @@ private fun MediumHorizontalCameraLayout(
342380
zoomButton(Modifier)
343381
}
344382
}
345-
Spacer(
346-
Modifier
347-
.fillMaxHeight()
348-
.weight(1f),
349-
)
383+
if (isCameraLeft) {
384+
VerticalControlsLayout(
385+
captureButton,
386+
flipCameraButton,
387+
zoomButton = null,
388+
Modifier.weight(1f),
389+
isCameraLeft,
390+
)
391+
} else {
392+
Spacer(
393+
Modifier
394+
.fillMaxHeight()
395+
.weight(1f),
396+
)
397+
}
350398
}
351399
}
352400

@@ -418,20 +466,34 @@ private fun VerticalControlsLayout(
418466
flipCameraButton: (@Composable (modifier: Modifier) -> Unit)?,
419467
zoomButton: (@Composable (modifier: Modifier) -> Unit)?,
420468
modifier: Modifier = Modifier,
469+
isCameraLeft: Boolean = false,
421470
) {
422471
Row(
423472
modifier = modifier,
424473
verticalAlignment = Alignment.CenterVertically,
474+
horizontalArrangement = if(isCameraLeft) Arrangement.End else Arrangement.Start,
425475
) {
426-
Column(horizontalAlignment = Alignment.CenterHorizontally) {
427-
Box(Modifier.weight(1f), contentAlignment = Alignment.Center) {
428-
if (flipCameraButton != null) flipCameraButton(Modifier)
476+
if(isCameraLeft){
477+
if (zoomButton != null) zoomButton(Modifier)
478+
Spacer(Modifier.width(12.dp))
479+
Column(horizontalAlignment = Alignment.CenterHorizontally) {
480+
Box(Modifier.weight(1f), contentAlignment = Alignment.Center) {
481+
if (flipCameraButton != null) flipCameraButton(Modifier)
482+
}
483+
captureButton(Modifier)
484+
Spacer(modifier = Modifier.weight(1f))
429485
}
430-
captureButton(Modifier)
431-
Spacer(modifier = Modifier.weight(1f))
486+
}else{
487+
Column(horizontalAlignment = Alignment.CenterHorizontally) {
488+
Box(Modifier.weight(1f), contentAlignment = Alignment.Center) {
489+
if (flipCameraButton != null) flipCameraButton(Modifier)
490+
}
491+
captureButton(Modifier)
492+
Spacer(modifier = Modifier.weight(1f))
493+
}
494+
Spacer(Modifier.width(12.dp))
495+
if (zoomButton != null) zoomButton(Modifier)
432496
}
433-
Spacer(Modifier.width(12.dp))
434-
if (zoomButton != null) zoomButton(Modifier)
435497
}
436498
}
437499

0 commit comments

Comments
 (0)