create an interface for some shared Preview functions

This commit is contained in:
tibbi
2018-05-28 19:30:31 +02:00
parent 3bc54c2e5f
commit 0d71a4492b
3 changed files with 71 additions and 28 deletions

View File

@ -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()

View File

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

View File

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