store/restore last used camera lens

This commit is contained in:
darthpaul 2022-06-25 23:21:51 +01:00
parent fe3710510d
commit 916121ffc9
5 changed files with 35 additions and 5 deletions

View File

@ -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
}
}

View File

@ -1,5 +1,6 @@
package com.simplemobiletools.camera.extensions package com.simplemobiletools.camera.extensions
import androidx.camera.core.CameraSelector
import androidx.camera.core.ImageCapture import androidx.camera.core.ImageCapture
import com.simplemobiletools.camera.helpers.FLASH_AUTO import com.simplemobiletools.camera.helpers.FLASH_AUTO
import com.simplemobiletools.camera.helpers.FLASH_OFF import com.simplemobiletools.camera.helpers.FLASH_OFF
@ -23,3 +24,12 @@ fun Int.toAppFlashMode(): Int {
else -> throw IllegalArgumentException("Unknown mode: $this") 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
}
}

View File

@ -2,6 +2,7 @@ package com.simplemobiletools.camera.helpers
import android.content.Context import android.content.Context
import android.os.Environment import android.os.Environment
import androidx.camera.core.CameraSelector
import com.simplemobiletools.commons.helpers.BaseConfig import com.simplemobiletools.commons.helpers.BaseConfig
import java.io.File import java.io.File
@ -37,6 +38,10 @@ class Config(context: Context) : BaseConfig(context) {
get() = prefs.getString(LAST_USED_CAMERA, "0")!! get() = prefs.getString(LAST_USED_CAMERA, "0")!!
set(cameraId) = prefs.edit().putString(LAST_USED_CAMERA, cameraId).apply() 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 var initPhotoMode: Boolean
get() = prefs.getBoolean(INIT_PHOTO_MODE, true) get() = prefs.getBoolean(INIT_PHOTO_MODE, true)
set(initPhotoMode) = prefs.edit().putBoolean(INIT_PHOTO_MODE, initPhotoMode).apply() set(initPhotoMode) = prefs.edit().putBoolean(INIT_PHOTO_MODE, initPhotoMode).apply()

View File

@ -10,6 +10,7 @@ const val SOUND = "sound"
const val VOLUME_BUTTONS_AS_SHUTTER = "volume_buttons_as_shutter" const val VOLUME_BUTTONS_AS_SHUTTER = "volume_buttons_as_shutter"
const val FLIP_PHOTOS = "flip_photos" const val FLIP_PHOTOS = "flip_photos"
const val LAST_USED_CAMERA = "last_used_camera_2" 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 FLASHLIGHT_STATE = "flashlight_state"
const val INIT_PHOTO_MODE = "init_photo_mode" const val INIT_PHOTO_MODE = "init_photo_mode"
const val BACK_PHOTO_RESOLUTION_INDEX = "back_photo_resolution_index_2" const val BACK_PHOTO_RESOLUTION_INDEX = "back_photo_resolution_index_2"

View File

@ -43,10 +43,11 @@ import com.bumptech.glide.load.ImageHeaderParser.UNKNOWN_ORIENTATION
import com.simplemobiletools.camera.R import com.simplemobiletools.camera.R
import com.simplemobiletools.camera.extensions.config import com.simplemobiletools.camera.extensions.config
import com.simplemobiletools.camera.extensions.toAppFlashMode import com.simplemobiletools.camera.extensions.toAppFlashMode
import com.simplemobiletools.camera.extensions.toCameraSelector
import com.simplemobiletools.camera.extensions.toCameraXFlashMode import com.simplemobiletools.camera.extensions.toCameraXFlashMode
import com.simplemobiletools.camera.extensions.toLensFacing
import com.simplemobiletools.camera.helpers.MediaSoundHelper import com.simplemobiletools.camera.helpers.MediaSoundHelper
import com.simplemobiletools.camera.helpers.PinchToZoomOnScaleGestureListener import com.simplemobiletools.camera.helpers.PinchToZoomOnScaleGestureListener
import com.simplemobiletools.camera.helpers.ZoomCalculator
import com.simplemobiletools.camera.interfaces.MyPreview import com.simplemobiletools.camera.interfaces.MyPreview
import com.simplemobiletools.commons.extensions.showErrorToast import com.simplemobiletools.commons.extensions.showErrorToast
import com.simplemobiletools.commons.extensions.toast import com.simplemobiletools.commons.extensions.toast
@ -110,7 +111,7 @@ class CameraXPreview(
get() = cameraProvider?.availableCameraInfos?.size ?: 0 get() = cameraProvider?.availableCameraInfos?.size ?: 0
private val frontCameraInUse: Boolean private val frontCameraInUse: Boolean
get() = lensFacing == CameraSelector.DEFAULT_FRONT_CAMERA get() = cameraSelector == CameraSelector.DEFAULT_FRONT_CAMERA
private var preview: Preview? = null private var preview: Preview? = null
private var cameraProvider: ProcessCameraProvider? = null private var cameraProvider: ProcessCameraProvider? = null
@ -119,7 +120,7 @@ class CameraXPreview(
private var camera: Camera? = null private var camera: Camera? = null
private var currentRecording: Recording? = null private var currentRecording: Recording? = null
private var recordingState: VideoRecordEvent? = 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 flashMode = config.flashlightState.toCameraXFlashMode()
private var isPhotoCapture = config.initPhotoMode private var isPhotoCapture = config.initPhotoMode
@ -161,7 +162,7 @@ class CameraXPreview(
cameraProvider.unbindAll() cameraProvider.unbindAll()
camera = cameraProvider.bindToLifecycle( camera = cameraProvider.bindToLifecycle(
activity, activity,
lensFacing, cameraSelector,
preview, preview,
captureUseCase, captureUseCase,
) )
@ -332,11 +333,13 @@ class CameraXPreview(
} }
override fun toggleFrontBackCamera() { override fun toggleFrontBackCamera() {
lensFacing = if (frontCameraInUse) { val newCameraSelector = if (frontCameraInUse) {
CameraSelector.DEFAULT_BACK_CAMERA CameraSelector.DEFAULT_BACK_CAMERA
} else { } else {
CameraSelector.DEFAULT_FRONT_CAMERA CameraSelector.DEFAULT_FRONT_CAMERA
} }
cameraSelector = newCameraSelector
config.lastUsedCameraLens = newCameraSelector.toLensFacing()
startCamera() startCamera()
} }