Skip to content

Commit 5b324d1

Browse files
authored
Merge pull request #41 from chenxin64/main
[fixed] modify the cameraLayout to fix the issue of the finger blocking the camera preview when in landscape mode.details see#40
2 parents 19b9353 + df7b177 commit 5b324d1

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
supportsTabletop: Boolean = supportsTabletop(),
6272
isTabletop: Boolean = false,
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

@@ -419,20 +467,34 @@ private fun VerticalControlsLayout(
419467
flipCameraButton: (@Composable (modifier: Modifier) -> Unit)?,
420468
zoomButton: (@Composable (modifier: Modifier) -> Unit)?,
421469
modifier: Modifier = Modifier,
470+
isCameraLeft: Boolean = false,
422471
) {
423472
Row(
424473
modifier = modifier,
425474
verticalAlignment = Alignment.CenterVertically,
475+
horizontalArrangement = if(isCameraLeft) Arrangement.End else Arrangement.Start,
426476
) {
427-
Column(horizontalAlignment = Alignment.CenterHorizontally) {
428-
Box(Modifier.weight(1f), contentAlignment = Alignment.Center) {
429-
if (flipCameraButton != null) flipCameraButton(Modifier)
477+
if(isCameraLeft){
478+
if (zoomButton != null) zoomButton(Modifier)
479+
Spacer(Modifier.width(12.dp))
480+
Column(horizontalAlignment = Alignment.CenterHorizontally) {
481+
Box(Modifier.weight(1f), contentAlignment = Alignment.Center) {
482+
if (flipCameraButton != null) flipCameraButton(Modifier)
483+
}
484+
captureButton(Modifier)
485+
Spacer(modifier = Modifier.weight(1f))
430486
}
431-
captureButton(Modifier)
432-
Spacer(modifier = Modifier.weight(1f))
487+
}else{
488+
Column(horizontalAlignment = Alignment.CenterHorizontally) {
489+
Box(Modifier.weight(1f), contentAlignment = Alignment.Center) {
490+
if (flipCameraButton != null) flipCameraButton(Modifier)
491+
}
492+
captureButton(Modifier)
493+
Spacer(modifier = Modifier.weight(1f))
494+
}
495+
Spacer(Modifier.width(12.dp))
496+
if (zoomButton != null) zoomButton(Modifier)
433497
}
434-
Spacer(Modifier.width(12.dp))
435-
if (zoomButton != null) zoomButton(Modifier)
436498
}
437499
}
438500

0 commit comments

Comments
 (0)