diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/extensions/CameraSelector.kt b/app/src/main/kotlin/com/simplemobiletools/camera/extensions/CameraSelector.kt new file mode 100644 index 00000000..0b98bca4 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/camera/extensions/CameraSelector.kt @@ -0,0 +1,11 @@ +package com.simplemobiletools.camera.extensions + +import androidx.camera.core.CameraSelector + +fun CameraSelector.toLensFacing(): Int { + return if (this == CameraSelector.DEFAULT_FRONT_CAMERA) { + CameraSelector.LENS_FACING_FRONT + } else { + CameraSelector.LENS_FACING_BACK + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/extensions/Int.kt b/app/src/main/kotlin/com/simplemobiletools/camera/extensions/Int.kt index d4b445ab..4cf4caf7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/camera/extensions/Int.kt +++ b/app/src/main/kotlin/com/simplemobiletools/camera/extensions/Int.kt @@ -1,5 +1,6 @@ package com.simplemobiletools.camera.extensions +import androidx.camera.core.CameraSelector import androidx.camera.core.ImageCapture import com.simplemobiletools.camera.helpers.FLASH_AUTO import com.simplemobiletools.camera.helpers.FLASH_OFF @@ -23,3 +24,12 @@ fun Int.toAppFlashMode(): Int { else -> throw IllegalArgumentException("Unknown mode: $this") } } + +fun Int.toCameraSelector(): CameraSelector { + return if (this == CameraSelector.LENS_FACING_FRONT) { + CameraSelector.DEFAULT_FRONT_CAMERA + } else { + CameraSelector.DEFAULT_BACK_CAMERA + } +} + diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/Config.kt index ca317988..5ede2c12 100644 --- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/Config.kt @@ -2,6 +2,7 @@ package com.simplemobiletools.camera.helpers import android.content.Context import android.os.Environment +import androidx.camera.core.CameraSelector import com.simplemobiletools.commons.helpers.BaseConfig import java.io.File @@ -37,6 +38,10 @@ class Config(context: Context) : BaseConfig(context) { get() = prefs.getString(LAST_USED_CAMERA, "0")!! set(cameraId) = prefs.edit().putString(LAST_USED_CAMERA, cameraId).apply() + var lastUsedCameraLens: Int + get() = prefs.getInt(LAST_USED_CAMERA_LENS, CameraSelector.LENS_FACING_BACK) + set(lens) = prefs.edit().putInt(LAST_USED_CAMERA_LENS, lens).apply() + var initPhotoMode: Boolean get() = prefs.getBoolean(INIT_PHOTO_MODE, true) set(initPhotoMode) = prefs.edit().putBoolean(INIT_PHOTO_MODE, initPhotoMode).apply() diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/Constants.kt index b68dff71..0b543b7c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/Constants.kt @@ -10,6 +10,7 @@ const val SOUND = "sound" const val VOLUME_BUTTONS_AS_SHUTTER = "volume_buttons_as_shutter" const val FLIP_PHOTOS = "flip_photos" const val LAST_USED_CAMERA = "last_used_camera_2" +const val LAST_USED_CAMERA_LENS = "last_used_camera_lens" const val FLASHLIGHT_STATE = "flashlight_state" const val INIT_PHOTO_MODE = "init_photo_mode" const val BACK_PHOTO_RESOLUTION_INDEX = "back_photo_resolution_index_2" diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreview.kt b/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreview.kt index e3c23c16..7504c8e5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreview.kt +++ b/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreview.kt @@ -43,10 +43,11 @@ import com.bumptech.glide.load.ImageHeaderParser.UNKNOWN_ORIENTATION import com.simplemobiletools.camera.R import com.simplemobiletools.camera.extensions.config import com.simplemobiletools.camera.extensions.toAppFlashMode +import com.simplemobiletools.camera.extensions.toCameraSelector import com.simplemobiletools.camera.extensions.toCameraXFlashMode +import com.simplemobiletools.camera.extensions.toLensFacing import com.simplemobiletools.camera.helpers.MediaSoundHelper import com.simplemobiletools.camera.helpers.PinchToZoomOnScaleGestureListener -import com.simplemobiletools.camera.helpers.ZoomCalculator import com.simplemobiletools.camera.interfaces.MyPreview import com.simplemobiletools.commons.extensions.showErrorToast import com.simplemobiletools.commons.extensions.toast @@ -110,7 +111,7 @@ class CameraXPreview( get() = cameraProvider?.availableCameraInfos?.size ?: 0 private val frontCameraInUse: Boolean - get() = lensFacing == CameraSelector.DEFAULT_FRONT_CAMERA + get() = cameraSelector == CameraSelector.DEFAULT_FRONT_CAMERA private var preview: Preview? = null private var cameraProvider: ProcessCameraProvider? = null @@ -119,7 +120,7 @@ class CameraXPreview( private var camera: Camera? = null private var currentRecording: Recording? = null private var recordingState: VideoRecordEvent? = null - private var lensFacing = CameraSelector.DEFAULT_BACK_CAMERA + private var cameraSelector = config.lastUsedCameraLens.toCameraSelector() private var flashMode = config.flashlightState.toCameraXFlashMode() private var isPhotoCapture = config.initPhotoMode @@ -161,7 +162,7 @@ class CameraXPreview( cameraProvider.unbindAll() camera = cameraProvider.bindToLifecycle( activity, - lensFacing, + cameraSelector, preview, captureUseCase, ) @@ -332,11 +333,13 @@ class CameraXPreview( } override fun toggleFrontBackCamera() { - lensFacing = if (frontCameraInUse) { + val newCameraSelector = if (frontCameraInUse) { CameraSelector.DEFAULT_BACK_CAMERA } else { CameraSelector.DEFAULT_FRONT_CAMERA } + cameraSelector = newCameraSelector + config.lastUsedCameraLens = newCameraSelector.toLensFacing() startCamera() }