mirror of
https://github.com/SimpleMobileTools/Simple-Camera.git
synced 2025-06-27 09:02:59 +02:00
create an interface for some shared Preview functions
This commit is contained in:
@ -20,6 +20,7 @@ import com.simplemobiletools.camera.extensions.getMyCamera
|
|||||||
import com.simplemobiletools.camera.extensions.navBarHeight
|
import com.simplemobiletools.camera.extensions.navBarHeight
|
||||||
import com.simplemobiletools.camera.helpers.*
|
import com.simplemobiletools.camera.helpers.*
|
||||||
import com.simplemobiletools.camera.interfaces.MyCamera
|
import com.simplemobiletools.camera.interfaces.MyCamera
|
||||||
|
import com.simplemobiletools.camera.interfaces.MyPreview
|
||||||
import com.simplemobiletools.camera.views.FocusCircleView
|
import com.simplemobiletools.camera.views.FocusCircleView
|
||||||
import com.simplemobiletools.camera.views.PreviewCameraOne
|
import com.simplemobiletools.camera.views.PreviewCameraOne
|
||||||
import com.simplemobiletools.camera.views.PreviewCameraOne.PreviewListener
|
import com.simplemobiletools.camera.views.PreviewCameraOne.PreviewListener
|
||||||
@ -37,7 +38,7 @@ class MainActivity : SimpleActivity(), PreviewListener, PhotoProcessor.MediaSave
|
|||||||
private lateinit var mFadeHandler: Handler
|
private lateinit var mFadeHandler: Handler
|
||||||
private lateinit var mCameraImpl: MyCamera
|
private lateinit var mCameraImpl: MyCamera
|
||||||
|
|
||||||
private var mPreview: PreviewCameraOne? = null
|
private var mPreview: MyPreview? = null
|
||||||
private var mPreviewUri: Uri? = null
|
private var mPreviewUri: Uri? = null
|
||||||
private var mIsInPhotoMode = false
|
private var mIsInPhotoMode = false
|
||||||
private var mIsCameraAvailable = false
|
private var mIsCameraAvailable = false
|
||||||
@ -190,7 +191,7 @@ class MainActivity : SimpleActivity(), PreviewListener, PhotoProcessor.MediaSave
|
|||||||
(btn_holder.layoutParams as RelativeLayout.LayoutParams).setMargins(0, 0, 0, (navBarHeight + resources.getDimension(R.dimen.activity_margin)).toInt())
|
(btn_holder.layoutParams as RelativeLayout.LayoutParams).setMargins(0, 0, 0, (navBarHeight + resources.getDimension(R.dimen.activity_margin)).toInt())
|
||||||
|
|
||||||
mPreview = PreviewCameraOne(this, camera_surface_view, this)
|
mPreview = PreviewCameraOne(this, camera_surface_view, this)
|
||||||
view_holder.addView(mPreview)
|
view_holder.addView(mPreview as ViewGroup)
|
||||||
|
|
||||||
val imageDrawable = if (config.lastUsedCamera == mCameraImpl.getBackCameraId()) R.drawable.ic_camera_front else R.drawable.ic_camera_rear
|
val imageDrawable = if (config.lastUsedCamera == mCameraImpl.getBackCameraId()) R.drawable.ic_camera_front else R.drawable.ic_camera_rear
|
||||||
toggle_camera.setImageResource(imageDrawable)
|
toggle_camera.setImageResource(imageDrawable)
|
||||||
@ -312,7 +313,7 @@ class MainActivity : SimpleActivity(), PreviewListener, PhotoProcessor.MediaSave
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (mIsVideoCaptureIntent) {
|
if (mIsVideoCaptureIntent) {
|
||||||
mPreview?.trySwitchToVideo()
|
mPreview?.tryInitVideoMode()
|
||||||
}
|
}
|
||||||
|
|
||||||
mPreview?.setFlashlightState(FLASH_OFF)
|
mPreview?.setFlashlightState(FLASH_OFF)
|
||||||
@ -339,7 +340,7 @@ class MainActivity : SimpleActivity(), PreviewListener, PhotoProcessor.MediaSave
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun tryInitVideoMode() {
|
private fun tryInitVideoMode() {
|
||||||
if (mPreview?.initRecorder() == true) {
|
if (mPreview?.initVideoMode() == true) {
|
||||||
initVideoButtons()
|
initVideoButtons()
|
||||||
} else {
|
} else {
|
||||||
if (!mIsVideoCaptureIntent) {
|
if (!mIsVideoCaptureIntent) {
|
||||||
@ -443,7 +444,7 @@ class MainActivity : SimpleActivity(), PreviewListener, PhotoProcessor.MediaSave
|
|||||||
|
|
||||||
private fun resumeCameraItems() {
|
private fun resumeCameraItems() {
|
||||||
showToggleCameraIfNeeded()
|
showToggleCameraIfNeeded()
|
||||||
if (mPreview?.setCamera() == true) {
|
if (mPreview?.resumeCamera() == true) {
|
||||||
hideNavigationBarIcons()
|
hideNavigationBarIcons()
|
||||||
mPreview?.checkFlashlight()
|
mPreview?.checkFlashlight()
|
||||||
|
|
||||||
|
@ -0,0 +1,39 @@
|
|||||||
|
package com.simplemobiletools.camera.interfaces
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
|
|
||||||
|
interface MyPreview {
|
||||||
|
fun setTargetUri(uri: Uri)
|
||||||
|
|
||||||
|
fun setIsImageCaptureIntent(isImageCaptureIntent: Boolean)
|
||||||
|
|
||||||
|
fun setFlashlightState(state: Int)
|
||||||
|
|
||||||
|
fun setCamera(cameraId: Int): Boolean
|
||||||
|
|
||||||
|
fun getCameraState(): Int
|
||||||
|
|
||||||
|
fun releaseCamera()
|
||||||
|
|
||||||
|
fun showChangeResolutionDialog()
|
||||||
|
|
||||||
|
fun toggleFrontBackCamera()
|
||||||
|
|
||||||
|
fun toggleFlashlight()
|
||||||
|
|
||||||
|
fun tryTakePicture()
|
||||||
|
|
||||||
|
fun toggleRecording(): Boolean
|
||||||
|
|
||||||
|
fun tryInitVideoMode()
|
||||||
|
|
||||||
|
fun initPhotoMode()
|
||||||
|
|
||||||
|
fun initVideoMode(): Boolean
|
||||||
|
|
||||||
|
fun checkFlashlight()
|
||||||
|
|
||||||
|
fun deviceOrientationChanged()
|
||||||
|
|
||||||
|
fun resumeCamera(): Boolean
|
||||||
|
}
|
@ -25,13 +25,14 @@ import com.simplemobiletools.camera.dialogs.ChangeResolutionDialog
|
|||||||
import com.simplemobiletools.camera.extensions.*
|
import com.simplemobiletools.camera.extensions.*
|
||||||
import com.simplemobiletools.camera.helpers.*
|
import com.simplemobiletools.camera.helpers.*
|
||||||
import com.simplemobiletools.camera.implementations.MyCameraOneImpl
|
import com.simplemobiletools.camera.implementations.MyCameraOneImpl
|
||||||
|
import com.simplemobiletools.camera.interfaces.MyPreview
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
import com.simplemobiletools.commons.helpers.isJellyBean1Plus
|
import com.simplemobiletools.commons.helpers.isJellyBean1Plus
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback, MyPreview {
|
||||||
private val FOCUS_AREA_SIZE = 100
|
private val FOCUS_AREA_SIZE = 100
|
||||||
private val PHOTO_PREVIEW_LENGTH = 500L
|
private val PHOTO_PREVIEW_LENGTH = 500L
|
||||||
private val REFOCUS_PERIOD = 3000L
|
private val REFOCUS_PERIOD = 3000L
|
||||||
@ -112,15 +113,17 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun trySwitchToVideo() {
|
override fun tryInitVideoMode() {
|
||||||
if (mIsSurfaceCreated) {
|
if (mIsSurfaceCreated) {
|
||||||
initRecorder()
|
initVideoMode()
|
||||||
} else {
|
} else {
|
||||||
mSwitchToVideoAsap = true
|
mSwitchToVideoAsap = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setCamera(cameraId: Int = mCurrCameraId): Boolean {
|
override fun resumeCamera() = setCamera(mCurrCameraId)
|
||||||
|
|
||||||
|
override fun setCamera(cameraId: Int): Boolean {
|
||||||
mCurrCameraId = cameraId
|
mCurrCameraId = cameraId
|
||||||
val newCamera: Camera
|
val newCamera: Camera
|
||||||
try {
|
try {
|
||||||
@ -139,7 +142,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
|||||||
releaseCamera()
|
releaseCamera()
|
||||||
mCamera = newCamera
|
mCamera = newCamera
|
||||||
if (initCamera() && mIsInVideoMode) {
|
if (initCamera() && mIsInVideoMode) {
|
||||||
initRecorder()
|
initVideoMode()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mWasCameraPreviewSet && mIsSurfaceCreated) {
|
if (!mWasCameraPreviewSet && mIsSurfaceCreated) {
|
||||||
@ -189,7 +192,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
fun toggleFrontBackCamera() {
|
override fun toggleFrontBackCamera() {
|
||||||
mCurrCameraId = if (mCurrCameraId == mCameraImpl!!.getBackCameraId()) {
|
mCurrCameraId = if (mCurrCameraId == mCameraImpl!!.getBackCameraId()) {
|
||||||
mCameraImpl!!.getFrontCameraId()
|
mCameraImpl!!.getFrontCameraId()
|
||||||
} else {
|
} else {
|
||||||
@ -207,7 +210,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getCameraState() = mCameraState
|
override fun getCameraState() = mCameraState
|
||||||
|
|
||||||
private fun refreshPreview() {
|
private fun refreshPreview() {
|
||||||
mIsSixteenToNine = getSelectedResolution().isSixteenToNine()
|
mIsSixteenToNine = getSelectedResolution().isSixteenToNine()
|
||||||
@ -304,7 +307,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun tryTakePicture() {
|
override fun tryTakePicture() {
|
||||||
if (mConfig.focusBeforeCapture) {
|
if (mConfig.focusBeforeCapture) {
|
||||||
focusArea(true)
|
focusArea(true)
|
||||||
} else {
|
} else {
|
||||||
@ -483,7 +486,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
|||||||
}, REFOCUS_PERIOD)
|
}, REFOCUS_PERIOD)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun showChangeResolutionDialog() {
|
override fun showChangeResolutionDialog() {
|
||||||
if (mCamera != null) {
|
if (mCamera != null) {
|
||||||
val oldResolution = getSelectedResolution()
|
val oldResolution = getSelectedResolution()
|
||||||
ChangeResolutionDialog(mActivity!!, mConfig, mCamera!!) {
|
ChangeResolutionDialog(mActivity!!, mConfig, mCamera!!) {
|
||||||
@ -494,7 +497,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun releaseCamera() {
|
override fun releaseCamera() {
|
||||||
stopRecording()
|
stopRecording()
|
||||||
mCamera?.stopPreview()
|
mCamera?.stopPreview()
|
||||||
mCamera?.release()
|
mCamera?.release()
|
||||||
@ -509,7 +512,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
|||||||
mCamera?.setPreviewDisplay(mSurfaceHolder)
|
mCamera?.setPreviewDisplay(mSurfaceHolder)
|
||||||
|
|
||||||
if (mSwitchToVideoAsap)
|
if (mSwitchToVideoAsap)
|
||||||
initRecorder()
|
initVideoMode()
|
||||||
} catch (e: IOException) {
|
} catch (e: IOException) {
|
||||||
mActivity!!.showErrorToast(e)
|
mActivity!!.showErrorToast(e)
|
||||||
}
|
}
|
||||||
@ -519,7 +522,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
|||||||
mIsSurfaceCreated = true
|
mIsSurfaceCreated = true
|
||||||
|
|
||||||
if (mIsInVideoMode) {
|
if (mIsInVideoMode) {
|
||||||
initRecorder()
|
initVideoMode()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -617,17 +620,17 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setFlashlightState(state: Int) {
|
override fun setFlashlightState(state: Int) {
|
||||||
mFlashlightState = state
|
mFlashlightState = state
|
||||||
checkFlashlight()
|
checkFlashlight()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun toggleFlashlight() {
|
override fun toggleFlashlight() {
|
||||||
val newState = ++mFlashlightState % if (!mIsInVideoMode) 3 else 2
|
val newState = ++mFlashlightState % if (!mIsInVideoMode) 3 else 2
|
||||||
setFlashlightState(newState)
|
setFlashlightState(newState)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun checkFlashlight() {
|
override fun checkFlashlight() {
|
||||||
when (mFlashlightState) {
|
when (mFlashlightState) {
|
||||||
FLASH_OFF -> disableFlash()
|
FLASH_OFF -> disableFlash()
|
||||||
FLASH_ON -> enableFlash()
|
FLASH_ON -> enableFlash()
|
||||||
@ -660,7 +663,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
|||||||
}, 1000)
|
}, 1000)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun initPhotoMode() {
|
override fun initPhotoMode() {
|
||||||
stopRecording()
|
stopRecording()
|
||||||
cleanupRecorder()
|
cleanupRecorder()
|
||||||
mIsRecording = false
|
mIsRecording = false
|
||||||
@ -669,7 +672,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// VIDEO RECORDING
|
// VIDEO RECORDING
|
||||||
fun initRecorder(): Boolean {
|
override fun initVideoMode(): Boolean {
|
||||||
if (mCamera == null || mRecorder != null || !mIsSurfaceCreated) {
|
if (mCamera == null || mRecorder != null || !mIsSurfaceCreated) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -773,18 +776,18 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setTargetUri(uri: Uri) {
|
override fun setTargetUri(uri: Uri) {
|
||||||
mTargetUri = uri
|
mTargetUri = uri
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setIsImageCaptureIntent(isImageCaptureIntent: Boolean) {
|
override fun setIsImageCaptureIntent(isImageCaptureIntent: Boolean) {
|
||||||
mIsImageCaptureIntent = isImageCaptureIntent
|
mIsImageCaptureIntent = isImageCaptureIntent
|
||||||
}
|
}
|
||||||
|
|
||||||
fun toggleRecording(): Boolean {
|
override fun toggleRecording(): Boolean {
|
||||||
if (mIsRecording) {
|
if (mIsRecording) {
|
||||||
stopRecording()
|
stopRecording()
|
||||||
initRecorder()
|
initVideoMode()
|
||||||
} else {
|
} else {
|
||||||
startRecording()
|
startRecording()
|
||||||
}
|
}
|
||||||
@ -797,10 +800,10 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
|||||||
return (deviceRot + previewRot) % 360
|
return (deviceRot + previewRot) % 360
|
||||||
}
|
}
|
||||||
|
|
||||||
fun deviceOrientationChanged() {
|
override fun deviceOrientationChanged() {
|
||||||
if (mIsInVideoMode && !mIsRecording) {
|
if (mIsInVideoMode && !mIsRecording) {
|
||||||
mRecorder = null
|
mRecorder = null
|
||||||
initRecorder()
|
initVideoMode()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user