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.helpers.*
|
||||
import com.simplemobiletools.camera.interfaces.MyCamera
|
||||
import com.simplemobiletools.camera.interfaces.MyPreview
|
||||
import com.simplemobiletools.camera.views.FocusCircleView
|
||||
import com.simplemobiletools.camera.views.PreviewCameraOne
|
||||
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 mCameraImpl: MyCamera
|
||||
|
||||
private var mPreview: PreviewCameraOne? = null
|
||||
private var mPreview: MyPreview? = null
|
||||
private var mPreviewUri: Uri? = null
|
||||
private var mIsInPhotoMode = 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())
|
||||
|
||||
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
|
||||
toggle_camera.setImageResource(imageDrawable)
|
||||
@ -312,7 +313,7 @@ class MainActivity : SimpleActivity(), PreviewListener, PhotoProcessor.MediaSave
|
||||
}
|
||||
|
||||
if (mIsVideoCaptureIntent) {
|
||||
mPreview?.trySwitchToVideo()
|
||||
mPreview?.tryInitVideoMode()
|
||||
}
|
||||
|
||||
mPreview?.setFlashlightState(FLASH_OFF)
|
||||
@ -339,7 +340,7 @@ class MainActivity : SimpleActivity(), PreviewListener, PhotoProcessor.MediaSave
|
||||
}
|
||||
|
||||
private fun tryInitVideoMode() {
|
||||
if (mPreview?.initRecorder() == true) {
|
||||
if (mPreview?.initVideoMode() == true) {
|
||||
initVideoButtons()
|
||||
} else {
|
||||
if (!mIsVideoCaptureIntent) {
|
||||
@ -443,7 +444,7 @@ class MainActivity : SimpleActivity(), PreviewListener, PhotoProcessor.MediaSave
|
||||
|
||||
private fun resumeCameraItems() {
|
||||
showToggleCameraIfNeeded()
|
||||
if (mPreview?.setCamera() == true) {
|
||||
if (mPreview?.resumeCamera() == true) {
|
||||
hideNavigationBarIcons()
|
||||
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.helpers.*
|
||||
import com.simplemobiletools.camera.implementations.MyCameraOneImpl
|
||||
import com.simplemobiletools.camera.interfaces.MyPreview
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.isJellyBean1Plus
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
import java.util.*
|
||||
|
||||
class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
||||
class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback, MyPreview {
|
||||
private val FOCUS_AREA_SIZE = 100
|
||||
private val PHOTO_PREVIEW_LENGTH = 500L
|
||||
private val REFOCUS_PERIOD = 3000L
|
||||
@ -112,15 +113,17 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
||||
}
|
||||
}
|
||||
|
||||
fun trySwitchToVideo() {
|
||||
override fun tryInitVideoMode() {
|
||||
if (mIsSurfaceCreated) {
|
||||
initRecorder()
|
||||
initVideoMode()
|
||||
} else {
|
||||
mSwitchToVideoAsap = true
|
||||
}
|
||||
}
|
||||
|
||||
fun setCamera(cameraId: Int = mCurrCameraId): Boolean {
|
||||
override fun resumeCamera() = setCamera(mCurrCameraId)
|
||||
|
||||
override fun setCamera(cameraId: Int): Boolean {
|
||||
mCurrCameraId = cameraId
|
||||
val newCamera: Camera
|
||||
try {
|
||||
@ -139,7 +142,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
||||
releaseCamera()
|
||||
mCamera = newCamera
|
||||
if (initCamera() && mIsInVideoMode) {
|
||||
initRecorder()
|
||||
initVideoMode()
|
||||
}
|
||||
|
||||
if (!mWasCameraPreviewSet && mIsSurfaceCreated) {
|
||||
@ -189,7 +192,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
||||
return true
|
||||
}
|
||||
|
||||
fun toggleFrontBackCamera() {
|
||||
override fun toggleFrontBackCamera() {
|
||||
mCurrCameraId = if (mCurrCameraId == mCameraImpl!!.getBackCameraId()) {
|
||||
mCameraImpl!!.getFrontCameraId()
|
||||
} else {
|
||||
@ -207,7 +210,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
||||
}
|
||||
}
|
||||
|
||||
fun getCameraState() = mCameraState
|
||||
override fun getCameraState() = mCameraState
|
||||
|
||||
private fun refreshPreview() {
|
||||
mIsSixteenToNine = getSelectedResolution().isSixteenToNine()
|
||||
@ -304,7 +307,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
||||
})
|
||||
}
|
||||
|
||||
fun tryTakePicture() {
|
||||
override fun tryTakePicture() {
|
||||
if (mConfig.focusBeforeCapture) {
|
||||
focusArea(true)
|
||||
} else {
|
||||
@ -483,7 +486,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
||||
}, REFOCUS_PERIOD)
|
||||
}
|
||||
|
||||
fun showChangeResolutionDialog() {
|
||||
override fun showChangeResolutionDialog() {
|
||||
if (mCamera != null) {
|
||||
val oldResolution = getSelectedResolution()
|
||||
ChangeResolutionDialog(mActivity!!, mConfig, mCamera!!) {
|
||||
@ -494,7 +497,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
||||
}
|
||||
}
|
||||
|
||||
fun releaseCamera() {
|
||||
override fun releaseCamera() {
|
||||
stopRecording()
|
||||
mCamera?.stopPreview()
|
||||
mCamera?.release()
|
||||
@ -509,7 +512,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
||||
mCamera?.setPreviewDisplay(mSurfaceHolder)
|
||||
|
||||
if (mSwitchToVideoAsap)
|
||||
initRecorder()
|
||||
initVideoMode()
|
||||
} catch (e: IOException) {
|
||||
mActivity!!.showErrorToast(e)
|
||||
}
|
||||
@ -519,7 +522,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
||||
mIsSurfaceCreated = true
|
||||
|
||||
if (mIsInVideoMode) {
|
||||
initRecorder()
|
||||
initVideoMode()
|
||||
}
|
||||
}
|
||||
|
||||
@ -617,17 +620,17 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
||||
}
|
||||
}
|
||||
|
||||
fun setFlashlightState(state: Int) {
|
||||
override fun setFlashlightState(state: Int) {
|
||||
mFlashlightState = state
|
||||
checkFlashlight()
|
||||
}
|
||||
|
||||
fun toggleFlashlight() {
|
||||
override fun toggleFlashlight() {
|
||||
val newState = ++mFlashlightState % if (!mIsInVideoMode) 3 else 2
|
||||
setFlashlightState(newState)
|
||||
}
|
||||
|
||||
fun checkFlashlight() {
|
||||
override fun checkFlashlight() {
|
||||
when (mFlashlightState) {
|
||||
FLASH_OFF -> disableFlash()
|
||||
FLASH_ON -> enableFlash()
|
||||
@ -660,7 +663,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
||||
}, 1000)
|
||||
}
|
||||
|
||||
fun initPhotoMode() {
|
||||
override fun initPhotoMode() {
|
||||
stopRecording()
|
||||
cleanupRecorder()
|
||||
mIsRecording = false
|
||||
@ -669,7 +672,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
||||
}
|
||||
|
||||
// VIDEO RECORDING
|
||||
fun initRecorder(): Boolean {
|
||||
override fun initVideoMode(): Boolean {
|
||||
if (mCamera == null || mRecorder != null || !mIsSurfaceCreated) {
|
||||
return false
|
||||
}
|
||||
@ -773,18 +776,18 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
||||
}
|
||||
}
|
||||
|
||||
fun setTargetUri(uri: Uri) {
|
||||
override fun setTargetUri(uri: Uri) {
|
||||
mTargetUri = uri
|
||||
}
|
||||
|
||||
fun setIsImageCaptureIntent(isImageCaptureIntent: Boolean) {
|
||||
override fun setIsImageCaptureIntent(isImageCaptureIntent: Boolean) {
|
||||
mIsImageCaptureIntent = isImageCaptureIntent
|
||||
}
|
||||
|
||||
fun toggleRecording(): Boolean {
|
||||
override fun toggleRecording(): Boolean {
|
||||
if (mIsRecording) {
|
||||
stopRecording()
|
||||
initRecorder()
|
||||
initVideoMode()
|
||||
} else {
|
||||
startRecording()
|
||||
}
|
||||
@ -797,10 +800,10 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback {
|
||||
return (deviceRot + previewRot) % 360
|
||||
}
|
||||
|
||||
fun deviceOrientationChanged() {
|
||||
override fun deviceOrientationChanged() {
|
||||
if (mIsInVideoMode && !mIsRecording) {
|
||||
mRecorder = null
|
||||
initRecorder()
|
||||
initVideoMode()
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user