summaryrefslogtreecommitdiff
path: root/data/settings/src/main/java/com/google/jetpackcamera/settings/LocalSettingsRepository.kt
diff options
context:
space:
mode:
Diffstat (limited to 'data/settings/src/main/java/com/google/jetpackcamera/settings/LocalSettingsRepository.kt')
-rw-r--r--data/settings/src/main/java/com/google/jetpackcamera/settings/LocalSettingsRepository.kt73
1 files changed, 72 insertions, 1 deletions
diff --git a/data/settings/src/main/java/com/google/jetpackcamera/settings/LocalSettingsRepository.kt b/data/settings/src/main/java/com/google/jetpackcamera/settings/LocalSettingsRepository.kt
index eab14ae..f54a1a9 100644
--- a/data/settings/src/main/java/com/google/jetpackcamera/settings/LocalSettingsRepository.kt
+++ b/data/settings/src/main/java/com/google/jetpackcamera/settings/LocalSettingsRepository.kt
@@ -20,11 +20,15 @@ import com.google.jetpackcamera.settings.AspectRatio as AspectRatioProto
import com.google.jetpackcamera.settings.CaptureMode as CaptureModeProto
import com.google.jetpackcamera.settings.DarkMode as DarkModeProto
import com.google.jetpackcamera.settings.FlashMode as FlashModeProto
+import com.google.jetpackcamera.settings.PreviewStabilization as PreviewStabilizationProto
+import com.google.jetpackcamera.settings.VideoStabilization as VideoStabilizationProto
import com.google.jetpackcamera.settings.model.AspectRatio
import com.google.jetpackcamera.settings.model.CameraAppSettings
import com.google.jetpackcamera.settings.model.CaptureMode
import com.google.jetpackcamera.settings.model.DarkMode
import com.google.jetpackcamera.settings.model.FlashMode
+import com.google.jetpackcamera.settings.model.Stabilization
+import com.google.jetpackcamera.settings.model.SupportedStabilizationMode
import javax.inject.Inject
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.map
@@ -55,6 +59,12 @@ class LocalSettingsRepository @Inject constructor(
isFrontCameraAvailable = it.frontCameraAvailable,
isBackCameraAvailable = it.backCameraAvailable,
aspectRatio = AspectRatio.fromProto(it.aspectRatioStatus),
+ previewStabilization = Stabilization.fromProto(it.stabilizePreview),
+ videoCaptureStabilization = Stabilization.fromProto(it.stabilizeVideo),
+ supportedStabilizationModes = getSupportedStabilization(
+ previewSupport = it.stabilizePreviewSupported,
+ videoSupport = it.stabilizeVideoSupported
+ ),
captureMode = when (it.captureModeStatus) {
CaptureModeProto.CAPTURE_MODE_SINGLE_STREAM -> CaptureMode.SINGLE_STREAM
CaptureModeProto.CAPTURE_MODE_MULTI_STREAM -> CaptureMode.MULTI_STREAM
@@ -106,8 +116,13 @@ class LocalSettingsRepository @Inject constructor(
// if a front or back lens is not present, the option to change
// the direction of the camera should be disabled
jcaSettings.updateData { currentSettings ->
+ val newLensFacing = if (currentSettings.defaultFrontCamera) {
+ frontLensAvailable
+ } else {
+ false
+ }
currentSettings.toBuilder()
- .setDefaultFrontCamera(frontLensAvailable)
+ .setDefaultFrontCamera(newLensFacing)
.setFrontCameraAvailable(frontLensAvailable)
.setBackCameraAvailable(backLensAvailable)
.build()
@@ -138,4 +153,60 @@ class LocalSettingsRepository @Inject constructor(
.build()
}
}
+
+ override suspend fun updatePreviewStabilization(stabilization: Stabilization) {
+ val newStatus = when (stabilization) {
+ Stabilization.ON -> PreviewStabilizationProto.PREVIEW_STABILIZATION_ON
+ Stabilization.OFF -> PreviewStabilizationProto.PREVIEW_STABILIZATION_OFF
+ else -> PreviewStabilizationProto.PREVIEW_STABILIZATION_UNDEFINED
+ }
+ jcaSettings.updateData { currentSettings ->
+ currentSettings.toBuilder()
+ .setStabilizePreview(newStatus)
+ .build()
+ }
+ }
+
+ override suspend fun updateVideoStabilization(stabilization: Stabilization) {
+ val newStatus = when (stabilization) {
+ Stabilization.ON -> VideoStabilizationProto.VIDEO_STABILIZATION_ON
+ Stabilization.OFF -> VideoStabilizationProto.VIDEO_STABILIZATION_OFF
+ else -> VideoStabilizationProto.VIDEO_STABILIZATION_UNDEFINED
+ }
+ jcaSettings.updateData { currentSettings ->
+ currentSettings.toBuilder()
+ .setStabilizeVideo(newStatus)
+ .build()
+ }
+ }
+
+ override suspend fun updateVideoStabilizationSupported(isSupported: Boolean) {
+ jcaSettings.updateData { currentSettings ->
+ currentSettings.toBuilder()
+ .setStabilizeVideoSupported(isSupported)
+ .build()
+ }
+ }
+
+ override suspend fun updatePreviewStabilizationSupported(isSupported: Boolean) {
+ jcaSettings.updateData { currentSettings ->
+ currentSettings.toBuilder()
+ .setStabilizeVideoSupported(isSupported)
+ .build()
+ }
+ }
+
+ private fun getSupportedStabilization(
+ previewSupport: Boolean,
+ videoSupport: Boolean
+ ): List<SupportedStabilizationMode> {
+ return buildList {
+ if (previewSupport && videoSupport) {
+ add(SupportedStabilizationMode.ON)
+ }
+ if (!previewSupport && videoSupport) {
+ add(SupportedStabilizationMode.HIGH_QUALITY)
+ }
+ }
+ }
}