diff options
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.kt | 73 |
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) + } + } + } } |