diff --git a/feature/camera/src/main/java/org/signal/camera/CameraScreen.kt b/feature/camera/src/main/java/org/signal/camera/CameraScreen.kt index c63d1deaec..7be94cbbf7 100644 --- a/feature/camera/src/main/java/org/signal/camera/CameraScreen.kt +++ b/feature/camera/src/main/java/org/signal/camera/CameraScreen.kt @@ -4,6 +4,7 @@ import androidx.camera.compose.CameraXViewfinder import androidx.camera.core.SurfaceRequest import androidx.camera.lifecycle.ProcessCameraProvider import androidx.camera.viewfinder.compose.MutableCoordinateTransformer +import androidx.camera.viewfinder.core.ImplementationMode import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.Animatable import androidx.compose.animation.core.Spring @@ -82,6 +83,7 @@ fun CameraScreen( enableQrScanning: Boolean = false, fillViewport: Boolean = false, landscape: Boolean? = null, + implementationMode: ImplementationMode = ImplementationMode.EXTERNAL, content: @Composable BoxScope.() -> Unit = {} ) { val context = LocalContext.current @@ -147,6 +149,7 @@ fun CameraScreen( val currentSurfaceRequest = surfaceRequest!! CameraXViewfinder( + implementationMode = implementationMode, surfaceRequest = currentSurfaceRequest, coordinateTransformer = coordinateTransformer, contentScale = if (fillViewport) ContentScale.Crop else ContentScale.Fit, diff --git a/feature/camera/src/main/java/org/signal/camera/hud/CaptureButton.kt b/feature/camera/src/main/java/org/signal/camera/hud/CaptureButton.kt index 03413d61de..0436ea111c 100644 --- a/feature/camera/src/main/java/org/signal/camera/hud/CaptureButton.kt +++ b/feature/camera/src/main/java/org/signal/camera/hud/CaptureButton.kt @@ -42,9 +42,6 @@ private object CaptureButtonColors { /** Background fill: custom control color (0xCC333333) */ val Background = Color(0xCC333333) - /** Outer ring stroke: pure white (0xFFFFFFFF) */ - val Arc = Color.White - /** Inner fill: pure white (0xFFFFFFFF) */ val CaptureFill = Color.White diff --git a/feature/camera/src/main/res/values/colors.xml b/feature/camera/src/main/res/values/colors.xml index 403a097165..75c5a5db72 100644 --- a/feature/camera/src/main/res/values/colors.xml +++ b/feature/camera/src/main/res/values/colors.xml @@ -4,6 +4,6 @@ --> - #4D333333 + #CC333333 #FFD92F20 \ No newline at end of file diff --git a/feature/media-send/build.gradle.kts b/feature/media-send/build.gradle.kts index 492097b9eb..e24b5da154 100644 --- a/feature/media-send/build.gradle.kts +++ b/feature/media-send/build.gradle.kts @@ -70,6 +70,7 @@ dependencies { // CameraX implementation(libs.androidx.camera.core) + implementation(libs.androidx.camera.compose) // Testing testImplementation(testFixtures(project(":core:ui"))) diff --git a/feature/media-send/src/main/java/org/signal/mediasend/screens/capture/CameraXFragment.kt b/feature/media-send/src/main/java/org/signal/mediasend/screens/capture/CameraXFragment.kt index 69c3fdf514..e8eb712168 100644 --- a/feature/media-send/src/main/java/org/signal/mediasend/screens/capture/CameraXFragment.kt +++ b/feature/media-send/src/main/java/org/signal/mediasend/screens/capture/CameraXFragment.kt @@ -18,6 +18,7 @@ import android.system.Os import android.system.OsConstants import android.widget.Toast import androidx.camera.core.CameraSelector +import androidx.camera.viewfinder.core.ImplementationMode import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.tween import androidx.compose.animation.fadeIn @@ -461,7 +462,8 @@ fun CameraXScreen( onCheckPermissions: () -> Unit, hasCameraPermission: () -> Boolean, onRequestMicPermission: () -> Unit, - storiesEnabled: Boolean = CameraDependencies.isStoriesFeatureEnabled() + storiesEnabled: Boolean = CameraDependencies.isStoriesFeatureEnabled(), + implementationMode: ImplementationMode = ImplementationMode.EXTERNAL ) { val context = LocalContext.current @@ -634,6 +636,7 @@ fun CameraXScreen( captureMode = captureMode, enableQrScanning = state.isQrScanEnabled, landscape = cameraState.isLandscape, + implementationMode = implementationMode, modifier = Modifier.padding(bottom = viewportBottomMargin) ) { if (isPortraitPhone) { diff --git a/feature/media-send/src/main/java/org/signal/mediasend/screens/capture/MediaCameraCaptureScreen.kt b/feature/media-send/src/main/java/org/signal/mediasend/screens/capture/MediaCameraCaptureScreen.kt index 1ea5525056..ad81368455 100644 --- a/feature/media-send/src/main/java/org/signal/mediasend/screens/capture/MediaCameraCaptureScreen.kt +++ b/feature/media-send/src/main/java/org/signal/mediasend/screens/capture/MediaCameraCaptureScreen.kt @@ -5,6 +5,7 @@ package org.signal.mediasend.screens.capture +import androidx.camera.viewfinder.core.ImplementationMode import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.tooling.preview.Preview @@ -40,7 +41,8 @@ fun MediaCameraCaptureScreen( onCheckPermissions = permissions.requestCapturePermissions, onRequestMicPermission = permissions.requestMicrophonePermission, hasCameraPermission = permissions.hasCameraPermission, - storiesEnabled = state.storiesEnabled + storiesEnabled = state.storiesEnabled, + implementationMode = ImplementationMode.EMBEDDED ) } diff --git a/feature/media-send/src/main/java/org/signal/mediasend/screens/capture/MediaCaptureScreen.kt b/feature/media-send/src/main/java/org/signal/mediasend/screens/capture/MediaCaptureScreen.kt index 16492dfc01..03121da5c2 100644 --- a/feature/media-send/src/main/java/org/signal/mediasend/screens/capture/MediaCaptureScreen.kt +++ b/feature/media-send/src/main/java/org/signal/mediasend/screens/capture/MediaCaptureScreen.kt @@ -5,12 +5,7 @@ package org.signal.mediasend.screens.capture -import androidx.compose.animation.AnimatedContent -import androidx.compose.animation.ContentTransform -import androidx.compose.animation.EnterTransition -import androidx.compose.animation.ExitTransition -import androidx.compose.animation.slideInHorizontally -import androidx.compose.animation.slideOutHorizontally +import androidx.compose.animation.Crossfade import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement.spacedBy @@ -82,23 +77,8 @@ fun MediaCaptureScreen( .fillMaxSize() .background(color = Color.Black) ) { - AnimatedContent( - targetState = selectedCaptureScreen, - transitionSpec = { - if (targetState is MediaSendRoute.Capture.TextStory) { - ContentTransform( - targetContentEnter = slideInHorizontally { width -> width }, - initialContentExit = ExitTransition.KeepUntilTransitionsFinished, - targetContentZIndex = TEXT_STORY_Z_INDEX - ) - } else { - ContentTransform( - targetContentEnter = EnterTransition.None, - initialContentExit = slideOutHorizontally { width -> width }, - targetContentZIndex = CAMERA_Z_INDEX - ) - } - } + Crossfade( + targetState = selectedCaptureScreen ) { captureScreen -> when (captureScreen) { is MediaSendRoute.Capture.TextStory -> textStoryEditorSlot()